@beamimpact/web-sdk 1.40.0 → 1.42.0
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/README.md +7 -11
- package/dist/chunks/_share-dialog-dependencies-0XZ9j6DF.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-0XZ9j6DF.esm.js.map +1 -0
- package/dist/chunks/_share-dialog-dependencies-cBi8GG00.esm.js +2 -0
- package/dist/chunks/_share-dialog-dependencies-cBi8GG00.esm.js.map +1 -0
- package/dist/chunks/cart-contents-h60geKWa.esm.js.map +1 -1
- package/dist/chunks/{cart-contents-3-9fB-7m.esm.d.ts → cart-contents-sUhfwLAz.esm.d.ts} +2 -1
- package/dist/chunks/checkbox-P2JYPqxl.esm.js +17 -0
- package/dist/chunks/checkbox-P2JYPqxl.esm.js.map +1 -0
- package/dist/chunks/{css-card-grid-7tObtoJx.esm.js → css-card-grid-r6wxRbPV.esm.js} +2 -2
- package/dist/chunks/{css-card-grid-7tObtoJx.esm.js.map → css-card-grid-r6wxRbPV.esm.js.map} +1 -1
- package/dist/chunks/enforce-config-HksNiOMu.esm.js +3 -0
- package/dist/chunks/enforce-config-HksNiOMu.esm.js.map +1 -0
- package/dist/chunks/enforce-config-er6B5Gkj.esm.js +3 -0
- package/dist/chunks/enforce-config-er6B5Gkj.esm.js.map +1 -0
- package/dist/chunks/{events-7cGXyV7_.esm.d.ts → events-QJc86_5Y.esm.d.ts} +2 -2
- package/dist/chunks/{events-Y8fYvSqM.esm.js → events-_4nImo3u.esm.js} +2 -2
- package/dist/chunks/{events-Y8fYvSqM.esm.js.map → events-_4nImo3u.esm.js.map} +1 -1
- package/dist/chunks/index--phjcEHh.esm.js +2 -0
- package/dist/chunks/index--phjcEHh.esm.js.map +1 -0
- package/dist/chunks/{index-uCfdsWtt.esm.js → index-1nI7l5vj.esm.js} +2 -2
- package/dist/chunks/{index-uCfdsWtt.esm.js.map → index-1nI7l5vj.esm.js.map} +1 -1
- package/dist/chunks/index-2K1cEtb1.esm.js +2 -0
- package/dist/chunks/index-2K1cEtb1.esm.js.map +1 -0
- package/dist/chunks/index-3-VTK-nH.esm.js +2 -0
- package/dist/chunks/index-3-VTK-nH.esm.js.map +1 -0
- package/dist/chunks/index-AQ8n9ODJ.esm.js +2 -0
- package/dist/chunks/{index-fINTvZVX.esm.js.map → index-AQ8n9ODJ.esm.js.map} +1 -1
- package/dist/chunks/index-E8H5A7Qq.esm.js +2 -0
- package/dist/chunks/index-E8H5A7Qq.esm.js.map +1 -0
- package/dist/chunks/index-FQExZDX9.esm.js +2 -0
- package/dist/chunks/index-FQExZDX9.esm.js.map +1 -0
- package/dist/chunks/index-JA-7NqMF.esm.js +2 -0
- package/dist/chunks/index-JA-7NqMF.esm.js.map +1 -0
- package/dist/chunks/{index-8KzbQIsU.esm.d.ts → index-M-0eAFA6.esm.d.ts} +1 -1
- package/dist/chunks/{index-phDmC-TS.esm.js → index-NOF_HeFP.esm.js} +2 -2
- package/dist/chunks/index-NOF_HeFP.esm.js.map +1 -0
- package/dist/chunks/index-PiMq5a49.esm.js +2 -0
- package/dist/chunks/index-PiMq5a49.esm.js.map +1 -0
- package/dist/chunks/{index-rFBYAk7m.esm.d.ts → index-VHXu2kRx.esm.d.ts} +1 -1
- package/dist/chunks/index-XCMf22lv.esm.js +2 -0
- package/dist/chunks/index-XCMf22lv.esm.js.map +1 -0
- package/dist/chunks/{index-0VcD5nhV.esm.d.ts → index-ZgCs6F4e.esm.d.ts} +4 -4
- package/dist/chunks/{index-TOzSFOvI.esm.d.ts → index-_Hgu38MH.esm.d.ts} +1 -1
- package/dist/chunks/{index-SxFKifVJ.esm.d.ts → index-_UuYsIe9.esm.d.ts} +1 -1
- package/dist/chunks/index-cUb-0Igl.esm.js +2 -0
- package/dist/chunks/{index-kxMe_AX1.esm.js.map → index-cUb-0Igl.esm.js.map} +1 -1
- package/dist/chunks/index-eHSdKArB.esm.js +2 -0
- package/dist/chunks/index-eHSdKArB.esm.js.map +1 -0
- package/dist/chunks/{index-HBDtoJlQ.esm.d.ts → index-euJMrXIc.esm.d.ts} +1 -1
- package/dist/chunks/{index-Hb-jziQs.esm.d.ts → index-hn6JhG_w.esm.d.ts} +7 -1
- package/dist/chunks/{index-6t9MtjyS.esm.d.ts → index-mTXm0DPh.esm.d.ts} +9 -1
- package/dist/chunks/{index-Q1vx4WtG.esm.js → index-mw70Caof.esm.js} +2 -2
- package/dist/chunks/{index-Q1vx4WtG.esm.js.map → index-mw70Caof.esm.js.map} +1 -1
- package/dist/chunks/{index-8yrr7ZZv.esm.js → index-n6QNFLXV.esm.js} +2 -2
- package/dist/chunks/index-n6QNFLXV.esm.js.map +1 -0
- package/dist/chunks/index-sOAq6oM0.esm.js +2 -0
- package/dist/chunks/index-sOAq6oM0.esm.js.map +1 -0
- package/dist/chunks/{index-uF-Qtewb.esm.js → index-x2kxA_Xo.esm.js} +2 -2
- package/dist/chunks/index-x2kxA_Xo.esm.js.map +1 -0
- package/dist/chunks/{index-Lw32NXij.esm.js → index-z8c9I9IQ.esm.js} +2 -2
- package/dist/chunks/index-z8c9I9IQ.esm.js.map +1 -0
- package/dist/chunks/{lit-qtGbjGnK.esm.js → lit-3QHn3fwl.esm.js} +5 -5
- package/dist/chunks/lit-3QHn3fwl.esm.js.map +1 -0
- package/dist/chunks/loading-template-mLjOGXMj.esm.js +2 -0
- package/dist/chunks/{loading-template-Av0IUyKF.esm.js.map → loading-template-mLjOGXMj.esm.js.map} +1 -1
- package/dist/chunks/localize-IRs8JglT.esm.js +29 -0
- package/dist/chunks/localize-IRs8JglT.esm.js.map +1 -0
- package/dist/chunks/localize-SsJbTmMj.esm.js +29 -0
- package/dist/chunks/localize-SsJbTmMj.esm.js.map +1 -0
- package/dist/chunks/{openapi-spec--MzXvfCC.esm.d.ts → openapi-spec--WoGcZgR.esm.d.ts} +232 -9
- package/dist/chunks/order-page-4qPr8vqZ.esm.js +2 -0
- package/dist/chunks/order-page-4qPr8vqZ.esm.js.map +1 -0
- package/dist/chunks/order-page-Ps8Qyjfg.esm.d.ts +74 -0
- package/dist/chunks/order-page-akvp5h2x.esm.js +2 -0
- package/dist/chunks/order-page-akvp5h2x.esm.js.map +1 -0
- package/dist/chunks/{progress-bar-Sn2QspHy.esm.js → progress-bar-HVG_n8_6.esm.js} +7 -6
- package/dist/chunks/progress-bar-HVG_n8_6.esm.js.map +1 -0
- package/dist/chunks/{promo-pill-label-j0A8qZ0c.esm.js → promo-pill-label-3Xtr5ALT.esm.js} +4 -3
- package/dist/chunks/{promo-pill-label-j0A8qZ0c.esm.js.map → promo-pill-label-3Xtr5ALT.esm.js.map} +1 -1
- package/dist/chunks/{responsive-aWj_7ZN_.esm.js → responsive-KbDsZM6S.esm.js} +2 -2
- package/dist/chunks/{responsive-aWj_7ZN_.esm.js.map → responsive-KbDsZM6S.esm.js.map} +1 -1
- package/dist/chunks/routes-qbvie7oI.esm.d.ts +445 -0
- package/dist/chunks/routes-r5D_LdgT.esm.js +2 -0
- package/dist/chunks/routes-r5D_LdgT.esm.js.map +1 -0
- package/dist/chunks/routes-rmhOokKz.esm.js +2 -0
- package/dist/chunks/routes-rmhOokKz.esm.js.map +1 -0
- package/dist/chunks/share-button-CqTd80g8.esm.js +2 -0
- package/dist/chunks/share-button-CqTd80g8.esm.js.map +1 -0
- package/dist/chunks/share-button-JqbM7N_4.esm.js +163 -0
- package/dist/chunks/share-button-JqbM7N_4.esm.js.map +1 -0
- package/dist/chunks/share-button-hDn8fnBI.esm.d.ts +22 -0
- package/dist/chunks/share-button-jpa1X3FA.esm.js +163 -0
- package/dist/chunks/share-button-jpa1X3FA.esm.js.map +1 -0
- package/dist/chunks/shoelace-components-NR11kwmz.esm.js +2 -0
- package/dist/chunks/shoelace-components-NR11kwmz.esm.js.map +1 -0
- package/dist/chunks/shoelace-components-yXqj8DyM.esm.js +2 -0
- package/dist/chunks/shoelace-components-yXqj8DyM.esm.js.map +1 -0
- package/dist/chunks/{types-CfbVJRfU.esm.d.ts → types-zbTZ8-KP.esm.d.ts} +4 -1
- package/dist/chunks/update-cart-05ZiT0Xf.esm.js +2 -0
- package/dist/chunks/update-cart-05ZiT0Xf.esm.js.map +1 -0
- package/dist/chunks/{update-cart-xaWdPxse.esm.d.ts → update-cart-SajqAoez.esm.d.ts} +2 -1
- package/dist/chunks/update-cart-lTgKV-Zu.esm.js +2 -0
- package/dist/chunks/update-cart-lTgKV-Zu.esm.js.map +1 -0
- package/dist/chunks/{vendor-jQ8cxMpw.esm.js → vendor--f7lkyBk.esm.js} +44 -44
- package/dist/chunks/vendor--f7lkyBk.esm.js.map +1 -0
- package/dist/components/beam-partner-logos.esm.js +2 -2
- package/dist/components/beam-partner-logos.esm.js.map +1 -1
- package/dist/components/beam-partner-logos.js +2 -2
- package/dist/components/beam-partner-logos.js.map +1 -1
- package/dist/components/community-impact.d.ts +1 -1
- package/dist/components/community-impact.esm.js +15 -9
- package/dist/components/community-impact.esm.js.map +1 -1
- package/dist/components/community-impact.js +15 -9
- package/dist/components/community-impact.js.map +1 -1
- package/dist/components/cumulative-impact.d.ts +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 +16 -4
- package/dist/components/impact-overview.esm.js +29 -146
- package/dist/components/impact-overview.esm.js.map +1 -1
- package/dist/components/impact-overview.js +29 -146
- package/dist/components/impact-overview.js.map +1 -1
- package/dist/components/index.d.ts +8 -3
- package/dist/components/index.esm.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/post-purchase.d.ts +7 -4
- package/dist/components/post-purchase.esm.js +2 -1
- package/dist/components/post-purchase.esm.js.map +1 -1
- package/dist/components/post-purchase.js +2 -1
- package/dist/components/post-purchase.js.map +1 -1
- package/dist/components/product-details-page.d.ts +7 -1
- package/dist/components/product-details-page.esm.js +5 -5
- package/dist/components/product-details-page.esm.js.map +1 -1
- package/dist/components/product-details-page.js +5 -5
- package/dist/components/product-details-page.js.map +1 -1
- package/dist/components/redeem-transaction.d.ts +5 -4
- package/dist/components/redeem-transaction.esm.js +44 -55
- package/dist/components/redeem-transaction.esm.js.map +1 -1
- package/dist/components/redeem-transaction.js +44 -55
- package/dist/components/redeem-transaction.js.map +1 -1
- package/dist/components/select-nonprofit.d.ts +4 -4
- package/dist/components/select-nonprofit.esm.js +20 -16
- package/dist/components/select-nonprofit.esm.js.map +1 -1
- package/dist/components/select-nonprofit.js +20 -16
- package/dist/components/select-nonprofit.js.map +1 -1
- package/dist/components/select-subscription-nonprofit.d.ts +67 -0
- package/dist/components/select-subscription-nonprofit.esm.js +373 -0
- package/dist/components/select-subscription-nonprofit.esm.js.map +1 -0
- package/dist/components/select-subscription-nonprofit.js +373 -0
- package/dist/components/select-subscription-nonprofit.js.map +1 -0
- package/dist/components/shopify.d.ts +8 -6
- package/dist/components/shopify.esm.js +1 -1
- package/dist/components/shopify.esm.js.map +1 -1
- package/dist/components/shopify.js +1 -1
- package/dist/components/shopify.js.map +1 -1
- package/dist/components/social-share.d.ts +47 -0
- package/dist/components/social-share.esm.js +170 -0
- package/dist/components/social-share.esm.js.map +1 -0
- package/dist/components/social-share.js +170 -0
- package/dist/components/social-share.js.map +1 -0
- package/dist/components/subscription-impact.d.ts +179 -0
- package/dist/components/subscription-impact.esm.js +269 -0
- package/dist/components/subscription-impact.esm.js.map +1 -0
- package/dist/components/subscription-impact.js +269 -0
- package/dist/components/subscription-impact.js.map +1 -0
- package/dist/components/subscription-management.d.ts +143 -14
- package/dist/components/subscription-management.esm.js +267 -31
- package/dist/components/subscription-management.esm.js.map +1 -1
- package/dist/components/subscription-management.js +267 -31
- package/dist/components/subscription-management.js.map +1 -1
- package/dist/index.d.ts +23 -14
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/beam.d.ts +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 +12 -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/session.esm.js +1 -1
- package/dist/integrations/session.js +1 -1
- package/dist/integrations/shopify.d.ts +7 -5
- package/dist/integrations/shopify.esm.js +1 -1
- package/dist/integrations/shopify.js +1 -1
- package/dist/integrations/statsig.d.ts +1 -1
- package/dist/integrations/statsig.esm.js +14 -10
- package/dist/integrations/statsig.esm.js.map +1 -1
- package/dist/integrations/statsig.js +14 -10
- package/dist/integrations/statsig.js.map +1 -1
- package/dist/integrations/utils.d.ts +4 -4
- package/dist/integrations/utils.esm.js +1 -1
- package/dist/integrations/utils.js +1 -1
- package/dist/react/beam-partner-logos.esm.js +1 -1
- package/dist/react/beam-partner-logos.js +1 -1
- package/dist/react/community-impact.d.ts +1 -1
- package/dist/react/community-impact.esm.js +1 -1
- package/dist/react/community-impact.esm.js.map +1 -1
- package/dist/react/community-impact.js +1 -1
- package/dist/react/community-impact.js.map +1 -1
- package/dist/react/cumulative-impact.d.ts +1 -1
- package/dist/react/cumulative-impact.esm.js +1 -1
- package/dist/react/cumulative-impact.esm.js.map +1 -1
- package/dist/react/cumulative-impact.js +1 -1
- package/dist/react/cumulative-impact.js.map +1 -1
- package/dist/react/impact-overview.d.ts +2 -1
- package/dist/react/impact-overview.esm.js +1 -1
- package/dist/react/impact-overview.esm.js.map +1 -1
- package/dist/react/impact-overview.js +1 -1
- package/dist/react/impact-overview.js.map +1 -1
- package/dist/react/index.d.ts +14 -4
- package/dist/react/index.esm.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/post-purchase.d.ts +4 -3
- package/dist/react/post-purchase.esm.js +1 -1
- package/dist/react/post-purchase.esm.js.map +1 -1
- package/dist/react/post-purchase.js +1 -1
- package/dist/react/post-purchase.js.map +1 -1
- package/dist/react/product-details-page.esm.js +1 -1
- package/dist/react/product-details-page.esm.js.map +1 -1
- package/dist/react/product-details-page.js +1 -1
- package/dist/react/product-details-page.js.map +1 -1
- package/dist/react/redeem-transaction.d.ts +4 -4
- package/dist/react/redeem-transaction.esm.js +1 -1
- package/dist/react/redeem-transaction.esm.js.map +1 -1
- package/dist/react/redeem-transaction.js +1 -1
- package/dist/react/redeem-transaction.js.map +1 -1
- package/dist/react/select-nonprofit.d.ts +4 -4
- package/dist/react/select-nonprofit.esm.js +1 -1
- package/dist/react/select-nonprofit.esm.js.map +1 -1
- package/dist/react/select-nonprofit.js +1 -1
- package/dist/react/select-nonprofit.js.map +1 -1
- package/dist/react/select-subscription-nonprofit.d.ts +19 -0
- package/dist/react/select-subscription-nonprofit.esm.js +2 -0
- package/dist/react/select-subscription-nonprofit.esm.js.map +1 -0
- package/dist/react/select-subscription-nonprofit.js +2 -0
- package/dist/react/select-subscription-nonprofit.js.map +1 -0
- package/dist/react/social-share.d.ts +12 -0
- package/dist/react/social-share.esm.js +2 -0
- package/dist/react/social-share.esm.js.map +1 -0
- package/dist/react/social-share.js +2 -0
- package/dist/react/social-share.js.map +1 -0
- package/dist/react/subscription-impact.d.ts +13 -0
- package/dist/react/subscription-impact.esm.js +2 -0
- package/dist/react/subscription-impact.esm.js.map +1 -0
- package/dist/react/subscription-impact.js +2 -0
- package/dist/react/subscription-impact.js.map +1 -0
- package/dist/react/subscription-management.d.ts +9 -8
- package/dist/react/subscription-management.esm.js +1 -1
- package/dist/react/subscription-management.esm.js.map +1 -1
- package/dist/react/subscription-management.js +1 -1
- package/dist/react/subscription-management.js.map +1 -1
- package/dist/utils/events.d.ts +4 -4
- package/dist/utils/events.esm.js +1 -1
- package/dist/utils/events.js +1 -1
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/network-listeners.esm.js +1 -1
- package/dist/utils/network-listeners.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/_share-dialog-dependencies-1vD2dmjh.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-1vD2dmjh.esm.js.map +0 -1
- package/dist/chunks/_share-dialog-dependencies-jvbBs-cC.esm.js +0 -2
- package/dist/chunks/_share-dialog-dependencies-jvbBs-cC.esm.js.map +0 -1
- package/dist/chunks/index-8yrr7ZZv.esm.js.map +0 -1
- package/dist/chunks/index-EHubF2KN.esm.js +0 -2
- package/dist/chunks/index-EHubF2KN.esm.js.map +0 -1
- package/dist/chunks/index-FIfx75-P.esm.js +0 -2
- package/dist/chunks/index-FIfx75-P.esm.js.map +0 -1
- package/dist/chunks/index-GocMPeWn.esm.js +0 -2
- package/dist/chunks/index-GocMPeWn.esm.js.map +0 -1
- package/dist/chunks/index-HyzTMHYl.esm.js +0 -2
- package/dist/chunks/index-HyzTMHYl.esm.js.map +0 -1
- package/dist/chunks/index-LmCqzg5B.esm.js +0 -2
- package/dist/chunks/index-LmCqzg5B.esm.js.map +0 -1
- package/dist/chunks/index-Lw32NXij.esm.js.map +0 -1
- package/dist/chunks/index-V-BsPYtl.esm.js +0 -2
- package/dist/chunks/index-V-BsPYtl.esm.js.map +0 -1
- package/dist/chunks/index-bUooCSdc.esm.js +0 -2
- package/dist/chunks/index-bUooCSdc.esm.js.map +0 -1
- package/dist/chunks/index-cekgAcEE.esm.js +0 -2
- package/dist/chunks/index-cekgAcEE.esm.js.map +0 -1
- package/dist/chunks/index-fINTvZVX.esm.js +0 -2
- package/dist/chunks/index-iMRMlkF3.esm.js +0 -2
- package/dist/chunks/index-iMRMlkF3.esm.js.map +0 -1
- package/dist/chunks/index-kxMe_AX1.esm.js +0 -2
- package/dist/chunks/index-o7YiP4gC.esm.js +0 -2
- package/dist/chunks/index-o7YiP4gC.esm.js.map +0 -1
- package/dist/chunks/index-phDmC-TS.esm.js.map +0 -1
- package/dist/chunks/index-uF-Qtewb.esm.js.map +0 -1
- package/dist/chunks/lit-qtGbjGnK.esm.js.map +0 -1
- package/dist/chunks/loading-template-Av0IUyKF.esm.js +0 -2
- package/dist/chunks/localize-F31ae3j6.esm.js +0 -30
- package/dist/chunks/localize-F31ae3j6.esm.js.map +0 -1
- package/dist/chunks/localize-fH8KOrMi.esm.js +0 -30
- package/dist/chunks/localize-fH8KOrMi.esm.js.map +0 -1
- package/dist/chunks/order-page-0azkW5QD.esm.js +0 -2
- package/dist/chunks/order-page-0azkW5QD.esm.js.map +0 -1
- package/dist/chunks/order-page-DPx5SUKM.esm.d.ts +0 -255
- package/dist/chunks/order-page-n12hvsCN.esm.js +0 -2
- package/dist/chunks/order-page-n12hvsCN.esm.js.map +0 -1
- package/dist/chunks/progress-bar-Sn2QspHy.esm.js.map +0 -1
- package/dist/chunks/routes-31m626dW.esm.js +0 -2
- package/dist/chunks/routes-31m626dW.esm.js.map +0 -1
- package/dist/chunks/routes-sbqL3QFm.esm.js +0 -2
- package/dist/chunks/routes-sbqL3QFm.esm.js.map +0 -1
- package/dist/chunks/update-cart-NEt4A8dB.esm.js +0 -2
- package/dist/chunks/update-cart-NEt4A8dB.esm.js.map +0 -1
- package/dist/chunks/update-cart-XAwwFxhS.esm.js +0 -2
- package/dist/chunks/update-cart-XAwwFxhS.esm.js.map +0 -1
- package/dist/chunks/vendor-jQ8cxMpw.esm.js.map +0 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import{i as f}from"./is-all-html-elements-SdSkxirh.esm.js";import{h as x,y as m,Z as v,g as l}from"./lit-3QHn3fwl.esm.js";import"./vendor--f7lkyBk.esm.js";import{u as d,s as o}from"./share-button-CqTd80g8.esm.js";const y=(i,{source:t="contentLength"}={})=>{const a=i instanceof NodeList?Array.from(i):i;if(a.length===0||!f(a))return;const r=(t==="contentLength"?a.sort((e,n)=>n.innerText.length-e.innerText.length)[0]:a.sort((e,n)=>n.clientHeight-e.clientHeight)[0])?.clientHeight||0;for(const e of a)e.clientHeight!==r&&(e.style.height=r+"px")};function S(){return/Android|iPhone/i.test(navigator.userAgent)}var w=Object.defineProperty,k=Object.getOwnPropertyDescriptor,c=(i,t,a,r)=>{for(var e=r>1?void 0:r?k(t,a):t,n=i.length-1,h;n>=0;n--)(h=i[n])&&(e=(r?h(t,a,e):h(e))||e);return r&&e&&w(t,a,e),e};class s extends x{constructor(){super(...arguments),this.shareIcon=null,this.imageUrl=null,this.brandName=null,this.buttonText=null,this.configLang="en"}connectedCallback(){super.connectedCallback()}async handleShareClick(){try{if(!this.imageUrl||!this.brandName||!this.configLang)return;await import("./_share-dialog-dependencies-0XZ9j6DF.esm.js"),S()?this.openSystemShareSheet(this.imageUrl):this.handleShareDialog(this.imageUrl,this.brandName)}catch(t){console.error("Error sharing impact:",t)}}async handleShareDialog(t,a){if(!t)return;const r=this.shadowRoot?.querySelector("sl-dialog");if(r){r.show();return}await import("./_share-dialog-dependencies-0XZ9j6DF.esm.js");const e=this.shadowRoot?.querySelector("#modal-root"),n=await d(t),h=URL.createObjectURL(n),b=()=>{this.shadowRoot?.querySelector("sl-dialog")?.hide()},g=async()=>{await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),setTimeout(b,250)},u=()=>{setTimeout(b,250)},p=m`
|
|
2
|
+
<style>
|
|
3
|
+
.plain-button {
|
|
4
|
+
border: none;
|
|
5
|
+
background: none;
|
|
6
|
+
font-size: inherit;
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
}
|
|
9
|
+
.share-dialog::part(panel) {
|
|
10
|
+
padding: var(--beam-share-dialog-padding);
|
|
11
|
+
text-align: center;
|
|
12
|
+
}
|
|
13
|
+
.share-title {
|
|
14
|
+
font-size: var(--beam-share-title-fontSize);
|
|
15
|
+
font-weight: var(--beam-share-title-fontWeight);
|
|
16
|
+
}
|
|
17
|
+
.share-text {
|
|
18
|
+
font-size: var(--beam-share-text-fontSize);
|
|
19
|
+
line-height: var(--beam-share-text-lineHeight);
|
|
20
|
+
margin-top: var(--beam-share-text-marginTop);
|
|
21
|
+
}
|
|
22
|
+
.share-image {
|
|
23
|
+
border-radius: var(--beam-share-image-borderRadius);
|
|
24
|
+
width: var(--beam-share-image-width);
|
|
25
|
+
display: block;
|
|
26
|
+
margin: var(--beam-share-image-margin) auto;
|
|
27
|
+
}
|
|
28
|
+
.share-actions {
|
|
29
|
+
margin: var(--beam-share-actions-margin);
|
|
30
|
+
}
|
|
31
|
+
.share-action-button {
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
align-items: center;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
padding: 5px;
|
|
37
|
+
}
|
|
38
|
+
.share-action-icon {
|
|
39
|
+
font-size: var(--beam-share-action-icon-size);
|
|
40
|
+
}
|
|
41
|
+
.share-action-button:hover .share-action-icon {
|
|
42
|
+
scale: 1.1;
|
|
43
|
+
}
|
|
44
|
+
.share-action-text {
|
|
45
|
+
font-size: var(--beam-share-action-text-fontSize);
|
|
46
|
+
line-height: var(--beam-share-action-text-lineHeight);
|
|
47
|
+
margin-top: var(--beam-share-text-action-marginTop);
|
|
48
|
+
}
|
|
49
|
+
.plain-button {
|
|
50
|
+
border: none;
|
|
51
|
+
background: none;
|
|
52
|
+
font-size: inherit;
|
|
53
|
+
font-family: inherit;
|
|
54
|
+
}
|
|
55
|
+
.plain-link {
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
color: inherit;
|
|
58
|
+
}
|
|
59
|
+
.share-close {
|
|
60
|
+
display: block;
|
|
61
|
+
background-color: var(--beam-share-close-backgroundColor);
|
|
62
|
+
color: var(--beam-share-close-text-color);
|
|
63
|
+
justify-content: center;
|
|
64
|
+
padding: var(--beam-share-close-padding);
|
|
65
|
+
border-radius: var(--beam-share-close-borderRadius);
|
|
66
|
+
width: 100%;
|
|
67
|
+
font-size: var(--beam-share-close-fontSize);
|
|
68
|
+
font-weight: var(--beam-share-close-fontWeight);
|
|
69
|
+
}
|
|
70
|
+
.share-close:hover {
|
|
71
|
+
outline: 2px solid var(--beam-share-close-focus-borderColor);
|
|
72
|
+
}
|
|
73
|
+
</style>
|
|
74
|
+
<sl-dialog open label="${o[this.configLang].impactShareTitle()}" no-header class="share-dialog">
|
|
75
|
+
<h2 class="share-title">${o[this.configLang].impactShareTitle()}</h2>
|
|
76
|
+
<p class="share-text">${o[this.configLang].impactShareText({brandName:a})}</p>
|
|
77
|
+
<img src="${t}" alt="${o[this.configLang].impactShareTitle()}" class="share-image" />
|
|
78
|
+
<div class="share-actions" style="display: flex; justify-content: space-evenly">
|
|
79
|
+
<div style="flex: 1; text-align: center">
|
|
80
|
+
<button class="plain-button button share-action-button" @click="${g}">
|
|
81
|
+
<sl-icon
|
|
82
|
+
library="lucide"
|
|
83
|
+
name="copy"
|
|
84
|
+
label="${o[this.configLang].impactShareCopy()}"
|
|
85
|
+
class="share-action-icon"
|
|
86
|
+
></sl-icon>
|
|
87
|
+
<div class="share-action-text">${o[this.configLang].impactShareCopy()}</div>
|
|
88
|
+
</button>
|
|
89
|
+
</div>
|
|
90
|
+
<div style="flex: 1; text-align: center">
|
|
91
|
+
<a
|
|
92
|
+
class="plain-button button share-action-button plain-link"
|
|
93
|
+
download="${o[this.configLang].impactShareTitle()}"
|
|
94
|
+
href="${h}"
|
|
95
|
+
@click="${u}"
|
|
96
|
+
>
|
|
97
|
+
<sl-icon
|
|
98
|
+
library="lucide"
|
|
99
|
+
name="download"
|
|
100
|
+
label="${o[this.configLang].impactShareDownload()}"
|
|
101
|
+
class="share-action-icon"
|
|
102
|
+
></sl-icon>
|
|
103
|
+
<div class="share-action-text">${o[this.configLang].impactShareDownload()}</div>
|
|
104
|
+
</a>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
<button class="plain-button button share-close" @click="${b}">
|
|
108
|
+
${o[this.configLang].impactShareClose()}
|
|
109
|
+
</button>
|
|
110
|
+
</sl-dialog>
|
|
111
|
+
`;e&&v(p,e)}async openSystemShareSheet(t){if(!t)return;const a=await d(t);navigator.share&&await navigator.share({files:[a]})}disconnectedCallback(){super.disconnectedCallback()}render(){return!this.imageUrl||!this.brandName||!this.configLang?m``:m`
|
|
112
|
+
<style>
|
|
113
|
+
.share-button {
|
|
114
|
+
font-family: var(--beam-share-button-fontFamily);
|
|
115
|
+
font-size: var(--beam-share-button-fontSize);
|
|
116
|
+
font-weight: var(--beam-share-button-fontWeight);
|
|
117
|
+
margin-top: var(--beam-share-button-marginTop);
|
|
118
|
+
text-transform: var(--beam-share-button-textTransform);
|
|
119
|
+
line-height: var(--beam-share-button-lineHeight);
|
|
120
|
+
/* TODO: extract palette variable - sky-100 color */
|
|
121
|
+
background-color: var(--beam-share-button-backgroundColor);
|
|
122
|
+
color: var(--beam-share-button-color, inherit);
|
|
123
|
+
border-radius: var(--beam-share-button-borderRadius);
|
|
124
|
+
border-color: var(--beam-share-button-borderColor);
|
|
125
|
+
border-width: var(--beam-share-button-borderWidth);
|
|
126
|
+
/* add extra padding on side without icon for optical alignment */
|
|
127
|
+
padding: var(--beam-share-button-padding);
|
|
128
|
+
width: var(--beam-share-button-width);
|
|
129
|
+
transition: 0.15s;
|
|
130
|
+
}
|
|
131
|
+
.share-button:hover {
|
|
132
|
+
background-color: var(--beam-share-button-hover-backgroundColor);
|
|
133
|
+
color: var(--beam-share-button-hover-color);
|
|
134
|
+
border-color: var(--beam-share-button-hover-borderColor);
|
|
135
|
+
}
|
|
136
|
+
.share-button-text {
|
|
137
|
+
text-decoration: var(--beam-share-button-text-textDecoration);
|
|
138
|
+
margin-left: 0.33em;
|
|
139
|
+
}
|
|
140
|
+
.share-button-icon {
|
|
141
|
+
font-size: var(--beam-share-button-icon-size);
|
|
142
|
+
}
|
|
143
|
+
.button {
|
|
144
|
+
cursor: pointer;
|
|
145
|
+
}
|
|
146
|
+
.icon-button {
|
|
147
|
+
display: inline-flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: center;
|
|
150
|
+
}
|
|
151
|
+
</style>
|
|
152
|
+
<button @click="${this.handleShareClick}" class="share-button share-button-inline button icon-button">
|
|
153
|
+
<sl-icon
|
|
154
|
+
name="${this.shareIcon}"
|
|
155
|
+
library="lucide"
|
|
156
|
+
label="${o[this.configLang].impactShareButton()}"
|
|
157
|
+
class="share-button-icon"
|
|
158
|
+
></sl-icon>
|
|
159
|
+
<span class="share-button-text">${this.buttonText||o[this.configLang].impactShareButton()}</span>
|
|
160
|
+
</button>
|
|
161
|
+
<div id="modal-root"></div>
|
|
162
|
+
`}}c([l({type:String})],s.prototype,"shareIcon",2),c([l({type:String})],s.prototype,"imageUrl",2),c([l({type:String})],s.prototype,"brandName",2),c([l({type:String})],s.prototype,"buttonText",2),c([l({type:String})],s.prototype,"configLang",2),customElements.get("beam-share-button")||customElements.define("beam-share-button",s);const C={"--beam-share-button-fontFamily":"inherit","--beam-share-button-fontSize":"14px","--beam-share-button-fontWeight":"600","--beam-share-button-textTransform":"none","--beam-share-button-marginTop":"10px","--beam-share-button-padding":"8px 18px 8px 16px","--beam-share-button-lineHeight":"inherit","--beam-share-button-color":"#0A323C","--beam-share-button-backgroundColor":"#fff","--beam-share-button-borderRadius":"30px","--beam-share-button-borderColor":"#0A323C","--beam-share-button-borderWidth":"1px","--beam-share-button-width":"auto","--beam-share-button-hover-borderColor":"transparent","--beam-share-button-hover-backgroundColor":"#0A323C","--beam-share-button-hover-color":"#fff","--beam-share-button-icon-size":"16px","--beam-share-button-text-textDecoration":"none","--beam-share-dialog-padding":"30px 30px","--beam-share-title-fontSize":"30px","--beam-share-title-fontWeight":"bold","--beam-share-text-fontSize":"16px","--beam-share-text-lineHeight":"1.3","--beam-share-text-marginTop":"10px","--beam-share-image-borderRadius":"4px","--beam-share-image-width":"200px","--beam-share-image-margin":"20px","--beam-share-actions-margin":"30px 60px","--beam-share-action-icon-size":"32px","--beam-share-action-text-fontSize":"16px","--beam-share-action-text-lineHeight":"1.3","--beam-share-text-action-marginTop":"10px","--beam-share-close-backgroundColor":"#ffd522","--beam-share-close-text-color":"#000","--beam-share-close-padding":"12px","--beam-share-close-borderRadius":"4px","--beam-share-close-fontSize":"16px","--beam-share-close-fontWeight":"bold","--beam-share-close-focus-borderColor":"#c2dcff"};export{C as a,y as s};
|
|
163
|
+
//# sourceMappingURL=share-button-JqbM7N_4.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-button-JqbM7N_4.esm.js","sources":["../../src/shared/sync-element-heights.ts","../../src/shared/feature-detection.ts","../../src/shared/components/share-button.ts"],"sourcesContent":["import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize heights of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n * @param {'contentLength' | 'currentHeight'} [options.source='contentLength'] -\n * Method used to get the height value to sync across elements. `contentLength`\n * (innerText.length) is reliable for pure text content when responding to\n * window resizing. Otherwise, currentHeight can be used to sync the tallest\n * element's height to all the other elements. Note that this works poorly\n * unless content is allowed to reflow with explicit height attributes removed\n * between synchronization calls.\n */\nexport const syncElementHeights = (\n elements: Array<HTMLElement | null> | NodeList,\n {\n source = \"contentLength\",\n }: {\n source?: \"contentLength\" | \"currentHeight\";\n } = {}\n) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const heightSource =\n source === \"contentLength\"\n ? els.sort((a, b) => {\n return b.innerText.length - a.innerText.length;\n })[0]\n : els.sort((a, b) => {\n return b.clientHeight - a.clientHeight;\n })[0];\n\n const syncedHeight = heightSource?.clientHeight || 0;\n\n for (const el of els) {\n if (el.clientHeight !== syncedHeight) {\n el.style[\"height\"] = syncedHeight + \"px\";\n }\n }\n};\n","export function isMobile() {\n return /Android|iPhone/i.test(navigator.userAgent);\n}\n\nexport function hasSystemShare() {\n return !!navigator.share;\n}\n","import { LitElement, html, render } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { urlToFile } from \"../files\";\nimport { isMobile } from \"../feature-detection\";\nimport { strings } from \"./strings/share-button\";\n\ninterface SlDialogElement extends HTMLElement {\n show: () => void;\n hide: () => void;\n}\n\nexport class BeamShareButton extends LitElement {\n @property({ type: String }) shareIcon: string | null = null;\n @property({ type: String }) imageUrl?: string | null = null;\n @property({ type: String }) brandName: string | null = null;\n @property({ type: String }) buttonText?: string | null = null;\n @property({ type: String }) configLang: LANGUAGES = \"en\";\n\n connectedCallback() {\n super.connectedCallback();\n }\n\n async handleShareClick() {\n try {\n if (!this.imageUrl || !this.brandName || !this.configLang) return;\n await import(\"./_share-dialog-dependencies.js\");\n if (isMobile()) {\n this.openSystemShareSheet(this.imageUrl);\n } else {\n this.handleShareDialog(this.imageUrl, this.brandName);\n }\n } catch (err) {\n console.error(\"Error sharing impact:\", err);\n }\n }\n\n async handleShareDialog(imageUrl: string, brandName: string) {\n if (!imageUrl) return;\n\n const existingDialog = this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement;\n\n if (existingDialog) {\n existingDialog.show();\n return;\n }\n\n await import(\"./_share-dialog-dependencies.js\"); // Import libraries async to reduce bundle size if share feature is unused\n\n const modalRoot = this.shadowRoot?.querySelector(\"#modal-root\") as HTMLElement;\n\n const file = await urlToFile(imageUrl);\n\n const dataUrl = URL.createObjectURL(file);\n\n const handleClickClose = () => {\n (this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement)?.hide();\n };\n\n const handleClickCopy = async () => {\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": file })]);\n setTimeout(handleClickClose, 250);\n };\n\n const handleClickDownload = () => {\n setTimeout(handleClickClose, 250);\n };\n\n const dialogTemplate = html`\n <style>\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .share-dialog::part(panel) {\n padding: var(--beam-share-dialog-padding);\n text-align: center;\n }\n .share-title {\n font-size: var(--beam-share-title-fontSize);\n font-weight: var(--beam-share-title-fontWeight);\n }\n .share-text {\n font-size: var(--beam-share-text-fontSize);\n line-height: var(--beam-share-text-lineHeight);\n margin-top: var(--beam-share-text-marginTop);\n }\n .share-image {\n border-radius: var(--beam-share-image-borderRadius);\n width: var(--beam-share-image-width);\n display: block;\n margin: var(--beam-share-image-margin) auto;\n }\n .share-actions {\n margin: var(--beam-share-actions-margin);\n }\n .share-action-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding: 5px;\n }\n .share-action-icon {\n font-size: var(--beam-share-action-icon-size);\n }\n .share-action-button:hover .share-action-icon {\n scale: 1.1;\n }\n .share-action-text {\n font-size: var(--beam-share-action-text-fontSize);\n line-height: var(--beam-share-action-text-lineHeight);\n margin-top: var(--beam-share-text-action-marginTop);\n }\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .plain-link {\n text-decoration: none;\n color: inherit;\n }\n .share-close {\n display: block;\n background-color: var(--beam-share-close-backgroundColor);\n color: var(--beam-share-close-text-color);\n justify-content: center;\n padding: var(--beam-share-close-padding);\n border-radius: var(--beam-share-close-borderRadius);\n width: 100%;\n font-size: var(--beam-share-close-fontSize);\n font-weight: var(--beam-share-close-fontWeight);\n }\n .share-close:hover {\n outline: 2px solid var(--beam-share-close-focus-borderColor);\n }\n </style>\n <sl-dialog open label=\"${strings[this.configLang].impactShareTitle()}\" no-header class=\"share-dialog\">\n <h2 class=\"share-title\">${strings[this.configLang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.configLang].impactShareText({ brandName })}</p>\n <img src=\"${imageUrl}\" alt=\"${strings[this.configLang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\" style=\"display: flex; justify-content: space-evenly\">\n <div style=\"flex: 1; text-align: center\">\n <button class=\"plain-button button share-action-button\" @click=\"${handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.configLang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareCopy()}</div>\n </button>\n </div>\n <div style=\"flex: 1; text-align: center\">\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.configLang].impactShareTitle()}\"\n href=\"${dataUrl}\"\n @click=\"${handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.configLang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n <button class=\"plain-button button share-close\" @click=\"${handleClickClose}\">\n ${strings[this.configLang].impactShareClose()}\n </button>\n </sl-dialog>\n `;\n if (modalRoot) {\n render(dialogTemplate, modalRoot);\n }\n }\n\n async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n const file = await urlToFile(imageUrl);\n\n if (navigator.share) {\n await navigator.share({\n files: [file],\n });\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n render() {\n if (!this.imageUrl || !this.brandName || !this.configLang) return html``;\n return html`\n <style>\n .share-button {\n font-family: var(--beam-share-button-fontFamily);\n font-size: var(--beam-share-button-fontSize);\n font-weight: var(--beam-share-button-fontWeight);\n margin-top: var(--beam-share-button-marginTop);\n text-transform: var(--beam-share-button-textTransform);\n line-height: var(--beam-share-button-lineHeight);\n /* TODO: extract palette variable - sky-100 color */\n background-color: var(--beam-share-button-backgroundColor);\n color: var(--beam-share-button-color, inherit);\n border-radius: var(--beam-share-button-borderRadius);\n border-color: var(--beam-share-button-borderColor);\n border-width: var(--beam-share-button-borderWidth);\n /* add extra padding on side without icon for optical alignment */\n padding: var(--beam-share-button-padding);\n width: var(--beam-share-button-width);\n transition: 0.15s;\n }\n .share-button:hover {\n background-color: var(--beam-share-button-hover-backgroundColor);\n color: var(--beam-share-button-hover-color);\n border-color: var(--beam-share-button-hover-borderColor);\n }\n .share-button-text {\n text-decoration: var(--beam-share-button-text-textDecoration);\n margin-left: 0.33em;\n }\n .share-button-icon {\n font-size: var(--beam-share-button-icon-size);\n }\n .button {\n cursor: pointer;\n }\n .icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n </style>\n <button @click=\"${this.handleShareClick}\" class=\"share-button share-button-inline button icon-button\">\n <sl-icon\n name=\"${this.shareIcon}\"\n library=\"lucide\"\n label=\"${strings[this.configLang].impactShareButton()}\"\n class=\"share-button-icon\"\n ></sl-icon>\n <span class=\"share-button-text\">${this.buttonText || strings[this.configLang].impactShareButton()}</span>\n </button>\n <div id=\"modal-root\"></div>\n `;\n }\n}\n\ncustomElements.get(\"beam-share-button\") || customElements.define(\"beam-share-button\", BeamShareButton);\n\nexport const shareButtonConfigDefaults = {\n \"--beam-share-button-fontFamily\": \"inherit\",\n \"--beam-share-button-fontSize\": \"14px\",\n \"--beam-share-button-fontWeight\": \"600\",\n \"--beam-share-button-textTransform\": \"none\",\n \"--beam-share-button-marginTop\": \"10px\",\n \"--beam-share-button-padding\": \"8px 18px 8px 16px\",\n \"--beam-share-button-lineHeight\": \"inherit\",\n \"--beam-share-button-color\": \"#0A323C\",\n \"--beam-share-button-backgroundColor\": \"#fff\",\n \"--beam-share-button-borderRadius\": \"30px\",\n \"--beam-share-button-borderColor\": \"#0A323C\",\n \"--beam-share-button-borderWidth\": \"1px\",\n\n \"--beam-share-button-width\": \"auto\",\n\n \"--beam-share-button-hover-borderColor\": \"transparent\",\n \"--beam-share-button-hover-backgroundColor\": \"#0A323C\",\n \"--beam-share-button-hover-color\": \"#fff\",\n\n \"--beam-share-button-icon-size\": \"16px\",\n\n \"--beam-share-button-text-textDecoration\": \"none\",\n\n \"--beam-share-dialog-padding\": \"30px 30px\",\n\n \"--beam-share-title-fontSize\": \"30px\",\n \"--beam-share-title-fontWeight\": \"bold\",\n\n \"--beam-share-text-fontSize\": \"16px\",\n \"--beam-share-text-lineHeight\": \"1.3\",\n \"--beam-share-text-marginTop\": \"10px\",\n\n \"--beam-share-image-borderRadius\": \"4px\",\n \"--beam-share-image-width\": \"200px\",\n \"--beam-share-image-margin\": \"20px\",\n\n \"--beam-share-actions-margin\": \"30px 60px\",\n \"--beam-share-action-icon-size\": \"32px\",\n\n \"--beam-share-action-text-fontSize\": \"16px\",\n \"--beam-share-action-text-lineHeight\": \"1.3\",\n \"--beam-share-text-action-marginTop\": \"10px\",\n\n \"--beam-share-close-backgroundColor\": \"#ffd522\",\n \"--beam-share-close-text-color\": \"#000\",\n \"--beam-share-close-padding\": \"12px\",\n \"--beam-share-close-borderRadius\": \"4px\",\n \"--beam-share-close-fontSize\": \"16px\",\n \"--beam-share-close-fontWeight\": \"bold\",\n\n \"--beam-share-close-focus-borderColor\": \"#c2dcff\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-share-button\": BeamShareButton;\n }\n}\n"],"names":["syncElementHeights","elements","source","els","isAllHtmlElements","syncedHeight","a","b","el","isMobile","f","x","i","h","s","e","o","t","r","n","BeamShareButton","LitElement","err","imageUrl","brandName","existingDialog","modalRoot","file","urlToFile","dataUrl","handleClickClose","handleClickCopy","handleClickDownload","dialogTemplate","html","strings","render","__decorateClass","property","shareButtonConfigDefaults"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as lit_html from 'lit-html';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
import { L as LANGUAGES } from './types-aju0qrRe.esm.js';
|
|
4
|
+
|
|
5
|
+
declare class BeamShareButton extends LitElement {
|
|
6
|
+
shareIcon: string | null;
|
|
7
|
+
imageUrl?: string | null;
|
|
8
|
+
brandName: string | null;
|
|
9
|
+
buttonText?: string | null;
|
|
10
|
+
configLang: LANGUAGES;
|
|
11
|
+
connectedCallback(): void;
|
|
12
|
+
handleShareClick(): Promise<void>;
|
|
13
|
+
handleShareDialog(imageUrl: string, brandName: string): Promise<void>;
|
|
14
|
+
openSystemShareSheet(imageUrl: string): Promise<void>;
|
|
15
|
+
disconnectedCallback(): void;
|
|
16
|
+
render(): lit_html.TemplateResult<1>;
|
|
17
|
+
}
|
|
18
|
+
declare global {
|
|
19
|
+
interface HTMLElementTagNameMap {
|
|
20
|
+
"beam-share-button": BeamShareButton;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import{i as f}from"./is-all-html-elements-SdSkxirh.esm.js";import{h as x,y as m,Z as v,g as l}from"./lit-3QHn3fwl.esm.js";import"./vendor--f7lkyBk.esm.js";import{u as d,s as o}from"./share-button-CqTd80g8.esm.js";const y=(i,{source:t="contentLength"}={})=>{const a=i instanceof NodeList?Array.from(i):i;if(a.length===0||!f(a))return;const r=(t==="contentLength"?a.sort((e,n)=>n.innerText.length-e.innerText.length)[0]:a.sort((e,n)=>n.clientHeight-e.clientHeight)[0])?.clientHeight||0;for(const e of a)e.clientHeight!==r&&(e.style.height=r+"px")};function S(){return/Android|iPhone/i.test(navigator.userAgent)}var w=Object.defineProperty,k=Object.getOwnPropertyDescriptor,c=(i,t,a,r)=>{for(var e=r>1?void 0:r?k(t,a):t,n=i.length-1,h;n>=0;n--)(h=i[n])&&(e=(r?h(t,a,e):h(e))||e);return r&&e&&w(t,a,e),e};class s extends x{constructor(){super(...arguments),this.shareIcon=null,this.imageUrl=null,this.brandName=null,this.buttonText=null,this.configLang="en"}connectedCallback(){super.connectedCallback()}async handleShareClick(){try{if(!this.imageUrl||!this.brandName||!this.configLang)return;await import("./_share-dialog-dependencies-cBi8GG00.esm.js"),S()?this.openSystemShareSheet(this.imageUrl):this.handleShareDialog(this.imageUrl,this.brandName)}catch(t){console.error("Error sharing impact:",t)}}async handleShareDialog(t,a){if(!t)return;const r=this.shadowRoot?.querySelector("sl-dialog");if(r){r.show();return}await import("./_share-dialog-dependencies-cBi8GG00.esm.js");const e=this.shadowRoot?.querySelector("#modal-root"),n=await d(t),h=URL.createObjectURL(n),b=()=>{this.shadowRoot?.querySelector("sl-dialog")?.hide()},g=async()=>{await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),setTimeout(b,250)},u=()=>{setTimeout(b,250)},p=m`
|
|
2
|
+
<style>
|
|
3
|
+
.plain-button {
|
|
4
|
+
border: none;
|
|
5
|
+
background: none;
|
|
6
|
+
font-size: inherit;
|
|
7
|
+
font-family: inherit;
|
|
8
|
+
}
|
|
9
|
+
.share-dialog::part(panel) {
|
|
10
|
+
padding: var(--beam-share-dialog-padding);
|
|
11
|
+
text-align: center;
|
|
12
|
+
}
|
|
13
|
+
.share-title {
|
|
14
|
+
font-size: var(--beam-share-title-fontSize);
|
|
15
|
+
font-weight: var(--beam-share-title-fontWeight);
|
|
16
|
+
}
|
|
17
|
+
.share-text {
|
|
18
|
+
font-size: var(--beam-share-text-fontSize);
|
|
19
|
+
line-height: var(--beam-share-text-lineHeight);
|
|
20
|
+
margin-top: var(--beam-share-text-marginTop);
|
|
21
|
+
}
|
|
22
|
+
.share-image {
|
|
23
|
+
border-radius: var(--beam-share-image-borderRadius);
|
|
24
|
+
width: var(--beam-share-image-width);
|
|
25
|
+
display: block;
|
|
26
|
+
margin: var(--beam-share-image-margin) auto;
|
|
27
|
+
}
|
|
28
|
+
.share-actions {
|
|
29
|
+
margin: var(--beam-share-actions-margin);
|
|
30
|
+
}
|
|
31
|
+
.share-action-button {
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
align-items: center;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
padding: 5px;
|
|
37
|
+
}
|
|
38
|
+
.share-action-icon {
|
|
39
|
+
font-size: var(--beam-share-action-icon-size);
|
|
40
|
+
}
|
|
41
|
+
.share-action-button:hover .share-action-icon {
|
|
42
|
+
scale: 1.1;
|
|
43
|
+
}
|
|
44
|
+
.share-action-text {
|
|
45
|
+
font-size: var(--beam-share-action-text-fontSize);
|
|
46
|
+
line-height: var(--beam-share-action-text-lineHeight);
|
|
47
|
+
margin-top: var(--beam-share-text-action-marginTop);
|
|
48
|
+
}
|
|
49
|
+
.plain-button {
|
|
50
|
+
border: none;
|
|
51
|
+
background: none;
|
|
52
|
+
font-size: inherit;
|
|
53
|
+
font-family: inherit;
|
|
54
|
+
}
|
|
55
|
+
.plain-link {
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
color: inherit;
|
|
58
|
+
}
|
|
59
|
+
.share-close {
|
|
60
|
+
display: block;
|
|
61
|
+
background-color: var(--beam-share-close-backgroundColor);
|
|
62
|
+
color: var(--beam-share-close-text-color);
|
|
63
|
+
justify-content: center;
|
|
64
|
+
padding: var(--beam-share-close-padding);
|
|
65
|
+
border-radius: var(--beam-share-close-borderRadius);
|
|
66
|
+
width: 100%;
|
|
67
|
+
font-size: var(--beam-share-close-fontSize);
|
|
68
|
+
font-weight: var(--beam-share-close-fontWeight);
|
|
69
|
+
}
|
|
70
|
+
.share-close:hover {
|
|
71
|
+
outline: 2px solid var(--beam-share-close-focus-borderColor);
|
|
72
|
+
}
|
|
73
|
+
</style>
|
|
74
|
+
<sl-dialog open label="${o[this.configLang].impactShareTitle()}" no-header class="share-dialog">
|
|
75
|
+
<h2 class="share-title">${o[this.configLang].impactShareTitle()}</h2>
|
|
76
|
+
<p class="share-text">${o[this.configLang].impactShareText({brandName:a})}</p>
|
|
77
|
+
<img src="${t}" alt="${o[this.configLang].impactShareTitle()}" class="share-image" />
|
|
78
|
+
<div class="share-actions" style="display: flex; justify-content: space-evenly">
|
|
79
|
+
<div style="flex: 1; text-align: center">
|
|
80
|
+
<button class="plain-button button share-action-button" @click="${g}">
|
|
81
|
+
<sl-icon
|
|
82
|
+
library="lucide"
|
|
83
|
+
name="copy"
|
|
84
|
+
label="${o[this.configLang].impactShareCopy()}"
|
|
85
|
+
class="share-action-icon"
|
|
86
|
+
></sl-icon>
|
|
87
|
+
<div class="share-action-text">${o[this.configLang].impactShareCopy()}</div>
|
|
88
|
+
</button>
|
|
89
|
+
</div>
|
|
90
|
+
<div style="flex: 1; text-align: center">
|
|
91
|
+
<a
|
|
92
|
+
class="plain-button button share-action-button plain-link"
|
|
93
|
+
download="${o[this.configLang].impactShareTitle()}"
|
|
94
|
+
href="${h}"
|
|
95
|
+
@click="${u}"
|
|
96
|
+
>
|
|
97
|
+
<sl-icon
|
|
98
|
+
library="lucide"
|
|
99
|
+
name="download"
|
|
100
|
+
label="${o[this.configLang].impactShareDownload()}"
|
|
101
|
+
class="share-action-icon"
|
|
102
|
+
></sl-icon>
|
|
103
|
+
<div class="share-action-text">${o[this.configLang].impactShareDownload()}</div>
|
|
104
|
+
</a>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
<button class="plain-button button share-close" @click="${b}">
|
|
108
|
+
${o[this.configLang].impactShareClose()}
|
|
109
|
+
</button>
|
|
110
|
+
</sl-dialog>
|
|
111
|
+
`;e&&v(p,e)}async openSystemShareSheet(t){if(!t)return;const a=await d(t);navigator.share&&await navigator.share({files:[a]})}disconnectedCallback(){super.disconnectedCallback()}render(){return!this.imageUrl||!this.brandName||!this.configLang?m``:m`
|
|
112
|
+
<style>
|
|
113
|
+
.share-button {
|
|
114
|
+
font-family: var(--beam-share-button-fontFamily);
|
|
115
|
+
font-size: var(--beam-share-button-fontSize);
|
|
116
|
+
font-weight: var(--beam-share-button-fontWeight);
|
|
117
|
+
margin-top: var(--beam-share-button-marginTop);
|
|
118
|
+
text-transform: var(--beam-share-button-textTransform);
|
|
119
|
+
line-height: var(--beam-share-button-lineHeight);
|
|
120
|
+
/* TODO: extract palette variable - sky-100 color */
|
|
121
|
+
background-color: var(--beam-share-button-backgroundColor);
|
|
122
|
+
color: var(--beam-share-button-color, inherit);
|
|
123
|
+
border-radius: var(--beam-share-button-borderRadius);
|
|
124
|
+
border-color: var(--beam-share-button-borderColor);
|
|
125
|
+
border-width: var(--beam-share-button-borderWidth);
|
|
126
|
+
/* add extra padding on side without icon for optical alignment */
|
|
127
|
+
padding: var(--beam-share-button-padding);
|
|
128
|
+
width: var(--beam-share-button-width);
|
|
129
|
+
transition: 0.15s;
|
|
130
|
+
}
|
|
131
|
+
.share-button:hover {
|
|
132
|
+
background-color: var(--beam-share-button-hover-backgroundColor);
|
|
133
|
+
color: var(--beam-share-button-hover-color);
|
|
134
|
+
border-color: var(--beam-share-button-hover-borderColor);
|
|
135
|
+
}
|
|
136
|
+
.share-button-text {
|
|
137
|
+
text-decoration: var(--beam-share-button-text-textDecoration);
|
|
138
|
+
margin-left: 0.33em;
|
|
139
|
+
}
|
|
140
|
+
.share-button-icon {
|
|
141
|
+
font-size: var(--beam-share-button-icon-size);
|
|
142
|
+
}
|
|
143
|
+
.button {
|
|
144
|
+
cursor: pointer;
|
|
145
|
+
}
|
|
146
|
+
.icon-button {
|
|
147
|
+
display: inline-flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
justify-content: center;
|
|
150
|
+
}
|
|
151
|
+
</style>
|
|
152
|
+
<button @click="${this.handleShareClick}" class="share-button share-button-inline button icon-button">
|
|
153
|
+
<sl-icon
|
|
154
|
+
name="${this.shareIcon}"
|
|
155
|
+
library="lucide"
|
|
156
|
+
label="${o[this.configLang].impactShareButton()}"
|
|
157
|
+
class="share-button-icon"
|
|
158
|
+
></sl-icon>
|
|
159
|
+
<span class="share-button-text">${this.buttonText||o[this.configLang].impactShareButton()}</span>
|
|
160
|
+
</button>
|
|
161
|
+
<div id="modal-root"></div>
|
|
162
|
+
`}}c([l({type:String})],s.prototype,"shareIcon",2),c([l({type:String})],s.prototype,"imageUrl",2),c([l({type:String})],s.prototype,"brandName",2),c([l({type:String})],s.prototype,"buttonText",2),c([l({type:String})],s.prototype,"configLang",2),customElements.get("beam-share-button")||customElements.define("beam-share-button",s);const C={"--beam-share-button-fontFamily":"inherit","--beam-share-button-fontSize":"14px","--beam-share-button-fontWeight":"600","--beam-share-button-textTransform":"none","--beam-share-button-marginTop":"10px","--beam-share-button-padding":"8px 18px 8px 16px","--beam-share-button-lineHeight":"inherit","--beam-share-button-color":"#0A323C","--beam-share-button-backgroundColor":"#fff","--beam-share-button-borderRadius":"30px","--beam-share-button-borderColor":"#0A323C","--beam-share-button-borderWidth":"1px","--beam-share-button-width":"auto","--beam-share-button-hover-borderColor":"transparent","--beam-share-button-hover-backgroundColor":"#0A323C","--beam-share-button-hover-color":"#fff","--beam-share-button-icon-size":"16px","--beam-share-button-text-textDecoration":"none","--beam-share-dialog-padding":"30px 30px","--beam-share-title-fontSize":"30px","--beam-share-title-fontWeight":"bold","--beam-share-text-fontSize":"16px","--beam-share-text-lineHeight":"1.3","--beam-share-text-marginTop":"10px","--beam-share-image-borderRadius":"4px","--beam-share-image-width":"200px","--beam-share-image-margin":"20px","--beam-share-actions-margin":"30px 60px","--beam-share-action-icon-size":"32px","--beam-share-action-text-fontSize":"16px","--beam-share-action-text-lineHeight":"1.3","--beam-share-text-action-marginTop":"10px","--beam-share-close-backgroundColor":"#ffd522","--beam-share-close-text-color":"#000","--beam-share-close-padding":"12px","--beam-share-close-borderRadius":"4px","--beam-share-close-fontSize":"16px","--beam-share-close-fontWeight":"bold","--beam-share-close-focus-borderColor":"#c2dcff"};export{C as a,y as s};
|
|
163
|
+
//# sourceMappingURL=share-button-jpa1X3FA.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-button-jpa1X3FA.esm.js","sources":["../../src/shared/sync-element-heights.ts","../../src/shared/feature-detection.ts","../../src/shared/components/share-button.ts"],"sourcesContent":["import { isAllHtmlElements } from \"./is-all-html-elements\";\n\n/**\n * Synchronize heights of elements\n * @param {Array<HTMLElement|null>} elements - Elements to synchronize\n * @param {'contentLength' | 'currentHeight'} [options.source='contentLength'] -\n * Method used to get the height value to sync across elements. `contentLength`\n * (innerText.length) is reliable for pure text content when responding to\n * window resizing. Otherwise, currentHeight can be used to sync the tallest\n * element's height to all the other elements. Note that this works poorly\n * unless content is allowed to reflow with explicit height attributes removed\n * between synchronization calls.\n */\nexport const syncElementHeights = (\n elements: Array<HTMLElement | null> | NodeList,\n {\n source = \"contentLength\",\n }: {\n source?: \"contentLength\" | \"currentHeight\";\n } = {}\n) => {\n const els = elements instanceof NodeList ? Array.from(elements) : elements;\n\n if (els.length === 0 || !isAllHtmlElements(els)) {\n return;\n }\n\n const heightSource =\n source === \"contentLength\"\n ? els.sort((a, b) => {\n return b.innerText.length - a.innerText.length;\n })[0]\n : els.sort((a, b) => {\n return b.clientHeight - a.clientHeight;\n })[0];\n\n const syncedHeight = heightSource?.clientHeight || 0;\n\n for (const el of els) {\n if (el.clientHeight !== syncedHeight) {\n el.style[\"height\"] = syncedHeight + \"px\";\n }\n }\n};\n","export function isMobile() {\n return /Android|iPhone/i.test(navigator.userAgent);\n}\n\nexport function hasSystemShare() {\n return !!navigator.share;\n}\n","import { LitElement, html, render } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport \"@shoelace-style/shoelace/dist/components/icon/icon.js\";\nimport { LANGUAGES } from \"../../api-sdk/types\";\nimport { urlToFile } from \"../files\";\nimport { isMobile } from \"../feature-detection\";\nimport { strings } from \"./strings/share-button\";\n\ninterface SlDialogElement extends HTMLElement {\n show: () => void;\n hide: () => void;\n}\n\nexport class BeamShareButton extends LitElement {\n @property({ type: String }) shareIcon: string | null = null;\n @property({ type: String }) imageUrl?: string | null = null;\n @property({ type: String }) brandName: string | null = null;\n @property({ type: String }) buttonText?: string | null = null;\n @property({ type: String }) configLang: LANGUAGES = \"en\";\n\n connectedCallback() {\n super.connectedCallback();\n }\n\n async handleShareClick() {\n try {\n if (!this.imageUrl || !this.brandName || !this.configLang) return;\n await import(\"./_share-dialog-dependencies.js\");\n if (isMobile()) {\n this.openSystemShareSheet(this.imageUrl);\n } else {\n this.handleShareDialog(this.imageUrl, this.brandName);\n }\n } catch (err) {\n console.error(\"Error sharing impact:\", err);\n }\n }\n\n async handleShareDialog(imageUrl: string, brandName: string) {\n if (!imageUrl) return;\n\n const existingDialog = this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement;\n\n if (existingDialog) {\n existingDialog.show();\n return;\n }\n\n await import(\"./_share-dialog-dependencies.js\"); // Import libraries async to reduce bundle size if share feature is unused\n\n const modalRoot = this.shadowRoot?.querySelector(\"#modal-root\") as HTMLElement;\n\n const file = await urlToFile(imageUrl);\n\n const dataUrl = URL.createObjectURL(file);\n\n const handleClickClose = () => {\n (this.shadowRoot?.querySelector(\"sl-dialog\") as SlDialogElement)?.hide();\n };\n\n const handleClickCopy = async () => {\n await navigator.clipboard.write([new ClipboardItem({ \"image/png\": file })]);\n setTimeout(handleClickClose, 250);\n };\n\n const handleClickDownload = () => {\n setTimeout(handleClickClose, 250);\n };\n\n const dialogTemplate = html`\n <style>\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .share-dialog::part(panel) {\n padding: var(--beam-share-dialog-padding);\n text-align: center;\n }\n .share-title {\n font-size: var(--beam-share-title-fontSize);\n font-weight: var(--beam-share-title-fontWeight);\n }\n .share-text {\n font-size: var(--beam-share-text-fontSize);\n line-height: var(--beam-share-text-lineHeight);\n margin-top: var(--beam-share-text-marginTop);\n }\n .share-image {\n border-radius: var(--beam-share-image-borderRadius);\n width: var(--beam-share-image-width);\n display: block;\n margin: var(--beam-share-image-margin) auto;\n }\n .share-actions {\n margin: var(--beam-share-actions-margin);\n }\n .share-action-button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding: 5px;\n }\n .share-action-icon {\n font-size: var(--beam-share-action-icon-size);\n }\n .share-action-button:hover .share-action-icon {\n scale: 1.1;\n }\n .share-action-text {\n font-size: var(--beam-share-action-text-fontSize);\n line-height: var(--beam-share-action-text-lineHeight);\n margin-top: var(--beam-share-text-action-marginTop);\n }\n .plain-button {\n border: none;\n background: none;\n font-size: inherit;\n font-family: inherit;\n }\n .plain-link {\n text-decoration: none;\n color: inherit;\n }\n .share-close {\n display: block;\n background-color: var(--beam-share-close-backgroundColor);\n color: var(--beam-share-close-text-color);\n justify-content: center;\n padding: var(--beam-share-close-padding);\n border-radius: var(--beam-share-close-borderRadius);\n width: 100%;\n font-size: var(--beam-share-close-fontSize);\n font-weight: var(--beam-share-close-fontWeight);\n }\n .share-close:hover {\n outline: 2px solid var(--beam-share-close-focus-borderColor);\n }\n </style>\n <sl-dialog open label=\"${strings[this.configLang].impactShareTitle()}\" no-header class=\"share-dialog\">\n <h2 class=\"share-title\">${strings[this.configLang].impactShareTitle()}</h2>\n <p class=\"share-text\">${strings[this.configLang].impactShareText({ brandName })}</p>\n <img src=\"${imageUrl}\" alt=\"${strings[this.configLang].impactShareTitle()}\" class=\"share-image\" />\n <div class=\"share-actions\" style=\"display: flex; justify-content: space-evenly\">\n <div style=\"flex: 1; text-align: center\">\n <button class=\"plain-button button share-action-button\" @click=\"${handleClickCopy}\">\n <sl-icon\n library=\"lucide\"\n name=\"copy\"\n label=\"${strings[this.configLang].impactShareCopy()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareCopy()}</div>\n </button>\n </div>\n <div style=\"flex: 1; text-align: center\">\n <a\n class=\"plain-button button share-action-button plain-link\"\n download=\"${strings[this.configLang].impactShareTitle()}\"\n href=\"${dataUrl}\"\n @click=\"${handleClickDownload}\"\n >\n <sl-icon\n library=\"lucide\"\n name=\"download\"\n label=\"${strings[this.configLang].impactShareDownload()}\"\n class=\"share-action-icon\"\n ></sl-icon>\n <div class=\"share-action-text\">${strings[this.configLang].impactShareDownload()}</div>\n </a>\n </div>\n </div>\n <button class=\"plain-button button share-close\" @click=\"${handleClickClose}\">\n ${strings[this.configLang].impactShareClose()}\n </button>\n </sl-dialog>\n `;\n if (modalRoot) {\n render(dialogTemplate, modalRoot);\n }\n }\n\n async openSystemShareSheet(imageUrl: string) {\n if (!imageUrl) return;\n\n const file = await urlToFile(imageUrl);\n\n if (navigator.share) {\n await navigator.share({\n files: [file],\n });\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n }\n render() {\n if (!this.imageUrl || !this.brandName || !this.configLang) return html``;\n return html`\n <style>\n .share-button {\n font-family: var(--beam-share-button-fontFamily);\n font-size: var(--beam-share-button-fontSize);\n font-weight: var(--beam-share-button-fontWeight);\n margin-top: var(--beam-share-button-marginTop);\n text-transform: var(--beam-share-button-textTransform);\n line-height: var(--beam-share-button-lineHeight);\n /* TODO: extract palette variable - sky-100 color */\n background-color: var(--beam-share-button-backgroundColor);\n color: var(--beam-share-button-color, inherit);\n border-radius: var(--beam-share-button-borderRadius);\n border-color: var(--beam-share-button-borderColor);\n border-width: var(--beam-share-button-borderWidth);\n /* add extra padding on side without icon for optical alignment */\n padding: var(--beam-share-button-padding);\n width: var(--beam-share-button-width);\n transition: 0.15s;\n }\n .share-button:hover {\n background-color: var(--beam-share-button-hover-backgroundColor);\n color: var(--beam-share-button-hover-color);\n border-color: var(--beam-share-button-hover-borderColor);\n }\n .share-button-text {\n text-decoration: var(--beam-share-button-text-textDecoration);\n margin-left: 0.33em;\n }\n .share-button-icon {\n font-size: var(--beam-share-button-icon-size);\n }\n .button {\n cursor: pointer;\n }\n .icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n </style>\n <button @click=\"${this.handleShareClick}\" class=\"share-button share-button-inline button icon-button\">\n <sl-icon\n name=\"${this.shareIcon}\"\n library=\"lucide\"\n label=\"${strings[this.configLang].impactShareButton()}\"\n class=\"share-button-icon\"\n ></sl-icon>\n <span class=\"share-button-text\">${this.buttonText || strings[this.configLang].impactShareButton()}</span>\n </button>\n <div id=\"modal-root\"></div>\n `;\n }\n}\n\ncustomElements.get(\"beam-share-button\") || customElements.define(\"beam-share-button\", BeamShareButton);\n\nexport const shareButtonConfigDefaults = {\n \"--beam-share-button-fontFamily\": \"inherit\",\n \"--beam-share-button-fontSize\": \"14px\",\n \"--beam-share-button-fontWeight\": \"600\",\n \"--beam-share-button-textTransform\": \"none\",\n \"--beam-share-button-marginTop\": \"10px\",\n \"--beam-share-button-padding\": \"8px 18px 8px 16px\",\n \"--beam-share-button-lineHeight\": \"inherit\",\n \"--beam-share-button-color\": \"#0A323C\",\n \"--beam-share-button-backgroundColor\": \"#fff\",\n \"--beam-share-button-borderRadius\": \"30px\",\n \"--beam-share-button-borderColor\": \"#0A323C\",\n \"--beam-share-button-borderWidth\": \"1px\",\n\n \"--beam-share-button-width\": \"auto\",\n\n \"--beam-share-button-hover-borderColor\": \"transparent\",\n \"--beam-share-button-hover-backgroundColor\": \"#0A323C\",\n \"--beam-share-button-hover-color\": \"#fff\",\n\n \"--beam-share-button-icon-size\": \"16px\",\n\n \"--beam-share-button-text-textDecoration\": \"none\",\n\n \"--beam-share-dialog-padding\": \"30px 30px\",\n\n \"--beam-share-title-fontSize\": \"30px\",\n \"--beam-share-title-fontWeight\": \"bold\",\n\n \"--beam-share-text-fontSize\": \"16px\",\n \"--beam-share-text-lineHeight\": \"1.3\",\n \"--beam-share-text-marginTop\": \"10px\",\n\n \"--beam-share-image-borderRadius\": \"4px\",\n \"--beam-share-image-width\": \"200px\",\n \"--beam-share-image-margin\": \"20px\",\n\n \"--beam-share-actions-margin\": \"30px 60px\",\n \"--beam-share-action-icon-size\": \"32px\",\n\n \"--beam-share-action-text-fontSize\": \"16px\",\n \"--beam-share-action-text-lineHeight\": \"1.3\",\n \"--beam-share-text-action-marginTop\": \"10px\",\n\n \"--beam-share-close-backgroundColor\": \"#ffd522\",\n \"--beam-share-close-text-color\": \"#000\",\n \"--beam-share-close-padding\": \"12px\",\n \"--beam-share-close-borderRadius\": \"4px\",\n \"--beam-share-close-fontSize\": \"16px\",\n \"--beam-share-close-fontWeight\": \"bold\",\n\n \"--beam-share-close-focus-borderColor\": \"#c2dcff\",\n} as const;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"beam-share-button\": BeamShareButton;\n }\n}\n"],"names":["syncElementHeights","elements","source","els","isAllHtmlElements","syncedHeight","a","b","el","isMobile","f","x","i","h","s","e","o","t","r","n","BeamShareButton","LitElement","err","imageUrl","brandName","existingDialog","modalRoot","file","urlToFile","dataUrl","handleClickClose","handleClickCopy","handleClickDownload","dialogTemplate","html","strings","render","__decorateClass","property","shareButtonConfigDefaults"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as c,s as i}from"./vendor--f7lkyBk.esm.js";import{d as t}from"./routes-rmhOokKz.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,l=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${l}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
|
|
2
|
+
//# sourceMappingURL=shoelace-components-NR11kwmz.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shoelace-components-NR11kwmz.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"iGASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as c,s as i}from"./vendor--f7lkyBk.esm.js";import{d as t}from"./routes-r5D_LdgT.esm.js";const s="https://sdk.beamimpact.com",a=`${s}/lib/shoelace/v${t["@shoelace-style/shoelace"]}`,l=`${s}/lib/lucide-static/v${t["lucide-static"]}`;if(c("lucide",{resolver:e=>`${l}/icons/${e}.svg`}),i(a),document&&!document.querySelector("link[data-beam-impact]")){const e=document.createElement("link");e.href=`${a}/themes/light.css`,e.rel="stylesheet",e.setAttribute("data-beam-impact","true"),document.head.appendChild(e)}
|
|
2
|
+
//# sourceMappingURL=shoelace-components-yXqj8DyM.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shoelace-components-yXqj8DyM.esm.js","sources":["../../src/shared/shoelace-components.ts"],"sourcesContent":["/**\n * Shoelace is a utility library for web components like icons, dialogs, buttons, etc.\n * https://shoelace.style/\n */\n\nimport { setBasePath } from \"@shoelace-style/shoelace/dist/utilities/base-path.js\";\nimport { registerIconLibrary } from \"@shoelace-style/shoelace/dist/utilities/icon-library.js\";\nimport { dependencies } from \"../../package.json\";\n\nconst CDN_BASE = \"https://sdk.beamimpact.com\";\nconst SHOELACE_BASE = `${CDN_BASE}/lib/shoelace/v${dependencies[\"@shoelace-style/shoelace\"]}`;\nconst ICON_BASE = `${CDN_BASE}/lib/lucide-static/v${dependencies[\"lucide-static\"]}`;\n\nregisterIconLibrary(\"lucide\", {\n resolver: (name: string) => `${ICON_BASE}/icons/${name}.svg`,\n});\n\nsetBasePath(SHOELACE_BASE);\n\nif (document && !document.querySelector(\"link[data-beam-impact]\")) {\n const stylesheet = document.createElement(\"link\");\n stylesheet.href = `${SHOELACE_BASE}/themes/light.css`;\n stylesheet.rel = \"stylesheet\";\n stylesheet.setAttribute(\"data-beam-impact\", \"true\");\n document.head.appendChild(stylesheet);\n}\n"],"names":["CDN_BASE","SHOELACE_BASE","dependencies","ICON_BASE","registerIconLibrary","name","setBasePath","stylesheet"],"mappings":"iGASA,MAAMA,EAAW,6BACXC,EAAgB,GAAGD,CAAQ,kBAAkBE,EAAa,0BAA0B,CAAC,GACrFC,EAAY,GAAGH,CAAQ,uBAAuBE,EAAa,eAAe,CAAC,GAQjF,GANAE,EAAoB,SAAU,CAC5B,SAAWC,GAAiB,GAAGF,CAAS,UAAUE,CAAI,MACxD,CAAC,EAEDC,EAAYL,CAAa,EAErB,UAAY,CAAC,SAAS,cAAc,wBAAwB,EAAG,CACjE,MAAMM,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,KAAO,GAAGN,CAAa,oBAClCM,EAAW,IAAM,aACjBA,EAAW,aAAa,mBAAoB,MAAM,EAClD,SAAS,KAAK,YAAYA,CAAU,CACtC"}
|
|
@@ -6,6 +6,9 @@ declare const WIDGET_NAMES: {
|
|
|
6
6
|
readonly cumulative_impact: "cumulative-impact";
|
|
7
7
|
readonly product_details_page: "product-details-page";
|
|
8
8
|
readonly subscription_management: "subscription-management";
|
|
9
|
+
readonly subscription_impact: "subscription-impact";
|
|
10
|
+
readonly select_subscription_nonprofit: "select-subscription-nonprofit";
|
|
11
|
+
readonly social_share: "social-share";
|
|
9
12
|
};
|
|
10
13
|
|
|
11
14
|
/** Number ID */
|
|
@@ -18,4 +21,4 @@ type TApiKey = string;
|
|
|
18
21
|
type TUrl = string;
|
|
19
22
|
type WidgetName = (typeof WIDGET_NAMES)[keyof typeof WIDGET_NAMES];
|
|
20
23
|
|
|
21
|
-
export type {
|
|
24
|
+
export type { TNumericId as T, WidgetName as W, TId as a, TApiKey as b, TUrl as c };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-rmhOokKz.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.esm.js";import{createScopedLocalStorage as U}from"../utils/local-storage.esm.js";import{getCookieValue as _,setCookieValue as L}from"../utils/cookies.esm.js";import{getRemoteSession as x}from"../utils/remote-session.esm.js";import{memoizeLast as D}from"../utils/memoize-last.esm.js";import{B as b}from"./cart-contents-h60geKWa.esm.js";const R=50,T=y(D(async function(e,c){try{const t=U({apiKey:e.apiKey}),f=e.baseUrl??g,a=t.getItemJson("cart"),o=await _(b)??null,w=x(e)??void 0,{cartId:r,subtotal:i,itemCount:n,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:i,itemCount:n,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:o};if(B(p,{...a,cartId:a?.cartId})||c.itemCount===0&&(!o||a?.itemCount===0))return;const E=await A({baseUrl:f,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:o,storeId:e.storeId,remoteSessionId:w,cartId:r,subtotal:i,itemCount:n,currencyCode:s}}),{beamCartId:m,expiresAt:l,beamCartCreated:h}=E;m&&l&&await L({name:b,domain:e.domain,value:m,path:"/",expires:new Date(l).getTime()}),t.setItemJson("cart",{...p,beamCartId:m});const I={schema:C,content:{items:d,discounts:u},subtotal:i,itemCount:n,currencyCode:s,cartId:r};window.dispatchEvent(new K(I)),h&&window.dispatchEvent(new S(I))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
|
|
2
|
+
//# sourceMappingURL=update-cart-05ZiT0Xf.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cart-05ZiT0Xf.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = (await getCookieValue(BEAM_CART_COOKIE_NAME)) ?? null;\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getCookieValue","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"+jBA6BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA6B,MAAMC,EAAeC,CAAqB,GAAM,KAE7EC,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,CAAI,EAAA,UAAAC,EAAY,CAAA,CAAG,EAAI,GAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,CACF,EAGA,OAAO,cAAc,IAAIgB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as lodash from 'lodash';
|
|
2
2
|
import { B as BeamBaseAPIConfig } from './types-aju0qrRe.esm.js';
|
|
3
|
-
import { a as TCartApi } from './cart-contents-
|
|
3
|
+
import { a as TCartApi } from './cart-contents-sUhfwLAz.esm.js';
|
|
4
4
|
|
|
5
5
|
type BeamCartAPIConfig = BeamBaseAPIConfig & {
|
|
6
6
|
storeId: number;
|
|
7
7
|
domain?: string;
|
|
8
|
+
statsigExperiment?: string;
|
|
8
9
|
};
|
|
9
10
|
type BeamCartValues = {
|
|
10
11
|
cartId?: string;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as y,i as B}from"./lodash-P8OIs-at.esm.js";import{D as g,b as A}from"./routes-r5D_LdgT.esm.js";import{B as v}from"./beam-errors-P-Lu07Ce.esm.js";import{d as K,f as S}from"./events-_4nImo3u.esm.js";import"../utils/network-listeners.js";import{createScopedLocalStorage as U}from"../utils/local-storage.js";import{getCookieValue as _,setCookieValue as L}from"../utils/cookies.js";import{getRemoteSession as x}from"../utils/remote-session.js";import{memoizeLast as D}from"../utils/memoize-last.js";import{B as b}from"./cart-contents-h60geKWa.esm.js";const R=50,T=y(D(async function(e,c){try{const t=U({apiKey:e.apiKey}),f=e.baseUrl??g,a=t.getItemJson("cart"),o=await _(b)??null,w=x(e)??void 0,{cartId:r,subtotal:i,itemCount:n,currencyCode:s,content:{items:d=[],discounts:u=[]}={},schema:C={source:"generic"}}=c,p={cartId:r,subtotal:i,itemCount:n,currencyCode:s,content:{items:d,discounts:u},schema:C,beamCartId:o};if(B(p,{...a,cartId:a?.cartId})||c.itemCount===0&&(!o||a?.itemCount===0))return;const E=await A({baseUrl:f,headers:{authorization:`Api-Key ${e.apiKey}`},requestBody:{beamCartId:o,storeId:e.storeId,remoteSessionId:w,cartId:r,subtotal:i,itemCount:n,currencyCode:s}}),{beamCartId:m,expiresAt:l,beamCartCreated:h}=E;m&&l&&await L({name:b,domain:e.domain,value:m,path:"/",expires:new Date(l).getTime()}),t.setItemJson("cart",{...p,beamCartId:m});const I={schema:C,content:{items:d,discounts:u},subtotal:i,itemCount:n,currencyCode:s,cartId:r};window.dispatchEvent(new K(I)),h&&window.dispatchEvent(new S(I))}catch(t){throw new v("Could not update cart in Beam",{cause:t})}}),R,{leading:!0});export{T as K};
|
|
2
|
+
//# sourceMappingURL=update-cart-lTgKV-Zu.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cart-lTgKV-Zu.esm.js","sources":["../../src/integrations/cart/update-cart.ts"],"sourcesContent":["import isEqual from \"lodash-es/isEqual\";\nimport { DEFAULT_BASE_URL } from \"../../api-sdk/constants\";\nimport { BeamBaseAPIConfig } from \"../../api-sdk/types\";\nimport { postCart } from \"../../api-sdk/v3/routes\";\nimport { debounce, memoizeLast } from \"../../utils\";\nimport { BeamError } from \"../../utils/beam-errors\";\nimport { BEAM_CART_COOKIE_NAME, TBeamCartLocalStorage, TCartApi } from \"../../shared/cart-contents\";\nimport { getCookieValue, setCookieValue } from \"../../utils/cookies\";\nimport { BeamCartChangeEvent, BeamCartCreatedEvent } from \"../../utils/events\";\nimport { createScopedLocalStorage } from \"../../utils/local-storage\";\nimport { getRemoteSession } from \"../../utils/remote-session\";\n\nexport type BeamCartAPIConfig = BeamBaseAPIConfig & {\n storeId: number;\n domain?: string; // Domain to set cookies on\n statsigExperiment?: string;\n};\n\nexport type BeamCartValues = {\n cartId?: string; // External (partner) cart ID\n itemCount?: number;\n subtotal?: number;\n currencyCode?: string;\n} & Partial<TCartApi>;\n\n/**\n * The debounce time in milliseconds for updating the cart - updateCart will delay until it hasn't been called for\n * this long before handling the last call.\n */\nconst UPDATE_CART_DEBOUNCE_MS = 50;\n\n/**\n * Sends cart information to Beam\n * Memoized based on previous arguments - if the objects are deep-equal, no update is made.\n * @side-effects Sets beam_cart cookie, set cart data in localstorage\n * @example\n * const BeamConfig = { apiKey: 'abc-123' }\n * const { beamCartId } = await updateCart(BeamConfig, { beamCartId, itemCount, subtotal, currencyCode })\n * */\nconst updateCart = debounce(\n memoizeLast(async function updateCart(config: BeamCartAPIConfig, cartValues: BeamCartValues) {\n try {\n const localStorage = createScopedLocalStorage({ apiKey: config.apiKey });\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n\n // The cart cache is used to detect changes after page refreshes / across tabs\n const cachedCart: TBeamCartLocalStorage | null = localStorage.getItemJson(\"cart\");\n // The Beam cart cookie is used to identify the cart across subdomains\n // Use explicit null if empty because API requires it\n const beamCartId: string | null = (await getCookieValue(BEAM_CART_COOKIE_NAME)) ?? null;\n // Remote session ID (ie, device ID from an A/B testing tool) will be linked to the cart\n const remoteSessionId: string | undefined = getRemoteSession(config) ?? undefined;\n\n const {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items = [], discounts = [] } = {},\n schema = { source: \"generic\" },\n } = cartValues;\n\n const cartWithDefaults = {\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n content: { items, discounts },\n schema,\n beamCartId,\n };\n // Early return conditions. Skip sending cart to Beam if any apply:\n // 1. The cart has not changed\n // 2. Cart is empty, unless the cart was not empty before\n if (\n isEqual(cartWithDefaults, {\n ...cachedCart,\n cartId: cachedCart?.cartId /* make sure optional key is defined even if empty */,\n }) || // cart has not\n // changed, OR\n (cartValues.itemCount === 0 && // nothing in current cart, AND\n (!beamCartId || cachedCart?.itemCount === 0)) // no/expired prev cart or prev cart was empty\n ) {\n return;\n }\n\n const response = await postCart({\n baseUrl,\n headers: {\n authorization: `Api-Key ${config.apiKey}`,\n },\n requestBody: {\n beamCartId, // backwards compat: explicitly sending null here is required to get initial beamCartId\n storeId: config.storeId,\n remoteSessionId,\n cartId,\n subtotal,\n itemCount,\n currencyCode,\n },\n });\n\n // Response will contain a new beamCartId if one was not provided, or old one expired\n const { beamCartId: newBeamCartId, expiresAt, beamCartCreated } = response;\n\n if (newBeamCartId && expiresAt) {\n await setCookieValue({\n name: BEAM_CART_COOKIE_NAME,\n domain: config.domain,\n value: newBeamCartId,\n path: \"/\",\n // If we don't set an expiration, the cookie will be cleared when the tab is closed\n expires: new Date(expiresAt).getTime(),\n });\n }\n\n localStorage.setItemJson(\"cart\", {\n ...cartWithDefaults,\n beamCartId: newBeamCartId,\n });\n\n const eventDetail = {\n schema: schema as any, // TS union type can't figure out what variant applies here\n content: {\n items: items as any,\n discounts: discounts as any,\n },\n subtotal,\n itemCount,\n currencyCode,\n cartId,\n };\n\n // emit change event on any create/update/delete of cart items\n window.dispatchEvent(new BeamCartChangeEvent(eventDetail));\n\n // emit created event only when the cart is new according to Beam\n if (beamCartCreated) {\n window.dispatchEvent(new BeamCartCreatedEvent(eventDetail));\n }\n } catch (err) {\n throw new BeamError(\"Could not update cart in Beam\", { cause: err });\n }\n }),\n UPDATE_CART_DEBOUNCE_MS,\n { leading: true } // handle first call immediately but delay for more calls within debounce window\n);\n\nexport { updateCart };\n"],"names":["UPDATE_CART_DEBOUNCE_MS","updateCart","debounce","memoizeLast","config","cartValues","localStorage","createScopedLocalStorage","baseUrl","DEFAULT_BASE_URL","cachedCart","beamCartId","getCookieValue","BEAM_CART_COOKIE_NAME","remoteSessionId","getRemoteSession","cartId","subtotal","itemCount","currencyCode","items","discounts","schema","cartWithDefaults","isEqual","response","postCart","newBeamCartId","expiresAt","beamCartCreated","setCookieValue","eventDetail","BeamCartChangeEvent","BeamCartCreatedEvent","err","BeamError"],"mappings":"2iBA6BMA,MAAAA,EAA0B,GAU1BC,EAAaC,EACjBC,EAAY,eAA0BC,EAA2BC,EAA4B,CAC3F,GAAI,CACF,MAAMC,EAAeC,EAAyB,CAAE,OAAQH,EAAO,MAAO,CAAC,EACjEI,EAAUJ,EAAO,SAAWK,EAG5BC,EAA2CJ,EAAa,YAAY,MAAM,EAG1EK,EAA6B,MAAMC,EAAeC,CAAqB,GAAM,KAE7EC,EAAsCC,EAAiBX,CAAM,GAAK,OAElE,CACJ,OAAAY,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAQ,CAAI,EAAA,UAAAC,EAAY,CAAA,CAAG,EAAI,GAC1C,OAAAC,EAAS,CAAE,OAAQ,SAAU,CAC/B,EAAIjB,EAEEkB,EAAmB,CACvB,OAAAP,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,EACA,QAAS,CAAE,MAAAC,EAAO,UAAAC,CAAU,EAC5B,OAAAC,EACA,WAAAX,CACF,EAIA,GACEa,EAAQD,EAAkB,CACxB,GAAGb,EACH,OAAQA,GAAY,MACtB,CAAC,GAEAL,EAAW,YAAc,IACvB,CAACM,GAAcD,GAAY,YAAc,GAE5C,OAGF,MAAMe,EAAW,MAAMC,EAAS,CAC9B,QAAAlB,EACA,QAAS,CACP,cAAe,WAAWJ,EAAO,MAAM,EACzC,EACA,YAAa,CACX,WAAAO,EACA,QAASP,EAAO,QAChB,gBAAAU,EACA,OAAAE,EACA,SAAAC,EACA,UAAAC,EACA,aAAAC,CACF,CACF,CAAC,EAGK,CAAE,WAAYQ,EAAe,UAAAC,EAAW,gBAAAC,CAAgB,EAAIJ,EAE9DE,GAAiBC,GACnB,MAAME,EAAe,CACnB,KAAMjB,EACN,OAAQT,EAAO,OACf,MAAOuB,EACP,KAAM,IAEN,QAAS,IAAI,KAAKC,CAAS,EAAE,QAC/B,CAAA,CAAC,EAGHtB,EAAa,YAAY,OAAQ,CAC/B,GAAGiB,EACH,WAAYI,CACd,CAAC,EAED,MAAMI,EAAc,CAClB,OAAQT,EACR,QAAS,CACP,MAAOF,EACP,UAAWC,CACb,EACA,SAAAJ,EACA,UAAAC,EACA,aAAAC,EACA,OAAAH,CACF,EAGA,OAAO,cAAc,IAAIgB,EAAoBD,CAAW,CAAC,EAGrDF,GACF,OAAO,cAAc,IAAII,EAAqBF,CAAW,CAAC,CAE9D,OAASG,EAAK,CACZ,MAAM,IAAIC,EAAU,gCAAiC,CAAE,MAAOD,CAAI,CAAC,CACrE,CACF,CAAC,EACDlC,EACA,CAAE,QAAS,EAAK,CAClB"}
|