@beamimpact/web-sdk 1.29.0-beta.2 → 1.29.0-beta.4
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-rhp3w_bc.esm.js → _share-dialog-dependencies-QQSOJjCu.esm.js} +2 -2
- package/dist/chunks/_share-dialog-dependencies-QQSOJjCu.esm.js.map +1 -0
- package/dist/chunks/{_share-dialog-dependencies-SPLB_3ny.esm.js → _share-dialog-dependencies-sB_XJxLm.esm.js} +2 -2
- package/dist/chunks/_share-dialog-dependencies-sB_XJxLm.esm.js.map +1 -0
- package/dist/chunks/index-DOJfViqE.esm.js +2 -0
- package/dist/chunks/index-DOJfViqE.esm.js.map +1 -0
- package/dist/chunks/index-IOIrB7Pn.esm.js +2 -0
- package/dist/chunks/index-IOIrB7Pn.esm.js.map +1 -0
- package/dist/chunks/index-Q0I5ntVH.esm.js +2 -0
- package/dist/chunks/index-Q0I5ntVH.esm.js.map +1 -0
- package/dist/chunks/index-T_isog9X.esm.js +2 -0
- package/dist/chunks/index-T_isog9X.esm.js.map +1 -0
- package/dist/chunks/index-u2cQPbYh.esm.js +2 -0
- package/dist/chunks/index-u2cQPbYh.esm.js.map +1 -0
- package/dist/chunks/localize-e-mss8ya.esm.js.map +1 -1
- package/dist/chunks/{order-page-a46zvUZT.esm.js → order-page-3XgI-V6M.esm.js} +2 -2
- package/dist/chunks/{order-page-a46zvUZT.esm.js.map → order-page-3XgI-V6M.esm.js.map} +1 -1
- package/dist/chunks/{order-page-0Hp4NoQq.esm.js → order-page-GfUnTiJo.esm.js} +2 -2
- package/dist/chunks/{order-page-0Hp4NoQq.esm.js.map → order-page-GfUnTiJo.esm.js.map} +1 -1
- package/dist/chunks/{routes-MZb9Fq0P.esm.js → routes-wndAQJwE.esm.js} +2 -2
- package/dist/chunks/{routes-MZb9Fq0P.esm.js.map → routes-wndAQJwE.esm.js.map} +1 -1
- package/dist/chunks/{update-cart-vHXpyCQh.esm.js → update-cart-leGTC6ce.esm.js} +2 -2
- package/dist/chunks/{update-cart-vHXpyCQh.esm.js.map → update-cart-leGTC6ce.esm.js.map} +1 -1
- package/dist/components/community-impact.d.ts +1 -1
- package/dist/components/community-impact.esm.js +2 -2
- package/dist/components/community-impact.esm.js.map +1 -1
- package/dist/components/community-impact.js +2 -2
- package/dist/components/community-impact.js.map +1 -1
- package/dist/components/cumulative-impact.d.ts +1 -2
- 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 +1 -2
- package/dist/components/impact-overview.esm.js +17 -17
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +17 -17
- package/dist/components/impact-overview.js.map +1 -1
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +2 -2
- package/dist/components/post-purchase.esm.js +3 -3
- package/dist/components/post-purchase.esm.js.map +1 -1
- package/dist/components/post-purchase.js +3 -3
- package/dist/components/post-purchase.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +1 -1
- package/dist/components/redeem-transaction.esm.js +2 -2
- package/dist/components/redeem-transaction.esm.js.map +1 -1
- package/dist/components/redeem-transaction.js +2 -2
- package/dist/components/redeem-transaction.js.map +1 -1
- package/dist/components/select-nonprofit.d.ts +2 -2
- package/dist/components/select-nonprofit.esm.js +1 -1
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +1 -1
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/cart.esm.js +1 -1
- package/dist/integrations/cart.js +1 -1
- package/dist/integrations/index.esm.js +1 -1
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- 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.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.esm.js +1 -1
- package/dist/react/post-purchase.js +1 -1
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.js +1 -1
- package/dist/react/select-nonprofit.esm.js +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/_share-dialog-dependencies-SPLB_3ny.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-rhp3w_bc.esm.js.map +0 -1
- package/dist/chunks/index-B6ZVcw-2.esm.js +0 -2
- package/dist/chunks/index-B6ZVcw-2.esm.js.map +0 -1
- package/dist/chunks/index-IeUA7g43.esm.js +0 -2
- package/dist/chunks/index-IeUA7g43.esm.js.map +0 -1
- package/dist/chunks/index-k7UbsAvh.esm.js +0 -2
- package/dist/chunks/index-k7UbsAvh.esm.js.map +0 -1
- package/dist/chunks/index-nrUfRMjl.esm.js +0 -2
- package/dist/chunks/index-nrUfRMjl.esm.js.map +0 -1
- package/dist/chunks/index-zaXXznPD.esm.js +0 -2
- package/dist/chunks/index-zaXXznPD.esm.js.map +0 -1
|
@@ -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};\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 } 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 \"../../shared/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 // TODO - request and implement supported languages to enable localization\n get configLang(): \"en\" {\n // return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n return \"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 },\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 updated(): void {\n this.resizeElements();\n }\n\n willUpdate(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 this.cumulativeImpactDataController.exec();\n break;\n }\n }\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 defaultStrings = strings[this.configLang];\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 defaultStrings.cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n defaultStrings.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 * 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\">${impact.unit} ${impact.summary}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"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-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 }\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","r","s","m","t","i","e","o","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","defaultStrings","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
|
|
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};\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 } 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 \"../../shared/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 // TODO - request and implement supported languages to enable localization\n get configLang(): \"en\" {\n // return SUPPORTED_LANGUAGES[this.lang] || \"en\";\n return \"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 },\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 defaultStrings = strings[this.configLang];\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 defaultStrings.cumulativeImpactTitle()}\n </div>\n <p class=\"description\">\n ${localizeUserString(this.configLang, data?.config?.web?.description || \"\") ||\n defaultStrings.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 * 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\">${impact.unit} ${impact.summary}</div>\n </div>\n `;\n }\n\n public get cssVariables() {\n const defaults: Record<string, string> = {\n \"--beam-fontFamily\": \"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-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 }\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","r","s","m","t","i","e","o","MAX_COUNTER_ANIMATION_DURATION","BeamCumulativeImpact","DEFAULT_BASE_URL","enforceConfig","getCumulativeImpact","AsyncController","debounce","changedProperties","requireNewDataProps","prop","data","error","loading","_loading","_errorMessage","BeamError","defaultStrings","rawValues","impact","maxRawValue","durations","val","localizeUserString","idx","animationDuration","disableAnimation","floatingCounterClass","duration","defaults","defineCustomText","remoteConfig","config","_cssVariableMap","cssReset","css","useCustomText","queryAll","defineCustomElement"],"mappings":"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"}
|
|
@@ -109,9 +109,8 @@ declare class BeamImpactOverview extends LitElement {
|
|
|
109
109
|
impactTitleRefs: HTMLElement[];
|
|
110
110
|
impactDescriptionRefs: HTMLElement[];
|
|
111
111
|
impactLinkRefs: HTMLElement[];
|
|
112
|
-
updated(): Promise<void>;
|
|
113
|
-
protected willUpdate(changedProperties: PropertyValues): void;
|
|
114
112
|
connectedCallback(): void;
|
|
113
|
+
updated(changedProperties: PropertyValues): Promise<void>;
|
|
115
114
|
disconnectedCallback(): void;
|
|
116
115
|
/**
|
|
117
116
|
* Safari does not fire loading events on the document FontFaceSet, but it does implement the .ready Promise
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{h as
|
|
1
|
+
import{h as f,f as d,u as w,g as k,Z as z,y as x,k as L}from"../chunks/lit-h1W25hjN.esm.js";import{d as N}from"../chunks/lodash-ZxBiuGue.esm.js";import{D,b as E,S as R}from"../chunks/routes-wndAQJwE.esm.js";import{B}from"../chunks/beam-errors-l02WBee5.esm.js";import{p as j}from"../chunks/progress-bar-w3yfrrxD.esm.js";import{c as U,u as s,d as A,e as F,A as W,a as P,_ as C,i as v,b as p,f as M}from"../chunks/localize-e-mss8ya.esm.js";import{l as O}from"../chunks/logger-ad87ovol.esm.js";import{r as q,s as H}from"../chunks/vendor-IGhQoYCM.esm.js";import{i as V}from"../chunks/is-all-html-elements-SdSkxirh.esm.js";import{partnerLogosConfigDefaults as _}from"./beam-partner-logos.esm.js";import{c as K}from"../chunks/responsive-Rehmv-eo.esm.js";function G(){return/Android|iPhone/i.test(navigator.userAgent)}const S=async e=>fetch(e).then(async a=>{const t=new URL(e),i=await a.blob();return new File([i],t.pathname,{type:i.type})}),$=import.meta.url;let g="",y="",h="";if($.startsWith("http")?(h=$.split("/dist/")[0],g=`${h}/dist/shoelace`,y=`${h}/dist/lucide-static`):(h="https://production-beam-widgets.beamimpact.com",g=`${h}/lib/shoelace/v2.11.2`,y=`${h}/lib/lucide-static/v0.292.0`),q("lucide",{resolver:e=>`${y}/icons/${e}.svg`}),H(g),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${g}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}const I=(e,{source:a="contentLength"}={})=>{const t=e instanceof NodeList?Array.from(e):e;if(t.length===0||!V(t))return;const i=(a==="contentLength"?t.sort((r,c)=>c.innerText.length-r.innerText.length)[0]:t.sort((r,c)=>c.clientHeight-r.clientHeight)[0])?.clientHeight||0;for(const r of t)r.clientHeight!==i&&(r.style.height=i+"px")},o={en:{descriptionTitle:({nonprofitName:e="a nonprofit"})=>`You just made an impact for ${e}`,descriptionSubtitle:({brandName:e=""})=>`Check out the impact your ${e} purchase made below`,learnMore:({name:e=""})=>`Learn more about ${e}`,seeAllImpact:({brandName:e=""})=>`See all of the impact by the ${e} community`,percentRaised:({percent:e=0})=>`${e}%`,yourImpactTitle:()=>"Your Impact",communityImpactTitle:({brandName:e=""})=>`The ${e} Community's Impact`,impactShareButton:()=>"Share to Grow Our Impact",impactShareText:({brandName:e=""})=>`Help ${e} reach their giving goal by sharing this cause on social media`,impactShareTitle:()=>"Share on Social Media",impactShareCopy:()=>"Copy",impactShareDownload:()=>"Download",impactShareClose:()=>"Close"},fr:{descriptionTitle:({nonprofitName:e=""})=>`Vous avez eu un impact positif sur ${e}`,descriptionSubtitle:({brandName:e=""})=>`D\xE9couvrez quel est l'impact de votre achat chez ${e} ci-dessous.`,learnMore:({name:e=""})=>`En savoir plus sur ${e}`,seeAllImpact:({brandName:e=""})=>`Voir toutes les contributions de la communaut\xE9 de ${e}`,percentRaised:({percent:e=0})=>`${e}%`,yourImpactTitle:()=>"Votre contribution personnelle",communityImpactTitle:({brandName:e=""})=>`La contribution de la communaut\xE9 de ${e}`,impactShareButton:()=>"Partagez pour augmentez notre cause",impactShareText:({brandName:e=""})=>`Aidez ${e} a atteindre leur objectif en partageant cette cause sur votre r\xE9seaux sociaux`,impactShareTitle:()=>"Partager sur votre r\xE9seaux sociaux",impactShareCopy:()=>"Copier",impactShareDownload:()=>"T\xE9l\xE9charger",impactShareClose:()=>"Fermer"},de:{descriptionTitle:({nonprofitName:e=""})=>`Du hast soeben einen Beitrag geleistet f\xFCr ${e}`,descriptionSubtitle:({brandName:e=""})=>`Erfahre mehr \xFCber den Beitrag, den du mit deinem ${e} Kauf geleistet hast`,learnMore:({name:e=""})=>`Mehr \xFCber ${e} erfahren`,seeAllImpact:({brandName:e=""})=>`Informiere dich \xFCber den bisher geleisteten Beitrag der ${e} community`,percentRaised:({percent:e=0})=>`${e}%`,yourImpactTitle:()=>"Dein Beitrag",communityImpactTitle:({brandName:e=""})=>`Der Beitrag der ${e} community`,impactShareButton:()=>"Teil, um unserem Beitrag zu erh\xF6hen",impactShareText:({brandName:e=""})=>`Hilf ${e} ihre Spendenziel zu erreichen`,impactShareTitle:()=>"In den sozialen Medien teilen",impactShareCopy:()=>"Kopieren",impactShareDownload:()=>"Herunterladen",impactShareClose:()=>"Schlie\xDFen"},es:{descriptionTitle:({nonprofitName:e=""})=>`Acabas de contribuir con ${e}`,descriptionSubtitle:({brandName:e=""})=>`Comprueba la contribuci\xF3n que has hecho con tu compra ${e} a continuaci\xF3n`,learnMore:({name:e=""})=>`Saber m\xE1s de ${e}`,seeAllImpact:({brandName:e=""})=>`Mira lo que ha conseguido la comunidad ${e}`,percentRaised:({percent:e=0})=>`${e}%`,yourImpactTitle:()=>"Tu contribuci\xF3n",communityImpactTitle:({brandName:e=""})=>`Tu contribuci\xF3n con la comunidad ${e}`,impactShareButton:()=>"Comparte para aumentar nuestro impacto",impactShareText:({brandName:e=""})=>`Comparte en las redes sociales para ayudar a ${e} a alcanzar su objetivo.`,impactShareTitle:()=>"Compartir en redes sociales",impactShareCopy:()=>"Copiar",impactShareDownload:()=>"Descargar",impactShareClose:()=>"Cerrar"},it:{descriptionTitle:({nonprofitName:e=""})=>`Hai appena fatto la differenza per ${e}`,descriptionSubtitle:({brandName:e=""})=>`Guarda qui sotto l'impatto del tuo acquisto ${e}`,learnMore:({name:e=""})=>`Scopri di pi\xF9 su ${e}`,seeAllImpact:({brandName:e=""})=>`Guarda come la comunit\xE0 di ${e} fa la differenza`,percentRaised:({percent:e=0})=>`${e}%`,yourImpactTitle:()=>"Il tuo impatto",communityImpactTitle:({brandName:e=""})=>`L\u2019impatto della comunit\xE0 di ${e} `,impactShareButton:()=>"Condividi, aiutaci a fare la differenza",impactShareText:({brandName:e=""})=>`Aiuta ${e} a raggiungere il suo obiettivo di donazione condividendo questa causa sui social media.`,impactShareTitle:()=>"Condividi, aiutaci a fare la differenza",impactShareCopy:()=>"Copia",impactShareDownload:()=>"Scarica",impactShareClose:()=>"Chiudi"},pl:{descriptionTitle:({nonprofitName:e=""})=>`W\u0142a\u015Bnie wspar\u0142a\u015B_e\u015B ${e}!`,descriptionSubtitle:({brandName:e=""})=>`Sprawd\u017A ni\u017Cej, jakiego wsparcia udzieli\u0142a\u015B_e\u015B kupuj\u0105c w ${e} `,learnMore:({name:e=""})=>`Dowiedz si\u0119 wi\u0119cej o ${e}`,seeAllImpact:({brandName:e=""})=>`Zobacz, ile dobrego zrobi\u0142a do tej pory spo\u0142eczno\u015B\u0107 ${e}`,percentRaised:({percent:e=0})=>`${e}%`,yourImpactTitle:()=>"Twoje wsparcie",communityImpactTitle:({brandName:e=""})=>`Wsparcie udzielone przez spo\u0142eczno\u015B\u0107 ${e}`,impactShareButton:()=>"Udost\u0119pnij, by szerzy\u0107 nasz\u0105 misj\u0119",impactShareText:({brandName:e=""})=>`Pom\xF3\u017C ${e} osi\u0105gn\u0105\u0107 cel i podziel si\u0119 t\u0105 inicjatyw\u0105 na swoim profilu`,impactShareTitle:()=>"Udost\u0119pnij na swoim profilu",impactShareCopy:()=>"Kopiuj",impactShareDownload:()=>"Pobierz",impactShareClose:()=>"Zamknij"}};var J=Object.defineProperty,Z=Object.getOwnPropertyDescriptor,m=(e,a,t,i)=>{for(var r=i>1?void 0:i?Z(a,t):a,c=e.length-1,l;c>=0;c--)(l=e[c])&&(r=(i?l(a,t,r):l(r))||r);return i&&r&&J(a,t,r),r};class n extends k{constructor(){super(...arguments),this.baseUrl=D,this.lang="en",this.debug=!1,this.getImpactData=async()=>(F(["apiKey","chainId","userId","nonprofitId"],this),await E({baseUrl:this.baseUrl,headers:{authorization:`Api-Key ${this.apiKey}`},queryParams:{nonprofitId:this.nonprofitId,chainId:this.chainId,beamUserId:this.userId,personalImpactLimit:1,communityImpactLimit:1,widgetName:"impact-overview",version:"1.0.0",lang:this.configLang}})),this.impactDataController=new W(this,this.getImpactData),this.resizeElements=N(()=>{I(this.impactTitleRefs),I(this.impactDescriptionRefs),I(this.impactLinkRefs)},50,{maxWait:50,leading:!0}),this.handleShareClick=async()=>{try{G()?await this.openSystemShareSheet():await this.openShareDialog()}catch(a){O.error(new B("Error sharing impact")),O.error(a)}},this.openSystemShareSheet=async()=>{const a=this.impactDataController.data?.personal[0]?.share?.imageUrl;if(!a)return;const t=await S(a);navigator.share&&await navigator.share({files:[t]})},this.openShareDialog=async()=>{const a=this.impactDataController.data?.chain.name,t=this.impactDataController.data?.personal[0]?.share?.imageUrl;if(!t)return;const i=this.renderRoot.querySelector("sl-dialog");if(i){i.show();return}await import("../chunks/_share-dialog-dependencies-QQSOJjCu.esm.js");const r=this.renderRoot.querySelector("#modal-root"),c=await S(t),l=URL.createObjectURL(c),b=()=>{this.renderRoot.querySelector("sl-dialog")?.hide()},u=()=>{navigator.clipboard.write([new ClipboardItem({"image/png":c})]).then(()=>{setTimeout(b,250)})},T=()=>{setTimeout(b,250)};z(x`
|
|
2
2
|
<sl-dialog open label="${o[this.configLang].impactShareTitle()}" no-header class="share-dialog">
|
|
3
3
|
<h2 class="share-title">${o[this.configLang].impactShareTitle()}</h2>
|
|
4
4
|
<p class="share-text">${o[this.configLang].impactShareText({brandName:a})}</p>
|
|
5
5
|
<img src="${t}" alt="${o[this.configLang].impactShareTitle()}" class="share-image" />
|
|
6
6
|
<div class="share-actions" style="display: flex; justify-content: space-evenly">
|
|
7
7
|
<div style="flex: 1; text-align: center">
|
|
8
|
-
<button class="plain-button button share-action-button" @click="${
|
|
8
|
+
<button class="plain-button button share-action-button" @click="${u}">
|
|
9
9
|
<sl-icon
|
|
10
10
|
library="lucide"
|
|
11
11
|
name="copy"
|
|
@@ -20,7 +20,7 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
20
20
|
class="plain-button button share-action-button plain-link"
|
|
21
21
|
download="${o[this.configLang].impactShareTitle()}"
|
|
22
22
|
href="${l}"
|
|
23
|
-
@click="${
|
|
23
|
+
@click="${T}"
|
|
24
24
|
>
|
|
25
25
|
<sl-icon
|
|
26
26
|
library="lucide"
|
|
@@ -32,11 +32,11 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
32
32
|
</a>
|
|
33
33
|
</div>
|
|
34
34
|
</div>
|
|
35
|
-
<button class="plain-button button share-close" @click="${
|
|
35
|
+
<button class="plain-button button share-close" @click="${b}">
|
|
36
36
|
${o[this.configLang].impactShareClose()}
|
|
37
37
|
</button>
|
|
38
38
|
</sl-dialog>
|
|
39
|
-
`,r)}}get configLang(){return
|
|
39
|
+
`,r)}}get configLang(){return R[this.lang]||"en"}connectedCallback(){super.connectedCallback(),window.addEventListener("resize",this.resizeElements)}async updated(a){const t=["chainId","baseUrl","storeId","apiKey","userId","lang"];for(const i of t)if(a.has(i)){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(t=>console.error(t)),a()}renderCard({imageUrl:a,title:t,percentFunded:i,description:r}){return x`
|
|
40
40
|
<div class="impact-card" part="impact-card">
|
|
41
41
|
<img src="${a}" alt="${t}" class="impact-card-image" />
|
|
42
42
|
<div class="impact-card-content" style="margin: 15px;">
|
|
@@ -51,10 +51,10 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
51
51
|
>${o[this.configLang].percentRaised({percent:i})}</span
|
|
52
52
|
>
|
|
53
53
|
</div>
|
|
54
|
-
<p class="impact-card-description">${
|
|
54
|
+
<p class="impact-card-description">${L(r)}</p>
|
|
55
55
|
</div>
|
|
56
56
|
</div>
|
|
57
|
-
`}render(){const{data:a,loading:t,error:i}=this.impactDataController;if(t)return
|
|
57
|
+
`}render(){const{data:a,loading:t,error:i}=this.impactDataController;if(t)return P();if(i)return this.debug?C({error:i}):"";if(a==null)return this.debug?C({error:new Error("No data")}):"";const r=this.cssVariables["--beam-ImpactOverview-share-button-display"]!=="none",c=r&&this.cssVariables["--beam-ImpactOverview-share-button-display-mobile"]!=="none",l=r&&this.cssVariables["--beam-ImpactOverview-share-button-display-desktop"]!=="none",b=this.cssVariables["--beam-ImpactOverview-share-button-icon-name"]||"share-2";let u="d-none";return c?u=l?"d-block":"d-lg-none":u=l?"d-none d-lg-block":"d-none",x`
|
|
58
58
|
<style>
|
|
59
59
|
:host {
|
|
60
60
|
${this.cssVariables.toCSS()}
|
|
@@ -71,16 +71,16 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
71
71
|
|
|
72
72
|
<div class="description">
|
|
73
73
|
<div class="title" part="title">
|
|
74
|
-
${
|
|
74
|
+
${v(this.configLang,a.config?.web?.title)||o[this.configLang].descriptionTitle({nonprofitName:a.personal[0].nonprofit.name})}
|
|
75
75
|
</div>
|
|
76
76
|
<div class="subtitle" part="subtitle">
|
|
77
|
-
${
|
|
77
|
+
${v(this.configLang,a.config?.web?.description)||o[this.configLang].descriptionSubtitle({brandName:a.chain.name})}
|
|
78
78
|
</div>
|
|
79
79
|
</div>
|
|
80
80
|
|
|
81
81
|
<div class="impact-cards" style="display: flex; flex-wrap: wrap; gap: 15px; margin: 10px 0;">
|
|
82
82
|
<div class="impact your-impact" style="flex: 1 1; display: inline-block; max-width: 100%; min-width: 200px;">
|
|
83
|
-
${this.renderCard({imageUrl:a.personal[0]?.imageUrl||"",title:o[this.configLang].yourImpactTitle(),percentFunded:a.personal[0]?.impact?.goalProgressPercentage||0,description:
|
|
83
|
+
${this.renderCard({imageUrl:a.personal[0]?.imageUrl||"",title:o[this.configLang].yourImpactTitle(),percentFunded:a.personal[0]?.impact?.goalProgressPercentage||0,description:v(this.configLang,a.personal[0]?.impact?.description||"")})}
|
|
84
84
|
<p class="impact-link" part="impact-link">
|
|
85
85
|
<a href="${a.personal[0].nonprofit?.website}">
|
|
86
86
|
${o[this.configLang].learnMore({name:a.personal[0].nonprofit?.name})}<span class="impact-link-arrow"> ›</span>
|
|
@@ -91,7 +91,7 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
91
91
|
class="impact community-impact"
|
|
92
92
|
style="flex: 1 1; display: inline-block; max-width: 100%; min-width: 200px;"
|
|
93
93
|
>
|
|
94
|
-
${this.renderCard({imageUrl:a.community[0].imageUrl||"",title:o[this.configLang].communityImpactTitle({brandName:a.chain.name}),percentFunded:a.community[0].impact?.goalProgressPercentage||0,description:
|
|
94
|
+
${this.renderCard({imageUrl:a.community[0].imageUrl||"",title:o[this.configLang].communityImpactTitle({brandName:a.chain.name}),percentFunded:a.community[0].impact?.goalProgressPercentage||0,description:v(this.configLang,a.community[0].impact?.description||"")})}
|
|
95
95
|
<p class="impact-link" part="impact-link">
|
|
96
96
|
<a href="${a.chain.communityImpactUrl||a.community[0].nonprofit.website}">
|
|
97
97
|
${o[this.configLang].seeAllImpact({brandName:a.chain.name})}<span class="impact-link-arrow"> ›</span>
|
|
@@ -100,10 +100,10 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
100
100
|
</div>
|
|
101
101
|
</div>
|
|
102
102
|
|
|
103
|
-
<div class="footer ${
|
|
103
|
+
<div class="footer ${u}" part="social-share">
|
|
104
104
|
<button @click="${this.handleShareClick}" class="share-button share-button-inline button icon-button">
|
|
105
105
|
<sl-icon
|
|
106
|
-
name="${
|
|
106
|
+
name="${b}"
|
|
107
107
|
library="lucide"
|
|
108
108
|
label="${o[this.configLang].impactShareButton()}"
|
|
109
109
|
class="share-button-icon"
|
|
@@ -113,7 +113,7 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
113
113
|
</div>
|
|
114
114
|
|
|
115
115
|
<div id="modal-root"></div>
|
|
116
|
-
`}get cssVariables(){const a={"--beam-fontFamily":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",...
|
|
116
|
+
`}get cssVariables(){const a={"--beam-fontFamily":"inherit","--beam-fontSize":"inherit","--beam-textColor":"inherit","--beam-backgroundColor":"inherit",..._,...j,...p("--beam-ImpactOverview-title",{fontSize:"16px",fontWeight:"bold",marginTop:"10px"}),...p("--beam-ImpactOverview-subtitle",{marginTop:"5px"}),"--beam-ImpactOverview-impactCards-maxWidth":"800px","--beam-ImpactOverview-impactCard-backgroundColor":"inherit","--beam-ImpactOverview-impactCard-foregroundColor":"currentColor","--beam-ImpactOverview-impactCard-borderColor":"currentColor","--beam-ImpactOverview-impactCard-borderRadius":"0px","--beam-ImpactOverview-impactCard-marginTop":"10px",...p("--beam-ImpactOverview-impactCard-title",{fontSize:"15px",fontWeight:"bold"}),"--beam-ImpactOverview-impactCard-progress-marginTop":"15px",...p("--beam-ImpactOverview-impactCard-progressText"),...p("--beam-ImpactOverview-impactCard-description",{marginTop:"10px"}),"--beam-ImpactOverview-impactCard-linkArrow-display":"inline","--beam-ImpactOverview-impactCard-link-color":"inherit",...p("--beam-ImpactOverview-impactCard-link",{marginTop:"10px"}),"--beam-ImpactOverview-share-button-display":"none","--beam-ImpactOverview-share-button-display-mobile":"inherit","--beam-ImpactOverview-share-button-display-desktop":"inherit","--beam-ImpactOverview-share-button-textDecoration":"underline","--beam-ImpactOverview-share-button-icon-size":"16px",...p("--beam-ImpactOverview-share-button",{fontSize:"14px",fontWeight:"bold",marginTop:"12px"}),"--beam-ImpactOverview-share-button-backgroundColor":"#c2dcff","--beam-ImpactOverview-share-button-color":"inherit","--beam-ImpactOverview-share-button-borderRadius":"16px","--beam-ImpactOverview-share-button-borderColor":"transparent","--beam-ImpactOverview-share-button-borderWidth":"2px","--beam-ImpactOverview-share-button-padding":"12px 18px 12px 16px","--beam-ImpactOverview-share-button-width":"auto","--beam-ImpactOverview-share-button-hover-color":"inherit","--beam-ImpactOverview-share-button-hover-borderColor":"transparent","--beam-ImpactOverview-share-button-hover-backgroundColor":"#c2dcff","--beam-ImpactOverview-share-dialog-padding":"30px 60px",...p("--beam-ImpactOverview-share-title",{fontSize:"30px",fontWeight:"bold"}),"--beam-ImpactOverview-share-button-icon-name":"share-2","--beam-ImpactOverview-share-image-width":"200px","--beam-ImpactOverview-share-image-borderRadius":"4px","--beam-ImpactOverview-share-image-margin":"20px",...p("--beam-ImpactOverview-share-text",{fontSize:"16px",lineHeight:"1.3",marginTop:"10px"}),"--beam-ImpactOverview-share-actions-margin":"30px 60px","--beam-ImpactOverview-share-action-icon-size":"32px",...p("--beam-ImpactOverview-share-action-text",{fontSize:"16px",marginTop:"5px"}),...p("--beam-ImpactOverview-share-close",{fontSize:"16px",fontWeight:"bold"}),"--beam-ImpactOverview-share-close-padding":"12px","--beam-ImpactOverview-share-close-backgroundColor":"#ffd522","--beam-ImpactOverview-share-close-text-color":"currentColor","--beam-ImpactOverview-share-close-borderRadius":"4px","--beam-ImpactOverview-image-display":"block"},t=this.impactDataController?.data?.config?.web?.theme||{},i={...a,...t};return Object.assign(Object.create({toCSS(){return M(this)}}),i)}}n.tagName="beam-impact-overview",n.styles=[U,K,f`
|
|
117
117
|
:host {
|
|
118
118
|
display: block;
|
|
119
119
|
font-family: var(--beam-fontFamily);
|
|
@@ -220,7 +220,7 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
220
220
|
// font-size: calc(var(--beam-ImpactOverview-share-button-icon-size, 16px) * 1.33);
|
|
221
221
|
//}
|
|
222
222
|
}
|
|
223
|
-
`,
|
|
223
|
+
`,f`
|
|
224
224
|
.button {
|
|
225
225
|
cursor: pointer;
|
|
226
226
|
}
|
|
@@ -239,7 +239,7 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
239
239
|
text-decoration: none;
|
|
240
240
|
color: inherit;
|
|
241
241
|
}
|
|
242
|
-
`,
|
|
242
|
+
`,f`
|
|
243
243
|
.share-dialog::part(panel) {
|
|
244
244
|
padding: var(--beam-ImpactOverview-share-dialog-padding, 30px 30px);
|
|
245
245
|
text-align: center;
|
|
@@ -288,5 +288,5 @@ import{h as v,f as d,u as g,g as S,Z as $,y as f,k as T}from"../chunks/lit-h1W25
|
|
|
288
288
|
.share-close:hover {
|
|
289
289
|
outline: 2px solid var(--beam-ImpactOverview-share-close-focus-borderColor, currentColor);
|
|
290
290
|
}
|
|
291
|
-
`],m([d({type:String,reflect:!0})],n.prototype,"baseUrl",2),m([d({type:String,reflect:!1})],n.prototype,"apiKey",2),m([d({type:String,reflect:!0})],n.prototype,"nonprofitId",2),m([d({type:String,reflect:!0})],n.prototype,"chainId",2),m([d({type:String,reflect:!0})],n.prototype,"userId",2),m([d({type:String})],n.prototype,"lang",2),m([d({type:Boolean})],n.prototype,"debug",2),m([
|
|
291
|
+
`],m([d({type:String,reflect:!0})],n.prototype,"baseUrl",2),m([d({type:String,reflect:!1})],n.prototype,"apiKey",2),m([d({type:String,reflect:!0})],n.prototype,"nonprofitId",2),m([d({type:String,reflect:!0})],n.prototype,"chainId",2),m([d({type:String,reflect:!0})],n.prototype,"userId",2),m([d({type:String})],n.prototype,"lang",2),m([d({type:Boolean})],n.prototype,"debug",2),m([w(".impact-card-title")],n.prototype,"impactTitleRefs",2),m([w(".impact-card-description")],n.prototype,"impactDescriptionRefs",2),m([w(".impact-link")],n.prototype,"impactLinkRefs",2),A(n);export{n as BeamImpactOverview};
|
|
292
292
|
//# sourceMappingURL=impact-overview.esm.js.map
|