@beamimpact/web-sdk 1.45.3 → 1.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/_share-dialog-dependencies-PFFpDNAX.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-PFFpDNAX.esm.js.map +1 -0
- package/dist/chunks/_share-dialog-dependencies-ctThmFDw.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-ctThmFDw.esm.js.map +1 -0
- package/dist/chunks/{cart-contents-HAPzwbeL.esm.d.ts → cart-contents-MrYQNVDx.esm.d.ts} +1 -1
- package/dist/chunks/{events-fqRWfo7p.esm.d.ts → events--Qgk7Mel.esm.d.ts} +1 -1
- package/dist/chunks/{index-XN6JUoCQ.esm.js → index-1W93aRCe.esm.js} +2 -2
- package/dist/chunks/{index-XN6JUoCQ.esm.js.map → index-1W93aRCe.esm.js.map} +1 -1
- package/dist/chunks/{index-MSoONvC5.esm.d.ts → index-8gDNc2to.esm.d.ts} +1 -1
- package/dist/chunks/index-Hb6pipkL.esm.js +2 -0
- package/dist/chunks/index-Hb6pipkL.esm.js.map +1 -0
- package/dist/chunks/{index-qt5iD9Ok.esm.d.ts → index-Ie9en2n6.esm.d.ts} +1 -1
- package/dist/chunks/{index-SExnliMs.esm.d.ts → index-S_lCvtkH.esm.d.ts} +1 -1
- package/dist/chunks/index-cGU2h6FW.esm.js +2 -0
- package/dist/chunks/index-cGU2h6FW.esm.js.map +1 -0
- package/dist/chunks/{index-IujuLxUV.esm.js → index-dvBJt1Qq.esm.js} +2 -2
- package/dist/chunks/{index-IujuLxUV.esm.js.map → index-dvBJt1Qq.esm.js.map} +1 -1
- package/dist/chunks/{index-JG4nmG9U.esm.d.ts → index-gQHtJWVP.esm.d.ts} +1 -1
- package/dist/chunks/index-hGumnpwj.esm.js +2 -0
- package/dist/chunks/index-hGumnpwj.esm.js.map +1 -0
- package/dist/chunks/index-hOkyesad.esm.js +2 -0
- package/dist/chunks/index-hOkyesad.esm.js.map +1 -0
- package/dist/chunks/{index-tdUx2WLc.esm.d.ts → index-ikzViFqS.esm.d.ts} +4 -4
- package/dist/chunks/index-pLSxG_UY.esm.js +2 -0
- package/dist/chunks/index-pLSxG_UY.esm.js.map +1 -0
- package/dist/chunks/index-rmlKdwmx.esm.js +2 -0
- package/dist/chunks/index-rmlKdwmx.esm.js.map +1 -0
- package/dist/chunks/{index-7mukhxz_.esm.d.ts → index-wqLh9Pnq.esm.d.ts} +1 -1
- package/dist/chunks/localize-m-_ESmpk.esm.js.map +1 -1
- package/dist/chunks/localize-o-cYvHQf.esm.js.map +1 -1
- package/dist/chunks/{openapi-spec-RlP2IT1i.esm.d.ts → openapi-spec--os_utEo.esm.d.ts} +55 -1
- package/dist/chunks/{order-page-fVZWjxXw.esm.js → order-page-CqyWx-7V.esm.js} +2 -2
- package/dist/chunks/{order-page-fVZWjxXw.esm.js.map → order-page-CqyWx-7V.esm.js.map} +1 -1
- package/dist/chunks/{order-page-FLhpaZg2.esm.d.ts → order-page-GwRa273v.esm.d.ts} +3 -3
- package/dist/chunks/{order-page-Qptp0Cgw.esm.js → order-page-PE7XPoJe.esm.js} +2 -2
- package/dist/chunks/{order-page-Qptp0Cgw.esm.js.map → order-page-PE7XPoJe.esm.js.map} +1 -1
- package/dist/chunks/{promo-pill-label-58PJRvSl.esm.js → promo-pill-label-P1X4xeAx.esm.js} +4 -3
- package/dist/chunks/promo-pill-label-P1X4xeAx.esm.js.map +1 -0
- package/dist/chunks/{routes-kK10CmJz.esm.js → routes-DWNnzqXL.esm.js} +2 -2
- package/dist/chunks/{routes-kK10CmJz.esm.js.map → routes-DWNnzqXL.esm.js.map} +1 -1
- package/dist/chunks/{routes-NIuAzAOC.esm.d.ts → routes-iurI6dvR.esm.d.ts} +71 -1
- package/dist/chunks/{routes-4z90Ks28.esm.js → routes-o0OWqrXe.esm.js} +2 -2
- package/dist/chunks/{routes-4z90Ks28.esm.js.map → routes-o0OWqrXe.esm.js.map} +1 -1
- package/dist/chunks/{share-button-RG2BkqMA.esm.js → share-button-18T-n7FU.esm.js} +3 -4
- package/dist/chunks/{share-button-RG2BkqMA.esm.js.map → share-button-18T-n7FU.esm.js.map} +1 -1
- package/dist/chunks/{share-button-K_FE0-s2.esm.js → share-button-W7QRecW0.esm.js} +3 -4
- package/dist/chunks/{share-button-K_FE0-s2.esm.js.map → share-button-W7QRecW0.esm.js.map} +1 -1
- package/dist/chunks/{shoelace-components-522x2Yt1.esm.js → shoelace-components-H1SnT4Dq.esm.js} +2 -2
- package/dist/chunks/{shoelace-components-522x2Yt1.esm.js.map → shoelace-components-H1SnT4Dq.esm.js.map} +1 -1
- package/dist/chunks/{shoelace-components-59LxBr67.esm.js → shoelace-components-scmUU5La.esm.js} +2 -2
- package/dist/chunks/{shoelace-components-59LxBr67.esm.js.map → shoelace-components-scmUU5La.esm.js.map} +1 -1
- package/dist/chunks/{update-cart-Hebtxhto.esm.d.ts → update-cart-KjKc8Cls.esm.d.ts} +1 -1
- package/dist/chunks/{update-cart-eodNhDjI.esm.js → update-cart-Tv_fewXm.esm.js} +2 -2
- package/dist/chunks/{update-cart-eodNhDjI.esm.js.map → update-cart-Tv_fewXm.esm.js.map} +1 -1
- package/dist/chunks/{update-cart-BcLkAJSc.esm.js → update-cart-YDnJT-2Q.esm.js} +2 -2
- package/dist/chunks/{update-cart-BcLkAJSc.esm.js.map → update-cart-YDnJT-2Q.esm.js.map} +1 -1
- package/dist/components/community-impact.esm.js +1 -1
- package/dist/components/community-impact.js +1 -1
- package/dist/components/cumulative-impact.esm.js +1 -1
- package/dist/components/cumulative-impact.esm.js.map +1 -1
- package/dist/components/cumulative-impact.js +1 -1
- package/dist/components/cumulative-impact.js.map +1 -1
- package/dist/components/impact-overview.d.ts +5 -1
- package/dist/components/impact-overview.esm.js +31 -25
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +31 -25
- package/dist/components/impact-overview.js.map +1 -1
- package/dist/components/index.d.ts +3 -3
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +4 -2
- package/dist/components/post-purchase.esm.js +1 -1
- package/dist/components/post-purchase.js +1 -1
- package/dist/components/product-details-page.d.ts +6 -1
- package/dist/components/product-details-page.esm.js +106 -33
- package/dist/components/product-details-page.esm.js.map +1 -1
- package/dist/components/product-details-page.js +106 -33
- package/dist/components/product-details-page.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +2 -2
- package/dist/components/redeem-transaction.esm.js +3 -2
- package/dist/components/redeem-transaction.esm.js.map +1 -1
- package/dist/components/redeem-transaction.js +3 -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 +4 -4
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +4 -4
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.esm.js +6 -4
- package/dist/components/select-subscription-nonprofit.esm.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.js +6 -4
- package/dist/components/select-subscription-nonprofit.js.map +1 -1
- package/dist/components/shopify.d.ts +6 -6
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/components/social-share.esm.js +1 -1
- package/dist/components/social-share.js +1 -1
- package/dist/components/subscription-impact.d.ts +2 -0
- package/dist/components/subscription-impact.esm.js +1 -1
- package/dist/components/subscription-impact.js +1 -1
- package/dist/components/subscription-management.d.ts +6 -3
- package/dist/components/subscription-management.esm.js +10 -10
- package/dist/components/subscription-management.esm.js.map +1 -1
- package/dist/components/subscription-management.js +10 -10
- package/dist/components/subscription-management.js.map +1 -1
- package/dist/index.d.ts +12 -12
- 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 +10 -10
- 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 +5 -5
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.d.ts +3 -0
- package/dist/integrations/statsig.esm.js +3 -3
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +3 -3
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/integrations/utils.d.ts +3 -3
- package/dist/react/community-impact.esm.js +1 -1
- package/dist/react/community-impact.js +1 -1
- package/dist/react/cumulative-impact.esm.js +1 -1
- package/dist/react/cumulative-impact.js +1 -1
- package/dist/react/impact-overview.esm.js +1 -1
- package/dist/react/impact-overview.js +1 -1
- package/dist/react/index.d.ts +4 -4
- 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.js +1 -1
- package/dist/react/product-details-page.d.ts +2 -0
- package/dist/react/product-details-page.esm.js +1 -1
- package/dist/react/product-details-page.esm.js.map +1 -1
- package/dist/react/product-details-page.js +1 -1
- package/dist/react/product-details-page.js.map +1 -1
- package/dist/react/redeem-transaction.d.ts +3 -3
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.js +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.js +1 -1
- package/dist/react/select-subscription-nonprofit.d.ts +3 -3
- package/dist/react/select-subscription-nonprofit.esm.js +1 -1
- package/dist/react/select-subscription-nonprofit.js +1 -1
- package/dist/react/social-share.esm.js +1 -1
- package/dist/react/social-share.js +1 -1
- package/dist/react/subscription-impact.esm.js +1 -1
- package/dist/react/subscription-impact.js +1 -1
- package/dist/react/subscription-management.d.ts +3 -3
- package/dist/react/subscription-management.esm.js +1 -1
- package/dist/react/subscription-management.js +1 -1
- package/dist/utils/events.d.ts +3 -3
- package/dist/utils/index.d.ts +3 -3
- package/dist/utils/local-storage.esm.js.map +1 -1
- package/dist/utils/local-storage.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/_share-dialog-dependencies-FXJR0ESq.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-FXJR0ESq.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-VM-oSkel.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-VM-oSkel.esm.js.map +0 -1
- package/dist/chunks/index-4Fvcu3-v.esm.js +0 -2
- package/dist/chunks/index-4Fvcu3-v.esm.js.map +0 -1
- package/dist/chunks/index-KQ5XYf5e.esm.js +0 -2
- package/dist/chunks/index-KQ5XYf5e.esm.js.map +0 -1
- package/dist/chunks/index-Uos3T3K9.esm.js +0 -2
- package/dist/chunks/index-Uos3T3K9.esm.js.map +0 -1
- package/dist/chunks/index-WibiKAEy.esm.js +0 -2
- package/dist/chunks/index-WibiKAEy.esm.js.map +0 -1
- package/dist/chunks/index-qOqcMZym.esm.js +0 -2
- package/dist/chunks/index-qOqcMZym.esm.js.map +0 -1
- package/dist/chunks/index-xJ0ZfjZW.esm.js +0 -2
- package/dist/chunks/index-xJ0ZfjZW.esm.js.map +0 -1
- package/dist/chunks/promo-pill-label-58PJRvSl.esm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cumulative-impact.esm.js","sources":["../../src/shared/components/animated-counter/index.ts","../../src/shared/sync-element-widths.ts","../../src/components/cumulative-impact/strings.ts","../../src/components/cumulative-impact/index.ts"],"sourcesContent":["import { html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { state } from \"lit/decorators.js\";\n\nexport class AnimatedCounter extends LitElement {\n @property({ type: Number }) finalValue = 0;\n @property({ type: Number }) duration = 1500;\n @property({ type: String }) scrollTarget?: string;\n\n @state() protected counter = 0;\n private intervalId = 0;\n\n connectedCallback() {\n super.connectedCallback();\n const userPrefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (this.duration === 0 || userPrefersReducedMotion) {\n this.counter = this.finalValue;\n } else {\n this.observeScrollTarget();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.unobserveScrollTarget();\n clearInterval(this.intervalId);\n }\n\n private handleCounterAnimateIfInView: IntersectionObserverCallback = (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.animateCounter();\n this.unobserveScrollTarget();\n }\n };\n\n private animateCounter = () => {\n const ANIMATION_FRAME_RATE = 24;\n const MS_PER_FRAME = 1000 / ANIMATION_FRAME_RATE;\n const INCREMENT_RATE_PER_FRAME = MS_PER_FRAME / this.duration;\n const COUNTER_INCREMENT_PER_FRAME = INCREMENT_RATE_PER_FRAME * this.finalValue;\n\n this.intervalId = setInterval(() => {\n const result = this.counter + COUNTER_INCREMENT_PER_FRAME;\n if (result >= this.finalValue) {\n this.counter = this.finalValue;\n clearInterval(this.intervalId);\n return;\n } else {\n this.counter = result;\n }\n }, MS_PER_FRAME);\n };\n\n private observer = new IntersectionObserver(this.handleCounterAnimateIfInView, {\n threshold: 0.1,\n });\n\n private observeScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.observe(target);\n };\n\n private unobserveScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.unobserve(target);\n };\n\n get scrollTargetElement(): this | Element | null {\n if (this.scrollTarget) {\n return document.querySelector(this.scrollTarget);\n } else {\n return this;\n }\n }\n\n render() {\n return html`${Math.ceil(this.counter).toLocaleString()}`;\n }\n}\n\ncustomElements.get(\"animated-counter\") || customElements.define(\"animated-counter\", AnimatedCounter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"animated-counter\": AnimatedCounter;\n }\n}\n","import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize widths of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n */\nexport const syncElementWidths = (elements: Array<HTMLElement | null> | NodeList) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const widthSource = els.sort((a, b) => {\n const widthA = getComputedStyle(a).getPropertyValue(\"width\").replace(\"px\", \"\");\n const widthB = getComputedStyle(b).getPropertyValue(\"width\").replace(\"px\", \"\");\n return parseInt(widthB) - parseInt(widthA);\n })[0];\n\n const syncedWidth = getComputedStyle(widthSource).getPropertyValue(\"width\");\n\n for (const el of els) {\n if (getComputedStyle(el).getPropertyValue(\"width\") !== syncedWidth) {\n el.style[\"width\"] = syncedWidth;\n }\n }\n};\n","export const strings = {\n en: {\n cumulativeImpactTitle: () => `What we've funded`,\n cumulativeImpactDescription: () =>\n \"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day— scroll to check out the goals we're working toward together right now.\",\n },\n fr: {\n cumulativeImpactTitle: () => `Ce que nous avons financé`,\n cumulativeImpactDescription: () =>\n \"Voici l'impact que notre communauté a eu jusqu'à présent en partenariat avec Beam. Notre impact grandit chaque jour : faites défiler pour découvrir les objectifs vers lesquels nous travaillons ensemble en ce moment.\",\n },\n de: {\n cumulativeImpactTitle: () => `Was wir finanziert haben`,\n cumulativeImpactDescription: () =>\n \"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung wächst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten.\",\n },\n es: {\n cumulativeImpactTitle: () => `Lo que hemos financiado`,\n cumulativeImpactDescription: () =>\n \"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociación con Beam. Nuestro impacto crece cada día; desplácese para ver los objetivos por los que estamos trabajando juntos en este momento.\",\n },\n it: {\n cumulativeImpactTitle: () => `Cosa abbiamo finanziato`,\n cumulativeImpactDescription: () =>\n \"Ecco l'impatto che la nostra comunità ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento.\",\n },\n pl: {\n cumulativeImpactTitle: () => `Co sfinansowaliśmy`,\n cumulativeImpactDescription: () =>\n \"Oto wpływ, jaki nasza społeczność wywarła dotychczas we współpracy z Beam. Nasz wpływ rośnie z każdym dniem — przewiń, aby sprawdzić cele, nad którymi obecnie wspólnie pracujemy.\",\n },\n};\n","import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { queryAll } from \"lit/decorators/query-all.js\";\nimport debounce from \"lodash-es/debounce\";\nimport \"../../shared/components/animated-counter\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { getCumulativeImpact } from \"../../api-sdk/v3/routes\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { syncElementWidths } from \"../../shared/sync-element-widths\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { strings } from \"./strings\";\n\ntype RequiredConfig = {\n apiKey: string;\n chainId: TNumericId;\n};\n\ntype IAPIV3CumulativeImpact = Awaited<ReturnType<typeof getCumulativeImpact>>;\n\nconst MAX_COUNTER_ANIMATION_DURATION = 1.5 * 1000;\n\nexport class BeamCumulativeImpact extends LitElement {\n static tagName = \"beam-cumulative-impact\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public chainId?: RequiredConfig[\"chainId\"];\n\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public disableAnimation = false;\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getCumulativeImpactData = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"chainId\"], this)) {\n throw new MissingConfig();\n }\n const res = await getCumulativeImpact({\n baseUrl: this.baseUrl,\n pathParams: {\n chainId: this.chainId,\n },\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n queryParams: {\n version: \"1.0.0\",\n lang: this.configLang,\n draftConfig: this.draftConfig,\n },\n });\n\n return res;\n };\n\n private cumulativeImpactDataController = new AsyncController<typeof this.getCumulativeImpactData>(\n this,\n this.getCumulativeImpactData\n );\n\n @queryAll(\".impact-row-value-container\")\n impactRowRefs!: HTMLElement[];\n resizeElements = debounce(\n () => {\n syncElementWidths(this.impactRowRefs);\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.resizeElements);\n }\n\n async updated(changedProperties: Map<string, unknown>) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"chainId\", \"baseUrl\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (changedProperties.has(prop)) {\n await this.cumulativeImpactDataController.exec();\n break;\n }\n }\n\n this.resizeElements();\n }\n\n render() {\n const { data, error, loading } = this.cumulativeImpactDataController;\n if (loading) {\n return _loading();\n }\n if (error) {\n if (this.debug) {\n return _errorMessage({ error });\n }\n return \"\";\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"Missing data\") });\n }\n return \"\";\n }\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"margin: 10px 0 0 0;\"\n tabindex=\"-1\"\n class=\"options\"\n part=\"options\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n >\n ${this.renderCumulativeImpact(data)}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpact(data: IAPIV3CumulativeImpact) {\n const rawValues = data.impacts ? data.impacts?.map((impact) => impact.value || 0) : [];\n const maxRawValue = Math.max(...rawValues);\n const durations = rawValues.map(\n (val) => (MAX_COUNTER_ANIMATION_DURATION * Math.log(Math.max(val, 1))) / Math.log(maxRawValue)\n );\n return html`\n <div class=\"main\">\n <div class=\"title\" role=\"heading\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].cumulativeImpactDescription()}\n </p>\n <div class=\"impact-list\">\n ${data.impacts?.map((impact: any, idx: number) => {\n return this.renderCumulativeImpactRow({ impact, animationDuration: durations[idx] });\n })}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpactRow({ impact, animationDuration }: { impact: any; animationDuration: number }) {\n const disableAnimation = this.cumulativeImpactDataController.data?.config?.web.disableAnimation;\n const floatingCounterClass = \"impact-row-value-counter impact-row-value-floating-counter\";\n const duration = disableAnimation ? 0 : animationDuration;\n\n const unitDisplay = localizeUserString(this.configLang, impact.unit || \"\");\n const summaryDisplay = localizeUserString(this.configLang, impact.summary || \"\");\n\n /**\n * because we set the width using JavaScript by forcing all impact-row-value-container elements\n * to match the width of the widest sibling, we use a hidden span with the total preloaded to\n * ensure that impact-row-value-container widths do not change as the animation runs.\n */\n return html`\n <div class=\"impact-row\">\n <div class=\"impact-row-value-container\">\n <span class=\"impact-row-value-counter\" style=\"visibility: hidden;\" aria-hidden=\"true\">\n ${impact.value.toLocaleString()}\n </span>\n <animated-counter\n class=\"${floatingCounterClass}\"\n finalValue=${impact.value}\n duration=${duration}\n ></animated-counter>\n </span>\n </div>\n <div class=\"impact-row-description\">${unitDisplay} ${summaryDisplay}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"16px\",\n \"--beam-lineHeight\": \"1\",\n \"--beam-textColor\": \"inherit\",\n // main\n ...defineCustomText(\"--beam-CumulativeImpact-title\", {\n fontSize: \"32px\",\n }),\n ...defineCustomText(\"--beam-CumulativeImpact-description\", {\n marginTop: \"16px\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-impact-list-marginTop\": \"24px\",\n \"--beam-CumulativeImpact-row-marginTop\": \"24px\",\n // row value container\n \"--beam-CumulativeImpact-row-value-container-borderBottomWidth\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-borderBottomColor\": \"currentColor\",\n \"--beam-CumulativeImpact-row-value-container-paddingTop\": \"0\",\n \"--beam-CumulativeImpact-row-value-container-paddingRight\": \"20px\",\n \"--beam-CumulativeImpact-row-value-container-paddingBottom\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-paddingLeft\": \"20px\",\n // row value counter\n ...defineCustomText(\"--beam-CumulativeImpact-row-value-counter\", {\n color: \"currentColor\",\n fontSize: \"24px\",\n fontWeight: \"normal\",\n }),\n // row description\n ...defineCustomText(\"--beam-CumulativeImpact-row-description\", {\n color: \"currentColor\",\n fontSize: \"16px\",\n fontWeight: \"normal\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-row-description-paddingLeft\": \"24px\",\n \"--beam-CumulativeImpact-row-description-paddingRight\": \"24px\",\n \"--beam-CumulativeImpact-row-description-mobile-marginTop\": \"12px\",\n };\n\n const remoteConfig = this.cumulativeImpactDataController.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n font-family: var(--beam-fontFamily, inherit);\n font-style: var(--beam-fontStyle, inherit);\n font-size: var(--beam-fontSize, inherit);\n color: var(--beam-textColor, inherit);\n background-color: var(--beam-backgroundColor, inherit);\n line-height: var(--beam-lineHeight, 1);\n word-break: normal;\n }\n .main {\n text-align: left;\n }\n .title {\n ${useCustomText(\"--beam-CumulativeImpact-title\")}\n text-align: inherit;\n }\n .description {\n ${useCustomText(\"--beam-CumulativeImpact-description\")}\n text-align: inherit;\n }\n .impact-list {\n display: flex;\n flex-direction: column;\n margin-top: var(--beam-CumulativeImpact-impact-list-marginTop);\n }\n .impact-row {\n display: flex;\n align-items: center;\n margin-top: var(--beam-CumulativeImpact-row-marginTop);\n }\n .impact-row-value-container {\n position: relative;\n border-bottom-width: var(--beam-CumulativeImpact-row-value-container-borderBottomWidth);\n border-bottom-color: var(--beam-CumulativeImpact-row-value-container-borderBottomColor);\n border-bottom-style: solid;\n padding-top: var(--beam-CumulativeImpact-row-value-container-paddingTop);\n padding-right: var(--beam-CumulativeImpact-row-value-container-paddingRight);\n padding-bottom: var(--beam-CumulativeImpact-row-value-container-paddingBottom);\n padding-left: var(--beam-CumulativeImpact-row-value-container-paddingLeft);\n text-align: center;\n flex-shrink: 0;\n }\n .impact-row-value-counter {\n ${useCustomText(\"--beam-CumulativeImpact-row-value-counter\")}\n }\n .impact-row-value-floating-counter {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n .impact-row-description {\n ${useCustomText(\"--beam-CumulativeImpact-row-description\")}\n padding-left: var(--beam-CumulativeImpact-row-description-paddingLeft);\n padding-right: var(--beam-CumulativeImpact-row-description-paddingRight);\n /* match padding of value of counter for proper centering */\n padding-bottom: var(--beam-CumulativeImpact-row-value-paddingBottom);\n text-align: inherit;\n flex-grow: 1;\n }\n @media (max-width: 500px) {\n .main {\n text-align: center;\n }\n .impact-row {\n flex-direction: column;\n }\n .impact-row-description {\n margin-top: var(--beam-CumulativeImpact-row-description-mobile-marginTop);\n padding-bottom: 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamCumulativeImpact);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-cumulative-impact\": BeamCumulativeImpact;\n }\n}\n"],"names":["AnimatedCounter","LitElement","entries","entry","MS_PER_FRAME","COUNTER_INCREMENT_PER_FRAME","result","target","userPrefersReducedMotion","html","__decorateClass","property","state","syncElementWidths","elements","els","isAllHtmlElements","widthSource","a","b","widthA","widthB","syncedWidth","el","strings","f","h","r","m","i","e","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","SUPPORTED_LANGUAGES","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","unitDisplay","summaryDisplay","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cumulative-impact.esm.js","sources":["../../src/shared/components/animated-counter/index.ts","../../src/shared/sync-element-widths.ts","../../src/components/cumulative-impact/strings.ts","../../src/components/cumulative-impact/index.ts"],"sourcesContent":["import { html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { state } from \"lit/decorators.js\";\n\nexport class AnimatedCounter extends LitElement {\n @property({ type: Number }) finalValue = 0;\n @property({ type: Number }) duration = 1500;\n @property({ type: String }) scrollTarget?: string;\n\n @state() protected counter = 0;\n private intervalId = 0;\n\n connectedCallback() {\n super.connectedCallback();\n const userPrefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (this.duration === 0 || userPrefersReducedMotion) {\n this.counter = this.finalValue;\n } else {\n this.observeScrollTarget();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.unobserveScrollTarget();\n clearInterval(this.intervalId);\n }\n\n private handleCounterAnimateIfInView: IntersectionObserverCallback = (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.animateCounter();\n this.unobserveScrollTarget();\n }\n };\n\n private animateCounter = () => {\n const ANIMATION_FRAME_RATE = 24;\n const MS_PER_FRAME = 1000 / ANIMATION_FRAME_RATE;\n const INCREMENT_RATE_PER_FRAME = MS_PER_FRAME / this.duration;\n const COUNTER_INCREMENT_PER_FRAME = INCREMENT_RATE_PER_FRAME * this.finalValue;\n\n this.intervalId = setInterval(() => {\n const result = this.counter + COUNTER_INCREMENT_PER_FRAME;\n if (result >= this.finalValue) {\n this.counter = this.finalValue;\n clearInterval(this.intervalId);\n return;\n } else {\n this.counter = result;\n }\n }, MS_PER_FRAME);\n };\n\n private observer = new IntersectionObserver(this.handleCounterAnimateIfInView, {\n threshold: 0.1,\n });\n\n private observeScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.observe(target);\n };\n\n private unobserveScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.unobserve(target);\n };\n\n get scrollTargetElement(): this | Element | null {\n if (this.scrollTarget) {\n return document.querySelector(this.scrollTarget);\n } else {\n return this;\n }\n }\n\n render() {\n return html`${Math.ceil(this.counter).toLocaleString()}`;\n }\n}\n\ncustomElements.get(\"animated-counter\") || customElements.define(\"animated-counter\", AnimatedCounter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"animated-counter\": AnimatedCounter;\n }\n}\n","import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize widths of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n */\nexport const syncElementWidths = (elements: Array<HTMLElement | null> | NodeList) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const widthSource = els.sort((a, b) => {\n const widthA = getComputedStyle(a).getPropertyValue(\"width\").replace(\"px\", \"\");\n const widthB = getComputedStyle(b).getPropertyValue(\"width\").replace(\"px\", \"\");\n return parseInt(widthB) - parseInt(widthA);\n })[0];\n\n const syncedWidth = getComputedStyle(widthSource).getPropertyValue(\"width\");\n\n for (const el of els) {\n if (getComputedStyle(el).getPropertyValue(\"width\") !== syncedWidth) {\n el.style[\"width\"] = syncedWidth;\n }\n }\n};\n","export const strings = {\n en: {\n cumulativeImpactTitle: () => `What we've funded`,\n cumulativeImpactDescription: () =>\n \"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day— scroll to check out the goals we're working toward together right now.\",\n },\n fr: {\n cumulativeImpactTitle: () => `Ce que nous avons financé`,\n cumulativeImpactDescription: () =>\n \"Voici l'impact que notre communauté a eu jusqu'à présent en partenariat avec Beam. Notre impact grandit chaque jour : faites défiler pour découvrir les objectifs vers lesquels nous travaillons ensemble en ce moment.\",\n },\n de: {\n cumulativeImpactTitle: () => `Was wir finanziert haben`,\n cumulativeImpactDescription: () =>\n \"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung wächst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten.\",\n },\n es: {\n cumulativeImpactTitle: () => `Lo que hemos financiado`,\n cumulativeImpactDescription: () =>\n \"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociación con Beam. Nuestro impacto crece cada día; desplácese para ver los objetivos por los que estamos trabajando juntos en este momento.\",\n },\n it: {\n cumulativeImpactTitle: () => `Cosa abbiamo finanziato`,\n cumulativeImpactDescription: () =>\n \"Ecco l'impatto che la nostra comunità ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento.\",\n },\n pl: {\n cumulativeImpactTitle: () => `Co sfinansowaliśmy`,\n cumulativeImpactDescription: () =>\n \"Oto wpływ, jaki nasza społeczność wywarła dotychczas we współpracy z Beam. Nasz wpływ rośnie z każdym dniem — przewiń, aby sprawdzić cele, nad którymi obecnie wspólnie pracujemy.\",\n },\n};\n","import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { queryAll } from \"lit/decorators/query-all.js\";\nimport debounce from \"lodash-es/debounce\";\nimport \"../../shared/components/animated-counter\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { getCumulativeImpact } from \"../../api-sdk/v3/routes\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { syncElementWidths } from \"../../shared/sync-element-widths\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { strings } from \"./strings\";\n\ntype RequiredConfig = {\n apiKey: string;\n chainId: TNumericId;\n};\n\ntype IAPIV3CumulativeImpact = Awaited<ReturnType<typeof getCumulativeImpact>>;\n\nconst MAX_COUNTER_ANIMATION_DURATION = 1.5 * 1000;\n\nexport class BeamCumulativeImpact extends LitElement {\n static tagName = \"beam-cumulative-impact\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public chainId?: RequiredConfig[\"chainId\"];\n\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public disableAnimation = false;\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getCumulativeImpactData = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"chainId\"], this)) {\n throw new MissingConfig();\n }\n const res = await getCumulativeImpact({\n baseUrl: this.baseUrl,\n pathParams: {\n chainId: this.chainId,\n },\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n queryParams: {\n version: \"1.0.0\",\n lang: this.configLang,\n draftConfig: this.draftConfig,\n },\n });\n\n return res;\n };\n\n private cumulativeImpactDataController = new AsyncController<typeof this.getCumulativeImpactData>(\n this,\n this.getCumulativeImpactData\n );\n\n @queryAll(\".impact-row-value-container\")\n impactRowRefs!: HTMLElement[];\n resizeElements = debounce(\n () => {\n syncElementWidths(this.impactRowRefs);\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.resizeElements);\n }\n\n async updated(changedProperties: Map<string, unknown>) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"chainId\", \"baseUrl\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (changedProperties.has(prop)) {\n await this.cumulativeImpactDataController.exec();\n break;\n }\n }\n\n this.resizeElements();\n }\n\n render() {\n const { data, error, loading } = this.cumulativeImpactDataController;\n if (loading) {\n return _loading();\n }\n if (error) {\n if (this.debug) {\n return _errorMessage({ error });\n }\n return \"\";\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"Missing data\") });\n }\n return \"\";\n }\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"margin: 10px 0 0 0;\"\n tabindex=\"-1\"\n class=\"options\"\n part=\"options\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n >\n ${this.renderCumulativeImpact(data)}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpact(data: IAPIV3CumulativeImpact) {\n const rawValues = data.impacts ? data.impacts?.map((impact) => impact.value || 0) : [];\n const maxRawValue = Math.max(...rawValues);\n const durations = rawValues.map(\n (val) => (MAX_COUNTER_ANIMATION_DURATION * Math.log(Math.max(val, 1))) / Math.log(maxRawValue)\n );\n return html`\n <div class=\"main\">\n <div class=\"title\" role=\"heading\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].cumulativeImpactDescription()}\n </p>\n <div class=\"impact-list\">\n ${data.impacts?.map((impact: any, idx: number) => {\n return this.renderCumulativeImpactRow({ impact, animationDuration: durations[idx] });\n })}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpactRow({ impact, animationDuration }: { impact: any; animationDuration: number }) {\n const disableAnimation = this.cumulativeImpactDataController.data?.config?.web.disableAnimation;\n const floatingCounterClass = \"impact-row-value-counter impact-row-value-floating-counter\";\n const duration = disableAnimation ? 0 : animationDuration;\n\n const unitDisplay = localizeUserString(this.configLang, impact.unit || \"\");\n const summaryDisplay = localizeUserString(this.configLang, impact.summary || \"\");\n\n /**\n * because we set the width using JavaScript by forcing all impact-row-value-container elements\n * to match the width of the widest sibling, we use a hidden span with the total preloaded to\n * ensure that impact-row-value-container widths do not change as the animation runs.\n */\n return html`\n <div class=\"impact-row\">\n <div class=\"impact-row-value-container\">\n <span class=\"impact-row-value-counter\" style=\"visibility: hidden;\" aria-hidden=\"true\">\n ${impact.value.toLocaleString()}\n </span>\n <animated-counter\n class=\"${floatingCounterClass}\"\n finalValue=${impact.value}\n duration=${duration}\n ></animated-counter>\n </span>\n </div>\n <div class=\"impact-row-description\">${unitDisplay} ${summaryDisplay}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"16px\",\n \"--beam-lineHeight\": \"1\",\n \"--beam-textColor\": \"inherit\",\n // main\n ...defineCustomText(\"--beam-CumulativeImpact-title\", {\n fontSize: \"32px\",\n }),\n ...defineCustomText(\"--beam-CumulativeImpact-description\", {\n marginTop: \"16px\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-impact-list-marginTop\": \"24px\",\n \"--beam-CumulativeImpact-row-marginTop\": \"24px\",\n // row value container\n \"--beam-CumulativeImpact-row-value-container-borderBottomWidth\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-borderBottomColor\": \"currentColor\",\n \"--beam-CumulativeImpact-row-value-container-paddingTop\": \"0\",\n \"--beam-CumulativeImpact-row-value-container-paddingRight\": \"20px\",\n \"--beam-CumulativeImpact-row-value-container-paddingBottom\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-paddingLeft\": \"20px\",\n // row value counter\n ...defineCustomText(\"--beam-CumulativeImpact-row-value-counter\", {\n color: \"currentColor\",\n fontSize: \"24px\",\n fontWeight: \"normal\",\n }),\n // row description\n ...defineCustomText(\"--beam-CumulativeImpact-row-description\", {\n color: \"currentColor\",\n fontSize: \"16px\",\n fontWeight: \"normal\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-row-description-paddingLeft\": \"24px\",\n \"--beam-CumulativeImpact-row-description-paddingRight\": \"24px\",\n \"--beam-CumulativeImpact-row-description-mobile-marginTop\": \"12px\",\n };\n\n const remoteConfig = this.cumulativeImpactDataController.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n font-family: var(--beam-fontFamily, inherit);\n font-style: var(--beam-fontStyle, inherit);\n font-size: var(--beam-fontSize, inherit);\n color: var(--beam-textColor, inherit);\n background-color: var(--beam-backgroundColor, inherit);\n line-height: var(--beam-lineHeight, 1);\n word-break: normal;\n }\n .main {\n text-align: left;\n }\n .title {\n ${useCustomText(\"--beam-CumulativeImpact-title\")}\n text-align: inherit;\n }\n .description {\n ${useCustomText(\"--beam-CumulativeImpact-description\")}\n text-align: inherit;\n }\n .impact-list {\n display: flex;\n flex-direction: column;\n margin-top: var(--beam-CumulativeImpact-impact-list-marginTop);\n }\n .impact-row {\n display: flex;\n align-items: center;\n margin-top: var(--beam-CumulativeImpact-row-marginTop);\n }\n .impact-row-value-container {\n position: relative;\n border-bottom-width: var(--beam-CumulativeImpact-row-value-container-borderBottomWidth);\n border-bottom-color: var(--beam-CumulativeImpact-row-value-container-borderBottomColor);\n border-bottom-style: solid;\n padding-top: var(--beam-CumulativeImpact-row-value-container-paddingTop);\n padding-right: var(--beam-CumulativeImpact-row-value-container-paddingRight);\n padding-bottom: var(--beam-CumulativeImpact-row-value-container-paddingBottom);\n padding-left: var(--beam-CumulativeImpact-row-value-container-paddingLeft);\n text-align: center;\n flex-shrink: 0;\n }\n .impact-row-value-counter {\n ${useCustomText(\"--beam-CumulativeImpact-row-value-counter\")}\n }\n .impact-row-value-floating-counter {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n .impact-row-description {\n ${useCustomText(\"--beam-CumulativeImpact-row-description\")}\n padding-left: var(--beam-CumulativeImpact-row-description-paddingLeft);\n padding-right: var(--beam-CumulativeImpact-row-description-paddingRight);\n /* match padding of value of counter for proper centering */\n padding-bottom: var(--beam-CumulativeImpact-row-value-paddingBottom);\n text-align: inherit;\n flex-grow: 1;\n }\n @media (max-width: 500px) {\n .main {\n text-align: center;\n }\n .impact-row {\n flex-direction: column;\n }\n .impact-row-description {\n margin-top: var(--beam-CumulativeImpact-row-description-mobile-marginTop);\n padding-bottom: 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamCumulativeImpact);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-cumulative-impact\": BeamCumulativeImpact;\n }\n}\n"],"names":["AnimatedCounter","LitElement","entries","entry","MS_PER_FRAME","COUNTER_INCREMENT_PER_FRAME","result","target","userPrefersReducedMotion","html","__decorateClass","property","state","syncElementWidths","elements","els","isAllHtmlElements","widthSource","a","b","widthA","widthB","syncedWidth","el","strings","f","h","r","m","i","e","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","SUPPORTED_LANGUAGES","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","unitDisplay","summaryDisplay","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as C,h as b,y as u,g as c,f as y,p as I}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as x}from"../chunks/lodash-P8OIs-at.esm.js";import{c as T,d as S,e as E}from"../chunks/enforce-config-ZyPq_4CF.esm.js";import{u as p,A as z,_ as f,i as d,d as v,a as B}from"../chunks/localize-m-_ESmpk.esm.js";import{D,
|
|
1
|
+
import{t as C,h as b,y as u,g as c,f as y,p as I}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as x}from"../chunks/lodash-P8OIs-at.esm.js";import{c as T,d as S,e as E}from"../chunks/enforce-config-ZyPq_4CF.esm.js";import{u as p,A as z,_ as f,i as d,d as v,a as B}from"../chunks/localize-m-_ESmpk.esm.js";import{D,k,S as L}from"../chunks/routes-DWNnzqXL.esm.js";import{B as $}from"../chunks/beam-errors-P-Lu07Ce.esm.js";import{_ as V}from"../chunks/loading-template-t4fFsYtr.esm.js";import{i as A}from"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../utils/logger.js";var j=Object.defineProperty,R=Object.getOwnPropertyDescriptor,h=(s,e,t,a)=>{for(var i=a>1?void 0:a?R(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&j(e,t,i),i};class m extends b{constructor(){super(...arguments),this.finalValue=0,this.duration=1500,this.counter=0,this.intervalId=0,this.handleCounterAnimateIfInView=e=>{e.some(t=>t.isIntersecting)&&(this.animateCounter(),this.unobserveScrollTarget())},this.animateCounter=()=>{const e=41.666666666666664,t=e/this.duration*this.finalValue;this.intervalId=setInterval(()=>{const a=this.counter+t;if(a>=this.finalValue){this.counter=this.finalValue,clearInterval(this.intervalId);return}else this.counter=a},e)},this.observer=new IntersectionObserver(this.handleCounterAnimateIfInView,{threshold:.1}),this.observeScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.observe(e)},this.unobserveScrollTarget=()=>{const e=this.scrollTargetElement;e&&this.observer.unobserve(e)}}connectedCallback(){super.connectedCallback();const e=window.matchMedia("(prefers-reduced-motion: reduce)").matches;this.duration===0||e?this.counter=this.finalValue:this.observeScrollTarget()}disconnectedCallback(){super.disconnectedCallback(),this.unobserveScrollTarget(),clearInterval(this.intervalId)}get scrollTargetElement(){return this.scrollTarget?document.querySelector(this.scrollTarget):this}render(){return u`${Math.ceil(this.counter).toLocaleString()}`}}h([c({type:Number})],m.prototype,"finalValue",2),h([c({type:Number})],m.prototype,"duration",2),h([c({type:String})],m.prototype,"scrollTarget",2),h([C()],m.prototype,"counter",2),customElements.get("animated-counter")||customElements.define("animated-counter",m);const O=s=>{const e=s instanceof NodeList?Array.from(s):s;if(e.length===0||!A(e))return;const t=e.sort((i,o)=>{const r=getComputedStyle(i).getPropertyValue("width").replace("px",""),g=getComputedStyle(o).getPropertyValue("width").replace("px","");return parseInt(g)-parseInt(r)})[0],a=getComputedStyle(t).getPropertyValue("width");for(const i of e)getComputedStyle(i).getPropertyValue("width")!==a&&(i.style.width=a)},w={en:{cumulativeImpactTitle:()=>"What we've funded",cumulativeImpactDescription:()=>"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day\u2014 scroll to check out the goals we're working toward together right now."},fr:{cumulativeImpactTitle:()=>"Ce que nous avons financ\xE9",cumulativeImpactDescription:()=>"Voici l'impact que notre communaut\xE9 a eu jusqu'\xE0 pr\xE9sent en partenariat avec Beam. Notre impact grandit chaque jour : faites d\xE9filer pour d\xE9couvrir les objectifs vers lesquels nous travaillons ensemble en ce moment."},de:{cumulativeImpactTitle:()=>"Was wir finanziert haben",cumulativeImpactDescription:()=>"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung w\xE4chst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten."},es:{cumulativeImpactTitle:()=>"Lo que hemos financiado",cumulativeImpactDescription:()=>"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociaci\xF3n con Beam. Nuestro impacto crece cada d\xEDa; despl\xE1cese para ver los objetivos por los que estamos trabajando juntos en este momento."},it:{cumulativeImpactTitle:()=>"Cosa abbiamo finanziato",cumulativeImpactDescription:()=>"Ecco l'impatto che la nostra comunit\xE0 ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento."},pl:{cumulativeImpactTitle:()=>"Co sfinansowali\u015Bmy",cumulativeImpactDescription:()=>"Oto wp\u0142yw, jaki nasza spo\u0142eczno\u015B\u0107 wywar\u0142a dotychczas we wsp\xF3\u0142pracy z Beam. Nasz wp\u0142yw ro\u015Bnie z ka\u017Cdym dniem \u2014 przewi\u0144, aby sprawdzi\u0107 cele, nad kt\xF3rymi obecnie wsp\xF3lnie pracujemy."}};var P=Object.defineProperty,q=Object.getOwnPropertyDescriptor,l=(s,e,t,a)=>{for(var i=a>1?void 0:a?q(e,t):e,o=s.length-1,r;o>=0;o--)(r=s[o])&&(i=(a?r(e,t,i):r(i))||i);return a&&i&&P(e,t,i),i};const U=1.5*1e3;class n extends b{constructor(){super(...arguments),this.baseUrl=D,this.lang="en",this.disableAnimation=!1,this.debug=!1,this.draftConfig=!1,this.getCumulativeImpactData=async()=>(E(["apiKey","chainId"],this),await k({baseUrl:this.baseUrl,pathParams:{chainId:this.chainId},headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{version:"1.0.0",lang:this.configLang,draftConfig:this.draftConfig}})),this.cumulativeImpactDataController=new z(this,this.getCumulativeImpactData),this.resizeElements=x(()=>{O(this.impactRowRefs)},50,{maxWait:50,leading:!0})}get configLang(){return L[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(e){const t=["chainId","baseUrl","lang"];for(const a of t)if(e.has(a)){await this.cumulativeImpactDataController.exec();break}this.resizeElements()}render(){const{data:e,error:t,loading:a}=this.cumulativeImpactDataController;return a?V():t?this.debug?f({error:t}):"":e==null?this.debug?f({error:new $("Missing data")}):"":u`
|
|
2
2
|
<style>
|
|
3
3
|
:host {
|
|
4
4
|
${this.cssVariables.toCSS()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cumulative-impact.js","sources":["../../src/shared/components/animated-counter/index.ts","../../src/shared/sync-element-widths.ts","../../src/components/cumulative-impact/strings.ts","../../src/components/cumulative-impact/index.ts"],"sourcesContent":["import { html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { state } from \"lit/decorators.js\";\n\nexport class AnimatedCounter extends LitElement {\n @property({ type: Number }) finalValue = 0;\n @property({ type: Number }) duration = 1500;\n @property({ type: String }) scrollTarget?: string;\n\n @state() protected counter = 0;\n private intervalId = 0;\n\n connectedCallback() {\n super.connectedCallback();\n const userPrefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (this.duration === 0 || userPrefersReducedMotion) {\n this.counter = this.finalValue;\n } else {\n this.observeScrollTarget();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.unobserveScrollTarget();\n clearInterval(this.intervalId);\n }\n\n private handleCounterAnimateIfInView: IntersectionObserverCallback = (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.animateCounter();\n this.unobserveScrollTarget();\n }\n };\n\n private animateCounter = () => {\n const ANIMATION_FRAME_RATE = 24;\n const MS_PER_FRAME = 1000 / ANIMATION_FRAME_RATE;\n const INCREMENT_RATE_PER_FRAME = MS_PER_FRAME / this.duration;\n const COUNTER_INCREMENT_PER_FRAME = INCREMENT_RATE_PER_FRAME * this.finalValue;\n\n this.intervalId = setInterval(() => {\n const result = this.counter + COUNTER_INCREMENT_PER_FRAME;\n if (result >= this.finalValue) {\n this.counter = this.finalValue;\n clearInterval(this.intervalId);\n return;\n } else {\n this.counter = result;\n }\n }, MS_PER_FRAME);\n };\n\n private observer = new IntersectionObserver(this.handleCounterAnimateIfInView, {\n threshold: 0.1,\n });\n\n private observeScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.observe(target);\n };\n\n private unobserveScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.unobserve(target);\n };\n\n get scrollTargetElement(): this | Element | null {\n if (this.scrollTarget) {\n return document.querySelector(this.scrollTarget);\n } else {\n return this;\n }\n }\n\n render() {\n return html`${Math.ceil(this.counter).toLocaleString()}`;\n }\n}\n\ncustomElements.get(\"animated-counter\") || customElements.define(\"animated-counter\", AnimatedCounter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"animated-counter\": AnimatedCounter;\n }\n}\n","import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize widths of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n */\nexport const syncElementWidths = (elements: Array<HTMLElement | null> | NodeList) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const widthSource = els.sort((a, b) => {\n const widthA = getComputedStyle(a).getPropertyValue(\"width\").replace(\"px\", \"\");\n const widthB = getComputedStyle(b).getPropertyValue(\"width\").replace(\"px\", \"\");\n return parseInt(widthB) - parseInt(widthA);\n })[0];\n\n const syncedWidth = getComputedStyle(widthSource).getPropertyValue(\"width\");\n\n for (const el of els) {\n if (getComputedStyle(el).getPropertyValue(\"width\") !== syncedWidth) {\n el.style[\"width\"] = syncedWidth;\n }\n }\n};\n","export const strings = {\n en: {\n cumulativeImpactTitle: () => `What we've funded`,\n cumulativeImpactDescription: () =>\n \"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day— scroll to check out the goals we're working toward together right now.\",\n },\n fr: {\n cumulativeImpactTitle: () => `Ce que nous avons financé`,\n cumulativeImpactDescription: () =>\n \"Voici l'impact que notre communauté a eu jusqu'à présent en partenariat avec Beam. Notre impact grandit chaque jour : faites défiler pour découvrir les objectifs vers lesquels nous travaillons ensemble en ce moment.\",\n },\n de: {\n cumulativeImpactTitle: () => `Was wir finanziert haben`,\n cumulativeImpactDescription: () =>\n \"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung wächst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten.\",\n },\n es: {\n cumulativeImpactTitle: () => `Lo que hemos financiado`,\n cumulativeImpactDescription: () =>\n \"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociación con Beam. Nuestro impacto crece cada día; desplácese para ver los objetivos por los que estamos trabajando juntos en este momento.\",\n },\n it: {\n cumulativeImpactTitle: () => `Cosa abbiamo finanziato`,\n cumulativeImpactDescription: () =>\n \"Ecco l'impatto che la nostra comunità ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento.\",\n },\n pl: {\n cumulativeImpactTitle: () => `Co sfinansowaliśmy`,\n cumulativeImpactDescription: () =>\n \"Oto wpływ, jaki nasza społeczność wywarła dotychczas we współpracy z Beam. Nasz wpływ rośnie z każdym dniem — przewiń, aby sprawdzić cele, nad którymi obecnie wspólnie pracujemy.\",\n },\n};\n","import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { queryAll } from \"lit/decorators/query-all.js\";\nimport debounce from \"lodash-es/debounce\";\nimport \"../../shared/components/animated-counter\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { getCumulativeImpact } from \"../../api-sdk/v3/routes\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { syncElementWidths } from \"../../shared/sync-element-widths\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { strings } from \"./strings\";\n\ntype RequiredConfig = {\n apiKey: string;\n chainId: TNumericId;\n};\n\ntype IAPIV3CumulativeImpact = Awaited<ReturnType<typeof getCumulativeImpact>>;\n\nconst MAX_COUNTER_ANIMATION_DURATION = 1.5 * 1000;\n\nexport class BeamCumulativeImpact extends LitElement {\n static tagName = \"beam-cumulative-impact\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public chainId?: RequiredConfig[\"chainId\"];\n\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public disableAnimation = false;\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getCumulativeImpactData = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"chainId\"], this)) {\n throw new MissingConfig();\n }\n const res = await getCumulativeImpact({\n baseUrl: this.baseUrl,\n pathParams: {\n chainId: this.chainId,\n },\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n queryParams: {\n version: \"1.0.0\",\n lang: this.configLang,\n draftConfig: this.draftConfig,\n },\n });\n\n return res;\n };\n\n private cumulativeImpactDataController = new AsyncController<typeof this.getCumulativeImpactData>(\n this,\n this.getCumulativeImpactData\n );\n\n @queryAll(\".impact-row-value-container\")\n impactRowRefs!: HTMLElement[];\n resizeElements = debounce(\n () => {\n syncElementWidths(this.impactRowRefs);\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.resizeElements);\n }\n\n async updated(changedProperties: Map<string, unknown>) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"chainId\", \"baseUrl\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (changedProperties.has(prop)) {\n await this.cumulativeImpactDataController.exec();\n break;\n }\n }\n\n this.resizeElements();\n }\n\n render() {\n const { data, error, loading } = this.cumulativeImpactDataController;\n if (loading) {\n return _loading();\n }\n if (error) {\n if (this.debug) {\n return _errorMessage({ error });\n }\n return \"\";\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"Missing data\") });\n }\n return \"\";\n }\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"margin: 10px 0 0 0;\"\n tabindex=\"-1\"\n class=\"options\"\n part=\"options\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n >\n ${this.renderCumulativeImpact(data)}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpact(data: IAPIV3CumulativeImpact) {\n const rawValues = data.impacts ? data.impacts?.map((impact) => impact.value || 0) : [];\n const maxRawValue = Math.max(...rawValues);\n const durations = rawValues.map(\n (val) => (MAX_COUNTER_ANIMATION_DURATION * Math.log(Math.max(val, 1))) / Math.log(maxRawValue)\n );\n return html`\n <div class=\"main\">\n <div class=\"title\" role=\"heading\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].cumulativeImpactDescription()}\n </p>\n <div class=\"impact-list\">\n ${data.impacts?.map((impact: any, idx: number) => {\n return this.renderCumulativeImpactRow({ impact, animationDuration: durations[idx] });\n })}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpactRow({ impact, animationDuration }: { impact: any; animationDuration: number }) {\n const disableAnimation = this.cumulativeImpactDataController.data?.config?.web.disableAnimation;\n const floatingCounterClass = \"impact-row-value-counter impact-row-value-floating-counter\";\n const duration = disableAnimation ? 0 : animationDuration;\n\n const unitDisplay = localizeUserString(this.configLang, impact.unit || \"\");\n const summaryDisplay = localizeUserString(this.configLang, impact.summary || \"\");\n\n /**\n * because we set the width using JavaScript by forcing all impact-row-value-container elements\n * to match the width of the widest sibling, we use a hidden span with the total preloaded to\n * ensure that impact-row-value-container widths do not change as the animation runs.\n */\n return html`\n <div class=\"impact-row\">\n <div class=\"impact-row-value-container\">\n <span class=\"impact-row-value-counter\" style=\"visibility: hidden;\" aria-hidden=\"true\">\n ${impact.value.toLocaleString()}\n </span>\n <animated-counter\n class=\"${floatingCounterClass}\"\n finalValue=${impact.value}\n duration=${duration}\n ></animated-counter>\n </span>\n </div>\n <div class=\"impact-row-description\">${unitDisplay} ${summaryDisplay}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"16px\",\n \"--beam-lineHeight\": \"1\",\n \"--beam-textColor\": \"inherit\",\n // main\n ...defineCustomText(\"--beam-CumulativeImpact-title\", {\n fontSize: \"32px\",\n }),\n ...defineCustomText(\"--beam-CumulativeImpact-description\", {\n marginTop: \"16px\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-impact-list-marginTop\": \"24px\",\n \"--beam-CumulativeImpact-row-marginTop\": \"24px\",\n // row value container\n \"--beam-CumulativeImpact-row-value-container-borderBottomWidth\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-borderBottomColor\": \"currentColor\",\n \"--beam-CumulativeImpact-row-value-container-paddingTop\": \"0\",\n \"--beam-CumulativeImpact-row-value-container-paddingRight\": \"20px\",\n \"--beam-CumulativeImpact-row-value-container-paddingBottom\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-paddingLeft\": \"20px\",\n // row value counter\n ...defineCustomText(\"--beam-CumulativeImpact-row-value-counter\", {\n color: \"currentColor\",\n fontSize: \"24px\",\n fontWeight: \"normal\",\n }),\n // row description\n ...defineCustomText(\"--beam-CumulativeImpact-row-description\", {\n color: \"currentColor\",\n fontSize: \"16px\",\n fontWeight: \"normal\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-row-description-paddingLeft\": \"24px\",\n \"--beam-CumulativeImpact-row-description-paddingRight\": \"24px\",\n \"--beam-CumulativeImpact-row-description-mobile-marginTop\": \"12px\",\n };\n\n const remoteConfig = this.cumulativeImpactDataController.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n font-family: var(--beam-fontFamily, inherit);\n font-style: var(--beam-fontStyle, inherit);\n font-size: var(--beam-fontSize, inherit);\n color: var(--beam-textColor, inherit);\n background-color: var(--beam-backgroundColor, inherit);\n line-height: var(--beam-lineHeight, 1);\n word-break: normal;\n }\n .main {\n text-align: left;\n }\n .title {\n ${useCustomText(\"--beam-CumulativeImpact-title\")}\n text-align: inherit;\n }\n .description {\n ${useCustomText(\"--beam-CumulativeImpact-description\")}\n text-align: inherit;\n }\n .impact-list {\n display: flex;\n flex-direction: column;\n margin-top: var(--beam-CumulativeImpact-impact-list-marginTop);\n }\n .impact-row {\n display: flex;\n align-items: center;\n margin-top: var(--beam-CumulativeImpact-row-marginTop);\n }\n .impact-row-value-container {\n position: relative;\n border-bottom-width: var(--beam-CumulativeImpact-row-value-container-borderBottomWidth);\n border-bottom-color: var(--beam-CumulativeImpact-row-value-container-borderBottomColor);\n border-bottom-style: solid;\n padding-top: var(--beam-CumulativeImpact-row-value-container-paddingTop);\n padding-right: var(--beam-CumulativeImpact-row-value-container-paddingRight);\n padding-bottom: var(--beam-CumulativeImpact-row-value-container-paddingBottom);\n padding-left: var(--beam-CumulativeImpact-row-value-container-paddingLeft);\n text-align: center;\n flex-shrink: 0;\n }\n .impact-row-value-counter {\n ${useCustomText(\"--beam-CumulativeImpact-row-value-counter\")}\n }\n .impact-row-value-floating-counter {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n .impact-row-description {\n ${useCustomText(\"--beam-CumulativeImpact-row-description\")}\n padding-left: var(--beam-CumulativeImpact-row-description-paddingLeft);\n padding-right: var(--beam-CumulativeImpact-row-description-paddingRight);\n /* match padding of value of counter for proper centering */\n padding-bottom: var(--beam-CumulativeImpact-row-value-paddingBottom);\n text-align: inherit;\n flex-grow: 1;\n }\n @media (max-width: 500px) {\n .main {\n text-align: center;\n }\n .impact-row {\n flex-direction: column;\n }\n .impact-row-description {\n margin-top: var(--beam-CumulativeImpact-row-description-mobile-marginTop);\n padding-bottom: 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamCumulativeImpact);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-cumulative-impact\": BeamCumulativeImpact;\n }\n}\n"],"names":["AnimatedCounter","LitElement","entries","entry","MS_PER_FRAME","COUNTER_INCREMENT_PER_FRAME","result","target","userPrefersReducedMotion","html","__decorateClass","property","state","syncElementWidths","elements","els","isAllHtmlElements","widthSource","a","b","widthA","widthB","syncedWidth","el","strings","f","h","r","m","i","e","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","SUPPORTED_LANGUAGES","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","unitDisplay","summaryDisplay","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"0wBAIaA,UAAwBC,CAAW,CAAzC,aAAA,CAAA,MAAA,GAAA,SAAA,EACuB,KAAa,WAAA,EACb,KAAW,SAAA,KAG9B,KAAU,QAAU,EAC7B,KAAQ,WAAa,EAkBrB,KAAQ,6BAA8DC,GAAY,CAC5EA,EAAQ,KAAMC,GAAUA,EAAM,cAAc,IAC9C,KAAK,eAAe,EACpB,KAAK,sBAAA,EAET,EAEA,KAAQ,eAAiB,IAAM,CAE7B,MAAMC,EAAe,mBAEfC,EAD2BD,EAAe,KAAK,SACU,KAAK,WAEpE,KAAK,WAAa,YAAY,IAAM,CAClC,MAAME,EAAS,KAAK,QAAUD,EAC9B,GAAIC,GAAU,KAAK,WAAY,CAC7B,KAAK,QAAU,KAAK,WACpB,cAAc,KAAK,UAAU,EAC7B,MACF,MACE,KAAK,QAAUA,CAEnB,EAAGF,CAAY,CACjB,EAEA,KAAQ,SAAW,IAAI,qBAAqB,KAAK,6BAA8B,CAC7E,UAAW,EACb,CAAC,EAED,KAAQ,oBAAsB,IAAM,CAClC,MAAMG,EAAS,KAAK,oBACpBA,GAAU,KAAK,SAAS,QAAQA,CAAM,CACxC,EAEA,KAAQ,sBAAwB,IAAM,CACpC,MAAMA,EAAS,KAAK,oBACpBA,GAAU,KAAK,SAAS,UAAUA,CAAM,CAC1C,CArDA,CAAA,mBAAoB,CAClB,MAAM,oBACN,MAAMC,EAA2B,OAAO,WAAW,kCAAkC,EAAE,QACnF,KAAK,WAAa,GAAKA,EACzB,KAAK,QAAU,KAAK,WAEpB,KAAK,oBAAoB,CAE7B,CAEA,sBAAuB,CACrB,MAAM,qBAAqB,EAC3B,KAAK,sBACL,EAAA,cAAc,KAAK,UAAU,CAC/B,CAyCA,IAAI,qBAA6C,CAC/C,OAAI,KAAK,aACA,SAAS,cAAc,KAAK,YAAY,EAExC,IAEX,CAEA,QAAS,CACP,OAAOC,IAAO,KAAK,KAAK,KAAK,OAAO,EAAE,eAAe,CAAC,EACxD,CACF,CAzE8BC,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EADfX,EACiB,UAAA,aAAA,CAAA,EACAU,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAFf,EAAAX,EAEiB,UACAU,WAAAA,CAAAA,EAAAA,EAAA,CAA3BC,EAAS,CAAE,KAAM,MAAO,CAAC,CAHf,EAAAX,EAGiB,UAETU,eAAAA,CAAAA,EAAAA,EAAA,CAAlBE,EAAAA,CALU,EAAAZ,EAKQ,UAuErB,UAAA,CAAA,EAAA,eAAe,IAAI,kBAAkB,GAAK,eAAe,OAAO,mBAAoBA,CAAe,QC1EtFa,EAAqBC,GAAmD,CACnF,MAAMC,EAAMD,aAAoB,SAAW,MAAM,KAAKA,CAAQ,EAAIA,EAElE,GAAIC,EAAI,SAAW,GAAK,CAACC,EAAkBD,CAAG,EAC5C,OAGF,MAAME,EAAcF,EAAI,KAAK,CAACG,EAAGC,IAAM,CACrC,MAAMC,EAAS,iBAAiBF,CAAC,EAAE,iBAAiB,OAAO,EAAE,QAAQ,KAAM,EAAE,EACvEG,EAAS,iBAAiBF,CAAC,EAAE,iBAAiB,OAAO,EAAE,QAAQ,KAAM,EAAE,EAC7E,OAAO,SAASE,CAAM,EAAI,SAASD,CAAM,CAC3C,CAAC,EAAE,CAAC,EAEEE,EAAc,iBAAiBL,CAAW,EAAE,iBAAiB,OAAO,EAE1E,UAAWM,KAAMR,EACX,iBAAiBQ,CAAE,EAAE,iBAAiB,OAAO,IAAMD,IACrDC,EAAG,MAAM,MAAWD,EAG1B,EC1BaE,EAAU,CACrB,GAAI,CACF,sBAAuB,IAAM,oBAC7B,4BAA6B,IAC3B,6LACJ,EACA,GAAI,CACF,sBAAuB,IAAM,+BAC7B,4BAA6B,IAC3B,wOACJ,EACA,GAAI,CACF,sBAAuB,IAAM,2BAC7B,4BAA6B,IAC3B,sOACJ,EACA,GAAI,CACF,sBAAuB,IAAM,0BAC7B,4BAA6B,IAC3B,0NACJ,EACA,GAAI,CACF,sBAAuB,IAAM,0BAC7B,4BAA6B,IAC3B,gNACJ,EACA,GAAI,CACF,sBAAuB,IAAM,0BAC7B,4BAA6B,IAC3B,yPACJ,CACF,EC/BA,IAAAC,EAAA,OAAA,eAAAC,EAAA,OAAA,yBAAAC,EAAA,CAAA,EAAAC,EAAA,EAAAC,IAAA,CAAA,QAAAC,EAAAD,EAAA,EAAA,OAAAA,EAAAH,EAAAE,EAAA,CAAA,EAAAA,EAAA,EAAA,EAAA,OAAA,EAAAV,EAAA,GAAA,EAAA,KAAAA,EAAA,EAAA,CAAA,KAAAY,GAAAD,EAAAX,EAAAU,EAAA,EAAAE,CAAA,EAAAZ,EAAAY,CAAA,IAAAA,GAAA,OAAAD,GAAAC,GAAAL,EAAAG,EAAA,EAAAE,CAAA,EAAAA,CAAA,EA6BA,MAAMC,EAAiC,IAAM,IAEhC,MAAAC,UAA6B/B,CAAW,CAA9C,kCAOuB,KAAO,QAAUgC,EAEjB,KAAO,KAAkB,KAExB,KAAO,iBAAmB,GAE1B,KAAO,MAAQ,GAEf,KAAO,YAAc,GAMlD,KAAQ,wBAA0B,UAC3BC,EAA8B,CAAC,SAAU,SAAS,EAAG,IAAI,EAGlD,MAAMC,EAAoB,CACpC,QAAS,KAAK,QACd,WAAY,CACV,QAAS,KAAK,OAChB,EACA,QAAS,CACP,cAAe,WAAW,KAAK,MAAM,EACvC,EACA,YAAa,CACX,QAAS,QACT,KAAM,KAAK,WACX,YAAa,KAAK,WACpB,CACF,CAAC,GAKH,KAAQ,+BAAiC,IAAIC,EAC3C,KACA,KAAK,uBACP,EAIA,KAAiBC,eAAAA,EACf,IAAM,CACJxB,EAAkB,KAAK,aAAa,CACtC,EACA,GACA,CAAE,QAAS,GAAI,QAAS,EAAK,CAC/B,CAAA,CAvCA,IAAI,YAAa,CACf,OAAOyB,EAAoB,KAAK,IAAI,GAAK,IAC3C,CAuCA,mBAAoB,CAClB,MAAM,kBACN,EAAA,OAAO,iBAAiB,SAAU,KAAK,cAAc,CACvD,CAEA,MAAM,QAAQC,EAAyC,CAGrD,MAAMC,EAAsB,CAAC,UAAW,UAAW,MAAM,EACzD,UAAWC,KAAQD,EACjB,GAAID,EAAkB,IAAIE,CAAI,EAAG,CAC/B,MAAM,KAAK,+BAA+B,KAAA,EAC1C,KACF,CAGF,KAAK,eAAA,CACP,CAEA,QAAS,CACP,KAAM,CAAE,KAAAC,EAAM,MAAAC,EAAO,QAAAC,CAAQ,EAAI,KAAK,+BACtC,OAAIA,EACKC,EAAS,EAEdF,EACE,KAAK,MACAG,EAAc,CAAE,MAAAH,CAAM,CAAC,EAEzB,GAELD,GAAQ,KACN,KAAK,MACAI,EAAc,CAAE,MAAO,IAAIC,EAAU,cAAc,CAAE,CAAC,EAExD,GAGFtC;AAAAA;AAAAA;AAAAA,YAGC,KAAK,aAAa,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWzB,KAAK,uBAAuBiC,CAAI,CAAC;AAAA;AAAA;AAAA,KAI3C,CAEQ,uBAAuBA,EAA8B,CAC3D,MAAMM,EAAYN,EAAK,QAAUA,EAAK,SAAS,IAAKO,GAAWA,EAAO,OAAS,CAAC,EAAI,GAC9EC,EAAc,KAAK,IAAI,GAAGF,CAAS,EACnCG,EAAYH,EAAU,IACzBI,GAASrB,EAAiC,KAAK,IAAI,KAAK,IAAIqB,EAAK,CAAC,CAAC,EAAK,KAAK,IAAIF,CAAW,CAC/F,EACA,OAAOzC;AAAAA;AAAAA;AAAAA,YAGC4C,EAAmB,KAAK,WAAYX,GAAM,QAAQ,KAAK,OAAS,EAAE,GACpElB,EAAQ,KAAK,UAAU,EAAE,uBAAuB;AAAA;AAAA;AAAA,YAG9C6B,EAAmB,KAAK,WAAYX,GAAM,QAAQ,KAAK,aAAe,EAAE,GAC1ElB,EAAQ,KAAK,UAAU,EAAE,6BAA6B;AAAA;AAAA;AAAA,YAGpDkB,EAAK,SAAS,IAAI,CAACO,EAAaK,IACzB,KAAK,0BAA0B,CAAE,OAAAL,EAAQ,kBAAmBE,EAAUG,CAAG,CAAE,CAAC,CACpF,CAAC;AAAA;AAAA;AAAA,KAIV,CAEQ,0BAA0B,CAAE,OAAAL,EAAQ,kBAAAM,CAAkB,EAA+C,CAC3G,MAAMC,EAAmB,KAAK,+BAA+B,MAAM,QAAQ,IAAI,iBACzEC,EAAuB,6DACvBC,EAAWF,EAAmB,EAAID,EAElCI,EAAcN,EAAmB,KAAK,WAAYJ,EAAO,MAAQ,EAAE,EACnEW,EAAiBP,EAAmB,KAAK,WAAYJ,EAAO,SAAW,EAAE,EAO/E,OAAOxC;AAAAA;AAAAA;AAAAA;AAAAA,cAIGwC,EAAO,MAAM,gBAAgB;AAAA;AAAA;AAAA,uBAGpBQ,CAAoB;AAAA,2BAChBR,EAAO,KAAK;AAAA,yBACdS,CAAQ;AAAA;AAAA;AAAA;AAAA,8CAIaC,CAAW,IAAIC,CAAc;AAAA;AAAA,KAGzE,CAEA,IAAW,cAAe,CACxB,MAAMC,EAAmC,CACvC,oBAAqB,UACrB,mBAAoB,UACpB,kBAAmB,OACnB,oBAAqB,IACrB,mBAAoB,UAEpB,GAAGC,EAAiB,gCAAiC,CACnD,SAAU,MACZ,CAAC,EACD,GAAGA,EAAiB,sCAAuC,CACzD,UAAW,OACX,WAAY,KACd,CAAC,EACD,gDAAiD,OACjD,wCAAyC,OAEzC,gEAAiE,MACjE,gEAAiE,eACjE,yDAA0D,IAC1D,2DAA4D,OAC5D,4DAA6D,MAC7D,0DAA2D,OAE3D,GAAGA,EAAiB,4CAA6C,CAC/D,MAAO,eACP,SAAU,OACV,WAAY,QACd,CAAC,EAED,GAAGA,EAAiB,0CAA2C,CAC7D,MAAO,eACP,SAAU,OACV,WAAY,SACZ,WAAY,KACd,CAAC,EACD,sDAAuD,OACvD,uDAAwD,OACxD,2DAA4D,MAC9D,EAEMC,EAAe,KAAK,+BAA+B,MAAM,QAAQ,KAAK,OAAS,CAE/EC,EAAAA,EAAS,CAAE,GAAGH,EAAU,GAAGE,CAAa,EAQ9C,OAAO,OAAO,OANO,OAAO,OAAO,CACjC,OAAQ,CACN,OAAOE,EAAgB,IAA8B,CACvD,CACF,CAAC,EAEkCD,CAAM,CAC3C,CAiFF,CAjTahC,EACJ,QAAU,yBADNA,EAkOJ,OAAS,CACdkC,EACAC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,UAeMC,EAAc,+BAA+B,CAAC;AAAA;AAAA;AAAA;AAAA,UAI9CA,EAAc,qCAAqC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA0BpDA,EAAc,2CAA2C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAU1DA,EAAc,yCAAyC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAqBhE,EA7SmC1D,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAHf,EAAAqB,EAGwB,sBAEAtB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CALf,EAAAqB,EAKwB,uBAEAtB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAPf,EAAAqB,EAOwB,uBAEAtB,EAAA,CAAlCC,EAAS,CAAE,KAAM,MAAO,CAAC,CAAA,EATfqB,EASwB,UAAA,OAAA,CAAA,EAECtB,EAAA,CAAnCC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAAA,EAXhBqB,EAWyB,UAAA,mBAAA,CAAA,EAEAtB,EAAA,CAAnCC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAbhB,EAAAqB,EAayB,UAEAtB,QAAAA,CAAAA,EAAAA,EAAA,CAAnCC,EAAS,CAAE,KAAM,OAAQ,CAAC,CAfhB,EAAAqB,EAeyB,UAkCpCtB,cAAAA,CAAAA,EAAAA,EAAA,CADC2D,EAAS,6BAA6B,GAhD5BrC,EAiDX,UAAA,gBAAA,CAAA,EAkQFsC,EAAoBtC,CAAoB"}
|
|
1
|
+
{"version":3,"file":"cumulative-impact.js","sources":["../../src/shared/components/animated-counter/index.ts","../../src/shared/sync-element-widths.ts","../../src/components/cumulative-impact/strings.ts","../../src/components/cumulative-impact/index.ts"],"sourcesContent":["import { html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { state } from \"lit/decorators.js\";\n\nexport class AnimatedCounter extends LitElement {\n @property({ type: Number }) finalValue = 0;\n @property({ type: Number }) duration = 1500;\n @property({ type: String }) scrollTarget?: string;\n\n @state() protected counter = 0;\n private intervalId = 0;\n\n connectedCallback() {\n super.connectedCallback();\n const userPrefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (this.duration === 0 || userPrefersReducedMotion) {\n this.counter = this.finalValue;\n } else {\n this.observeScrollTarget();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.unobserveScrollTarget();\n clearInterval(this.intervalId);\n }\n\n private handleCounterAnimateIfInView: IntersectionObserverCallback = (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n this.animateCounter();\n this.unobserveScrollTarget();\n }\n };\n\n private animateCounter = () => {\n const ANIMATION_FRAME_RATE = 24;\n const MS_PER_FRAME = 1000 / ANIMATION_FRAME_RATE;\n const INCREMENT_RATE_PER_FRAME = MS_PER_FRAME / this.duration;\n const COUNTER_INCREMENT_PER_FRAME = INCREMENT_RATE_PER_FRAME * this.finalValue;\n\n this.intervalId = setInterval(() => {\n const result = this.counter + COUNTER_INCREMENT_PER_FRAME;\n if (result >= this.finalValue) {\n this.counter = this.finalValue;\n clearInterval(this.intervalId);\n return;\n } else {\n this.counter = result;\n }\n }, MS_PER_FRAME);\n };\n\n private observer = new IntersectionObserver(this.handleCounterAnimateIfInView, {\n threshold: 0.1,\n });\n\n private observeScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.observe(target);\n };\n\n private unobserveScrollTarget = () => {\n const target = this.scrollTargetElement;\n target && this.observer.unobserve(target);\n };\n\n get scrollTargetElement(): this | Element | null {\n if (this.scrollTarget) {\n return document.querySelector(this.scrollTarget);\n } else {\n return this;\n }\n }\n\n render() {\n return html`${Math.ceil(this.counter).toLocaleString()}`;\n }\n}\n\ncustomElements.get(\"animated-counter\") || customElements.define(\"animated-counter\", AnimatedCounter);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"animated-counter\": AnimatedCounter;\n }\n}\n","import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize widths of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n */\nexport const syncElementWidths = (elements: Array<HTMLElement | null> | NodeList) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const widthSource = els.sort((a, b) => {\n const widthA = getComputedStyle(a).getPropertyValue(\"width\").replace(\"px\", \"\");\n const widthB = getComputedStyle(b).getPropertyValue(\"width\").replace(\"px\", \"\");\n return parseInt(widthB) - parseInt(widthA);\n })[0];\n\n const syncedWidth = getComputedStyle(widthSource).getPropertyValue(\"width\");\n\n for (const el of els) {\n if (getComputedStyle(el).getPropertyValue(\"width\") !== syncedWidth) {\n el.style[\"width\"] = syncedWidth;\n }\n }\n};\n","export const strings = {\n en: {\n cumulativeImpactTitle: () => `What we've funded`,\n cumulativeImpactDescription: () =>\n \"Here's the impact that our community has made so far in partnership with Beam. Our impact is growing every day— scroll to check out the goals we're working toward together right now.\",\n },\n fr: {\n cumulativeImpactTitle: () => `Ce que nous avons financé`,\n cumulativeImpactDescription: () =>\n \"Voici l'impact que notre communauté a eu jusqu'à présent en partenariat avec Beam. Notre impact grandit chaque jour : faites défiler pour découvrir les objectifs vers lesquels nous travaillons ensemble en ce moment.\",\n },\n de: {\n cumulativeImpactTitle: () => `Was wir finanziert haben`,\n cumulativeImpactDescription: () =>\n \"Hier ist die Wirkung, die unsere Community bisher in Zusammenarbeit mit Beam erzielt hat. Unsere Wirkung wächst von Tag zu Tag - scrollen Sie, um einen Blick auf die Ziele zu werfen, auf die wir derzeit gemeinsam hinarbeiten.\",\n },\n es: {\n cumulativeImpactTitle: () => `Lo que hemos financiado`,\n cumulativeImpactDescription: () =>\n \"Este es el impacto que nuestra comunidad ha tenido hasta ahora en asociación con Beam. Nuestro impacto crece cada día; desplácese para ver los objetivos por los que estamos trabajando juntos en este momento.\",\n },\n it: {\n cumulativeImpactTitle: () => `Cosa abbiamo finanziato`,\n cumulativeImpactDescription: () =>\n \"Ecco l'impatto che la nostra comunità ha avuto finora in collaborazione con Beam. Il nostro impatto cresce ogni giorno: scorri per scoprire gli obiettivi a cui stiamo lavorando insieme in questo momento.\",\n },\n pl: {\n cumulativeImpactTitle: () => `Co sfinansowaliśmy`,\n cumulativeImpactDescription: () =>\n \"Oto wpływ, jaki nasza społeczność wywarła dotychczas we współpracy z Beam. Nasz wpływ rośnie z każdym dniem — przewiń, aby sprawdzić cele, nad którymi obecnie wspólnie pracujemy.\",\n },\n};\n","import { css, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { queryAll } from \"lit/decorators/query-all.js\";\nimport debounce from \"lodash-es/debounce\";\nimport \"../../shared/components/animated-counter\";\nimport { cssReset } from \"../../shared/css-reset\";\nimport { defineCustomElement } from \"../../shared/defineCustomElement\";\nimport { _cssVariableMap } from \"../../shared/fragments/css-variable-map\";\nimport { DEFAULT_BASE_URL, SUPPORTED_LANGUAGES } from \"../../api-sdk/constants\";\nimport { TNumericId } from \"../../shared/types\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { getCumulativeImpact } from \"../../api-sdk/v3/routes\";\nimport { enforceConfig } from \"../../shared/enforce-config\";\nimport { BeamError, MissingConfig } from \"../../utils/beam-errors\";\nimport { AsyncController } from \"../../shared/controllers/async-controller\";\nimport { _errorMessage } from \"../../shared/fragments/error-message-template\";\nimport { _loading } from \"../../shared/fragments/loading-template\";\nimport { syncElementWidths } from \"../../shared/sync-element-widths\";\nimport { localizeUserString } from \"../../shared/localize\";\nimport { defineCustomText, useCustomText } from \"../../shared/fragments/custom-text\";\nimport { strings } from \"./strings\";\n\ntype RequiredConfig = {\n apiKey: string;\n chainId: TNumericId;\n};\n\ntype IAPIV3CumulativeImpact = Awaited<ReturnType<typeof getCumulativeImpact>>;\n\nconst MAX_COUNTER_ANIMATION_DURATION = 1.5 * 1000;\n\nexport class BeamCumulativeImpact extends LitElement {\n static tagName = \"beam-cumulative-impact\";\n\n @property({ type: String }) public apiKey?: RequiredConfig[\"apiKey\"];\n\n @property({ type: Number }) public chainId?: RequiredConfig[\"chainId\"];\n\n @property({ type: String }) public baseUrl = DEFAULT_BASE_URL;\n\n @property({ type: String }) public lang: LANGUAGES = \"en\";\n\n @property({ type: Boolean }) public disableAnimation = false;\n\n @property({ type: Boolean }) public debug = false;\n\n @property({ type: Boolean }) public draftConfig = false;\n\n get configLang() {\n return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n }\n\n private getCumulativeImpactData = async () => {\n if (!enforceConfig<RequiredConfig>([\"apiKey\", \"chainId\"], this)) {\n throw new MissingConfig();\n }\n const res = await getCumulativeImpact({\n baseUrl: this.baseUrl,\n pathParams: {\n chainId: this.chainId,\n },\n headers: {\n authorization: `Api-Key ${this.apiKey}`,\n },\n queryParams: {\n version: \"1.0.0\",\n lang: this.configLang,\n draftConfig: this.draftConfig,\n },\n });\n\n return res;\n };\n\n private cumulativeImpactDataController = new AsyncController<typeof this.getCumulativeImpactData>(\n this,\n this.getCumulativeImpactData\n );\n\n @queryAll(\".impact-row-value-container\")\n impactRowRefs!: HTMLElement[];\n resizeElements = debounce(\n () => {\n syncElementWidths(this.impactRowRefs);\n },\n 50,\n { maxWait: 50, leading: true }\n );\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"resize\", this.resizeElements);\n }\n\n async updated(changedProperties: Map<string, unknown>) {\n // Reload nonprofit list on change of any of these props:\n // Also fires on first load as props go from undefined => value\n const requireNewDataProps = [\"chainId\", \"baseUrl\", \"lang\"];\n for (const prop of requireNewDataProps) {\n if (changedProperties.has(prop)) {\n await this.cumulativeImpactDataController.exec();\n break;\n }\n }\n\n this.resizeElements();\n }\n\n render() {\n const { data, error, loading } = this.cumulativeImpactDataController;\n if (loading) {\n return _loading();\n }\n if (error) {\n if (this.debug) {\n return _errorMessage({ error });\n }\n return \"\";\n }\n if (data == null) {\n if (this.debug) {\n return _errorMessage({ error: new BeamError(\"Missing data\") });\n }\n return \"\";\n }\n\n return html`\n <style>\n :host {\n ${this.cssVariables.toCSS()}\n }\n </style>\n <div style=\"display: flex; flex-direction: column;\" class=\"root\">\n <div\n style=\"margin: 10px 0 0 0;\"\n tabindex=\"-1\"\n class=\"options\"\n part=\"options\"\n aria-labelledby=\"beam-RedeemTransaction-title\"\n >\n ${this.renderCumulativeImpact(data)}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpact(data: IAPIV3CumulativeImpact) {\n const rawValues = data.impacts ? data.impacts?.map((impact) => impact.value || 0) : [];\n const maxRawValue = Math.max(...rawValues);\n const durations = rawValues.map(\n (val) => (MAX_COUNTER_ANIMATION_DURATION * Math.log(Math.max(val, 1))) / Math.log(maxRawValue)\n );\n return html`\n <div class=\"main\">\n <div class=\"title\" role=\"heading\">\n ${localizeUserString(this.configLang, data?.config?.web?.title || \"\") ||\n strings[this.configLang].cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n strings[this.configLang].cumulativeImpactDescription()}\n </p>\n <div class=\"impact-list\">\n ${data.impacts?.map((impact: any, idx: number) => {\n return this.renderCumulativeImpactRow({ impact, animationDuration: durations[idx] });\n })}\n </div>\n </div>\n `;\n }\n\n private renderCumulativeImpactRow({ impact, animationDuration }: { impact: any; animationDuration: number }) {\n const disableAnimation = this.cumulativeImpactDataController.data?.config?.web.disableAnimation;\n const floatingCounterClass = \"impact-row-value-counter impact-row-value-floating-counter\";\n const duration = disableAnimation ? 0 : animationDuration;\n\n const unitDisplay = localizeUserString(this.configLang, impact.unit || \"\");\n const summaryDisplay = localizeUserString(this.configLang, impact.summary || \"\");\n\n /**\n * because we set the width using JavaScript by forcing all impact-row-value-container elements\n * to match the width of the widest sibling, we use a hidden span with the total preloaded to\n * ensure that impact-row-value-container widths do not change as the animation runs.\n */\n return html`\n <div class=\"impact-row\">\n <div class=\"impact-row-value-container\">\n <span class=\"impact-row-value-counter\" style=\"visibility: hidden;\" aria-hidden=\"true\">\n ${impact.value.toLocaleString()}\n </span>\n <animated-counter\n class=\"${floatingCounterClass}\"\n finalValue=${impact.value}\n duration=${duration}\n ></animated-counter>\n </span>\n </div>\n <div class=\"impact-row-description\">${unitDisplay} ${summaryDisplay}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"inherit\",\n \"--beam-fontStyle\": \"inherit\",\n \"--beam-fontSize\": \"16px\",\n \"--beam-lineHeight\": \"1\",\n \"--beam-textColor\": \"inherit\",\n // main\n ...defineCustomText(\"--beam-CumulativeImpact-title\", {\n fontSize: \"32px\",\n }),\n ...defineCustomText(\"--beam-CumulativeImpact-description\", {\n marginTop: \"16px\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-impact-list-marginTop\": \"24px\",\n \"--beam-CumulativeImpact-row-marginTop\": \"24px\",\n // row value container\n \"--beam-CumulativeImpact-row-value-container-borderBottomWidth\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-borderBottomColor\": \"currentColor\",\n \"--beam-CumulativeImpact-row-value-container-paddingTop\": \"0\",\n \"--beam-CumulativeImpact-row-value-container-paddingRight\": \"20px\",\n \"--beam-CumulativeImpact-row-value-container-paddingBottom\": \"4px\",\n \"--beam-CumulativeImpact-row-value-container-paddingLeft\": \"20px\",\n // row value counter\n ...defineCustomText(\"--beam-CumulativeImpact-row-value-counter\", {\n color: \"currentColor\",\n fontSize: \"24px\",\n fontWeight: \"normal\",\n }),\n // row description\n ...defineCustomText(\"--beam-CumulativeImpact-row-description\", {\n color: \"currentColor\",\n fontSize: \"16px\",\n fontWeight: \"normal\",\n lineHeight: \"1.3\",\n }),\n \"--beam-CumulativeImpact-row-description-paddingLeft\": \"24px\",\n \"--beam-CumulativeImpact-row-description-paddingRight\": \"24px\",\n \"--beam-CumulativeImpact-row-description-mobile-marginTop\": \"12px\",\n };\n\n const remoteConfig = this.cumulativeImpactDataController.data?.config?.web?.theme || {};\n\n const config = { ...defaults, ...remoteConfig };\n\n const serializable = Object.create({\n toCSS() {\n return _cssVariableMap(this as Record<string, string>);\n },\n });\n\n return Object.assign(serializable, config);\n }\n\n static styles = [\n cssReset,\n css`\n :host {\n display: block;\n font-family: var(--beam-fontFamily, inherit);\n font-style: var(--beam-fontStyle, inherit);\n font-size: var(--beam-fontSize, inherit);\n color: var(--beam-textColor, inherit);\n background-color: var(--beam-backgroundColor, inherit);\n line-height: var(--beam-lineHeight, 1);\n word-break: normal;\n }\n .main {\n text-align: left;\n }\n .title {\n ${useCustomText(\"--beam-CumulativeImpact-title\")}\n text-align: inherit;\n }\n .description {\n ${useCustomText(\"--beam-CumulativeImpact-description\")}\n text-align: inherit;\n }\n .impact-list {\n display: flex;\n flex-direction: column;\n margin-top: var(--beam-CumulativeImpact-impact-list-marginTop);\n }\n .impact-row {\n display: flex;\n align-items: center;\n margin-top: var(--beam-CumulativeImpact-row-marginTop);\n }\n .impact-row-value-container {\n position: relative;\n border-bottom-width: var(--beam-CumulativeImpact-row-value-container-borderBottomWidth);\n border-bottom-color: var(--beam-CumulativeImpact-row-value-container-borderBottomColor);\n border-bottom-style: solid;\n padding-top: var(--beam-CumulativeImpact-row-value-container-paddingTop);\n padding-right: var(--beam-CumulativeImpact-row-value-container-paddingRight);\n padding-bottom: var(--beam-CumulativeImpact-row-value-container-paddingBottom);\n padding-left: var(--beam-CumulativeImpact-row-value-container-paddingLeft);\n text-align: center;\n flex-shrink: 0;\n }\n .impact-row-value-counter {\n ${useCustomText(\"--beam-CumulativeImpact-row-value-counter\")}\n }\n .impact-row-value-floating-counter {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n }\n .impact-row-description {\n ${useCustomText(\"--beam-CumulativeImpact-row-description\")}\n padding-left: var(--beam-CumulativeImpact-row-description-paddingLeft);\n padding-right: var(--beam-CumulativeImpact-row-description-paddingRight);\n /* match padding of value of counter for proper centering */\n padding-bottom: var(--beam-CumulativeImpact-row-value-paddingBottom);\n text-align: inherit;\n flex-grow: 1;\n }\n @media (max-width: 500px) {\n .main {\n text-align: center;\n }\n .impact-row {\n flex-direction: column;\n }\n .impact-row-description {\n margin-top: var(--beam-CumulativeImpact-row-description-mobile-marginTop);\n padding-bottom: 0;\n }\n }\n `,\n ];\n}\n\ndefineCustomElement(BeamCumulativeImpact);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-cumulative-impact\": BeamCumulativeImpact;\n }\n}\n"],"names":["AnimatedCounter","LitElement","entries","entry","MS_PER_FRAME","COUNTER_INCREMENT_PER_FRAME","result","target","userPrefersReducedMotion","html","__decorateClass","property","state","syncElementWidths","elements","els","isAllHtmlElements","widthSource","a","b","widthA","widthB","syncedWidth","el","strings","f","h","r","m","i","e","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","SUPPORTED_LANGUAGES","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","unitDisplay","summaryDisplay","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
|
|
@@ -93,6 +93,7 @@ declare class BeamImpactOverview extends LitElement {
|
|
|
93
93
|
extensibility?: {
|
|
94
94
|
causeIconUrl?: string | null | undefined;
|
|
95
95
|
causeIconSelectedUrl?: string | null | undefined;
|
|
96
|
+
causeIconAndBackgroundUrl?: string | null | undefined;
|
|
96
97
|
} | undefined;
|
|
97
98
|
website: string | null;
|
|
98
99
|
websiteLinkText: string;
|
|
@@ -122,6 +123,7 @@ declare class BeamImpactOverview extends LitElement {
|
|
|
122
123
|
extensibility?: {
|
|
123
124
|
causeIconUrl?: string | null | undefined;
|
|
124
125
|
causeIconSelectedUrl?: string | null | undefined;
|
|
126
|
+
causeIconAndBackgroundUrl?: string | null | undefined;
|
|
125
127
|
} | undefined;
|
|
126
128
|
website: string | null;
|
|
127
129
|
websiteLinkText: string;
|
|
@@ -150,6 +152,7 @@ declare class BeamImpactOverview extends LitElement {
|
|
|
150
152
|
impactTitleRefs: HTMLElement[];
|
|
151
153
|
impactDescriptionRefs: HTMLElement[];
|
|
152
154
|
impactLinkRefs: HTMLElement[];
|
|
155
|
+
goalCompletionTextRefs: HTMLElement[];
|
|
153
156
|
connectedCallback(): void;
|
|
154
157
|
updated(changedProperties: PropertyValues): Promise<void>;
|
|
155
158
|
disconnectedCallback(): void;
|
|
@@ -159,7 +162,7 @@ declare class BeamImpactOverview extends LitElement {
|
|
|
159
162
|
*/
|
|
160
163
|
handleFontLoad<T = any>(callback: () => T | void): Promise<void | T>;
|
|
161
164
|
resizeElements: lodash.DebouncedFuncLeading<() => void>;
|
|
162
|
-
renderCard({ imageUrl, title, percentFunded, goalProgressText, description, urlCopy, impactUrl, isImage, cardType, }: {
|
|
165
|
+
renderCard({ imageUrl, title, percentFunded, goalProgressText, description, urlCopy, impactUrl, isImage, cardType, goalCompletionText, }: {
|
|
163
166
|
imageUrl: TUrl;
|
|
164
167
|
title: string;
|
|
165
168
|
percentFunded: number;
|
|
@@ -169,6 +172,7 @@ declare class BeamImpactOverview extends LitElement {
|
|
|
169
172
|
impactUrl: TUrl;
|
|
170
173
|
isImage: boolean;
|
|
171
174
|
cardType: string;
|
|
175
|
+
goalCompletionText?: string;
|
|
172
176
|
}): lit_html.TemplateResult<1>;
|
|
173
177
|
render(): "" | lit_html.TemplateResult<1>;
|
|
174
178
|
get cssVariables(): any;
|
|
@@ -1,29 +1,32 @@
|
|
|
1
|
-
import{f as
|
|
1
|
+
import{f as O,g as c,p as b,h as E,y as T,k as D}from"../chunks/lit-iNN5L_Qk.esm.js";import{d as N}from"../chunks/lodash-P8OIs-at.esm.js";import{D as R,g as j,W as F,S as P}from"../chunks/routes-o0OWqrXe.esm.js";import{p as A}from"../chunks/progress-bar-PMU_xI3L.esm.js";import{u as l,A as _,i as v,_ as $,d as u,a as V}from"../chunks/localize-o-cYvHQf.esm.js";import{c as W,d as q,e as G}from"../chunks/enforce-config-ZAI7WYAd.esm.js";import{_ as K}from"../chunks/loading-template-t4fFsYtr.esm.js";import{logger as M}from"../utils/logger.esm.js";import"../chunks/shoelace-components-scmUU5La.esm.js";import{s as h,a as H}from"../chunks/share-button-18T-n7FU.esm.js";import{partnerLogosConfigDefaults as Y}from"./beam-partner-logos.esm.js";import{c as J}from"../chunks/responsive-2lC2Wrtg.esm.js";import"../chunks/beam-errors-P-Lu07Ce.esm.js";import"../chunks/vendor-GKiOHg2N.esm.js";import"../chunks/is-all-html-elements-SdSkxirh.esm.js";import"../chunks/share-button-SNvuFDC9.esm.js";const g={en:{descriptionTitle:({nonprofitName:e="a nonprofit"})=>`You've just made an impact for ${e}`,descriptionSubtitle:()=>"Check out the impact your purchase made below.",yourImpactTitle:()=>"You\u2019ve Funded",communityImpactTitle:()=>"Together we\u2019re funding",personalImpactLinkCopy:({name:e=""})=>`Learn about ${e}`,communityImpactLinkCopy:({name:e=""})=>`See all of the impact by the ${e} community`,impactShareButton:()=>"Share to Grow Your Impact"},fr:{descriptionTitle:({nonprofitName:e=""})=>`Vous avez eu un impact positif sur ${e}`,descriptionSubtitle:({causeName:e=""})=>`D\xE9couvrez quel est l'impact de votre achat chez ${e} ci-dessous.`,yourImpactTitle:()=>"Vous avez financ\xE9",communityImpactTitle:()=>"Ensemble, nous finan\xE7ons",personalImpactLinkCopy:({name:e=""})=>`En savoir sur ${e}`,communityImpactLinkCopy:({name:e=""})=>`Voir toutes les contributions de la communaut\xE9 de ${e}`,impactShareButton:()=>"Partagez pour augmentez notre cause"},de:{descriptionTitle:({nonprofitName:e=""})=>`Du hast soeben einen Beitrag geleistet f\xFCr ${e}`,descriptionSubtitle:({causeName:e=""})=>`Erfahre mehr \xFCber den Beitrag, den du mit deinem ${e} Kauf geleistet hast`,yourImpactTitle:()=>"Sie haben finanziert",communityImpactTitle:()=>"Gemeinsam finanzieren wir",personalImpactLinkCopy:({name:e=""})=>`Mehr \xFCber ${e} lernen`,communityImpactLinkCopy:({name:e=""})=>`Informiere dich \xFCber den bisher geleisteten Beitrag der ${e} community`,impactShareButton:()=>"Teil, um unserem Beitrag zu erh\xF6hen"},es:{descriptionTitle:({nonprofitName:e=""})=>`Acabas de contribuir con ${e}`,descriptionSubtitle:({causeName:e=""})=>`Comprueba la contribuci\xF3n que has hecho con tu compra ${e} a continuaci\xF3n`,yourImpactTitle:()=>"Has financiado",communityImpactTitle:()=>"Juntos estamos financiando",personalImpactLinkCopy:({name:e=""})=>`Saber de ${e}`,communityImpactLinkCopy:({name:e=""})=>`Mira lo que ha conseguido la comunidad ${e}`,impactShareButton:()=>"Comparte para aumentar nuestro impacto"},it:{descriptionTitle:({nonprofitName:e=""})=>`Hai appena fatto la differenza per ${e}`,descriptionSubtitle:({causeName:e=""})=>`Guarda qui sotto l'impatto del tuo acquisto ${e}`,yourImpactTitle:()=>"Hai finanziato",communityImpactTitle:()=>"Insieme stiamo finanziando",personalImpactLinkCopy:({name:e=""})=>`Scopri su ${e}`,communityImpactLinkCopy:({name:e=""})=>`Guarda come la comunit\xE0 di ${e} fa la differenza`,impactShareButton:()=>"Condividi, aiutaci a fare la differenza"},pl:{descriptionTitle:({nonprofitName:e=""})=>`W\u0142a\u015Bnie wspar\u0142a\u015B_e\u015B ${e}!`,descriptionSubtitle:({causeName:e=""})=>`Sprawd\u017A ni\u017Cej, jakiego wsparcia udzieli\u0142a\u015B_e\u015B kupuj\u0105c w ${e} `,yourImpactTitle:()=>"Sfinansowa\u0142e\u015B(a) ",communityImpactTitle:()=>"Razem finansujemy",personalImpactLinkCopy:({name:e=""})=>`Dowiedz si\u0119 o ${e}`,communityImpactLinkCopy:({name:e=""})=>`Zobacz, ile dobrego zrobi\u0142a do tej pory spo\u0142eczno\u015B\u0107 ${e}`,impactShareButton:()=>"Udost\u0119pnij, by szerzy\u0107 nasz\u0105 misj\u0119"}};var Z=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,r=(e,a,i,o)=>{for(var n=o>1?void 0:o?Q(a,i):a,s=e.length-1,m;s>=0;s--)(m=e[s])&&(n=(o?m(a,i,n):m(n))||n);return o&&n&&Z(a,i,n),n};class t extends E{constructor(){super(...arguments),this.baseUrl=R,this.lang="en",this.debug=!1,this.draftConfig=!1,this.getImpactData=async()=>(G(["apiKey","userId","nonprofitId"],this),await j({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{nonprofitId:this.nonprofitId,beamUserId:this.userId,personalImpactLimit:1,communityImpactLimit:1,storeId:this.storeId,widgetName:F.impact_overview,version:"1.0.0",draftConfig:this.draftConfig,lang:this.configLang,discountCodes:this.discountCodes&&this.discountCodes.length>0?this.discountCodes:void 0,transactionId:this.transactionId??void 0}})),this.impactDataController=new _(this,this.getImpactData),this.resizeElements=N(()=>{h(this.impactTitleRefs),h(this.impactDescriptionRefs),h(this.impactLinkRefs),h(this.goalCompletionTextRefs)},50,{maxWait:50,leading:!0})}get configLang(){return P[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(a){const i=["baseUrl","storeId","apiKey","userId","lang","discountCodes"];for(const o of i)if(a.has(o)){await this.impactDataController.exec();break}this.resizeElements(),await this.handleFontLoad(this.resizeElements)}disconnectedCallback(){window.removeEventListener("resize",this.resizeElements),document.fonts.removeEventListener("loadingdone",this.resizeElements),super.disconnectedCallback()}async handleFontLoad(a){if(document.fonts.status==="loading")return await document.fonts.ready.catch(i=>M.error(i)),a()}renderCard({imageUrl:a,title:i,percentFunded:o,goalProgressText:n,description:s,urlCopy:m,impactUrl:p,isImage:d,cardType:f,goalCompletionText:y}){return T`
|
|
2
2
|
<div class="impact-card ${d?"":"icon"}" part="impact-card">
|
|
3
3
|
<div class="${d?"":"icon-background "}">
|
|
4
4
|
<img src="${a}" alt="${i}" class="${d?"impact-card-image":"impact-card-icon"}" />
|
|
5
5
|
</div>
|
|
6
6
|
<div class="${d?"":"impact-icon-card-content"}" style="margin: 12px;">
|
|
7
7
|
<div class="impact-card-title">${i}</div>
|
|
8
|
-
<p class="impact-card-description">${D(
|
|
8
|
+
<p class="impact-card-description">${D(s)}</p>
|
|
9
|
+
<div class="impact-card-goalCompletionText">
|
|
10
|
+
<p>${y}</p>
|
|
11
|
+
</div>
|
|
9
12
|
<div class="impact-card-progress" style="display: flex; align-items: center;">
|
|
10
13
|
<beam-progress-bar
|
|
11
|
-
value="${
|
|
14
|
+
value="${o}"
|
|
12
15
|
style="flex: 1 0;"
|
|
13
16
|
class="impact-card-progressbar"
|
|
14
17
|
></beam-progress-bar>
|
|
15
18
|
<span class="impact-card-progressText" style="flex: 0 1; margin-left: 10px; white-space: nowrap;"
|
|
16
|
-
>${
|
|
19
|
+
>${v(this.configLang,n)}</span
|
|
17
20
|
>
|
|
18
21
|
</div>
|
|
19
22
|
<p class="impact-link" part="impact-link">
|
|
20
|
-
<a href="${
|
|
21
|
-
${
|
|
23
|
+
<a href="${p}" target="_blank" rel="noopener noreferrer">
|
|
24
|
+
${f==="personal"?g[this.configLang].personalImpactLinkCopy({name:m}):g[this.configLang].communityImpactLinkCopy({name:m})}<span class="impact-link-arrow"> ›</span>
|
|
22
25
|
</a>
|
|
23
26
|
</p>
|
|
24
27
|
</div>
|
|
25
28
|
</div>
|
|
26
|
-
`}render(){const{data:a,loading:i,error:
|
|
29
|
+
`}render(){const{data:a,loading:i,error:o}=this.impactDataController;if(i)return K();if(o)return this.debug?$({error:o}):"";if(a==null)return this.debug?$({error:new Error("No data")}):"";const n=this.impactDataController.data?.chain.name,s=v(this.configLang,a.personal[0].nonprofit.cause||""),m=this.cssVariables["--beam-ImpactOverview-cardStyle"],p=m==="'image'",d=m==="'selected_icon'",f=a.personal[0]?.imageUrl||"",y=a.community[0].imageUrl||"",C=a.personal[0]?.nonprofit.causeIconUrl,w=a.personal[0]?.nonprofit.causeIconSelectedUrl,S=p?f:d?w:C,L=p?y:d?w:C,z=this.impactDataController.data?.promoAssetUrl||this.impactDataController.data?.personalImpactAssetUrl,x=this.cssVariables["--beam-ImpactOverview-share-button-display"]!=="none",B=x&&this.cssVariables["--beam-ImpactOverview-share-button-display-mobile"]!=="none",k=x&&this.cssVariables["--beam-ImpactOverview-share-button-display-desktop"]!=="none",U=this.cssVariables["--beam-ImpactOverview-share-button-icon-name"]||"share-2";let I="d-none";return B?I=k?"d-block":"d-lg-none":I=k?"d-none d-lg-block":"d-none",T`
|
|
27
30
|
<style>
|
|
28
31
|
:host {
|
|
29
32
|
${this.cssVariables.toCSS()}
|
|
@@ -40,34 +43,34 @@ import{f as k,g as c,p as f,h as E,y as O,k as D}from"../chunks/lit-iNN5L_Qk.esm
|
|
|
40
43
|
|
|
41
44
|
<div class="description">
|
|
42
45
|
<div class="title" part="title">
|
|
43
|
-
${
|
|
46
|
+
${v(this.configLang,a.config?.web?.title)||g[this.configLang].descriptionTitle({nonprofitName:a.personal[0].nonprofit.name})}
|
|
44
47
|
</div>
|
|
45
48
|
<div class="subtitle" part="subtitle">
|
|
46
|
-
${
|
|
49
|
+
${v(this.configLang,a.config?.web?.description)||g[this.configLang].descriptionSubtitle({causeName:s})}
|
|
47
50
|
</div>
|
|
48
51
|
</div>
|
|
49
52
|
|
|
50
|
-
<div class="${
|
|
51
|
-
<div class="impact your-impact ${
|
|
52
|
-
${this.renderCard({isImage:
|
|
53
|
+
<div class="${p?"impact-image-cards":"impact-icon-cards"}">
|
|
54
|
+
<div class="impact your-impact ${p?"image-card-container":"icon-card-container"}">
|
|
55
|
+
${this.renderCard({isImage:p,imageUrl:S||"",title:g[this.configLang].yourImpactTitle(),percentFunded:a.personal[0]?.impact?.goalProgressPercentage||0,goalProgressText:a.personal[0]?.impact?.goalProgressText,description:v(this.configLang,a.personal[0]?.impact?.description||""),urlCopy:a.personal[0].nonprofit?.name,impactUrl:a.personal[0].nonprofit?.website||"",cardType:"personal",goalCompletionText:a.personal[0].impact.goalCompletionText})}
|
|
53
56
|
</div>
|
|
54
|
-
<div class="impact community-impact ${
|
|
55
|
-
${this.renderCard({isImage:
|
|
57
|
+
<div class="impact community-impact ${p?"image-card-container":"icon-card-container"}">
|
|
58
|
+
${this.renderCard({isImage:p,imageUrl:L||"",title:g[this.configLang].communityImpactTitle(),percentFunded:a.community[0].impact?.goalProgressPercentage||0,goalProgressText:a.community[0]?.impact?.goalProgressText,description:v(this.configLang,a.community[0].impact?.description||""),urlCopy:a.chain.name,impactUrl:a.chain.communityImpactUrl||a.community[0].nonprofit.website||"",cardType:"community",goalCompletionText:a.community[0].impact.goalCompletionText})}
|
|
56
59
|
</div>
|
|
57
60
|
</div>
|
|
58
61
|
|
|
59
|
-
<div class="footer ${
|
|
62
|
+
<div class="footer ${I} shareButtonContainer" part="social-share">
|
|
60
63
|
<beam-share-button
|
|
61
64
|
imageUrl="${z}"
|
|
62
65
|
brandName="${n}"
|
|
63
66
|
shareIcon="${U}"
|
|
64
|
-
buttonText="${
|
|
67
|
+
buttonText="${g[this.configLang].impactShareButton()}"
|
|
65
68
|
configLang="${this.configLang}"
|
|
66
69
|
></beam-share-button>
|
|
67
70
|
</div>
|
|
68
71
|
|
|
69
72
|
<div id="modal-root"></div>
|
|
70
|
-
`}get cssVariables(){const a={"--beam-fontFamily":"inherit","--beam-fontStyle":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...Y,...
|
|
73
|
+
`}get cssVariables(){const a={"--beam-fontFamily":"inherit","--beam-fontStyle":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...Y,...A,...H,...u("--beam-ImpactOverview-title",{fontSize:"16px",fontWeight:"bold",marginTop:"10px",textTransform:"capitalize"}),...u("--beam-ImpactOverview-subtitle",{marginTop:"5px"}),"--beam-ImpactOverview-impactCards-maxWidth":"650px","--beam-ImpactOverview-impactCard-backgroundColor":"inherit","--beam-ImpactOverview-impactCard-foregroundColor":"currentColor","--beam-ImpactOverview-impactCard-borderColor":"currentColor","--beam-ImpactOverview-impactCard-borderRadius":"5px","--beam-ImpactOverview-impactCard-marginTop":"10px",...u("--beam-ImpactOverview-impactCard-title",{fontSize:"15px",fontWeight:"bold",letterSpacing:"0.36px"}),"--beam-ImpactOverview-impactCard-progress-marginTop":"8px",...u("--beam-ImpactOverview-impactCard-progressText"),...u("--beam-ImpactOverview-impactCard-description",{marginTop:"10px"}),"--beam-ImpactOverview-impactCard-linkArrow-display":"inline","--beam-ImpactOverview-impactCard-link-color":"inherit",...u("--beam-ImpactOverview-impactCard-link",{marginTop:"10px",textDecoration:"underline",textTransform:"capitalize"}),...u("--beam-ImpactOverview-goalCompletionText",{marginTop:"5px",fontWeight:"600",textTransform:"capitalize",fontSize:"13px"}),"--beam-ImpactOverview-share-button-display":"none","--beam-ImpactOverview-share-button-display-mobile":"inherit","--beam-ImpactOverview-share-button-display-desktop":"inherit","--beam-ImpactOverview-image-display":"block","--beam-ImpactOverview-cardStyle":"'image'","--beam-ImpactOverview-iconBackground-width":"75px","--beam-ImpactOverview-iconBackground-height":"75px","--beam-ImpactOverview-iconBackground-borderRadius":"50px","--beam-ImpactOverview-icon-padding":"0px","--beam-ImpactOverview-iconBackground-background":"#f3f3f3","--beam-ImpactOverview-impactCard-shareButton-background":"#fff","--beam-ImpactOverview-impactCard-shareButton-boxShadow":"0px -20px 20px 0px rgb(0 0 0 / 2%)"},i=this.impactDataController?.data?.config?.web?.theme||{},o={...a,...i};return Object.assign(Object.create({toCSS(){return V(this)}}),o)}}t.tagName="beam-impact-overview",t.styles=[W,J,O`
|
|
71
74
|
:host {
|
|
72
75
|
display: block;
|
|
73
76
|
font-family: var(--beam-fontFamily);
|
|
@@ -149,22 +152,22 @@ import{f as k,g as c,p as f,h as E,y as O,k as D}from"../chunks/lit-iNN5L_Qk.esm
|
|
|
149
152
|
box-shadow: var(--beam-ImpactOverview-impactCard-shareButton-boxShadow);
|
|
150
153
|
}
|
|
151
154
|
.title {
|
|
152
|
-
${
|
|
155
|
+
${l("--beam-ImpactOverview-title")}
|
|
153
156
|
}
|
|
154
157
|
.subtitle {
|
|
155
|
-
${
|
|
158
|
+
${l("--beam-ImpactOverview-subtitle")}
|
|
156
159
|
}
|
|
157
160
|
.impact-card-title {
|
|
158
|
-
${
|
|
161
|
+
${l("--beam-ImpactOverview-impactCard-title")}
|
|
159
162
|
}
|
|
160
163
|
.impact-card-progressText {
|
|
161
|
-
${
|
|
164
|
+
${l("--beam-ImpactOverview-impactCard-progressText")}
|
|
162
165
|
}
|
|
163
166
|
.impact-card-description {
|
|
164
|
-
${
|
|
167
|
+
${l("--beam-ImpactOverview-impactCard-description")}
|
|
165
168
|
}
|
|
166
169
|
.impact-link {
|
|
167
|
-
${
|
|
170
|
+
${l("--beam-ImpactOverview-impactCard-link")}
|
|
168
171
|
}
|
|
169
172
|
.impact-link-arrow {
|
|
170
173
|
display: var(--beam-ImpactOverview-impactCard-linkArrow-display, "inline");
|
|
@@ -173,10 +176,13 @@ import{f as k,g as c,p as f,h as E,y as O,k as D}from"../chunks/lit-iNN5L_Qk.esm
|
|
|
173
176
|
.impact-link a:visited {
|
|
174
177
|
color: var(--beam-ImpactOverview-impactCard-link-color, inherit);
|
|
175
178
|
}
|
|
179
|
+
.impact-card-goalCompletionText {
|
|
180
|
+
${l("--beam-ImpactOverview-goalCompletionText")}
|
|
181
|
+
}
|
|
176
182
|
.footer {
|
|
177
183
|
text-align: center;
|
|
178
184
|
}
|
|
179
|
-
`,
|
|
185
|
+
`,O`
|
|
180
186
|
.button {
|
|
181
187
|
cursor: pointer;
|
|
182
188
|
}
|
|
@@ -191,5 +197,5 @@ import{f as k,g as c,p as f,h as E,y as O,k as D}from"../chunks/lit-iNN5L_Qk.esm
|
|
|
191
197
|
font-size: inherit;
|
|
192
198
|
font-family: inherit;
|
|
193
199
|
}
|
|
194
|
-
`],
|
|
200
|
+
`],r([c({type:String,reflect:!0})],t.prototype,"baseUrl",2),r([c({type:String,reflect:!1})],t.prototype,"apiKey",2),r([c({type:Number})],t.prototype,"storeId",2),r([c({type:String,reflect:!0})],t.prototype,"nonprofitId",2),r([c({type:String,reflect:!0})],t.prototype,"userId",2),r([c({type:String})],t.prototype,"lang",2),r([c({type:Boolean})],t.prototype,"debug",2),r([c({type:Boolean})],t.prototype,"draftConfig",2),r([c({type:Object})],t.prototype,"discountCodes",2),r([c({type:String})],t.prototype,"transactionId",2),r([b(".impact-card-title")],t.prototype,"impactTitleRefs",2),r([b(".impact-card-description")],t.prototype,"impactDescriptionRefs",2),r([b(".impact-link")],t.prototype,"impactLinkRefs",2),r([b(".impact-card-goalCompletionText")],t.prototype,"goalCompletionTextRefs",2),q(t);export{t as BeamImpactOverview};
|
|
195
201
|
//# sourceMappingURL=impact-overview.esm.js.map
|