{"version":3,"file":"js-sdk.cjs","sources":["../src/donationWidget.ts","../src/version.ts"],"sourcesContent":["import {\n  disableBodyScroll,\n  enableBodyScroll,\n  clearAllBodyScrollLocks,\n} from \"body-scroll-lock\"\n\nimport elementClosest from \"element-closest\"\nimport \"core-js/features/array/includes\"\nimport \"core-js/features/array/fill\"\nimport { ModalProps } from \"./types\"\nimport \"core-js/features/promise\"\nimport { version } from \"./version\"\nimport \"core-js/features\"\nimport \"element-remove\"\n\nimport { css,keyframes } from \"goober\";\n\nexport interface CustomWindow extends Window {\n  Everfund: EverfundClient\n}\n\ndeclare let window: CustomWindow\n\nclass EverfundClient {\n  private donationWidgetOpen: boolean = false\n  private onSuccess: ModalProps[\"onSuccess\"] = () => {}\n  private onFailure: ModalProps[\"onFailure\"] = () => {}\n  private onClose: ModalProps[\"onClose\"] = () => {}\n  version: string\n\n  constructor() {\n    this.version = version\n    this.setupButtonListeners()\n    this.setupIframeListeners()\n    elementClosest(window)\n  }\n\n  public modal({\n    code,\n    domain,\n    closeOnSuccess,\n    onSuccess,\n    onFailure,\n    onClose,\n  }: ModalProps) {\n    console.warn(\"everfund.modal is deprecated in the next update, please use everfund.donationWidget instead\")\n    this.donationWidget({\n      code,\n      domain,\n      closeOnSuccess,\n      onSuccess,\n      onFailure,\n      onClose,\n    })\n  }\n\n  public donationWidget({\n    code,\n    domain,\n    closeOnSuccess,\n    onSuccess,\n    onFailure,\n    onClose,\n  }: ModalProps) {\n    if (onSuccess) this.onSuccess = onSuccess\n    if (onFailure) this.onFailure = onFailure\n    if (onClose) this.onClose = onClose\n    const origin = window.location.origin\n\n    let makeQS = function (obj: any) {\n      var str = []\n      for (var p in obj)\n        if (obj[p] && obj.hasOwnProperty(p)) {\n          str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]))\n        }\n      return str.join(\"&\")\n    }\n\n    try {\n      const modalFrame = document.createElement(\"iframe\")\n      modalFrame.src = `https://${domain || \"evr.fund\"}/${code}/modal?${makeQS({\n        embed_origin: origin,\n        embeded: true,\n        close_on_success: closeOnSuccess,\n      })}`\n\n      // @ts-ignore\n      modalFrame.allowPaymentRequest = true\n\n      const cssEmbedIframe = css({\n        border: \"none\",\n        width: \"100%\",\n        margin: 0,\n        height: \"100%\",\n      })\n      modalFrame.id = \"ef-modal\"\n      modalFrame.className = cssEmbedIframe\n\n      modalFrame.addEventListener(\"load\", function () {\n        const loadingSpinner =\n          document.querySelector<HTMLDivElement>(\".ldsRing\")\n        const modalWrap = document.querySelector<HTMLDivElement>(\".embedModal\")\n        loadingSpinner?.remove()\n        modalWrap!.style.transform = \"opacity(1)\"\n      })\n\n      const modalWrap = document.createElement(\"div\")\n\n      const cssEmbedModal = css({\n        pointerEvents: \"all\",\n        zIndex: \"9999999\",\n        display: \"flex\",\n        width: \"100%\",\n        transform: \"opacity(0)\",\n        transition: \"transform 0.3s ease\",\n        overflowY: \"auto\",\n        \"-webkit-overflow-scrolling\": \"touch\",\n        height: \"100%\",\n      })\n\n      modalWrap.className = `embedModal ${cssEmbedModal}`\n      modalWrap.appendChild(modalFrame)\n\n      const embedContainer = document.createElement(\"div\")\n      disableBodyScroll(embedContainer)\n\n      const loadingSpinner = document.createElement(\"div\")\n\n      const cssKeyframeLDsring = keyframes({\n        \"0%\": { transform: \"rotate(0deg)\" },\n        \"100%\": { transform: \"rotate(360deg)\" },\n      })\n\n      const cssLdsRing = css({\n        display: \"inline-block\",\n        position: \"absolute\",\n        left: \"calc(50% - 32px)\",\n        top: \"calc(50% - 32px)\",\n        width: \"64px\",\n        height: \"64px\",\n        \"& div\": {\n          boxSizing: \"border-box\",\n          display: \"block\",\n          position: \"absolute\",\n          width: \"51px\",\n          height: \"51px\",\n          margin: \"6px\",\n          border: \"6px solid white\",\n          borderRadius: \"50%\",\n          animation: `${cssKeyframeLDsring} 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite`,\n          borderColor: \"white transparent transparent transparent\",\n        },\n        \"& div:nth-child(1)\": {\n          animationDelay: \" -0.45s\",\n        },\n        \"& div:nth-child(2)\": {\n          animationDelay: \" -0.3s\",\n        },\n        \"& div:nth-child(3)\": {\n          animationDelay: \" -0.15s\",\n        },\n      })\n      loadingSpinner.className = `ldsRing ${cssLdsRing}`\n\n      const div = document.createElement(\"div\")\n\n      Array(4)\n        .fill(4)\n        .forEach(function () {\n          loadingSpinner.appendChild(div)\n        })\n\n      const cssEmbedContainer = css({\n        position: \"fixed\",\n        top: \"0\",\n        left: \"0\",\n        right: \"0\",\n        bottom: \"0\",\n        background: \"rgba(0, 0, 0, 0.7)\",\n        zIndex: \"9999998\",\n        display: \"flex\",\n        justifyContent: \"space-around\",\n        alignItems: \"stretch\",\n        backdropFilter: \"blur(8px)\",\n      })\n\n      embedContainer.className = `embedContainer ${cssEmbedContainer}`\n      embedContainer.appendChild(loadingSpinner)\n      embedContainer.appendChild(modalWrap)\n      // disableBodyScroll(embedContainer)\n      document.body.appendChild(embedContainer)\n    } catch (e) {\n      console.log(e)\n\n      window.location.replace(\n        `https://${domain || \"evr.fund\"}/${code}/modal?${makeQS({\n          return_url: origin,\n        })}`\n      )\n    }\n  }\n\n  private setupButtonListeners() {\n    document.addEventListener(\n      \"click\",\n      function (e: MouseEvent) {\n        const match = (e.target as HTMLElement).closest(\"[data-ef-modal]\")\n\n        if (!match || Everfund.donationWidgetOpen) return\n        e.preventDefault()\n        e.stopPropagation()\n\n        let code = match.getAttribute(\"data-ef-modal\")\n\n        if (!code) {\n          console.error(\n            'Everfund: data-ef-modal is required! eg <button data-ef-modal=\"rjww\"> modal </button>'\n          )\n          return\n        }\n\n        if (\n          !!new RegExp(\n            \"^(https?:\\\\/\\\\/)?\" + // protocol\n              \"((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|\" + // domain name\n              \"((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))\" + // OR ip (v4) address\n              \"(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*\" + // port and path\n              \"(\\\\?[;&a-z\\\\d%_.~+=-]*)?\" + // query string\n              \"(\\\\#[-a-z\\\\d_]*)?$\",\n            \"i\"\n          ).test(code)\n        ) {\n          console.warn(\n            `Everfund: url's are deprecated please use a code instead`\n          )\n\n          code = new URL(code).pathname.replace(\"/\", \"\")\n        }\n\n        Everfund.donationWidgetOpen = true\n        Everfund.donationWidget({\n          code,\n          onSuccess: () => {},\n          onFailure: () => {},\n          onClose: () => {\n            clearAllBodyScrollLocks()\n          },\n        })\n      },\n      false\n    )\n  }\n\n  private setupIframeListeners() {\n    window.addEventListener(\n      \"message\",\n      function (e) {\n        const embed = document.querySelector(\".\" + \"embedContainer\")\n        switch (e.data.message) {\n          case \"everfund:ready\":\n            const loadingSpinner =\n              document.querySelector<HTMLDivElement>(\"#ldsRing\")\n            const modalWrap = document.querySelector<HTMLDivElement>(\n              \".\" + \"embedModal\"\n            )\n            loadingSpinner?.remove()\n            modalWrap!.style.transform = \"opacity(1)\"\n            break\n          case \"everfund:success\":\n            const data = e.data.content\n            Everfund.onSuccess(data)\n            break\n          case \"everfund:failure\":\n            Everfund.onFailure(e.data.content)\n            break\n          case \"everfund:close\":\n            embed && enableBodyScroll(embed)\n            embed && embed.remove()\n            Everfund.donationWidgetOpen = false\n            Everfund.onClose()\n            // clearAllBodyScrollLocks();\n            break\n        }\n      },\n      false\n    )\n  }\n}\n\nconst Everfund = new EverfundClient()\n\nexport default Everfund\n","// Generated by genversion.\nexport const version = '1.3.3';\n"],"names":["Everfund","EverfundClient","donationWidgetOpen","this","onSuccess","onFailure","onClose","version","setupButtonListeners","setupIframeListeners","elementClosest","window","modal","_ref","code","domain","closeOnSuccess","console","warn","donationWidget","_ref2","origin","location","makeQS","obj","str","p","hasOwnProperty","push","encodeURIComponent","join","modalFrame","document","createElement","src","embed_origin","embeded","close_on_success","allowPaymentRequest","cssEmbedIframe","css","border","width","margin","height","id","className","addEventListener","loadingSpinner","querySelector","modalWrap","remove","style","transform","cssEmbedModal","pointerEvents","zIndex","display","transition","overflowY","appendChild","embedContainer","disableBodyScroll","cssKeyframeLDsring","keyframes","cssLdsRing","position","left","top","boxSizing","borderRadius","animation","borderColor","animationDelay","div","Array","fill","forEach","cssEmbedContainer","right","bottom","background","justifyContent","alignItems","backdropFilter","body","e","log","replace","return_url","match","target","closest","preventDefault","stopPropagation","getAttribute","RegExp","test","URL","pathname","clearAllBodyScrollLocks","error","embed","data","message","content","enableBodyScroll"],"mappings":"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"}