@beamimpact/web-sdk 1.36.6 → 1.36.7
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-BGBxD2DS.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-BGBxD2DS.esm.js.map +1 -0
- package/dist/chunks/_share-dialog-dependencies-l3E6m-4b.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-l3E6m-4b.esm.js.map +1 -0
- package/dist/chunks/{cart-contents-tEvcY9ip.esm.d.ts → cart-contents-Shc27L1J.esm.d.ts} +1 -1
- package/dist/chunks/enforce-config-MqLZWolV.esm.js +22 -0
- package/dist/chunks/enforce-config-MqLZWolV.esm.js.map +1 -0
- package/dist/chunks/enforce-config-n0D_zfMC.esm.js +22 -0
- package/dist/chunks/enforce-config-n0D_zfMC.esm.js.map +1 -0
- package/dist/chunks/{events-PZnG_xac.esm.d.ts → events-qTu4iIOo.esm.d.ts} +1 -1
- package/dist/chunks/index-0CUzV2-m.esm.js +2 -0
- package/dist/chunks/index-0CUzV2-m.esm.js.map +1 -0
- package/dist/chunks/index-0JdRzhqA.esm.js +2 -0
- package/dist/chunks/index-0JdRzhqA.esm.js.map +1 -0
- package/dist/chunks/{index-rOz-i1aX.esm.d.ts → index-3ThDVYOT.esm.d.ts} +4 -4
- package/dist/chunks/{index-hbzssC4x.esm.d.ts → index-3Xf6QzNV.esm.d.ts} +1 -1
- package/dist/chunks/{index-aGYbEHXq.esm.js → index-5yFqo0yl.esm.js} +2 -2
- package/dist/chunks/index-5yFqo0yl.esm.js.map +1 -0
- package/dist/chunks/index-6hf6jo8u.esm.js +2 -0
- package/dist/chunks/index-6hf6jo8u.esm.js.map +1 -0
- package/dist/chunks/{index-G6h0AEAz.esm.d.ts → index-6t9MtjyS.esm.d.ts} +3 -1
- package/dist/chunks/index-8G1d1I0a.esm.js +2 -0
- package/dist/chunks/index-8G1d1I0a.esm.js.map +1 -0
- package/dist/chunks/{index-JL12lEnO.esm.js → index-EHubF2KN.esm.js} +2 -2
- package/dist/chunks/index-EHubF2KN.esm.js.map +1 -0
- package/dist/chunks/{index-5-EnaNnJ.esm.d.ts → index-I8DBdgx0.esm.d.ts} +1 -1
- package/dist/chunks/index-IzAvjker.esm.js +2 -0
- package/dist/chunks/index-IzAvjker.esm.js.map +1 -0
- package/dist/chunks/index-L6UcfXYR.esm.js +2 -0
- package/dist/chunks/index-L6UcfXYR.esm.js.map +1 -0
- package/dist/chunks/{index-JfA-djTR.esm.js → index-MAsTKsZm.esm.js} +2 -2
- package/dist/chunks/{index-JfA-djTR.esm.js.map → index-MAsTKsZm.esm.js.map} +1 -1
- package/dist/chunks/{index-e6o8bmIt.esm.js → index-hC71uT32.esm.js} +2 -2
- package/dist/chunks/{index-e6o8bmIt.esm.js.map → index-hC71uT32.esm.js.map} +1 -1
- package/dist/chunks/{index-PL4iasT1.esm.d.ts → index-kuEhVQcF.esm.d.ts} +1 -1
- package/dist/chunks/index-m6tLtpwd.esm.js +2 -0
- package/dist/chunks/index-m6tLtpwd.esm.js.map +1 -0
- package/dist/chunks/index-o7YiP4gC.esm.js +2 -0
- package/dist/chunks/index-o7YiP4gC.esm.js.map +1 -0
- package/dist/chunks/{index--eKbxy32.esm.d.ts → index-oLz4lmx2.esm.d.ts} +3 -1
- package/dist/chunks/{index-U2dW3lkm.esm.d.ts → index-tfP1RBZU.esm.d.ts} +1 -1
- package/dist/chunks/{index-nJEBkWPL.esm.d.ts → index-wbrSi6cp.esm.d.ts} +1 -1
- package/dist/chunks/localize-0rA0DbzI.esm.js +10 -0
- package/dist/chunks/localize-0rA0DbzI.esm.js.map +1 -0
- package/dist/chunks/localize-eZMViIud.esm.js +10 -0
- package/dist/chunks/localize-eZMViIud.esm.js.map +1 -0
- package/dist/chunks/{openapi-spec-tJkr2i9K.esm.d.ts → openapi-spec-D_Zzbl2J.esm.d.ts} +215 -5
- package/dist/chunks/{order-page-sDLRWj-E.esm.js → order-page-MyFrJe1o.esm.js} +2 -2
- package/dist/chunks/{order-page-sDLRWj-E.esm.js.map → order-page-MyFrJe1o.esm.js.map} +1 -1
- package/dist/chunks/{order-page-LMEdbSdq.esm.js → order-page-PGTQXoSr.esm.js} +2 -2
- package/dist/chunks/{order-page-LMEdbSdq.esm.js.map → order-page-PGTQXoSr.esm.js.map} +1 -1
- package/dist/chunks/{order-page-cFAaDNWE.esm.d.ts → order-page-ydw5uXTI.esm.d.ts} +21 -2
- package/dist/chunks/routes-USQ3n64Y.esm.js +2 -0
- package/dist/chunks/{routes-bWWE2fXp.esm.js.map → routes-USQ3n64Y.esm.js.map} +1 -1
- package/dist/chunks/routes-wPiw5U5n.esm.js +2 -0
- package/dist/chunks/{routes-h6eWTToy.esm.js.map → routes-wPiw5U5n.esm.js.map} +1 -1
- package/dist/chunks/{update-cart-PflL_pK3.esm.js → update-cart-8xlajjFj.esm.js} +2 -2
- package/dist/chunks/{update-cart-PflL_pK3.esm.js.map → update-cart-8xlajjFj.esm.js.map} +1 -1
- package/dist/chunks/{update-cart-k_Y-sCyt.esm.js → update-cart-OkpQAdyP.esm.js} +2 -2
- package/dist/chunks/{update-cart-k_Y-sCyt.esm.js.map → update-cart-OkpQAdyP.esm.js.map} +1 -1
- package/dist/chunks/{update-cart-m3NdnSx2.esm.d.ts → update-cart-yCIzgmve.esm.d.ts} +1 -1
- package/dist/components/community-impact.esm.js +4 -4
- package/dist/components/community-impact.esm.js.map +1 -1
- package/dist/components/community-impact.js +4 -4
- package/dist/components/community-impact.js.map +1 -1
- package/dist/components/cumulative-impact.esm.js +2 -2
- package/dist/components/cumulative-impact.esm.js.map +1 -1
- package/dist/components/cumulative-impact.js +2 -2
- package/dist/components/cumulative-impact.js.map +1 -1
- package/dist/components/impact-overview.d.ts +0 -2
- package/dist/components/impact-overview.esm.js +5 -5
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +5 -5
- package/dist/components/impact-overview.js.map +1 -1
- package/dist/components/index.d.ts +3 -2
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +2 -3
- package/dist/components/post-purchase.esm.js +4 -5
- package/dist/components/post-purchase.esm.js.map +1 -1
- package/dist/components/post-purchase.js +4 -5
- package/dist/components/post-purchase.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +2 -2
- package/dist/components/redeem-transaction.esm.js +2 -2
- package/dist/components/redeem-transaction.esm.js.map +1 -1
- package/dist/components/redeem-transaction.js +2 -2
- package/dist/components/redeem-transaction.js.map +1 -1
- package/dist/components/select-nonprofit.d.ts +2 -2
- package/dist/components/select-nonprofit.esm.js +1 -1
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +1 -1
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/shopify.d.ts +5 -5
- 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/subscription-management.d.ts +114 -0
- package/dist/components/subscription-management.esm.js +52 -0
- package/dist/components/subscription-management.esm.js.map +1 -0
- package/dist/components/subscription-management.js +52 -0
- package/dist/components/subscription-management.js.map +1 -0
- package/dist/index.d.ts +15 -13
- 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.js +1 -1
- package/dist/integrations/cart.d.ts +3 -3
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/index.d.ts +9 -9
- package/dist/integrations/index.esm.js +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/logs.d.ts +2 -2
- package/dist/integrations/logs.esm.js +1 -1
- package/dist/integrations/logs.js +1 -1
- package/dist/integrations/shopify.d.ts +4 -4
- 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.js +1 -1
- package/dist/integrations/utils.d.ts +3 -3
- 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 +5 -3
- package/dist/react/index.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.d.ts +2 -2
- 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/redeem-transaction.d.ts +3 -3
- 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 +3 -3
- 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/subscription-management.d.ts +11 -0
- package/dist/react/subscription-management.esm.js +2 -0
- package/dist/react/subscription-management.esm.js.map +1 -0
- package/dist/react/subscription-management.js +2 -0
- package/dist/react/subscription-management.js.map +1 -0
- package/dist/utils/events.d.ts +3 -3
- package/dist/utils/index.d.ts +3 -3
- package/package.json +2 -2
- package/dist/chunks/_share-dialog-dependencies-7OysCcbl.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-7OysCcbl.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-IH8H0M7S.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-IH8H0M7S.esm.js.map +0 -1
- package/dist/chunks/index-D7cyvlBG.esm.js +0 -2
- package/dist/chunks/index-D7cyvlBG.esm.js.map +0 -1
- package/dist/chunks/index-Fvk8qalO.esm.js +0 -2
- package/dist/chunks/index-Fvk8qalO.esm.js.map +0 -1
- package/dist/chunks/index-JL12lEnO.esm.js.map +0 -1
- package/dist/chunks/index-K9rDxqim.esm.js +0 -2
- package/dist/chunks/index-K9rDxqim.esm.js.map +0 -1
- package/dist/chunks/index-LY8cCwxB.esm.js +0 -2
- package/dist/chunks/index-LY8cCwxB.esm.js.map +0 -1
- package/dist/chunks/index-Li9RyHWl.esm.js +0 -2
- package/dist/chunks/index-Li9RyHWl.esm.js.map +0 -1
- package/dist/chunks/index-YfVtHaFO.esm.js +0 -2
- package/dist/chunks/index-YfVtHaFO.esm.js.map +0 -1
- package/dist/chunks/index-YoXRWj_4.esm.js +0 -2
- package/dist/chunks/index-YoXRWj_4.esm.js.map +0 -1
- package/dist/chunks/index-aGYbEHXq.esm.js.map +0 -1
- package/dist/chunks/index-bo9Yq4jd.esm.js +0 -2
- package/dist/chunks/index-bo9Yq4jd.esm.js.map +0 -1
- package/dist/chunks/localize-BGPniqcI.esm.js +0 -30
- package/dist/chunks/localize-BGPniqcI.esm.js.map +0 -1
- package/dist/chunks/localize-dXHrlK8g.esm.js +0 -30
- package/dist/chunks/localize-dXHrlK8g.esm.js.map +0 -1
- package/dist/chunks/routes-bWWE2fXp.esm.js +0 -2
- package/dist/chunks/routes-h6eWTToy.esm.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redeem-transaction.js","sources":["../../src/shared/fragments/checkbox.ts","../../src/components/redeem-transaction/strings.ts","../../src/components/redeem-transaction/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 beamAttribution: () => `Powered by Beam`,\n ctaTitle: () => `Choose your impact`,\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Select a nonprofit and ${donationPercentage} of your purchase will be donated, at no extra cost.`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n fr: {\n beamAttribution: () => `Optimisé par Beam`,\n ctaTitle: () => `Choisissez votre cause`,\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Choisissez un organisme à but non lucratif et ${donationPercentage}% lui sera versé en votre nom, sans frais supplémentaires.`,\n submitButtonText: () => `Confirmer`,\n submitButtonTextCompleted: () => `Confirmé!`,\n chooseButtonText: () => `Choisissez`,\n },\n de: {\n beamAttribution: () => `Unterstützt von Beam`,\n ctaTitle: () => `Wähle deinen Impact`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Wähle eine der gemeinnützigen Organisationen und spende ${donationPercentage} deines Einkaufs ohne zusätzliche Kosten`,\n submitButtonText: () => \"Bestätigen\",\n submitButtonTextCompleted: () => `Bestätigt!`,\n chooseButtonText: () => `Wählen`,\n },\n es: {\n ctaTitle: () => \"Elige tu contribución\",\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Elige una organización sin fines de lucro y donaremos ${donationPercentage} de tu compra sin coste adicional.`,\n beamAttribution: () => \"Ofrecido por Beam\",\n submitButtonText: () => \"Confirmar\",\n submitButtonTextCompleted: () => \"Confirmado\",\n chooseButtonText: () => `Elige`,\n },\n it: {\n ctaTitle: () => \"Scegli dove fare la differenza\",\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Seleziona un'organizzazione no-profit a cui devolvere l’${donationPercentage} del tuo acquisto, senza costi aggiuntivi`,\n beamAttribution: () => \"Gestito da Beam\",\n submitButtonText: () => \"Confermare\",\n submitButtonTextCompleted: () => \"Confermato!\",\n chooseButtonText: () => `Scegli`,\n },\n pl: {\n beamAttribution: () => `Wspierany przez Beam`,\n ctaTitle: () => `Wybierz inicjatywę, którą chcesz wesprzeć`,\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Wybierz organizację, której przekażesz ${donationPercentage} wartości Twoich zakupów – bez żadnych dodatkowych kosztów!`,\n submitButtonText: () => `Zatwierdź`,\n submitButtonTextCompleted: () => `Zatwierdzono!`,\n chooseButtonText: () => `Wybierz`,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { state } from \"lit/decorators/state.js\";\nimport debounce from \"lodash-es/debounce\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { TId, TNumericId } from \"../../shared/types\";\nimport { TCart } from \"../../shared/cart-contents\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { cssCardGrid } from \"../../shared/fragments/css-card-grid\";\nimport { _checkbox } from \"../../shared/fragments/checkbox\";\nimport { postChainEligibleNonprofitsForCart, putTransaction } from \"../../api-sdk/v3/routes\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { partnerLogosConfigDefaults } from \"../beam-partner-logos\";\nimport { strings } from \"./strings\";\n\ninterface RequiredConfig {\n apiKey: string;\n transactionId: TId;\n}\n\nexport class BeamRedeemTransaction extends LitElement {\n static tagName = \"beam-redeem-transaction\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public transactionId?: RequiredConfig[\"transactionId\"];\n\n @property({ type: Number }) public storeId?: TNumericId;\n\n @property({ type: String }) public countryCode?: string;\n\n @property({ type: String }) public postalCode?: string;\n\n @property({ type: Object }) public cart?: TCart;\n\n @property({ type: Number, reflect: true }) public selectedNonprofitId?: TNumericId;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public debug = false;\n\n @state() private isMobile = window.innerWidth < 768;\n\n @state() private didUserExpandNonprofits = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getChainNonprofits = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"transactionId\"], this)) {\n throw new MissingConfig();\n }\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n requestBody: {\n storeId: this.storeId,\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n cart: this.cart ?? undefined,\n widgetName: \"redeem-transaction\",\n version: \"1.0.0\",\n lang: this.configLang,\n },\n });\n\n // If store ID was not provided, get the store ID from response here\n if (res.store?.id && res.store.id !== this.storeId) {\n this.storeId = res.store.id;\n }\n\n this.localStorage.setItemJson(\"chainNonprofits\", {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private putTransaction = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId }) => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"transactionId\"], this)) {\n throw new MissingConfig();\n }\n return putTransaction({\n baseUrl: this.baseUrl,\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n pathParams: {\n transactionId: Number(this.transactionId), // TODO: fix api spec for PUT transaction/:id to use string\n },\n requestBody: {\n nonprofitId: selectedNonprofitId,\n },\n });\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits\n );\n\n private selectionDataController = new AsyncController<typeof this.putTransaction>(this, this.putTransaction);\n\n private localStorage = createScopedLocalStorage(this as LitElement & RequiredConfig);\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<RequiredConfig>([\"apiKey\"], this)) throw new MissingConfig();\n this.selectedNonprofitId = parseInt(this.localStorage.getItem(\"nonprofit\") || \"\") || undefined;\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 const cacheTtl = 2 * 60 * 60 * 1000;\n if (new Date(createdAt).valueOf() + cacheTtl > new Date().valueOf()) {\n this.nonprofitListDataController.data = data;\n this.nonprofitListDataController.loading = false;\n }\n } catch (err) {\n // ignore cache retrieval error and continue to fetch data\n }\n }\n\n /**\n * Factory for selection event handler\n *\n * Nonprofit selector implements radio-button semantics:\n * * If nothing is selected, tabbing into selector selects first card\n * * Arrow keys changes focus between cards, but doesn't select\n * * Enter/Space sets selection\n * * If a nonprofit is selected, arrow keys change focus AND selection\n * * Click sets selection\n * @param {number} id\n * @param {number} index\n * @param {{id: number}[]} nonprofits\n * @returns {(evt: Event) => void}\n */\n private makeHandleSelect =\n (id: number, index: number, nonprofits: { nonprofit: { id: number } }[]): ((event: Event) => void) =>\n async (event: Event) => {\n if (!this.allowChange) return;\n\n const currentId = this.selectedNonprofitId;\n if (event instanceof KeyboardEvent) {\n let nextFocus = null;\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n if (index === 0) {\n nextFocus = nonprofits[nonprofits.length - 1];\n } else {\n nextFocus = nonprofits[index - 1];\n }\n event.preventDefault();\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n if (index === nonprofits.length - 1) {\n nextFocus = nonprofits[0];\n } else {\n nextFocus = nonprofits[index + 1];\n }\n event.preventDefault();\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n break; // continue to toggle-selection block below\n default:\n return;\n }\n if (nextFocus) {\n const focusTarget = this.renderRoot.querySelector(`[data-value=\"${nextFocus.nonprofit.id}\"]`) as HTMLElement;\n if (focusTarget !== null) {\n focusTarget.tabIndex = 0;\n focusTarget.focus();\n }\n return;\n }\n }\n // Handle selection with click or Enter/Space key\n const targetEl = event.currentTarget;\n if (targetEl instanceof HTMLElement) {\n if (currentId === id) {\n // this[\"selected-nonprofit-id\"] = undefined; // unset (not supported)\n return; // no API call or localStorage change needed\n } else {\n this.selectedNonprofitId = id;\n }\n }\n };\n\n get allowChange() {\n // Disallow change if already submitted\n return this.selectionDataController.data == null && !this.selectionDataController.loading;\n }\n\n get allowSubmit() {\n // Disabled if no nonprofit has been selected yet or if submission was already received\n return Boolean(this.selectedNonprofitId && this.allowChange);\n }\n\n handleSubmit = async () => {\n const { selectedNonprofitId } = this;\n if (!this.allowSubmit || selectedNonprofitId == null) return;\n await this.selectionDataController.exec({ selectedNonprofitId });\n\n this.localStorage.setItem(\"nonprofit\", selectedNonprofitId);\n\n const selectedNonprofit = this.nonprofitListDataController?.data?.nonprofits.find(\n (np) => np.nonprofit.id === selectedNonprofitId\n );\n\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({ selectedNonprofitId, nonprofitName: selectedNonprofit?.nonprofit.name })\n );\n };\n\n evaluateBreakPoints = debounce(\n () => {\n this.isMobile = window.innerWidth < 768;\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n public get cssVariables() {\n const defaults = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n ...partnerLogosConfigDefaults,\n ...progressBarConfigDefaults,\n \"--beam-RedeemTransaction-maxWidth\": \"1000px\",\n \"--beam-RedeemTransaction-submitButton-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-hover-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-disabled-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-backgroundColor\": \"#333\",\n \"--beam-RedeemTransaction-submitButton-hover-backgroundColor\": \"#222\",\n \"--beam-RedeemTransaction-submitButton-disabled-backgroundColor\": \"#767676\",\n \"--beam-RedeemTransaction-submitButton-borderColor\": \"#333\",\n \"--beam-RedeemTransaction-submitButton-hover-borderColor\": \"#222\",\n \"--beam-RedeemTransaction-submitButton-disabled-borderColor\": \"#767676\",\n \"--beam-RedeemTransaction-submitButton-fontSize\": \"14px\",\n \"--beam-RedeemTransaction-submitButton-fontWeight\": \"inherit\",\n \"--beam-RedeemTransaction-submitButton-fontFamily\": \"inherit\",\n \"--beam-RedeemTransaction-submitButton-textTransform\": \"none\",\n \"--beam-RedeemTransaction-submitButton-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-submitButton-padding\": \"15px 30px\",\n \"--beam-RedeemTransaction-submitButton-position\": \"right\" /* bottom only applies to mobile */,\n \"--beam-RedeemTransaction-submitButton-positionRight-width\": \"auto\",\n \"--beam-RedeemTransaction-submitButton-positionBottom-width\": \"100%\",\n \"--beam-RedeemTransaction-submitButton-positionBottom-marginTop\": \"10px\",\n \"--beam-RedeemTransaction-checkmark-color\": \"transparent\",\n \"--beam-RedeemTransaction-checkmark-selected-color\": \"#fff\",\n \"--beam-RedeemTransaction-checkmark-hover-color\": \"#fff\",\n \"--beam-RedeemTransaction-checkmark-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-checkmark-selected-backgroundColor\": \"#333\",\n \"--beam-RedeemTransaction-checkmark-hover-backgroundColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-checkmark-borderColor\": \"transparent\",\n \"--beam-RedeemTransaction-checkmark-selected-borderColor\": \"#333\",\n \"--beam-RedeemTransaction-checkmark-hover-borderColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-options-minWidth\": \"250px\",\n \"--beam-RedeemTransaction-options-columnCount\": \"2\",\n \"--beam-RedeemTransaction-options-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-options-borderWidth\": \"1px\",\n \"--beam-RedeemTransaction-options-selected-borderWidth\": \"2px\",\n \"--beam-RedeemTransaction-options-focus-borderWidth\": \"1px\",\n \"--beam-RedeemTransaction-options-image-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-options-borderColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-options-selected-borderColor\": \"currentColor\",\n \"--beam-RedeemTransaction-options-hover-borderColor\": \"#ccc\",\n \"--beam-RedeemTransaction-options-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-options-selected-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-options-hover-backgroundColor\": \"#f1f1f1\",\n \"--beam-RedeemTransaction-options-marginTop\": \"15px\",\n ...defineCustomText(\"--beam-RedeemTransaction-title\", {\n fontSize: \"1.25em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-description\", {\n marginTop: \"0.5em\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-details-cause\", {\n fontSize: \"1em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-details-impactDescription\", {\n fontSize: \"0.85em\",\n marginTop: \"10px\",\n }),\n \"--beam-RedeemTransaction-details-nonprofitName-fontWeight\": \"bold\",\n \"--beam-RedeemTransaction-details-nonprofitName-fontStyle\": \"inherit\",\n \"--beam-RedeemTransaction-details-fundingProgress-marginTop\": \"10px\",\n ...defineCustomText(\"--beam-RedeemTransaction-details-fundingProgressLabel\", {\n fontSize: \"0.85em\",\n }),\n \"--beam-RedeemTransaction-cardStyle\": \"'image'\",\n \"--beam-RedeemTransaction-options-icon-padding\": \"0px\",\n \"--beam-RedeemTransaction-options-collapseNonprofits-mobile\": \"false\",\n \"--beam-RedeemTransaction-options-collapseNonprofits-desktop\": \"false\",\n };\n\n const remoteConfig = this.nonprofitListDataController?.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n max-width: var(--beam-RedeemTransaction-maxWidth, 1000px);\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 }\n\n .headerContainer {\n align-items: flex-start;\n justify-content: space-between;\n display: flex;\n }\n\n .submitButton {\n color: var(--beam-RedeemTransaction-submitButton-color, #fff);\n background-color: var(--beam-RedeemTransaction-submitButton-backgroundColor, #333);\n border: 1px solid var(--beam-RedeemTransaction-submitButton-borderColor, #333);\n font-size: var(--beam-RedeemTransaction-submitButton-fontSize, 14px);\n font-weight: var(--beam-RedeemTransaction-submitButton-fontWeight, inherit);\n font-family: var(--beam-RedeemTransaction-submitButton-fontFamily, inherit);\n text-transform: var(--beam-RedeemTransaction-submitButton-textTransform, none);\n border-radius: var(--beam-RedeemTransaction-submitButton-borderRadius, 0);\n padding: var(--beam-RedeemTransaction-submitButton-padding, 15px 30px);\n transition: background-color 0.2s, border-color 0.2s, color 0.2s;\n cursor: pointer;\n }\n\n .submitButton.positionRight {\n width: var(--beam-RedeemTransaction-submitButton-positionRight-width, auto);\n margin-left: 30px;\n }\n\n .submitButton.positionBottom {\n width: var(--beam-RedeemTransaction-submitButton-positionBottom-width, 100%);\n margin-top: var(--beam-RedeemTransaction-submitButton-positionBottom-marginTop, 10px);\n }\n\n .submitButton:not(.isDisabled):focus-visible,\n .submitButton:not(.isDisabled):hover {\n background-color: var(--beam-RedeemTransaction-submitButton-hover-backgroundColor, #222);\n border-color: var(--beam-RedeemTransaction-submitButton-hover-borderColor, #222);\n color: var(--beam-RedeemTransaction-submitButton-hover-color, #fff);\n }\n\n .submitButton.isDisabled {\n color: var(--beam-RedeemTransaction-submitButton-disabled-color, #fff);\n background-color: var(--beam-RedeemTransaction-submitButton-disabled-backgroundColor, #767676);\n border-color: var(--beam-RedeemTransaction-submitButton-disabled-borderColor, #767676);\n cursor: not-allowed;\n }\n\n .options {\n margin-top: var(--beam-RedeemTransaction-options-marginTop, 15px);\n }\n\n .options.isHidden {\n display: none;\n }\n\n .option {\n /* outline is used to prevent layer shift if changing border width */\n outline: var(--beam-RedeemTransaction-options-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-borderColor, #d9d9d9);\n border-radius: var(--beam-RedeemTransaction-options-borderRadius);\n background-color: var(--beam-RedeemTransaction-options-backgroundColor, transparent);\n cursor: pointer;\n transition: border-color 0.2s, background-color 0.2s, outline 0.2s;\n }\n\n .option:not(.isDisabled):focus-visible,\n .option:not(.isDisabled):hover,\n .option:not(.isSelected):focus-visible,\n .option:not(.isSelected):hover {\n background-color: var(--beam-RedeemTransaction-options-hover-backgroundColor, #f1f1f1);\n outline: var(--beam-RedeemTransaction-options-hover-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-hover-borderColor, #ccc);\n }\n\n .option.isDisabled {\n cursor: not-allowed;\n }\n\n .option.isSelected {\n outline: var(--beam-RedeemTransaction-options-selected-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-selected-borderColor, #333);\n background-color: var(--beam-RedeemTransaction-options-selected-backgroundColor, transparent);\n }\n\n .option.isSelected:focus-visible,\n .option.isSelected:hover {\n outline: var(--beam-RedeemTransaction-options-selected-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-selected-borderColor, #333);\n }\n\n .option .checkbox {\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-RedeemTransaction-checkmark-color, transparent);\n background-color: var(--beam-RedeemTransaction-checkmark-backgroundColor, transparent);\n border-color: var(--beam-RedeemTransaction-checkmark-borderColor, transparent);\n }\n\n .option.isSelected .checkbox,\n .option.isSelected:focus-visible .checkbox,\n .option.isSelected:hover .checkbox {\n color: var(--beam-RedeemTransaction-checkmark-selected-color, #fff);\n background-color: var(--beam-RedeemTransaction-checkmark-selected-backgroundColor, #333);\n border-color: var(--beam-RedeemTransaction-checkmark-selected-borderColor, #333);\n }\n\n .option:not(.isSelected):focus-visible .checkbox,\n .option:not(.isSelected):hover .checkbox {\n color: var(--beam-RedeemTransaction-checkmark-hover-color, #fff);\n background-color: var(--beam-RedeemTransaction-checkmark-hover-backgroundColor, #d9d9d9);\n border-color: var(--beam-RedeemTransaction-checkmark-hover-borderColor, #d9d9d9);\n }\n\n .details-impactDescription {\n ${useCustomText(\"--beam-RedeemTransaction-details-impactDescription\")}\n }\n\n .details-impactDescription .nonprofitName {\n font-weight: var(--beam-RedeemTransaction-details-nonprofitName-fontWeight, bold);\n font-style: var(--beam-RedeemTransaction-details-nonprofitName-fontStyle, inherit);\n }\n `,\n cssCardGrid({\n gap: \"20px\",\n itemMinWidth: \"var(--beam-RedeemTransaction-options-minWidth, 250px)\",\n columnCount: \"var(--beam-RedeemTransaction-options-columnCount, 2)\",\n }),\n ];\n\n private handleChooseClick() {\n this.didUserExpandNonprofits = true;\n }\n\n get shouldCollapse() {\n const enableMobileCollapse =\n this.cssVariables[\"--beam-RedeemTransaction-options-collapseNonprofits-mobile\"] === \"true\";\n const enableDesktopCollapse =\n this.cssVariables[\"--beam-RedeemTransaction-options-collapseNonprofits-desktop\"] === \"true\";\n return (this.isMobile && enableMobileCollapse) || (!this.isMobile && enableDesktopCollapse);\n }\n\n protected render() {\n const { selectedNonprofitId } = this;\n const { data, loading } = this.nonprofitListDataController;\n\n if (loading && !data) {\n return _loading();\n }\n if (this.nonprofitListDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.nonprofitListDataController.error });\n }\n return \"\";\n }\n if (this.selectionDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.selectionDataController.error });\n }\n // do not show error screen for interactive errors by default\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"No data\") });\n }\n return \"\";\n }\n const nonprofits = data?.nonprofits || [];\n const selectedNonprofit = nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId) || null;\n // changes images in widget to icons\n const displayIcon = this.cssVariables[\"--beam-RedeemTransaction-cardStyle\"] === \"'icon'\";\n const submitButtonPosition = this.cssVariables[\"--beam-RedeemTransaction-submitButton-position\"];\n const submitButtonPositionClass =\n this.isMobile && submitButtonPosition === \"bottom\" ? \"positionBottom\" : \"positionRight\";\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <!-- Custom flex order fixes tab cycling so submit button is after content -->\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"order: 3;\"\n tabindex=\"-1\"\n class=\"options cardGrid ${classMap({ isHidden: !this.didUserExpandNonprofits && this.shouldCollapse })}\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n ?aria-disabled=${!this.allowChange}\n >\n ${repeat(\n nonprofits,\n (i) => i.nonprofit.id,\n (np, index) => {\n const isSelected = selectedNonprofitId === np.nonprofit.id;\n const isFocusable = isSelected || (selectedNonprofit == null && index === 0);\n return html`\n <div\n class=\"option ${classMap({\n isSelected: isSelected,\n isDisabled: !this.allowChange,\n })}\"\n part=\"option\"\n role=\"radio\"\n tabindex=\"${isFocusable ? 0 : -1}\"\n data-value=${np.nonprofit.id}\n ?aria-checked=${isSelected}\n @click=${this.makeHandleSelect(np.nonprofit.id, index, nonprofits)}\n @keydown=${this.makeHandleSelect(np.nonprofit.id, index, nonprofits)}\n aria-label=\"${localizeUserString(this.configLang, np.nonprofit.cause || \"\")}\"\n style=\"${styleMap({\n display: \"flex\",\n gap: \"15px\",\n padding: \"10px\",\n })}\"\n >\n ${displayIcon\n ? html` <div style=\"height: 100%; flex: 1; flex-direction: column;\">\n <img\n src=\"${np.nonprofit.causeIconUrl}\"\n alt=\"\"\n role=\"presentation\"\n style=\"\n flex: 1;\n height: auto;\n width: 100%;\n display: block;\n padding: var(--beam-RedeemTransaction-options-icon-padding);\n border-radius: var(--beam-RedeemTransaction-options-image-borderRadius, 0);\n \"\n />\n </div>`\n : html` <div style=\"height: 100%; flex: 1 0 33%; display: flex; flex-direction: column;\">\n <img\n src=\"${np.imageUrl}\"\n alt=\"\"\n role=\"presentation\"\n style=\"\n flex: 1;\n height: auto;\n width: 100%;\n object-fit: cover;\n border-radius: var(--beam-RedeemTransaction-options-image-borderRadius, 0);\n \"\n />\n </div>`}\n <div\n class=\"details\"\n part=\"details\"\n style=\"\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 <div\n class=\"details-cause\"\n style=\"flex: 0 1; ${useCustomText(\"--beam-RedeemTransaction-details-cause\")}\"\n >\n <span\n part=\"checkbox\"\n class=\"checkbox\"\n style=\"\n margin-left: 5px;\n float: right;\n padding: 4px;\n border-radius: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n \"\n >\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-impactDescription\" style=\"flex: 1 1;\">\n ${unsafeHTML(localizeUserString(this.configLang, np.impact.description || \"\"))}\n </p>\n <div\n style=\"display: flex; margin-top: var(--beam-RedeemTransaction-details-fundingProgress-marginTop); align-items: center;\"\n >\n <beam-progress-bar\n value=\"${np.impact.goalProgressPercentage}\"\n style=\"flex: 1 0;\"\n ></beam-progress-bar>\n <span\n class=\"details-fundingProgressLabel\"\n style=\"${useCustomText(\n \"--beam-RedeemTransaction-details-fundingProgressLabel\"\n )} white-space: nowrap; text-align: right; flex: 0 1; margin-left: 15px;\"\n >\n ${localizeUserString(this.configLang, np.impact.goalProgressText)}\n </span>\n </div>\n </div>\n </div>\n `;\n }\n )}\n </div>\n\n <div\n style=\"order: 2; flex-direction: ${this.isMobile && submitButtonPosition === \"bottom\" ? \"column\" : \"row\"};\"\n class=\"headerContainer\"\n >\n <div>\n <h3\n class=\"title\"\n part=\"title\"\n id=\"beam-RedeemTransaction-title\"\n style=\"${useCustomText(\"--beam-RedeemTransaction-title\")}\"\n >\n ${localizeUserString(this.configLang, data?.config?.web?.title) || strings[this.configLang].ctaTitle()}\n </h3>\n <p class=\"description\" part=\"description\" style=\"${useCustomText(\"--beam-RedeemTransaction-description\")}\">\n ${localizeUserString(this.configLang, data?.config?.web?.description)}\n </p>\n </div>\n ${this.didUserExpandNonprofits || !this.shouldCollapse\n ? html`<button\n type=\"button\"\n ?aria-disabled=${!this.allowSubmit}\n @click=\"${this.handleSubmit}\"\n class=\"${classMap({\n isDisabled: !this.allowSubmit,\n [submitButtonPositionClass]: true,\n submitButton: true,\n })}\"\n part=\"submitButton\"\n >\n ${this.selectionDataController.data !== null\n ? strings[this.configLang].submitButtonTextCompleted()\n : strings[this.configLang].submitButtonText()}\n </button>`\n : html`<button\n type=\"button\"\n @click=\"${this.handleChooseClick}\"\n class=\"submitButton ${submitButtonPositionClass}\"\n part=\"submitButton\"\n >\n ${strings[this.configLang].chooseButtonText()}\n </button>`}\n </div>\n\n <beam-partner-logos\n partnerName=\"${data.chain.name}\"\n partnerLogoUrl=\"${data.chain.logoUrl}\"\n style=\"order: 1\"\n ></beam-partner-logos>\n </div>\n `;\n }\n}\n\ndefineCustomElement(BeamRedeemTransaction);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-redeem-transaction\": BeamRedeemTransaction;\n }\n}\n"],"names":["_checkbox","height","width","html","styleMap","strings","donationPercentage","BeamRedeemTransaction","LitElement","DEFAULT_BASE_URL","enforceConfig","res","postChainEligibleNonprofitsForCart","selectedNonprofitId","putTransaction","AsyncController","createScopedLocalStorage","id","index","nonprofits","event","currentId","nextFocus","focusTarget","selectedNonprofit","np","BeamNonprofitSelectEvent","debounce","SUPPORTED_LANGUAGES","_changedProperties","previousPropertyValues","requireNewDataProps","prop","createdAt","data","cacheTtl","defaults","partnerLogosConfigDefaults","progressBarConfigDefaults","defineCustomText","remoteConfig","config","_cssVariableMap","enableMobileCollapse","enableDesktopCollapse","loading","_loading","_errorMessage","BeamError","displayIcon","submitButtonPosition","submitButtonPositionClass","classMap","repeat","i","isSelected","isFocusable","localizeUserString","useCustomText","unsafeHTML","cssReset","css","cssCardGrid","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"redeem-transaction.js","sources":["../../src/shared/fragments/checkbox.ts","../../src/components/redeem-transaction/strings.ts","../../src/components/redeem-transaction/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 beamAttribution: () => `Powered by Beam`,\n ctaTitle: () => `Choose your impact`,\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Select a nonprofit and ${donationPercentage} of your purchase will be donated, at no extra cost.`,\n submitButtonText: () => `Confirm`,\n submitButtonTextCompleted: () => `Confirmed!`,\n chooseButtonText: () => `Choose`,\n },\n fr: {\n beamAttribution: () => `Optimisé par Beam`,\n ctaTitle: () => `Choisissez votre cause`,\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Choisissez un organisme à but non lucratif et ${donationPercentage}% lui sera versé en votre nom, sans frais supplémentaires.`,\n submitButtonText: () => `Confirmer`,\n submitButtonTextCompleted: () => `Confirmé!`,\n chooseButtonText: () => `Choisissez`,\n },\n de: {\n beamAttribution: () => `Unterstützt von Beam`,\n ctaTitle: () => `Wähle deinen Impact`,\n ctaMessage: ({ donationPercentage = \"1%\" } = {}) =>\n `Wähle eine der gemeinnützigen Organisationen und spende ${donationPercentage} deines Einkaufs ohne zusätzliche Kosten`,\n submitButtonText: () => \"Bestätigen\",\n submitButtonTextCompleted: () => `Bestätigt!`,\n chooseButtonText: () => `Wählen`,\n },\n es: {\n ctaTitle: () => \"Elige tu contribución\",\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Elige una organización sin fines de lucro y donaremos ${donationPercentage} de tu compra sin coste adicional.`,\n beamAttribution: () => \"Ofrecido por Beam\",\n submitButtonText: () => \"Confirmar\",\n submitButtonTextCompleted: () => \"Confirmado\",\n chooseButtonText: () => `Elige`,\n },\n it: {\n ctaTitle: () => \"Scegli dove fare la differenza\",\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Seleziona un'organizzazione no-profit a cui devolvere l’${donationPercentage} del tuo acquisto, senza costi aggiuntivi`,\n beamAttribution: () => \"Gestito da Beam\",\n submitButtonText: () => \"Confermare\",\n submitButtonTextCompleted: () => \"Confermato!\",\n chooseButtonText: () => `Scegli`,\n },\n pl: {\n beamAttribution: () => `Wspierany przez Beam`,\n ctaTitle: () => `Wybierz inicjatywę, którą chcesz wesprzeć`,\n ctaMessage: ({ donationPercentage = \"1%\" }) =>\n `Wybierz organizację, której przekażesz ${donationPercentage} wartości Twoich zakupów – bez żadnych dodatkowych kosztów!`,\n submitButtonText: () => `Zatwierdź`,\n submitButtonTextCompleted: () => `Zatwierdzono!`,\n chooseButtonText: () => `Wybierz`,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { state } from \"lit/decorators/state.js\";\nimport debounce from \"lodash-es/debounce\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport \"../../shared/components/progress-bar\";\nimport \"../beam-partner-logos\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { TId, TNumericId } from \"../../shared/types\";\nimport { TCart } from \"../../shared/cart-contents\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { cssCardGrid } from \"../../shared/fragments/css-card-grid\";\nimport { _checkbox } from \"../../shared/fragments/checkbox\";\nimport { postChainEligibleNonprofitsForCart, putTransaction } from \"../../api-sdk/v3/routes\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { partnerLogosConfigDefaults } from \"../beam-partner-logos\";\nimport { strings } from \"./strings\";\n\ninterface RequiredConfig {\n apiKey: string;\n transactionId: TId;\n}\n\nexport class BeamRedeemTransaction extends LitElement {\n static tagName = \"beam-redeem-transaction\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public transactionId?: RequiredConfig[\"transactionId\"];\n\n @property({ type: Number }) public storeId?: TNumericId;\n\n @property({ type: String }) public countryCode?: string;\n\n @property({ type: String }) public postalCode?: string;\n\n @property({ type: Object }) public cart?: TCart;\n\n @property({ type: Number, reflect: true }) public selectedNonprofitId?: TNumericId;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public debug = false;\n\n @state() private isMobile = window.innerWidth < 768;\n\n @state() private didUserExpandNonprofits = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getChainNonprofits = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"transactionId\"], this)) {\n throw new MissingConfig();\n }\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n headers: { authorization: `Api-Key ${this.apiKey}` },\n requestBody: {\n storeId: this.storeId,\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n cart: this.cart ?? undefined,\n widgetName: \"redeem-transaction\",\n version: \"1.0.0\",\n lang: this.configLang,\n },\n });\n\n // If store ID was not provided, get the store ID from response here\n if (res.store?.id && res.store.id !== this.storeId) {\n this.storeId = res.store.id;\n }\n\n this.localStorage.setItemJson(\"chainNonprofits\", {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private putTransaction = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId }) => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"transactionId\"], this)) {\n throw new MissingConfig();\n }\n return putTransaction({\n baseUrl: this.baseUrl,\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n pathParams: {\n transactionId: Number(this.transactionId), // TODO: fix api spec for PUT transaction/:id to use string\n },\n requestBody: {\n nonprofitId: selectedNonprofitId,\n },\n });\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits\n );\n\n private selectionDataController = new AsyncController<typeof this.putTransaction>(this, this.putTransaction);\n\n private localStorage = createScopedLocalStorage(this as LitElement & RequiredConfig);\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<RequiredConfig>([\"apiKey\"], this)) throw new MissingConfig();\n this.selectedNonprofitId = parseInt(this.localStorage.getItem(\"nonprofit\") || \"\") || undefined;\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 const cacheTtl = 2 * 60 * 60 * 1000;\n if (new Date(createdAt).valueOf() + cacheTtl > new Date().valueOf()) {\n this.nonprofitListDataController.data = data;\n this.nonprofitListDataController.loading = false;\n }\n } catch (err) {\n // ignore cache retrieval error and continue to fetch data\n }\n }\n\n /**\n * Factory for selection event handler\n *\n * Nonprofit selector implements radio-button semantics:\n * * If nothing is selected, tabbing into selector selects first card\n * * Arrow keys changes focus between cards, but doesn't select\n * * Enter/Space sets selection\n * * If a nonprofit is selected, arrow keys change focus AND selection\n * * Click sets selection\n * @param {number} id\n * @param {number} index\n * @param {{id: number}[]} nonprofits\n * @returns {(evt: Event) => void}\n */\n private makeHandleSelect =\n (id: number, index: number, nonprofits: { nonprofit: { id: number } }[]): ((event: Event) => void) =>\n async (event: Event) => {\n if (!this.allowChange) return;\n\n const currentId = this.selectedNonprofitId;\n if (event instanceof KeyboardEvent) {\n let nextFocus = null;\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n if (index === 0) {\n nextFocus = nonprofits[nonprofits.length - 1];\n } else {\n nextFocus = nonprofits[index - 1];\n }\n event.preventDefault();\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n if (index === nonprofits.length - 1) {\n nextFocus = nonprofits[0];\n } else {\n nextFocus = nonprofits[index + 1];\n }\n event.preventDefault();\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n break; // continue to toggle-selection block below\n default:\n return;\n }\n if (nextFocus) {\n const focusTarget = this.renderRoot.querySelector(`[data-value=\"${nextFocus.nonprofit.id}\"]`) as HTMLElement;\n if (focusTarget !== null) {\n focusTarget.tabIndex = 0;\n focusTarget.focus();\n }\n return;\n }\n }\n // Handle selection with click or Enter/Space key\n const targetEl = event.currentTarget;\n if (targetEl instanceof HTMLElement) {\n if (currentId === id) {\n // this[\"selected-nonprofit-id\"] = undefined; // unset (not supported)\n return; // no API call or localStorage change needed\n } else {\n this.selectedNonprofitId = id;\n }\n }\n };\n\n get allowChange() {\n // Disallow change if already submitted\n return this.selectionDataController.data == null && !this.selectionDataController.loading;\n }\n\n get allowSubmit() {\n // Disabled if no nonprofit has been selected yet or if submission was already received\n return Boolean(this.selectedNonprofitId && this.allowChange);\n }\n\n handleSubmit = async () => {\n const { selectedNonprofitId } = this;\n if (!this.allowSubmit || selectedNonprofitId == null) return;\n await this.selectionDataController.exec({ selectedNonprofitId });\n\n this.localStorage.setItem(\"nonprofit\", selectedNonprofitId);\n\n const selectedNonprofit = this.nonprofitListDataController?.data?.nonprofits.find(\n (np) => np.nonprofit.id === selectedNonprofitId\n );\n\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({ selectedNonprofitId, nonprofitName: selectedNonprofit?.nonprofit.name })\n );\n };\n\n evaluateBreakPoints = debounce(\n () => {\n this.isMobile = window.innerWidth < 768;\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n public get cssVariables() {\n const defaults = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n ...partnerLogosConfigDefaults,\n ...progressBarConfigDefaults,\n \"--beam-RedeemTransaction-maxWidth\": \"1000px\",\n \"--beam-RedeemTransaction-submitButton-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-hover-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-disabled-color\": \"#fff\",\n \"--beam-RedeemTransaction-submitButton-backgroundColor\": \"#333\",\n \"--beam-RedeemTransaction-submitButton-hover-backgroundColor\": \"#222\",\n \"--beam-RedeemTransaction-submitButton-disabled-backgroundColor\": \"#767676\",\n \"--beam-RedeemTransaction-submitButton-borderColor\": \"#333\",\n \"--beam-RedeemTransaction-submitButton-hover-borderColor\": \"#222\",\n \"--beam-RedeemTransaction-submitButton-disabled-borderColor\": \"#767676\",\n \"--beam-RedeemTransaction-submitButton-fontSize\": \"14px\",\n \"--beam-RedeemTransaction-submitButton-fontWeight\": \"inherit\",\n \"--beam-RedeemTransaction-submitButton-fontFamily\": \"inherit\",\n \"--beam-RedeemTransaction-submitButton-textTransform\": \"none\",\n \"--beam-RedeemTransaction-submitButton-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-submitButton-padding\": \"15px 30px\",\n \"--beam-RedeemTransaction-submitButton-position\": \"right\" /* bottom only applies to mobile */,\n \"--beam-RedeemTransaction-submitButton-positionRight-width\": \"auto\",\n \"--beam-RedeemTransaction-submitButton-positionBottom-width\": \"100%\",\n \"--beam-RedeemTransaction-submitButton-positionBottom-marginTop\": \"10px\",\n \"--beam-RedeemTransaction-checkmark-color\": \"transparent\",\n \"--beam-RedeemTransaction-checkmark-selected-color\": \"#fff\",\n \"--beam-RedeemTransaction-checkmark-hover-color\": \"#fff\",\n \"--beam-RedeemTransaction-checkmark-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-checkmark-selected-backgroundColor\": \"#333\",\n \"--beam-RedeemTransaction-checkmark-hover-backgroundColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-checkmark-borderColor\": \"transparent\",\n \"--beam-RedeemTransaction-checkmark-selected-borderColor\": \"#333\",\n \"--beam-RedeemTransaction-checkmark-hover-borderColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-options-minWidth\": \"250px\",\n \"--beam-RedeemTransaction-options-columnCount\": \"2\",\n \"--beam-RedeemTransaction-options-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-options-borderWidth\": \"1px\",\n \"--beam-RedeemTransaction-options-selected-borderWidth\": \"2px\",\n \"--beam-RedeemTransaction-options-focus-borderWidth\": \"1px\",\n \"--beam-RedeemTransaction-options-image-borderRadius\": \"0px\",\n \"--beam-RedeemTransaction-options-borderColor\": \"#d9d9d9\",\n \"--beam-RedeemTransaction-options-selected-borderColor\": \"currentColor\",\n \"--beam-RedeemTransaction-options-hover-borderColor\": \"#ccc\",\n \"--beam-RedeemTransaction-options-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-options-selected-backgroundColor\": \"transparent\",\n \"--beam-RedeemTransaction-options-hover-backgroundColor\": \"#f1f1f1\",\n \"--beam-RedeemTransaction-options-marginTop\": \"15px\",\n ...defineCustomText(\"--beam-RedeemTransaction-title\", {\n fontSize: \"1.25em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-description\", {\n marginTop: \"0.5em\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-details-cause\", {\n fontSize: \"1em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-RedeemTransaction-details-impactDescription\", {\n fontSize: \"0.85em\",\n marginTop: \"10px\",\n }),\n \"--beam-RedeemTransaction-details-nonprofitName-fontWeight\": \"bold\",\n \"--beam-RedeemTransaction-details-nonprofitName-fontStyle\": \"inherit\",\n \"--beam-RedeemTransaction-details-fundingProgress-marginTop\": \"10px\",\n ...defineCustomText(\"--beam-RedeemTransaction-details-fundingProgressLabel\", {\n fontSize: \"0.85em\",\n }),\n \"--beam-RedeemTransaction-cardStyle\": \"'image'\",\n \"--beam-RedeemTransaction-options-icon-padding\": \"0px\",\n \"--beam-RedeemTransaction-options-collapseNonprofits-mobile\": \"false\",\n \"--beam-RedeemTransaction-options-collapseNonprofits-desktop\": \"false\",\n };\n\n const remoteConfig = this.nonprofitListDataController?.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n max-width: var(--beam-RedeemTransaction-maxWidth, 1000px);\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 }\n\n .headerContainer {\n align-items: flex-start;\n justify-content: space-between;\n display: flex;\n }\n\n .submitButton {\n color: var(--beam-RedeemTransaction-submitButton-color, #fff);\n background-color: var(--beam-RedeemTransaction-submitButton-backgroundColor, #333);\n border: 1px solid var(--beam-RedeemTransaction-submitButton-borderColor, #333);\n font-size: var(--beam-RedeemTransaction-submitButton-fontSize, 14px);\n font-weight: var(--beam-RedeemTransaction-submitButton-fontWeight, inherit);\n font-family: var(--beam-RedeemTransaction-submitButton-fontFamily, inherit);\n text-transform: var(--beam-RedeemTransaction-submitButton-textTransform, none);\n border-radius: var(--beam-RedeemTransaction-submitButton-borderRadius, 0);\n padding: var(--beam-RedeemTransaction-submitButton-padding, 15px 30px);\n transition: background-color 0.2s, border-color 0.2s, color 0.2s;\n cursor: pointer;\n }\n\n .submitButton.positionRight {\n width: var(--beam-RedeemTransaction-submitButton-positionRight-width, auto);\n margin-left: 30px;\n }\n\n .submitButton.positionBottom {\n width: var(--beam-RedeemTransaction-submitButton-positionBottom-width, 100%);\n margin-top: var(--beam-RedeemTransaction-submitButton-positionBottom-marginTop, 10px);\n }\n\n .submitButton:not(.isDisabled):focus-visible,\n .submitButton:not(.isDisabled):hover {\n background-color: var(--beam-RedeemTransaction-submitButton-hover-backgroundColor, #222);\n border-color: var(--beam-RedeemTransaction-submitButton-hover-borderColor, #222);\n color: var(--beam-RedeemTransaction-submitButton-hover-color, #fff);\n }\n\n .submitButton.isDisabled {\n color: var(--beam-RedeemTransaction-submitButton-disabled-color, #fff);\n background-color: var(--beam-RedeemTransaction-submitButton-disabled-backgroundColor, #767676);\n border-color: var(--beam-RedeemTransaction-submitButton-disabled-borderColor, #767676);\n cursor: not-allowed;\n }\n\n .options {\n margin-top: var(--beam-RedeemTransaction-options-marginTop, 15px);\n }\n\n .options.isHidden {\n display: none;\n }\n\n .option {\n /* outline is used to prevent layer shift if changing border width */\n outline: var(--beam-RedeemTransaction-options-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-borderColor, #d9d9d9);\n border-radius: var(--beam-RedeemTransaction-options-borderRadius);\n background-color: var(--beam-RedeemTransaction-options-backgroundColor, transparent);\n cursor: pointer;\n transition: border-color 0.2s, background-color 0.2s, outline 0.2s;\n }\n\n .option:not(.isDisabled):focus-visible,\n .option:not(.isDisabled):hover,\n .option:not(.isSelected):focus-visible,\n .option:not(.isSelected):hover {\n background-color: var(--beam-RedeemTransaction-options-hover-backgroundColor, #f1f1f1);\n outline: var(--beam-RedeemTransaction-options-hover-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-hover-borderColor, #ccc);\n }\n\n .option.isDisabled {\n cursor: not-allowed;\n }\n\n .option.isSelected {\n outline: var(--beam-RedeemTransaction-options-selected-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-selected-borderColor, #333);\n background-color: var(--beam-RedeemTransaction-options-selected-backgroundColor, transparent);\n }\n\n .option.isSelected:focus-visible,\n .option.isSelected:hover {\n outline: var(--beam-RedeemTransaction-options-selected-borderWidth, 1px) solid\n var(--beam-RedeemTransaction-options-selected-borderColor, #333);\n }\n\n .option .checkbox {\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-RedeemTransaction-checkmark-color, transparent);\n background-color: var(--beam-RedeemTransaction-checkmark-backgroundColor, transparent);\n border-color: var(--beam-RedeemTransaction-checkmark-borderColor, transparent);\n }\n\n .option.isSelected .checkbox,\n .option.isSelected:focus-visible .checkbox,\n .option.isSelected:hover .checkbox {\n color: var(--beam-RedeemTransaction-checkmark-selected-color, #fff);\n background-color: var(--beam-RedeemTransaction-checkmark-selected-backgroundColor, #333);\n border-color: var(--beam-RedeemTransaction-checkmark-selected-borderColor, #333);\n }\n\n .option:not(.isSelected):focus-visible .checkbox,\n .option:not(.isSelected):hover .checkbox {\n color: var(--beam-RedeemTransaction-checkmark-hover-color, #fff);\n background-color: var(--beam-RedeemTransaction-checkmark-hover-backgroundColor, #d9d9d9);\n border-color: var(--beam-RedeemTransaction-checkmark-hover-borderColor, #d9d9d9);\n }\n\n .details-impactDescription {\n ${useCustomText(\"--beam-RedeemTransaction-details-impactDescription\")}\n }\n\n .details-impactDescription .nonprofitName {\n font-weight: var(--beam-RedeemTransaction-details-nonprofitName-fontWeight, bold);\n font-style: var(--beam-RedeemTransaction-details-nonprofitName-fontStyle, inherit);\n }\n `,\n cssCardGrid({\n gap: \"20px\",\n itemMinWidth: \"var(--beam-RedeemTransaction-options-minWidth, 250px)\",\n columnCount: \"var(--beam-RedeemTransaction-options-columnCount, 2)\",\n }),\n ];\n\n private handleChooseClick() {\n this.didUserExpandNonprofits = true;\n }\n\n get shouldCollapse() {\n const enableMobileCollapse =\n this.cssVariables[\"--beam-RedeemTransaction-options-collapseNonprofits-mobile\"] === \"true\";\n const enableDesktopCollapse =\n this.cssVariables[\"--beam-RedeemTransaction-options-collapseNonprofits-desktop\"] === \"true\";\n return (this.isMobile && enableMobileCollapse) || (!this.isMobile && enableDesktopCollapse);\n }\n\n protected render() {\n const { selectedNonprofitId } = this;\n const { data, loading } = this.nonprofitListDataController;\n\n if (loading && !data) {\n return _loading();\n }\n if (this.nonprofitListDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.nonprofitListDataController.error });\n }\n return \"\";\n }\n if (this.selectionDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.selectionDataController.error });\n }\n // do not show error screen for interactive errors by default\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"No data\") });\n }\n return \"\";\n }\n const nonprofits = data?.nonprofits || [];\n const selectedNonprofit = nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId) || null;\n // changes images in widget to icons\n const displayIcon = this.cssVariables[\"--beam-RedeemTransaction-cardStyle\"] === \"'icon'\";\n const submitButtonPosition = this.cssVariables[\"--beam-RedeemTransaction-submitButton-position\"];\n const submitButtonPositionClass =\n this.isMobile && submitButtonPosition === \"bottom\" ? \"positionBottom\" : \"positionRight\";\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <!-- Custom flex order fixes tab cycling so submit button is after content -->\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"order: 3;\"\n tabindex=\"-1\"\n class=\"options cardGrid ${classMap({ isHidden: !this.didUserExpandNonprofits && this.shouldCollapse })}\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n ?aria-disabled=${!this.allowChange}\n >\n ${repeat(\n nonprofits,\n (i) => i.nonprofit.id,\n (np, index) => {\n const isSelected = selectedNonprofitId === np.nonprofit.id;\n const isFocusable = isSelected || (selectedNonprofit == null && index === 0);\n return html`\n <div\n class=\"option ${classMap({\n isSelected: isSelected,\n isDisabled: !this.allowChange,\n })}\"\n part=\"option\"\n role=\"radio\"\n tabindex=\"${isFocusable ? 0 : -1}\"\n data-value=${np.nonprofit.id}\n ?aria-checked=${isSelected}\n @click=${this.makeHandleSelect(np.nonprofit.id, index, nonprofits)}\n @keydown=${this.makeHandleSelect(np.nonprofit.id, index, nonprofits)}\n aria-label=\"${localizeUserString(this.configLang, np.nonprofit.cause || \"\")}\"\n style=\"${styleMap({\n display: \"flex\",\n gap: \"15px\",\n padding: \"10px\",\n })}\"\n >\n ${displayIcon\n ? html` <div style=\"height: 100%; flex: 1; flex-direction: column;\">\n <img\n src=\"${np.nonprofit.causeIconUrl}\"\n alt=\"\"\n role=\"presentation\"\n style=\"\n flex: 1;\n height: auto;\n width: 100%;\n display: block;\n padding: var(--beam-RedeemTransaction-options-icon-padding);\n border-radius: var(--beam-RedeemTransaction-options-image-borderRadius, 0);\n \"\n />\n </div>`\n : html` <div style=\"height: 100%; flex: 1 0 33%; display: flex; flex-direction: column;\">\n <img\n src=\"${np.imageUrl}\"\n alt=\"\"\n role=\"presentation\"\n style=\"\n flex: 1;\n height: auto;\n width: 100%;\n object-fit: cover;\n border-radius: var(--beam-RedeemTransaction-options-image-borderRadius, 0);\n \"\n />\n </div>`}\n <div\n class=\"details\"\n part=\"details\"\n style=\"\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 <div\n class=\"details-cause\"\n style=\"flex: 0 1; ${useCustomText(\"--beam-RedeemTransaction-details-cause\")}\"\n >\n <span\n part=\"checkbox\"\n class=\"checkbox\"\n style=\"\n margin-left: 5px;\n float: right;\n padding: 4px;\n border-radius: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n \"\n >\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-impactDescription\" style=\"flex: 1 1;\">\n ${unsafeHTML(localizeUserString(this.configLang, np.impact.description || \"\"))}\n </p>\n <div\n style=\"display: flex; margin-top: var(--beam-RedeemTransaction-details-fundingProgress-marginTop); align-items: center;\"\n >\n <beam-progress-bar\n value=\"${np.impact.goalProgressPercentage}\"\n style=\"flex: 1 0;\"\n ></beam-progress-bar>\n <span\n class=\"details-fundingProgressLabel\"\n style=\"${useCustomText(\n \"--beam-RedeemTransaction-details-fundingProgressLabel\"\n )} white-space: nowrap; text-align: right; flex: 0 1; margin-left: 15px;\"\n >\n ${localizeUserString(this.configLang, np.impact.goalProgressText)}\n </span>\n </div>\n </div>\n </div>\n `;\n }\n )}\n </div>\n\n <div\n style=\"order: 2; flex-direction: ${this.isMobile && submitButtonPosition === \"bottom\" ? \"column\" : \"row\"};\"\n class=\"headerContainer\"\n >\n <div>\n <h3\n class=\"title\"\n part=\"title\"\n id=\"beam-RedeemTransaction-title\"\n style=\"${useCustomText(\"--beam-RedeemTransaction-title\")}\"\n >\n ${localizeUserString(this.configLang, data?.config?.web?.title) || strings[this.configLang].ctaTitle()}\n </h3>\n <p class=\"description\" part=\"description\" style=\"${useCustomText(\"--beam-RedeemTransaction-description\")}\">\n ${localizeUserString(this.configLang, data?.config?.web?.description)}\n </p>\n </div>\n ${this.didUserExpandNonprofits || !this.shouldCollapse\n ? html`<button\n type=\"button\"\n ?aria-disabled=${!this.allowSubmit}\n @click=\"${this.handleSubmit}\"\n class=\"${classMap({\n isDisabled: !this.allowSubmit,\n [submitButtonPositionClass]: true,\n submitButton: true,\n })}\"\n part=\"submitButton\"\n >\n ${this.selectionDataController.data !== null\n ? strings[this.configLang].submitButtonTextCompleted()\n : strings[this.configLang].submitButtonText()}\n </button>`\n : html`<button\n type=\"button\"\n @click=\"${this.handleChooseClick}\"\n class=\"submitButton ${submitButtonPositionClass}\"\n part=\"submitButton\"\n >\n ${strings[this.configLang].chooseButtonText()}\n </button>`}\n </div>\n\n <beam-partner-logos\n partnerName=\"${data.chain.name}\"\n partnerLogoUrl=\"${data.chain.logoUrl}\"\n style=\"order: 1\"\n ></beam-partner-logos>\n </div>\n `;\n }\n}\n\ndefineCustomElement(BeamRedeemTransaction);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-redeem-transaction\": BeamRedeemTransaction;\n }\n}\n"],"names":["_checkbox","height","width","html","styleMap","strings","donationPercentage","BeamRedeemTransaction","LitElement","DEFAULT_BASE_URL","enforceConfig","res","postChainEligibleNonprofitsForCart","selectedNonprofitId","putTransaction","AsyncController","createScopedLocalStorage","id","index","nonprofits","event","currentId","nextFocus","focusTarget","selectedNonprofit","np","BeamNonprofitSelectEvent","debounce","SUPPORTED_LANGUAGES","_changedProperties","previousPropertyValues","requireNewDataProps","prop","createdAt","data","cacheTtl","defaults","partnerLogosConfigDefaults","progressBarConfigDefaults","defineCustomText","remoteConfig","config","_cssVariableMap","enableMobileCollapse","enableDesktopCollapse","loading","_loading","_errorMessage","BeamError","displayIcon","submitButtonPosition","submitButtonPositionClass","classMap","repeat","i","isSelected","isFocusable","localizeUserString","useCustomText","unsafeHTML","cssReset","css","cssCardGrid","__decorateClass","property","state","defineCustomElement"],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ import { LitElement, PropertyValues } from 'lit';
|
|
|
4
4
|
import '../chunks/progress-bar-0VS_AmEf.esm.js';
|
|
5
5
|
import { b as TNumericId } from '../chunks/types-7kSi85Gv.esm.js';
|
|
6
6
|
import { L as LANGUAGES } from '../chunks/types-aju0qrRe.esm.js';
|
|
7
|
-
import { T as TCart } from '../chunks/cart-contents-
|
|
8
|
-
import '../chunks/openapi-spec-
|
|
7
|
+
import { T as TCart } from '../chunks/cart-contents-Shc27L1J.esm.js';
|
|
8
|
+
import '../chunks/openapi-spec-D_Zzbl2J.esm.js';
|
|
9
9
|
|
|
10
10
|
interface RequiredConfig {
|
|
11
11
|
apiKey: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as I,g as l,h as w,y as b,p as k,m as z,k as $}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as L,
|
|
1
|
+
import{f as I,g as l,h as w,y as b,p as k,m as z,k as $}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as L,d as D,e as u,A as S,a as T,_ as N}from"../chunks/enforce-config-MqLZWolV.esm.js";import{D as A,b as E,f as B,S as F}from"../chunks/routes-USQ3n64Y.esm.js";import{p as P}from"../chunks/progress-bar-7gWYaGlq.esm.js";import{u as m,d as p,_ as U,i as d}from"../chunks/localize-eZMViIud.esm.js";import{c as C,f as y}from"../chunks/events-5IECSF-x.esm.js";import"../utils/network-listeners.esm.js";import{createScopedLocalStorage as W}from"../utils/local-storage.esm.js";import{getCookieValue as v}from"../utils/cookies.esm.js";import{i as M}from"../chunks/lodash-P8OIs-at.esm.js";import{c as O}from"../chunks/responsive-LYEag6TI.esm.js";import{B as R}from"../chunks/cart-contents-h60geKWa.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.esm.js";const h={en:{beamAttribution:()=>"Powered by Beam",ctaTitle:()=>"Choose your impact",ctaMessage:({donationPercentage:r="1"}={})=>`Select a nonprofit and ${r}% of your purchase will be donated, at no extra cost.`,inlineSeparator:()=>": "},fr:{beamAttribution:()=>"Optimis\xE9 par Beam",ctaTitle:()=>"Choisissez votre cause",ctaMessage:({donationPercentage:r="1"}={})=>`Choisissez un organisme \xE0 but non lucratif et ${r} % lui sera vers\xE9 en votre nom, sans frais suppl\xE9mentaires.`,inlineSeparator:()=>" : "},de:{beamAttribution:()=>"Unterst\xFCtzt von Beam",ctaTitle:()=>"W\xE4hle deinen Impact",ctaMessage:({donationPercentage:r="1"}={})=>`W\xE4hle eine der gemeinn\xFCtzigen Organisationen und spende ${r}% deines Einkaufs ohne zus\xE4tzliche Kosten`,inlineSeparator:()=>": "},es:{beamAttribution:()=>"Ofrecido por Beam",ctaTitle:()=>"Elige tu contribuci\xF3n",ctaMessage:({donationPercentage:r="1"}={})=>`Elige una organizaci\xF3n sin fines de lucro y donaremos ${r}% de tu compra sin coste adicional.`,inlineSeparator:()=>": "},it:{beamAttribution:()=>"Gestito da Beam",ctaTitle:()=>"Scegli dove fare la differenza",ctaMessage:({donationPercentage:r="1"}={})=>`Seleziona un'organizzazione no-profit a cui devolvere l\u2019${r}% del tuo acquisto, senza costi aggiuntivi`,inlineSeparator:()=>": "},pl:{beamAttribution:()=>"Wspierany przez Beam",ctaTitle:()=>"Wybierz inicjatyw\u0119, kt\xF3r\u0105 chcesz wesprze\u0107",ctaMessage:({donationPercentage:r="1"}={})=>`Wybierz organizacj\u0119, kt\xF3rej przeka\u017Cesz ${r}% warto\u015Bci Twoich zakup\xF3w \u2013 bez \u017Cadnych dodatkowych koszt\xF3w!`,inlineSeparator:()=>": "}};var K=Object.defineProperty,_=Object.getOwnPropertyDescriptor,c=(r,e,t,i)=>{for(var n=i>1?void 0:i?_(e,t):e,a=r.length-1,o;a>=0;a--)(o=r[a])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&K(e,t,n),n};class s extends w{constructor(){super(...arguments),this.baseUrl=A,this.selectedNonprofitId=null,this.lang="en",this.debug=!1,this.enableNonprofitDeselection=!1,this.didTryToCreateNewSelectionFromCache=!1,this.getChainNonprofits=async()=>{u(["apiKey"],this);const e=this.cart?.content?{schema:this.cart?.schema,content:this.cart?.content}:void 0,t=await E({baseUrl:this.baseUrl,apiRoot:"/api/v3",headers:{authorization:`Api-Key ${this.apiKey}`},requestBody:{storeId:this.storeId,widgetName:"select-nonprofit",postalCode:this.postalCode,countryCode:this.countryCode,version:"1.0.0",lang:this.configLang,cart:e}});return this.enableNonprofitDeselection=!!t.config.enableNonprofitDeselection,this.selectedNonprofitId&&!t.nonprofits.map(i=>i.nonprofit.id).includes(this.selectedNonprofitId)&&(this.selectedNonprofitId=null,await this.postSelectNonprofit({selectedNonprofitId:null})),t.store?.id&&t.store.id!==this.storeId&&(this.storeId=t.store.id),await this.createNewSelectionForCachedNonprofit(),this.localStorage.setItemJson("chainNonprofits",{createdAt:new Date,data:t}),t},this.postSelectNonprofit=async({selectedNonprofitId:e})=>{u(["apiKey","storeId"],this);const t=this.getExternalCartId(),i=this.getBeamCartId(),n=await B({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},requestBody:{nonprofitId:e,selectionId:this.selectionId,storeId:this.storeId,cartId:t,beamCartId:i}});this.selectionId=n?.selectionId,this.localStorage.setItem("transaction",this.selectionId),this.localStorage.setItem("nonprofit",e),await this.updateComplete;const a=this.getNonprofitById(e);this.dispatchEvent(new C({selectedNonprofitId:e,selectionId:this.selectionId,nonprofitName:a?.nonprofit?.name??null}))},this.nonprofitListDataController=new S(this,this.getChainNonprofits),this.selectionDataController=new S(this,this.postSelectNonprofit),this.localStorage=W(this),this.handleCartChange=e=>{this.cart=e.detail},this.makeHandleSelect=(e,t,i)=>async n=>{const a=this.selectedNonprofitId;if(n instanceof KeyboardEvent){let o=null;switch(n.key){case"ArrowUp":case"ArrowLeft":t===0?o=i[i.length-1]:o=i[t-1],n.preventDefault();break;case"ArrowRight":case"ArrowDown":t===i.length-1?o=i[0]:o=i[t+1],n.preventDefault();break;case"Enter":case" ":n.preventDefault();break;default:return}if(o){a!=null&&(this.selectedNonprofitId=o.nonprofit.id);const f=this.renderRoot.querySelector(`[data-value="${o.nonprofit.id}"]`);f!==null&&(f.tabIndex=0,f.focus());return}}if(n.currentTarget instanceof HTMLElement)if(a===e)if(this.enableNonprofitDeselection)this.selectedNonprofitId=null;else return;else this.selectedNonprofitId=e;await this.selectionDataController.exec({selectedNonprofitId:this.selectedNonprofitId})}}get configLang(){return F[this.lang]||"en"}getNonprofitById(e){return e?this.nonprofitListDataController?.data?.nonprofits.find(t=>t.nonprofit.id===e):null}connectedCallback(){super.connectedCallback(),window.addEventListener(y.eventName,this.handleCartChange)}async firstUpdated(e){await this.restoreStateFromCache()}async updated(e){const t=["baseUrl","storeId","apiKey","countryCode","postalCode","cart","lang"];for(const i of t)if(e.has(i)){await this.nonprofitListDataController.exec();break}}disconnectedCallback(){window.removeEventListener(y.eventName,this.handleCartChange),super.disconnectedCallback()}getExternalCartId(){return this.localStorage.getItemJson("cart")?.cartId??v("cart")}getBeamCartId(){return v(R)}async restoreStateFromCache(){try{this.selectedNonprofitId=parseInt(this.localStorage.getItem("nonprofit")||"")||null,this.selectionId=this.localStorage.getItem("transaction")??void 0,this.cart=this.localStorage.getItemJson("cart")??void 0;const{createdAt:e=0,data:t}=this.localStorage.getItemJson("chainNonprofits")||{},i=2*60*60*1e3;new Date(e).valueOf()+i>new Date().valueOf()&&(this.nonprofitListDataController.data=t,this.nonprofitListDataController.loading=!1)}catch{}}async createNewSelectionForCachedNonprofit(){if(u(["apiKey"],this),!(!this.storeId||this.didTryToCreateNewSelectionFromCache))try{if(this.didTryToCreateNewSelectionFromCache=!0,this.selectedNonprofitId){this.selectionId||await this.selectionDataController.exec({selectedNonprofitId:this.selectedNonprofitId});const e=this.getNonprofitById(this.selectedNonprofitId);this.dispatchEvent(new C({selectedNonprofitId:this.selectedNonprofitId,selectionId:this.selectionId,nonprofitName:e?.nonprofit?.name}))}}catch{}}get cssVariables(){const e={"--beam-fontFamily":"inherit","--beam-fontStyle":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...P,"--beam-SelectNonprofit-title-textAlign":"inherit","--beam-SelectNonprofit-description-textAlign":"inherit","--beam-SelectNonprofit-maxWidth":"800px","--beam-SelectNonprofit-options-marginTop":"0px","--beam-SelectNonprofit-options-iconHeight":"24px","--beam-SelectNonprofit-options-padding":"10px","--beam-SelectNonprofit-options-borderRadius":"0px","--beam-SelectNonprofit-options-borderColor":"currentColor","--beam-SelectNonprofit-options--selected-borderColor":"currentColor","--beam-SelectNonprofit-options-backgroundColor":"transparent","--beam-SelectNonprofit-options-gap":"8px","--beam-SelectNonprofit-options--selected-backgroundColor":"currentColor","--beam-SelectNonprofit-details-marginTop":"10px","--beam-SelectNonprofit-details-borderRadius":"0px","--beam-SelectNonprofit-details-borderColor":"currentColor","--beam-SelectNonprofit-details-backgroundColor":"inherit",...p("--beam-SelectNonprofit-title",{fontSize:"1.25em",fontWeight:"bold"}),"--beam-SelectNonprofit-header-inline-lineHeight":"inherit",...p("--beam-SelectNonprofit-title-inline",{fontWeight:"bold"}),"--beam-SelectNonprofit-title-inline-textTransform":"none",...p("--beam-SelectNonprofit-description",{marginTop:"0.5em"}),...p("--beam-SelectNonprofit-description-inline"),...p("--beam-SelectNonprofit-details-cause",{fontSize:"0.85em",fontWeight:"bold"}),...p("--beam-SelectNonprofit-details-beamAttribution",{fontSize:"0.85em"}),...p("--beam-SelectNonprofit-details-impactDescription",{fontSize:"1em",marginTop:"10px"}),"--beam-SelectNonprofit-details-nonprofitName-fontWeight":"bold","--beam-SelectNonprofit-details-nonprofitName-fontStyle":"inherit","--beam-SelectNonprofit-details-fundingProgress-marginTop":"10px",...p("--beam-SelectNonprofit-details-fundingProgressLabel",{fontSize:"0.85em"})},t=this.nonprofitListDataController?.data?.config?.web?.theme||{},i={...e,...t};return Object.assign(Object.create({toCSS(){return T(this)}}),i)}render(){const{selectedNonprofitId:e}=this,{data:t,loading:i}=this.nonprofitListDataController;if(i&&!t)return U();if(this.nonprofitListDataController.error)return this.debug?N({error:this.nonprofitListDataController.error}):"";if(this.selectionDataController.error&&this.debug)return N({error:this.selectionDataController.error});const n=t?.nonprofits||[],a=n.find(o=>o.nonprofit.id===e)||null;return b`
|
|
2
2
|
<style>
|
|
3
3
|
:host {
|
|
4
4
|
${this.cssVariables.toCSS()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-nonprofit.esm.js","sources":["../../src/components/select-nonprofit/strings.ts","../../src/components/select-nonprofit/index.ts"],"sourcesContent":["export const strings = {\n en: {\n beamAttribution: () => `Powered by Beam`,\n ctaTitle: () => `Choose your impact`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Select a nonprofit and ${donationPercentage}% of your purchase will be donated, at no extra cost.`,\n inlineSeparator: () => `: `,\n },\n fr: {\n beamAttribution: () => `Optimisé par Beam`,\n ctaTitle: () => `Choisissez votre cause`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Choisissez un organisme à but non lucratif et ${donationPercentage} % lui sera versé en votre nom, sans frais supplémentaires.`,\n inlineSeparator: () => ` : `,\n },\n de: {\n beamAttribution: () => `Unterstützt von Beam`,\n ctaTitle: () => `Wähle deinen Impact`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Wähle eine der gemeinnützigen Organisationen und spende ${donationPercentage}% deines Einkaufs ohne zusätzliche Kosten`,\n inlineSeparator: () => `: `,\n },\n es: {\n beamAttribution: () => \"Ofrecido por Beam\",\n ctaTitle: () => \"Elige tu contribución\",\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Elige una organización sin fines de lucro y donaremos ${donationPercentage}% de tu compra sin coste adicional.`,\n inlineSeparator: () => \": \",\n },\n it: {\n beamAttribution: () => \"Gestito da Beam\",\n ctaTitle: () => \"Scegli dove fare la differenza\",\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Seleziona un'organizzazione no-profit a cui devolvere l’${donationPercentage}% del tuo acquisto, senza costi aggiuntivi`,\n inlineSeparator: () => \": \",\n },\n pl: {\n beamAttribution: () => `Wspierany przez Beam`,\n ctaTitle: () => `Wybierz inicjatywę, którą chcesz wesprzeć`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Wybierz organizację, której przekażesz ${donationPercentage}% wartości Twoich zakupów – bez żadnych dodatkowych kosztów!`,\n inlineSeparator: () => `: `,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport \"../../shared/components/progress-bar\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { isEqual } from \"../../utils\";\nimport { MissingConfig } from \"../../utils/beam-errors\";\nimport { TNumericId } from \"../../shared/types\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { postChainEligibleNonprofitsForCart, postSelectNonprofit } from \"../../api-sdk/v3/routes\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { BeamCartChangeEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { cssResponsiveUtils } from \"../../shared/responsive\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart } from \"../../shared/cart-contents\";\nimport { strings } from \"./strings\";\n\ninterface RequiredConfig {\n apiKey: string;\n storeId: TNumericId; // Can be set async by postalCode + countryCode lookup\n}\n\nexport class BeamSelectNonprofit extends LitElement {\n static tagName = \"beam-select-nonprofit\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n // storeId can be omitted if countryCode + postalCode are provided\n @property({ type: Number, reflect: true }) public storeId?: TNumericId;\n\n @property({ type: String }) public countryCode?: string;\n\n @property({ type: String }) public postalCode?: string;\n\n @property({ attribute: false, hasChanged: (a, b) => !isEqual(a, b) }) public cart?: TCart;\n\n @property({ type: Number, reflect: true }) public selectedNonprofitId: TNumericId | null = null;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public debug = false;\n\n private enableNonprofitDeselection = false;\n\n private selectionId?: string;\n\n private didTryToCreateNewSelectionFromCache = false; // Should only create selection once\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getChainNonprofits = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\"], this)) {\n throw new MissingConfig();\n }\n\n const cart: any = this.cart?.content\n ? {\n schema: this.cart?.schema,\n content: this.cart?.content,\n }\n : undefined;\n\n // We use a POST method because we send a nested JSON with data that we don't want to serialize/expose in URL\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n apiRoot: \"/api/v3\",\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n requestBody: {\n storeId: this.storeId,\n widgetName: \"select-nonprofit\",\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n version: \"1.0.0\",\n lang: this.configLang,\n cart,\n },\n });\n\n this.enableNonprofitDeselection = !!res.config.enableNonprofitDeselection;\n\n // Reset selection if list doesn't include the current selected nonprofit\n if (this.selectedNonprofitId && !res.nonprofits.map((np) => np.nonprofit.id).includes(this.selectedNonprofitId)) {\n this.selectedNonprofitId = null;\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({\n selectedNonprofitId: this.selectedNonprofitId,\n selectionId: this.selectionId,\n nonprofitName: null,\n })\n );\n }\n\n // If store ID was not provided, get the store ID from response here\n if (res.store?.id && res.store.id !== this.storeId) {\n this.storeId = res.store.id;\n }\n\n await this.createNewSelectionForCachedNonprofit();\n\n this.localStorage.setItemJson(\"chainNonprofits\", {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private postSelectNonprofit = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId | null }) => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"storeId\"], this)) {\n throw new MissingConfig();\n }\n const cartId = this.getExternalCartId();\n const beamCartId = this.getBeamCartId();\n const result = await postSelectNonprofit({\n baseUrl: this.baseUrl,\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n requestBody: {\n nonprofitId: selectedNonprofitId,\n selectionId: this.selectionId,\n storeId: this.storeId,\n cartId,\n beamCartId,\n },\n });\n\n this.selectionId = result?.selectionId;\n this.localStorage.setItem(\"transaction\", this.selectionId);\n this.localStorage.setItem(\"nonprofit\", selectedNonprofitId);\n\n await this.updateComplete;\n\n const selectedNonprofit = this.getNonprofitById(selectedNonprofitId);\n\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({\n selectedNonprofitId,\n selectionId: this.selectionId,\n nonprofitName: selectedNonprofit?.nonprofit?.name,\n })\n );\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits\n );\n\n private selectionDataController = new AsyncController<typeof this.postSelectNonprofit>(\n this,\n this.postSelectNonprofit\n );\n\n private localStorage = createScopedLocalStorage(this as LitElement & RequiredConfig);\n\n private getNonprofitById(selectedNonprofitId: number | null) {\n if (!selectedNonprofitId) return null;\n return this.nonprofitListDataController?.data?.nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId);\n }\n\n private handleCartChange = (evt: BeamCartChangeEvent) => {\n this.cart = evt.detail;\n };\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(BeamCartChangeEvent.eventName, this.handleCartChange as EventListener);\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\", \"cart\", \"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 window.removeEventListener(BeamCartChangeEvent.eventName, this.handleCartChange as EventListener);\n super.disconnectedCallback();\n }\n\n private getExternalCartId() {\n return this.localStorage.getItemJson<TBeamCartLocalStorage>(\"cart\")?.cartId ?? getCookieValue(\"cart\");\n }\n\n private getBeamCartId() {\n return getCookieValue(BEAM_CART_COOKIE_NAME);\n }\n\n private async restoreStateFromCache() {\n try {\n // Restore previous selected nonprofit\n this.selectedNonprofitId = parseInt(this.localStorage.getItem(\"nonprofit\") || \"\") || null;\n // Restore previous transaction/selection\n // TODO: add max TTL for this cache item of 20 days [WEB-100]\n this.selectionId = this.localStorage.getItem(\"transaction\") ?? undefined;\n this.cart = this.localStorage.getItemJson<TBeamCartLocalStorage>(\"cart\") ?? undefined;\n\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 const cacheTtl = 2 * 60 * 60 * 1000;\n if (new Date(createdAt).valueOf() + cacheTtl > new Date().valueOf()) {\n this.nonprofitListDataController.data = data;\n this.nonprofitListDataController.loading = false;\n }\n } catch (err) {\n // ignore cache retrieval error and continue to fetch data\n }\n }\n\n private async createNewSelectionForCachedNonprofit() {\n if (!enforceConfig<RequiredConfig>([\"apiKey\"], this)) {\n throw new MissingConfig();\n }\n if (!this.storeId || this.didTryToCreateNewSelectionFromCache) {\n return; // storeId can be set async as a result of calling find nonprofits with postalCode + zipCode\n }\n try {\n // Immediately set flag to prevent more cache restore attempts from triggering\n this.didTryToCreateNewSelectionFromCache = true;\n\n // Create a new selection ID for the session (e.g., if restoring nonprofit after a completed order)\n\n if (this.selectedNonprofitId) {\n if (!this.selectionId) {\n await this.selectionDataController.exec({ selectedNonprofitId: this.selectedNonprofitId });\n }\n const selectedNonprofit = this.getNonprofitById(this.selectedNonprofitId);\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({\n selectedNonprofitId: this.selectedNonprofitId,\n selectionId: this.selectionId,\n nonprofitName: selectedNonprofit?.nonprofit?.name,\n })\n );\n }\n } catch (err) {\n // Ignore error\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 } }[]) => async (evt: Event) => {\n const currentId = this.selectedNonprofitId;\n if (evt instanceof KeyboardEvent) {\n let nextFocus = null;\n switch (evt.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 evt.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 evt.preventDefault();\n break;\n case \"Enter\":\n case \" \":\n evt.preventDefault();\n break; // continue to toggle-selection block below\n default:\n return;\n }\n if (nextFocus) {\n if (currentId != null) {\n this.selectedNonprofitId = nextFocus.nonprofit.id;\n }\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 = evt.currentTarget;\n if (targetEl instanceof HTMLElement) {\n if (currentId === id) {\n if (this.enableNonprofitDeselection) {\n this.selectedNonprofitId = null; // unset\n } else {\n return;\n }\n } else {\n this.selectedNonprofitId = id;\n }\n }\n await this.selectionDataController.exec({ selectedNonprofitId: this.selectedNonprofitId });\n };\n\n public get cssVariables() {\n const defaults = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n ...progressBarConfigDefaults,\n \"--beam-SelectNonprofit-title-textAlign\": \"inherit\",\n \"--beam-SelectNonprofit-description-textAlign\": \"inherit\",\n \"--beam-SelectNonprofit-maxWidth\": \"800px\",\n \"--beam-SelectNonprofit-options-marginTop\": \"0px\",\n \"--beam-SelectNonprofit-options-iconHeight\": \"24px\",\n \"--beam-SelectNonprofit-options-padding\": \"10px\",\n \"--beam-SelectNonprofit-options-borderRadius\": \"0px\",\n \"--beam-SelectNonprofit-options-borderColor\": \"currentColor\",\n \"--beam-SelectNonprofit-options--selected-borderColor\": \"currentColor\",\n \"--beam-SelectNonprofit-options-backgroundColor\": \"transparent\",\n \"--beam-SelectNonprofit-options-gap\": \"8px\",\n \"--beam-SelectNonprofit-options--selected-backgroundColor\": \"currentColor\",\n \"--beam-SelectNonprofit-details-marginTop\": \"10px\",\n \"--beam-SelectNonprofit-details-borderRadius\": \"0px\",\n \"--beam-SelectNonprofit-details-borderColor\": \"currentColor\",\n \"--beam-SelectNonprofit-details-backgroundColor\": \"inherit\",\n ...defineCustomText(\"--beam-SelectNonprofit-title\", {\n fontSize: \"1.25em\",\n fontWeight: \"bold\",\n }),\n \"--beam-SelectNonprofit-header-inline-lineHeight\": \"inherit\",\n ...defineCustomText(\"--beam-SelectNonprofit-title-inline\", {\n fontWeight: \"bold\",\n }),\n \"--beam-SelectNonprofit-title-inline-textTransform\": \"none\",\n ...defineCustomText(\"--beam-SelectNonprofit-description\", {\n marginTop: \"0.5em\",\n }),\n ...defineCustomText(\"--beam-SelectNonprofit-description-inline\"),\n ...defineCustomText(\"--beam-SelectNonprofit-details-cause\", {\n fontSize: \"0.85em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-SelectNonprofit-details-beamAttribution\", {\n fontSize: \"0.85em\",\n }),\n ...defineCustomText(\"--beam-SelectNonprofit-details-impactDescription\", {\n fontSize: \"1em\",\n marginTop: \"10px\",\n }),\n \"--beam-SelectNonprofit-details-nonprofitName-fontWeight\": \"bold\",\n \"--beam-SelectNonprofit-details-nonprofitName-fontStyle\": \"inherit\",\n \"--beam-SelectNonprofit-details-fundingProgress-marginTop\": \"10px\",\n ...defineCustomText(\"--beam-SelectNonprofit-details-fundingProgressLabel\", {\n fontSize: \"0.85em\",\n }),\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 cssResponsiveUtils,\n css`\n :host {\n display: block;\n max-width: var(--beam-SelectNonprofit-maxWidth, 800px);\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 }\n\n .details-impactDescription {\n ${useCustomText(\"--beam-SelectNonprofit-details-impactDescription\")}\n }\n\n .details-impactDescription .nonprofitName {\n font-weight: var(--beam-SelectNonprofit-details-nonprofitName-fontWeight);\n font-style: var(--beam-SelectNonprofit-details-nonprofitName-fontStyle, inherit);\n }\n\n /* Note: title/description display is responsive */\n\n .title-block {\n ${useCustomText(\"--beam-SelectNonprofit-title\")}\n text-align: var(--beam-SelectNonprofit-title-textAlign);\n }\n\n .header-inline {\n line-height: var(--beam-SelectNonprofit-header-inline-lineHeight);\n }\n\n .title-inline {\n font-size: var(--beam-SelectNonprofit-title-inline-fontSize);\n font-weight: var(--beam-SelectNonprofit-title-inline-fontWeight);\n color: var(--beam-SelectNonprofit-title-inline-color);\n font-family: var(--beam-SelectNonprofit-title-inline-fontFamily);\n text-transform: var(--beam-SelectNonprofit-title-inline-textTransform);\n }\n\n .description-inline {\n font-family: var(--beam-SelectNonprofit-description-inline-fontFamily);\n font-weight: var(--beam-SelectNonprofit-description-inline-fontWeight);\n color: var(--beam-SelectNonprofit-description-inline-color);\n text-transform: var(--beam-SelectNonprofit-description-inline-textTransform);\n font-size: var(--beam-SelectNonprofit-description-inline-fontSize);\n }\n\n .description {\n ${useCustomText(\"--beam-SelectNonprofit-description\")}\n text-align: var(--beam-SelectNonprofit-description-textAlign);\n }\n `,\n ];\n\n protected render() {\n const { selectedNonprofitId } = this;\n const { data, loading } = this.nonprofitListDataController;\n\n if (loading && !data) {\n // TODO: better loading UI\n return _loading(); // TODO: css theme first\n }\n if (this.nonprofitListDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.nonprofitListDataController.error });\n }\n return \"\";\n }\n if (this.selectionDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.selectionDataController.error });\n }\n // do not show error screen for interactive errors by default\n }\n const nonprofits = data?.nonprofits || [];\n const selectedNonprofit = nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId) || null;\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div part=\"heading\">\n <h3 class=\"title-block d-none d-lg-block\" part=\"title\" id=\"beam-SelectNonprofit-title\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") || strings[this.configLang].ctaTitle()}\n </h3>\n <p class=\"description\" part=\"description\">\n <span class=\"d-none d-lg-inline\">\n ${\n localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].ctaMessage()\n }\n </span>\n <div class=\"d-lg-none header-inline\">\n <span class=\"title-inline\" part=\"title\">\n ${\n (localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].ctaTitle()) + strings[this.configLang].inlineSeparator()\n }\n </span>\n <span class=\"description-inline\" part=\"description\">\n ${\n localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].ctaMessage()\n }\n </span>\n </div>\n </p>\n </div>\n <div\n class=\"options\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-SelectNonprofit-title\"\n style=\"display: flex; gap: var(--beam-SelectNonprofit-options-gap); margin: 10px 0 0 0;\"\n >\n ${repeat(\n nonprofits,\n (i) => i.nonprofit.id,\n ({ nonprofit }, index) => {\n const isSelected = selectedNonprofitId === nonprofit.id;\n const isFocusable = isSelected || (selectedNonprofit == null && index === 0);\n return html`\n <div\n class=\"option\"\n part=\"option\"\n role=\"radio\"\n tabindex=\"${isFocusable ? 0 : -1}\"\n data-value=${nonprofit.id}\n aria-checked=${isSelected}\n @click=${this.makeHandleSelect(nonprofit.id, index, nonprofits)}\n @keydown=${this.makeHandleSelect(nonprofit.id, index, nonprofits)}\n aria-label=\"${localizeUserString(this.configLang, nonprofit.cause || \"\")}\"\n style=\"${styleMap({\n cursor: \"pointer\",\n flex: \"1\",\n textAlign: \"center\",\n lineHeight: \"1\",\n marginTop: \"var(--beam-SelectNonprofit-options-marginTop, 0px)\",\n padding: \"var(--beam-SelectNonprofit-options-padding, 10px)\",\n borderWidth: \"var(--beam-SelectNonprofit-options-borderWidth, 1px)\",\n borderStyle: \"solid\",\n borderRadius: \"var(--beam-SelectNonprofit-options-borderRadius, 0)\",\n borderColor: isSelected\n ? nonprofit.causeColor || \"var(--beam-SelectNonprofit-options--selected-borderColor, currentColor)\"\n : \"var(--beam-SelectNonprofit-options-borderColor, currentColor)\",\n backgroundColor: isSelected\n ? nonprofit.causeColor ||\n \"var(--beam-SelectNonprofit-options--selected-backgroundColor, currentColor)\"\n : \"var(--beam-SelectNonprofit-options-backgroundColor, transparent)\",\n })}\"\n >\n <img\n src=\"${isSelected ? nonprofit.causeIconSelectedUrl : nonprofit.causeIconUrl}\"\n alt=\"\"\n role=\"presentation\"\n style=\"\n height: var(--beam-SelectNonprofit-options-iconHeight, 24px);\n user-select: none;\n \"\n />\n </div>\n `;\n }\n )}\n </div>\n ${\n selectedNonprofit != null\n ? html`\n <div\n class=\"details\"\n part=\"details\"\n style=\"\n border: 1px solid var(--beam-SelectNonprofit-details-borderColor);\n border-radius: var(--beam-SelectNonprofit-details-borderRadius);\n background-color: var(--beam-SelectNonprofit-details-backgroundColor);\n padding: 10px;\n margin-top: var(--beam-SelectNonprofit-details-marginTop)\n \"\n >\n <div\n style=\"display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap-reverse\"\n >\n <span\n class=\"details-cause\"\n style=\"flex: 0 1; white-space: nowrap; ${useCustomText(\"--beam-SelectNonprofit-details-cause\")}\"\n >\n ${localizeUserString(this.configLang, selectedNonprofit.nonprofit.cause || \"\")}\n </span>\n <span\n class=\"details-beamAttribution\"\n style=\"flex: 0 1; white-space: nowrap; ${useCustomText(\n \"--beam-SelectNonprofit-details-beamAttribution\"\n )}\"\n >\n ${strings[this.configLang].beamAttribution()}\n </span>\n </div>\n <p class=\"details-impactDescription\">\n ${unsafeHTML(localizeUserString(this.configLang, selectedNonprofit.impact.description || \"\"))}\n </p>\n <div\n style=\"display: flex; margin-top: var(--beam-SelectNonprofit-details-fundingProgress-marginTop); align-items: center;\"\n >\n <beam-progress-bar\n value=\"${selectedNonprofit.impact.goalProgressPercentage}\"\n style=\"flex: 1 0;\"\n ></beam-progress-bar>\n <span\n class=\"details-fundingProgressLabel\"\n style=\"${useCustomText(\n \"--beam-SelectNonprofit-details-fundingProgressLabel\"\n )} white-space: nowrap; text-align: right; flex: 0 1; margin-left: 15px;\"\n >\n ${localizeUserString(this.configLang, selectedNonprofit.impact.goalProgressText)}\n </span>\n </div>\n </div>\n `\n : \"\"\n }\n `;\n }\n}\n\ndefineCustomElement(BeamSelectNonprofit);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-select-nonprofit\": BeamSelectNonprofit;\n }\n}\n"],"names":["strings","donationPercentage","x","L","s","h","f","e","i","o","r","BeamSelectNonprofit","LitElement","DEFAULT_BASE_URL","enforceConfig","cart","res","postChainEligibleNonprofitsForCart","np","BeamNonprofitSelectEvent","selectedNonprofitId","cartId","beamCartId","result","postSelectNonprofit","selectedNonprofit","AsyncController","createScopedLocalStorage","evt","id","index","nonprofits","currentId","nextFocus","focusTarget","SUPPORTED_LANGUAGES","BeamCartChangeEvent","_changedProperties","previousPropertyValues","requireNewDataProps","prop","getCookieValue","BEAM_CART_COOKIE_NAME","createdAt","data","cacheTtl","defaults","progressBarConfigDefaults","defineCustomText","remoteConfig","config","_cssVariableMap","loading","_loading","_errorMessage","html","localizeUserString","repeat","nonprofit","isSelected","isFocusable","styleMap","useCustomText","unsafeHTML","cssReset","cssResponsiveUtils","css","__decorateClass","property","a","b","isEqual","defineCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-nonprofit.esm.js","sources":["../../src/components/select-nonprofit/strings.ts","../../src/components/select-nonprofit/index.ts"],"sourcesContent":["export const strings = {\n en: {\n beamAttribution: () => `Powered by Beam`,\n ctaTitle: () => `Choose your impact`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Select a nonprofit and ${donationPercentage}% of your purchase will be donated, at no extra cost.`,\n inlineSeparator: () => `: `,\n },\n fr: {\n beamAttribution: () => `Optimisé par Beam`,\n ctaTitle: () => `Choisissez votre cause`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Choisissez un organisme à but non lucratif et ${donationPercentage} % lui sera versé en votre nom, sans frais supplémentaires.`,\n inlineSeparator: () => ` : `,\n },\n de: {\n beamAttribution: () => `Unterstützt von Beam`,\n ctaTitle: () => `Wähle deinen Impact`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Wähle eine der gemeinnützigen Organisationen und spende ${donationPercentage}% deines Einkaufs ohne zusätzliche Kosten`,\n inlineSeparator: () => `: `,\n },\n es: {\n beamAttribution: () => \"Ofrecido por Beam\",\n ctaTitle: () => \"Elige tu contribución\",\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Elige una organización sin fines de lucro y donaremos ${donationPercentage}% de tu compra sin coste adicional.`,\n inlineSeparator: () => \": \",\n },\n it: {\n beamAttribution: () => \"Gestito da Beam\",\n ctaTitle: () => \"Scegli dove fare la differenza\",\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Seleziona un'organizzazione no-profit a cui devolvere l’${donationPercentage}% del tuo acquisto, senza costi aggiuntivi`,\n inlineSeparator: () => \": \",\n },\n pl: {\n beamAttribution: () => `Wspierany przez Beam`,\n ctaTitle: () => `Wybierz inicjatywę, którą chcesz wesprzeć`,\n ctaMessage: ({ donationPercentage = \"1\" } = {}) =>\n `Wybierz organizację, której przekażesz ${donationPercentage}% wartości Twoich zakupów – bez żadnych dodatkowych kosztów!`,\n inlineSeparator: () => `: `,\n },\n};\n","import { css, html, LitElement, PropertyValues } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\nimport { property } from \"lit/decorators/property.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport \"../../shared/components/progress-bar\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { isEqual } from \"../../utils\";\nimport { MissingConfig } from \"../../utils/beam-errors\";\nimport { TNumericId } from \"../../shared/types\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { postChainEligibleNonprofitsForCart, postSelectNonprofit } from \"../../api-sdk/v3/routes\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { BeamCartChangeEvent, BeamNonprofitSelectEvent } from \"../../utils/events\";\nimport { getCookieValue } from \"../../utils/cookies\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { progressBarConfigDefaults } from \"../../shared/components/progress-bar\";\nimport { cssResponsiveUtils } from \"../../shared/responsive\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCart } from \"../../shared/cart-contents\";\nimport { strings } from \"./strings\";\n\ninterface RequiredConfig {\n apiKey: string;\n storeId: TNumericId; // Can be set async by postalCode + countryCode lookup\n}\n\nexport class BeamSelectNonprofit extends LitElement {\n static tagName = \"beam-select-nonprofit\";\n\n @property({ type: String }) public baseUrl: string = DEFAULT_BASE_URL;\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n // storeId can be omitted if countryCode + postalCode are provided\n @property({ type: Number, reflect: true }) public storeId?: TNumericId;\n\n @property({ type: String }) public countryCode?: string;\n\n @property({ type: String }) public postalCode?: string;\n\n @property({ attribute: false, hasChanged: (a, b) => !isEqual(a, b) }) public cart?: TCart;\n\n @property({ type: Number, reflect: true }) public selectedNonprofitId: TNumericId | null = null;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public debug = false;\n\n private enableNonprofitDeselection = false;\n\n private selectionId?: string;\n\n private didTryToCreateNewSelectionFromCache = false; // Should only create selection once\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getChainNonprofits = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\"], this)) {\n throw new MissingConfig();\n }\n\n const cart: any = this.cart?.content\n ? {\n schema: this.cart?.schema,\n content: this.cart?.content,\n }\n : undefined;\n\n // We use a POST method because we send a nested JSON with data that we don't want to serialize/expose in URL\n const res = await postChainEligibleNonprofitsForCart({\n baseUrl: this.baseUrl,\n apiRoot: \"/api/v3\",\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n requestBody: {\n storeId: this.storeId,\n widgetName: \"select-nonprofit\",\n postalCode: this.postalCode,\n countryCode: this.countryCode,\n version: \"1.0.0\",\n lang: this.configLang,\n cart,\n },\n });\n\n this.enableNonprofitDeselection = !!res.config.enableNonprofitDeselection;\n\n // Reset selection if list doesn't include the current selected nonprofit\n if (this.selectedNonprofitId && !res.nonprofits.map((np) => np.nonprofit.id).includes(this.selectedNonprofitId)) {\n this.selectedNonprofitId = null;\n await this.postSelectNonprofit({ selectedNonprofitId: null });\n }\n\n // If store ID was not provided, get the store ID from response here\n if (res.store?.id && res.store.id !== this.storeId) {\n this.storeId = res.store.id;\n }\n\n await this.createNewSelectionForCachedNonprofit();\n\n this.localStorage.setItemJson(\"chainNonprofits\", {\n createdAt: new Date(),\n data: res,\n });\n\n return res;\n };\n\n private postSelectNonprofit = async ({ selectedNonprofitId }: { selectedNonprofitId: TNumericId | null }) => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"storeId\"], this)) {\n throw new MissingConfig();\n }\n const cartId = this.getExternalCartId();\n const beamCartId = this.getBeamCartId();\n const result = await postSelectNonprofit({\n baseUrl: this.baseUrl,\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n requestBody: {\n nonprofitId: selectedNonprofitId,\n selectionId: this.selectionId,\n storeId: this.storeId,\n cartId,\n beamCartId,\n },\n });\n\n this.selectionId = result?.selectionId;\n this.localStorage.setItem(\"transaction\", this.selectionId);\n this.localStorage.setItem(\"nonprofit\", selectedNonprofitId);\n\n await this.updateComplete;\n\n const selectedNonprofit = this.getNonprofitById(selectedNonprofitId);\n\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({\n selectedNonprofitId,\n selectionId: this.selectionId,\n nonprofitName: selectedNonprofit?.nonprofit?.name ?? null,\n })\n );\n };\n\n private nonprofitListDataController = new AsyncController<typeof this.getChainNonprofits>(\n this,\n this.getChainNonprofits\n );\n\n private selectionDataController = new AsyncController<typeof this.postSelectNonprofit>(\n this,\n this.postSelectNonprofit\n );\n\n private localStorage = createScopedLocalStorage(this as LitElement & RequiredConfig);\n\n private getNonprofitById(selectedNonprofitId: number | null) {\n if (!selectedNonprofitId) return null;\n return this.nonprofitListDataController?.data?.nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId);\n }\n\n private handleCartChange = (evt: BeamCartChangeEvent) => {\n this.cart = evt.detail;\n };\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(BeamCartChangeEvent.eventName, this.handleCartChange as EventListener);\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\", \"cart\", \"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 window.removeEventListener(BeamCartChangeEvent.eventName, this.handleCartChange as EventListener);\n super.disconnectedCallback();\n }\n\n private getExternalCartId() {\n return this.localStorage.getItemJson<TBeamCartLocalStorage>(\"cart\")?.cartId ?? getCookieValue(\"cart\");\n }\n\n private getBeamCartId() {\n return getCookieValue(BEAM_CART_COOKIE_NAME);\n }\n\n private async restoreStateFromCache() {\n try {\n // Restore previous selected nonprofit\n this.selectedNonprofitId = parseInt(this.localStorage.getItem(\"nonprofit\") || \"\") || null;\n // Restore previous transaction/selection\n // TODO: add max TTL for this cache item of 20 days [WEB-100]\n this.selectionId = this.localStorage.getItem(\"transaction\") ?? undefined;\n this.cart = this.localStorage.getItemJson<TBeamCartLocalStorage>(\"cart\") ?? undefined;\n\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 const cacheTtl = 2 * 60 * 60 * 1000;\n if (new Date(createdAt).valueOf() + cacheTtl > new Date().valueOf()) {\n this.nonprofitListDataController.data = data;\n this.nonprofitListDataController.loading = false;\n }\n } catch (err) {\n // ignore cache retrieval error and continue to fetch data\n }\n }\n\n private async createNewSelectionForCachedNonprofit() {\n if (!enforceConfig<RequiredConfig>([\"apiKey\"], this)) {\n throw new MissingConfig();\n }\n if (!this.storeId || this.didTryToCreateNewSelectionFromCache) {\n return; // storeId can be set async as a result of calling find nonprofits with postalCode + zipCode\n }\n try {\n // Immediately set flag to prevent more cache restore attempts from triggering\n this.didTryToCreateNewSelectionFromCache = true;\n\n // Create a new selection ID for the session (e.g., if restoring nonprofit after a completed order)\n\n if (this.selectedNonprofitId) {\n if (!this.selectionId) {\n await this.selectionDataController.exec({ selectedNonprofitId: this.selectedNonprofitId });\n }\n const selectedNonprofit = this.getNonprofitById(this.selectedNonprofitId);\n this.dispatchEvent(\n new BeamNonprofitSelectEvent({\n selectedNonprofitId: this.selectedNonprofitId,\n selectionId: this.selectionId,\n nonprofitName: selectedNonprofit?.nonprofit?.name,\n })\n );\n }\n } catch (err) {\n // Ignore error\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 } }[]) => async (evt: Event) => {\n const currentId = this.selectedNonprofitId;\n if (evt instanceof KeyboardEvent) {\n let nextFocus = null;\n switch (evt.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 evt.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 evt.preventDefault();\n break;\n case \"Enter\":\n case \" \":\n evt.preventDefault();\n break; // continue to toggle-selection block below\n default:\n return;\n }\n if (nextFocus) {\n if (currentId != null) {\n this.selectedNonprofitId = nextFocus.nonprofit.id;\n }\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 = evt.currentTarget;\n if (targetEl instanceof HTMLElement) {\n if (currentId === id) {\n if (this.enableNonprofitDeselection) {\n this.selectedNonprofitId = null; // unset\n } else {\n return;\n }\n } else {\n this.selectedNonprofitId = id;\n }\n }\n await this.selectionDataController.exec({ selectedNonprofitId: this.selectedNonprofitId });\n };\n\n public get cssVariables() {\n const defaults = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"inherit\",\n \"--beam-textColor\": \"inherit\",\n \"--beam-backgroundColor\": \"inherit\",\n ...progressBarConfigDefaults,\n \"--beam-SelectNonprofit-title-textAlign\": \"inherit\",\n \"--beam-SelectNonprofit-description-textAlign\": \"inherit\",\n \"--beam-SelectNonprofit-maxWidth\": \"800px\",\n \"--beam-SelectNonprofit-options-marginTop\": \"0px\",\n \"--beam-SelectNonprofit-options-iconHeight\": \"24px\",\n \"--beam-SelectNonprofit-options-padding\": \"10px\",\n \"--beam-SelectNonprofit-options-borderRadius\": \"0px\",\n \"--beam-SelectNonprofit-options-borderColor\": \"currentColor\",\n \"--beam-SelectNonprofit-options--selected-borderColor\": \"currentColor\",\n \"--beam-SelectNonprofit-options-backgroundColor\": \"transparent\",\n \"--beam-SelectNonprofit-options-gap\": \"8px\",\n \"--beam-SelectNonprofit-options--selected-backgroundColor\": \"currentColor\",\n \"--beam-SelectNonprofit-details-marginTop\": \"10px\",\n \"--beam-SelectNonprofit-details-borderRadius\": \"0px\",\n \"--beam-SelectNonprofit-details-borderColor\": \"currentColor\",\n \"--beam-SelectNonprofit-details-backgroundColor\": \"inherit\",\n ...defineCustomText(\"--beam-SelectNonprofit-title\", {\n fontSize: \"1.25em\",\n fontWeight: \"bold\",\n }),\n \"--beam-SelectNonprofit-header-inline-lineHeight\": \"inherit\",\n ...defineCustomText(\"--beam-SelectNonprofit-title-inline\", {\n fontWeight: \"bold\",\n }),\n \"--beam-SelectNonprofit-title-inline-textTransform\": \"none\",\n ...defineCustomText(\"--beam-SelectNonprofit-description\", {\n marginTop: \"0.5em\",\n }),\n ...defineCustomText(\"--beam-SelectNonprofit-description-inline\"),\n ...defineCustomText(\"--beam-SelectNonprofit-details-cause\", {\n fontSize: \"0.85em\",\n fontWeight: \"bold\",\n }),\n ...defineCustomText(\"--beam-SelectNonprofit-details-beamAttribution\", {\n fontSize: \"0.85em\",\n }),\n ...defineCustomText(\"--beam-SelectNonprofit-details-impactDescription\", {\n fontSize: \"1em\",\n marginTop: \"10px\",\n }),\n \"--beam-SelectNonprofit-details-nonprofitName-fontWeight\": \"bold\",\n \"--beam-SelectNonprofit-details-nonprofitName-fontStyle\": \"inherit\",\n \"--beam-SelectNonprofit-details-fundingProgress-marginTop\": \"10px\",\n ...defineCustomText(\"--beam-SelectNonprofit-details-fundingProgressLabel\", {\n fontSize: \"0.85em\",\n }),\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 cssResponsiveUtils,\n css`\n :host {\n display: block;\n max-width: var(--beam-SelectNonprofit-maxWidth, 800px);\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 }\n\n .details-impactDescription {\n ${useCustomText(\"--beam-SelectNonprofit-details-impactDescription\")}\n }\n\n .details-impactDescription .nonprofitName {\n font-weight: var(--beam-SelectNonprofit-details-nonprofitName-fontWeight);\n font-style: var(--beam-SelectNonprofit-details-nonprofitName-fontStyle, inherit);\n }\n\n /* Note: title/description display is responsive */\n\n .title-block {\n ${useCustomText(\"--beam-SelectNonprofit-title\")}\n text-align: var(--beam-SelectNonprofit-title-textAlign);\n }\n\n .header-inline {\n line-height: var(--beam-SelectNonprofit-header-inline-lineHeight);\n }\n\n .title-inline {\n font-size: var(--beam-SelectNonprofit-title-inline-fontSize);\n font-weight: var(--beam-SelectNonprofit-title-inline-fontWeight);\n color: var(--beam-SelectNonprofit-title-inline-color);\n font-family: var(--beam-SelectNonprofit-title-inline-fontFamily);\n text-transform: var(--beam-SelectNonprofit-title-inline-textTransform);\n }\n\n .description-inline {\n font-family: var(--beam-SelectNonprofit-description-inline-fontFamily);\n font-weight: var(--beam-SelectNonprofit-description-inline-fontWeight);\n color: var(--beam-SelectNonprofit-description-inline-color);\n text-transform: var(--beam-SelectNonprofit-description-inline-textTransform);\n font-size: var(--beam-SelectNonprofit-description-inline-fontSize);\n }\n\n .description {\n ${useCustomText(\"--beam-SelectNonprofit-description\")}\n text-align: var(--beam-SelectNonprofit-description-textAlign);\n }\n `,\n ];\n\n protected render() {\n const { selectedNonprofitId } = this;\n const { data, loading } = this.nonprofitListDataController;\n\n if (loading && !data) {\n // TODO: better loading UI\n return _loading(); // TODO: css theme first\n }\n if (this.nonprofitListDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.nonprofitListDataController.error });\n }\n return \"\";\n }\n if (this.selectionDataController.error) {\n if (this.debug) {\n return _errorMessage({ error: this.selectionDataController.error });\n }\n // do not show error screen for interactive errors by default\n }\n const nonprofits = data?.nonprofits || [];\n const selectedNonprofit = nonprofits.find((np) => np.nonprofit.id === selectedNonprofitId) || null;\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div part=\"heading\">\n <h3 class=\"title-block d-none d-lg-block\" part=\"title\" id=\"beam-SelectNonprofit-title\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") || strings[this.configLang].ctaTitle()}\n </h3>\n <p class=\"description\" part=\"description\">\n <span class=\"d-none d-lg-inline\">\n ${\n localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].ctaMessage()\n }\n </span>\n <div class=\"d-lg-none header-inline\">\n <span class=\"title-inline\" part=\"title\">\n ${\n (localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].ctaTitle()) + strings[this.configLang].inlineSeparator()\n }\n </span>\n <span class=\"description-inline\" part=\"description\">\n ${\n localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].ctaMessage()\n }\n </span>\n </div>\n </p>\n </div>\n <div\n class=\"options\"\n part=\"options\"\n role=\"radiogroup\"\n aria-labelledby=\"beam-SelectNonprofit-title\"\n style=\"display: flex; gap: var(--beam-SelectNonprofit-options-gap); margin: 10px 0 0 0;\"\n >\n ${repeat(\n nonprofits,\n (i) => i.nonprofit.id,\n ({ nonprofit }, index) => {\n const isSelected = selectedNonprofitId === nonprofit.id;\n const isFocusable = isSelected || (selectedNonprofit == null && index === 0);\n return html`\n <div\n class=\"option\"\n part=\"option\"\n role=\"radio\"\n tabindex=\"${isFocusable ? 0 : -1}\"\n data-value=${nonprofit.id}\n aria-checked=${isSelected}\n @click=${this.makeHandleSelect(nonprofit.id, index, nonprofits)}\n @keydown=${this.makeHandleSelect(nonprofit.id, index, nonprofits)}\n aria-label=\"${localizeUserString(this.configLang, nonprofit.cause || \"\")}\"\n style=\"${styleMap({\n cursor: \"pointer\",\n flex: \"1\",\n textAlign: \"center\",\n lineHeight: \"1\",\n marginTop: \"var(--beam-SelectNonprofit-options-marginTop, 0px)\",\n padding: \"var(--beam-SelectNonprofit-options-padding, 10px)\",\n borderWidth: \"var(--beam-SelectNonprofit-options-borderWidth, 1px)\",\n borderStyle: \"solid\",\n borderRadius: \"var(--beam-SelectNonprofit-options-borderRadius, 0)\",\n borderColor: isSelected\n ? nonprofit.causeColor || \"var(--beam-SelectNonprofit-options--selected-borderColor, currentColor)\"\n : \"var(--beam-SelectNonprofit-options-borderColor, currentColor)\",\n backgroundColor: isSelected\n ? nonprofit.causeColor ||\n \"var(--beam-SelectNonprofit-options--selected-backgroundColor, currentColor)\"\n : \"var(--beam-SelectNonprofit-options-backgroundColor, transparent)\",\n })}\"\n >\n <img\n src=\"${isSelected ? nonprofit.causeIconSelectedUrl : nonprofit.causeIconUrl}\"\n alt=\"\"\n role=\"presentation\"\n style=\"\n height: var(--beam-SelectNonprofit-options-iconHeight, 24px);\n user-select: none;\n \"\n />\n </div>\n `;\n }\n )}\n </div>\n ${\n selectedNonprofit != null\n ? html`\n <div\n class=\"details\"\n part=\"details\"\n style=\"\n border: 1px solid var(--beam-SelectNonprofit-details-borderColor);\n border-radius: var(--beam-SelectNonprofit-details-borderRadius);\n background-color: var(--beam-SelectNonprofit-details-backgroundColor);\n padding: 10px;\n margin-top: var(--beam-SelectNonprofit-details-marginTop)\n \"\n >\n <div\n style=\"display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap-reverse\"\n >\n <span\n class=\"details-cause\"\n style=\"flex: 0 1; white-space: nowrap; ${useCustomText(\"--beam-SelectNonprofit-details-cause\")}\"\n >\n ${localizeUserString(this.configLang, selectedNonprofit.nonprofit.cause || \"\")}\n </span>\n <span\n class=\"details-beamAttribution\"\n style=\"flex: 0 1; white-space: nowrap; ${useCustomText(\n \"--beam-SelectNonprofit-details-beamAttribution\"\n )}\"\n >\n ${strings[this.configLang].beamAttribution()}\n </span>\n </div>\n <p class=\"details-impactDescription\">\n ${unsafeHTML(localizeUserString(this.configLang, selectedNonprofit.impact.description || \"\"))}\n </p>\n <div\n style=\"display: flex; margin-top: var(--beam-SelectNonprofit-details-fundingProgress-marginTop); align-items: center;\"\n >\n <beam-progress-bar\n value=\"${selectedNonprofit.impact.goalProgressPercentage}\"\n style=\"flex: 1 0;\"\n ></beam-progress-bar>\n <span\n class=\"details-fundingProgressLabel\"\n style=\"${useCustomText(\n \"--beam-SelectNonprofit-details-fundingProgressLabel\"\n )} white-space: nowrap; text-align: right; flex: 0 1; margin-left: 15px;\"\n >\n ${localizeUserString(this.configLang, selectedNonprofit.impact.goalProgressText)}\n </span>\n </div>\n </div>\n `\n : \"\"\n }\n `;\n }\n}\n\ndefineCustomElement(BeamSelectNonprofit);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-select-nonprofit\": BeamSelectNonprofit;\n }\n}\n"],"names":["strings","donationPercentage","x","L","s","h","f","e","o","i","r","BeamSelectNonprofit","LitElement","DEFAULT_BASE_URL","enforceConfig","cart","res","postChainEligibleNonprofitsForCart","np","selectedNonprofitId","cartId","beamCartId","result","postSelectNonprofit","selectedNonprofit","BeamNonprofitSelectEvent","AsyncController","createScopedLocalStorage","evt","id","index","nonprofits","currentId","nextFocus","focusTarget","SUPPORTED_LANGUAGES","BeamCartChangeEvent","_changedProperties","previousPropertyValues","requireNewDataProps","prop","getCookieValue","BEAM_CART_COOKIE_NAME","createdAt","data","cacheTtl","defaults","progressBarConfigDefaults","defineCustomText","remoteConfig","config","_cssVariableMap","loading","_loading","_errorMessage","html","localizeUserString","repeat","nonprofit","isSelected","isFocusable","styleMap","useCustomText","unsafeHTML","cssReset","cssResponsiveUtils","css","__decorateClass","property","a","b","isEqual","defineCustomElement"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{f as I,g as l,h as w,y as b,p as k,m as z,k as $}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as L,
|
|
1
|
+
import{f as I,g as l,h as w,y as b,p as k,m as z,k as $}from"../chunks/lit-yVXn5Cbs.esm.js";import{c as L,d as D,e as u,A as S,a as T,_ as N}from"../chunks/enforce-config-n0D_zfMC.esm.js";import{D as A,b as E,f as B,S as F}from"../chunks/routes-wPiw5U5n.esm.js";import{p as P}from"../chunks/progress-bar-7gWYaGlq.esm.js";import{u as m,d as p,_ as U,i as d}from"../chunks/localize-0rA0DbzI.esm.js";import{c as C,f as y}from"../chunks/events-5IECSF-x.esm.js";import"../utils/network-listeners.js";import{createScopedLocalStorage as W}from"../utils/local-storage.js";import{getCookieValue as v}from"../utils/cookies.js";import{i as M}from"../chunks/lodash-P8OIs-at.esm.js";import{c as O}from"../chunks/responsive-LYEag6TI.esm.js";import{B as R}from"../chunks/cart-contents-h60geKWa.esm.js";import"../chunks/beam-errors-AMvTvR1C.esm.js";import"../utils/logger.js";const h={en:{beamAttribution:()=>"Powered by Beam",ctaTitle:()=>"Choose your impact",ctaMessage:({donationPercentage:r="1"}={})=>`Select a nonprofit and ${r}% of your purchase will be donated, at no extra cost.`,inlineSeparator:()=>": "},fr:{beamAttribution:()=>"Optimis\xE9 par Beam",ctaTitle:()=>"Choisissez votre cause",ctaMessage:({donationPercentage:r="1"}={})=>`Choisissez un organisme \xE0 but non lucratif et ${r} % lui sera vers\xE9 en votre nom, sans frais suppl\xE9mentaires.`,inlineSeparator:()=>" : "},de:{beamAttribution:()=>"Unterst\xFCtzt von Beam",ctaTitle:()=>"W\xE4hle deinen Impact",ctaMessage:({donationPercentage:r="1"}={})=>`W\xE4hle eine der gemeinn\xFCtzigen Organisationen und spende ${r}% deines Einkaufs ohne zus\xE4tzliche Kosten`,inlineSeparator:()=>": "},es:{beamAttribution:()=>"Ofrecido por Beam",ctaTitle:()=>"Elige tu contribuci\xF3n",ctaMessage:({donationPercentage:r="1"}={})=>`Elige una organizaci\xF3n sin fines de lucro y donaremos ${r}% de tu compra sin coste adicional.`,inlineSeparator:()=>": "},it:{beamAttribution:()=>"Gestito da Beam",ctaTitle:()=>"Scegli dove fare la differenza",ctaMessage:({donationPercentage:r="1"}={})=>`Seleziona un'organizzazione no-profit a cui devolvere l\u2019${r}% del tuo acquisto, senza costi aggiuntivi`,inlineSeparator:()=>": "},pl:{beamAttribution:()=>"Wspierany przez Beam",ctaTitle:()=>"Wybierz inicjatyw\u0119, kt\xF3r\u0105 chcesz wesprze\u0107",ctaMessage:({donationPercentage:r="1"}={})=>`Wybierz organizacj\u0119, kt\xF3rej przeka\u017Cesz ${r}% warto\u015Bci Twoich zakup\xF3w \u2013 bez \u017Cadnych dodatkowych koszt\xF3w!`,inlineSeparator:()=>": "}};var K=Object.defineProperty,_=Object.getOwnPropertyDescriptor,c=(r,e,t,i)=>{for(var n=i>1?void 0:i?_(e,t):e,a=r.length-1,o;a>=0;a--)(o=r[a])&&(n=(i?o(e,t,n):o(n))||n);return i&&n&&K(e,t,n),n};class s extends w{constructor(){super(...arguments),this.baseUrl=A,this.selectedNonprofitId=null,this.lang="en",this.debug=!1,this.enableNonprofitDeselection=!1,this.didTryToCreateNewSelectionFromCache=!1,this.getChainNonprofits=async()=>{u(["apiKey"],this);const e=this.cart?.content?{schema:this.cart?.schema,content:this.cart?.content}:void 0,t=await E({baseUrl:this.baseUrl,apiRoot:"/api/v3",headers:{authorization:`Api-Key ${this.apiKey}`},requestBody:{storeId:this.storeId,widgetName:"select-nonprofit",postalCode:this.postalCode,countryCode:this.countryCode,version:"1.0.0",lang:this.configLang,cart:e}});return this.enableNonprofitDeselection=!!t.config.enableNonprofitDeselection,this.selectedNonprofitId&&!t.nonprofits.map(i=>i.nonprofit.id).includes(this.selectedNonprofitId)&&(this.selectedNonprofitId=null,await this.postSelectNonprofit({selectedNonprofitId:null})),t.store?.id&&t.store.id!==this.storeId&&(this.storeId=t.store.id),await this.createNewSelectionForCachedNonprofit(),this.localStorage.setItemJson("chainNonprofits",{createdAt:new Date,data:t}),t},this.postSelectNonprofit=async({selectedNonprofitId:e})=>{u(["apiKey","storeId"],this);const t=this.getExternalCartId(),i=this.getBeamCartId(),n=await B({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},requestBody:{nonprofitId:e,selectionId:this.selectionId,storeId:this.storeId,cartId:t,beamCartId:i}});this.selectionId=n?.selectionId,this.localStorage.setItem("transaction",this.selectionId),this.localStorage.setItem("nonprofit",e),await this.updateComplete;const a=this.getNonprofitById(e);this.dispatchEvent(new C({selectedNonprofitId:e,selectionId:this.selectionId,nonprofitName:a?.nonprofit?.name??null}))},this.nonprofitListDataController=new S(this,this.getChainNonprofits),this.selectionDataController=new S(this,this.postSelectNonprofit),this.localStorage=W(this),this.handleCartChange=e=>{this.cart=e.detail},this.makeHandleSelect=(e,t,i)=>async n=>{const a=this.selectedNonprofitId;if(n instanceof KeyboardEvent){let o=null;switch(n.key){case"ArrowUp":case"ArrowLeft":t===0?o=i[i.length-1]:o=i[t-1],n.preventDefault();break;case"ArrowRight":case"ArrowDown":t===i.length-1?o=i[0]:o=i[t+1],n.preventDefault();break;case"Enter":case" ":n.preventDefault();break;default:return}if(o){a!=null&&(this.selectedNonprofitId=o.nonprofit.id);const f=this.renderRoot.querySelector(`[data-value="${o.nonprofit.id}"]`);f!==null&&(f.tabIndex=0,f.focus());return}}if(n.currentTarget instanceof HTMLElement)if(a===e)if(this.enableNonprofitDeselection)this.selectedNonprofitId=null;else return;else this.selectedNonprofitId=e;await this.selectionDataController.exec({selectedNonprofitId:this.selectedNonprofitId})}}get configLang(){return F[this.lang]||"en"}getNonprofitById(e){return e?this.nonprofitListDataController?.data?.nonprofits.find(t=>t.nonprofit.id===e):null}connectedCallback(){super.connectedCallback(),window.addEventListener(y.eventName,this.handleCartChange)}async firstUpdated(e){await this.restoreStateFromCache()}async updated(e){const t=["baseUrl","storeId","apiKey","countryCode","postalCode","cart","lang"];for(const i of t)if(e.has(i)){await this.nonprofitListDataController.exec();break}}disconnectedCallback(){window.removeEventListener(y.eventName,this.handleCartChange),super.disconnectedCallback()}getExternalCartId(){return this.localStorage.getItemJson("cart")?.cartId??v("cart")}getBeamCartId(){return v(R)}async restoreStateFromCache(){try{this.selectedNonprofitId=parseInt(this.localStorage.getItem("nonprofit")||"")||null,this.selectionId=this.localStorage.getItem("transaction")??void 0,this.cart=this.localStorage.getItemJson("cart")??void 0;const{createdAt:e=0,data:t}=this.localStorage.getItemJson("chainNonprofits")||{},i=2*60*60*1e3;new Date(e).valueOf()+i>new Date().valueOf()&&(this.nonprofitListDataController.data=t,this.nonprofitListDataController.loading=!1)}catch{}}async createNewSelectionForCachedNonprofit(){if(u(["apiKey"],this),!(!this.storeId||this.didTryToCreateNewSelectionFromCache))try{if(this.didTryToCreateNewSelectionFromCache=!0,this.selectedNonprofitId){this.selectionId||await this.selectionDataController.exec({selectedNonprofitId:this.selectedNonprofitId});const e=this.getNonprofitById(this.selectedNonprofitId);this.dispatchEvent(new C({selectedNonprofitId:this.selectedNonprofitId,selectionId:this.selectionId,nonprofitName:e?.nonprofit?.name}))}}catch{}}get cssVariables(){const e={"--beam-fontFamily":"inherit","--beam-fontStyle":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...P,"--beam-SelectNonprofit-title-textAlign":"inherit","--beam-SelectNonprofit-description-textAlign":"inherit","--beam-SelectNonprofit-maxWidth":"800px","--beam-SelectNonprofit-options-marginTop":"0px","--beam-SelectNonprofit-options-iconHeight":"24px","--beam-SelectNonprofit-options-padding":"10px","--beam-SelectNonprofit-options-borderRadius":"0px","--beam-SelectNonprofit-options-borderColor":"currentColor","--beam-SelectNonprofit-options--selected-borderColor":"currentColor","--beam-SelectNonprofit-options-backgroundColor":"transparent","--beam-SelectNonprofit-options-gap":"8px","--beam-SelectNonprofit-options--selected-backgroundColor":"currentColor","--beam-SelectNonprofit-details-marginTop":"10px","--beam-SelectNonprofit-details-borderRadius":"0px","--beam-SelectNonprofit-details-borderColor":"currentColor","--beam-SelectNonprofit-details-backgroundColor":"inherit",...p("--beam-SelectNonprofit-title",{fontSize:"1.25em",fontWeight:"bold"}),"--beam-SelectNonprofit-header-inline-lineHeight":"inherit",...p("--beam-SelectNonprofit-title-inline",{fontWeight:"bold"}),"--beam-SelectNonprofit-title-inline-textTransform":"none",...p("--beam-SelectNonprofit-description",{marginTop:"0.5em"}),...p("--beam-SelectNonprofit-description-inline"),...p("--beam-SelectNonprofit-details-cause",{fontSize:"0.85em",fontWeight:"bold"}),...p("--beam-SelectNonprofit-details-beamAttribution",{fontSize:"0.85em"}),...p("--beam-SelectNonprofit-details-impactDescription",{fontSize:"1em",marginTop:"10px"}),"--beam-SelectNonprofit-details-nonprofitName-fontWeight":"bold","--beam-SelectNonprofit-details-nonprofitName-fontStyle":"inherit","--beam-SelectNonprofit-details-fundingProgress-marginTop":"10px",...p("--beam-SelectNonprofit-details-fundingProgressLabel",{fontSize:"0.85em"})},t=this.nonprofitListDataController?.data?.config?.web?.theme||{},i={...e,...t};return Object.assign(Object.create({toCSS(){return T(this)}}),i)}render(){const{selectedNonprofitId:e}=this,{data:t,loading:i}=this.nonprofitListDataController;if(i&&!t)return U();if(this.nonprofitListDataController.error)return this.debug?N({error:this.nonprofitListDataController.error}):"";if(this.selectionDataController.error&&this.debug)return N({error:this.selectionDataController.error});const n=t?.nonprofits||[],a=n.find(o=>o.nonprofit.id===e)||null;return b`
|
|
2
2
|
<style>
|
|
3
3
|
:host {
|
|
4
4
|
${this.cssVariables.toCSS()}
|