@beamimpact/web-sdk 1.53.1 → 1.54.5
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.
- package/dist/chunks/_share-dialog-dependencies-DQlABdY4.esm.js +2 -0
- package/dist/chunks/{_share-dialog-dependencies-Cirjl8zP.esm.js.map → _share-dialog-dependencies-DQlABdY4.esm.js.map} +1 -1
- package/dist/chunks/_share-dialog-dependencies-Dg-9riak.esm.js +2 -0
- package/dist/chunks/{_share-dialog-dependencies-DElW9Yip.esm.js.map → _share-dialog-dependencies-Dg-9riak.esm.js.map} +1 -1
- package/dist/chunks/{events-BMTcECV9.esm.d.ts → events-C55rozsO.esm.d.ts} +33 -2
- package/dist/chunks/events-Dki0ka4F.esm.js +2 -0
- package/dist/chunks/{events-BohmT6Lp.esm.js.map → events-Dki0ka4F.esm.js.map} +1 -1
- package/dist/chunks/{index-C4P0R2un.esm.d.ts → index-B6EWjlNI.esm.d.ts} +1 -1
- package/dist/chunks/index-B9cvR1bA.esm.js +2 -0
- package/dist/chunks/index-B9cvR1bA.esm.js.map +1 -0
- package/dist/chunks/index-BBU6h_u0.esm.js +2 -0
- package/dist/chunks/index-BBU6h_u0.esm.js.map +1 -0
- package/dist/chunks/index-BJWJMzYy.esm.js +2 -0
- package/dist/chunks/index-BJWJMzYy.esm.js.map +1 -0
- package/dist/chunks/index-BXVkhkpJ.esm.js +2 -0
- package/dist/chunks/index-BXVkhkpJ.esm.js.map +1 -0
- package/dist/chunks/{index-vH6HFI2B.esm.js → index-Bp9sWMsk.esm.js} +35 -35
- package/dist/chunks/index-Bp9sWMsk.esm.js.map +1 -0
- package/dist/chunks/{index-DZyO6--E.esm.js → index-BzcA5RKX.esm.js} +2 -2
- package/dist/chunks/{index-DZyO6--E.esm.js.map → index-BzcA5RKX.esm.js.map} +1 -1
- package/dist/chunks/index-CGKJagBi.esm.js +2 -0
- package/dist/chunks/index-CGKJagBi.esm.js.map +1 -0
- package/dist/chunks/{index-IZJ4xhyj.esm.js → index-Cb7X_azQ.esm.js} +2 -2
- package/dist/chunks/{index-IZJ4xhyj.esm.js.map → index-Cb7X_azQ.esm.js.map} +1 -1
- package/dist/chunks/index-Ct1m4IjM.esm.js +2 -0
- package/dist/chunks/index-Ct1m4IjM.esm.js.map +1 -0
- package/dist/chunks/{index-CjT2ycv5.esm.js → index-DA4pws6n.esm.js} +35 -35
- package/dist/chunks/index-DA4pws6n.esm.js.map +1 -0
- package/dist/chunks/index-DBb5HSkR.esm.js +2 -0
- package/dist/chunks/index-DBb5HSkR.esm.js.map +1 -0
- package/dist/chunks/{index-Ca8xkEwS.esm.d.ts → index-DjSzY8-j.esm.d.ts} +1 -1
- package/dist/chunks/index-Dw8XJ6pi.esm.js +2 -0
- package/dist/chunks/index-Dw8XJ6pi.esm.js.map +1 -0
- package/dist/chunks/{index-DUeE7FLq.esm.js → index-MGQHF6Jd.esm.js} +2 -2
- package/dist/chunks/index-MGQHF6Jd.esm.js.map +1 -0
- package/dist/chunks/{index-DqffUXvi.esm.d.ts → index-OTDSwrqr.esm.d.ts} +1 -1
- package/dist/chunks/index-VrM10qBv.esm.js +2 -0
- package/dist/chunks/index-VrM10qBv.esm.js.map +1 -0
- package/dist/chunks/{index-sUGvOawY.esm.js → index-ayo08Z4n.esm.js} +2 -2
- package/dist/chunks/index-ayo08Z4n.esm.js.map +1 -0
- package/dist/chunks/index-tbwbkOdj.esm.js +2 -0
- package/dist/chunks/index-tbwbkOdj.esm.js.map +1 -0
- package/dist/chunks/order-page-Bowqodk5.esm.js +2 -0
- package/dist/chunks/order-page-Bowqodk5.esm.js.map +1 -0
- package/dist/chunks/order-page-C2wPfn6k.esm.js +2 -0
- package/dist/chunks/order-page-C2wPfn6k.esm.js.map +1 -0
- package/dist/chunks/promo-types-DKAOFHJr.esm.js +2 -0
- package/dist/chunks/promo-types-DKAOFHJr.esm.js.map +1 -0
- package/dist/chunks/routes-DCT5U9dA.esm.js +2 -0
- package/dist/chunks/routes-DCT5U9dA.esm.js.map +1 -0
- package/dist/chunks/routes-DelUpFFo.esm.js +2 -0
- package/dist/chunks/routes-DelUpFFo.esm.js.map +1 -0
- package/dist/chunks/{share-button-8zVx6bYw.esm.js → share-button-7um4cBYz.esm.js} +2 -2
- package/dist/chunks/{share-button-8zVx6bYw.esm.js.map → share-button-7um4cBYz.esm.js.map} +1 -1
- package/dist/chunks/{share-button-CM4kwufS.esm.js → share-button-B376j4qt.esm.js} +2 -2
- package/dist/chunks/{share-button-CM4kwufS.esm.js.map → share-button-B376j4qt.esm.js.map} +1 -1
- package/dist/chunks/{share-button-DNyMCeHQ.esm.js → share-button-BEXn6SRs.esm.js} +2 -2
- package/dist/chunks/{share-button-DNyMCeHQ.esm.js.map → share-button-BEXn6SRs.esm.js.map} +1 -1
- package/dist/chunks/{share-button-CWFcBlaF.esm.js → share-button-BZ9Dmpsy.esm.js} +2 -2
- package/dist/chunks/{share-button-CWFcBlaF.esm.js.map → share-button-BZ9Dmpsy.esm.js.map} +1 -1
- package/dist/chunks/update-cart-BGAM3i5j.esm.js +2 -0
- package/dist/chunks/{update-cart-BQHJ9lRb.esm.js.map → update-cart-BGAM3i5j.esm.js.map} +1 -1
- package/dist/chunks/update-cart-pMo1b75q.esm.js +2 -0
- package/dist/chunks/{update-cart-DCxR1dVX.esm.js.map → update-cart-pMo1b75q.esm.js.map} +1 -1
- package/dist/components/community-impact.esm.js +1 -1
- package/dist/components/community-impact.esm.js.map +1 -1
- package/dist/components/community-impact.js +1 -1
- package/dist/components/community-impact.js.map +1 -1
- package/dist/components/cumulative-impact.esm.js +1 -1
- package/dist/components/cumulative-impact.esm.js.map +1 -1
- package/dist/components/cumulative-impact.js +1 -1
- package/dist/components/cumulative-impact.js.map +1 -1
- package/dist/components/impact-overview.esm.js +35 -35
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +35 -35
- package/dist/components/impact-overview.js.map +1 -1
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +1 -1
- package/dist/components/post-purchase.esm.js +3 -3
- package/dist/components/post-purchase.esm.js.map +1 -1
- package/dist/components/post-purchase.js +3 -3
- package/dist/components/post-purchase.js.map +1 -1
- package/dist/components/product-details-page.d.ts +1 -1
- package/dist/components/product-details-page.esm.js +7 -7
- package/dist/components/product-details-page.esm.js.map +1 -1
- package/dist/components/product-details-page.js +7 -7
- package/dist/components/product-details-page.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +1 -1
- package/dist/components/redeem-transaction.esm.js +1 -1
- package/dist/components/redeem-transaction.js +1 -1
- package/dist/components/select-nonprofit.d.ts +2 -1
- package/dist/components/select-nonprofit.esm.js +24 -24
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +24 -24
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.d.ts +1 -1
- package/dist/components/select-subscription-nonprofit.esm.js +16 -16
- package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.js +16 -16
- package/dist/components/select-subscription-nonprofit.js.map +1 -1
- package/dist/components/shopify.d.ts +1 -1
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.esm.js.map +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/components/shopify.js.map +1 -1
- package/dist/components/social-share.esm.js +1 -1
- package/dist/components/social-share.esm.js.map +1 -1
- package/dist/components/social-share.js +1 -1
- package/dist/components/social-share.js.map +1 -1
- package/dist/components/subscription-impact.d.ts +1 -1
- package/dist/components/subscription-impact.esm.js +14 -14
- package/dist/components/subscription-impact.esm.js.map +1 -1
- package/dist/components/subscription-impact.js +14 -14
- package/dist/components/subscription-impact.js.map +1 -1
- package/dist/components/subscription-management.d.ts +1 -1
- package/dist/components/subscription-management.esm.js +1 -1
- package/dist/components/subscription-management.esm.js.map +1 -1
- package/dist/components/subscription-management.js +1 -1
- package/dist/components/subscription-management.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/beam.esm.js +1 -1
- package/dist/integrations/beam.esm.js.map +1 -1
- package/dist/integrations/beam.js +1 -1
- package/dist/integrations/beam.js.map +1 -1
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/index.d.ts +2 -2
- package/dist/integrations/index.esm.js +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/logs.esm.js +1 -1
- package/dist/integrations/logs.js +1 -1
- package/dist/integrations/promoManager.esm.js +1 -1
- package/dist/integrations/promoManager.esm.js.map +1 -1
- package/dist/integrations/promoManager.js +1 -1
- package/dist/integrations/promoManager.js.map +1 -1
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.esm.js +1 -1
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +1 -1
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/integrations/utils.d.ts +1 -1
- package/dist/integrations/utils.esm.js +1 -1
- package/dist/integrations/utils.js +1 -1
- package/dist/react/community-impact.esm.js +1 -1
- package/dist/react/community-impact.esm.js.map +1 -1
- package/dist/react/community-impact.js +1 -1
- package/dist/react/community-impact.js.map +1 -1
- package/dist/react/cumulative-impact.esm.js +1 -1
- package/dist/react/cumulative-impact.esm.js.map +1 -1
- package/dist/react/cumulative-impact.js +1 -1
- package/dist/react/cumulative-impact.js.map +1 -1
- package/dist/react/impact-overview.esm.js +1 -1
- package/dist/react/impact-overview.esm.js.map +1 -1
- package/dist/react/impact-overview.js +1 -1
- package/dist/react/impact-overview.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.esm.js +1 -1
- package/dist/react/post-purchase.esm.js.map +1 -1
- package/dist/react/post-purchase.js +1 -1
- package/dist/react/post-purchase.js.map +1 -1
- package/dist/react/product-details-page.esm.js +1 -1
- package/dist/react/product-details-page.esm.js.map +1 -1
- package/dist/react/product-details-page.js +1 -1
- package/dist/react/product-details-page.js.map +1 -1
- package/dist/react/redeem-transaction.d.ts +1 -1
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.esm.js.map +1 -1
- package/dist/react/redeem-transaction.js +1 -1
- package/dist/react/redeem-transaction.js.map +1 -1
- package/dist/react/select-nonprofit.d.ts +1 -1
- package/dist/react/select-nonprofit.esm.js +1 -1
- package/dist/react/select-nonprofit.esm.js.map +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/dist/react/select-nonprofit.js.map +1 -1
- package/dist/react/select-subscription-nonprofit.d.ts +1 -1
- package/dist/react/select-subscription-nonprofit.esm.js +1 -1
- package/dist/react/select-subscription-nonprofit.esm.js.map +1 -1
- package/dist/react/select-subscription-nonprofit.js +1 -1
- package/dist/react/select-subscription-nonprofit.js.map +1 -1
- package/dist/react/social-share.esm.js +1 -1
- package/dist/react/social-share.esm.js.map +1 -1
- package/dist/react/social-share.js +1 -1
- package/dist/react/social-share.js.map +1 -1
- package/dist/react/subscription-impact.esm.js +1 -1
- package/dist/react/subscription-impact.esm.js.map +1 -1
- package/dist/react/subscription-impact.js +1 -1
- package/dist/react/subscription-impact.js.map +1 -1
- package/dist/react/subscription-management.esm.js +1 -1
- package/dist/react/subscription-management.esm.js.map +1 -1
- package/dist/react/subscription-management.js +1 -1
- package/dist/react/subscription-management.js.map +1 -1
- package/dist/utils/events.d.ts +1 -1
- package/dist/utils/events.esm.js +1 -1
- package/dist/utils/events.js +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/network-listeners.esm.js +1 -1
- package/dist/utils/network-listeners.js +1 -1
- package/dist/utils/promoManager.esm.js +1 -1
- package/dist/utils/promoManager.esm.js.map +1 -1
- package/dist/utils/promoManager.js +1 -1
- package/dist/utils/promoManager.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/_share-dialog-dependencies-Cirjl8zP.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-DElW9Yip.esm.js +0 -2
- package/dist/chunks/events-BohmT6Lp.esm.js +0 -2
- package/dist/chunks/index-2vxtp84k.esm.js +0 -2
- package/dist/chunks/index-2vxtp84k.esm.js.map +0 -1
- package/dist/chunks/index-AEnQH-so.esm.js +0 -2
- package/dist/chunks/index-AEnQH-so.esm.js.map +0 -1
- package/dist/chunks/index-Bs4Q42bL.esm.js +0 -2
- package/dist/chunks/index-Bs4Q42bL.esm.js.map +0 -1
- package/dist/chunks/index-CaBSaNNT.esm.js +0 -2
- package/dist/chunks/index-CaBSaNNT.esm.js.map +0 -1
- package/dist/chunks/index-CjT2ycv5.esm.js.map +0 -1
- package/dist/chunks/index-CtYbieoH.esm.js +0 -2
- package/dist/chunks/index-CtYbieoH.esm.js.map +0 -1
- package/dist/chunks/index-DGyP7M3g.esm.js +0 -2
- package/dist/chunks/index-DGyP7M3g.esm.js.map +0 -1
- package/dist/chunks/index-DUeE7FLq.esm.js.map +0 -1
- package/dist/chunks/index-D_L-n4we.esm.js +0 -2
- package/dist/chunks/index-D_L-n4we.esm.js.map +0 -1
- package/dist/chunks/index-DhhPQ773.esm.js +0 -2
- package/dist/chunks/index-DhhPQ773.esm.js.map +0 -1
- package/dist/chunks/index-DtfQd6C4.esm.js +0 -2
- package/dist/chunks/index-DtfQd6C4.esm.js.map +0 -1
- package/dist/chunks/index-Z9-EAuWk.esm.js +0 -2
- package/dist/chunks/index-Z9-EAuWk.esm.js.map +0 -1
- package/dist/chunks/index-sUGvOawY.esm.js.map +0 -1
- package/dist/chunks/index-vH6HFI2B.esm.js.map +0 -1
- package/dist/chunks/order-page-O5u1cAz8.esm.js +0 -2
- package/dist/chunks/order-page-O5u1cAz8.esm.js.map +0 -1
- package/dist/chunks/order-page-Vk9anZAb.esm.js +0 -2
- package/dist/chunks/order-page-Vk9anZAb.esm.js.map +0 -1
- package/dist/chunks/promoManager-B9cTR1R3.esm.js +0 -2
- package/dist/chunks/promoManager-B9cTR1R3.esm.js.map +0 -1
- package/dist/chunks/promoManager-fl54hq13.esm.js +0 -2
- package/dist/chunks/promoManager-fl54hq13.esm.js.map +0 -1
- package/dist/chunks/routes-BnPd0lrO.esm.js +0 -2
- package/dist/chunks/routes-BnPd0lrO.esm.js.map +0 -1
- package/dist/chunks/routes-D7s2_Xn5.esm.js +0 -2
- package/dist/chunks/routes-D7s2_Xn5.esm.js.map +0 -1
- package/dist/chunks/update-cart-BQHJ9lRb.esm.js +0 -2
- package/dist/chunks/update-cart-DCxR1dVX.esm.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-subscription-nonprofit.js","sources":["../../src/shared/fragments/checkbox.ts","../../src/components/select-subscription-nonprofit/strings.ts","../../src/components/select-subscription-nonprofit/index.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nexport const _checkbox = ({ height = \"1em\", width = \"1em\" } = {}) =>\n html`\n <svg\n style=\"${styleMap({ height, width, position: \"relative\", bottom: \"0\" })}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 78.369 78.369\"\n >\n <g>\n <path\n d=\"M78.049,19.015L29.458,67.606c-0.428,0.428-1.121,0.428-1.548,0L0.32,40.015c-0.427-0.426-0.427-1.119,0-1.547l6.704-6.704\n c0.428-0.427,1.121-0.427,1.548,0l20.113,20.112l41.113-41.113c0.429-0.427,1.12-0.427,1.548,0l6.703,6.704\n C78.477,17.894,78.477,18.586,78.049,19.015z\"\n style=\"fill: currentColor\"\n />\n </g>\n </svg>\n `;\n","export const strings = {\n en: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you with every order of your subscription,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n fr: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you with every order of your subscription,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n de: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you with every order of your subscription,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n es: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you with every order of your subscription,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n it: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you with every order of your subscription,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n pl: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you with every order of your subscription,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { state } from \"lit/decorators/state.js\";\nimport debounce from \"lodash-es/debounce\";\nimport { postChainEligibleNonprofitsForCart, updateSubscription } from \"../../api-sdk/v3/routes\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, 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 { cssReset } from \"../../shared/css-reset\";\nimport { makeApiKeyHeader } from \"../../utils/makeApiKeyHeader\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { cssCardGrid } from \"../../shared/fragments/css-card-grid\";\nimport { _checkbox } from \"../../shared/fragments/checkbox\";\nimport { BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { strings } from \"./strings\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\n\ninterface SubscriptionRequiredConfig {\n apiKey: string;\n subscriptionId: string;\n storeId: TNumericId;\n}\nconst cacheTtl = 2 * 60 * 60 * 1000;\nexport class BeamSelectSubscriptionNonprofit extends LitElement {\n static tagName = \"beam-select-subscription-nonprofit\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n @property({ type: String }) public apiKey?: SubscriptionRequiredConfig[\"apiKey\"];\n @property({ type: String }) public subscriptionId?: SubscriptionRequiredConfig[\"subscriptionId\"];\n @property({ type: Number }) public storeId?: SubscriptionRequiredConfig[\"storeId\"];\n @property({ type: String }) public countryCode?: string;\n @property({ type: String }) public postalCode?: string;\n @property({ type: Number, reflect: true }) public selectedNonprofitId?: TNumericId;\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n @property({ type: Boolean }) public draftConfig = false;\n @property({ type: Boolean }) public debug = false;\n @state() private isMobile = window.innerWidth < 768;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getChainNonprofits = async () => {\n if (!enforceConfig<SubscriptionRequiredConfig>([\"apiKey\", \"subscriptionId\", \"storeId\"], this)) {\n throw new MissingConfig();\n }\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n headers: makeApiKeyHeader(this.apiKey),\n requestBody: {\n storeId: this.storeId,\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n widgetName: \"select-subscription-nonprofit\",\n version: \"1.0.0\",\n lang: this.configLang,\n options: {\n config: {\n draftConfig: this.draftConfig,\n },\n },\n },\n });\n\n this.localStorage.setItemJson(\"chainNonprofits\", {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private updateNonprofitIdForSubscription = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId }) => {\n if (!this.subscriptionId) {\n return null;\n }\n\n if (!enforceConfig<SubscriptionRequiredConfig>([\"apiKey\", \"subscriptionId\"], this)) {\n throw new MissingConfig();\n }\n\n return updateSubscription({\n baseUrl: this.baseUrl,\n headers: makeApiKeyHeader(this.apiKey),\n requestBody: {\n remoteSubscriptionId: this.subscriptionId,\n nonprofitId: selectedNonprofitId,\n selectionMethod: \"subscription_management_widget\",\n },\n });\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits\n );\n\n private subscriptionUpdateDataController = new AsyncController<typeof this.updateNonprofitIdForSubscription>(\n this,\n this.updateNonprofitIdForSubscription\n );\n\n private localStorage = createScopedLocalStorage(this as LitElement & SubscriptionRequiredConfig);\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<SubscriptionRequiredConfig>([\"apiKey\"], this)) throw new MissingConfig();\n\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 }>(\"chainNonprofits\") || {};\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\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.subscriptionUpdateDataController.data == null && !this.subscriptionUpdateDataController.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.subscriptionUpdateDataController.exec({ selectedNonprofitId });\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.select_subscription_nonprofit,\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 ...progressBarConfigDefaults,\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-maxWidth\": \"800px\",\n \"--beam-SelectSubscriptionNonprofit-mobile-header-alignItems\": \"center\",\n \"--beam-SelectSubscriptionNonprofit-desktop-header-alignItems\": \"center\",\n \"--beam-SelectSubscriptionNonprofit-headerContainer-padding\": \"2px\",\n \"--beam-SelectSubscriptionNonprofit-title-textAlign\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-description-textAlign\": \"center\",\n \"--beam-SelectSubscriptionNonprofit-description-lineHeight\": \"138%\",\n \"--beam-SelectSubscriptionNonprofit-description-marginTop\": \"3px\",\n \"--beam-SelectSubscriptionNonprofit-desktop-description-width\": \"80%\",\n \"--beam-SelectSubscriptionNonprofit-mobile-description-width\": \"90%\",\n \"--beam-SelectSubscriptionNonprofit-options-marginTop\": \"10px\",\n \"--beam-SelectSubscriptionNonprofit-options-padding\": \"10px\",\n \"--beam-SelectSubscriptionNonprofit-options-borderWidth\": \"1px\",\n \"--beam-SelectSubscriptionNonprofit-options-borderColor\": \"transparent\",\n \"--beam-SelectSubscriptionNonprofit-options-borderRadius\": \"8px\",\n \"--beam-SelectSubscriptionNonprofit-options-backgroundColor\": \"#F9FBFB\",\n \"--beam-SelectSubscriptionNonprofit-option-padding\": \"15px\",\n \"--beam-SelectSubscriptionNonprofit-options-hover-backgroundColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-hover-borderWidth\": \"1px\",\n \"--beam-SelectSubscriptionNonprofit-options-hover-borderColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-selected-borderWidth\": \"1px\",\n \"--beam-SelectSubscriptionNonprofit-options-selected-borderColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-selected-backgroundColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-gap\": \"20px\",\n \"--beam-SelectSubscriptionNonprofit-options-minWidth\": \"250px\",\n \"--beam-SelectSubscriptionNonprofit-options-columnCount\": \"2\",\n \"--beam-SelectSubscriptionNonprofit-options-icon-borderRadius\": \"4px\",\n \"--beam-SelectSubscriptionNonprofit-options-icon-padding\": \"10px\",\n \"--beam-SelectSubscriptionNonprofit-options-image-borderRadius\": \"4px\",\n \"--beam-SelectSubscriptionNonprofit-cardIconContainer-height\": \"100%\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-width\": \"50px\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-height\": \"50px\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-borderRadius\": \"50%\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-background\": \"#0a323c\",\n \"--beam-SelectSubscriptionNonprofit-icon-height\": \"50px\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-backgroundColor\": \"transparent\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-color\": \"transparent\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-borderColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-selected-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-selected-backgroundColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-selected-borderColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-hover-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-hover-backgroundColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-hover-borderColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-cardStyle\": \"'selected_icon'\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-hover-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-disabled-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-backgroundColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-hover-backgroundColor\": \"#222\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-disabled-backgroundColor\": \"#767676\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-borderColor\": \"#333\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-hover-borderColor\": \"#222\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-disabled-borderColor\": \"#767676\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-fontSize\": \"14px\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-fontWeight\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-fontFamily\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-textTransform\": \"none\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-borderRadius\": \"30px\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-padding\": \"10px 30px\",\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-title\", {\n fontSize: \"20px\",\n fontWeight: \"bold\",\n lineHeight: \"120%\",\n textTransform: \"capitalize\",\n color: \"#0a323c\",\n }),\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-descriptionPrefix\", {\n marginTop: \"3px\",\n color: \"#2f302d\",\n fontSize: \"14px\",\n fontWeight: \"bold\",\n fontStyle: \"normal\",\n lineHeight: \"138%\",\n }),\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-description\", {\n color: \"#2f302d\",\n fontSize: \"14px\",\n fontStyle: \"normal\",\n }),\n \"--beam-SelectSubscriptionNonprofit-details-cause-letterSpacing\": \"0.36px\",\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-details-cause\", {\n fontSize: \"12px\",\n fontWeight: \"bold\",\n color: \"#0a323c\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n }),\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-details-description\", {\n fontSize: \"12px\",\n marginTop: \"5px\",\n fontStyle: \"normal\",\n lineHeight: \"140%\",\n fontWeight: \"400\",\n }),\n \"--beam-SelectSubscriptionNonprofit-details-fundingProgress-marginTop\": \"7px\",\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-details-funding-progress-label\", {\n fontSize: \"12px\",\n color: \"#666666\",\n fontWeight: \"400\",\n fontStyle: \"normal\",\n }),\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-boxShadow\": \"0px -20px 20px 0px rgba(0, 0, 0, 0.04)\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-padding\": \"15px 0px 45px\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-backgroundColor\": \"white\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-marginLeft\": \"-15px\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-marginRight\": \"-15px\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-width\": \"auto\",\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-SelectSubscriptionNonprofit-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 .widget-container-mobile {\n position: relative;\n }\n\n .header-container {\n align-items: flex-start;\n justify-content: space-between;\n padding: var(--beam-SelectSubscriptionNonprofit-headerContainer-padding);\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .header-container-mobile {\n align-items: var(--beam-SelectSubscriptionNonprofit-mobile-header-alignItems);\n }\n\n .header-container-desktop {\n align-items: var(--beam-SelectSubscriptionNonprofit-desktop-header-alignItems);\n }\n\n .title {\n text-align: var(--beam-SelectSubscriptionNonprofit-title-textAlign);\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-title\")};\n }\n\n .description-container {\n text-align: var(--beam-SelectSubscriptionNonprofit-description-textAlign);\n line-height: var(--beam-SelectSubscriptionNonprofit-description-lineHeight);\n margin-top: var(--beam-SelectSubscriptionNonprofit-description-marginTop);\n }\n\n .description-prefix {\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-descriptionPrefix\")};\n }\n\n .description {\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-description\")};\n }\n\n .description-desktop {\n width: var(--beam-SelectSubscriptionNonprofit-desktop-description-width);\n }\n\n .description-mobile {\n width: var(--beam-SelectSubscriptionNonprofit-mobile-description-width);\n }\n\n .root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .options {\n margin-top: var(--beam-SelectSubscriptionNonprofit-options-marginTop);\n padding: var(--beam-SelectSubscriptionNonprofit-options-padding);\n }\n\n .card-icon-container {\n height: var(--beam-SelectSubscriptionNonprofit-cardIconContainer-height);\n flex: 0;\n flex-direction: column;\n }\n\n .icon-background {\n width: var(--beam-SelectSubscriptionNonprofit-iconBackground-width);\n height: var(--beam-SelectSubscriptionNonprofit-iconBackground-height);\n border-radius: var(--beam-SelectSubscriptionNonprofit-iconBackground-borderRadius);\n overflow: hidden;\n background: var(--beam-SelectSubscriptionNonprofit-iconBackground-background);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .card-icon {\n height: var(--beam-SelectSubscriptionNonprofit-icon-height);\n display: block;\n padding: var(--beam-SelectSubscriptionNonprofit-options-icon-padding);\n border-radius: var(--beam-SelectSubscriptionNonprofit-options-icon-borderRadius);\n }\n\n .card-image-container {\n height: 100%;\n flex: 4;\n display: flex;\n flex-direction: column;\n }\n\n .card-image {\n flex: 1;\n height: auto;\n width: 100%;\n object-fit: cover;\n border-radius: var(--beam-SelectSubscriptionNonprofit-options-image-borderRadius);\n }\n\n .option {\n /* outline is used to prevent layer shift if changing border width */\n outline: var(--beam-SelectSubscriptionNonprofit-options-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-borderColor);\n border-radius: var(--beam-SelectSubscriptionNonprofit-options-borderRadius);\n background-color: var(--beam-SelectSubscriptionNonprofit-options-backgroundColor);\n cursor: pointer;\n transition: border-color 0.2s, background-color 0.2s, outline 0.2s;\n display: flex;\n gap: 15px;\n padding: var(--beam-SelectSubscriptionNonprofit-option-padding);\n }\n\n .options.cardGrid {\n order: 3;\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-SelectSubscriptionNonprofit-options-hover-backgroundColor);\n outline: var(--beam-SelectSubscriptionNonprofit-options-hover-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-hover-borderColor);\n }\n\n .option.isDisabled {\n cursor: not-allowed;\n }\n\n .option.isSelected {\n outline: var(--beam-SelectSubscriptionNonprofit-options-selected-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-selected-borderColor);\n background-color: var(--beam-SelectSubscriptionNonprofit-options-selected-backgroundColor);\n }\n\n .option.isSelected:focus-visible,\n .option.isSelected:hover {\n outline: var(--beam-SelectSubscriptionNonprofit-options-selected-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-selected-borderColor);\n }\n\n .option .checkbox {\n margin-left: 5px;\n float: right;\n padding: 2px;\n border-radius: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-width: 1px;\n border-style: solid;\n transition: background-color 0.2s, color 0.2s, border-color 0.2s;\n color: var(--beam-SelectSubscriptionNonprofit-checkmark-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-checkmark-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-checkmark-borderColor);\n }\n\n .option.isSelected .checkbox,\n .option.isSelected:focus-visible .checkbox,\n .option.isSelected:hover .checkbox {\n color: var(--beam-SelectSubscriptionNonprofit-checkmark-selected-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-checkmark-selected-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-checkmark-selected-borderColor);\n }\n\n .option:not(.isSelected):focus-visible .checkbox,\n .option:not(.isSelected):hover .checkbox {\n color: var(--beam-SelectSubscriptionNonprofit-checkmark-hover-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-checkmark-hover-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-checkmark-hover-borderColor);\n }\n\n .card-details-container {\n flex: 1 1 67%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-content: stretch;\n align-items: stretch;\n position: relative;\n }\n\n .details-cause {\n flex: 0 1;\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-details-cause\")};\n letter-spacing: var(--beam-SelectSubscriptionNonprofit-details-cause-letterSpacing);\n }\n\n .details-description {\n flex: 1 1;\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-details-description\")}\n }\n\n .details-description .nonprofitName {\n font-weight: var(--beam-SelectSubscriptionNonprofit-details-nonprofitName-fontWeight);\n font-style: var(--beam-SelectSubscriptionNonprofit-details-nonprofitName-fontStyle);\n }\n\n .card-progress-bar {\n display: flex;\n margin-top: var(--beam-SelectSubscriptionNonprofit-details-fundingProgress-marginTop);\n align-items: center;\n }\n\n .details-funding-progress-label {\n white-space: nowrap;\n text-align: right;\n flex: 0 1;\n margin-left: 15px;\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-details-funding-progress-label\")}\n }\n\n .footer {\n text-align: center;\n }\n\n .sticky-footer {\n position: sticky;\n background: var(--beam-SelectSubscriptionNonprofit-stickyFooter-backgroundColor);\n bottom: 0;\n box-shadow: var(--beam-SelectSubscriptionNonprofit-stickyFooter-boxShadow);\n padding: var(--beam-SelectSubscriptionNonprofit-stickyFooter-padding);\n left: 0;\n right: 0;\n margin-left: var(--beam-SelectSubscriptionNonprofit-stickyFooter-marginLeft);\n margin-right: var(--beam-SelectSubscriptionNonprofit-stickyFooter-marginRight);\n width: var(--beam-SelectSubscriptionNonprofit-stickyFooter-width);\n }\n\n .footer-desktop {\n margin-top: 20px;\n }\n\n .submitButton {\n color: var(--beam-SelectSubscriptionNonprofit-submitButton-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-submitButton-backgroundColor);\n border: 1px solid var(--beam-SelectSubscriptionNonprofit-submitButton-borderColor);\n font-size: var(--beam-SelectSubscriptionNonprofit-submitButton-fontSize);\n font-weight: var(--beam-SelectSubscriptionNonprofit-submitButton-fontWeight);\n font-family: var(--beam-SelectSubscriptionNonprofit-submitButton-fontFamily);\n text-transform: var(--beam-SelectSubscriptionNonprofit-submitButton-textTransform);\n border-radius: var(--beam-SelectSubscriptionNonprofit-submitButton-borderRadius);\n padding: var(--beam-SelectSubscriptionNonprofit-submitButton-padding);\n transition: background-color 0.2s, border-color 0.2s, color 0.2s;\n cursor: pointer;\n display: inline-flex;\n width: 234.173px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n }\n\n .submitButton:not(.isDisabled):focus-visible,\n .submitButton:not(.isDisabled):hover {\n background-color: var(--beam-SelectSubscriptionNonprofit-submitButton-hover-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-submitButton-hover-borderColor);\n color: var(--beam-SelectSubscriptionNonprofit-submitButton-hover-color);\n }\n\n .submitButton.isDisabled {\n color: var(--beam-SelectSubscriptionNonprofit-submitButton-disabled-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-submitButton-disabled-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-submitButton-disabled-borderColor);\n cursor: not-allowed;\n }\n\n .hideStickyFooter {\n display: none;\n }\n `,\n cssCardGrid({\n gap: \"var(--beam-SelectSubscriptionNonprofit-options-gap)\",\n itemMinWidth: \"var(--beam-SelectSubscriptionNonprofit-options-minWidth)\",\n columnCount: \"var(--beam-SelectSubscriptionNonprofit-options-columnCount)\",\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.subscriptionUpdateDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.subscriptionUpdateDataController.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 cardStyle = this.cssVariables[\"--beam-SelectSubscriptionNonprofit-cardStyle\"];\n const displayIcon = cardStyle === \"'icon'\" || cardStyle === \"'selected_icon'\";\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div class=\"widget-container ${this.isMobile ? \"widget-container-mobile\" : \"\"}\">\n <div class=\"header-container ${this.isMobile ? \"header-container-mobile\" : \"header-container-desktop\"}\">\n <h3 class=\"title\" part=\"title\" id=\"beam-SelectSubscriptionNonprofit-title\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].ctaTitle()}\n </h3>\n <div\n class=\"description-container ${this.isMobile\n ? \"header-container-mobile description-mobile\"\n : \"header-container-desktop description-desktop\"}\"\n >\n <span class=\"description\" part=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.additionalStrings?.[\"ctaMessage\"] || \"\") ||\n strings[this.configLang].ctaMessage()}\n </span>\n <span class=\"description-prefix\" part=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.additionalStrings?.[\"ctaMessagePrefix\"] || \"\") ||\n strings[this.configLang].ctaMessagePrefix()}\n </span>\n </div>\n </div>\n <div class=\"root\">\n <div\n tabindex=\"-1\"\n class=\"options cardGrid\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-SelectSubscriptionNonprofit-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 const unselectedIcon = np.nonprofit.causeIconUrl;\n const selectedIcon = np.nonprofit.causeIconSelectedUrl;\n const cardImage = np.imageUrl;\n const iconImage = cardStyle === \"'selected_icon'\" ? selectedIcon : unselectedIcon;\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 >\n ${displayIcon\n ? html` <div class=\"card-icon-container\">\n <div class=\"icon-background\">\n <img src=\"${iconImage}\" alt=\"\" role=\"presentation\" class=\"card-icon\" />\n </div>\n </div>`\n : html` <div class=\"card-image-container\">\n <img src=\"${cardImage}\" alt=\"\" role=\"presentation\" class=\"card-image\" />\n </div>`}\n <div class=\"card-details-container\" part=\"details\">\n <div class=\"details-cause\">\n <span part=\"checkbox\" class=\"checkbox\">\n <span style=\"line-height: 0;\"> ${_checkbox({ height: \"10px\", width: \"10px\" })} </span>\n </span>\n ${localizeUserString(this.configLang, np.nonprofit.cause || \"\")}\n </div>\n <p class=\"details-description\">\n ${unsafeHTML(localizeUserString(this.configLang, np.impact.description || \"\"))}\n </p>\n <div class=\"card-progress-bar\">\n <beam-progress-bar\n value=\"${np.impact.goalProgressPercentage}\"\n style=\"flex: 1 0;\"\n ></beam-progress-bar>\n <span class=\"details-funding-progress-label\">\n ${localizeUserString(this.configLang, np.impact.goalProgressText)}\n </span>\n </div>\n </div>\n </div>\n `;\n }\n )}\n </div>\n </div>\n <div\n id=\"footer\"\n class=\"footer ${this.isMobile ? \"sticky-footer\" : \"footer-desktop\"} ${this.isMobile &&\n !this.selectedNonprofitId\n ? \"hideStickyFooter\"\n : \"\"}\"\n >\n <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.subscriptionUpdateDataController.data !== null\n ? localizeUserString(\n this.configLang,\n data?.config?.web?.additionalStrings?.[\"submitButtonTextCompleted\"] || \"\"\n ) || strings[this.configLang].submitButtonTextCompleted()\n : localizeUserString(this.configLang, data?.config?.web?.additionalStrings?.[\"submitButtonText\"] || \"\") ||\n strings[this.configLang].submitButtonText()}\n </button>\n </div>\n </div>\n `;\n }\n}\n\ndefineCustomElement(BeamSelectSubscriptionNonprofit);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-select-subscription-nonprofit\": BeamSelectSubscriptionNonprofit;\n }\n}\n"],"names":["_checkbox","height","width","html","styleMap","strings","donationPercentage","cacheTtl","BeamSelectSubscriptionNonprofit","LitElement","DEFAULT_BASE_URL","enforceConfig","res","postChainEligibleNonprofitsForCart","makeApiKeyHeader","selectedNonprofitId","updateSubscription","AsyncController","createScopedLocalStorage","id","index","nonprofits","event","currentId","nextFocus","focusTarget","selectedNonprofit","np","BeamNonprofitSelectEvent","WIDGET_NAMES","debounce","SUPPORTED_LANGUAGES","_changedProperties","previousPropertyValues","requireNewDataProps","prop","createdAt","data","defaults","progressBarConfigDefaults","defineCustomText","remoteConfig","config","_cssVariableMap","loading","_loading","_errorMessage","BeamError","cardStyle","displayIcon","localizeUserString","repeat","i","isSelected","isFocusable","unselectedIcon","selectedIcon","cardImage","iconImage","classMap","unsafeHTML","cssReset","css","useCustomText","cssCardGrid","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-subscription-nonprofit.js","sources":["../../src/shared/fragments/checkbox.ts","../../src/components/select-subscription-nonprofit/strings.ts","../../src/components/select-subscription-nonprofit/index.ts"],"sourcesContent":["import { html } from \"lit\";\nimport { styleMap } from \"lit/directives/style-map.js\";\n\nexport const _checkbox = ({ height = \"1em\", width = \"1em\" } = {}) =>\n html`\n <svg\n style=\"${styleMap({ height, width, position: \"relative\", bottom: \"0\" })}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 78.369 78.369\"\n >\n <g>\n <path\n d=\"M78.049,19.015L29.458,67.606c-0.428,0.428-1.121,0.428-1.548,0L0.32,40.015c-0.427-0.426-0.427-1.119,0-1.547l6.704-6.704\n c0.428-0.427,1.121-0.427,1.548,0l20.113,20.112l41.113-41.113c0.429-0.427,1.12-0.427,1.548,0l6.703,6.704\n C78.477,17.894,78.477,18.586,78.049,19.015z\"\n style=\"fill: currentColor\"\n />\n </g>\n </svg>\n `;\n","export const strings = {\n en: {\n ctaTitle: () => `Choose Your Impact`,\n ctaMessagePrefix: () => ` at no extra cost, with every order of your subscription.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choose a nonprofit and ${donationPercentage} will be donated there for you,`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n fr: {\n ctaTitle: () => `Choisissez votre impact`,\n ctaMessagePrefix: () => ` sans frais supplémentaires, à chaque commande de votre abonnement.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Choisissez une association et ${donationPercentage} sera reversé en votre nom,`,\n submitButtonText: () => `Confirmer`,\n submitButtonTextCompleted: () => `Confirmé !`,\n chooseButtonText: () => `Choisir`,\n },\n de: {\n ctaTitle: () => `Wähle deinen Impact`,\n ctaMessagePrefix: () => ` ohne zusätzliche Kosten, bei jeder Bestellung deines Abonnements.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Wähle eine gemeinnützige Organisation und ${donationPercentage} werden in deinem Namen gespendet,`,\n submitButtonText: () => `Bestätigen`,\n submitButtonTextCompleted: () => `Bestätigt!`,\n chooseButtonText: () => `Wählen`,\n },\n es: {\n ctaTitle: () => `Elige tu impacto`,\n ctaMessagePrefix: () => ` sin coste adicional, con cada pedido de tu suscripción.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Elige una organización sin ánimo de lucro y donaremos ${donationPercentage} en tu nombre,`,\n submitButtonText: () => `Confirmar`,\n submitButtonTextCompleted: () => `¡Confirmado!`,\n chooseButtonText: () => `Elegir`,\n },\n it: {\n ctaTitle: () => `Scegli il tuo impatto`,\n ctaMessagePrefix: () => ` senza costi aggiuntivi, a ogni ordine del tuo abbonamento.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Seleziona un'organizzazione no-profit e l’${donationPercentage} sarà donato a tuo nome,`,\n submitButtonText: () => `Confermare`,\n submitButtonTextCompleted: () => `Confermato!`,\n chooseButtonText: () => `Scegli`,\n },\n pl: {\n ctaTitle: () => `Wybierz swój wpływ`,\n ctaMessagePrefix: () => ` bez żadnych dodatkowych kosztów, przy każdym zamówieniu w ramach subskrypcji.`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Wybierz organizację non-profit, a ${donationPercentage} zostanie przekazane w Twoim imieniu,`,\n submitButtonText: () => `Zatwierdź`,\n submitButtonTextCompleted: () => `Zatwierdzono!`,\n chooseButtonText: () => `Wybierz`,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { state } from \"lit/decorators/state.js\";\nimport debounce from \"lodash-es/debounce\";\nimport { postChainEligibleNonprofitsForCart, updateSubscription } from \"../../api-sdk/v3/routes\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, 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 { cssReset } from \"../../shared/css-reset\";\nimport { makeApiKeyHeader } from \"../../utils/makeApiKeyHeader\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { cssCardGrid } from \"../../shared/fragments/css-card-grid\";\nimport { _checkbox } from \"../../shared/fragments/checkbox\";\nimport { BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { strings } from \"./strings\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\n\ninterface SubscriptionRequiredConfig {\n apiKey: string;\n subscriptionId: string;\n storeId: TNumericId;\n}\nconst cacheTtl = 2 * 60 * 60 * 1000;\nexport class BeamSelectSubscriptionNonprofit extends LitElement {\n static tagName = \"beam-select-subscription-nonprofit\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n @property({ type: String }) public apiKey?: SubscriptionRequiredConfig[\"apiKey\"];\n @property({ type: String }) public subscriptionId?: SubscriptionRequiredConfig[\"subscriptionId\"];\n @property({ type: Number }) public storeId?: SubscriptionRequiredConfig[\"storeId\"];\n @property({ type: String }) public countryCode?: string;\n @property({ type: String }) public postalCode?: string;\n @property({ type: Number, reflect: true }) public selectedNonprofitId?: TNumericId;\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n @property({ type: Boolean }) public draftConfig = false;\n @property({ type: Boolean }) public debug = false;\n @state() private isMobile = window.innerWidth < 768;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getChainNonprofits = async () => {\n if (!enforceConfig<SubscriptionRequiredConfig>([\"apiKey\", \"subscriptionId\", \"storeId\"], this)) {\n throw new MissingConfig();\n }\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n headers: makeApiKeyHeader(this.apiKey),\n requestBody: {\n storeId: this.storeId,\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n widgetName: \"select-subscription-nonprofit\",\n version: \"1.0.0\",\n lang: this.configLang,\n options: {\n config: {\n draftConfig: this.draftConfig,\n },\n },\n },\n });\n\n this.localStorage.setItemJson(\"chainNonprofits\", {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private updateNonprofitIdForSubscription = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId }) => {\n if (!this.subscriptionId) {\n return null;\n }\n\n if (!enforceConfig<SubscriptionRequiredConfig>([\"apiKey\", \"subscriptionId\"], this)) {\n throw new MissingConfig();\n }\n\n return updateSubscription({\n baseUrl: this.baseUrl,\n headers: makeApiKeyHeader(this.apiKey),\n requestBody: {\n remoteSubscriptionId: this.subscriptionId,\n nonprofitId: selectedNonprofitId,\n selectionMethod: \"subscription_management_widget\",\n },\n });\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits\n );\n\n private subscriptionUpdateDataController = new AsyncController<typeof this.updateNonprofitIdForSubscription>(\n this,\n this.updateNonprofitIdForSubscription\n );\n\n private localStorage = createScopedLocalStorage(this as LitElement & SubscriptionRequiredConfig);\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<SubscriptionRequiredConfig>([\"apiKey\"], this)) throw new MissingConfig();\n\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 }>(\"chainNonprofits\") || {};\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\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.subscriptionUpdateDataController.data == null && !this.subscriptionUpdateDataController.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.subscriptionUpdateDataController.exec({ selectedNonprofitId });\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.select_subscription_nonprofit,\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 ...progressBarConfigDefaults,\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-maxWidth\": \"800px\",\n \"--beam-SelectSubscriptionNonprofit-mobile-header-alignItems\": \"center\",\n \"--beam-SelectSubscriptionNonprofit-desktop-header-alignItems\": \"center\",\n \"--beam-SelectSubscriptionNonprofit-headerContainer-padding\": \"2px\",\n \"--beam-SelectSubscriptionNonprofit-title-textAlign\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-description-textAlign\": \"center\",\n \"--beam-SelectSubscriptionNonprofit-description-lineHeight\": \"138%\",\n \"--beam-SelectSubscriptionNonprofit-description-marginTop\": \"3px\",\n \"--beam-SelectSubscriptionNonprofit-desktop-description-width\": \"80%\",\n \"--beam-SelectSubscriptionNonprofit-mobile-description-width\": \"90%\",\n \"--beam-SelectSubscriptionNonprofit-options-marginTop\": \"10px\",\n \"--beam-SelectSubscriptionNonprofit-options-padding\": \"10px\",\n \"--beam-SelectSubscriptionNonprofit-options-borderWidth\": \"1px\",\n \"--beam-SelectSubscriptionNonprofit-options-borderColor\": \"transparent\",\n \"--beam-SelectSubscriptionNonprofit-options-borderRadius\": \"8px\",\n \"--beam-SelectSubscriptionNonprofit-options-backgroundColor\": \"#F9FBFB\",\n \"--beam-SelectSubscriptionNonprofit-option-padding\": \"15px\",\n \"--beam-SelectSubscriptionNonprofit-options-hover-backgroundColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-hover-borderWidth\": \"1px\",\n \"--beam-SelectSubscriptionNonprofit-options-hover-borderColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-selected-borderWidth\": \"1px\",\n \"--beam-SelectSubscriptionNonprofit-options-selected-borderColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-selected-backgroundColor\": \"#e1f1ee\",\n \"--beam-SelectSubscriptionNonprofit-options-gap\": \"20px\",\n \"--beam-SelectSubscriptionNonprofit-options-minWidth\": \"250px\",\n \"--beam-SelectSubscriptionNonprofit-options-columnCount\": \"2\",\n \"--beam-SelectSubscriptionNonprofit-options-icon-borderRadius\": \"4px\",\n \"--beam-SelectSubscriptionNonprofit-options-icon-padding\": \"10px\",\n \"--beam-SelectSubscriptionNonprofit-options-image-borderRadius\": \"4px\",\n \"--beam-SelectSubscriptionNonprofit-cardIconContainer-height\": \"100%\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-width\": \"50px\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-height\": \"50px\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-borderRadius\": \"50%\",\n \"--beam-SelectSubscriptionNonprofit-iconBackground-background\": \"#0a323c\",\n \"--beam-SelectSubscriptionNonprofit-icon-height\": \"50px\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-backgroundColor\": \"transparent\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-color\": \"transparent\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-borderColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-selected-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-selected-backgroundColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-selected-borderColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-hover-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-hover-backgroundColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-checkmark-hover-borderColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-cardStyle\": \"'selected_icon'\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-hover-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-disabled-color\": \"#fff\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-backgroundColor\": \"#0A323C\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-hover-backgroundColor\": \"#222\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-disabled-backgroundColor\": \"#767676\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-borderColor\": \"#333\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-hover-borderColor\": \"#222\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-disabled-borderColor\": \"#767676\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-fontSize\": \"14px\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-fontWeight\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-fontFamily\": \"inherit\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-textTransform\": \"none\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-borderRadius\": \"30px\",\n \"--beam-SelectSubscriptionNonprofit-submitButton-padding\": \"10px 30px\",\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-title\", {\n fontSize: \"20px\",\n fontWeight: \"bold\",\n lineHeight: \"120%\",\n textTransform: \"capitalize\",\n color: \"#0a323c\",\n }),\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-descriptionPrefix\", {\n marginTop: \"3px\",\n color: \"#2f302d\",\n fontSize: \"14px\",\n fontWeight: \"bold\",\n fontStyle: \"normal\",\n lineHeight: \"138%\",\n }),\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-description\", {\n color: \"#2f302d\",\n fontSize: \"14px\",\n fontStyle: \"normal\",\n }),\n \"--beam-SelectSubscriptionNonprofit-details-cause-letterSpacing\": \"0.36px\",\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-details-cause\", {\n fontSize: \"12px\",\n fontWeight: \"bold\",\n color: \"#0a323c\",\n fontStyle: \"normal\",\n lineHeight: \"120%\",\n }),\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-details-description\", {\n fontSize: \"12px\",\n marginTop: \"5px\",\n fontStyle: \"normal\",\n lineHeight: \"140%\",\n fontWeight: \"400\",\n }),\n \"--beam-SelectSubscriptionNonprofit-details-fundingProgress-marginTop\": \"7px\",\n ...defineCustomText(\"--beam-SelectSubscriptionNonprofit-details-funding-progress-label\", {\n fontSize: \"12px\",\n color: \"#666666\",\n fontWeight: \"400\",\n fontStyle: \"normal\",\n }),\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-boxShadow\": \"0px -20px 20px 0px rgba(0, 0, 0, 0.04)\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-padding\": \"15px 0px 45px\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-backgroundColor\": \"white\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-marginLeft\": \"-15px\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-marginRight\": \"-15px\",\n \"--beam-SelectSubscriptionNonprofit-stickyFooter-width\": \"auto\",\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-SelectSubscriptionNonprofit-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 .widget-container-mobile {\n position: relative;\n }\n\n .header-container {\n align-items: flex-start;\n justify-content: space-between;\n padding: var(--beam-SelectSubscriptionNonprofit-headerContainer-padding);\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .header-container-mobile {\n align-items: var(--beam-SelectSubscriptionNonprofit-mobile-header-alignItems);\n }\n\n .header-container-desktop {\n align-items: var(--beam-SelectSubscriptionNonprofit-desktop-header-alignItems);\n }\n\n .title {\n text-align: var(--beam-SelectSubscriptionNonprofit-title-textAlign);\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-title\")};\n }\n\n .description-container {\n text-align: var(--beam-SelectSubscriptionNonprofit-description-textAlign);\n line-height: var(--beam-SelectSubscriptionNonprofit-description-lineHeight);\n margin-top: var(--beam-SelectSubscriptionNonprofit-description-marginTop);\n }\n\n .description-prefix {\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-descriptionPrefix\")};\n }\n\n .description {\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-description\")};\n }\n\n .description-desktop {\n width: var(--beam-SelectSubscriptionNonprofit-desktop-description-width);\n }\n\n .description-mobile {\n width: var(--beam-SelectSubscriptionNonprofit-mobile-description-width);\n }\n\n .root {\n display: flex;\n flex-direction: column;\n gap: 12px;\n flex-shrink: 0;\n }\n\n .options {\n margin-top: var(--beam-SelectSubscriptionNonprofit-options-marginTop);\n padding: var(--beam-SelectSubscriptionNonprofit-options-padding);\n }\n\n .card-icon-container {\n height: var(--beam-SelectSubscriptionNonprofit-cardIconContainer-height);\n flex: 0;\n flex-direction: column;\n }\n\n .icon-background {\n width: var(--beam-SelectSubscriptionNonprofit-iconBackground-width);\n height: var(--beam-SelectSubscriptionNonprofit-iconBackground-height);\n border-radius: var(--beam-SelectSubscriptionNonprofit-iconBackground-borderRadius);\n overflow: hidden;\n background: var(--beam-SelectSubscriptionNonprofit-iconBackground-background);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .card-icon {\n height: var(--beam-SelectSubscriptionNonprofit-icon-height);\n display: block;\n padding: var(--beam-SelectSubscriptionNonprofit-options-icon-padding);\n border-radius: var(--beam-SelectSubscriptionNonprofit-options-icon-borderRadius);\n }\n\n .card-image-container {\n height: 100%;\n flex: 4;\n display: flex;\n flex-direction: column;\n }\n\n .card-image {\n flex: 1;\n height: auto;\n width: 100%;\n object-fit: cover;\n border-radius: var(--beam-SelectSubscriptionNonprofit-options-image-borderRadius);\n }\n\n .option {\n /* outline is used to prevent layer shift if changing border width */\n outline: var(--beam-SelectSubscriptionNonprofit-options-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-borderColor);\n border-radius: var(--beam-SelectSubscriptionNonprofit-options-borderRadius);\n background-color: var(--beam-SelectSubscriptionNonprofit-options-backgroundColor);\n cursor: pointer;\n transition: border-color 0.2s, background-color 0.2s, outline 0.2s;\n display: flex;\n gap: 15px;\n padding: var(--beam-SelectSubscriptionNonprofit-option-padding);\n }\n\n .options.cardGrid {\n order: 3;\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-SelectSubscriptionNonprofit-options-hover-backgroundColor);\n outline: var(--beam-SelectSubscriptionNonprofit-options-hover-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-hover-borderColor);\n }\n\n .option.isDisabled {\n cursor: not-allowed;\n }\n\n .option.isSelected {\n outline: var(--beam-SelectSubscriptionNonprofit-options-selected-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-selected-borderColor);\n background-color: var(--beam-SelectSubscriptionNonprofit-options-selected-backgroundColor);\n }\n\n .option.isSelected:focus-visible,\n .option.isSelected:hover {\n outline: var(--beam-SelectSubscriptionNonprofit-options-selected-borderWidth) solid\n var(--beam-SelectSubscriptionNonprofit-options-selected-borderColor);\n }\n\n .option .checkbox {\n margin-left: 5px;\n float: right;\n padding: 2px;\n border-radius: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-width: 1px;\n border-style: solid;\n transition: background-color 0.2s, color 0.2s, border-color 0.2s;\n color: var(--beam-SelectSubscriptionNonprofit-checkmark-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-checkmark-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-checkmark-borderColor);\n }\n\n .option.isSelected .checkbox,\n .option.isSelected:focus-visible .checkbox,\n .option.isSelected:hover .checkbox {\n color: var(--beam-SelectSubscriptionNonprofit-checkmark-selected-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-checkmark-selected-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-checkmark-selected-borderColor);\n }\n\n .option:not(.isSelected):focus-visible .checkbox,\n .option:not(.isSelected):hover .checkbox {\n color: var(--beam-SelectSubscriptionNonprofit-checkmark-hover-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-checkmark-hover-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-checkmark-hover-borderColor);\n }\n\n .card-details-container {\n flex: 1 1 67%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-content: stretch;\n align-items: stretch;\n position: relative;\n }\n\n .details-cause {\n flex: 0 1;\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-details-cause\")};\n letter-spacing: var(--beam-SelectSubscriptionNonprofit-details-cause-letterSpacing);\n }\n\n .details-description {\n flex: 1 1;\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-details-description\")}\n }\n\n .details-description .nonprofitName {\n font-weight: var(--beam-SelectSubscriptionNonprofit-details-nonprofitName-fontWeight);\n font-style: var(--beam-SelectSubscriptionNonprofit-details-nonprofitName-fontStyle);\n }\n\n .card-progress-bar {\n display: flex;\n margin-top: var(--beam-SelectSubscriptionNonprofit-details-fundingProgress-marginTop);\n align-items: center;\n }\n\n .details-funding-progress-label {\n white-space: nowrap;\n text-align: right;\n flex: 0 1;\n margin-left: 15px;\n ${useCustomText(\"--beam-SelectSubscriptionNonprofit-details-funding-progress-label\")}\n }\n\n .footer {\n text-align: center;\n }\n\n .sticky-footer {\n position: sticky;\n background: var(--beam-SelectSubscriptionNonprofit-stickyFooter-backgroundColor);\n bottom: 0;\n box-shadow: var(--beam-SelectSubscriptionNonprofit-stickyFooter-boxShadow);\n padding: var(--beam-SelectSubscriptionNonprofit-stickyFooter-padding);\n left: 0;\n right: 0;\n margin-left: var(--beam-SelectSubscriptionNonprofit-stickyFooter-marginLeft);\n margin-right: var(--beam-SelectSubscriptionNonprofit-stickyFooter-marginRight);\n width: var(--beam-SelectSubscriptionNonprofit-stickyFooter-width);\n }\n\n .footer-desktop {\n margin-top: 20px;\n }\n\n .submitButton {\n color: var(--beam-SelectSubscriptionNonprofit-submitButton-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-submitButton-backgroundColor);\n border: 1px solid var(--beam-SelectSubscriptionNonprofit-submitButton-borderColor);\n font-size: var(--beam-SelectSubscriptionNonprofit-submitButton-fontSize);\n font-weight: var(--beam-SelectSubscriptionNonprofit-submitButton-fontWeight);\n font-family: var(--beam-SelectSubscriptionNonprofit-submitButton-fontFamily);\n text-transform: var(--beam-SelectSubscriptionNonprofit-submitButton-textTransform);\n border-radius: var(--beam-SelectSubscriptionNonprofit-submitButton-borderRadius);\n padding: var(--beam-SelectSubscriptionNonprofit-submitButton-padding);\n transition: background-color 0.2s, border-color 0.2s, color 0.2s;\n cursor: pointer;\n display: inline-flex;\n width: 234.173px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n flex-shrink: 0;\n }\n\n .submitButton:not(.isDisabled):focus-visible,\n .submitButton:not(.isDisabled):hover {\n background-color: var(--beam-SelectSubscriptionNonprofit-submitButton-hover-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-submitButton-hover-borderColor);\n color: var(--beam-SelectSubscriptionNonprofit-submitButton-hover-color);\n }\n\n .submitButton.isDisabled {\n color: var(--beam-SelectSubscriptionNonprofit-submitButton-disabled-color);\n background-color: var(--beam-SelectSubscriptionNonprofit-submitButton-disabled-backgroundColor);\n border-color: var(--beam-SelectSubscriptionNonprofit-submitButton-disabled-borderColor);\n cursor: not-allowed;\n }\n\n .hideStickyFooter {\n display: none;\n }\n `,\n cssCardGrid({\n gap: \"var(--beam-SelectSubscriptionNonprofit-options-gap)\",\n itemMinWidth: \"var(--beam-SelectSubscriptionNonprofit-options-minWidth)\",\n columnCount: \"var(--beam-SelectSubscriptionNonprofit-options-columnCount)\",\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.subscriptionUpdateDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.subscriptionUpdateDataController.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 cardStyle = this.cssVariables[\"--beam-SelectSubscriptionNonprofit-cardStyle\"];\n const displayIcon = cardStyle === \"'icon'\" || cardStyle === \"'selected_icon'\";\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div class=\"widget-container ${this.isMobile ? \"widget-container-mobile\" : \"\"}\">\n <div class=\"header-container ${this.isMobile ? \"header-container-mobile\" : \"header-container-desktop\"}\">\n <h3 class=\"title\" part=\"title\" id=\"beam-SelectSubscriptionNonprofit-title\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].ctaTitle()}\n </h3>\n <div\n class=\"description-container ${this.isMobile\n ? \"header-container-mobile description-mobile\"\n : \"header-container-desktop description-desktop\"}\"\n >\n <span class=\"description\" part=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.additionalStrings?.[\"ctaMessage\"] || \"\") ||\n strings[this.configLang].ctaMessage()}\n </span>\n <span class=\"description-prefix\" part=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.additionalStrings?.[\"ctaMessagePrefix\"] || \"\") ||\n strings[this.configLang].ctaMessagePrefix()}\n </span>\n </div>\n </div>\n <div class=\"root\">\n <div\n tabindex=\"-1\"\n class=\"options cardGrid\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-SelectSubscriptionNonprofit-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 const unselectedIcon = np.nonprofit.causeIconUrl;\n const selectedIcon = np.nonprofit.causeIconSelectedUrl;\n const cardImage = np.imageUrl;\n const iconImage = cardStyle === \"'selected_icon'\" ? selectedIcon : unselectedIcon;\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 >\n ${displayIcon\n ? html` <div class=\"card-icon-container\">\n <div class=\"icon-background\">\n <img src=\"${iconImage}\" alt=\"\" role=\"presentation\" class=\"card-icon\" />\n </div>\n </div>`\n : html` <div class=\"card-image-container\">\n <img src=\"${cardImage}\" alt=\"\" role=\"presentation\" class=\"card-image\" />\n </div>`}\n <div class=\"card-details-container\" part=\"details\">\n <div class=\"details-cause\">\n <span part=\"checkbox\" class=\"checkbox\">\n <span style=\"line-height: 0;\"> ${_checkbox({ height: \"10px\", width: \"10px\" })} </span>\n </span>\n ${localizeUserString(this.configLang, np.nonprofit.cause || \"\")}\n </div>\n <p class=\"details-description\">\n ${unsafeHTML(localizeUserString(this.configLang, np.impact.description || \"\"))}\n </p>\n <div class=\"card-progress-bar\">\n <beam-progress-bar\n value=\"${np.impact.goalProgressPercentage}\"\n style=\"flex: 1 0;\"\n ></beam-progress-bar>\n <span class=\"details-funding-progress-label\">\n ${localizeUserString(this.configLang, np.impact.goalProgressText)}\n </span>\n </div>\n </div>\n </div>\n `;\n }\n )}\n </div>\n </div>\n <div\n id=\"footer\"\n class=\"footer ${this.isMobile ? \"sticky-footer\" : \"footer-desktop\"} ${this.isMobile &&\n !this.selectedNonprofitId\n ? \"hideStickyFooter\"\n : \"\"}\"\n >\n <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.subscriptionUpdateDataController.data !== null\n ? localizeUserString(\n this.configLang,\n data?.config?.web?.additionalStrings?.[\"submitButtonTextCompleted\"] || \"\"\n ) || strings[this.configLang].submitButtonTextCompleted()\n : localizeUserString(this.configLang, data?.config?.web?.additionalStrings?.[\"submitButtonText\"] || \"\") ||\n strings[this.configLang].submitButtonText()}\n </button>\n </div>\n </div>\n `;\n }\n}\n\ndefineCustomElement(BeamSelectSubscriptionNonprofit);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-select-subscription-nonprofit\": BeamSelectSubscriptionNonprofit;\n }\n}\n"],"names":["_checkbox","height","width","html","styleMap","strings","donationPercentage","cacheTtl","BeamSelectSubscriptionNonprofit","LitElement","DEFAULT_BASE_URL","enforceConfig","res","postChainEligibleNonprofitsForCart","makeApiKeyHeader","selectedNonprofitId","updateSubscription","AsyncController","createScopedLocalStorage","id","index","nonprofits","event","currentId","nextFocus","focusTarget","selectedNonprofit","np","BeamNonprofitSelectEvent","WIDGET_NAMES","debounce","SUPPORTED_LANGUAGES","_changedProperties","previousPropertyValues","requireNewDataProps","prop","createdAt","data","defaults","progressBarConfigDefaults","defineCustomText","remoteConfig","config","_cssVariableMap","loading","_loading","_errorMessage","BeamError","cardStyle","displayIcon","localizeUserString","repeat","i","isSelected","isFocusable","unselectedIcon","selectedIcon","cardImage","iconImage","classMap","unsafeHTML","cssReset","css","useCustomText","cssCardGrid","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { waitForElement } from '../utils/wait-for-element.js';
|
|
2
2
|
export { initNetworkListeners } from '../utils/network-listeners.js';
|
|
3
|
-
export { e as events } from '../chunks/events-
|
|
3
|
+
export { e as events } from '../chunks/events-C55rozsO.esm.js';
|
|
4
4
|
export { B as BeamShopifyCartIntegrationConfig, T as TBeamOrderPageParams, a as addBeamAttributesToCart, d as appendBeamAttributesToCart, b as appendStatsigToShopifyCartAttributes, c as appendToShopifyCartBeamAttribute, f as getBeamAttributesForCart, g as getCurrentCart, e as getShopifyCart, r as registerCartIntegration, s as showBeamOrderPageWidgets, t as trackCart } from '../chunks/order-page-D_p01zgd.esm.js';
|
|
5
5
|
import '../chunks/cart-contents-oArgpFbi.esm.js';
|
|
6
6
|
import '../chunks/openapi-spec-x9NbL7bU.esm.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{waitForElement as t}from"../utils/wait-for-element.esm.js";import{getCookieValue as r,getCookieMap as o}from"../utils/cookies.esm.js";import{initNetworkListeners as
|
|
1
|
+
import{waitForElement as t}from"../utils/wait-for-element.esm.js";import{getCookieValue as r,getCookieMap as o}from"../utils/cookies.esm.js";import{initNetworkListeners as W}from"../utils/network-listeners.esm.js";import{e as Z}from"../chunks/events-Dki0ka4F.esm.js";import{t as j,b as q,Z as z,x as D,C as G,v as H,E as J,X as K,s as Q,$ as R}from"../chunks/order-page-Bowqodk5.esm.js";import"../chunks/beam-errors-Ci0d3926.esm.js";import"../chunks/lodash-D3TLHRR_.esm.js";import"../utils/logger.esm.js";import"../utils/local-storage.esm.js";import"../utils/memoize-last.esm.js";import"../chunks/promo-types-DKAOFHJr.esm.js";import"../chunks/cart-contents-DkoytiZh.esm.js";import"../chunks/update-cart-BGAM3i5j.esm.js";import"../chunks/routes-DCT5U9dA.esm.js";import"../utils/remote-session.esm.js";import"../utils/promoManager.esm.js";import"../utils/cart.esm.js";import"./post-purchase.esm.js";import"../chunks/lit-WqMxC_PA.esm.js";import"../chunks/enforce-config-CZ3ToOgr.esm.js";import"../chunks/localize-Btu9xYcE.esm.js";import"../chunks/index-Bp9sWMsk.esm.js";import"../chunks/progress-bar-DF7UuuHb.esm.js";import"../chunks/promo-pill-label-CbW_Vcru.esm.js";import"../chunks/vendor-KKSARHWL.esm.js";import"./beam-partner-logos.esm.js";import"../chunks/loading-template-DG4lkIIc.esm.js";import"../chunks/css-card-grid-CvoGpsJH.esm.js";import"./impact-overview.esm.js";import"../chunks/_share-dialog-dependencies-DQlABdY4.esm.js";import"../chunks/share-button-BEXn6SRs.esm.js";import"../chunks/is-all-html-elements-fcB7UUA1.esm.js";import"../chunks/share-button-7um4cBYz.esm.js";import"../chunks/responsive-BR8qUfBa.esm.js";const i={waitForElement:t,getCookieMap:o,getCookieValue:r};export{j as addBeamAttributesToCart,q as appendBeamAttributesToCart,z as appendStatsigToShopifyCartAttributes,D as appendToShopifyCartBeamAttribute,Z as events,G as getBeamAttributesForCart,H as getCurrentCart,J as getShopifyCart,W as initNetworkListeners,K as registerCartIntegration,Q as showBeamOrderPageWidgets,R as trackCart,i as utils};
|
|
2
2
|
//# sourceMappingURL=shopify.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify.esm.js","sources":["../../src/components/shopify/index.ts"],"sourcesContent":["/**\n * @deprecated\n * This file is preserved for backwards compatability, but future users should import from:\n * - integrations/shopify\n * - integration/utils\n * */\n\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { getCookieMap, getCookieValue } from \"../../utils/cookies\";\n\nconst utils = {\n waitForElement,\n getCookieMap,\n getCookieValue,\n};\n\nexport { utils };\nexport { initNetworkListeners } from \"../../utils/network-listeners\";\nexport * as events from \"../../utils/events\";\n\nexport * from \"../../integrations/shopify\";\n"],"names":["utils","waitForElement","getCookieMap","getCookieValue"],"mappings":"
|
|
1
|
+
{"version":3,"file":"shopify.esm.js","sources":["../../src/components/shopify/index.ts"],"sourcesContent":["/**\n * @deprecated\n * This file is preserved for backwards compatability, but future users should import from:\n * - integrations/shopify\n * - integration/utils\n * */\n\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { getCookieMap, getCookieValue } from \"../../utils/cookies\";\n\nconst utils = {\n waitForElement,\n getCookieMap,\n getCookieValue,\n};\n\nexport { utils };\nexport { initNetworkListeners } from \"../../utils/network-listeners\";\nexport * as events from \"../../utils/events\";\n\nexport * from \"../../integrations/shopify\";\n"],"names":["utils","waitForElement","getCookieMap","getCookieValue"],"mappings":"6lDAUA,MAAMA,EAAQ,CACZ,eAAAC,EACA,aAAAC,EACA,eAAAC,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{waitForElement as t}from"../utils/wait-for-element.js";import{getCookieValue as r,getCookieMap as o}from"../utils/cookies.js";import{initNetworkListeners as
|
|
1
|
+
import{waitForElement as t}from"../utils/wait-for-element.js";import{getCookieValue as r,getCookieMap as o}from"../utils/cookies.js";import{initNetworkListeners as W}from"../utils/network-listeners.js";import{e as Z}from"../chunks/events-Dki0ka4F.esm.js";import{t as j,b as q,Z as z,x as D,C as G,v as H,E as J,X as K,s as Q,$ as R}from"../chunks/order-page-C2wPfn6k.esm.js";import"../chunks/beam-errors-Ci0d3926.esm.js";import"../chunks/lodash-D3TLHRR_.esm.js";import"../utils/logger.js";import"../utils/local-storage.js";import"../utils/memoize-last.js";import"../chunks/promo-types-DKAOFHJr.esm.js";import"../chunks/cart-contents-DkoytiZh.esm.js";import"../chunks/update-cart-pMo1b75q.esm.js";import"../chunks/routes-DelUpFFo.esm.js";import"../utils/remote-session.js";import"../utils/promoManager.js";import"../utils/cart.js";import"./post-purchase.js";import"../chunks/lit-WqMxC_PA.esm.js";import"../chunks/enforce-config-Ba1JkOHs.esm.js";import"../chunks/localize-C25pEGnx.esm.js";import"../chunks/index-DA4pws6n.esm.js";import"../chunks/progress-bar-DF7UuuHb.esm.js";import"../chunks/promo-pill-label-CbW_Vcru.esm.js";import"../chunks/vendor-KKSARHWL.esm.js";import"./beam-partner-logos.js";import"../chunks/loading-template-DG4lkIIc.esm.js";import"../chunks/css-card-grid-CvoGpsJH.esm.js";import"./impact-overview.js";import"../chunks/_share-dialog-dependencies-Dg-9riak.esm.js";import"../chunks/share-button-B376j4qt.esm.js";import"../chunks/is-all-html-elements-fcB7UUA1.esm.js";import"../chunks/share-button-BZ9Dmpsy.esm.js";import"../chunks/responsive-BR8qUfBa.esm.js";const i={waitForElement:t,getCookieMap:o,getCookieValue:r};export{j as addBeamAttributesToCart,q as appendBeamAttributesToCart,z as appendStatsigToShopifyCartAttributes,D as appendToShopifyCartBeamAttribute,Z as events,G as getBeamAttributesForCart,H as getCurrentCart,J as getShopifyCart,W as initNetworkListeners,K as registerCartIntegration,Q as showBeamOrderPageWidgets,R as trackCart,i as utils};
|
|
2
2
|
//# sourceMappingURL=shopify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shopify.js","sources":["../../src/components/shopify/index.ts"],"sourcesContent":["/**\n * @deprecated\n * This file is preserved for backwards compatability, but future users should import from:\n * - integrations/shopify\n * - integration/utils\n * */\n\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { getCookieMap, getCookieValue } from \"../../utils/cookies\";\n\nconst utils = {\n waitForElement,\n getCookieMap,\n getCookieValue,\n};\n\nexport { utils };\nexport { initNetworkListeners } from \"../../utils/network-listeners\";\nexport * as events from \"../../utils/events\";\n\nexport * from \"../../integrations/shopify\";\n"],"names":["utils","waitForElement","getCookieMap","getCookieValue"],"mappings":"
|
|
1
|
+
{"version":3,"file":"shopify.js","sources":["../../src/components/shopify/index.ts"],"sourcesContent":["/**\n * @deprecated\n * This file is preserved for backwards compatability, but future users should import from:\n * - integrations/shopify\n * - integration/utils\n * */\n\nimport { waitForElement } from \"../../utils/wait-for-element\";\nimport { getCookieMap, getCookieValue } from \"../../utils/cookies\";\n\nconst utils = {\n waitForElement,\n getCookieMap,\n getCookieValue,\n};\n\nexport { utils };\nexport { initNetworkListeners } from \"../../utils/network-listeners\";\nexport * as events from \"../../utils/events\";\n\nexport * from \"../../integrations/shopify\";\n"],"names":["utils","waitForElement","getCookieMap","getCookieValue"],"mappings":"6iDAUA,MAAMA,EAAQ,CACZ,eAAAC,EACA,aAAAC,EACA,eAAAC,CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as m,g as o,t as n,h as g,y as f}from"../chunks/lit-WqMxC_PA.esm.js";import"../chunks/vendor-KKSARHWL.esm.js";import"../chunks/_share-dialog-dependencies-
|
|
1
|
+
import{f as m,g as o,t as n,h as g,y as f}from"../chunks/lit-WqMxC_PA.esm.js";import"../chunks/vendor-KKSARHWL.esm.js";import"../chunks/_share-dialog-dependencies-DQlABdY4.esm.js";import"../chunks/progress-bar-DF7UuuHb.esm.js";import"./beam-partner-logos.esm.js";import{c as b,d as y,e as u}from"../chunks/enforce-config-CZ3ToOgr.esm.js";import{D as w,S as x,g as I,W as U}from"../chunks/routes-DCT5U9dA.esm.js";import{_ as S}from"../chunks/loading-template-DG4lkIIc.esm.js";import{u as d,s as r,p}from"../chunks/share-button-7um4cBYz.esm.js";import"../chunks/beam-errors-Ci0d3926.esm.js";import"../utils/logger.esm.js";import"../chunks/promo-types-DKAOFHJr.esm.js";var k=Object.defineProperty,a=(l,t,i,v)=>{for(var s=void 0,c=l.length-1,h;c>=0;c--)(h=l[c])&&(s=h(t,i,s)||s);return s&&k(t,i,s),s};class e extends g{constructor(){super(...arguments),this.baseUrl=w,this.lang="en",this.debug=!1,this.brandName=null,this.shareImageUrl=null,this.isMobile=!1,this.windowResized=!1,this.checkViewport=()=>{this.windowResized=window.innerWidth<=768}}get configLang(){return x[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.checkViewport),this.checkViewport()}disconnectedCallback(){window.removeEventListener("resize",this.checkViewport),super.disconnectedCallback()}async fetchImpactData(){u(["apiKey","storeId","nonprofitId"],this);try{return await I({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{storeId:this.storeId,personalImpactLimit:0,nonprofitId:this.nonprofitId,widgetName:U.community_impact,version:"1.0.0",lang:this.configLang,transactionId:this.transactionId??void 0}})}catch(t){throw this.debug&&console.error("Failed to fetch impact data",t),t}}async updateImpactData(){try{const t=await this.fetchImpactData();if(t&&(this.brandName=t.chain.name,this.shareImageUrl=t.promoAssetUrl||t.personalImpactAssetUrl||t.community[0].share.imageUrl,this.shareImageUrl)){const i=await d(this.shareImageUrl);this.file=i,this.dataUrl=URL.createObjectURL(i)}}catch(t){this.debug&&console.error("Error updating impact data:",t)}}async firstUpdated(){await this.updateImpactData(),this.isMobile=/Mobi|Android/i.test(navigator.userAgent)||"ontouchstart"in window||navigator.maxTouchPoints>0}async openSystemShareSheet(t){if(t)try{const i=await d(t);navigator.share&&this.brandName&&await navigator.share({files:[i],title:r[this.lang].impactShareTitle(),text:r[this.lang].impactShareText({brandName:this.brandName})})}catch(i){this.debug&&console.error("Failed to open share sheet",i)}}async handleClickCopy(){if(this.file)try{this.apiKey&&this.transactionId?p({baseUrl:this.baseUrl,apiKey:this.apiKey||"",requestBody:{eventName:"ExtensibilityCopyImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:Number(this.transactionId)}}).catch(()=>null):console.error("Missing data for social share analytics. Skipping send"),await navigator.clipboard.write([new ClipboardItem({"image/png":this.file})])}catch(t){this.debug&&console.error("Failed to copy image to clipboard:",t)}}handleClickDownload(t){this.apiKey&&this.transactionId?p({baseUrl:this.baseUrl,apiKey:this.apiKey||"",requestBody:{eventName:"ExtensibilityDownloadImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:Number(this.transactionId)}}).catch(()=>null):console.error("Missing data for social share analytics. Skipping send");const i=t.currentTarget;this.isMobile&&this.shareImageUrl?(t.preventDefault(),this.openSystemShareSheet(this.shareImageUrl)):this.dataUrl&&(i.href=this.dataUrl,i.download=r[this.lang].impactShareTitle())}render(){return!this.brandName||!this.shareImageUrl||!this.dataUrl?S():f`
|
|
2
2
|
<div class="share-container ${this.windowResized||this.isMobile?"mobile":"desktop"}">
|
|
3
3
|
<h2 class="share-title">${r[this.lang].impactShareTitle()}</h2>
|
|
4
4
|
<p class="share-text">${r[this.lang].impactShareText({brandName:this.brandName})}</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social-share.esm.js","sources":["../../src/components/social-share/index.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport \"../../shared/components/_share-dialog-dependencies\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { getImpact } from \"../../api-sdk/v3/routes\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES, WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { MissingConfig } from \"../../utils/beam-errors\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { strings } from \"../../shared/components/strings/share-button\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { urlToFile } from \"../../shared/files\";\nimport { postSocialShareAnalyticsEvent } from \"../../api-sdk/v2/users/events\";\n\ntype RequiredConfig = {\n apiKey: string;\n storeId: TNumericId;\n nonprofitId: TNumericId;\n};\n\nexport class BeamSocialShare extends LitElement {\n static tagName = \"beam-social-share\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n @property({ type: Number }) storeId?: RequiredConfig[\"storeId\"];\n @property({ type: Number }) nonprofitId?: RequiredConfig[\"nonprofitId\"];\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n @property({ type: Boolean }) public debug = false;\n @property({ type: String }) transactionId?: string;\n\n @state() private brandName: string | null = null;\n @state() private shareImageUrl: string | null = null;\n @state() private dataUrl?: string;\n @state() private file?: File;\n @state() private isMobile = false;\n @state() private windowResized = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.checkViewport);\n this.checkViewport();\n }\n\n disconnectedCallback() {\n window.removeEventListener(\"resize\", this.checkViewport);\n super.disconnectedCallback();\n }\n\n checkViewport = () => {\n this.windowResized = window.innerWidth <= 768;\n };\n\n private async fetchImpactData() {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"storeId\", \"nonprofitId\"], this)) {\n throw new MissingConfig();\n }\n try {\n const res = await getImpact({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n queryParams: {\n storeId: this.storeId,\n personalImpactLimit: 0,\n nonprofitId: this.nonprofitId,\n widgetName: WIDGET_NAMES.community_impact,\n version: \"1.0.0\",\n lang: this.configLang,\n transactionId: this.transactionId ?? undefined,\n },\n });\n return res;\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to fetch impact data\", error);\n }\n throw error;\n }\n }\n\n // Updates component state with fetched impact data\n private async updateImpactData() {\n try {\n const data = await this.fetchImpactData();\n if (data) {\n this.brandName = data.chain.name;\n this.shareImageUrl = data.promoAssetUrl || data.personalImpactAssetUrl || data.community[0].share.imageUrl;\n\n if (this.shareImageUrl) {\n const file = await urlToFile(this.shareImageUrl);\n this.file = file;\n this.dataUrl = URL.createObjectURL(file);\n }\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Error updating impact data:\", error);\n }\n }\n }\n\n async firstUpdated() {\n await this.updateImpactData();\n this.isMobile =\n /Mobi|Android/i.test(navigator.userAgent) || \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n }\n\n private async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n try {\n const file = await urlToFile(imageUrl);\n if (navigator.share && this.brandName) {\n await navigator.share({\n files: [file],\n title: strings[this.lang].impactShareTitle(),\n text: strings[this.lang].impactShareText({ brandName: this.brandName }),\n });\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to open share sheet\", error);\n }\n }\n }\n\n private async handleClickCopy() {\n if (this.file) {\n try {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityCopyImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": this.file })]);\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to copy image to clipboard:\", error);\n }\n }\n }\n }\n\n private handleClickDownload(event: Event) {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityDownloadImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n const target = event.currentTarget as HTMLAnchorElement;\n if (this.isMobile && this.shareImageUrl) {\n event.preventDefault();\n this.openSystemShareSheet(this.shareImageUrl);\n } else if (this.dataUrl) {\n target.href = this.dataUrl;\n target.download = strings[this.lang].impactShareTitle();\n }\n }\n\n render() {\n if (!this.brandName || !this.shareImageUrl || !this.dataUrl) {\n return _loading();\n }\n\n return html`\n <div class=\"share-container ${this.windowResized || this.isMobile ? \"mobile\" : \"desktop\"}\">\n <h2 class=\"share-title\">${strings[this.lang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.lang].impactShareText({ brandName: this.brandName })}</p>\n <img src=\"${this.shareImageUrl}\" alt=\"${strings[this.lang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\">\n <button class=\"plain-button button share-action-button\" @click=\"${this.handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.lang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareCopy()}</div>\n </button>\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.lang].impactShareTitle()}\"\n href=\"${this.dataUrl}\"\n @click=\"${this.handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.lang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n `;\n }\n\n static styles = [\n cssReset,\n css`\n @font-face {\n font-family: \"Mabry-Bold\";\n src: url(\"../../../assets/fonts/mabry-bold.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n @font-face {\n font-family: \"Mabry-Medium\";\n src: url(\"../../../assets/fonts/mabry-medium.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n :host {\n align-items: center;\n justify-content: center;\n display: flex;\n box-sizing: border-box;\n width: 100%;\n }\n\n .share-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 700px;\n text-align: center;\n }\n\n .share-container.mobile {\n padding: 1rem;\n max-width: 100%;\n }\n\n .share-title {\n font-family: \"Mabry-Bold\", sans-serif;\n font-size: 2.5rem;\n font-weight: bold;\n word-break: break-word;\n margin: 10px 0;\n }\n\n .share-title.mobile {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1.25rem;\n line-height: 1.4;\n word-break: break-word;\n margin: 10px 0;\n max-width: 500px;\n }\n\n .share-text.mobile {\n font-size: 1rem;\n }\n\n .share-image {\n border-radius: 8px;\n width: 100%;\n max-width: 300px;\n height: auto;\n display: block;\n margin: 20px auto;\n }\n\n .share-actions {\n display: flex;\n flex-direction: row;\n justify-content: center;\n gap: 10px;\n align-items: center;\n margin: 20px 0;\n }\n\n .share-actions.mobile {\n flex-direction: column;\n }\n\n .share-action-button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 20px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background-color: #fff;\n text-decoration: none;\n color: #333;\n cursor: pointer;\n transition: background-color 0.3s, border-color 0.3s;\n }\n\n .share-action-button:hover {\n background-color: #f0f0f0;\n border-color: #bbb;\n }\n\n .share-action-icon {\n font-size: 1.25rem;\n margin-right: 8px;\n }\n\n .share-action-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1rem;\n line-height: 1.4;\n margin-top: 5px;\n }\n\n @media (max-width: 600px) {\n .share-title {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-size: 1rem;\n }\n\n .share-image {\n max-width: 240px;\n }\n\n .share-actions {\n flex-direction: row;\n width: 50%;\n margin: 10px 0;\n }\n\n .share-action-button {\n width: 100%;\n margin: 5px 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamSocialShare);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-social-share\": BeamSocialShare;\n }\n}\n"],"names":["m","i","s","t","e","r","d","BeamSocialShare","LitElement","DEFAULT_BASE_URL","SUPPORTED_LANGUAGES","enforceConfig","getImpact","WIDGET_NAMES","error","data","file","urlToFile","imageUrl","strings","postSocialShareAnalyticsEvent","event","target","_loading","html","cssReset","css","__decorateClass","property","state","defineCustomElement"],"mappings":"4mBAAA,IAAAA,EAAA,OAAA,eAAAC,EAAA,CAAA,EAAAC,EAAAC,EAAAC,IAAA,CAAA,QAAAC,EAAA,OAAA,EAAA,EAAA,OAAA,EAAAC,EAAA,GAAA,EAAA,KAAAA,EAAA,EAAA,CAAA,KAAAD,EAAAC,EAAAJ,EAAAC,EAAAE,CAAA,GAAAA,GAAA,OAAAA,GAAAL,EAAAE,EAAAC,EAAAE,CAAA,EAAAA,CAAA,EAyBa,MAAAE,UAAwBC,CAAW,CAAzC,aAMuB,CAAA,MAAA,GAAA,SAAA,EAAA,KAAO,QAAUC,EACjB,KAAO,KAAkB,KACxB,KAAO,MAAQ,GAGnC,KAAQ,UAA2B,KACnC,KAAQ,cAA+B,KAGvC,KAAQ,SAAW,GACnB,KAAQ,cAAgB,GAiBjC,KAAgB,cAAA,IAAM,CACpB,KAAK,cAAgB,OAAO,YAAc,GAC5C,CAjBA,CAAA,IAAI,YAAa,CACf,OAAOC,EAAoB,KAAK,IAAI,GAAK,IAC3C,CAEA,mBAAoB,CAClB,MAAM,kBAAkB,EACxB,OAAO,iBAAiB,SAAU,KAAK,aAAa,EACpD,KAAK,cACP,CAAA,CAEA,sBAAuB,CACrB,OAAO,oBAAoB,SAAU,KAAK,aAAa,EACvD,MAAM,qBAAqB,CAC7B,CAMA,MAAc,iBAAkB,CACzBC,EAA8B,CAAC,SAAU,UAAW,aAAa,EAAG,IAAI,EAG7E,GAAI,CAcF,OAbY,MAAMC,EAAU,CAC1B,QAAS,KAAK,QACd,QAAS,CAAE,cAAe,WAAW,KAAK,MAAM,EAAG,EACnD,YAAa,CACX,QAAS,KAAK,QACd,oBAAqB,EACrB,YAAa,KAAK,YAClB,WAAYC,EAAa,iBACzB,QAAS,QACT,KAAM,KAAK,WACX,cAAe,KAAK,eAAiB,MACvC,CACF,CAAC,CAEH,OAASC,EAAO,CACd,MAAI,KAAK,OACP,QAAQ,MAAM,8BAA+BA,CAAK,EAE9CA,CACR,CACF,CAGA,MAAc,kBAAmB,CAC/B,GAAI,CACF,MAAMC,EAAO,MAAM,KAAK,gBAAA,EACxB,GAAIA,IACF,KAAK,UAAYA,EAAK,MAAM,KAC5B,KAAK,cAAgBA,EAAK,eAAiBA,EAAK,wBAA0BA,EAAK,UAAU,CAAC,EAAE,MAAM,SAE9F,KAAK,eAAe,CACtB,MAAMC,EAAO,MAAMC,EAAU,KAAK,aAAa,EAC/C,KAAK,KAAOD,EACZ,KAAK,QAAU,IAAI,gBAAgBA,CAAI,CACzC,CAEJ,OAASF,EAAO,CACV,KAAK,OACP,QAAQ,MAAM,8BAA+BA,CAAK,CAEtD,CACF,CAEA,MAAM,cAAe,CACnB,MAAM,KAAK,iBAAA,EACX,KAAK,SACH,gBAAgB,KAAK,UAAU,SAAS,GAAK,iBAAkB,QAAU,UAAU,eAAiB,CACxG,CAEA,MAAc,qBAAqBI,EAAkB,CACnD,GAAKA,EAEL,GAAI,CACF,MAAMF,EAAO,MAAMC,EAAUC,CAAQ,EACjC,UAAU,OAAS,KAAK,WAC1B,MAAM,UAAU,MAAM,CACpB,MAAO,CAACF,CAAI,EACZ,MAAOG,EAAQ,KAAK,IAAI,EAAE,iBAAiB,EAC3C,KAAMA,EAAQ,KAAK,IAAI,EAAE,gBAAgB,CAAE,UAAW,KAAK,SAAU,CAAC,CACxE,CAAC,CAEL,OAASL,EAAO,CACV,KAAK,OACP,QAAQ,MAAM,6BAA8BA,CAAK,CAErD,CACF,CAEA,MAAc,iBAAkB,CAC9B,GAAI,KAAK,KACP,GAAI,CACE,KAAK,QAAU,KAAK,cACjBM,EAA8B,CACjC,QAAS,KAAK,QACd,OAAQ,KAAK,QAAU,GACvB,YAAa,CACX,UAAW,oCACX,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,UAAW,KAAK,IAChB,EAAA,cAAe,OAAO,KAAK,aAAa,CAC1C,CACF,CAAC,EAAE,MAAM,IAAM,IAAI,EAEnB,QAAQ,MAAM,wDAAwD,EAExE,MAAM,UAAU,UAAU,MAAM,CAAC,IAAI,cAAc,CAAE,YAAa,KAAK,IAAK,CAAC,CAAC,CAAC,CACjF,OAASN,EAAO,CACV,KAAK,OACP,QAAQ,MAAM,qCAAsCA,CAAK,CAE7D,CAEJ,CAEQ,oBAAoBO,EAAc,CACpC,KAAK,QAAU,KAAK,cACjBD,EAA8B,CACjC,QAAS,KAAK,QACd,OAAQ,KAAK,QAAU,GACvB,YAAa,CACX,UAAW,wCACX,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,UAAW,KAAK,IAAI,EACpB,cAAe,OAAO,KAAK,aAAa,CAC1C,CACF,CAAC,EAAE,MAAM,IAAM,IAAI,EAEnB,QAAQ,MAAM,wDAAwD,EAExE,MAAME,EAASD,EAAM,cACjB,KAAK,UAAY,KAAK,eACxBA,EAAM,iBACN,KAAK,qBAAqB,KAAK,aAAa,GACnC,KAAK,UACdC,EAAO,KAAO,KAAK,QACnBA,EAAO,SAAWH,EAAQ,KAAK,IAAI,EAAE,mBAEzC,CAEA,QAAS,CACP,MAAI,CAAC,KAAK,WAAa,CAAC,KAAK,eAAiB,CAAC,KAAK,QAC3CI,EAGFC,EAAAA;AAAAA,oCACyB,KAAK,eAAiB,KAAK,SAAW,SAAW,SAAS;AAAA,kCAC5DL,EAAQ,KAAK,IAAI,EAAE,kBAAkB;AAAA,gCACvCA,EAAQ,KAAK,IAAI,EAAE,gBAAgB,CAAE,UAAW,KAAK,SAAU,CAAC,CAAC;AAAA,oBAC7E,KAAK,aAAa,UAAUA,EAAQ,KAAK,IAAI,EAAE,kBAAkB;AAAA;AAAA,4EAET,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA,uBAIzEA,EAAQ,KAAK,IAAI,EAAE,iBAAiB;AAAA;AAAA;AAAA,6CAGdA,EAAQ,KAAK,IAAI,EAAE,iBAAiB;AAAA;AAAA;AAAA;AAAA,wBAIzDA,EAAQ,KAAK,IAAI,EAAE,kBAAkB;AAAA,oBACzC,KAAK,OAAO;AAAA,sBACV,KAAK,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKvBA,EAAQ,KAAK,IAAI,EAAE,qBAAqB;AAAA;AAAA;AAAA,6CAGlBA,EAAQ,KAAK,IAAI,EAAE,qBAAqB;AAAA;AAAA;AAAA;AAAA,KAKnF,CA+IF,CAvVaZ,EACJ,QAAU,oBADNA,EA0MJ,OAAS,CACdkB,EACAC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,KA0IF,EAnVmCC,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAHf,EAAArB,EAGwB,UACPoB,QAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAJfrB,EAIiB,UACAoB,SAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EALfrB,EAKiB,UAAA,aAAA,EACOoB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CANf,EAAArB,EAMwB,qBACAoB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAPf,EAAArB,EAOwB,UACCoB,MAAAA,EAAAA,EAAA,CAAnCC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAAA,EARhBrB,EAQyB,UAAA,OAAA,EACRoB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GATfrB,EASiB,UAAA,eAAA,EAEXoB,EAAA,CAAhBE,EAAM,CAAA,EAXItB,EAWM,UACAoB,WAAAA,EAAAA,EAAA,CAAhBE,EAZU,CAAA,EAAAtB,EAYM,2BACAoB,EAAA,CAAhBE,EAAM,CAAA,EAbItB,EAaM,UAAA,SAAA,EACAoB,EAAA,CAAhBE,EAAAA,CAdU,EAAAtB,EAcM,UACAoB,MAAAA,EAAAA,EAAA,CAAhBE,EAAM,CAAA,EAfItB,EAeM,UAAA,UAAA,EACAoB,EAAA,CAAhBE,GAhBU,EAAAtB,EAgBM,UAyUnBuB,eAAAA,EAAAA,EAAoBvB,CAAe"}
|
|
1
|
+
{"version":3,"file":"social-share.esm.js","sources":["../../src/components/social-share/index.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport \"../../shared/components/_share-dialog-dependencies\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { getImpact } from \"../../api-sdk/v3/routes\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES, WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { MissingConfig } from \"../../utils/beam-errors\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { strings } from \"../../shared/components/strings/share-button\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { urlToFile } from \"../../shared/files\";\nimport { postSocialShareAnalyticsEvent } from \"../../api-sdk/v2/users/events\";\n\ntype RequiredConfig = {\n apiKey: string;\n storeId: TNumericId;\n nonprofitId: TNumericId;\n};\n\nexport class BeamSocialShare extends LitElement {\n static tagName = \"beam-social-share\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n @property({ type: Number }) storeId?: RequiredConfig[\"storeId\"];\n @property({ type: Number }) nonprofitId?: RequiredConfig[\"nonprofitId\"];\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n @property({ type: Boolean }) public debug = false;\n @property({ type: String }) transactionId?: string;\n\n @state() private brandName: string | null = null;\n @state() private shareImageUrl: string | null = null;\n @state() private dataUrl?: string;\n @state() private file?: File;\n @state() private isMobile = false;\n @state() private windowResized = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.checkViewport);\n this.checkViewport();\n }\n\n disconnectedCallback() {\n window.removeEventListener(\"resize\", this.checkViewport);\n super.disconnectedCallback();\n }\n\n checkViewport = () => {\n this.windowResized = window.innerWidth <= 768;\n };\n\n private async fetchImpactData() {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"storeId\", \"nonprofitId\"], this)) {\n throw new MissingConfig();\n }\n try {\n const res = await getImpact({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n queryParams: {\n storeId: this.storeId,\n personalImpactLimit: 0,\n nonprofitId: this.nonprofitId,\n widgetName: WIDGET_NAMES.community_impact,\n version: \"1.0.0\",\n lang: this.configLang,\n transactionId: this.transactionId ?? undefined,\n },\n });\n return res;\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to fetch impact data\", error);\n }\n throw error;\n }\n }\n\n // Updates component state with fetched impact data\n private async updateImpactData() {\n try {\n const data = await this.fetchImpactData();\n if (data) {\n this.brandName = data.chain.name;\n this.shareImageUrl = data.promoAssetUrl || data.personalImpactAssetUrl || data.community[0].share.imageUrl;\n\n if (this.shareImageUrl) {\n const file = await urlToFile(this.shareImageUrl);\n this.file = file;\n this.dataUrl = URL.createObjectURL(file);\n }\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Error updating impact data:\", error);\n }\n }\n }\n\n async firstUpdated() {\n await this.updateImpactData();\n this.isMobile =\n /Mobi|Android/i.test(navigator.userAgent) || \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n }\n\n private async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n try {\n const file = await urlToFile(imageUrl);\n if (navigator.share && this.brandName) {\n await navigator.share({\n files: [file],\n title: strings[this.lang].impactShareTitle(),\n text: strings[this.lang].impactShareText({ brandName: this.brandName }),\n });\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to open share sheet\", error);\n }\n }\n }\n\n private async handleClickCopy() {\n if (this.file) {\n try {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityCopyImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": this.file })]);\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to copy image to clipboard:\", error);\n }\n }\n }\n }\n\n private handleClickDownload(event: Event) {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityDownloadImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n const target = event.currentTarget as HTMLAnchorElement;\n if (this.isMobile && this.shareImageUrl) {\n event.preventDefault();\n this.openSystemShareSheet(this.shareImageUrl);\n } else if (this.dataUrl) {\n target.href = this.dataUrl;\n target.download = strings[this.lang].impactShareTitle();\n }\n }\n\n render() {\n if (!this.brandName || !this.shareImageUrl || !this.dataUrl) {\n return _loading();\n }\n\n return html`\n <div class=\"share-container ${this.windowResized || this.isMobile ? \"mobile\" : \"desktop\"}\">\n <h2 class=\"share-title\">${strings[this.lang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.lang].impactShareText({ brandName: this.brandName })}</p>\n <img src=\"${this.shareImageUrl}\" alt=\"${strings[this.lang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\">\n <button class=\"plain-button button share-action-button\" @click=\"${this.handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.lang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareCopy()}</div>\n </button>\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.lang].impactShareTitle()}\"\n href=\"${this.dataUrl}\"\n @click=\"${this.handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.lang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n `;\n }\n\n static styles = [\n cssReset,\n css`\n @font-face {\n font-family: \"Mabry-Bold\";\n src: url(\"../../../assets/fonts/mabry-bold.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n @font-face {\n font-family: \"Mabry-Medium\";\n src: url(\"../../../assets/fonts/mabry-medium.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n :host {\n align-items: center;\n justify-content: center;\n display: flex;\n box-sizing: border-box;\n width: 100%;\n }\n\n .share-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 700px;\n text-align: center;\n }\n\n .share-container.mobile {\n padding: 1rem;\n max-width: 100%;\n }\n\n .share-title {\n font-family: \"Mabry-Bold\", sans-serif;\n font-size: 2.5rem;\n font-weight: bold;\n word-break: break-word;\n margin: 10px 0;\n }\n\n .share-title.mobile {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1.25rem;\n line-height: 1.4;\n word-break: break-word;\n margin: 10px 0;\n max-width: 500px;\n }\n\n .share-text.mobile {\n font-size: 1rem;\n }\n\n .share-image {\n border-radius: 8px;\n width: 100%;\n max-width: 300px;\n height: auto;\n display: block;\n margin: 20px auto;\n }\n\n .share-actions {\n display: flex;\n flex-direction: row;\n justify-content: center;\n gap: 10px;\n align-items: center;\n margin: 20px 0;\n }\n\n .share-actions.mobile {\n flex-direction: column;\n }\n\n .share-action-button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 20px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background-color: #fff;\n text-decoration: none;\n color: #333;\n cursor: pointer;\n transition: background-color 0.3s, border-color 0.3s;\n }\n\n .share-action-button:hover {\n background-color: #f0f0f0;\n border-color: #bbb;\n }\n\n .share-action-icon {\n font-size: 1.25rem;\n margin-right: 8px;\n }\n\n .share-action-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1rem;\n line-height: 1.4;\n margin-top: 5px;\n }\n\n @media (max-width: 600px) {\n .share-title {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-size: 1rem;\n }\n\n .share-image {\n max-width: 240px;\n }\n\n .share-actions {\n flex-direction: row;\n width: 50%;\n margin: 10px 0;\n }\n\n .share-action-button {\n width: 100%;\n margin: 5px 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamSocialShare);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-social-share\": BeamSocialShare;\n }\n}\n"],"names":["m","i","s","t","e","r","d","BeamSocialShare","LitElement","DEFAULT_BASE_URL","SUPPORTED_LANGUAGES","enforceConfig","getImpact","WIDGET_NAMES","error","data","file","urlToFile","imageUrl","strings","postSocialShareAnalyticsEvent","event","target","_loading","html","cssReset","css","__decorateClass","property","state","defineCustomElement"],"mappings":"0pBAAA,IAAAA,EAAA,OAAA,eAAAC,EAAA,CAAA,EAAAC,EAAAC,EAAAC,IAAA,CAAA,QAAAC,EAAA,OAAA,EAAA,EAAA,OAAA,EAAAC,EAAA,GAAA,EAAA,KAAAA,EAAA,EAAA,CAAA,KAAAD,EAAAC,EAAAJ,EAAAC,EAAAE,CAAA,GAAAA,GAAA,OAAAA,GAAAL,EAAAE,EAAAC,EAAAE,CAAA,EAAAA,CAAA,EAyBa,MAAAE,UAAwBC,CAAW,CAAzC,aAMuB,CAAA,MAAA,GAAA,SAAA,EAAA,KAAO,QAAUC,EACjB,KAAO,KAAkB,KACxB,KAAO,MAAQ,GAGnC,KAAQ,UAA2B,KACnC,KAAQ,cAA+B,KAGvC,KAAQ,SAAW,GACnB,KAAQ,cAAgB,GAiBjC,KAAgB,cAAA,IAAM,CACpB,KAAK,cAAgB,OAAO,YAAc,GAC5C,CAjBA,CAAA,IAAI,YAAa,CACf,OAAOC,EAAoB,KAAK,IAAI,GAAK,IAC3C,CAEA,mBAAoB,CAClB,MAAM,kBAAkB,EACxB,OAAO,iBAAiB,SAAU,KAAK,aAAa,EACpD,KAAK,cACP,CAAA,CAEA,sBAAuB,CACrB,OAAO,oBAAoB,SAAU,KAAK,aAAa,EACvD,MAAM,qBAAqB,CAC7B,CAMA,MAAc,iBAAkB,CACzBC,EAA8B,CAAC,SAAU,UAAW,aAAa,EAAG,IAAI,EAG7E,GAAI,CAcF,OAbY,MAAMC,EAAU,CAC1B,QAAS,KAAK,QACd,QAAS,CAAE,cAAe,WAAW,KAAK,MAAM,EAAG,EACnD,YAAa,CACX,QAAS,KAAK,QACd,oBAAqB,EACrB,YAAa,KAAK,YAClB,WAAYC,EAAa,iBACzB,QAAS,QACT,KAAM,KAAK,WACX,cAAe,KAAK,eAAiB,MACvC,CACF,CAAC,CAEH,OAASC,EAAO,CACd,MAAI,KAAK,OACP,QAAQ,MAAM,8BAA+BA,CAAK,EAE9CA,CACR,CACF,CAGA,MAAc,kBAAmB,CAC/B,GAAI,CACF,MAAMC,EAAO,MAAM,KAAK,gBAAA,EACxB,GAAIA,IACF,KAAK,UAAYA,EAAK,MAAM,KAC5B,KAAK,cAAgBA,EAAK,eAAiBA,EAAK,wBAA0BA,EAAK,UAAU,CAAC,EAAE,MAAM,SAE9F,KAAK,eAAe,CACtB,MAAMC,EAAO,MAAMC,EAAU,KAAK,aAAa,EAC/C,KAAK,KAAOD,EACZ,KAAK,QAAU,IAAI,gBAAgBA,CAAI,CACzC,CAEJ,OAASF,EAAO,CACV,KAAK,OACP,QAAQ,MAAM,8BAA+BA,CAAK,CAEtD,CACF,CAEA,MAAM,cAAe,CACnB,MAAM,KAAK,iBAAA,EACX,KAAK,SACH,gBAAgB,KAAK,UAAU,SAAS,GAAK,iBAAkB,QAAU,UAAU,eAAiB,CACxG,CAEA,MAAc,qBAAqBI,EAAkB,CACnD,GAAKA,EAEL,GAAI,CACF,MAAMF,EAAO,MAAMC,EAAUC,CAAQ,EACjC,UAAU,OAAS,KAAK,WAC1B,MAAM,UAAU,MAAM,CACpB,MAAO,CAACF,CAAI,EACZ,MAAOG,EAAQ,KAAK,IAAI,EAAE,iBAAiB,EAC3C,KAAMA,EAAQ,KAAK,IAAI,EAAE,gBAAgB,CAAE,UAAW,KAAK,SAAU,CAAC,CACxE,CAAC,CAEL,OAASL,EAAO,CACV,KAAK,OACP,QAAQ,MAAM,6BAA8BA,CAAK,CAErD,CACF,CAEA,MAAc,iBAAkB,CAC9B,GAAI,KAAK,KACP,GAAI,CACE,KAAK,QAAU,KAAK,cACjBM,EAA8B,CACjC,QAAS,KAAK,QACd,OAAQ,KAAK,QAAU,GACvB,YAAa,CACX,UAAW,oCACX,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,UAAW,KAAK,IAChB,EAAA,cAAe,OAAO,KAAK,aAAa,CAC1C,CACF,CAAC,EAAE,MAAM,IAAM,IAAI,EAEnB,QAAQ,MAAM,wDAAwD,EAExE,MAAM,UAAU,UAAU,MAAM,CAAC,IAAI,cAAc,CAAE,YAAa,KAAK,IAAK,CAAC,CAAC,CAAC,CACjF,OAASN,EAAO,CACV,KAAK,OACP,QAAQ,MAAM,qCAAsCA,CAAK,CAE7D,CAEJ,CAEQ,oBAAoBO,EAAc,CACpC,KAAK,QAAU,KAAK,cACjBD,EAA8B,CACjC,QAAS,KAAK,QACd,OAAQ,KAAK,QAAU,GACvB,YAAa,CACX,UAAW,wCACX,YAAa,KAAK,YAClB,QAAS,KAAK,QACd,UAAW,KAAK,IAAI,EACpB,cAAe,OAAO,KAAK,aAAa,CAC1C,CACF,CAAC,EAAE,MAAM,IAAM,IAAI,EAEnB,QAAQ,MAAM,wDAAwD,EAExE,MAAME,EAASD,EAAM,cACjB,KAAK,UAAY,KAAK,eACxBA,EAAM,iBACN,KAAK,qBAAqB,KAAK,aAAa,GACnC,KAAK,UACdC,EAAO,KAAO,KAAK,QACnBA,EAAO,SAAWH,EAAQ,KAAK,IAAI,EAAE,mBAEzC,CAEA,QAAS,CACP,MAAI,CAAC,KAAK,WAAa,CAAC,KAAK,eAAiB,CAAC,KAAK,QAC3CI,EAGFC,EAAAA;AAAAA,oCACyB,KAAK,eAAiB,KAAK,SAAW,SAAW,SAAS;AAAA,kCAC5DL,EAAQ,KAAK,IAAI,EAAE,kBAAkB;AAAA,gCACvCA,EAAQ,KAAK,IAAI,EAAE,gBAAgB,CAAE,UAAW,KAAK,SAAU,CAAC,CAAC;AAAA,oBAC7E,KAAK,aAAa,UAAUA,EAAQ,KAAK,IAAI,EAAE,kBAAkB;AAAA;AAAA,4EAET,KAAK,eAAe;AAAA;AAAA;AAAA;AAAA,uBAIzEA,EAAQ,KAAK,IAAI,EAAE,iBAAiB;AAAA;AAAA;AAAA,6CAGdA,EAAQ,KAAK,IAAI,EAAE,iBAAiB;AAAA;AAAA;AAAA;AAAA,wBAIzDA,EAAQ,KAAK,IAAI,EAAE,kBAAkB;AAAA,oBACzC,KAAK,OAAO;AAAA,sBACV,KAAK,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKvBA,EAAQ,KAAK,IAAI,EAAE,qBAAqB;AAAA;AAAA;AAAA,6CAGlBA,EAAQ,KAAK,IAAI,EAAE,qBAAqB;AAAA;AAAA;AAAA;AAAA,KAKnF,CA+IF,CAvVaZ,EACJ,QAAU,oBADNA,EA0MJ,OAAS,CACdkB,EACAC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,KA0IF,EAnVmCC,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAHf,EAAArB,EAGwB,UACPoB,QAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EAJfrB,EAIiB,UACAoB,SAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EALfrB,EAKiB,UAAA,aAAA,EACOoB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CANf,EAAArB,EAMwB,qBACAoB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAPf,EAAArB,EAOwB,UACCoB,MAAAA,EAAAA,EAAA,CAAnCC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAAA,EARhBrB,EAQyB,UAAA,OAAA,EACRoB,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,GATfrB,EASiB,UAAA,eAAA,EAEXoB,EAAA,CAAhBE,EAAM,CAAA,EAXItB,EAWM,UACAoB,WAAAA,EAAAA,EAAA,CAAhBE,EAZU,CAAA,EAAAtB,EAYM,2BACAoB,EAAA,CAAhBE,EAAM,CAAA,EAbItB,EAaM,UAAA,SAAA,EACAoB,EAAA,CAAhBE,EAAAA,CAdU,EAAAtB,EAcM,UACAoB,MAAAA,EAAAA,EAAA,CAAhBE,EAAM,CAAA,EAfItB,EAeM,UAAA,UAAA,EACAoB,EAAA,CAAhBE,GAhBU,EAAAtB,EAgBM,UAyUnBuB,eAAAA,EAAAA,EAAoBvB,CAAe"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as m,g as o,t as n,h as g,y as f}from"../chunks/lit-WqMxC_PA.esm.js";import"../chunks/vendor-KKSARHWL.esm.js";import"../chunks/_share-dialog-dependencies-
|
|
1
|
+
import{f as m,g as o,t as n,h as g,y as f}from"../chunks/lit-WqMxC_PA.esm.js";import"../chunks/vendor-KKSARHWL.esm.js";import"../chunks/_share-dialog-dependencies-Dg-9riak.esm.js";import"../chunks/progress-bar-DF7UuuHb.esm.js";import"./beam-partner-logos.js";import{c as b,d as y,e as u}from"../chunks/enforce-config-Ba1JkOHs.esm.js";import{D as w,S as x,g as I,W as U}from"../chunks/routes-DelUpFFo.esm.js";import{_ as S}from"../chunks/loading-template-DG4lkIIc.esm.js";import{u as d,s as r,p}from"../chunks/share-button-BZ9Dmpsy.esm.js";import"../chunks/beam-errors-Ci0d3926.esm.js";import"../utils/logger.js";import"../chunks/promo-types-DKAOFHJr.esm.js";var k=Object.defineProperty,a=(l,t,i,v)=>{for(var s=void 0,c=l.length-1,h;c>=0;c--)(h=l[c])&&(s=h(t,i,s)||s);return s&&k(t,i,s),s};class e extends g{constructor(){super(...arguments),this.baseUrl=w,this.lang="en",this.debug=!1,this.brandName=null,this.shareImageUrl=null,this.isMobile=!1,this.windowResized=!1,this.checkViewport=()=>{this.windowResized=window.innerWidth<=768}}get configLang(){return x[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.checkViewport),this.checkViewport()}disconnectedCallback(){window.removeEventListener("resize",this.checkViewport),super.disconnectedCallback()}async fetchImpactData(){u(["apiKey","storeId","nonprofitId"],this);try{return await I({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{storeId:this.storeId,personalImpactLimit:0,nonprofitId:this.nonprofitId,widgetName:U.community_impact,version:"1.0.0",lang:this.configLang,transactionId:this.transactionId??void 0}})}catch(t){throw this.debug&&console.error("Failed to fetch impact data",t),t}}async updateImpactData(){try{const t=await this.fetchImpactData();if(t&&(this.brandName=t.chain.name,this.shareImageUrl=t.promoAssetUrl||t.personalImpactAssetUrl||t.community[0].share.imageUrl,this.shareImageUrl)){const i=await d(this.shareImageUrl);this.file=i,this.dataUrl=URL.createObjectURL(i)}}catch(t){this.debug&&console.error("Error updating impact data:",t)}}async firstUpdated(){await this.updateImpactData(),this.isMobile=/Mobi|Android/i.test(navigator.userAgent)||"ontouchstart"in window||navigator.maxTouchPoints>0}async openSystemShareSheet(t){if(t)try{const i=await d(t);navigator.share&&this.brandName&&await navigator.share({files:[i],title:r[this.lang].impactShareTitle(),text:r[this.lang].impactShareText({brandName:this.brandName})})}catch(i){this.debug&&console.error("Failed to open share sheet",i)}}async handleClickCopy(){if(this.file)try{this.apiKey&&this.transactionId?p({baseUrl:this.baseUrl,apiKey:this.apiKey||"",requestBody:{eventName:"ExtensibilityCopyImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:Number(this.transactionId)}}).catch(()=>null):console.error("Missing data for social share analytics. Skipping send"),await navigator.clipboard.write([new ClipboardItem({"image/png":this.file})])}catch(t){this.debug&&console.error("Failed to copy image to clipboard:",t)}}handleClickDownload(t){this.apiKey&&this.transactionId?p({baseUrl:this.baseUrl,apiKey:this.apiKey||"",requestBody:{eventName:"ExtensibilityDownloadImageButtonClick",nonprofitId:this.nonprofitId,storeId:this.storeId,timestamp:Date.now(),transactionId:Number(this.transactionId)}}).catch(()=>null):console.error("Missing data for social share analytics. Skipping send");const i=t.currentTarget;this.isMobile&&this.shareImageUrl?(t.preventDefault(),this.openSystemShareSheet(this.shareImageUrl)):this.dataUrl&&(i.href=this.dataUrl,i.download=r[this.lang].impactShareTitle())}render(){return!this.brandName||!this.shareImageUrl||!this.dataUrl?S():f`
|
|
2
2
|
<div class="share-container ${this.windowResized||this.isMobile?"mobile":"desktop"}">
|
|
3
3
|
<h2 class="share-title">${r[this.lang].impactShareTitle()}</h2>
|
|
4
4
|
<p class="share-text">${r[this.lang].impactShareText({brandName:this.brandName})}</p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social-share.js","sources":["../../src/components/social-share/index.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport \"../../shared/components/_share-dialog-dependencies\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { getImpact } from \"../../api-sdk/v3/routes\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES, WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { MissingConfig } from \"../../utils/beam-errors\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { strings } from \"../../shared/components/strings/share-button\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { urlToFile } from \"../../shared/files\";\nimport { postSocialShareAnalyticsEvent } from \"../../api-sdk/v2/users/events\";\n\ntype RequiredConfig = {\n apiKey: string;\n storeId: TNumericId;\n nonprofitId: TNumericId;\n};\n\nexport class BeamSocialShare extends LitElement {\n static tagName = \"beam-social-share\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n @property({ type: Number }) storeId?: RequiredConfig[\"storeId\"];\n @property({ type: Number }) nonprofitId?: RequiredConfig[\"nonprofitId\"];\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n @property({ type: Boolean }) public debug = false;\n @property({ type: String }) transactionId?: string;\n\n @state() private brandName: string | null = null;\n @state() private shareImageUrl: string | null = null;\n @state() private dataUrl?: string;\n @state() private file?: File;\n @state() private isMobile = false;\n @state() private windowResized = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.checkViewport);\n this.checkViewport();\n }\n\n disconnectedCallback() {\n window.removeEventListener(\"resize\", this.checkViewport);\n super.disconnectedCallback();\n }\n\n checkViewport = () => {\n this.windowResized = window.innerWidth <= 768;\n };\n\n private async fetchImpactData() {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"storeId\", \"nonprofitId\"], this)) {\n throw new MissingConfig();\n }\n try {\n const res = await getImpact({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n queryParams: {\n storeId: this.storeId,\n personalImpactLimit: 0,\n nonprofitId: this.nonprofitId,\n widgetName: WIDGET_NAMES.community_impact,\n version: \"1.0.0\",\n lang: this.configLang,\n transactionId: this.transactionId ?? undefined,\n },\n });\n return res;\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to fetch impact data\", error);\n }\n throw error;\n }\n }\n\n // Updates component state with fetched impact data\n private async updateImpactData() {\n try {\n const data = await this.fetchImpactData();\n if (data) {\n this.brandName = data.chain.name;\n this.shareImageUrl = data.promoAssetUrl || data.personalImpactAssetUrl || data.community[0].share.imageUrl;\n\n if (this.shareImageUrl) {\n const file = await urlToFile(this.shareImageUrl);\n this.file = file;\n this.dataUrl = URL.createObjectURL(file);\n }\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Error updating impact data:\", error);\n }\n }\n }\n\n async firstUpdated() {\n await this.updateImpactData();\n this.isMobile =\n /Mobi|Android/i.test(navigator.userAgent) || \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n }\n\n private async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n try {\n const file = await urlToFile(imageUrl);\n if (navigator.share && this.brandName) {\n await navigator.share({\n files: [file],\n title: strings[this.lang].impactShareTitle(),\n text: strings[this.lang].impactShareText({ brandName: this.brandName }),\n });\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to open share sheet\", error);\n }\n }\n }\n\n private async handleClickCopy() {\n if (this.file) {\n try {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityCopyImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": this.file })]);\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to copy image to clipboard:\", error);\n }\n }\n }\n }\n\n private handleClickDownload(event: Event) {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityDownloadImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n const target = event.currentTarget as HTMLAnchorElement;\n if (this.isMobile && this.shareImageUrl) {\n event.preventDefault();\n this.openSystemShareSheet(this.shareImageUrl);\n } else if (this.dataUrl) {\n target.href = this.dataUrl;\n target.download = strings[this.lang].impactShareTitle();\n }\n }\n\n render() {\n if (!this.brandName || !this.shareImageUrl || !this.dataUrl) {\n return _loading();\n }\n\n return html`\n <div class=\"share-container ${this.windowResized || this.isMobile ? \"mobile\" : \"desktop\"}\">\n <h2 class=\"share-title\">${strings[this.lang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.lang].impactShareText({ brandName: this.brandName })}</p>\n <img src=\"${this.shareImageUrl}\" alt=\"${strings[this.lang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\">\n <button class=\"plain-button button share-action-button\" @click=\"${this.handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.lang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareCopy()}</div>\n </button>\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.lang].impactShareTitle()}\"\n href=\"${this.dataUrl}\"\n @click=\"${this.handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.lang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n `;\n }\n\n static styles = [\n cssReset,\n css`\n @font-face {\n font-family: \"Mabry-Bold\";\n src: url(\"../../../assets/fonts/mabry-bold.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n @font-face {\n font-family: \"Mabry-Medium\";\n src: url(\"../../../assets/fonts/mabry-medium.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n :host {\n align-items: center;\n justify-content: center;\n display: flex;\n box-sizing: border-box;\n width: 100%;\n }\n\n .share-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 700px;\n text-align: center;\n }\n\n .share-container.mobile {\n padding: 1rem;\n max-width: 100%;\n }\n\n .share-title {\n font-family: \"Mabry-Bold\", sans-serif;\n font-size: 2.5rem;\n font-weight: bold;\n word-break: break-word;\n margin: 10px 0;\n }\n\n .share-title.mobile {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1.25rem;\n line-height: 1.4;\n word-break: break-word;\n margin: 10px 0;\n max-width: 500px;\n }\n\n .share-text.mobile {\n font-size: 1rem;\n }\n\n .share-image {\n border-radius: 8px;\n width: 100%;\n max-width: 300px;\n height: auto;\n display: block;\n margin: 20px auto;\n }\n\n .share-actions {\n display: flex;\n flex-direction: row;\n justify-content: center;\n gap: 10px;\n align-items: center;\n margin: 20px 0;\n }\n\n .share-actions.mobile {\n flex-direction: column;\n }\n\n .share-action-button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 20px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background-color: #fff;\n text-decoration: none;\n color: #333;\n cursor: pointer;\n transition: background-color 0.3s, border-color 0.3s;\n }\n\n .share-action-button:hover {\n background-color: #f0f0f0;\n border-color: #bbb;\n }\n\n .share-action-icon {\n font-size: 1.25rem;\n margin-right: 8px;\n }\n\n .share-action-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1rem;\n line-height: 1.4;\n margin-top: 5px;\n }\n\n @media (max-width: 600px) {\n .share-title {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-size: 1rem;\n }\n\n .share-image {\n max-width: 240px;\n }\n\n .share-actions {\n flex-direction: row;\n width: 50%;\n margin: 10px 0;\n }\n\n .share-action-button {\n width: 100%;\n margin: 5px 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamSocialShare);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-social-share\": BeamSocialShare;\n }\n}\n"],"names":["m","i","s","t","e","r","d","BeamSocialShare","LitElement","DEFAULT_BASE_URL","SUPPORTED_LANGUAGES","enforceConfig","getImpact","WIDGET_NAMES","error","data","file","urlToFile","imageUrl","strings","postSocialShareAnalyticsEvent","event","target","_loading","html","cssReset","css","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"social-share.js","sources":["../../src/components/social-share/index.ts"],"sourcesContent":["import { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport \"../../shared/components/_share-dialog-dependencies\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { getImpact } from \"../../api-sdk/v3/routes\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES, WIDGET_NAMES } from \"../../api-sdk/constants\";\nimport { MissingConfig } from \"../../utils/beam-errors\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { strings } from \"../../shared/components/strings/share-button\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { urlToFile } from \"../../shared/files\";\nimport { postSocialShareAnalyticsEvent } from \"../../api-sdk/v2/users/events\";\n\ntype RequiredConfig = {\n apiKey: string;\n storeId: TNumericId;\n nonprofitId: TNumericId;\n};\n\nexport class BeamSocialShare extends LitElement {\n static tagName = \"beam-social-share\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n @property({ type: Number }) storeId?: RequiredConfig[\"storeId\"];\n @property({ type: Number }) nonprofitId?: RequiredConfig[\"nonprofitId\"];\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n @property({ type: Boolean }) public debug = false;\n @property({ type: String }) transactionId?: string;\n\n @state() private brandName: string | null = null;\n @state() private shareImageUrl: string | null = null;\n @state() private dataUrl?: string;\n @state() private file?: File;\n @state() private isMobile = false;\n @state() private windowResized = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.checkViewport);\n this.checkViewport();\n }\n\n disconnectedCallback() {\n window.removeEventListener(\"resize\", this.checkViewport);\n super.disconnectedCallback();\n }\n\n checkViewport = () => {\n this.windowResized = window.innerWidth <= 768;\n };\n\n private async fetchImpactData() {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"storeId\", \"nonprofitId\"], this)) {\n throw new MissingConfig();\n }\n try {\n const res = await getImpact({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n queryParams: {\n storeId: this.storeId,\n personalImpactLimit: 0,\n nonprofitId: this.nonprofitId,\n widgetName: WIDGET_NAMES.community_impact,\n version: \"1.0.0\",\n lang: this.configLang,\n transactionId: this.transactionId ?? undefined,\n },\n });\n return res;\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to fetch impact data\", error);\n }\n throw error;\n }\n }\n\n // Updates component state with fetched impact data\n private async updateImpactData() {\n try {\n const data = await this.fetchImpactData();\n if (data) {\n this.brandName = data.chain.name;\n this.shareImageUrl = data.promoAssetUrl || data.personalImpactAssetUrl || data.community[0].share.imageUrl;\n\n if (this.shareImageUrl) {\n const file = await urlToFile(this.shareImageUrl);\n this.file = file;\n this.dataUrl = URL.createObjectURL(file);\n }\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Error updating impact data:\", error);\n }\n }\n }\n\n async firstUpdated() {\n await this.updateImpactData();\n this.isMobile =\n /Mobi|Android/i.test(navigator.userAgent) || \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n }\n\n private async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n try {\n const file = await urlToFile(imageUrl);\n if (navigator.share && this.brandName) {\n await navigator.share({\n files: [file],\n title: strings[this.lang].impactShareTitle(),\n text: strings[this.lang].impactShareText({ brandName: this.brandName }),\n });\n }\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to open share sheet\", error);\n }\n }\n }\n\n private async handleClickCopy() {\n if (this.file) {\n try {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityCopyImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": this.file })]);\n } catch (error) {\n if (this.debug) {\n console.error(\"Failed to copy image to clipboard:\", error);\n }\n }\n }\n }\n\n private handleClickDownload(event: Event) {\n if (this.apiKey && this.transactionId) {\n void postSocialShareAnalyticsEvent({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey || \"\",\n requestBody: {\n eventName: \"ExtensibilityDownloadImageButtonClick\",\n nonprofitId: this.nonprofitId,\n storeId: this.storeId,\n timestamp: Date.now(),\n transactionId: Number(this.transactionId),\n },\n }).catch(() => null);\n } else {\n console.error(\"Missing data for social share analytics. Skipping send\");\n }\n const target = event.currentTarget as HTMLAnchorElement;\n if (this.isMobile && this.shareImageUrl) {\n event.preventDefault();\n this.openSystemShareSheet(this.shareImageUrl);\n } else if (this.dataUrl) {\n target.href = this.dataUrl;\n target.download = strings[this.lang].impactShareTitle();\n }\n }\n\n render() {\n if (!this.brandName || !this.shareImageUrl || !this.dataUrl) {\n return _loading();\n }\n\n return html`\n <div class=\"share-container ${this.windowResized || this.isMobile ? \"mobile\" : \"desktop\"}\">\n <h2 class=\"share-title\">${strings[this.lang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.lang].impactShareText({ brandName: this.brandName })}</p>\n <img src=\"${this.shareImageUrl}\" alt=\"${strings[this.lang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\">\n <button class=\"plain-button button share-action-button\" @click=\"${this.handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.lang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareCopy()}</div>\n </button>\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.lang].impactShareTitle()}\"\n href=\"${this.dataUrl}\"\n @click=\"${this.handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.lang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.lang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n `;\n }\n\n static styles = [\n cssReset,\n css`\n @font-face {\n font-family: \"Mabry-Bold\";\n src: url(\"../../../assets/fonts/mabry-bold.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n @font-face {\n font-family: \"Mabry-Medium\";\n src: url(\"../../../assets/fonts/mabry-medium.otf\") format(\"opentype\");\n font-weight: bold;\n font-style: normal;\n }\n :host {\n align-items: center;\n justify-content: center;\n display: flex;\n box-sizing: border-box;\n width: 100%;\n }\n\n .share-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 700px;\n text-align: center;\n }\n\n .share-container.mobile {\n padding: 1rem;\n max-width: 100%;\n }\n\n .share-title {\n font-family: \"Mabry-Bold\", sans-serif;\n font-size: 2.5rem;\n font-weight: bold;\n word-break: break-word;\n margin: 10px 0;\n }\n\n .share-title.mobile {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1.25rem;\n line-height: 1.4;\n word-break: break-word;\n margin: 10px 0;\n max-width: 500px;\n }\n\n .share-text.mobile {\n font-size: 1rem;\n }\n\n .share-image {\n border-radius: 8px;\n width: 100%;\n max-width: 300px;\n height: auto;\n display: block;\n margin: 20px auto;\n }\n\n .share-actions {\n display: flex;\n flex-direction: row;\n justify-content: center;\n gap: 10px;\n align-items: center;\n margin: 20px 0;\n }\n\n .share-actions.mobile {\n flex-direction: column;\n }\n\n .share-action-button {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 10px 20px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background-color: #fff;\n text-decoration: none;\n color: #333;\n cursor: pointer;\n transition: background-color 0.3s, border-color 0.3s;\n }\n\n .share-action-button:hover {\n background-color: #f0f0f0;\n border-color: #bbb;\n }\n\n .share-action-icon {\n font-size: 1.25rem;\n margin-right: 8px;\n }\n\n .share-action-text {\n font-family: \"Mabry-Medium\", sans-serif;\n font-size: 1rem;\n line-height: 1.4;\n margin-top: 5px;\n }\n\n @media (max-width: 600px) {\n .share-title {\n font-size: 1.5rem;\n }\n\n .share-text {\n font-size: 1rem;\n }\n\n .share-image {\n max-width: 240px;\n }\n\n .share-actions {\n flex-direction: row;\n width: 50%;\n margin: 10px 0;\n }\n\n .share-action-button {\n width: 100%;\n margin: 5px 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamSocialShare);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-social-share\": BeamSocialShare;\n }\n}\n"],"names":["m","i","s","t","e","r","d","BeamSocialShare","LitElement","DEFAULT_BASE_URL","SUPPORTED_LANGUAGES","enforceConfig","getImpact","WIDGET_NAMES","error","data","file","urlToFile","imageUrl","strings","postSocialShareAnalyticsEvent","event","target","_loading","html","cssReset","css","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
|
|
@@ -175,7 +175,7 @@ declare class BeamSubscriptionImpact extends LitElement {
|
|
|
175
175
|
get cssVariables(): any;
|
|
176
176
|
evaluateBreakPoints: lodash.DebouncedFuncLeading<() => void>;
|
|
177
177
|
resizeElements: lodash.DebouncedFuncLeading<() => void>;
|
|
178
|
-
render():
|
|
178
|
+
render(): lit_html.TemplateResult<1> | "";
|
|
179
179
|
renderInlineCard(impactCard: {
|
|
180
180
|
title: string;
|
|
181
181
|
description: string;
|