From 66a13f53233e08d5926933bd692c61d856193b5c Mon Sep 17 00:00:00 2001 From: Rohit Malhotra Date: Mon, 20 May 2024 19:25:17 +0530 Subject: [PATCH] =?UTF-8?q?PR=20Deploy=20Preview=20=F0=9F=A4=9D=20meets=20?= =?UTF-8?q?=F0=9F=A4=9D=20Github=20Pages=20(#1527)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implemented pull request deployment preview * Updated the yarn version for better compatibility and in future and avoiding yarn.lock issues. * Removed unused libraries. * Removed and fixed react import. * Removed unused imports. * Fixed assets path used from public or public/svg folder --- .github/workflows/preview.yml | 48 + .yarn/releases/yarn-3.4.1.cjs | 873 - .yarn/releases/yarn-4.2.2.cjs | 894 + .yarnrc.yml | 7 +- README.md | 35 +- basePath.js | 10 + build.mjs | 26 +- index.html | 161 +- package.json | 32 +- public/404.html | 34 +- public/index-preview.html | 179 + public/index.html | 156 +- public/robots-preview.txt | 3 + public/sitemap-preview.txt | 17 + src/App.tsx | 46 +- src/AppLogin.tsx | 6 +- src/components/AliasVerificationModal.jsx | 207 +- src/components/ChainIndicator.tsx | 16 +- src/components/ChainsSelect.tsx | 9 +- src/components/ChannelDetails.jsx | 16 +- src/components/ChannelInfo.tsx | 2 +- .../ChannelReactivateModalContent.tsx | 8 +- src/components/ChannelSettings.jsx | 29 +- src/components/DelegateInfo.jsx | 77 +- src/components/Dropdown.tsx | 6 +- src/components/Faucets.tsx | 5 +- src/components/InboxComponent.jsx | 2 +- src/components/InitState.tsx | 6 +- src/components/MobileNavButton.jsx | 2 +- src/components/MyNFTsV2.jsx | 97 +- src/components/NavButton.jsx | 2 +- src/components/NavigationButton.jsx | 6 +- src/components/Profile.tsx | 59 +- src/components/ProfileModal.tsx | 6 +- src/components/PushSnap/EnableSnoozeModal.tsx | 7 +- .../PushSnap/InstallPushSnapModal.tsx | 5 +- .../PushSnap/PushSnapConfigureModal.tsx | 8 +- src/components/PushSnap/PushSnapSettings.tsx | 5 +- src/components/PushSnap/SnapFAQModal.tsx | 3 +- .../PushSnap/SnapKnowledgeModal.tsx | 9 +- src/components/SearchFilter.jsx | 679 +- src/components/SendNotifications.tsx | 6 +- src/components/StakingInfo.tsx | 4 +- src/components/TransferNFT.jsx | 101 +- src/components/TransferNFTv2.jsx | 100 +- src/components/UniswapWidget.tsx | 2 +- src/components/UploadLogo.jsx | 325 +- src/components/VerifyAlias.tsx | 2 +- src/components/ViewChannelItem.jsx | 56 +- src/components/ViewDelegateeItem.jsx | 329 +- src/components/YieldFarmChainError.tsx | 14 +- .../channel/AddSettingModalContent.tsx | 165 +- src/components/channel/ChannelInfoHeader.tsx | 4 +- src/components/channel/ChannelInfoList.tsx | 3 +- .../channel/ChannelListSettings.tsx | 4 +- .../channel/ChannelProfileComponent.tsx | 23 +- .../channel/DelegateSettingsDropdown.tsx | 9 +- src/components/channel/DepositFeeFooter.tsx | 4 +- .../channel/EmptyNotificationSettings.tsx | 3 - .../channel/NotificationSettings.tsx | 14 +- src/components/chat/intro/Intro.tsx | 3 - .../chat/recommended/Recommended.tsx | 2 +- .../chat/unlockProfile/UnlockProfile.tsx | 3 +- .../unlockProfile/UnlockProfileWrapper.tsx | 2 +- src/components/chat/w2wChat/Modal/Modal.tsx | 60 +- .../chat/w2wChat/TypeBar/Gifs/GifPicker.tsx | 120 +- .../chat/w2wChat/TypeBar/Typebar.tsx | 19 +- .../chat/w2wChat/chatBox/ChatBox.tsx | 70 +- src/components/chat/w2wChat/chatQR/chatQR.tsx | 7 +- .../chat/w2wChat/chatQR/mobileView.tsx | 6 +- src/components/chat/w2wChat/chats/Chats.tsx | 6 +- .../createGroup/AddWalletContent.tsx | 22 +- .../createGroup/CreateGroupModalContent.tsx | 114 +- .../createGroup/GroupDetailsContent.tsx | 16 +- .../createGroup/MemberListContainer.tsx | 6 +- .../groupChat/groupInfo/PendingMembers.tsx | 5 +- .../groupChat/groupInfo/ProfileCard.tsx | 3 +- .../groupInfo/groupInfoModalContent.tsx | 19 +- .../chat/w2wChat/intentFeed/IntentFeed.tsx | 3 +- .../chat/w2wChat/messageFeed/MessageFeed.tsx | 150 +- .../chat/w2wChat/profile/Profile.tsx | 21 +- .../chat/w2wChat/searchBar/SearchBar.tsx | 4 +- src/components/chat/welcome/Welcome.tsx | 2 +- .../dropdowns/DropdownBtnHandler.tsx | 95 +- .../dropdowns/ManageNotifSettingDropdown.tsx | 18 +- .../dropdowns/OptinNotifSettingDropdown.tsx | 14 +- .../dropdowns/UpdateNotifSettingDropdown.tsx | 12 +- src/components/reusables/labels/Tag.tsx | 3 - .../reusables/loaders/LoaderSpinner.tsx | 3 - .../reusables/sliders/InputSlider.tsx | 8 +- .../reusables/sliders/RangeSlider.tsx | 76 +- .../reusables/toasts/NotifToastUI.tsx | 51 +- src/components/userSettings/UserSettings.tsx | 7 +- src/components/video/IncomingCall.tsx | 7 +- .../video/OnConnectingVideoCall.tsx | 4 +- src/components/video/OutgoingOngoingCall.tsx | 4 +- src/components/video/VideoPlayer.tsx | 4 +- .../yield/StakingModalComponent.tsx | 14 +- .../yield/UnstakingModalComponent.tsx | 343 +- src/components/yield/YieldComponent.js | 16 +- src/components/yield/YieldPoolCard.tsx | 14 +- src/components/yield/YieldPushFeeV3.tsx | 13 +- src/components/yield/YieldUniswapV3.tsx | 12 +- src/config/index.js | 2 + src/contexts/AppContext.tsx | 6 +- src/contexts/ErrorContext.tsx | 16 +- src/contexts/NavigationContext.tsx | 18 +- src/contexts/NavigationContext_old.js | 10 +- src/contexts/NotificationContext.tsx | 14 +- src/contexts/SpaceComponentsContext.tsx | 23 +- src/contexts/SpaceContext.tsx | 5 +- src/contexts/VideoCallContext.tsx | 17 +- src/firebase.js | 65 - src/helpers/GaslessHelper.ts | 2 +- src/helpers/RoutesHelper.ts | 4 + src/helpers/pushStaking/src/index.ts | 2 - src/helpers/w2w/groupChat.ts | 5 +- src/helpers/w2w/user.ts | 1 - src/hooks/useAccount.tsx | 2 +- src/hooks/useBrowserNotification.ts | 48 - src/hooks/usePeer.ts | 2 +- src/hooks/useResolveWeb3Name.ts | 2 +- src/hooks/useSDKSocket.ts | 10 +- src/hooks/useStream.ts | 12 +- src/index.tsx | 57 +- src/modules/airdrop/AirdropModule.tsx | 25 +- .../ChannelOwnerDashboard.tsx | 6 +- src/modules/channels/ChannelsModule.tsx | 68 +- src/modules/chat/ChatModule.tsx | 78 +- src/modules/claimGalxe/ClaimGalxeModule.tsx | 9 +- .../createChannel/CreateChannelModule.jsx | 561 +- src/modules/editChannel/EditChannel.tsx | 35 +- src/modules/editChannel/EditChannelForms.tsx | 381 +- src/modules/editChannel/uploadLogoModal.tsx | 210 +- src/modules/gov/GovModule.tsx | 62 +- src/modules/internal/InternalDevModule.tsx | 33 +- .../receiveNotifs/MetamaskPushSnapModal.tsx | 4 +- .../receiveNotifs/ReceiveNotifsModule.tsx | 48 +- src/modules/snap/PushSnapModal.tsx | 3 +- src/modules/snap/SnapModule.tsx | 8 +- src/modules/space/SpaceModule.tsx | 25 +- src/modules/yield/YieldFarmingModule.tsx | 1 - src/modules/yield/YieldFarmingModuleV2.tsx | 7 +- src/pages/AirdropPage.tsx | 3 - src/pages/ChannelDashboardPage.jsx | 12 +- src/pages/ChannelsPage.jsx | 17 +- src/pages/ClaimGalxePage.tsx | 3 - src/pages/FAQPage.tsx | 7 - src/pages/GovPage.tsx | 2 - src/pages/InboxPage.jsx | 2 +- src/pages/ReceiveNotifsPage.jsx | 10 +- src/pages/SendNotifsPage.tsx | 6 - src/pages/SnapPage.tsx | 5 - src/pages/SpacePage.tsx | 3 - src/pages/SupportPage.tsx | 8 - src/pages/TutorialPage.tsx | 7 - src/primaries/AutoImageClipper.tsx | 240 +- src/primaries/ImageClipper.jsx | 113 +- src/primaries/Profile.tsx | 28 +- src/sections/chat/ChatSidebarSection.tsx | 24 +- src/sections/space/SpaceFeedSection.tsx | 23 +- src/sections/space/SpaceWidgetSection.tsx | 10 +- src/sections/video/VideoCallSection.tsx | 13 +- src/sections/yield/DeprecatedYieldFarming.tsx | 20 +- src/sections/yield/NewYieldFarming.tsx | 21 +- .../yield/YieldAnnouncementSection.tsx | 57 +- src/sections/yield/YieldPushPriceSection.tsx | 9 +- src/sections/yield/YieldSnapshotSection.tsx | 15 +- src/segments/ChannelProfile.tsx | 19 +- src/segments/ChannelTutorial.jsx | 55 +- src/segments/Inbox.tsx | 40 +- src/segments/Spam.tsx | 29 +- src/segments/ViewChannels.tsx | 5 +- src/singletons/ChannelsDataStore.js | 1 - src/structure/Header.tsx | 38 +- src/structure/MasterInterfacePage.tsx | 27 +- src/structure/MobileNavigation.tsx | 150 +- src/structure/Navigation.tsx | 17 +- src/types/context.ts | 3 +- tsconfig.node.json | 6 +- vite.config.ts | 3 + yarn.lock | 15846 +++++++--------- 182 files changed, 11510 insertions(+), 13621 deletions(-) create mode 100644 .github/workflows/preview.yml delete mode 100755 .yarn/releases/yarn-3.4.1.cjs create mode 100755 .yarn/releases/yarn-4.2.2.cjs create mode 100644 basePath.js create mode 100644 public/index-preview.html create mode 100644 public/robots-preview.txt create mode 100644 public/sitemap-preview.txt delete mode 100644 src/firebase.js delete mode 100644 src/hooks/useBrowserNotification.ts diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000000..bda9cb9e67 --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,48 @@ +name: Deploy PR previews +on: + pull_request: + types: + - opened + - reopened + - synchronize + - closed + branches: + - main +concurrency: preview-${{ github.ref }} +jobs: + deploy-preview: + runs-on: ubuntu-20.04 + steps: + - name: Set up environment variables + run: | + echo "VITE_PR_PREVIEW_BASE=pr-${{ github.event.pull_request.number }}" >> $GITHUB_ENV + echo "VITE_APP_NODE_ENV=production" >> $GITHUB_ENV + echo "VITE_APP_DEPLOY_ENV=PREVIEW" >> $GITHUB_ENV + echo "VITE_APP_PUBLIC_URL=https://push-protocol.github.io/" >> $GITHUB_ENV + echo "ESLINT_NO_DEV_ERRORS=true" >> $GITHUB_ENV + echo "TSC_COMPILE_ON_ERROR=true" >> $GITHUB_ENV + echo "DISABLE_ESLINT_PLUGIN=true" >> $GITHUB_ENV + echo "GENERATE_SOURCEMAP=true" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v3 + + - name: Install and Build + if: github.event.action != 'closed' # You might want to skip the build if the PR has been closed + env: + VITE_APP_WALLETCONNECT_PROJECT_ID: ${{ secrets.VITE_APP_WALLETCONNECT_PROJECT_ID }} + + run: | + yarn install + yarn build:pr:preview + + - name: Deploy preview + uses: rossjrw/pr-preview-action@v1.4.7 + with: + source-dir: ./build/ + + - uses: rossjrw/pr-preview-action@v1.4.7 + if: github.event.action == 'closed' && !github.event.pull_request.merged + with: + source-dir: ./build/ + action: remove diff --git a/.yarn/releases/yarn-3.4.1.cjs b/.yarn/releases/yarn-3.4.1.cjs deleted file mode 100755 index 2bdb752d86..0000000000 --- a/.yarn/releases/yarn-3.4.1.cjs +++ /dev/null @@ -1,873 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var Mue=Object.create;var Wb=Object.defineProperty;var Kue=Object.getOwnPropertyDescriptor;var Uue=Object.getOwnPropertyNames;var Hue=Object.getPrototypeOf,Gue=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var Yue=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)Wb(r,t,{get:e[t],enumerable:!0})},jue=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Uue(e))!Gue.call(r,n)&&n!==t&&Wb(r,n,{get:()=>e[n],enumerable:!(i=Kue(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Mue(Hue(r)):{},jue(e||!r||!r.__esModule?Wb(t,"default",{value:r,enumerable:!0}):t,r));var _1=w((O7e,X1)=>{X1.exports=V1;V1.sync=uge;var W1=J("fs");function cge(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{tK.exports=$1;$1.sync=gge;var Z1=J("fs");function $1(r,e,t){Z1.stat(r,function(i,n){t(i,i?!1:eK(n,e))})}function gge(r,e){return eK(Z1.statSync(r),e)}function eK(r,e){return r.isFile()&&fge(r,e)}function fge(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var nK=w((U7e,iK)=>{var K7e=J("fs"),_E;process.platform==="win32"||global.TESTING_WINDOWS?_E=_1():_E=rK();iK.exports=uS;uS.sync=hge;function uS(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){uS(r,e||{},function(s,o){s?n(s):i(o)})})}_E(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function hge(r,e){try{return _E.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var uK=w((H7e,cK)=>{var Ig=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",sK=J("path"),pge=Ig?";":":",oK=nK(),aK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),AK=(r,e)=>{let t=e.colon||pge,i=r.match(/\//)||Ig&&r.match(/\\/)?[""]:[...Ig?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=Ig?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Ig?n.split(t):[""];return Ig&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},lK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=AK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(aK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=sK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];oK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},dge=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=AK(r,e),s=[];for(let o=0;o{"use strict";var gK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};gS.exports=gK;gS.exports.default=gK});var CK=w((Y7e,dK)=>{"use strict";var hK=J("path"),Cge=uK(),mge=fK();function pK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=Cge.sync(r.command,{path:t[mge({env:t})],pathExt:e?hK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=hK.resolve(n?r.options.cwd:"",o)),o}function Ege(r){return pK(r)||pK(r,!0)}dK.exports=Ege});var mK=w((j7e,hS)=>{"use strict";var fS=/([()\][%!^"`<>&|;, *?])/g;function Ige(r){return r=r.replace(fS,"^$1"),r}function yge(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(fS,"^$1"),e&&(r=r.replace(fS,"^$1")),r}hS.exports.command=Ige;hS.exports.argument=yge});var IK=w((q7e,EK)=>{"use strict";EK.exports=/^#!(.*)/});var wK=w((J7e,yK)=>{"use strict";var wge=IK();yK.exports=(r="")=>{let e=r.match(wge);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var QK=w((W7e,BK)=>{"use strict";var pS=J("fs"),Bge=wK();function Qge(r){let t=Buffer.alloc(150),i;try{i=pS.openSync(r,"r"),pS.readSync(i,t,0,150,0),pS.closeSync(i)}catch{}return Bge(t.toString())}BK.exports=Qge});var xK=w((z7e,vK)=>{"use strict";var bge=J("path"),bK=CK(),SK=mK(),Sge=QK(),vge=process.platform==="win32",xge=/\.(?:com|exe)$/i,Pge=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Dge(r){r.file=bK(r);let e=r.file&&Sge(r.file);return e?(r.args.unshift(r.file),r.command=e,bK(r)):r.file}function kge(r){if(!vge)return r;let e=Dge(r),t=!xge.test(e);if(r.options.forceShell||t){let i=Pge.test(e);r.command=bge.normalize(r.command),r.command=SK.command(r.command),r.args=r.args.map(s=>SK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function Rge(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:kge(i)}vK.exports=Rge});var kK=w((V7e,DK)=>{"use strict";var dS=process.platform==="win32";function CS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Fge(r,e){if(!dS)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=PK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function PK(r,e){return dS&&r===1&&!e.file?CS(e.original,"spawn"):null}function Nge(r,e){return dS&&r===1&&!e.file?CS(e.original,"spawnSync"):null}DK.exports={hookChildProcess:Fge,verifyENOENT:PK,verifyENOENTSync:Nge,notFoundError:CS}});var IS=w((X7e,yg)=>{"use strict";var RK=J("child_process"),mS=xK(),ES=kK();function FK(r,e,t){let i=mS(r,e,t),n=RK.spawn(i.command,i.args,i.options);return ES.hookChildProcess(n,i),n}function Lge(r,e,t){let i=mS(r,e,t),n=RK.spawnSync(i.command,i.args,i.options);return n.error=n.error||ES.verifyENOENTSync(n.status,i),n}yg.exports=FK;yg.exports.spawn=FK;yg.exports.sync=Lge;yg.exports._parse=mS;yg.exports._enoent=ES});var LK=w((_7e,NK)=>{"use strict";function Tge(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Ml(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ml)}Tge(Ml,Error);Ml.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",ie=me(">>",!1),de=">&",tt=me(">&",!1),Pt=">",It=me(">",!1),Or="<<<",ii=me("<<<",!1),gi="<&",hr=me("<&",!1),fi="<",ni=me("<",!1),Ls=function(m){return{type:"argument",segments:[].concat(...m)}},pr=function(m){return m},Ei="$'",_n=me("$'",!1),oa="'",aA=me("'",!1),eg=function(m){return[{type:"text",text:m}]},Zn='""',AA=me('""',!1),aa=function(){return{type:"text",text:""}},up='"',lA=me('"',!1),cA=function(m){return m},wr=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},wl=function(m){return{type:"shell",shell:m,quoted:!0}},tg=function(m){return{type:"variable",...m,quoted:!0}},po=function(m){return{type:"text",text:m}},rg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},gp=function(m){return{type:"shell",shell:m,quoted:!1}},fp=function(m){return{type:"variable",...m,quoted:!1}},vr=function(m){return{type:"glob",pattern:m}},se=/^[^']/,Co=Je(["'"],!0,!1),Dn=function(m){return m.join("")},ig=/^[^$"]/,Qt=Je(["$",'"'],!0,!1),Bl=`\\ -`,kn=me(`\\ -`,!1),$n=function(){return""},es="\\",gt=me("\\",!1),mo=/^[\\$"`]/,At=Je(["\\","$",'"',"`"],!1,!1),an=function(m){return m},S="\\a",Tt=me("\\a",!1),ng=function(){return"a"},Ql="\\b",hp=me("\\b",!1),pp=function(){return"\b"},dp=/^[Ee]/,Cp=Je(["E","e"],!1,!1),mp=function(){return"\x1B"},G="\\f",yt=me("\\f",!1),uA=function(){return"\f"},ji="\\n",bl=me("\\n",!1),Xe=function(){return` -`},Aa="\\r",sg=me("\\r",!1),bE=function(){return"\r"},Ep="\\t",SE=me("\\t",!1),ar=function(){return" "},Rn="\\v",Sl=me("\\v",!1),Ip=function(){return"\v"},Ts=/^[\\'"?]/,la=Je(["\\","'",'"',"?"],!1,!1),An=function(m){return String.fromCharCode(parseInt(m,16))},Te="\\x",og=me("\\x",!1),vl="\\u",Os=me("\\u",!1),xl="\\U",gA=me("\\U",!1),ag=function(m){return String.fromCodePoint(parseInt(m,16))},Ag=/^[0-7]/,ca=Je([["0","7"]],!1,!1),ua=/^[0-9a-fA-f]/,rt=Je([["0","9"],["a","f"],["A","f"]],!1,!1),Eo=nt(),fA="-",Pl=me("-",!1),Ms="+",Dl=me("+",!1),vE=".",yp=me(".",!1),lg=function(m,b,N){return{type:"number",value:(m==="-"?-1:1)*parseFloat(b.join("")+"."+N.join(""))}},wp=function(m,b){return{type:"number",value:(m==="-"?-1:1)*parseInt(b.join(""))}},xE=function(m){return{type:"variable",...m}},kl=function(m){return{type:"variable",name:m}},PE=function(m){return m},cg="*",hA=me("*",!1),Rr="/",DE=me("/",!1),Ks=function(m,b,N){return{type:b==="*"?"multiplication":"division",right:N}},Us=function(m,b){return b.reduce((N,U)=>({left:N,...U}),m)},ug=function(m,b,N){return{type:b==="+"?"addition":"subtraction",right:N}},pA="$((",R=me("$((",!1),q="))",Ce=me("))",!1),Ke=function(m){return m},Re="$(",ze=me("$(",!1),dt=function(m){return m},Ft="${",Fn=me("${",!1),Db=":-",$M=me(":-",!1),e1=function(m,b){return{name:m,defaultValue:b}},kb=":-}",t1=me(":-}",!1),r1=function(m){return{name:m,defaultValue:[]}},Rb=":+",i1=me(":+",!1),n1=function(m,b){return{name:m,alternativeValue:b}},Fb=":+}",s1=me(":+}",!1),o1=function(m){return{name:m,alternativeValue:[]}},Nb=function(m){return{name:m}},a1="$",A1=me("$",!1),l1=function(m){return e.isGlobPattern(m)},c1=function(m){return m},Lb=/^[a-zA-Z0-9_]/,Tb=Je([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Ob=function(){return T()},Mb=/^[$@*?#a-zA-Z0-9_\-]/,Kb=Je(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),u1=/^[(){}<>$|&; \t"']/,gg=Je(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Ub=/^[<>&; \t"']/,Hb=Je(["<",">","&",";"," "," ",'"',"'"],!1,!1),kE=/^[ \t]/,RE=Je([" "," "],!1,!1),Q=0,Me=0,dA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function T(){return r.substring(Me,Q)}function _(){return Et(Me,Q)}function te(m,b){throw b=b!==void 0?b:Et(Me,Q),ki([lt(m)],r.substring(Me,Q),b)}function Be(m,b){throw b=b!==void 0?b:Et(Me,Q),Nn(m,b)}function me(m,b){return{type:"literal",text:m,ignoreCase:b}}function Je(m,b,N){return{type:"class",parts:m,inverted:b,ignoreCase:N}}function nt(){return{type:"any"}}function wt(){return{type:"end"}}function lt(m){return{type:"other",description:m}}function it(m){var b=dA[m],N;if(b)return b;for(N=m-1;!dA[N];)N--;for(b=dA[N],b={line:b.line,column:b.column};Nd&&(d=Q,E=[]),E.push(m))}function Nn(m,b){return new Ml(m,null,null,b)}function ki(m,b,N){return new Ml(Ml.buildMessage(m,b),m,b,N)}function CA(){var m,b;return m=Q,b=Mr(),b===t&&(b=null),b!==t&&(Me=m,b=s(b)),m=b,m}function Mr(){var m,b,N,U,ce;if(m=Q,b=Kr(),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=ga(),U!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Me=m,b=o(b,U,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;if(m===t)if(m=Q,b=Kr(),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=ga(),U===t&&(U=null),U!==t?(Me=m,b=a(b,U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;return m}function ts(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=Mr(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=l(N),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;return m}function ga(){var m;return r.charCodeAt(Q)===59?(m=c,Q++):(m=t,I===0&&Qe(u)),m===t&&(r.charCodeAt(Q)===38?(m=g,Q++):(m=t,I===0&&Qe(f))),m}function Kr(){var m,b,N;return m=Q,b=g1(),b!==t?(N=yue(),N===t&&(N=null),N!==t?(Me=m,b=h(b,N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function yue(){var m,b,N,U,ce,Se,ht;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=wue(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=p(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;return m}function wue(){var m;return r.substr(Q,2)===C?(m=C,Q+=2):(m=t,I===0&&Qe(y)),m===t&&(r.substr(Q,2)===B?(m=B,Q+=2):(m=t,I===0&&Qe(v))),m}function g1(){var m,b,N;return m=Q,b=bue(),b!==t?(N=Bue(),N===t&&(N=null),N!==t?(Me=m,b=D(b,N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function Bue(){var m,b,N,U,ce,Se,ht;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=Que(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=g1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=L(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;return m}function Que(){var m;return r.substr(Q,2)===H?(m=H,Q+=2):(m=t,I===0&&Qe(j)),m===t&&(r.charCodeAt(Q)===124?(m=$,Q++):(m=t,I===0&&Qe(V))),m}function FE(){var m,b,N,U,ce,Se;if(m=Q,b=Q1(),b!==t)if(r.charCodeAt(Q)===61?(N=W,Q++):(N=t,I===0&&Qe(Z)),N!==t)if(U=p1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Me=m,b=A(b,U),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;else Q=m,m=t;if(m===t)if(m=Q,b=Q1(),b!==t)if(r.charCodeAt(Q)===61?(N=W,Q++):(N=t,I===0&&Qe(Z)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=ae(b),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;return m}function bue(){var m,b,N,U,ce,Se,ht,Bt,Jr,hi,rs;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(r.charCodeAt(Q)===40?(N=ge,Q++):(N=t,I===0&&Qe(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(Q)===41?(ht=O,Q++):(ht=t,I===0&&Qe(F)),ht!==t){for(Bt=[],Jr=He();Jr!==t;)Bt.push(Jr),Jr=He();if(Bt!==t){for(Jr=[],hi=Bp();hi!==t;)Jr.push(hi),hi=Bp();if(Jr!==t){for(hi=[],rs=He();rs!==t;)hi.push(rs),rs=He();hi!==t?(Me=m,b=ue(ce,Jr),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(r.charCodeAt(Q)===123?(N=he,Q++):(N=t,I===0&&Qe(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(Q)===125?(ht=Fe,Q++):(ht=t,I===0&&Qe(Ne)),ht!==t){for(Bt=[],Jr=He();Jr!==t;)Bt.push(Jr),Jr=He();if(Bt!==t){for(Jr=[],hi=Bp();hi!==t;)Jr.push(hi),hi=Bp();if(Jr!==t){for(hi=[],rs=He();rs!==t;)hi.push(rs),rs=He();hi!==t?(Me=m,b=oe(ce,Jr),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){for(N=[],U=FE();U!==t;)N.push(U),U=FE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=h1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=h1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=le(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){if(N=[],U=FE(),U!==t)for(;U!==t;)N.push(U),U=FE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=we(N),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}}}return m}function f1(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){if(N=[],U=NE(),U!==t)for(;U!==t;)N.push(U),U=NE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=fe(N),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t;return m}function h1(){var m,b,N;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t?(N=Bp(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();b!==t?(N=NE(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t)}return m}function Bp(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();return b!==t?(qe.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(ne)),N===t&&(N=null),N!==t?(U=Sue(),U!==t?(ce=NE(),ce!==t?(Me=m,b=Y(N,U,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function Sue(){var m;return r.substr(Q,2)===pe?(m=pe,Q+=2):(m=t,I===0&&Qe(ie)),m===t&&(r.substr(Q,2)===de?(m=de,Q+=2):(m=t,I===0&&Qe(tt)),m===t&&(r.charCodeAt(Q)===62?(m=Pt,Q++):(m=t,I===0&&Qe(It)),m===t&&(r.substr(Q,3)===Or?(m=Or,Q+=3):(m=t,I===0&&Qe(ii)),m===t&&(r.substr(Q,2)===gi?(m=gi,Q+=2):(m=t,I===0&&Qe(hr)),m===t&&(r.charCodeAt(Q)===60?(m=fi,Q++):(m=t,I===0&&Qe(ni))))))),m}function NE(){var m,b,N;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();return b!==t?(N=p1(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function p1(){var m,b,N;if(m=Q,b=[],N=d1(),N!==t)for(;N!==t;)b.push(N),N=d1();else b=t;return b!==t&&(Me=m,b=Ls(b)),m=b,m}function d1(){var m,b;return m=Q,b=vue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=xue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=Pue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=Due(),b!==t&&(Me=m,b=pr(b)),m=b))),m}function vue(){var m,b,N,U;return m=Q,r.substr(Q,2)===Ei?(b=Ei,Q+=2):(b=t,I===0&&Qe(_n)),b!==t?(N=Fue(),N!==t?(r.charCodeAt(Q)===39?(U=oa,Q++):(U=t,I===0&&Qe(aA)),U!==t?(Me=m,b=eg(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function xue(){var m,b,N,U;return m=Q,r.charCodeAt(Q)===39?(b=oa,Q++):(b=t,I===0&&Qe(aA)),b!==t?(N=kue(),N!==t?(r.charCodeAt(Q)===39?(U=oa,Q++):(U=t,I===0&&Qe(aA)),U!==t?(Me=m,b=eg(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function Pue(){var m,b,N,U;if(m=Q,r.substr(Q,2)===Zn?(b=Zn,Q+=2):(b=t,I===0&&Qe(AA)),b!==t&&(Me=m,b=aa()),m=b,m===t)if(m=Q,r.charCodeAt(Q)===34?(b=up,Q++):(b=t,I===0&&Qe(lA)),b!==t){for(N=[],U=C1();U!==t;)N.push(U),U=C1();N!==t?(r.charCodeAt(Q)===34?(U=up,Q++):(U=t,I===0&&Qe(lA)),U!==t?(Me=m,b=cA(N),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;return m}function Due(){var m,b,N;if(m=Q,b=[],N=m1(),N!==t)for(;N!==t;)b.push(N),N=m1();else b=t;return b!==t&&(Me=m,b=cA(b)),m=b,m}function C1(){var m,b;return m=Q,b=w1(),b!==t&&(Me=m,b=wr(b)),m=b,m===t&&(m=Q,b=B1(),b!==t&&(Me=m,b=wl(b)),m=b,m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=tg(b)),m=b,m===t&&(m=Q,b=Rue(),b!==t&&(Me=m,b=po(b)),m=b))),m}function m1(){var m,b;return m=Q,b=w1(),b!==t&&(Me=m,b=rg(b)),m=b,m===t&&(m=Q,b=B1(),b!==t&&(Me=m,b=gp(b)),m=b,m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=fp(b)),m=b,m===t&&(m=Q,b=Tue(),b!==t&&(Me=m,b=vr(b)),m=b,m===t&&(m=Q,b=Lue(),b!==t&&(Me=m,b=po(b)),m=b)))),m}function kue(){var m,b,N;for(m=Q,b=[],se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co));N!==t;)b.push(N),se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co));return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Rue(){var m,b,N;if(m=Q,b=[],N=E1(),N===t&&(ig.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Qt))),N!==t)for(;N!==t;)b.push(N),N=E1(),N===t&&(ig.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Qt)));else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function E1(){var m,b,N;return m=Q,r.substr(Q,2)===Bl?(b=Bl,Q+=2):(b=t,I===0&&Qe(kn)),b!==t&&(Me=m,b=$n()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(mo.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(At)),N!==t?(Me=m,b=an(N),m=b):(Q=m,m=t)):(Q=m,m=t)),m}function Fue(){var m,b,N;for(m=Q,b=[],N=I1(),N===t&&(se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co)));N!==t;)b.push(N),N=I1(),N===t&&(se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co)));return b!==t&&(Me=m,b=Dn(b)),m=b,m}function I1(){var m,b,N;return m=Q,r.substr(Q,2)===S?(b=S,Q+=2):(b=t,I===0&&Qe(Tt)),b!==t&&(Me=m,b=ng()),m=b,m===t&&(m=Q,r.substr(Q,2)===Ql?(b=Ql,Q+=2):(b=t,I===0&&Qe(hp)),b!==t&&(Me=m,b=pp()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(dp.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Cp)),N!==t?(Me=m,b=mp(),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===G?(b=G,Q+=2):(b=t,I===0&&Qe(yt)),b!==t&&(Me=m,b=uA()),m=b,m===t&&(m=Q,r.substr(Q,2)===ji?(b=ji,Q+=2):(b=t,I===0&&Qe(bl)),b!==t&&(Me=m,b=Xe()),m=b,m===t&&(m=Q,r.substr(Q,2)===Aa?(b=Aa,Q+=2):(b=t,I===0&&Qe(sg)),b!==t&&(Me=m,b=bE()),m=b,m===t&&(m=Q,r.substr(Q,2)===Ep?(b=Ep,Q+=2):(b=t,I===0&&Qe(SE)),b!==t&&(Me=m,b=ar()),m=b,m===t&&(m=Q,r.substr(Q,2)===Rn?(b=Rn,Q+=2):(b=t,I===0&&Qe(Sl)),b!==t&&(Me=m,b=Ip()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(Ts.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(la)),N!==t?(Me=m,b=an(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Nue()))))))))),m}function Nue(){var m,b,N,U,ce,Se,ht,Bt,Jr,hi,rs,Jb;return m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(N=Gb(),N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Te?(b=Te,Q+=2):(b=t,I===0&&Qe(og)),b!==t?(N=Q,U=Q,ce=Gb(),ce!==t?(Se=Ln(),Se!==t?(ce=[ce,Se],U=ce):(Q=U,U=t)):(Q=U,U=t),U===t&&(U=Gb()),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===vl?(b=vl,Q+=2):(b=t,I===0&&Qe(Os)),b!==t?(N=Q,U=Q,ce=Ln(),ce!==t?(Se=Ln(),Se!==t?(ht=Ln(),ht!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===xl?(b=xl,Q+=2):(b=t,I===0&&Qe(gA)),b!==t?(N=Q,U=Q,ce=Ln(),ce!==t?(Se=Ln(),Se!==t?(ht=Ln(),ht!==t?(Bt=Ln(),Bt!==t?(Jr=Ln(),Jr!==t?(hi=Ln(),hi!==t?(rs=Ln(),rs!==t?(Jb=Ln(),Jb!==t?(ce=[ce,Se,ht,Bt,Jr,hi,rs,Jb],U=ce):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=ag(N),m=b):(Q=m,m=t)):(Q=m,m=t)))),m}function Gb(){var m;return Ag.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(ca)),m}function Ln(){var m;return ua.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(rt)),m}function Lue(){var m,b,N,U,ce;if(m=Q,b=[],N=Q,r.charCodeAt(Q)===92?(U=es,Q++):(U=t,I===0&&Qe(gt)),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N===t&&(N=Q,U=Q,I++,ce=b1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t)),N!==t)for(;N!==t;)b.push(N),N=Q,r.charCodeAt(Q)===92?(U=es,Q++):(U=t,I===0&&Qe(gt)),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N===t&&(N=Q,U=Q,I++,ce=b1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t));else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Yb(){var m,b,N,U,ce,Se;if(m=Q,r.charCodeAt(Q)===45?(b=fA,Q++):(b=t,I===0&&Qe(Pl)),b===t&&(r.charCodeAt(Q)===43?(b=Ms,Q++):(b=t,I===0&&Qe(Dl))),b===t&&(b=null),b!==t){if(N=[],qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne));else N=t;if(N!==t)if(r.charCodeAt(Q)===46?(U=vE,Q++):(U=t,I===0&&Qe(yp)),U!==t){if(ce=[],qe.test(r.charAt(Q))?(Se=r.charAt(Q),Q++):(Se=t,I===0&&Qe(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(Q))?(Se=r.charAt(Q),Q++):(Se=t,I===0&&Qe(ne));else ce=t;ce!==t?(Me=m,b=lg(b,N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;if(m===t){if(m=Q,r.charCodeAt(Q)===45?(b=fA,Q++):(b=t,I===0&&Qe(Pl)),b===t&&(r.charCodeAt(Q)===43?(b=Ms,Q++):(b=t,I===0&&Qe(Dl))),b===t&&(b=null),b!==t){if(N=[],qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne));else N=t;N!==t?(Me=m,b=wp(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;if(m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=xE(b)),m=b,m===t&&(m=Q,b=Rl(),b!==t&&(Me=m,b=kl(b)),m=b,m===t)))if(m=Q,r.charCodeAt(Q)===40?(b=ge,Q++):(b=t,I===0&&Qe(re)),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=y1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(Q)===41?(Se=O,Q++):(Se=t,I===0&&Qe(F)),Se!==t?(Me=m,b=PE(U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t}return m}function jb(){var m,b,N,U,ce,Se,ht,Bt;if(m=Q,b=Yb(),b!==t){for(N=[],U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===42?(Se=cg,Q++):(Se=t,I===0&&Qe(hA)),Se===t&&(r.charCodeAt(Q)===47?(Se=Rr,Q++):(Se=t,I===0&&Qe(DE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=Yb(),Bt!==t?(Me=U,ce=Ks(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t;for(;U!==t;){for(N.push(U),U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===42?(Se=cg,Q++):(Se=t,I===0&&Qe(hA)),Se===t&&(r.charCodeAt(Q)===47?(Se=Rr,Q++):(Se=t,I===0&&Qe(DE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=Yb(),Bt!==t?(Me=U,ce=Ks(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t}N!==t?(Me=m,b=Us(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;return m}function y1(){var m,b,N,U,ce,Se,ht,Bt;if(m=Q,b=jb(),b!==t){for(N=[],U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===43?(Se=Ms,Q++):(Se=t,I===0&&Qe(Dl)),Se===t&&(r.charCodeAt(Q)===45?(Se=fA,Q++):(Se=t,I===0&&Qe(Pl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=jb(),Bt!==t?(Me=U,ce=ug(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t;for(;U!==t;){for(N.push(U),U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===43?(Se=Ms,Q++):(Se=t,I===0&&Qe(Dl)),Se===t&&(r.charCodeAt(Q)===45?(Se=fA,Q++):(Se=t,I===0&&Qe(Pl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=jb(),Bt!==t?(Me=U,ce=ug(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t}N!==t?(Me=m,b=Us(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;return m}function w1(){var m,b,N,U,ce,Se;if(m=Q,r.substr(Q,3)===pA?(b=pA,Q+=3):(b=t,I===0&&Qe(R)),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=y1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(Q,2)===q?(Se=q,Q+=2):(Se=t,I===0&&Qe(Ce)),Se!==t?(Me=m,b=Ke(U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;return m}function B1(){var m,b,N,U;return m=Q,r.substr(Q,2)===Re?(b=Re,Q+=2):(b=t,I===0&&Qe(ze)),b!==t?(N=Mr(),N!==t?(r.charCodeAt(Q)===41?(U=O,Q++):(U=t,I===0&&Qe(F)),U!==t?(Me=m,b=dt(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function qb(){var m,b,N,U,ce,Se;return m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,2)===Db?(U=Db,Q+=2):(U=t,I===0&&Qe($M)),U!==t?(ce=f1(),ce!==t?(r.charCodeAt(Q)===125?(Se=Fe,Q++):(Se=t,I===0&&Qe(Ne)),Se!==t?(Me=m,b=e1(N,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,3)===kb?(U=kb,Q+=3):(U=t,I===0&&Qe(t1)),U!==t?(Me=m,b=r1(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,2)===Rb?(U=Rb,Q+=2):(U=t,I===0&&Qe(i1)),U!==t?(ce=f1(),ce!==t?(r.charCodeAt(Q)===125?(Se=Fe,Q++):(Se=t,I===0&&Qe(Ne)),Se!==t?(Me=m,b=n1(N,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,3)===Fb?(U=Fb,Q+=3):(U=t,I===0&&Qe(s1)),U!==t?(Me=m,b=o1(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.charCodeAt(Q)===125?(U=Fe,Q++):(U=t,I===0&&Qe(Ne)),U!==t?(Me=m,b=Nb(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.charCodeAt(Q)===36?(b=a1,Q++):(b=t,I===0&&Qe(A1)),b!==t?(N=Rl(),N!==t?(Me=m,b=Nb(N),m=b):(Q=m,m=t)):(Q=m,m=t)))))),m}function Tue(){var m,b,N;return m=Q,b=Oue(),b!==t?(Me=Q,N=l1(b),N?N=void 0:N=t,N!==t?(Me=m,b=c1(b),m=b):(Q=m,m=t)):(Q=m,m=t),m}function Oue(){var m,b,N,U,ce;if(m=Q,b=[],N=Q,U=Q,I++,ce=S1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N!==t)for(;N!==t;)b.push(N),N=Q,U=Q,I++,ce=S1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t);else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Q1(){var m,b,N;if(m=Q,b=[],Lb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Tb)),N!==t)for(;N!==t;)b.push(N),Lb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Tb));else b=t;return b!==t&&(Me=m,b=Ob()),m=b,m}function Rl(){var m,b,N;if(m=Q,b=[],Mb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Kb)),N!==t)for(;N!==t;)b.push(N),Mb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Kb));else b=t;return b!==t&&(Me=m,b=Ob()),m=b,m}function b1(){var m;return u1.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(gg)),m}function S1(){var m;return Ub.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(Hb)),m}function He(){var m,b;if(m=[],kE.test(r.charAt(Q))?(b=r.charAt(Q),Q++):(b=t,I===0&&Qe(RE)),b!==t)for(;b!==t;)m.push(b),kE.test(r.charAt(Q))?(b=r.charAt(Q),Q++):(b=t,I===0&&Qe(RE));else m=t;return m}if(k=n(),k!==t&&Q===r.length)return k;throw k!==t&&Q{"use strict";function Mge(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Ul(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ul)}Mge(Ul,Error);Ul.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new Ul(ne,null,null,Y)}function oe(ne,Y,pe){return new Ul(Ul.buildMessage(ne,Y),ne,Y,pe)}function le(){var ne,Y,pe,ie;return ne=v,Y=we(),Y!==t?(r.charCodeAt(v)===47?(pe=s,v++):(pe=t,$===0&&Fe(o)),pe!==t?(ie=we(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=we(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function we(){var ne,Y,pe,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(pe=c,v++):(pe=t,$===0&&Fe(u)),pe!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,pe,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(pe=Ae(),pe!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=Ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function Ae(){var ne,Y,pe;if(ne=v,Y=[],p.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(C)),pe!==t)for(;pe!==t;)Y.push(pe),p.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,pe;if(ne=v,Y=[],y.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(B)),pe!==t)for(;pe!==t;)Y.push(pe),y.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function UK(r){return typeof r>"u"||r===null}function Uge(r){return typeof r=="object"&&r!==null}function Hge(r){return Array.isArray(r)?r:UK(r)?[]:[r]}function Gge(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function Op(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Op.prototype=Object.create(Error.prototype);Op.prototype.constructor=Op;Op.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};HK.exports=Op});var jK=w((pXe,YK)=>{"use strict";var GK=Gl();function SS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}SS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),GK.repeat(" ",e)+i+a+s+` -`+GK.repeat(" ",e+this.position-n+i.length)+"^"};SS.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: -`+t)),i};YK.exports=SS});var si=w((dXe,JK)=>{"use strict";var qK=Qg(),qge=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Jge=["scalar","sequence","mapping"];function Wge(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function zge(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(qge.indexOf(t)===-1)throw new qK('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Wge(e.styleAliases||null),Jge.indexOf(this.kind)===-1)throw new qK('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}JK.exports=zge});var Yl=w((CXe,zK)=>{"use strict";var WK=Gl(),nI=Qg(),Vge=si();function vS(r,e,t){var i=[];return r.include.forEach(function(n){t=vS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Xge(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var _ge=si();VK.exports=new _ge("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var ZK=w((EXe,_K)=>{"use strict";var Zge=si();_K.exports=new Zge("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var eU=w((IXe,$K)=>{"use strict";var $ge=si();$K.exports=new $ge("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var sI=w((yXe,tU)=>{"use strict";var efe=Yl();tU.exports=new efe({explicit:[XK(),ZK(),eU()]})});var iU=w((wXe,rU)=>{"use strict";var tfe=si();function rfe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function ife(){return null}function nfe(r){return r===null}rU.exports=new tfe("tag:yaml.org,2002:null",{kind:"scalar",resolve:rfe,construct:ife,predicate:nfe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var sU=w((BXe,nU)=>{"use strict";var sfe=si();function ofe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function afe(r){return r==="true"||r==="True"||r==="TRUE"}function Afe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}nU.exports=new sfe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:ofe,construct:afe,predicate:Afe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var aU=w((QXe,oU)=>{"use strict";var lfe=Gl(),cfe=si();function ufe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function gfe(r){return 48<=r&&r<=55}function ffe(r){return 48<=r&&r<=57}function hfe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var cU=w((bXe,lU)=>{"use strict";var AU=Gl(),Cfe=si(),mfe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Efe(r){return!(r===null||!mfe.test(r)||r[r.length-1]==="_")}function Ife(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var yfe=/^[-+]?[0-9]+e/;function wfe(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(AU.isNegativeZero(r))return"-0.0";return t=r.toString(10),yfe.test(t)?t.replace("e",".e"):t}function Bfe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||AU.isNegativeZero(r))}lU.exports=new Cfe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Efe,construct:Ife,predicate:Bfe,represent:wfe,defaultStyle:"lowercase"})});var xS=w((SXe,uU)=>{"use strict";var Qfe=Yl();uU.exports=new Qfe({include:[sI()],implicit:[iU(),sU(),aU(),cU()]})});var PS=w((vXe,gU)=>{"use strict";var bfe=Yl();gU.exports=new bfe({include:[xS()]})});var dU=w((xXe,pU)=>{"use strict";var Sfe=si(),fU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),hU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function vfe(r){return r===null?!1:fU.exec(r)!==null||hU.exec(r)!==null}function xfe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=fU.exec(r),e===null&&(e=hU.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function Pfe(r){return r.toISOString()}pU.exports=new Sfe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:vfe,construct:xfe,instanceOf:Date,represent:Pfe})});var mU=w((PXe,CU)=>{"use strict";var Dfe=si();function kfe(r){return r==="<<"||r===null}CU.exports=new Dfe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:kfe})});var yU=w((DXe,IU)=>{"use strict";var jl;try{EU=J,jl=EU("buffer").Buffer}catch{}var EU,Rfe=si(),DS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function Ffe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=DS;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function Nfe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=DS,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),jl?jl.from?jl.from(a):new jl(a):a}function Lfe(r){var e="",t=0,i,n,s=r.length,o=DS;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function Tfe(r){return jl&&jl.isBuffer(r)}IU.exports=new Rfe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Ffe,construct:Nfe,predicate:Tfe,represent:Lfe})});var BU=w((kXe,wU)=>{"use strict";var Ofe=si(),Mfe=Object.prototype.hasOwnProperty,Kfe=Object.prototype.toString;function Ufe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Gfe=si(),Yfe=Object.prototype.toString;function jfe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Jfe=si(),Wfe=Object.prototype.hasOwnProperty;function zfe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Wfe.call(t,e)&&t[e]!==null)return!1;return!0}function Vfe(r){return r!==null?r:{}}SU.exports=new Jfe("tag:yaml.org,2002:set",{kind:"mapping",resolve:zfe,construct:Vfe})});var Sg=w((NXe,xU)=>{"use strict";var Xfe=Yl();xU.exports=new Xfe({include:[PS()],implicit:[dU(),mU()],explicit:[yU(),BU(),bU(),vU()]})});var DU=w((LXe,PU)=>{"use strict";var _fe=si();function Zfe(){return!0}function $fe(){}function ehe(){return""}function the(r){return typeof r>"u"}PU.exports=new _fe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Zfe,construct:$fe,predicate:the,represent:ehe})});var RU=w((TXe,kU)=>{"use strict";var rhe=si();function ihe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function nhe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function she(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function ohe(r){return Object.prototype.toString.call(r)==="[object RegExp]"}kU.exports=new rhe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:ihe,construct:nhe,predicate:ohe,represent:she})});var LU=w((OXe,NU)=>{"use strict";var oI;try{FU=J,oI=FU("esprima")}catch{typeof window<"u"&&(oI=window.esprima)}var FU,ahe=si();function Ahe(r){if(r===null)return!1;try{var e="("+r+")",t=oI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function lhe(r){var e="("+r+")",t=oI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function che(r){return r.toString()}function uhe(r){return Object.prototype.toString.call(r)==="[object Function]"}NU.exports=new ahe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Ahe,construct:lhe,predicate:uhe,represent:che})});var Mp=w((MXe,OU)=>{"use strict";var TU=Yl();OU.exports=TU.DEFAULT=new TU({include:[Sg()],explicit:[DU(),RU(),LU()]})});var r2=w((KXe,Kp)=>{"use strict";var da=Gl(),jU=Qg(),ghe=jK(),qU=Sg(),fhe=Mp(),wA=Object.prototype.hasOwnProperty,aI=1,JU=2,WU=3,AI=4,kS=1,hhe=2,MU=3,phe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,dhe=/[\x85\u2028\u2029]/,Che=/[,\[\]\{\}]/,zU=/^(?:!|!!|![a-z\-]+!)$/i,VU=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function KU(r){return Object.prototype.toString.call(r)}function Bo(r){return r===10||r===13}function Jl(r){return r===9||r===32}function un(r){return r===9||r===32||r===10||r===13}function vg(r){return r===44||r===91||r===93||r===123||r===125}function mhe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Ehe(r){return r===120?2:r===117?4:r===85?8:0}function Ihe(r){return 48<=r&&r<=57?r-48:-1}function UU(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` -`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function yhe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var XU=new Array(256),_U=new Array(256);for(ql=0;ql<256;ql++)XU[ql]=UU(ql)?1:0,_U[ql]=UU(ql);var ql;function whe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||fhe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function ZU(r,e){return new jU(e,new ghe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw ZU(r,e)}function lI(r,e){r.onWarning&&r.onWarning.call(null,ZU(r,e))}var HU={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,"duplication of %YAML directive"),i.length!==1&&ft(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&lI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],zU.test(n)||ft(e,"ill-formed tag handle (first argument) of the TAG directive"),wA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for "'+n+'" tag handle'),VU.test(s)||ft(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function yA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=da.repeat(` -`,e-1))}function Bhe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),un(h)||vg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),un(n)||t&&vg(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),un(n)||t&&vg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),un(i))break}else{if(r.position===r.lineStart&&cI(r)||t&&vg(h))break;if(Bo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(yA(r,s,o,!1),FS(r,r.line-l),s=o=r.position,a=!1),Jl(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return yA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function Qhe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(yA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else Bo(t)?(yA(r,i,n,!0),FS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&cI(r)?ft(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);ft(r,"unexpected end of the stream within a single quoted scalar")}function bhe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return yA(r,t,r.position,!0),r.position++,!0;if(a===92){if(yA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),Bo(a))zr(r,!1,e);else if(a<256&&XU[a])r.result+=_U[a],r.position++;else if((o=Ehe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=mhe(a))>=0?s=(s<<4)+o:ft(r,"expected hexadecimal character");r.result+=yhe(s),r.position++}else ft(r,"unknown escape sequence");t=i=r.position}else Bo(a)?(yA(r,t,i,!0),FS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&cI(r)?ft(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}ft(r,"unexpected end of the stream within a double quoted scalar")}function She(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||ft(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),un(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Pg(r,e,aI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Pg(r,e,aI,!1,!0),C=r.result),g?xg(r,s,f,p,h,C):c?s.push(xg(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,"unexpected end of the stream within a flow collection")}function vhe(r,e){var t,i,n=kS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)kS===n?n=g===43?MU:hhe:ft(r,"repeat of a chomping mode identifier");else if((u=Ihe(g))>=0)u===0?ft(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?ft(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Jl(g)){do g=r.input.charCodeAt(++r.position);while(Jl(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!Bo(g)&&g!==0)}for(;g!==0;){for(RS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),Bo(g)){l++;continue}if(r.lineIndente)&&l!==0)ft(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(Pg(r,e,AI,!0,n)&&(p?f=r.result:h=r.result),p||(xg(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):ft(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function Rhe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!un(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,"directive name must not be less than one character in length");o!==0;){for(;Jl(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!Bo(o));break}if(Bo(o))break;for(t=r.position;o!==0&&!un(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&RS(r),wA.call(HU,i)?HU[i](r,i,n):lI(r,'unknown document directive "'+i+'"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,"directives end mark is expected"),Pg(r,r.lineIndent-1,AI,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&dhe.test(r.input.slice(e,r.position))&&lI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&cI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=$U(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),e2(r,e,da.extend({schema:qU},t))}function Nhe(r,e){return t2(r,da.extend({schema:qU},e))}Kp.exports.loadAll=e2;Kp.exports.load=t2;Kp.exports.safeLoadAll=Fhe;Kp.exports.safeLoad=Nhe});var b2=w((UXe,OS)=>{"use strict";var Hp=Gl(),Gp=Qg(),Lhe=Mp(),The=Sg(),c2=Object.prototype.toString,u2=Object.prototype.hasOwnProperty,Ohe=9,Up=10,Mhe=13,Khe=32,Uhe=33,Hhe=34,g2=35,Ghe=37,Yhe=38,jhe=39,qhe=42,f2=44,Jhe=45,h2=58,Whe=61,zhe=62,Vhe=63,Xhe=64,p2=91,d2=93,_he=96,C2=123,Zhe=124,m2=125,Fi={};Fi[0]="\\0";Fi[7]="\\a";Fi[8]="\\b";Fi[9]="\\t";Fi[10]="\\n";Fi[11]="\\v";Fi[12]="\\f";Fi[13]="\\r";Fi[27]="\\e";Fi[34]='\\"';Fi[92]="\\\\";Fi[133]="\\N";Fi[160]="\\_";Fi[8232]="\\L";Fi[8233]="\\P";var $he=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function epe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&s2(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Dg(o))return uI;a=s>0?r.charCodeAt(s-1):null,f=f&&s2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?I2:y2:t>9&&E2(r)?uI:c?B2:w2}function ope(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&$he.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return rpe(r,l)}switch(spe(e,o,r.indent,s,a)){case I2:return e;case y2:return"'"+e.replace(/'/g,"''")+"'";case w2:return"|"+o2(e,r.indent)+a2(n2(e,n));case B2:return">"+o2(e,r.indent)+a2(n2(ape(e,s),n));case uI:return'"'+Ape(e,s)+'"';default:throw new Gp("impossible error: invalid scalar style")}}()}function o2(r,e){var t=E2(r)?String(e):"",i=r[r.length-1]===` -`,n=i&&(r[r.length-2]===` -`||r===` -`),s=n?"+":i?"":"-";return t+s+` -`}function a2(r){return r[r.length-1]===` -`?r.slice(0,-1):r}function ape(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` -`);return c=c!==-1?c:r.length,t.lastIndex=c,A2(r.slice(0,c),e)}(),n=r[0]===` -`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+A2(l,e),n=s}return i}function A2(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+r.slice(n,s),n=s+1),o=a;return l+=` -`,r.length-n>e&&o>n?l+=r.slice(n,o)+` -`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ape(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=i2((t-55296)*1024+i-56320+65536),s++;continue}n=Fi[t],e+=!n&&Dg(t)?r[s]:n||i2(t)}return e}function lpe(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Wl(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function gpe(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Gp("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&Up===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=NS(r,e)),Wl(r,e+1,u,!0,g)&&(r.dump&&Up===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function l2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Wl(r,e,t,i,n,s){r.tag=null,r.dump=t,l2(r,t,!1)||l2(r,t,!0);var o=c2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(gpe(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(upe(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(cpe(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(lpe(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&ope(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Gp("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function fpe(r,e){var t=[],i=[],n,s;for(LS(r,t,i),n=0,s=i.length;n{"use strict";var gI=r2(),S2=b2();function fI(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Fr.exports.Type=si();Fr.exports.Schema=Yl();Fr.exports.FAILSAFE_SCHEMA=sI();Fr.exports.JSON_SCHEMA=xS();Fr.exports.CORE_SCHEMA=PS();Fr.exports.DEFAULT_SAFE_SCHEMA=Sg();Fr.exports.DEFAULT_FULL_SCHEMA=Mp();Fr.exports.load=gI.load;Fr.exports.loadAll=gI.loadAll;Fr.exports.safeLoad=gI.safeLoad;Fr.exports.safeLoadAll=gI.safeLoadAll;Fr.exports.dump=S2.dump;Fr.exports.safeDump=S2.safeDump;Fr.exports.YAMLException=Qg();Fr.exports.MINIMAL_SCHEMA=sI();Fr.exports.SAFE_SCHEMA=Sg();Fr.exports.DEFAULT_SCHEMA=Mp();Fr.exports.scan=fI("scan");Fr.exports.parse=fI("parse");Fr.exports.compose=fI("compose");Fr.exports.addConstructor=fI("addConstructor")});var P2=w((GXe,x2)=>{"use strict";var ppe=v2();x2.exports=ppe});var k2=w((YXe,D2)=>{"use strict";function dpe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,zl)}dpe(zl,Error);zl.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Ts("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===pA*ug},A=function(R){return R.length===(pA+1)*ug},ae=function(){return pA++,!0},ge=function(){return pA--,!0},re=function(){return sg()},O=Ts("pseudostring"),F=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Rn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),he=/^[^\r\n\t ,\][{}:#"']/,ke=Rn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Fe=function(){return sg().replace(/^ *| *$/g,"")},Ne="--",oe=ar("--",!1),le=/^[a-zA-Z\/0-9]/,we=Rn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,Ae=Rn(["\r",` -`," "," ",":",","],!0,!1),qe="null",ne=ar("null",!1),Y=function(){return null},pe="true",ie=ar("true",!1),de=function(){return!0},tt="false",Pt=ar("false",!1),It=function(){return!1},Or=Ts("string"),ii='"',gi=ar('"',!1),hr=function(){return""},fi=function(R){return R},ni=function(R){return R.join("")},Ls=/^[^"\\\0-\x1F\x7F]/,pr=Rn(['"',"\\",["\0",""],"\x7F"],!0,!1),Ei='\\"',_n=ar('\\"',!1),oa=function(){return'"'},aA="\\\\",eg=ar("\\\\",!1),Zn=function(){return"\\"},AA="\\/",aa=ar("\\/",!1),up=function(){return"/"},lA="\\b",cA=ar("\\b",!1),wr=function(){return"\b"},wl="\\f",tg=ar("\\f",!1),po=function(){return"\f"},rg="\\n",gp=ar("\\n",!1),fp=function(){return` -`},vr="\\r",se=ar("\\r",!1),Co=function(){return"\r"},Dn="\\t",ig=ar("\\t",!1),Qt=function(){return" "},Bl="\\u",kn=ar("\\u",!1),$n=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},es=/^[0-9a-fA-F]/,gt=Rn([["0","9"],["a","f"],["A","F"]],!1,!1),mo=Ts("blank space"),At=/^[ \t]/,an=Rn([" "," "],!1,!1),S=Ts("white space"),Tt=/^[ \t\n\r]/,ng=Rn([" "," ",` -`,"\r"],!1,!1),Ql=`\r -`,hp=ar(`\r -`,!1),pp=` -`,dp=ar(` -`,!1),Cp="\r",mp=ar("\r",!1),G=0,yt=0,uA=[{line:1,column:1}],ji=0,bl=[],Xe=0,Aa;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function sg(){return r.substring(yt,G)}function bE(){return An(yt,G)}function Ep(R,q){throw q=q!==void 0?q:An(yt,G),vl([Ts(R)],r.substring(yt,G),q)}function SE(R,q){throw q=q!==void 0?q:An(yt,G),og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Rn(R,q,Ce){return{type:"class",parts:R,inverted:q,ignoreCase:Ce}}function Sl(){return{type:"any"}}function Ip(){return{type:"end"}}function Ts(R){return{type:"other",description:R}}function la(R){var q=uA[R],Ce;if(q)return q;for(Ce=R-1;!uA[Ce];)Ce--;for(q=uA[Ce],q={line:q.line,column:q.column};Ceji&&(ji=G,bl=[]),bl.push(R))}function og(R,q){return new zl(R,null,null,q)}function vl(R,q,Ce){return new zl(zl.buildMessage(R,q),R,q,Ce)}function Os(){var R;return R=ag(),R}function xl(){var R,q,Ce;for(R=G,q=[],Ce=gA();Ce!==t;)q.push(Ce),Ce=gA();return q!==t&&(yt=R,q=s(q)),R=q,R}function gA(){var R,q,Ce,Ke,Re;return R=G,q=ua(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Te(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function ag(){var R,q,Ce;for(R=G,q=[],Ce=Ag();Ce!==t;)q.push(Ce),Ce=Ag();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ag(){var R,q,Ce,Ke,Re,ze,dt,Ft,Fn;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Te(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=Us(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Te(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=Us(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Te(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ks(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ks();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ua(),q!==t?(Ce=Pl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Te(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ua(),q!==t?(Ce=Ms(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Te(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ua(),q!==t)if(Ce=Ms(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=vE(),Re!==t){if(ze=[],dt=Ks(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ks();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ua(),q!==t)if(Ce=Ms(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Te(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Fn=Ms(),Fn!==t?(yt=Re,ze=D(Ce,Fn),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Te(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Fn=Ms(),Fn!==t?(yt=Re,ze=D(Ce,Fn),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Te(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=ca(),Ft!==t?(yt=R,q=L(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=Us(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Te(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ks(),Ce!==t?(Ke=Eo(),Ke!==t?(Re=xl(),Re!==t?(ze=fA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Us(),q!==t?(Ce=Eo(),Ce!==t?(Ke=ag(),Ke!==t?(Re=fA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Dl(),q!==t){if(Ce=[],Ke=Ks(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ks();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ua(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));return q!==t?(yt=G,Ce=Z(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Te($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function Eo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function fA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Pl(){var R;return R=kl(),R===t&&(R=yp()),R}function Ms(){var R,q,Ce;if(R=kl(),R===t){if(R=G,q=[],Ce=lg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=lg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Dl(){var R;return R=wp(),R===t&&(R=xE(),R===t&&(R=kl(),R===t&&(R=yp()))),R}function vE(){var R;return R=wp(),R===t&&(R=kl(),R===t&&(R=lg())),R}function yp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(he.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Te(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(he.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Te(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(O)),R}function lg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Te(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Te(we)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Te(Ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Te(Ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function wp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Te(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function xE(){var R,q;return R=G,r.substr(G,4)===pe?(q=pe,G+=4):(q=t,Xe===0&&Te(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,Xe===0&&Te(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function kl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Te(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Te(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Te(gi)),q!==t?(Ce=PE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Te(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Te(Or)),R}function PE(){var R,q,Ce;if(R=G,q=[],Ce=cg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=cg();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function cg(){var R,q,Ce,Ke,Re,ze;return Ls.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Te(pr)),R===t&&(R=G,r.substr(G,2)===Ei?(q=Ei,G+=2):(q=t,Xe===0&&Te(_n)),q!==t&&(yt=R,q=oa()),R=q,R===t&&(R=G,r.substr(G,2)===aA?(q=aA,G+=2):(q=t,Xe===0&&Te(eg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===AA?(q=AA,G+=2):(q=t,Xe===0&&Te(aa)),q!==t&&(yt=R,q=up()),R=q,R===t&&(R=G,r.substr(G,2)===lA?(q=lA,G+=2):(q=t,Xe===0&&Te(cA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===wl?(q=wl,G+=2):(q=t,Xe===0&&Te(tg)),q!==t&&(yt=R,q=po()),R=q,R===t&&(R=G,r.substr(G,2)===rg?(q=rg,G+=2):(q=t,Xe===0&&Te(gp)),q!==t&&(yt=R,q=fp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Te(se)),q!==t&&(yt=R,q=Co()),R=q,R===t&&(R=G,r.substr(G,2)===Dn?(q=Dn,G+=2):(q=t,Xe===0&&Te(ig)),q!==t&&(yt=R,q=Qt()),R=q,R===t&&(R=G,r.substr(G,2)===Bl?(q=Bl,G+=2):(q=t,Xe===0&&Te(kn)),q!==t?(Ce=hA(),Ce!==t?(Ke=hA(),Ke!==t?(Re=hA(),Re!==t?(ze=hA(),ze!==t?(yt=R,q=$n(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function hA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Te(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(an)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(an));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(mo)),R}function DE(){var R,q;if(Xe++,R=[],Tt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ng)),q!==t)for(;q!==t;)R.push(q),Tt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ng));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(S)),R}function Ks(){var R,q,Ce,Ke,Re,ze;if(R=G,q=Us(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=Us(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=Us(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function Us(){var R;return r.substr(G,2)===Ql?(R=Ql,G+=2):(R=t,Xe===0&&Te(hp)),R===t&&(r.charCodeAt(G)===10?(R=pp,G++):(R=t,Xe===0&&Te(dp)),R===t&&(r.charCodeAt(G)===13?(R=Cp,G++):(R=t,Xe===0&&Te(mp)))),R}let ug=2,pA=0;if(Aa=n(),Aa!==t&&G===r.length)return Aa;throw Aa!==t&&G{"use strict";var wpe=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=wpe(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};KS.exports=T2;KS.exports.default=T2});var M2=w((VXe,Bpe)=>{Bpe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var Vl=w(On=>{"use strict";var U2=M2(),Qo=process.env;Object.defineProperty(On,"_vendors",{value:U2.map(function(r){return r.constant})});On.name=null;On.isPR=null;U2.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return K2(i)});if(On[r.constant]=t,t)switch(On.name=r.name,typeof r.pr){case"string":On.isPR=!!Qo[r.pr];break;case"object":"env"in r.pr?On.isPR=r.pr.env in Qo&&Qo[r.pr.env]!==r.pr.ne:"any"in r.pr?On.isPR=r.pr.any.some(function(i){return!!Qo[i]}):On.isPR=K2(r.pr);break;default:On.isPR=null}});On.isCI=!!(Qo.CI||Qo.CONTINUOUS_INTEGRATION||Qo.BUILD_NUMBER||Qo.RUN_ID||On.name);function K2(r){return typeof r=="string"?!!Qo[r]:Object.keys(r).every(function(e){return Qo[e]===r[e]})}});var gn={};ut(gn,{KeyRelationship:()=>Xl,applyCascade:()=>zp,base64RegExp:()=>q2,colorStringAlphaRegExp:()=>j2,colorStringRegExp:()=>Y2,computeKey:()=>BA,getPrintable:()=>Vr,hasExactLength:()=>X2,hasForbiddenKeys:()=>tde,hasKeyRelationship:()=>JS,hasMaxLength:()=>Mpe,hasMinLength:()=>Ope,hasMutuallyExclusiveKeys:()=>rde,hasRequiredKeys:()=>ede,hasUniqueItems:()=>Kpe,isArray:()=>Ppe,isAtLeast:()=>Gpe,isAtMost:()=>Ype,isBase64:()=>Zpe,isBoolean:()=>Spe,isDate:()=>xpe,isDict:()=>kpe,isEnum:()=>Wi,isHexColor:()=>_pe,isISO8601:()=>Xpe,isInExclusiveRange:()=>qpe,isInInclusiveRange:()=>jpe,isInstanceOf:()=>Fpe,isInteger:()=>Jpe,isJSON:()=>$pe,isLiteral:()=>Qpe,isLowerCase:()=>Wpe,isNegative:()=>Upe,isNullable:()=>Tpe,isNumber:()=>vpe,isObject:()=>Rpe,isOneOf:()=>Npe,isOptional:()=>Lpe,isPositive:()=>Hpe,isString:()=>Wp,isTuple:()=>Dpe,isUUID4:()=>Vpe,isUnknown:()=>V2,isUpperCase:()=>zpe,iso8601RegExp:()=>qS,makeCoercionFn:()=>_l,makeSetter:()=>z2,makeTrait:()=>W2,makeValidator:()=>bt,matchesRegExp:()=>Vp,plural:()=>EI,pushError:()=>pt,simpleKeyRegExp:()=>G2,uuid4RegExp:()=>J2});function bt({test:r}){return W2(r)()}function Vr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function BA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:G2.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function _l(r,e){return t=>{let i=r[e];return r[e]=t,_l(r,e).bind(null,i)}}function z2(r,e){return t=>{r[e]=t}}function EI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}function Qpe(r){return bt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Wi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return bt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var G2,Y2,j2,q2,J2,qS,W2,V2,Wp,bpe,Spe,vpe,xpe,Ppe,Dpe,kpe,Rpe,Fpe,Npe,zp,Lpe,Tpe,Ope,Mpe,X2,Kpe,Upe,Hpe,Gpe,Ype,jpe,qpe,Jpe,Vp,Wpe,zpe,Vpe,Xpe,_pe,Zpe,$pe,ede,tde,rde,Xl,ide,JS,ns=Yue(()=>{G2=/^[a-zA-Z_][a-zA-Z0-9_]*$/,Y2=/^#[0-9a-f]{6}$/i,j2=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,q2=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,J2=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,qS=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,W2=r=>()=>r;V2=()=>bt({test:(r,e)=>!0});Wp=()=>bt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Vr(r)})`):!0});bpe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),Spe=()=>bt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=bpe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),vpe=()=>bt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),xpe=()=>bt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&qS.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),Ppe=(r,{delimiter:e}={})=>bt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=X2(r.length);return bt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;abt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return bt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:BA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:BA(n,l),coercion:_l(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:BA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:z2(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Fpe=r=>bt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Npe=(r,{exclusive:e=!1}={})=>bt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),zp=(r,e)=>bt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?_l(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),Lpe=r=>bt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),Tpe=r=>bt({test:(e,t)=>e===null?!0:r(e,t)}),Ope=r=>bt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Mpe=r=>bt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),X2=r=>bt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),Kpe=({map:r}={})=>bt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sbt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Hpe=()=>bt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Gpe=r=>bt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Ype=r=>bt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),jpe=(r,e)=>bt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),qpe=(r,e)=>bt({test:(t,i)=>t>=r&&tbt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),Vp=r=>bt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Wpe=()=>bt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),zpe=()=>bt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Vpe=()=>bt({test:(r,e)=>J2.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Xpe=()=>bt({test:(r,e)=>qS.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),_pe=({alpha:r=!1})=>bt({test:(e,t)=>(r?Y2.test(e):j2.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),Zpe=()=>bt({test:(r,e)=>q2.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),$pe=(r=V2())=>bt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),ede=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${EI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},tde=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${EI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},rde=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(Xl||(Xl={}));ide={[Xl.Forbids]:{expect:!1,message:"forbids using"},[Xl.Requires]:{expect:!0,message:"requires using"}},JS=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=ide[e];return bt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${EI(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})}});var fH=w((V_e,gH)=>{"use strict";gH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Tg=w((X_e,ev)=>{"use strict";var Ide=fH(),hH=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Ide(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};ev.exports=hH;ev.exports.default=hH});var ed=w((Z_e,pH)=>{var yde="2.0.0",wde=Number.MAX_SAFE_INTEGER||9007199254740991,Bde=16;pH.exports={SEMVER_SPEC_VERSION:yde,MAX_LENGTH:256,MAX_SAFE_INTEGER:wde,MAX_SAFE_COMPONENT_LENGTH:Bde}});var td=w(($_e,dH)=>{var Qde=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};dH.exports=Qde});var Zl=w((bA,CH)=>{var{MAX_SAFE_COMPONENT_LENGTH:tv}=ed(),bde=td();bA=CH.exports={};var Sde=bA.re=[],$e=bA.src=[],et=bA.t={},vde=0,St=(r,e,t)=>{let i=vde++;bde(i,e),et[r]=i,$e[i]=e,Sde[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${$e[et.NUMERICIDENTIFIER]})\\.(${$e[et.NUMERICIDENTIFIER]})\\.(${$e[et.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${$e[et.NUMERICIDENTIFIERLOOSE]})\\.(${$e[et.NUMERICIDENTIFIERLOOSE]})\\.(${$e[et.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${$e[et.NUMERICIDENTIFIER]}|${$e[et.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${$e[et.NUMERICIDENTIFIERLOOSE]}|${$e[et.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${$e[et.PRERELEASEIDENTIFIER]}(?:\\.${$e[et.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${$e[et.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${$e[et.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${$e[et.BUILDIDENTIFIER]}(?:\\.${$e[et.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${$e[et.MAINVERSION]}${$e[et.PRERELEASE]}?${$e[et.BUILD]}?`);St("FULL",`^${$e[et.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${$e[et.MAINVERSIONLOOSE]}${$e[et.PRERELEASELOOSE]}?${$e[et.BUILD]}?`);St("LOOSE",`^${$e[et.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${$e[et.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${$e[et.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${$e[et.XRANGEIDENTIFIER]})(?:\\.(${$e[et.XRANGEIDENTIFIER]})(?:\\.(${$e[et.XRANGEIDENTIFIER]})(?:${$e[et.PRERELEASE]})?${$e[et.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:${$e[et.PRERELEASELOOSE]})?${$e[et.BUILD]}?)?)?`);St("XRANGE",`^${$e[et.GTLT]}\\s*${$e[et.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${$e[et.GTLT]}\\s*${$e[et.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${tv}})(?:\\.(\\d{1,${tv}}))?(?:\\.(\\d{1,${tv}}))?(?:$|[^\\d])`);St("COERCERTL",$e[et.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${$e[et.LONETILDE]}\\s+`,!0);bA.tildeTrimReplace="$1~";St("TILDE",`^${$e[et.LONETILDE]}${$e[et.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${$e[et.LONETILDE]}${$e[et.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${$e[et.LONECARET]}\\s+`,!0);bA.caretTrimReplace="$1^";St("CARET",`^${$e[et.LONECARET]}${$e[et.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${$e[et.LONECARET]}${$e[et.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${$e[et.GTLT]}\\s*(${$e[et.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${$e[et.GTLT]}\\s*(${$e[et.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${$e[et.GTLT]}\\s*(${$e[et.LOOSEPLAIN]}|${$e[et.XRANGEPLAIN]})`,!0);bA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${$e[et.XRANGEPLAIN]})\\s+-\\s+(${$e[et.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${$e[et.XRANGEPLAINLOOSE]})\\s+-\\s+(${$e[et.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var rd=w((eZe,mH)=>{var xde=["includePrerelease","loose","rtl"],Pde=r=>r?typeof r!="object"?{loose:!0}:xde.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};mH.exports=Pde});var bI=w((tZe,yH)=>{var EH=/^[0-9]+$/,IH=(r,e)=>{let t=EH.test(r),i=EH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rIH(e,r);yH.exports={compareIdentifiers:IH,rcompareIdentifiers:Dde}});var Li=w((rZe,bH)=>{var SI=td(),{MAX_LENGTH:wH,MAX_SAFE_INTEGER:vI}=ed(),{re:BH,t:QH}=Zl(),kde=rd(),{compareIdentifiers:id}=bI(),Un=class{constructor(e,t){if(t=kde(t),e instanceof Un){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>wH)throw new TypeError(`version is longer than ${wH} characters`);SI("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?BH[QH.LOOSE]:BH[QH.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>vI||this.major<0)throw new TypeError("Invalid major version");if(this.minor>vI||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>vI||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};bH.exports=Un});var $l=w((iZe,PH)=>{var{MAX_LENGTH:Rde}=ed(),{re:SH,t:vH}=Zl(),xH=Li(),Fde=rd(),Nde=(r,e)=>{if(e=Fde(e),r instanceof xH)return r;if(typeof r!="string"||r.length>Rde||!(e.loose?SH[vH.LOOSE]:SH[vH.FULL]).test(r))return null;try{return new xH(r,e)}catch{return null}};PH.exports=Nde});var kH=w((nZe,DH)=>{var Lde=$l(),Tde=(r,e)=>{let t=Lde(r,e);return t?t.version:null};DH.exports=Tde});var FH=w((sZe,RH)=>{var Ode=$l(),Mde=(r,e)=>{let t=Ode(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};RH.exports=Mde});var LH=w((oZe,NH)=>{var Kde=Li(),Ude=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new Kde(r,t).inc(e,i).version}catch{return null}};NH.exports=Ude});var ss=w((aZe,OH)=>{var TH=Li(),Hde=(r,e,t)=>new TH(r,t).compare(new TH(e,t));OH.exports=Hde});var xI=w((AZe,MH)=>{var Gde=ss(),Yde=(r,e,t)=>Gde(r,e,t)===0;MH.exports=Yde});var HH=w((lZe,UH)=>{var KH=$l(),jde=xI(),qde=(r,e)=>{if(jde(r,e))return null;{let t=KH(r),i=KH(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};UH.exports=qde});var YH=w((cZe,GH)=>{var Jde=Li(),Wde=(r,e)=>new Jde(r,e).major;GH.exports=Wde});var qH=w((uZe,jH)=>{var zde=Li(),Vde=(r,e)=>new zde(r,e).minor;jH.exports=Vde});var WH=w((gZe,JH)=>{var Xde=Li(),_de=(r,e)=>new Xde(r,e).patch;JH.exports=_de});var VH=w((fZe,zH)=>{var Zde=$l(),$de=(r,e)=>{let t=Zde(r,e);return t&&t.prerelease.length?t.prerelease:null};zH.exports=$de});var _H=w((hZe,XH)=>{var eCe=ss(),tCe=(r,e,t)=>eCe(e,r,t);XH.exports=tCe});var $H=w((pZe,ZH)=>{var rCe=ss(),iCe=(r,e)=>rCe(r,e,!0);ZH.exports=iCe});var PI=w((dZe,tG)=>{var eG=Li(),nCe=(r,e,t)=>{let i=new eG(r,t),n=new eG(e,t);return i.compare(n)||i.compareBuild(n)};tG.exports=nCe});var iG=w((CZe,rG)=>{var sCe=PI(),oCe=(r,e)=>r.sort((t,i)=>sCe(t,i,e));rG.exports=oCe});var sG=w((mZe,nG)=>{var aCe=PI(),ACe=(r,e)=>r.sort((t,i)=>aCe(i,t,e));nG.exports=ACe});var nd=w((EZe,oG)=>{var lCe=ss(),cCe=(r,e,t)=>lCe(r,e,t)>0;oG.exports=cCe});var DI=w((IZe,aG)=>{var uCe=ss(),gCe=(r,e,t)=>uCe(r,e,t)<0;aG.exports=gCe});var rv=w((yZe,AG)=>{var fCe=ss(),hCe=(r,e,t)=>fCe(r,e,t)!==0;AG.exports=hCe});var kI=w((wZe,lG)=>{var pCe=ss(),dCe=(r,e,t)=>pCe(r,e,t)>=0;lG.exports=dCe});var RI=w((BZe,cG)=>{var CCe=ss(),mCe=(r,e,t)=>CCe(r,e,t)<=0;cG.exports=mCe});var iv=w((QZe,uG)=>{var ECe=xI(),ICe=rv(),yCe=nd(),wCe=kI(),BCe=DI(),QCe=RI(),bCe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return ECe(r,t,i);case"!=":return ICe(r,t,i);case">":return yCe(r,t,i);case">=":return wCe(r,t,i);case"<":return BCe(r,t,i);case"<=":return QCe(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};uG.exports=bCe});var fG=w((bZe,gG)=>{var SCe=Li(),vCe=$l(),{re:FI,t:NI}=Zl(),xCe=(r,e)=>{if(r instanceof SCe)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(FI[NI.COERCE]);else{let i;for(;(i=FI[NI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),FI[NI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;FI[NI.COERCERTL].lastIndex=-1}return t===null?null:vCe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};gG.exports=xCe});var pG=w((SZe,hG)=>{"use strict";hG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var sd=w((vZe,dG)=>{"use strict";dG.exports=Ht;Ht.Node=ec;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var RCe=sd(),tc=Symbol("max"),Ia=Symbol("length"),Og=Symbol("lengthCalculator"),ad=Symbol("allowStale"),rc=Symbol("maxAge"),Ea=Symbol("dispose"),CG=Symbol("noDisposeOnSet"),di=Symbol("lruList"),Ws=Symbol("cache"),EG=Symbol("updateAgeOnGet"),nv=()=>1,ov=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[tc]=e.max||1/0,i=e.length||nv;if(this[Og]=typeof i!="function"?nv:i,this[ad]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[rc]=e.maxAge||0,this[Ea]=e.dispose,this[CG]=e.noDisposeOnSet||!1,this[EG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[tc]=e||1/0,od(this)}get max(){return this[tc]}set allowStale(e){this[ad]=!!e}get allowStale(){return this[ad]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[rc]=e,od(this)}get maxAge(){return this[rc]}set lengthCalculator(e){typeof e!="function"&&(e=nv),e!==this[Og]&&(this[Og]=e,this[Ia]=0,this[di].forEach(t=>{t.length=this[Og](t.value,t.key),this[Ia]+=t.length})),od(this)}get lengthCalculator(){return this[Og]}get length(){return this[Ia]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;mG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;mG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Ea]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Ea](e.key,e.value)),this[Ws]=new Map,this[di]=new RCe,this[Ia]=0}dump(){return this[di].map(e=>LI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[rc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[Og](t,e);if(this[Ws].has(e)){if(s>this[tc])return Mg(this,this[Ws].get(e)),!1;let l=this[Ws].get(e).value;return this[Ea]&&(this[CG]||this[Ea](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Ia]+=s-l.length,l.length=s,this.get(e),od(this),!0}let o=new av(e,t,s,n,i);return o.length>this[tc]?(this[Ea]&&this[Ea](e,t),!1):(this[Ia]+=o.length,this[di].unshift(o),this[Ws].set(e,this[di].head),od(this),!0)}has(e){if(!this[Ws].has(e))return!1;let t=this[Ws].get(e).value;return!LI(this,t)}get(e){return sv(this,e,!0)}peek(e){return sv(this,e,!1)}pop(){let e=this[di].tail;return e?(Mg(this,e),e.value):null}del(e){Mg(this,this[Ws].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Ws].forEach((e,t)=>sv(this,t,!1))}},sv=(r,e,t)=>{let i=r[Ws].get(e);if(i){let n=i.value;if(LI(r,n)){if(Mg(r,i),!r[ad])return}else t&&(r[EG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},LI=(r,e)=>{if(!e||!e.maxAge&&!r[rc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[rc]&&t>r[rc]},od=r=>{if(r[Ia]>r[tc])for(let e=r[di].tail;r[Ia]>r[tc]&&e!==null;){let t=e.prev;Mg(r,e),e=t}},Mg=(r,e)=>{if(e){let t=e.value;r[Ea]&&r[Ea](t.key,t.value),r[Ia]-=t.length,r[Ws].delete(t.key),r[di].removeNode(e)}},av=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},mG=(r,e,t,i)=>{let n=t.value;LI(r,n)&&(Mg(r,t),r[ad]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};IG.exports=ov});var os=w((PZe,bG)=>{var ic=class{constructor(e,t){if(t=NCe(t),e instanceof ic)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new ic(e.raw,t);if(e instanceof Av)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!BG(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&KCe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=wG.get(i);if(n)return n;let s=this.options.loose,o=s?Ti[Bi.HYPHENRANGELOOSE]:Ti[Bi.HYPHENRANGE];e=e.replace(o,VCe(this.options.includePrerelease)),Gr("hyphen replace",e),e=e.replace(Ti[Bi.COMPARATORTRIM],TCe),Gr("comparator trim",e,Ti[Bi.COMPARATORTRIM]),e=e.replace(Ti[Bi.TILDETRIM],OCe),e=e.replace(Ti[Bi.CARETTRIM],MCe),e=e.split(/\s+/).join(" ");let a=s?Ti[Bi.COMPARATORLOOSE]:Ti[Bi.COMPARATOR],l=e.split(" ").map(f=>UCe(f,this.options)).join(" ").split(/\s+/).map(f=>zCe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Av(f,this.options)),c=l.length,u=new Map;for(let f of l){if(BG(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return wG.set(i,g),g}intersects(e,t){if(!(e instanceof ic))throw new TypeError("a Range is required");return this.set.some(i=>QG(i,t)&&e.set.some(n=>QG(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new LCe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",KCe=r=>r.value==="",QG=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},UCe=(r,e)=>(Gr("comp",r,e),r=YCe(r,e),Gr("caret",r),r=HCe(r,e),Gr("tildes",r),r=qCe(r,e),Gr("xrange",r),r=WCe(r,e),Gr("stars",r),r),Vi=r=>!r||r.toLowerCase()==="x"||r==="*",HCe=(r,e)=>r.trim().split(/\s+/).map(t=>GCe(t,e)).join(" "),GCe=(r,e)=>{let t=e.loose?Ti[Bi.TILDELOOSE]:Ti[Bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Gr("tilde",r,i,n,s,o,a);let l;return Vi(n)?l="":Vi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Vi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Gr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Gr("tilde return",l),l})},YCe=(r,e)=>r.trim().split(/\s+/).map(t=>jCe(t,e)).join(" "),jCe=(r,e)=>{Gr("caret",r,e);let t=e.loose?Ti[Bi.CARETLOOSE]:Ti[Bi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{Gr("caret",r,n,s,o,a,l);let c;return Vi(s)?c="":Vi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Vi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Gr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Gr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Gr("caret return",c),c})},qCe=(r,e)=>(Gr("replaceXRanges",r,e),r.split(/\s+/).map(t=>JCe(t,e)).join(" ")),JCe=(r,e)=>{r=r.trim();let t=e.loose?Ti[Bi.XRANGELOOSE]:Ti[Bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Gr("xRange",r,i,n,s,o,a,l);let c=Vi(s),u=c||Vi(o),g=u||Vi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Gr("xRange return",i),i})},WCe=(r,e)=>(Gr("replaceStars",r,e),r.trim().replace(Ti[Bi.STAR],"")),zCe=(r,e)=>(Gr("replaceGTE0",r,e),r.trim().replace(Ti[e.includePrerelease?Bi.GTE0PRE:Bi.GTE0],"")),VCe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Vi(i)?t="":Vi(n)?t=`>=${i}.0.0${r?"-0":""}`:Vi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Vi(c)?l="":Vi(u)?l=`<${+c+1}.0.0-0`:Vi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),XCe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ad=w((DZe,DG)=>{var ld=Symbol("SemVer ANY"),Kg=class{static get ANY(){return ld}constructor(e,t){if(t=_Ce(t),e instanceof Kg){if(e.loose===!!t.loose)return e;e=e.value}cv("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===ld?this.value="":this.value=this.operator+this.semver.version,cv("comp",this)}parse(e){let t=this.options.loose?SG[vG.COMPARATORLOOSE]:SG[vG.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new xG(i[2],this.options.loose):this.semver=ld}toString(){return this.value}test(e){if(cv("Comparator.test",e,this.options.loose),this.semver===ld||e===ld)return!0;if(typeof e=="string")try{e=new xG(e,this.options)}catch{return!1}return lv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Kg))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new PG(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new PG(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=lv(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=lv(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};DG.exports=Kg;var _Ce=rd(),{re:SG,t:vG}=Zl(),lv=iv(),cv=td(),xG=Li(),PG=os()});var cd=w((kZe,kG)=>{var ZCe=os(),$Ce=(r,e,t)=>{try{e=new ZCe(e,t)}catch{return!1}return e.test(r)};kG.exports=$Ce});var FG=w((RZe,RG)=>{var eme=os(),tme=(r,e)=>new eme(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));RG.exports=tme});var LG=w((FZe,NG)=>{var rme=Li(),ime=os(),nme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new ime(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new rme(i,t))}),i};NG.exports=nme});var OG=w((NZe,TG)=>{var sme=Li(),ome=os(),ame=(r,e,t)=>{let i=null,n=null,s=null;try{s=new ome(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new sme(i,t))}),i};TG.exports=ame});var UG=w((LZe,KG)=>{var uv=Li(),Ame=os(),MG=nd(),lme=(r,e)=>{r=new Ame(r,e);let t=new uv("0.0.0");if(r.test(t)||(t=new uv("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new uv(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||MG(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||MG(t,s))&&(t=s)}return t&&r.test(t)?t:null};KG.exports=lme});var GG=w((TZe,HG)=>{var cme=os(),ume=(r,e)=>{try{return new cme(r,e).range||"*"}catch{return null}};HG.exports=ume});var TI=w((OZe,JG)=>{var gme=Li(),qG=Ad(),{ANY:fme}=qG,hme=os(),pme=cd(),YG=nd(),jG=DI(),dme=RI(),Cme=kI(),mme=(r,e,t,i)=>{r=new gme(r,i),e=new hme(e,i);let n,s,o,a,l;switch(t){case">":n=YG,s=dme,o=jG,a=">",l=">=";break;case"<":n=jG,s=Cme,o=YG,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(pme(r,e,i))return!1;for(let c=0;c{h.semver===fme&&(h=new qG(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};JG.exports=mme});var zG=w((MZe,WG)=>{var Eme=TI(),Ime=(r,e,t)=>Eme(r,e,">",t);WG.exports=Ime});var XG=w((KZe,VG)=>{var yme=TI(),wme=(r,e,t)=>yme(r,e,"<",t);VG.exports=wme});var $G=w((UZe,ZG)=>{var _G=os(),Bme=(r,e,t)=>(r=new _G(r,t),e=new _G(e,t),r.intersects(e));ZG.exports=Bme});var tY=w((HZe,eY)=>{var Qme=cd(),bme=ss();eY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>bme(u,g,t));for(let u of o)Qme(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var rY=os(),OI=Ad(),{ANY:gv}=OI,ud=cd(),fv=ss(),Sme=(r,e,t={})=>{if(r===e)return!0;r=new rY(r,t),e=new rY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=vme(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},vme=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===gv){if(e.length===1&&e[0].semver===gv)return!0;t.includePrerelease?r=[new OI(">=0.0.0-0")]:r=[new OI(">=0.0.0")]}if(e.length===1&&e[0].semver===gv){if(t.includePrerelease)return!0;e=[new OI(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=iY(n,h,t):h.operator==="<"||h.operator==="<="?s=nY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=fv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!ud(h,String(n),t)||s&&!ud(h,String(s),t))return null;for(let p of e)if(!ud(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=iY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!ud(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=nY(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!ud(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},iY=(r,e,t)=>{if(!r)return e;let i=fv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},nY=(r,e,t)=>{if(!r)return e;let i=fv(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};sY.exports=Sme});var Xr=w((YZe,aY)=>{var hv=Zl();aY.exports={re:hv.re,src:hv.src,tokens:hv.t,SEMVER_SPEC_VERSION:ed().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:bI().compareIdentifiers,rcompareIdentifiers:bI().rcompareIdentifiers,parse:$l(),valid:kH(),clean:FH(),inc:LH(),diff:HH(),major:YH(),minor:qH(),patch:WH(),prerelease:VH(),compare:ss(),rcompare:_H(),compareLoose:$H(),compareBuild:PI(),sort:iG(),rsort:sG(),gt:nd(),lt:DI(),eq:xI(),neq:rv(),gte:kI(),lte:RI(),cmp:iv(),coerce:fG(),Comparator:Ad(),Range:os(),satisfies:cd(),toComparators:FG(),maxSatisfying:LG(),minSatisfying:OG(),minVersion:UG(),validRange:GG(),outside:TI(),gtr:zG(),ltr:XG(),intersects:$G(),simplifyRange:tY(),subset:oY()}});var pv=w(MI=>{"use strict";Object.defineProperty(MI,"__esModule",{value:!0});MI.VERSION=void 0;MI.VERSION="9.1.0"});var Gt=w((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof KI=="object"&&KI.exports?KI.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:AY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var y={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(y,"global");break;case"i":o(y,"ignoreCase");break;case"m":o(y,"multiLine");break;case"u":o(y,"unicode");break;case"y":o(y,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var y=this.disjunction();return this.consumeChar(")"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` -`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` -`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` -`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var GI=w(Ug=>{"use strict";Object.defineProperty(Ug,"__esModule",{value:!0});Ug.clearRegExpParserCache=Ug.getRegExpAst=void 0;var xme=UI(),HI={},Pme=new xme.RegExpParser;function Dme(r){var e=r.toString();if(HI.hasOwnProperty(e))return HI[e];var t=Pme.pattern(e);return HI[e]=t,t}Ug.getRegExpAst=Dme;function kme(){HI={}}Ug.clearRegExpParserCache=kme});var fY=w(pn=>{"use strict";var Rme=pn&&pn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(pn,"__esModule",{value:!0});pn.canMatchCharCode=pn.firstCharOptimizedIndices=pn.getOptimizedStartCodesIndices=pn.failedOptimizationPrefixMsg=void 0;var cY=UI(),as=Gt(),uY=GI(),ya=Cv(),gY="Complement Sets are not supported for first char optimization";pn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: -`;function Fme(r,e){e===void 0&&(e=!1);try{var t=(0,uY.getRegExpAst)(r),i=jI(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===gY)e&&(0,as.PRINT_WARNING)(""+pn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > -`)+` Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,as.PRINT_ERROR)(pn.failedOptimizationPrefixMsg+` -`+(" Failed parsing: < "+r.toString()+` > -`)+(" Using the regexp-to-ast library version: "+cY.VERSION+` -`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}pn.getOptimizedStartCodesIndices=Fme;function jI(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=ya.minOptimizationVal)for(var f=u.from>=ya.minOptimizationVal?u.from:ya.minOptimizationVal,h=u.to,p=(0,ya.charCodeToOptimizedIndex)(f),C=(0,ya.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case"Group":jI(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&dv(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,as.values)(e)}pn.firstCharOptimizedIndices=jI;function YI(r,e,t){var i=(0,ya.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&Nme(r,e)}function Nme(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,ya.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,ya.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function lY(r,e){return(0,as.find)(r.value,function(t){if(typeof t=="number")return(0,as.contains)(e,t);var i=t;return(0,as.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function dv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,as.isArray)(r.value)?(0,as.every)(r.value,dv):dv(r.value):!1}var Lme=function(r){Rme(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,as.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?lY(t,this.targetCharCodes)===void 0&&(this.found=!0):lY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(cY.BaseRegExpVisitor);function Tme(r,e){if(e instanceof RegExp){var t=(0,uY.getRegExpAst)(e),i=new Lme(r);return i.visit(t),i.found}else return(0,as.find)(e,function(n){return(0,as.contains)(r,n.charCodeAt(0))})!==void 0}pn.canMatchCharCode=Tme});var Cv=w(Ve=>{"use strict";var hY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,"__esModule",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var pY=UI(),ir=gd(),xe=Gt(),Hg=fY(),dY=GI(),So="PATTERN";Ve.DEFAULT_MODE="defaultMode";Ve.MODES="modes";Ve.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function Ome(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=Ome;function Mme(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=Mme;function Kme(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){Vme()});var i;t("Reject Lexer.NA",function(){i=(0,xe.reject)(r,function(v){return v[So]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[So];if((0,xe.isRegExp)(D)){var L=D.source;return L.length===1&&L!=="^"&&L!=="$"&&L!=="."&&!D.ignoreCase?L:L.length===2&&L[0]==="\\"&&!(0,xe.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],L[1])?L[1]:e.useSticky?Iv(D):Ev(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Iv(j):Ev(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var L=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return L}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=DY(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(xY(D,v)===!1)return(0,Hg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,xe.map)(i,wv),h=(0,xe.map)(s,vY),p=(0,xe.reduce)(i,function(v,D){var L=D.GROUP;return(0,xe.isString)(L)&&L!==ir.Lexer.SKIPPED&&(v[L]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,xe.reduce)(i,function(v,D,L){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=yv(H);mv(v,j,C[L])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=yv(Z);$!==A&&($=A,mv(v,A,C[L]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Hg.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. -`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Hg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){mv(v,W,C[L])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Hg.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. -`)+` This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t("ArrayPacking",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=Kme;function Ume(r,e){var t=[],i=CY(r);t=t.concat(i.errors);var n=mY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(Hme(s)),t=t.concat(QY(s)),t=t.concat(bY(s,e)),t=t.concat(SY(s)),t}Ve.validatePatterns=Ume;function Hme(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[So])});return e=e.concat(EY(t)),e=e.concat(yY(t)),e=e.concat(wY(t)),e=e.concat(BY(t)),e=e.concat(IY(t)),e}function CY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,So)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=CY;function mY(r){var e=(0,xe.filter)(r,function(n){var s=n[So];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,"exec")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=mY;var Gme=/[^\\][\$]/;function EY(r){var e=function(n){hY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(pY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[So];try{var o=(0,dY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return Gme.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=EY;function IY(r){var e=(0,xe.filter)(r,function(i){var n=i[So];return n.test("")}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=IY;var Yme=/[^\\[][\^]|^\^/;function yY(r){var e=function(n){hY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(pY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[So];try{var o=(0,dY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return Yme.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=yY;function wY(r){var e=(0,xe.filter)(r,function(i){var n=i[So];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=wY;function BY(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=BY;function QY(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=QY;function bY(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=bY;function SY(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&qme(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=SY;function jme(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function qme(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Ev(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Ve.addStartOfInput=Ev;function Iv(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Ve.addStickyFlag=Iv;function Jme(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.DEFAULT_MODE+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.MODES+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Ve.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> -`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=Jme;function Wme(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[So]===ir.Lexer.NA}),a=DY(t);return e&&(0,xe.forEach)(o,function(l){var c=xY(l,a);if(c!==!1){var u=PY(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,Hg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. - This Lexer has been defined to track line and column information, - But none of the Token Types can be identified as matching a line terminator. - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=Wme;function zme(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Ve.cloneEmptyGroups=zme;function wv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,"exec"))return!0;if((0,xe.isString)(e))return!1;throw Error("non exhaustive match")}Ve.isCustomPattern=wv;function vY(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=vY;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type -`)+(" Root cause: "+e.errMsg+`. -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. -`+(" The problem is in the <"+r.name+`> Token Type -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Ve.buildLineBreakIssueMessage=PY;function DY(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function mv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var qI=[];function yv(r){return r255?255+~~(r/255):r}}});var Gg=w(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var _r=Gt();function Xme(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Xme;function _me(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=_me;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Zme(r){var e=kY(r);RY(e),NY(e),FY(e),(0,_r.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Zme;function kY(r){for(var e=(0,_r.cloneArr)(r),t=r,i=!0;i;){t=(0,_r.compact)((0,_r.flatten)((0,_r.map)(t,function(s){return s.CATEGORIES})));var n=(0,_r.difference)(t,e);e=e.concat(n),(0,_r.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=kY;function RY(r){(0,_r.forEach)(r,function(e){LY(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Bv(e)&&!(0,_r.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Bv(e)||(e.CATEGORIES=[]),TY(e)||(e.categoryMatches=[]),OY(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=RY;function FY(r){(0,_r.forEach)(r,function(e){e.categoryMatches=[],(0,_r.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=FY;function NY(r){(0,_r.forEach)(r,function(e){Qv([],e)})}Nt.assignCategoriesMapProp=NY;function Qv(r,e){(0,_r.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,_r.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,_r.contains)(i,t)||Qv(i,t)})}Nt.singleAssignCategoriesToksMap=Qv;function LY(r){return(0,_r.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=LY;function Bv(r){return(0,_r.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=Bv;function TY(r){return(0,_r.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=TY;function OY(r){return(0,_r.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=OY;function $me(r){return(0,_r.has)(r,"tokenTypeIdx")}Nt.isTokenType=$me});var bv=w(JI=>{"use strict";Object.defineProperty(JI,"__esModule",{value:!0});JI.defaultLexerErrorProvider=void 0;JI.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var gd=w(nc=>{"use strict";Object.defineProperty(nc,"__esModule",{value:!0});nc.Lexer=nc.LexerDefinitionErrorType=void 0;var zs=Cv(),nr=Gt(),eEe=Gg(),tEe=bv(),rEe=GI(),iEe;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(iEe=nc.LexerDefinitionErrorType||(nc.LexerDefinitionErrorType={}));var fd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:tEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(fd);var nEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=fd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(fd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===fd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=zs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===fd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[zs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[zs.DEFAULT_MODE]=zs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,zs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,zs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,zs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,eEe.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,zs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(zs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,rEe.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,L=e,H=L.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,zs.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,O=this.config.lineTerminatorsPattern,F=0,ue=[],he=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ei=(0,zs.charCodeToOptimizedIndex)(pr),_n=he[Ei];return _n===void 0?Fe:_n}var we=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ei=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);Z.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ei})}else{ke.pop();var _n=(0,nr.last)(ke);ue=i.patternIdxToConfig[_n],he=i.charCodeToPatternIdxToConfig[_n],F=ue.length;var oa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;he&&oa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),he=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ei=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;he&&Ei?Ne=le:Ne=oe}fe.call(this,t);for(var Ae;jc.length){c=a,u=g,Ae=tt;break}}}break}}if(c!==null){if(f=c.length,h=Ae.group,h!==void 0&&(p=Ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,Ae.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),re===!0&&Ae.canLineTerminator===!0){var It=0,Or=void 0,ii=void 0;O.lastIndex=0;do Or=O.test(c),Or===!0&&(ii=O.lastIndex-1,It++);while(Or===!0);It!==0&&(A=A+It,ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,ae,f))}this.handleModes(Ae,we,fe,C)}else{for(var gi=j,hr=A,fi=ae,ni=!1;!ni&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();nc.Lexer=nEe});var SA=w(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var Vs=Gt(),sEe=gd(),Sv=Gg();function oEe(r){return JY(r)?r.LABEL:r.name}Qi.tokenLabel=oEe;function aEe(r){return r.name}Qi.tokenName=aEe;function JY(r){return(0,Vs.isString)(r.LABEL)&&r.LABEL!==""}Qi.hasTokenLabel=JY;var AEe="parent",MY="categories",KY="label",UY="group",HY="push_mode",GY="pop_mode",YY="longer_alt",jY="line_breaks",qY="start_chars_hint";function WY(r){return lEe(r)}Qi.createToken=WY;function lEe(r){var e=r.pattern,t={};if(t.name=r.name,(0,Vs.isUndefined)(e)||(t.PATTERN=e),(0,Vs.has)(r,AEe))throw`The parent property is no longer supported. -See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Vs.has)(r,MY)&&(t.CATEGORIES=r[MY]),(0,Sv.augmentTokenTypes)([t]),(0,Vs.has)(r,KY)&&(t.LABEL=r[KY]),(0,Vs.has)(r,UY)&&(t.GROUP=r[UY]),(0,Vs.has)(r,GY)&&(t.POP_MODE=r[GY]),(0,Vs.has)(r,HY)&&(t.PUSH_MODE=r[HY]),(0,Vs.has)(r,YY)&&(t.LONGER_ALT=r[YY]),(0,Vs.has)(r,jY)&&(t.LINE_BREAKS=r[jY]),(0,Vs.has)(r,qY)&&(t.START_CHARS_HINT=r[qY]),t}Qi.EOF=WY({name:"EOF",pattern:sEe.Lexer.NA});(0,Sv.augmentTokenTypes)([Qi.EOF]);function cEe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=cEe;function uEe(r,e){return(0,Sv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=uEe});var dn=w(Wt=>{"use strict";var wa=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var Ar=Gt(),gEe=SA(),vo=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=vo;var zY=function(r){wa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(vo);Wt.NonTerminal=zY;var VY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Rule=VY;var XY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Alternative=XY;var _Y=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Option=_Y;var ZY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionMandatory=ZY;var $Y=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionMandatoryWithSeparator=$Y;var ej=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Repetition=ej;var tj=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionWithSeparator=tj;var rj=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(vo);Wt.Alternation=rj;var WI=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=WI;function fEe(r){return(0,Ar.map)(r,hd)}Wt.serializeGrammar=fEe;function hd(r){function e(s){return(0,Ar.map)(s,hd)}if(r instanceof zY){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof XY)return{type:"Alternative",definition:e(r.definition)};if(r instanceof _Y)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof ZY)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof $Y)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:hd(new WI({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof tj)return{type:"RepetitionWithSeparator",idx:r.idx,separator:hd(new WI({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof ej)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof rj)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof WI){var i={type:"Terminal",name:r.terminalType.name,label:(0,gEe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof VY)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=hd});var VI=w(zI=>{"use strict";Object.defineProperty(zI,"__esModule",{value:!0});zI.RestWalker=void 0;var vv=Gt(),Cn=dn(),hEe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,vv.forEach)(e.definition,function(n,s){var o=(0,vv.drop)(e.definition,s+1);if(n instanceof Cn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof Cn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof Cn.Alternative)i.walkFlat(n,o,t);else if(n instanceof Cn.Option)i.walkOption(n,o,t);else if(n instanceof Cn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof Cn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof Cn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof Cn.Repetition)i.walkMany(n,o,t);else if(n instanceof Cn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new Cn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=ij(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new Cn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=ij(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,vv.forEach)(e.definition,function(o){var a=new Cn.Alternative({definition:[o]});n.walk(a,s)})},r}();zI.RestWalker=hEe;function ij(r,e,t){var i=[new Cn.Option({definition:[new Cn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Yg=w(XI=>{"use strict";Object.defineProperty(XI,"__esModule",{value:!0});XI.GAstVisitor=void 0;var xo=dn(),pEe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case xo.NonTerminal:return this.visitNonTerminal(t);case xo.Alternative:return this.visitAlternative(t);case xo.Option:return this.visitOption(t);case xo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case xo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case xo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case xo.Repetition:return this.visitRepetition(t);case xo.Alternation:return this.visitAlternation(t);case xo.Terminal:return this.visitTerminal(t);case xo.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();XI.GAstVisitor=pEe});var dd=w(Oi=>{"use strict";var dEe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,"__esModule",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var pd=Gt(),Qr=dn(),CEe=Yg();function mEe(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Oi.isSequenceProd=mEe;function xv(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,pd.some)(r.definition,function(i){return xv(i,e)}):r instanceof Qr.NonTerminal&&(0,pd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,pd.every)(r.definition,function(i){return xv(i,e)})):!1}Oi.isOptionalProd=xv;function EEe(r){return r instanceof Qr.Alternation}Oi.isBranchingProd=EEe;function IEe(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Oi.getProductionDslName=IEe;var nj=function(r){dEe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,pd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,pd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(CEe.GAstVisitor);Oi.DslMethodsCollectorVisitor=nj;var _I=new nj;function yEe(r){_I.reset(),r.accept(_I);var e=_I.dslMethods;return _I.reset(),e}Oi.collectMethods=yEe});var Dv=w(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.firstForTerminal=Po.firstForBranching=Po.firstForSequence=Po.first=void 0;var ZI=Gt(),sj=dn(),Pv=dd();function $I(r){if(r instanceof sj.NonTerminal)return $I(r.referencedRule);if(r instanceof sj.Terminal)return Aj(r);if((0,Pv.isSequenceProd)(r))return oj(r);if((0,Pv.isBranchingProd)(r))return aj(r);throw Error("non exhaustive match")}Po.first=$I;function oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Pv.isOptionalProd)(s),e=e.concat($I(s)),i=i+1,n=t.length>i;return(0,ZI.uniq)(e)}Po.firstForSequence=oj;function aj(r){var e=(0,ZI.map)(r.definition,function(t){return $I(t)});return(0,ZI.uniq)((0,ZI.flatten)(e))}Po.firstForBranching=aj;function Aj(r){return[r.terminalType]}Po.firstForTerminal=Aj});var kv=w(ey=>{"use strict";Object.defineProperty(ey,"__esModule",{value:!0});ey.IN=void 0;ey.IN="_~IN~_"});var fj=w(As=>{"use strict";var wEe=As&&As.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(As,"__esModule",{value:!0});As.buildInProdFollowPrefix=As.buildBetweenProdsFollowPrefix=As.computeAllProdsFollows=As.ResyncFollowsWalker=void 0;var BEe=VI(),QEe=Dv(),lj=Gt(),cj=kv(),bEe=dn(),uj=function(r){wEe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=gj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new bEe.Alternative({definition:o}),l=(0,QEe.first)(a);this.follows[s]=l},e}(BEe.RestWalker);As.ResyncFollowsWalker=uj;function SEe(r){var e={};return(0,lj.forEach)(r,function(t){var i=new uj(t).startWalking();(0,lj.assign)(e,i)}),e}As.computeAllProdsFollows=SEe;function gj(r,e){return r.name+e+cj.IN}As.buildBetweenProdsFollowPrefix=gj;function vEe(r){var e=r.terminalType.name;return e+r.idx+cj.IN}As.buildInProdFollowPrefix=vEe});var Cd=w(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.defaultGrammarValidatorErrorProvider=Ba.defaultGrammarResolverErrorProvider=Ba.defaultParserErrorProvider=void 0;var jg=SA(),xEe=Gt(),Xs=Gt(),Rv=dn(),hj=dd();Ba.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,jg.hasTokenLabel)(e),o=s?"--> "+(0,jg.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,Xs.first)(t).image,l=` -but found: '`+a+"'";if(n)return o+n+l;var c=(0,Xs.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,Xs.map)(c,function(h){return"["+(0,Xs.map)(h,function(p){return(0,jg.tokenLabel)(p)}).join(", ")+"]"}),g=(0,Xs.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: -`+g.join(` -`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,Xs.first)(t).image,a=` -but found: '`+o+"'";if(i)return s+i+a;var l=(0,Xs.map)(e,function(u){return"["+(0,Xs.map)(u,function(g){return(0,jg.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: - `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ba.defaultParserErrorProvider);Ba.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+r.name+"<-";return t}};Ba.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Rv.Terminal?u.terminalType.name:u instanceof Rv.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,Xs.first)(e),s=n.idx,o=(0,hj.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` - appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` -`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. -`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. -`)+`To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,Xs.map)(r.prefixPath,function(n){return(0,jg.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix -`+("in inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,Xs.map)(r.prefixPath,function(n){return(0,jg.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,hj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. -This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. -`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: -`+(" inside <"+r.topLevelRule.name+`> Rule. - has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=xEe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. -`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) -`)+(`without consuming any Tokens. The grammar path that causes this is: - `+i+` -`)+` To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Rv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Cj=w(vA=>{"use strict";var PEe=vA&&vA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(vA,"__esModule",{value:!0});vA.GastRefResolverVisitor=vA.resolveGrammar=void 0;var DEe=Hn(),pj=Gt(),kEe=Yg();function REe(r,e){var t=new dj(r,e);return t.resolveRefs(),t.errors}vA.resolveGrammar=REe;var dj=function(r){PEe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,pj.forEach)((0,pj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:DEe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(kEe.GAstVisitor);vA.GastRefResolverVisitor=dj});var Ed=w(Nr=>{"use strict";var sc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,"__esModule",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var mj=VI(),Kt=Gt(),FEe=Dv(),kt=dn(),Ej=function(r){sc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(mj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Ej;var NEe=function(r){sc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,FEe.first)(o),this.found=!0}},e}(Ej);Nr.NextAfterTokenWalker=NEe;var md=function(r){sc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(mj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=md;var LEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterManyWalker=LEe;var TEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterManySepWalker=TEe;var OEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterAtLeastOneWalker=OEe;var MEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterAtLeastOneSepWalker=MEe;function Ij(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=Ij(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var re=B.definition[ge],O={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(O),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(UEe(B,p,C,y));else throw Error("non exhaustive match")}}return u}Nr.nextPossibleTokensAfter=KEe;function UEe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var Id=w(_t=>{"use strict";var Bj=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),yj=Ed(),HEe=VI(),ty=Gg(),xA=dn(),GEe=Yg(),oi;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(oi=_t.PROD_TYPE||(_t.PROD_TYPE={}));function YEe(r){if(r instanceof xA.Option)return oi.OPTION;if(r instanceof xA.Repetition)return oi.REPETITION;if(r instanceof xA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof xA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof xA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof xA.Alternation)return oi.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=YEe;function jEe(r,e,t,i,n,s){var o=bj(r,e,t),a=Lv(o)?ty.tokenStructuredMatcherNoCategories:ty.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=jEe;function qEe(r,e,t,i,n,s){var o=Sj(r,e,n,t),a=Lv(o)?ty.tokenStructuredMatcherNoCategories:ty.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=qEe;function JEe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Tv=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),br=Gt(),Do=Hn(),Ov=dd(),qg=Id(),_Ee=Ed(),_s=dn(),Mv=Yg();function ZEe(r,e,t,i,n){var s=er.map(r,function(h){return $Ee(h,i)}),o=er.map(r,function(h){return Kv(h,h,i)}),a=[],l=[],c=[];(0,br.every)(o,br.isEmpty)&&(a=(0,br.map)(r,function(h){return Rj(h,i)}),l=(0,br.map)(r,function(h){return Fj(h,e,i)}),c=Tj(r,e,i));var u=rIe(r,t,i),g=(0,br.map)(r,function(h){return Lj(h,i)}),f=(0,br.map)(r,function(h){return kj(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=ZEe;function $Ee(r,e){var t=new Dj;r.accept(t);var i=t.allProductions,n=er.groupBy(i,xj),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Ov.getProductionDslName)(l),g={message:c,type:Do.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=Pj(l);return f&&(g.parameter=f),g});return o}function xj(r){return(0,Ov.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+Pj(r)}zt.identifyProductionForDuplicates=xj;function Pj(r){return r instanceof _s.Terminal?r.terminalType.name:r instanceof _s.NonTerminal?r.nonTerminalName:""}var Dj=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Mv.GAstVisitor);zt.OccurrenceValidationCollector=Dj;function kj(r,e,t,i){var n=[],s=(0,br.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:Do.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=kj;function eIe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:Do.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=eIe;function Kv(r,e,t,i){i===void 0&&(i=[]);var n=[],s=yd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:Do.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),Kv(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=Kv;function yd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof _s.NonTerminal)e.push(t.referencedRule);else if(t instanceof _s.Alternative||t instanceof _s.Option||t instanceof _s.RepetitionMandatory||t instanceof _s.RepetitionMandatoryWithSeparator||t instanceof _s.RepetitionWithSeparator||t instanceof _s.Repetition)e=e.concat(yd(t.definition));else if(t instanceof _s.Alternation)e=er.flatten(er.map(t.definition,function(o){return yd(o.definition)}));else if(!(t instanceof _s.Terminal))throw Error("non exhaustive match");var i=(0,Ov.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(yd(s))}else return e}zt.getFirstNoneTerminal=yd;var Uv=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Mv.GAstVisitor);function Rj(r,e){var t=new Uv;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,_Ee.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:Do.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=Rj;function Fj(r,e,t){var i=new Uv;r.accept(i);var n=i.alternations;n=(0,br.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,qg.getLookaheadPathsForOr)(l,r,c,a),g=tIe(u,a,r,t),f=Oj(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=Fj;var Nj=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Mv.GAstVisitor);zt.RepetionCollector=Nj;function Lj(r,e){var t=new Uv;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:Do.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=Lj;function Tj(r,e,t){var i=[];return(0,br.forEach)(r,function(n){var s=new Nj;n.accept(s);var o=s.allProductions;(0,br.forEach)(o,function(a){var l=(0,qg.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,qg.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,br.isEmpty)((0,br.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:Do.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=Tj;function tIe(r,e,t,i){var n=[],s=(0,br.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,br.forEach)(l,function(u){var g=[c];(0,br.forEach)(r,function(f,h){c!==h&&(0,qg.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,qg.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,br.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:Do.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function Oj(r,e,t,i){var n=[],s=(0,br.reduce)(r,function(o,a,l){var c=(0,br.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,br.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,br.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(Jg,"__esModule",{value:!0});Jg.validateGrammar=Jg.resolveGrammar=void 0;var Gv=Gt(),iIe=Cj(),nIe=Hv(),Mj=Cd();function sIe(r){r=(0,Gv.defaults)(r,{errMsgProvider:Mj.defaultGrammarResolverErrorProvider});var e={};return(0,Gv.forEach)(r.rules,function(t){e[t.name]=t}),(0,iIe.resolveGrammar)(e,r.errMsgProvider)}Jg.resolveGrammar=sIe;function oIe(r){return r=(0,Gv.defaults)(r,{errMsgProvider:Mj.defaultGrammarValidatorErrorProvider}),(0,nIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}Jg.validateGrammar=oIe});var Wg=w(mn=>{"use strict";var wd=mn&&mn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(mn,"__esModule",{value:!0});mn.EarlyExitException=mn.NotAllInputParsedException=mn.NoViableAltException=mn.MismatchedTokenException=mn.isRecognitionException=void 0;var aIe=Gt(),Uj="MismatchedTokenException",Hj="NoViableAltException",Gj="EarlyExitException",Yj="NotAllInputParsedException",jj=[Uj,Hj,Gj,Yj];Object.freeze(jj);function AIe(r){return(0,aIe.contains)(jj,r.name)}mn.isRecognitionException=AIe;var ry=function(r){wd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),lIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Uj,s}return e}(ry);mn.MismatchedTokenException=lIe;var cIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Hj,s}return e}(ry);mn.NoViableAltException=cIe;var uIe=function(r){wd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=Yj,n}return e}(ry);mn.NotAllInputParsedException=uIe;var gIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Gj,s}return e}(ry);mn.EarlyExitException=gIe});var jv=w(Mi=>{"use strict";Object.defineProperty(Mi,"__esModule",{value:!0});Mi.attemptInRepetitionRecovery=Mi.Recoverable=Mi.InRuleRecoveryException=Mi.IN_RULE_RECOVERY_EXCEPTION=Mi.EOF_FOLLOW_KEY=void 0;var iy=SA(),ls=Gt(),fIe=Wg(),hIe=kv(),pIe=Hn();Mi.EOF_FOLLOW_KEY={};Mi.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function Yv(r){this.name=Mi.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Mi.InRuleRecoveryException=Yv;Yv.prototype=Error.prototype;var dIe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,ls.has)(e,"recoveryEnabled")?e.recoveryEnabled:pIe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=qj)},r.prototype.getTokenToInsert=function(e){var t=(0,iy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new fIe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,ls.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new Yv("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,ls.isEmpty)(t))return!1;var n=this.LA(1),s=(0,ls.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,ls.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,ls.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Mi.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,ls.map)(t,function(n,s){return s===0?Mi.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,ls.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,ls.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Mi.EOF_FOLLOW_KEY)return[iy.EOF];var t=e.ruleName+e.idxInCallingRule+hIe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,iy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,ls.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,ls.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,ls.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Mi.Recoverable=dIe;function qj(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=iy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Mi.attemptInRepetitionRecovery=qj});var ny=w(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.LooksAhead=void 0;var Qa=Id(),Zs=Gt(),Jj=Hn(),ba=ny(),oc=dd(),mIe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,Zs.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:Jj.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,Zs.has)(e,"maxLookahead")?e.maxLookahead:Jj.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,Zs.isES2015MapSupported)()?new Map:[],(0,Zs.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,Zs.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,oc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,Zs.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,oc.getProductionDslName)(g)+f,function(){var h=(0,Qa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,ba.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],ba.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,Zs.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,ba.MANY_IDX,Qa.PROD_TYPE.REPETITION,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,ba.OPTION_IDX,Qa.PROD_TYPE.OPTION,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,ba.AT_LEAST_ONE_IDX,Qa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,ba.AT_LEAST_ONE_SEP_IDX,Qa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,ba.MANY_SEP_IDX,Qa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,oc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Qa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,ba.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Qa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Qa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,ba.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();sy.LooksAhead=mIe});var zj=w(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.addNoneTerminalToCst=ko.addTerminalToCst=ko.setNodeLocationFull=ko.setNodeLocationOnlyOffset=void 0;function EIe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(PA,"__esModule",{value:!0});PA.defineNameProp=PA.functionName=PA.classNameFromInstance=void 0;var BIe=Gt();function QIe(r){return Xj(r.constructor)}PA.classNameFromInstance=QIe;var Vj="name";function Xj(r){var e=r.name;return e||"anonymous"}PA.functionName=Xj;function bIe(r,e){var t=Object.getOwnPropertyDescriptor(r,Vj);return(0,BIe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,Vj,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}PA.defineNameProp=bIe});var tq=w(bi=>{"use strict";Object.defineProperty(bi,"__esModule",{value:!0});bi.validateRedundantMethods=bi.validateMissingCstMethods=bi.validateVisitor=bi.CstVisitorDefinitionError=bi.createBaseVisitorConstructorWithDefaults=bi.createBaseSemanticVisitorConstructor=bi.defaultVisit=void 0;var cs=Gt(),Bd=qv();function _j(r,e){for(var t=(0,cs.keys)(r),i=t.length,n=0;n: - `+(""+s.join(` - -`).replace(/\n/g,` - `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}bi.createBaseSemanticVisitorConstructor=SIe;function vIe(r,e,t){var i=function(){};(0,Bd.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,cs.forEach)(e,function(s){n[s]=_j}),i.prototype=n,i.prototype.constructor=i,i}bi.createBaseVisitorConstructorWithDefaults=vIe;var Jv;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(Jv=bi.CstVisitorDefinitionError||(bi.CstVisitorDefinitionError={}));function Zj(r,e){var t=$j(r,e),i=eq(r,e);return t.concat(i)}bi.validateVisitor=Zj;function $j(r,e){var t=(0,cs.map)(e,function(i){if(!(0,cs.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,Bd.functionName)(r.constructor)+" CST Visitor.",type:Jv.MISSING_METHOD,methodName:i}});return(0,cs.compact)(t)}bi.validateMissingCstMethods=$j;var xIe=["constructor","visit","validateVisitor"];function eq(r,e){var t=[];for(var i in r)(0,cs.isFunction)(r[i])&&!(0,cs.contains)(xIe,i)&&!(0,cs.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,Bd.functionName)(r.constructor)+` CST Visitor -There is no Grammar Rule corresponding to this method's name. -`,type:Jv.REDUNDANT_METHOD,methodName:i});return t}bi.validateRedundantMethods=eq});var iq=w(oy=>{"use strict";Object.defineProperty(oy,"__esModule",{value:!0});oy.TreeBuilder=void 0;var zg=zj(),Zr=Gt(),rq=tq(),PIe=Hn(),DIe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,Zr.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:PIe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Zr.NOOP,this.cstFinallyStateUpdate=Zr.NOOP,this.cstPostTerminal=Zr.NOOP,this.cstPostNonTerminal=Zr.NOOP,this.cstPostRule=Zr.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=zg.setNodeLocationFull,this.setNodeLocationFromNode=zg.setNodeLocationFull,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=zg.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=zg.setNodeLocationOnlyOffset,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=Zr.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,zg.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,zg.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,Zr.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,rq.createBaseSemanticVisitorConstructor)(this.className,(0,Zr.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,Zr.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,rq.createBaseVisitorConstructorWithDefaults)(this.className,(0,Zr.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();oy.TreeBuilder=DIe});var sq=w(ay=>{"use strict";Object.defineProperty(ay,"__esModule",{value:!0});ay.LexerAdapter=void 0;var nq=Hn(),kIe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):nq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?nq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();ay.LexerAdapter=kIe});var aq=w(Ay=>{"use strict";Object.defineProperty(Ay,"__esModule",{value:!0});Ay.RecognizerApi=void 0;var oq=Gt(),RIe=Wg(),Wv=Hn(),FIe=Cd(),NIe=Hv(),LIe=dn(),TIe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Wv.DEFAULT_RULE_CONFIG),(0,oq.contains)(this.definedRulesNames,e)){var n=FIe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Wv.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Wv.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,NIe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,RIe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,LIe.serializeGrammar)((0,oq.values)(this.gastProductionsCache))},r}();Ay.RecognizerApi=TIe});var uq=w(cy=>{"use strict";Object.defineProperty(cy,"__esModule",{value:!0});cy.RecognizerEngine=void 0;var Pr=Gt(),Gn=ny(),ly=Wg(),Aq=Id(),Vg=Ed(),lq=Hn(),OIe=jv(),cq=SA(),Qd=Gg(),MIe=qv(),KIe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,MIe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Qd.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,"modes")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Qd.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=cq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Qd.tokenStructuredMatcherNoCategories:Qd.tokenStructuredMatcher,(0,Qd.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,"resyncEnabled")?i.resyncEnabled:lq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:lq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new ly.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,ly.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new ly.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===OIe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),cq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();cy.RecognizerEngine=KIe});var fq=w(uy=>{"use strict";Object.defineProperty(uy,"__esModule",{value:!0});uy.ErrorHandler=void 0;var zv=Wg(),Vv=Gt(),gq=Id(),UIe=Hn(),HIe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,Vv.has)(e,"errorMessageProvider")?e.errorMessageProvider:UIe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,zv.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,Vv.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,Vv.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,gq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new zv.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,gq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new zv.NoViableAltException(c,this.LA(1),l))},r}();uy.ErrorHandler=HIe});var dq=w(gy=>{"use strict";Object.defineProperty(gy,"__esModule",{value:!0});gy.ContentAssist=void 0;var hq=Ed(),pq=Gt(),GIe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,pq.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,hq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,pq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new hq.NextAfterTokenWalker(n,e).startWalking();return s},r}();gy.ContentAssist=GIe});var Qq=w(py=>{"use strict";Object.defineProperty(py,"__esModule",{value:!0});py.GastRecorder=void 0;var En=Gt(),Ro=dn(),YIe=gd(),Iq=Gg(),yq=SA(),jIe=Hn(),qIe=ny(),hy={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(hy);var Cq=!0,mq=Math.pow(2,qIe.BITS_FOR_OCCURRENCE_IDX)-1,wq=(0,yq.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:YIe.Lexer.NA});(0,Iq.augmentTokenTypes)([wq]);var Bq=(0,yq.createTokenInstance)(wq,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Bq);var JIe={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},WIe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return jIe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Ro.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return bd.call(this,Ro.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){bd.call(this,Ro.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){bd.call(this,Ro.RepetitionMandatoryWithSeparator,t,e,Cq)},r.prototype.manyInternalRecord=function(e,t){bd.call(this,Ro.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){bd.call(this,Ro.RepetitionWithSeparator,t,e,Cq)},r.prototype.orInternalRecord=function(e,t){return zIe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(fy(t),!e||(0,En.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,En.peek)(this.recordingProdStack),o=e.ruleName,a=new Ro.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?JIe:hy},r.prototype.consumeInternalRecord=function(e,t,i){if(fy(t),!(0,Iq.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,En.peek)(this.recordingProdStack),o=new Ro.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),Bq},r}();py.GastRecorder=WIe;function bd(r,e,t,i){i===void 0&&(i=!1),fy(t);var n=(0,En.peek)(this.recordingProdStack),s=(0,En.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,En.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),hy}function zIe(r,e){var t=this;fy(e);var i=(0,En.peek)(this.recordingProdStack),n=(0,En.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Ro.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,En.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,En.some)(s,function(l){return(0,En.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,En.forEach)(s,function(l){var c=new Ro.Alternative({definition:[]});o.definition.push(c),(0,En.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,En.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),hy}function Eq(r){return r===0?"":""+r}function fy(r){if(r<0||r>mq){var e=new Error("Invalid DSL Method idx value: <"+r+`> - `+("Idx value must be a none negative value smaller than "+(mq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var Sq=w(dy=>{"use strict";Object.defineProperty(dy,"__esModule",{value:!0});dy.PerformanceTracer=void 0;var bq=Gt(),VIe=Hn(),XIe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,bq.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=VIe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,bq.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();dy.PerformanceTracer=XIe});var vq=w(Cy=>{"use strict";Object.defineProperty(Cy,"__esModule",{value:!0});Cy.applyMixins=void 0;function _Ie(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Cy.applyMixins=_Ie});var Hn=w(dr=>{"use strict";var Dq=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,"__esModule",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var Xi=Gt(),ZIe=fj(),xq=SA(),kq=Cd(),Pq=Kj(),$Ie=jv(),eye=Wj(),tye=iq(),rye=sq(),iye=aq(),nye=uq(),sye=fq(),oye=dq(),aye=Qq(),Aye=Sq(),lye=vq();dr.END_OF_FILE=(0,xq.createTokenInstance)(xq.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:kq.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var cye;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(cye=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function uye(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=uye;var my=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,Xi.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=(0,Xi.has)(t,"skipValidations")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,Xi.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,Xi.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,Pq.resolveGrammar)({rules:(0,Xi.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,Xi.isEmpty)(n)&&e.skipValidations===!1){var s=(0,Pq.validateGrammar)({rules:(0,Xi.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,Xi.values)(e.tokensMap),errMsgProvider:kq.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,Xi.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,ZIe.computeAllProdsFollows)((0,Xi.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,Xi.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,Xi.isEmpty)(e.definitionErrors))throw t=(0,Xi.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: - `+t.join(` -------------------------------- -`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=my;(0,lye.applyMixins)(my,[$Ie.Recoverable,eye.LooksAhead,tye.TreeBuilder,rye.LexerAdapter,nye.RecognizerEngine,iye.RecognizerApi,sye.ErrorHandler,oye.ContentAssist,aye.GastRecorder,Aye.PerformanceTracer]);var gye=function(r){Dq(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Xi.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(my);dr.CstParser=gye;var fye=function(r){Dq(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Xi.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(my);dr.EmbeddedActionsParser=fye});var Fq=w(Ey=>{"use strict";Object.defineProperty(Ey,"__esModule",{value:!0});Ey.createSyntaxDiagramsCode=void 0;var Rq=pv();function hye(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+Rq.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+Rq.VERSION+"/diagrams/diagrams.css":s,a=` - - - - - -`,l=` - -`,c=` - @@ -83,7 +163,10 @@
- + + + + + + + + + Push Preview App (Previously EPNS) | Communication Protocol of Web3 + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + diff --git a/public/index.html b/public/index.html index 897e1c95eb..96e6b15efe 100644 --- a/public/index.html +++ b/public/index.html @@ -1,29 +1,71 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + Push Dev App (Previously EPNS) | Communication Protocol of Web3 - + - - - - - + + + + + - - - - - - + + + + + + - - diff --git a/public/robots-preview.txt b/public/robots-preview.txt new file mode 100644 index 0000000000..8fe357f801 --- /dev/null +++ b/public/robots-preview.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Sitemap: https://push-protocol.github.io/sitemap.txt \ No newline at end of file diff --git a/public/sitemap-preview.txt b/public/sitemap-preview.txt new file mode 100644 index 0000000000..9b2a7d997a --- /dev/null +++ b/public/sitemap-preview.txt @@ -0,0 +1,17 @@ +https://push-protocol.github.io/ +https://push-protocol.github.io/?/inbox +https://push-protocol.github.io/?/chat +https://push-protocol.github.io/?/channels +https://push-protocol.github.io/?/dashboard +https://push-protocol.github.io/?/send +https://push-protocol.github.io/?/spam +https://push-protocol.github.io/?/receive +https://push-protocol.github.io/?/govern +https://push-protocol.github.io/?/yield +https://push-protocol.github.io/?/rockstar +https://push-protocol.github.io/?/gratitude +https://push-protocol.github.io/?/live_walkthrough +https://push-protocol.github.io/?/notavailable +https://push-protocol.github.io/?/faq +https://push-protocol.github.io/?/internal +https://push-protocol.github.io/?/support \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 85ab0c3748..fe93d7e83b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { FC, useContext, useEffect, useMemo, useState } from 'react'; // External Packages import * as dotenv from 'dotenv'; @@ -14,9 +14,9 @@ import { createGlobalStyle } from 'styled-components'; // Internal Compoonents import InitState from 'components/InitState'; -import AppContextProvider, { AppContext } from 'contexts/AppContext'; +import { AppContext } from 'contexts/AppContext'; import NavigationContextProvider from 'contexts/NavigationContext'; -import { useAccount, useInactiveListener, useSDKSocket } from 'hooks'; +import { useAccount, useInactiveListener } from 'hooks'; import { resetAdminSlice } from 'redux/slices/adminSlice'; import { resetChannelCreationSlice } from 'redux/slices/channelCreationSlice'; import { resetNotificationsSlice } from 'redux/slices/notificationSlice'; @@ -27,9 +27,6 @@ import UserJourneySteps from 'segments/userJourneySteps'; import Header from 'structure/Header'; import MasterInterfacePage from 'structure/MasterInterfacePage'; import Navigation from 'structure/Navigation'; -import AppLogin from './AppLogin'; -import { SectionV2 } from './components/reusables/SharedStylingV2'; -import { ErrorContext } from './contexts/ErrorContext'; import { setIndex, setRun, setWelcomeNotifsEmpty } from './redux/slices/userJourneySlice'; // Internal Configs @@ -65,11 +62,11 @@ const GlobalStyle = createGlobalStyle` export interface IUseSpaceReturnValues { spaceUI: SpacesUI; - SpaceInvitesComponent: React.FC; - SpaceWidgetComponent: React.FC; - SpaceFeedComponent: React.FC; - SpaceBannerComponent: React.FC; - CreateSpaceComponent: React.FC; + SpaceInvitesComponent: FC; + SpaceWidgetComponent: FC; + SpaceFeedComponent: FC; + SpaceBannerComponent: FC; + CreateSpaceComponent: FC; } // Extend the console @@ -127,17 +124,18 @@ export default function App() { const dispatch = useDispatch(); - const { isActive, account, chainId, provider } = useAccount(); - const [currentTime, setcurrentTime] = React.useState(0); - const { authError, setAuthError } = useContext(ErrorContext); + const { isActive, account, provider } = useAccount(); + const [currentTime, setcurrentTime] = useState(0); + const { pgpPvtKey } = useContext(AppContext); - const { sidebarCollapsed, setSidebarCollapsed } = React.useContext(GlobalContext); + const { sidebarCollapsed, setSidebarCollapsed } = useContext(GlobalContext); const updateOnboardTheme = useUpdateTheme(); const { userPushSDKInstance } = useSelector((state: any) => { return state.user; }); + useInactiveListener(); const { run, stepIndex, tutorialContinous } = useSelector((state: any) => state.userJourney); // const location = useLocation(); // Build takes care of this now @@ -148,7 +146,7 @@ export default function App() { // document.title = title; // }, [title]); - React.useEffect(() => { + useEffect(() => { const now = Date.now() / 1000; setcurrentTime(now); }, []); @@ -163,10 +161,6 @@ export default function App() { dispatch(resetUserSlice()); }, [account]); - // console.log(isActive, chainId, account); - // handle logic to reconnect in response to certain events from the provider - const { allowedChain } = useInactiveListener(); - // Initialize Theme const [darkMode, setDarkMode] = useState(false); const toggleDarkMode = () => { @@ -176,7 +170,7 @@ export default function App() { setDarkMode(!darkMode); }; - React.useEffect(() => { + useEffect(() => { const data = localStorage.getItem('theme'); if (data) { const isDarkMode = JSON.parse(data); @@ -193,16 +187,16 @@ export default function App() { } }, []); - React.useEffect(() => { + useEffect(() => { localStorage.setItem('theme', JSON.stringify(darkMode)); localStorage.setItem('SidebarCollapsed', JSON.stringify(sidebarCollapsed)); }); - React.useEffect(() => { + useEffect(() => { document.body.style.backgroundColor = darkMode ? '#000' : '#fff'; }, [darkMode]); - React.useEffect(() => { + useEffect(() => { window?.Olvy?.init({ organisation: 'epns', target: '#olvy-target', @@ -224,9 +218,7 @@ export default function App() { const steps = UserJourneySteps({ darkMode }); const handleJoyrideCallback = (data: CallBackProps) => { - // console.log(data) - // console.log(STATUS); - const { action, lifecycle, status, index } = data; + const { action, lifecycle, index } = data; if (lifecycle === 'ready') { setTimeout(() => { document.querySelector('div > section > div').scrollTop = 0; diff --git a/src/AppLogin.tsx b/src/AppLogin.tsx index c657914486..6194240011 100644 --- a/src/AppLogin.tsx +++ b/src/AppLogin.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; // External Packages import ReactGA from 'react-ga'; @@ -29,8 +29,8 @@ const AppLogin = ({ toggleDarkMode }) => { const { web3NameList } = useContext(AppContext); const { setReadOnlyWallet, readOnlyWallet, setMode } = useContext(GlobalContext); const { authError, setAuthError } = useContext(ErrorContext); - const [errorMessage, setErrorMessage] = React.useState(undefined); - const [modalHeight, setModalHeight] = React.useState(0); + const [errorMessage, setErrorMessage] = useState(undefined); + const [modalHeight, setModalHeight] = useState(0); // theme context const theme = useTheme(); diff --git a/src/components/AliasVerificationModal.jsx b/src/components/AliasVerificationModal.jsx index 9602295f8c..8048358471 100644 --- a/src/components/AliasVerificationModal.jsx +++ b/src/components/AliasVerificationModal.jsx @@ -1,76 +1,65 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useRef, useState } from 'react'; +import { useRef, useState } from 'react'; // External Packages import { useClickAway } from 'react-use'; import styled, { ThemeProvider, useTheme } from 'styled-components'; // Internal Components -import { postReq } from "../api"; +import { postReq } from '../api'; import { Button, H2, H3, Input, Item, Span } from '../primaries/SharedStyling'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { useAccount } from "hooks"; +import { useAccount } from 'hooks'; // Internal Configs -import { abis, CHAIN_DETAILS } from "config/index.js"; - -export default function AliasVerificationModal({ - onClose, - onSuccess, - verificationStatus, - aliasEthAccount, -}) { +import { abis, CHAIN_DETAILS } from 'config/index.js'; + +export default function AliasVerificationModal({ onClose, onSuccess, verificationStatus, aliasEthAccount }) { const { account, provider } = useAccount(); const signer = provider.getSigner(account); const themes = useTheme(); const modalRef = useRef(null); - const commContract = new ethers.Contract( - CHAIN_DETAILS[chainId].commAddress, - abis.epnsComm, - signer - ); - const [loading, setLoading] = useState(""); + const commContract = new ethers.Contract(CHAIN_DETAILS[chainId].commAddress, abis.epnsComm, signer); + const [loading, setLoading] = useState(''); const mainAddress = aliasEthAccount; // Form signer and contract connection - useClickAway(modalRef, () => onClose(loading !== "")); + useClickAway(modalRef, () => onClose(loading !== '')); const checkAlias = async () => { if (mainAddress == aliasEthAccount) { submitAlias(); } else { - setLoading("Enter Correct Eth Channel Address"); + setLoading('Enter Correct Eth Channel Address'); setTimeout(() => { - setLoading(""); + setLoading(''); }, 4000); } const submitAlias = () => { - setLoading("loading"); - const anotherSendTxPromise = commContract.verifyChannelAlias( - mainAddress - ); + setLoading('loading'); + const anotherSendTxPromise = commContract.verifyChannelAlias(mainAddress); anotherSendTxPromise .then(async (tx) => { console.debug(tx); - setLoading("Transaction Sent! It usually takes 5mins to verify."); + setLoading('Transaction Sent! It usually takes 5mins to verify.'); await tx.wait(1); setTimeout(() => { - setLoading("Transaction Mined!"); + setLoading('Transaction Mined!'); }, 2000); setTimeout(() => { - setLoading("Loading..."); + setLoading('Loading...'); }, 2000); const intervalId = setInterval(async () => { - const response = await postReq("/channels/getAliasVerification", { + const response = await postReq('/channels/getAliasVerification', { aliasAddress: account, - op: "read", + op: 'read', }); const status = response?.data?.status; if (status == true) { @@ -81,80 +70,104 @@ export default function AliasVerificationModal({ }, 5000); }) .catch(() => { - setLoading("There was an error"); + setLoading('There was an error'); setTimeout(() => { - setLoading(""); + setLoading(''); }, 2000); }); }; return ( - - - - -

- Verify - Alias - -

- { - verificationStatus === null ? - ( -

There has been an error in the verification of your alias, Please contact the admin

- ) : ( -

Before you can use this channel on this chain, you first need to verify your Alias.

- ) - } -
- { - verificationStatus !== null && ( - <> - - - - {loading && ( - - - - )} - - - - - ) - } -
-
-
- ) -} - -const StyledInput = styled(Input)` + + + + +

+ + {' '} + Verify + + + Alias + +

+ {verificationStatus === null ? ( +

+ There has been an error in the verification of your alias, Please contact the admin +

+ ) : ( +

+ Before you can use this channel on this chain, you first need to verify your Alias. +

+ )} +
+ {verificationStatus !== null && ( + <> + + + + {loading && ( + + + + )} + + + + + )} +
+
+
+ ); + }; + + const StyledInput = styled(Input)` width: 100%; text-align: center; caret-color: transparent; diff --git a/src/components/ChainIndicator.tsx b/src/components/ChainIndicator.tsx index 7d69a96ff2..d3d7534ed4 100644 --- a/src/components/ChainIndicator.tsx +++ b/src/components/ChainIndicator.tsx @@ -1,6 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useRef } from 'react'; -import { ethers } from 'ethers'; +import { useContext, useRef, useState, useEffect } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -16,6 +15,7 @@ import { useAccount } from 'hooks'; import { SpanV2 } from './reusables/SharedStylingV2'; import { ErrorContext } from 'contexts/ErrorContext'; import { useClickAway } from 'hooks/useClickAway.js'; +import { getPublicAssetPath } from 'helpers/RoutesHelper.js'; const ChainIndicator = ({ isDarkMode }) => { const toggleArrowRef = useRef(null); @@ -24,10 +24,10 @@ const ChainIndicator = ({ isDarkMode }) => { const theme = useTheme(); const { authError, setAuthError } = useContext(ErrorContext); - const [showDropdown, setShowDropdown] = React.useState(false); - const [dropdownValues, setDropdownValues] = React.useState([]); + const [showDropdown, setShowDropdown] = useState(false); + const [dropdownValues, setDropdownValues] = useState([]); - React.useEffect(() => { + useEffect(() => { const dropdown: DropdownValueType[] = []; appConfig.allowedNetworks.map((chainId: number) => { const chainName = networkName[chainId]; @@ -35,7 +35,7 @@ const ChainIndicator = ({ isDarkMode }) => { id: chainId, value: chainName, title: chainName, - icon: `./svg/${LOGO_FROM_CHAIN_ID[chainId]}`, + icon: getPublicAssetPath(`svg/${LOGO_FROM_CHAIN_ID[chainId]}`), function: () => { switchChain(chainId); setShowDropdown(false); @@ -62,7 +62,7 @@ const ChainIndicator = ({ isDarkMode }) => { > @@ -73,7 +73,7 @@ const ChainIndicator = ({ isDarkMode }) => { arrow diff --git a/src/components/ChainsSelect.tsx b/src/components/ChainsSelect.tsx index 3980c2bbea..aa7ffc2916 100644 --- a/src/components/ChainsSelect.tsx +++ b/src/components/ChainsSelect.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -12,6 +12,7 @@ import Dropdown from './Dropdown'; // Internal Configs import { appConfig, CHAIN_DETAILS } from 'config/index.js'; import { LOGO_FROM_CHAIN_ID } from 'helpers/UtilityHelper'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; // Faucet URLs const ChainsSelect = ({ channelsNetworkId, setChannelsNetworkId }) => { @@ -33,7 +34,7 @@ const ChainsSelect = ({ channelsNetworkId, setChannelsNetworkId }) => { id: chainId, value: CHAIN_DETAILS[chainId].label, title: CHAIN_DETAILS[chainId].label, - icon: `./svg/${LOGO_FROM_CHAIN_ID[chainId]}`, + icon: getPublicAssetPath(`svg/${LOGO_FROM_CHAIN_ID[chainId]}`), function: () => { setChannelsNetworkId(chainId); setShowDropdown(false); @@ -53,7 +54,7 @@ const ChainsSelect = ({ channelsNetworkId, setChannelsNetworkId }) => { > active chain { arrow diff --git a/src/components/ChannelDetails.jsx b/src/components/ChannelDetails.jsx index 8d2d778b93..c8e1bb02c7 100644 --- a/src/components/ChannelDetails.jsx +++ b/src/components/ChannelDetails.jsx @@ -1,6 +1,6 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useContext, useEffect, useMemo } from 'react'; +import { useContext, useEffect, useMemo, useState } from 'react'; // External Packages import moment from 'moment'; @@ -51,8 +51,8 @@ export default function ChannelDetails({ isChannelExpired, setIsChannelExpired, const { handleConnectWallet } = useContext(AppContext); const { CHANNEL_ACTIVE_STATE, CHANNNEL_DEACTIVATED_STATE } = useSelector((state) => state.channels); const { processingState } = useSelector((state) => state.channelCreation); - const [verifyingChannel, setVerifyingChannel] = React.useState([]); - const [creationDate, setCreationDate] = React.useState(''); + const [verifyingChannel, setVerifyingChannel] = useState([]); + const [creationDate, setCreationDate] = useState(''); let { channelState } = channelDetails; if (!channelState) channelState = channelDetails['activation_status']; const channelIsActive = channelState === CHANNEL_ACTIVE_STATE; @@ -62,8 +62,8 @@ export default function ChannelDetails({ isChannelExpired, setIsChannelExpired, const onCoreNetwork = CORE_CHAIN_ID === chainId; const isMobile = useDeviceWidthCheck(600); - const [delegateeList, setDelegateeList] = React.useState([account]); - const [channelAddress, setChannelAddress] = React.useState(undefined); + const [delegateeList, setDelegateeList] = useState([account]); + const [channelAddress, setChannelAddress] = useState(undefined); const { epnsCommWriteProvider } = useSelector((state) => state.contracts); const navigate = useNavigate(); @@ -105,7 +105,7 @@ export default function ChannelDetails({ isChannelExpired, setIsChannelExpired, if (!isChannelNotExpired) setIsChannelExpired(true); }, [isChannelNotExpired]); - React.useEffect(() => { + useEffect(() => { if (!channelDetails || !canVerify) return; (async function () { let channelJson = await ChannelsDataStore.getInstance().getChannelJsonAsync(channelDetails.verifiedBy); @@ -113,7 +113,7 @@ export default function ChannelDetails({ isChannelExpired, setIsChannelExpired, })(); }, [channelDetails, canVerify]); - React.useEffect(() => { + useEffect(() => { if (!channelDetails || !onCoreNetwork) return; (async function () { const bn = channelDetails.channelStartBlock.toString(); @@ -125,7 +125,7 @@ export default function ChannelDetails({ isChannelExpired, setIsChannelExpired, })(); }, [channelDetails]); - React.useEffect(() => { + useEffect(() => { if (!account) return; if (!delegatees || !delegatees.length) { setChannelAddress(account); diff --git a/src/components/ChannelInfo.tsx b/src/components/ChannelInfo.tsx index 05039babee..e43dd121d4 100644 --- a/src/components/ChannelInfo.tsx +++ b/src/components/ChannelInfo.tsx @@ -1,7 +1,7 @@ // @ts-nocheck // React + Web3 Essentials import { appConfig, CHAIN_DETAILS } from 'config/index.js'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import Dropdown from 'react-dropdown'; diff --git a/src/components/ChannelReactivateModalContent.tsx b/src/components/ChannelReactivateModalContent.tsx index 3aeed3f934..4933ca2a37 100644 --- a/src/components/ChannelReactivateModalContent.tsx +++ b/src/components/ChannelReactivateModalContent.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, useRef } from 'react'; import { ethers } from 'ethers'; // External Packages @@ -38,20 +38,20 @@ const ChannelReactivateModalContent = ({ onConfirm, onClose, toastObject }: Moda aliasDetails: { isAliasVerified, aliasAddrFromContract }, } = useSelector((state: any) => state.admin); const { CHANNEL_ACTIVE_STATE, CHANNNEL_DEACTIVATED_STATE } = useSelector((state: any) => state.channels); - const [creationDate, setCreationDate] = React.useState(''); + const [creationDate, setCreationDate] = useState(''); let { channelState } = channelDetails; if (!channelState) channelState = channelDetails['activation_status']; const channelIsActive = channelState === CHANNEL_ACTIVE_STATE; const channelIsDeactivated = channelState === CHANNNEL_DEACTIVATED_STATE; - const [isLoading, setIsLoading] = React.useState(false); + const [isLoading, setIsLoading] = useState(false); const [pushDeposited, setPushDeposited] = useState(false); const [pushApprovalAmount, setPushApprovalAmount] = useState(0); const handleClose = () => !isLoading && onClose(); // to close the modal upon a click on backdrop - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => handleClose()); const CORE_CHAIN_ID = appConfig.coreContractChain; diff --git a/src/components/ChannelSettings.jsx b/src/components/ChannelSettings.jsx index 0883ab9a43..3a52308f67 100644 --- a/src/components/ChannelSettings.jsx +++ b/src/components/ChannelSettings.jsx @@ -3,13 +3,12 @@ import React from 'react'; // External Packages import { AiOutlineEllipsis } from 'react-icons/ai'; -import styled from 'styled-components'; +import styled, { useTheme } from 'styled-components'; // Internal Compoonents import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; import ChannelSettingsDropdown from './ChannelSettingsDropdown'; import { Button } from './SharedStyling'; -import { useTheme } from '@emotion/react'; export default function ChannelSettings() { const DropdownRef = React.useRef(null); @@ -25,14 +24,20 @@ export default function ChannelSettings() { }; return ( - - + + {isDropdownOpen && ( - + )} ); @@ -59,7 +64,7 @@ const Settings = styled(AiOutlineEllipsis)` width: 40px; height: 36px; border: 1px solid; - border-color: ${(props)=>props.theme.default.borderColor}; + border-color: ${(props) => props.theme.default.borderColor}; border-radius: 8px; cursor: pointer; transition: 400ms; @@ -70,7 +75,7 @@ const SubmitButton = styled(Button)` width: 7rem; background: #cf1c84; color: #fff; - z-Index:0; + z-index: 0; font-family: 'Strawford'; font-style: normal; font-weight: 500; @@ -79,7 +84,7 @@ const SubmitButton = styled(Button)` margin-right: 20px; border-radius: 8px; padding: 11px 10px; - @media (min-width:600px) and (max-width:700px){ + @media (min-width: 600px) and (max-width: 700px) { margin-right: 9px; } `; diff --git a/src/components/DelegateInfo.jsx b/src/components/DelegateInfo.jsx index 8fd2071194..7c17f87a9b 100644 --- a/src/components/DelegateInfo.jsx +++ b/src/components/DelegateInfo.jsx @@ -1,13 +1,13 @@ // React + Web3 Essentials -import React, { useEffect, useState } from "react"; +import { useEffect, useState } from 'react'; // External Packages -import styled from "styled-components"; -import { RiFileCopyFill, RiFileCopyLine } from "react-icons/ri"; +import styled from 'styled-components'; +import { RiFileCopyFill, RiFileCopyLine } from 'react-icons/ri'; // Internal Components -import { useDeviceWidthCheck } from "hooks"; -import { shortenText } from "helpers/UtilityHelper"; +import { useDeviceWidthCheck } from 'hooks'; +import { shortenText } from 'helpers/UtilityHelper'; const DelegateInfo = ({ delegateAddress, maxWidth }) => { const [addressText, setAddressText] = useState(delegateAddress); @@ -19,7 +19,7 @@ const DelegateInfo = ({ delegateAddress, maxWidth }) => { setAddressText(delegateAddress); } else { // clip address - const clippedAddrs = shortenText(delegateAddress,5); + const clippedAddrs = shortenText(delegateAddress, 5); setAddressText(clippedAddrs); } }, [isMobile]); @@ -27,63 +27,66 @@ const DelegateInfo = ({ delegateAddress, maxWidth }) => { return ( setIsCopied(false)} - minWidth={!isMobile ? "350px" : "120px"} + minWidth={!isMobile ? '350px' : '120px'} > - + ); }; -const WalletInfoContent = ({ - addressText, - isCopied, - setIsCopied, - delegateAddress, -}) => { +const WalletInfoContent = ({ addressText, isCopied, setIsCopied, delegateAddress }) => { const isMobile = useDeviceWidthCheck(1000); const [isHovered, setIsHovered] = useState(false); const handleMouseOut = (e) => { setIsHovered(false); - } + }; const handleMouseOver = (e) => { setIsHovered(true); - } + }; return (
{shortenText(addressText, 7, 7)}
- {isHovered && { - navigator.clipboard.writeText(delegateAddress); - setIsCopied(true); - }} - > - {isCopied ? ( - - ) : ( - - )} - } + {isHovered && ( + { + navigator.clipboard.writeText(delegateAddress); + setIsCopied(true); + }} + > + {isCopied ? ( + + ) : ( + + )} + + )}
); }; const ItemHere = styled.div` cursor: pointer; - margin-left: ${(props) => props.isMobile || ""}; + margin-left: ${(props) => props.isMobile || ''}; `; const WalletAddressDisplay = styled.span` @@ -95,7 +98,7 @@ const WalletAddressDisplay = styled.span` display: flex; align-items: baseline; justify-content: space-between; - max-width: ${(props) => props.maxWidth || "fit-content"}; + max-width: ${(props) => props.maxWidth || 'fit-content'}; font-style: normal; font-weight: 600; diff --git a/src/components/Dropdown.tsx b/src/components/Dropdown.tsx index 5769a7ce3e..78f584b08f 100644 --- a/src/components/Dropdown.tsx +++ b/src/components/Dropdown.tsx @@ -1,6 +1,5 @@ // React + Web3 Essentials import { shortenText } from 'helpers/UtilityHelper'; -import React, { useContext } from 'react'; import { Link } from 'react-router-dom'; // External Packages @@ -9,7 +8,7 @@ import { useSelector } from 'react-redux'; // Internal Components import { A, Image, ItemH, Span } from '../primaries/SharedStyling'; -import { GlobalContext, ReadOnlyWalletMode } from 'contexts/GlobalContext'; +import { ReadOnlyWalletMode } from 'contexts/GlobalContext'; import { SpanV2 } from './reusables/SharedStylingV2'; import { useAccount } from 'hooks'; @@ -32,9 +31,8 @@ type DropdownProps = { }; // Create Dropdown -function Dropdown({ dropdownValues, textColor, iconFilter, hoverBGColor, setShowDropdown }: DropdownProps) { +function Dropdown({ dropdownValues, textColor, iconFilter, hoverBGColor }: DropdownProps) { const theme = useTheme(); - const { mode } = useContext(GlobalContext); const { wallet } = useAccount(); const getTextColor = (dropdownValue: DropdownValueType) => { diff --git a/src/components/Faucets.tsx b/src/components/Faucets.tsx index d61bb36196..20af2a3457 100644 --- a/src/components/Faucets.tsx +++ b/src/components/Faucets.tsx @@ -8,6 +8,7 @@ import styled, { useTheme } from 'styled-components'; import { useClickAway } from 'hooks/useClickAway'; import { Image, Item } from '../primaries/SharedStyling'; import Dropdown from './Dropdown'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; type FaucetListType = { id: string; @@ -98,7 +99,7 @@ const Faucets = () => { > faucet { arrow diff --git a/src/components/InboxComponent.jsx b/src/components/InboxComponent.jsx index 63a3284765..64df5dd538 100644 --- a/src/components/InboxComponent.jsx +++ b/src/components/InboxComponent.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; // External Packages import styled, { useTheme } from 'styled-components'; diff --git a/src/components/InitState.tsx b/src/components/InitState.tsx index 4d5939f664..7dd0b0d273 100644 --- a/src/components/InitState.tsx +++ b/src/components/InitState.tsx @@ -1,15 +1,12 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useContext, useEffect } from 'react'; +import { useEffect } from 'react'; // External Packages import { useDispatch, useSelector } from 'react-redux'; // Internal Components -import * as PushAPI from '@pushprotocol/restapi'; -import { getReq } from 'api'; import { convertAddressToAddrCaip } from 'helpers/CaipHelper'; -import EPNSCoreHelper from 'helpers/EPNSCoreHelper'; import { useAccount } from 'hooks'; import { setAliasAddress, @@ -35,7 +32,6 @@ import UsersDataStore from 'singletons/UsersDataStore'; // Internals Configs import { abis, addresses, appConfig, CHAIN_DETAILS } from 'config/index.js'; -import { AppContext } from 'contexts/AppContext'; import useSDKStream from 'hooks/useStream'; // Constants diff --git a/src/components/MobileNavButton.jsx b/src/components/MobileNavButton.jsx index b1f6645ca2..cb4af943bd 100644 --- a/src/components/MobileNavButton.jsx +++ b/src/components/MobileNavButton.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { BiChevronDown, BiChevronUp } from 'react-icons/bi'; // External Packages diff --git a/src/components/MyNFTsV2.jsx b/src/components/MyNFTsV2.jsx index 169f5c95c0..eec48845df 100644 --- a/src/components/MyNFTsV2.jsx +++ b/src/components/MyNFTsV2.jsx @@ -1,113 +1,97 @@ // React + Web3 Essentials -import { ethers } from "ethers"; -import React, { useState } from "react"; +import { ethers } from 'ethers'; +import { useState, useEffect } from 'react'; // External Packages import styled from 'styled-components'; // Internal Compoonents import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { ItemVV2 } from "components/reusables/SharedStylingV2"; -import ViewNFTV2Item from "components/ViewNFTsV2Item"; +import { ItemVV2 } from 'components/reusables/SharedStylingV2'; +import ViewNFTV2Item from 'components/ViewNFTsV2Item'; import NFTHelper from 'helpers/NFTHelper'; -import DisplayNotice from "../primaries/DisplayNotice"; -import { ItemH } from "../primaries/SharedStyling"; +import DisplayNotice from '../primaries/DisplayNotice'; +import { ItemH } from '../primaries/SharedStyling'; import { useAccount } from 'hooks'; // Internal Configs -import { abis, addresses, appConfig } from "config/index.js"; +import { abis, addresses, appConfig } from 'config/index.js'; // Create Header function MyNFTs({ controlAt, setControlAt, setTokenId }) { const { account, provider, chainId } = useAccount(); - const [nftReadProvider, setNftReadProvider] = React.useState(null); - const [nftWriteProvider, setNftWriteProvider] = React.useState(null); - const [NFTRewardsV2Contract, setNFTRewardsV2Contract] = React.useState(null); + const [nftReadProvider, setNftReadProvider] = useState(null); + const [nftWriteProvider, setNftWriteProvider] = useState(null); + const [NFTRewardsV2Contract, setNFTRewardsV2Contract] = useState(null); const [NFTObjects, setNFTObjects] = useState([]); - const [loading, setLoading] = React.useState(true); + const [loading, setLoading] = useState(true); const onMainnetCore = chainId === appConfig.mainnetCoreContractChain; - const mainnetCoreProvider = onMainnetCore - ? provider - : new ethers.providers.JsonRpcProvider(appConfig.mainnetCoreRPC); + const mainnetCoreProvider = onMainnetCore ? provider : new ethers.providers.JsonRpcProvider(appConfig.mainnetCoreRPC); - React.useEffect(() => { + useEffect(() => { if (!!(mainnetCoreProvider && account)) { - const contractInstance = new ethers.Contract( - addresses.rockstarV2, - abis.rockstarV2, - mainnetCoreProvider - ); + const contractInstance = new ethers.Contract(addresses.rockstarV2, abis.rockstarV2, mainnetCoreProvider); setNftReadProvider(contractInstance); let signer = mainnetCoreProvider.getSigner(account); - const signerInstance = new ethers.Contract( - addresses.rockstarV2, - abis.rockstarV2, - signer - ); + const signerInstance = new ethers.Contract(addresses.rockstarV2, abis.rockstarV2, signer); setNftWriteProvider(signerInstance); - const NFTRewardsV2Instance = new ethers.Contract( - addresses.NFTRewardsV2, - abis.NFTRewardsV2, - signer - ); + const NFTRewardsV2Instance = new ethers.Contract(addresses.NFTRewardsV2, abis.NFTRewardsV2, signer); setNFTRewardsV2Contract(NFTRewardsV2Instance); } }, [account]); - React.useEffect(() => { + useEffect(() => { if (nftReadProvider) { fetchNFTDetails(); } }, [account, nftReadProvider]); - // to fetch NFT Details const fetchNFTDetails = async () => { let balance = await NFTHelper.getNFTBalance(account, nftReadProvider); setLoading(false); for (let i = 0; i < balance; i++) { - let tokenId = await NFTHelper.getTokenOfOwnerByIndex(account, i, nftReadProvider) - if(tokenId < 1 || tokenId > 100) return; + let tokenId = await NFTHelper.getTokenOfOwnerByIndex(account, i, nftReadProvider); + if (tokenId < 1 || tokenId > 100) return; // let tokenURI = await NFTHelper.getTokenURIByIndex(tokenId, nftReadProvider); - let NFTObject = await NFTHelper.getTokenData(tokenId, nftReadProvider, NFTRewardsV2Contract) - let url = await callFunction(NFTObject.metadata) - NFTObject['nftInfo'] = url + let NFTObject = await NFTHelper.getTokenData(tokenId, nftReadProvider, NFTRewardsV2Contract); + let url = await callFunction(NFTObject.metadata); + NFTObject['nftInfo'] = url; setNFTObjects((prev) => [...prev, NFTObject]); } - } + }; const callFunction = async (tokenURI) => { - let tokenUrl = tokenURI.replace('ipfs://', 'https://ipfs.io/ipfs/') + let tokenUrl = tokenURI.replace('ipfs://', 'https://ipfs.io/ipfs/'); let response = await fetch(`${tokenUrl}`); - let data = await response.json() - return data - } + let data = await response.json(); + return data; + }; return ( - {loading && + {loading && ( - + - } + )} - {!loading && NFTObjects.length == 0 && + {!loading && NFTObjects.length == 0 && ( - + - } + )} - - {!loading && NFTObjects.length != 0 && + {!loading && NFTObjects.length != 0 && ( - - {Object.keys(NFTObjects).map(index => { + {Object.keys(NFTObjects).map((index) => { if (NFTObjects) { return ( ); } - })} - } + )} ); } @@ -132,7 +115,7 @@ function MyNFTs({ controlAt, setControlAt, setTokenId }) { // css styles const ContainerInfo = styled.div` padding: 20px; -` +`; // Export Default export default MyNFTs; diff --git a/src/components/NavButton.jsx b/src/components/NavButton.jsx index ff7fdab9af..5883a397d1 100644 --- a/src/components/NavButton.jsx +++ b/src/components/NavButton.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import { BiChevronDown, BiChevronUp } from 'react-icons/bi'; diff --git a/src/components/NavigationButton.jsx b/src/components/NavigationButton.jsx index 66f34681d7..625bed0b6a 100644 --- a/src/components/NavigationButton.jsx +++ b/src/components/NavigationButton.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, useContext } from 'react'; import { BiChevronDown, BiChevronUp } from 'react-icons/bi'; // External Packages @@ -36,8 +36,8 @@ function NavigationButton({ item, data, sectionID, active, bg = 'none' }) { setActiveIcon(navigationIcons[data.activeSrc]); }, [data.src, data.activeSrc]); - const { showMetamaskPushSnap, handleConnectWallet } = React.useContext(AppContext); - const { readOnlyWallet, mode, sidebarCollapsed } = React.useContext(GlobalContext); + const { showMetamaskPushSnap, handleConnectWallet } = useContext(AppContext); + const { readOnlyWallet, mode, sidebarCollapsed } = useContext(GlobalContext); const navigationToast = useToast(5000); diff --git a/src/components/Profile.tsx b/src/components/Profile.tsx index f3f5ccc630..1efe6b3c4b 100644 --- a/src/components/Profile.tsx +++ b/src/components/Profile.tsx @@ -1,11 +1,11 @@ // React + Web3 Essentials -import React, { useContext } from "react"; +import { useContext, useEffect } from 'react'; // External Packages import styled from 'styled-components'; // Internal Compoonents -import Blockies from "components/BlockiesIdenticon"; +import Blockies from 'components/BlockiesIdenticon'; import { useResolveWeb3Name } from 'hooks/useResolveWeb3Name'; import { shortenText } from 'helpers/UtilityHelper'; import { AppContext } from 'contexts/AppContext'; @@ -15,18 +15,17 @@ import { useAccount } from 'hooks'; // Create Header function Profile() { - const { web3NameList }:AppContextType = React.useContext(AppContext); + const { web3NameList }: AppContextType = useContext(AppContext); const { account } = useAccount(); const { authError } = useContext(ErrorContext); useResolveWeb3Name(account); // get ens name from context - const ensName= web3NameList[account] + const ensName = web3NameList[account]; - React.useEffect(() => { + useEffect(() => { if (account && account != '') { - } }, [account]); @@ -34,23 +33,22 @@ function Profile() { return ( <> - {account && account !== '' && !authError && - - - - - - - - {ensName && - <>{ensName} - } - {!ensName && - <>{shortenText(account,6)} - } - - - } + {account && account !== '' && !authError && ( + + + + + + + + {ensName && <>{ensName}} + {!ensName && <>{shortenText(account, 6)}} + + + )} ); } @@ -67,7 +65,7 @@ const Container = styled.button` flex-direction: row; align-items: center; display: flex; -` +`; const Blocky = styled.div` position: relative; @@ -77,11 +75,10 @@ const Blocky = styled.div` overflow: hidden; transform: scale(0.85); outline-width: 2px; - outline-color: rgba(225,225,225,1); -` + outline-color: rgba(225, 225, 225, 1); +`; -const BlockyInner = styled.div` -` +const BlockyInner = styled.div``; const Wallet = styled.span` margin: 0px 10px; @@ -94,8 +91,8 @@ const Wallet = styled.span` font-size: 14px; color: #fff; border-radius: 15px; - background: rgb(226,8,128); - background: linear-gradient(107deg, rgba(226,8,128,1) 30%, rgba(103,76,159,1) 70%, rgba(53,197,243,1) 100%); + background: rgb(226, 8, 128); + background: linear-gradient(107deg, rgba(226, 8, 128, 1) 30%, rgba(103, 76, 159, 1) 70%, rgba(53, 197, 243, 1) 100%); &:hover { opacity: 0.9; cursor: pointer; @@ -106,7 +103,7 @@ const Wallet = styled.span` cursor: pointer; pointer: hand; } -` +`; // Export Default export default Profile; diff --git a/src/components/ProfileModal.tsx b/src/components/ProfileModal.tsx index a7ab06cce9..46815fb434 100644 --- a/src/components/ProfileModal.tsx +++ b/src/components/ProfileModal.tsx @@ -1,11 +1,8 @@ -import React, { useContext } from 'react'; import styled, { useTheme } from 'styled-components'; -import { A, Button, Image, Item, ItemH, Span } from 'primaries/SharedStyling'; +import { A, Button, Image, ItemH, Span } from 'primaries/SharedStyling'; import { BsXLg } from 'react-icons/bs'; import { shortenText } from 'helpers/UtilityHelper'; -import { SpanV2 } from './reusables/SharedStylingV2'; -import { GlobalContext } from 'contexts/GlobalContext'; const ProfileModal = ({ showDropdown, setShowDropdown, dropdownValues }) => { const theme = useTheme(); @@ -14,7 +11,6 @@ const ProfileModal = ({ showDropdown, setShowDropdown, dropdownValues }) => { // to close the modal upon a click on backdrop // const containerRef = React.useRef(null); - const { mode } = useContext(GlobalContext); // useClickAway(containerRef, () => onClose()) return ( diff --git a/src/components/PushSnap/EnableSnoozeModal.tsx b/src/components/PushSnap/EnableSnoozeModal.tsx index 3d08e72be7..ea4c6e3153 100644 --- a/src/components/PushSnap/EnableSnoozeModal.tsx +++ b/src/components/PushSnap/EnableSnoozeModal.tsx @@ -1,8 +1,8 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState, useContext } from 'react'; // External Packages -import styled, { useTheme } from 'styled-components'; +import styled from 'styled-components'; // Internal Compoonents import { ButtonV2, ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; @@ -19,8 +19,7 @@ const EnableSnoozeModal = ({ }: { setSnoozeDuration: (snoozeDuration: SnoozeDurationType) => void; }) => { - const { setSnapState } = React.useContext(AppContext); - const theme = useTheme(); + const { setSnapState } = useContext(AppContext); const [snoozeDurationInput, setSnoozeDurationInput] = useState(1); diff --git a/src/components/PushSnap/InstallPushSnapModal.tsx b/src/components/PushSnap/InstallPushSnapModal.tsx index d9966dd975..ab0e0a23df 100644 --- a/src/components/PushSnap/InstallPushSnapModal.tsx +++ b/src/components/PushSnap/InstallPushSnapModal.tsx @@ -1,8 +1,7 @@ // React + Web3 Essentials -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; // External Packages -import { useNavigate } from 'react-router-dom'; import styled, { useTheme } from 'styled-components'; // Internal Compoonents @@ -36,8 +35,6 @@ const InstallPushSnapModal = ({ setSnapState, configure, setConfigure }) => { }); } - const navigate = useNavigate(); - return ( { const [addresses, setAddresses] = useState([]); const [searchedUser, setSearchedUser] = useState(''); - const { setSnapState, SnapState } = React.useContext(AppContext); + const { setSnapState, SnapState } = useContext(AppContext); useEffect(() => { setChecked(SnapState === 6); @@ -38,7 +38,7 @@ const PushSnapConfigureModal = ({ const theme = useTheme(); - const { chainId, account, provider } = useAccount(); + const { account, provider } = useAccount(); useEffect(() => { (async function () { @@ -149,7 +149,7 @@ const PushSnapConfigureModal = ({ setAddresses(result); }; - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => { setWalletSelected(null); }); diff --git a/src/components/PushSnap/PushSnapSettings.tsx b/src/components/PushSnap/PushSnapSettings.tsx index 55d14e0b9a..d12e084ee8 100644 --- a/src/components/PushSnap/PushSnapSettings.tsx +++ b/src/components/PushSnap/PushSnapSettings.tsx @@ -1,3 +1,4 @@ +import { useState, useEffect } from 'react'; import SnapExample from 'assets/snap/SnapExample.svg?react'; import InfoLogo from 'assets/snap/spam-icon.svg?react'; import { Image, Section } from 'components/SharedStyling'; @@ -7,13 +8,11 @@ import { device } from 'config/Globals'; import { useAccount } from 'hooks'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; import AboutSnapModal from 'modules/snap/AboutSnapModal'; -import SnapModule from 'modules/snap/SnapModule'; -import React, { useEffect, useState } from 'react'; import styled, { useTheme } from 'styled-components'; import PushSnapConfigureModal from './PushSnapConfigureModal'; const PushSnapSettings = () => { - const { account, provider } = useAccount(); + const { account } = useAccount(); const theme = useTheme(); const [walletConnected, setWalletConnected] = useState(false); diff --git a/src/components/PushSnap/SnapFAQModal.tsx b/src/components/PushSnap/SnapFAQModal.tsx index a1f425a2a3..dac31743fd 100644 --- a/src/components/PushSnap/SnapFAQModal.tsx +++ b/src/components/PushSnap/SnapFAQModal.tsx @@ -1,8 +1,7 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useState } from 'react'; // External Packages -import ReactGA from 'react-ga'; import { useNavigate } from 'react-router-dom'; import styled, { useTheme } from 'styled-components'; diff --git a/src/components/PushSnap/SnapKnowledgeModal.tsx b/src/components/PushSnap/SnapKnowledgeModal.tsx index 781690bc50..622da80913 100644 --- a/src/components/PushSnap/SnapKnowledgeModal.tsx +++ b/src/components/PushSnap/SnapKnowledgeModal.tsx @@ -1,22 +1,17 @@ -// React + Web3 Essentials -import React, { useEffect, useState } from 'react'; - // External Packages -import ReactGA from 'react-ga'; import { useNavigate } from 'react-router-dom'; -import styled, { useTheme } from 'styled-components'; +import styled from 'styled-components'; // Internal Components import { ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; -import { Section, Span } from '../../primaries/SharedStyling'; +import { Section } from '../../primaries/SharedStyling'; // Internal Configs import Close from 'assets/chat/group-chat/close.svg?react'; import { device } from 'config/Globals'; const SnapKnowledgeModal = ({ onClose }) => { - const theme = useTheme(); const navigate = useNavigate(); const handleKnowledgeModalClose = () => { diff --git a/src/components/SearchFilter.jsx b/src/components/SearchFilter.jsx index fb09c7cd0e..f032523adf 100644 --- a/src/components/SearchFilter.jsx +++ b/src/components/SearchFilter.jsx @@ -1,285 +1,280 @@ // React + Web3 Essentials -import React, { useState } from "react"; +import { useState, useEffect } from 'react'; // External Packages -import { MultiSelect } from "react-multi-select-component"; -import styled, { useTheme } from "styled-components"; -import { ThemeProvider } from "styled-components"; -import DateTimePicker from "react-datetime-picker"; +import { MultiSelect } from 'react-multi-select-component'; +import styled, { useTheme } from 'styled-components'; +import { ThemeProvider } from 'styled-components'; +import DateTimePicker from 'react-datetime-picker'; // Constants const DEBOUNCE_TIMEOUT = 500; //time in millisecond which we want to wait for then to finish typing const SearchFilter = ({ - notifications, - filterNotifications, - filter, - reset, - loadFilter, - showFilter, - setShowFilter, - search, - setSearch -}) =>{ + notifications, + filterNotifications, + filter, + reset, + loadFilter, + showFilter, + setShowFilter, + search, + setSearch, +}) => { // const [search, setSearch] = useState(""); const [startDate, setStartDate] = useState(); const [endDate, setEndDate] = useState(); const themes = useTheme(); - React.useEffect(() => { + useEffect(() => { const searchForChannel = () => { - if(search){ - if(search.length > 0){ - applySearch() + if (search) { + if (search.length > 0) { + applySearch(); } - }else{ - reset() - } - } - + } else { + reset(); + } + }; + const timeout = setTimeout(searchForChannel, DEBOUNCE_TIMEOUT); return () => { clearTimeout(timeout); }; - }, [search]) + }, [search]); - React.useEffect(() => { + useEffect(() => { // this is done so that we only make a request after the user stops typing - }, [search]); const applySearch = async () => { var channels = []; - selectedOption.length - ? selectedOption.map((each) => channels.push(each.value)) - : (channels = []); + selectedOption.length ? selectedOption.map((each) => channels.push(each.value)) : (channels = []); await filterNotifications(search, channels, startDate, endDate); }; var options = []; - notifications.map((each) => - options.push({ label: each.app, value: each.channel }) - ); - var uniqueOptions = [ - ...new Map(options.map((item) => [item["value"], item])).values(), - ]; + notifications.map((each) => options.push({ label: each.app, value: each.channel })); + var uniqueOptions = [...new Map(options.map((item) => [item['value'], item])).values()]; const [selectedOption, setSelectedOption] = useState(uniqueOptions); - const resetIt = async () => { setStartDate(null); setEndDate(null); - setSearch(""); + setSearch(''); setSelectedOption(uniqueOptions); reset(); - setShowFilter(false) + setShowFilter(false); }; - if(!showFilter) return <> + if (!showFilter) return <>; return ( - - - Keywords - - { - setSearch(e.target.value); - }} - /> - - From - - { - if (selectedOption.length === 0) return "eg: ethereum"; - return `${selectedOption.length} Selected`; - }} - value={selectedOption} - onChange={setSelectedOption} - labelledBy="Search Notifications from" - placeholder="Search Notifications from" - /> - - - - Start Date - - - - End Date - - - - - - - - Reset - - - Search - - + + + Keywords + + { + setSearch(e.target.value); + }} + /> + + From + + { + if (selectedOption.length === 0) return 'eg: ethereum'; + return `${selectedOption.length} Selected`; + }} + value={selectedOption} + onChange={setSelectedOption} + labelledBy="Search Notifications from" + placeholder="Search Notifications from" + /> + + + + Start Date + + + + End Date + + + + + + + Reset + + Search + + ); -} - +}; const SDateTimePicker = styled(DateTimePicker)` - padding-right: 4px; - flex: 6; - display: flex; - align-items: center !important; - font-family: Strawford, Source Sans Pro; - .react-datetime-picker__wrapper { - border: 0px !important; - border-radius: 5px !important; - height: 40px !important; - } - - .react-datetime-picker__inputGroup { - text-align: center !important; - @media(max-width:850px) - { - width: 4rem !important; - margin-right: -2px !important; - margin: 0px !important; - } - } - - .react-datetime-picker__inputGroup__input { - font-weight: 500 !important; - } - .react-datetime-picker__inputGroup__input{ - font-weight: 500 !important; - color : ${props => props.theme.scheme === "dark" ? `#fff` : `#000`}; - } + padding-right: 4px; + flex: 6; + display: flex; + align-items: center !important; + font-family: Strawford, Source Sans Pro; + .react-datetime-picker__wrapper { + border: 0px !important; + border-radius: 5px !important; + height: 40px !important; + } - .react-datetime-picker__button svg { - stroke : ${props => props.theme.scheme === "dark" ? `#fff` : `#000`}; - } - .react-datetime-picker__button{ - @media(max-width:850px) - { - margin: 4px !important; - padding: 0px !important; - } - } - .react-datetime-picker__inputGroup__input--hasLeadingZero { - font-weight: 500 !important; - } - .react-datetime-picker__inputGroup__minute { - font-weight: 400 !important; + .react-datetime-picker__inputGroup { + text-align: center !important; + @media (max-width: 850px) { + width: 4rem !important; + margin-right: -2px !important; + margin: 0px !important; } + } - .react-datetime-picker__clock { - display: none; - } - .react-datetime-picker__inputGroup__divider { - font-weight: 400; - } -` + .react-datetime-picker__inputGroup__input { + font-weight: 500 !important; + } + .react-datetime-picker__inputGroup__input { + font-weight: 500 !important; + color: ${(props) => (props.theme.scheme === 'dark' ? `#fff` : `#000`)}; + } -const TimeLabelDiv = styled.div` - flex: 2; - padding: 0 10px; - background-color: #35c5f3; - align-self: stretch; - text-align: center; - color: white; - font-weight: bold; - - - div{ - margin-top: 10px; - font-family: Source Sans Pro; + .react-datetime-picker__button svg { + stroke: ${(props) => (props.theme.scheme === 'dark' ? `#fff` : `#000`)}; + } + .react-datetime-picker__button { + @media (max-width: 850px) { + margin: 4px !important; + padding: 0px !important; } + } + .react-datetime-picker__inputGroup__input--hasLeadingZero { + font-weight: 500 !important; + } + .react-datetime-picker__inputGroup__minute { + font-weight: 400 !important; + } - @media(max-width: 400px){ - padding: 0 4px; - } -` + .react-datetime-picker__clock { + display: none; + } + .react-datetime-picker__inputGroup__divider { + font-weight: 400; + } +`; + +const TimeLabelDiv = styled.div` + flex: 2; + padding: 0 10px; + background-color: #35c5f3; + align-self: stretch; + text-align: center; + color: white; + font-weight: bold; + + div { + margin-top: 10px; + font-family: Source Sans Pro; + } + @media (max-width: 400px) { + padding: 0 4px; + } +`; const SMultiSelect = styled(MultiSelect)` - font-style: normal; - font-weight: 400; - font-size: 13px; - margin-top: 3px; - .search input{ - color : ${props => props.theme.scheme === "dark" ? `#fff` : `#000`}; - } - - input { - height: 35px; - outline: none !important; - border: 0px solid white !important; - background-color: inherit; - } + font-style: normal; + font-weight: 400; + font-size: 13px; + margin-top: 3px; + .search input { + color: ${(props) => (props.theme.scheme === 'dark' ? `#fff` : `#000`)}; + } - /* Aligns the option label with the checkbox */ - .select-item{ - position: relative; - } - .select-item span{ - position: absolute; - margin-top: 7px; - margin-left: 22px; - } - .dropdown-container { - border: 0px solid white !important; - margin: 0px !important; - padding: 0px !important; - /* background: #F4F5FA; */ - background: ${props => props.theme.backgroundBG}; - } + input { + height: 35px; + outline: none !important; + border: 0px solid white !important; + background-color: inherit; + } - .dropdown-heading { - &:focus { - border: 0px solid white !important; - box-shadow: 0 0 0px white !important; - } - } + /* Aligns the option label with the checkbox */ + .select-item { + position: relative; + } + .select-item span { + position: absolute; + margin-top: 7px; + margin-left: 22px; + } + .dropdown-container { + border: 0px solid white !important; + margin: 0px !important; + padding: 0px !important; + /* background: #F4F5FA; */ + background: ${(props) => props.theme.backgroundBG}; + } - .dropdown-content { - .panel-content { - overflow: hidden; - font-family: Strawford, Source Sans Pro; - font-weight:18px; - } - } - - .dropdown-container { - border: 0px solid white !important; - margin: 0px !important; - padding: 0px !important; + .dropdown-heading { + &:focus { + border: 0px solid white !important; + box-shadow: 0 0 0px white !important; } + } - .dropdown-container { - &:focus-within { - border: 0px solid white !important; - box-shadow: 0 0 0 0px white !important; - } + .dropdown-content { + .panel-content { + overflow: hidden; + font-family: Strawford, Source Sans Pro; + font-weight: 18px; } + } + .dropdown-container { + border: 0px solid white !important; + margin: 0px !important; + padding: 0px !important; + } - ${props => props.theme.scheme === "dark" && ` + .dropdown-container { + &:focus-within { + border: 0px solid white !important; + box-shadow: 0 0 0 0px white !important; + } + } + + ${(props) => + props.theme.scheme === 'dark' && + ` --rmsc-main: #4285f4; --rmsc-hover: #0e0c0a; --rmsc-selected: #1d1915; @@ -288,90 +283,88 @@ const SMultiSelect = styled(MultiSelect)` --rmsc-bg: #000000; color: #fff; `} -` +`; const LabelText = styled.div` - height: 23px; - font-style: normal; - font-weight: 500; - font-size: 16px; - line-height: 150%; - color: ${props => props.theme.color}; - margin-bottom: 10px; - + height: 23px; + font-style: normal; + font-weight: 500; + font-size: 16px; + line-height: 150%; + color: ${(props) => props.theme.color}; + margin-bottom: 10px; `; const SelectChannel = styled.div` - border: 1px solid ${props => props.theme.faucetBorder}; - border-radius: 5px; - font-family: Strawford, Source Sans Pro; - font-style: normal; - font-weight: 400; - /* background: #F4F5FA; */ - background: ${props => props.theme.backgroundBG}; - font-size: 15px; + border: 1px solid ${(props) => props.theme.faucetBorder}; + border-radius: 5px; + font-family: Strawford, Source Sans Pro; + font-style: normal; + font-weight: 400; + /* background: #F4F5FA; */ + background: ${(props) => props.theme.backgroundBG}; + font-size: 15px; `; const Input = styled.input` - border: 0px solid white; - font-style: normal; + border: 0px solid white; + font-style: normal; + font-weight: 400; + font-size: 15px; + position: relative; + padding-left: 0.7rem; + width: 100%; + height: 35px; + outline: none !important; + border: 0px solid white !important; + font-weight: 400; + background-color: inherit; + border: 1px solid #bac4d6; + border-radius: 8px; + color: ${(props) => props.theme.color}; + &::placeholder { + opacity: 1; font-weight: 400; - font-size: 15px; - position: relative; - padding-left: 0.7rem; - width: 100%; - height: 35px; - outline: none !important; - border: 0px solid white !important; - font-weight: 400; - background-color: inherit; - border: 1px solid #BAC4D6; - border-radius: 8px; - color: ${props => props.theme.color}; - &::placeholder { - opacity: 1; - font-weight: 400; - font-family: Strawford, Source Sans Pro; - // color: #B0B0B0 !important; - color: ${props => props.theme.color}; - } + font-family: Strawford, Source Sans Pro; + // color: #B0B0B0 !important; + color: ${(props) => props.theme.color}; + } `; const RangeSection = styled.div` -display: flex; -flex-direction: row; -border: 1px solid ${props => props.theme.faucetBorder}; -border-radius: 5px; -justify-content: space-between; -align-items: center; -height: "40px"; -margin-bottom: 28px; - -position: relative; -margin-top: ${(props) => (props.mttop ? props.mttop : "")}; -@media(max-width:600px) -{ - margin-top: ${(props) => (props.mtop ? props.mtop : "")}; -} + display: flex; + flex-direction: row; + border: 1px solid ${(props) => props.theme.faucetBorder}; + border-radius: 5px; + justify-content: space-between; + align-items: center; + height: '40px'; + margin-bottom: 28px; + + position: relative; + margin-top: ${(props) => (props.mttop ? props.mttop : '')}; + @media (max-width: 600px) { + margin-top: ${(props) => (props.mtop ? props.mtop : '')}; + } `; const Container = styled.div` - width: -webkit-fill-available; - display: flex; - flex-direction: column; - background: ${props => props.theme.backgroundBG}; - border: 1px solid ${props => props.theme.faucetBorder}; - border-radius: 10px; - margin: 1.3rem; - position: absolute; - z-index: 2; - top: 43px; - padding: 0; - @media(max-width: 600px){ - margin-left: 0.5rem; - margin-right: 0.5rem; - padding: 0.5rem; - } + width: -webkit-fill-available; + display: flex; + flex-direction: column; + background: ${(props) => props.theme.backgroundBG}; + border: 1px solid ${(props) => props.theme.faucetBorder}; + border-radius: 10px; + margin: 1.3rem; + position: absolute; + z-index: 2; + top: 43px; + padding: 0; + @media (max-width: 600px) { + margin-left: 0.5rem; + margin-right: 0.5rem; + padding: 0.5rem; + } `; const ButtonContainer = styled.div` @@ -380,87 +373,79 @@ const ButtonContainer = styled.div` justify-content: flex-end; margin: 0.3rem 2rem 1.6rem 0; font-family: Strawford, Source Sans Pro; - @media (max-width: 600px){ - justify-content: space-evenly ; + @media (max-width: 600px) { + justify-content: space-evenly; margin-right: 0; } `; const ButtonFeed = styled.button` -width: 110px; -height: 36px; -border-radius: 8px; -display:flex; -align-items:center; -justify-content:center; -color: white; -font-weight: 500; -font-size: 14px; -line-height: 17px; -background-color: ${(props) => (props.bgColor ? props.bgColor : "")}; -margin-right: ${(props) => (props.mright ? props.mright : "")}; -&:hover { - cursor: pointer; - pointer: hand; -} -@media (max-width: 500px) -{ - margin-right: ${(props) => (props.mright ? "1.5rem" : "")}; -} -font-family: Strawford, Source Sans Pro; + width: 110px; + height: 36px; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-weight: 500; + font-size: 14px; + line-height: 17px; + background-color: ${(props) => (props.bgColor ? props.bgColor : '')}; + margin-right: ${(props) => (props.mright ? props.mright : '')}; + &:hover { + cursor: pointer; + pointer: hand; + } + @media (max-width: 500px) { + margin-right: ${(props) => (props.mright ? '1.5rem' : '')}; + } + font-family: Strawford, Source Sans Pro; `; const ResetButton = styled(ButtonFeed)` - background: ${props => props.theme.backgroundBG}; - border: 1px solid #BAC4D6; - color: #657795; - margin-right: 10px; -` + background: ${(props) => props.theme.backgroundBG}; + border: 1px solid #bac4d6; + color: #657795; + margin-right: 10px; +`; const SearchOptions = styled.div` -display: flex; -flex-direction: row; -margin-left: 2rem; -margin-right: 2rem; -font-family: Strawford, Source Sans Pro; - + display: flex; + flex-direction: row; + margin-left: 2rem; + margin-right: 2rem; + font-family: Strawford, Source Sans Pro; -@media(max-width: 600px) -{ + @media (max-width: 600px) { flex-direction: column; justify-content: center; align-item: center; margin-left: 0.5rem; margin-right: 0.5rem; -} + } `; const SectionSearch = styled.div` - flex: 1; - @media(min-width: 600px) - { - margin-right: ${(props) => (props.mright ? props.mright : "")}; - margin-left: ${(props) => (props.mleft ? props.mleft : "")}; - margin-top: ${(props) => (props.mtop ? props.mtop : "")}; - } - @media(max-width:600px) - { - margin-top: 1.5rem; - } + flex: 1; + @media (min-width: 600px) { + margin-right: ${(props) => (props.mright ? props.mright : '')}; + margin-left: ${(props) => (props.mleft ? props.mleft : '')}; + margin-top: ${(props) => (props.mtop ? props.mtop : '')}; + } + @media (max-width: 600px) { + margin-top: 1.5rem; + } `; - const InputWrapper = styled.div` - height: 40px; - border: 1px solid ${props => props.theme.faucetBorder}; - border-radius: 5px; - padding: 1px; - margin-bottom: 28px; - @media(max-width:600px) - { - margin-bottom: 1rem; - } + height: 40px; + border: 1px solid ${(props) => props.theme.faucetBorder}; + border-radius: 5px; + padding: 1px; + margin-bottom: 28px; + @media (max-width: 600px) { + margin-bottom: 1rem; + } `; - -export default SearchFilter; \ No newline at end of file +export default SearchFilter; diff --git a/src/components/SendNotifications.tsx b/src/components/SendNotifications.tsx index f5a0a42393..3c10667b18 100644 --- a/src/components/SendNotifications.tsx +++ b/src/components/SendNotifications.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { useContext, useEffect, useMemo, useState } from 'react'; // External Packages import Switch from '@material-ui/core/Switch'; @@ -12,16 +12,14 @@ import 'react-toastify/dist/ReactToastify.min.css'; import styled, { useTheme } from 'styled-components'; // Internal Compoonents -import * as PushAPI from '@pushprotocol/restapi'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { AInlineV2, SectionV2, SpanV2 } from 'components/reusables/SharedStylingV2'; +import { AInlineV2, SectionV2 } from 'components/reusables/SharedStylingV2'; import { convertAddressToAddrCaip } from 'helpers/CaipHelper'; import { Button, Content, FormSubmision, H2, - H3, Input, Item, ItemH, diff --git a/src/components/StakingInfo.tsx b/src/components/StakingInfo.tsx index ec9f51a04a..b008c63423 100644 --- a/src/components/StakingInfo.tsx +++ b/src/components/StakingInfo.tsx @@ -1,6 +1,5 @@ // React + Web3 Essentials -import { ethers } from 'ethers'; -import React, { Fragment, useEffect, useState } from 'react'; +import { Fragment, useEffect, useState } from 'react'; // External Packages import styled from 'styled-components'; @@ -10,7 +9,6 @@ import FaucetInfo from './FaucetInfo'; import { Button, Item, Span } from 'primaries/SharedStyling'; // Internal Configs -import { abis, addresses, appConfig } from 'config/index.js'; import { useAccount, useAsyncOperation, useDeviceWidthCheck } from 'hooks'; import { device } from 'config/Globals'; import { getPushTokenFromWallet, importPushToken, mintPushToken } from 'helpers'; diff --git a/src/components/TransferNFT.jsx b/src/components/TransferNFT.jsx index 62f7f38a5a..6aa003c224 100644 --- a/src/components/TransferNFT.jsx +++ b/src/components/TransferNFT.jsx @@ -1,9 +1,8 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React from "react"; +import React from 'react'; // External Packages -import 'react-dropzone-uploader/dist/styles.css'; import styled, { css } from 'styled-components'; // Internal Compoonents @@ -12,7 +11,7 @@ import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderS import { useAccount } from 'hooks'; // Internal Configs -import { abis, addresses } from "config/index.js"; +import { abis, addresses } from 'config/index.js'; // Create Header function TransferNFT({ tokenId }) { @@ -34,47 +33,60 @@ function TransferNFT({ tokenId }) { const handleTransferNFT = async (e) => { if (nftWriteProvider) { - console.info("🚀 ~ file: TransferNFT.js ~ line 64 ~ handleTransferNFT ~ nftWriteProvider", nftWriteProvider) + console.info('🚀 ~ file: TransferNFT.js ~ line 64 ~ handleTransferNFT ~ nftWriteProvider', nftWriteProvider); e.preventDefault(); if (isEmpty(toAddress)) { setProcessing(3); - setProcessingInfo("Recipient address field is empty! Please retry!"); + setProcessingInfo('Recipient address field is empty! Please retry!'); return false; } setProcessing(1); - setProcessingInfo("Transferring NFT...") + setProcessingInfo('Transferring NFT...'); let signer = provider.getSigner(account); - const signerInstance = new ethers.Contract(addresses.rockstar, abis.rockstar, signer) + const signerInstance = new ethers.Contract(addresses.rockstar, abis.rockstar, signer); var txPromise = nftWriteProvider['safeTransferFrom(address,address,uint256)'](account, toAddress, tokenId); const tx = await txPromise; console.debug(tx); - console.info("waiting for tx to finish"); - setProcessingInfo("Waiting for Transfer tx to finish..."); + console.info('waiting for tx to finish'); + setProcessingInfo('Waiting for Transfer tx to finish...'); await provider.waitForTransaction(tx.hash); - setProcessingInfo("Transfer successfull! "); + setProcessingInfo('Transfer successfull! '); setProcessing(3); } - } + }; const isEmpty = (field) => { if (field.trim().length == 0) { return true; } return false; - } + }; return ( <>
-

+

Transfer Your NFT!

-

- Token #{tokenId} +

+ + Token #{tokenId} +

@@ -90,8 +102,12 @@ function TransferNFT({ tokenId }) { size="1.1rem" onSubmit={handleTransferNFT} > - - + { setToAddress(e.target.value) }} + onChange={(e) => { + setToAddress(e.target.value); + }} /> - {toAddress.trim().length == 0 && + {toAddress.trim().length == 0 && ( Recipient Address - } + )} - +
- {(processing == 1 || processing == 3) && + {(processing == 1 || processing == 3) && (
@@ -159,10 +195,9 @@ function TransferNFT({ tokenId }) { {processingInfo} -
- } + )} ); } diff --git a/src/components/TransferNFTv2.jsx b/src/components/TransferNFTv2.jsx index b0c54b729a..3b47884908 100644 --- a/src/components/TransferNFTv2.jsx +++ b/src/components/TransferNFTv2.jsx @@ -1,9 +1,8 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React from "react"; +import React from 'react'; // External Packages -import 'react-dropzone-uploader/dist/styles.css'; import styled, { css } from 'styled-components'; // Internal Compoonents @@ -12,7 +11,7 @@ import { Button, Content, FormSubmision, H2, Input, Item, Section, Span } from ' import { useAccount } from 'hooks'; // Internal Configs -import { abis, addresses } from "config/index.js"; +import { abis, addresses } from 'config/index.js'; // Create Header function TransferNFTv2({ tokenId }) { @@ -24,7 +23,6 @@ function TransferNFTv2({ tokenId }) { const [processing, setProcessing] = React.useState(0); const [processingInfo, setProcessingInfo] = React.useState(''); - React.useEffect(() => { if (!!(provider && account)) { let signer = provider.getSigner(account); @@ -39,42 +37,55 @@ function TransferNFTv2({ tokenId }) { if (isEmpty(toAddress)) { setProcessing(3); - setProcessingInfo("Recipient address field is empty! Please retry!"); + setProcessingInfo('Recipient address field is empty! Please retry!'); return false; } setProcessing(1); - setProcessingInfo("Transferring NFT...") + setProcessingInfo('Transferring NFT...'); let signer = provider.getSigner(account); - const signerInstance = new ethers.Contract(addresses.rockstarV2, abis.rockstarV2, signer) + const signerInstance = new ethers.Contract(addresses.rockstarV2, abis.rockstarV2, signer); var txPromise = nftWriteProvider['safeTransferFrom(address,address,uint256)'](account, toAddress, tokenId); const tx = await txPromise; console.debug(tx); - console.info("waiting for tx to finish"); - setProcessingInfo("Waiting for Transfer tx to finish..."); + console.info('waiting for tx to finish'); + setProcessingInfo('Waiting for Transfer tx to finish...'); await provider.waitForTransaction(tx.hash); - setProcessingInfo("Transfer successfull! "); + setProcessingInfo('Transfer successfull! '); setProcessing(3); } - } + }; const isEmpty = (field) => { if (field.trim().length == 0) { return true; } return false; - } + }; return ( <>
-

+

Transfer Your NFT!

-

- Token #{tokenId} +

+ + Token #{tokenId} +

@@ -90,8 +101,12 @@ function TransferNFTv2({ tokenId }) { size="1.1rem" onSubmit={handleTransferNFT} > - - + { setToAddress(e.target.value) }} + onChange={(e) => { + setToAddress(e.target.value); + }} /> - {toAddress.trim().length == 0 && + {toAddress.trim().length == 0 && ( Recipient Address - } + )} - +
- {(processing == 1 || processing == 3) && + {(processing == 1 || processing == 3) && (
@@ -159,10 +194,9 @@ function TransferNFTv2({ tokenId }) { {processingInfo} -
- } + )} ); } diff --git a/src/components/UniswapWidget.tsx b/src/components/UniswapWidget.tsx index 583478735b..27af200dee 100644 --- a/src/components/UniswapWidget.tsx +++ b/src/components/UniswapWidget.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useRef } from 'react'; +import { useRef } from 'react'; // External Packages import { darkTheme, lightTheme, SwapWidget } from '@uniswap/widgets'; diff --git a/src/components/UploadLogo.jsx b/src/components/UploadLogo.jsx index fc747d5162..661b218d7d 100644 --- a/src/components/UploadLogo.jsx +++ b/src/components/UploadLogo.jsx @@ -1,22 +1,19 @@ // React + Web3 Essentials -import { ethers } from "ethers"; -import React, { useRef } from "react"; +import { ethers } from 'ethers'; +import { useRef } from 'react'; // External Packages -import styled from "styled-components"; +import styled from 'styled-components'; import { BsCloudUpload } from 'react-icons/bs'; // Internal Compoonents import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import UtilityHelper from 'helpers/UtilityHelper'; -import ImageClipper from "primaries/ImageClipper"; -import { - Button, Content, FormSubmision, H3, Input, Item, Section, Span -} from "primaries/SharedStyling"; +import ImageClipper from 'primaries/ImageClipper'; +import { Button, Content, FormSubmision, H3, Input, Item, Section, Span } from 'primaries/SharedStyling'; // Internal Configs -import { abis, addresses } from "config/index.js"; - +import { abis, addresses } from 'config/index.js'; const UploadLogo = ({ croppedImage, @@ -30,7 +27,7 @@ const UploadLogo = ({ setImageType, setProcessingInfo, logoInfo, - setStepFlow + setStepFlow, }) => { const childRef = useRef(); @@ -43,7 +40,7 @@ const UploadLogo = ({ e.preventDefault(); e.stopPropagation(); //let's grab the image file - handleFile(e.dataTransfer, "transfer"); + handleFile(e.dataTransfer, 'transfer'); }; const handleFile = async (file, path) => { @@ -57,160 +54,186 @@ const UploadLogo = ({ reader.onloadend = function (e) { setImageSrc(reader.result); - setImageType(file?.files[0]?.type) + setImageType(file?.files[0]?.type); }; } else { - return "Nothing...."; + return 'Nothing....'; } }; return ( - - -

- Please upload a PNG, JPG. Crop the image to resize to 128px. -

-
- - -
-
handleDragOver(e)} - onDrop={(e) => handleOnDrop(e)} - className="bordered" - > -
- {view ? ( -
- {croppedImage ? ( -
- Cropped Img -
- ) : ( - - setCroppedImage(croppedImage) - } - ref={childRef} - /> - )} + + +

+ Please upload a PNG, JPG. Crop the image to resize to 128px. +

+
+ + +
+
handleDragOver(e)} + onDrop={(e) => handleOnDrop(e)} + className="bordered" + > +
+ {view ? ( +
+ {croppedImage ? ( +
+ Cropped Img
) : ( - + setCroppedImage(croppedImage)} + ref={childRef} + /> )} +
+ ) : ( + + )} - - - -

- Drag and Drop or -

-
- -
-
+ +

Drag and Drop or

+
+
-
+
- +
+
+ - {logoInfo?.length > 0 && ( -
{logoInfo}
-
)} + {logoInfo?.length > 0 && ( + +
{logoInfo}
+
+ )} - {view && (!croppedImage ? ( - - + + ) : ( + { - childRef.current.showCroppedImage(); + direction="column" + margin="0px" + justify="center" + size="1.1rem" + onSubmit={(e) => { + e.preventDefault(); + setStepFlow(2); }} > - - Crop Image - - - ): ( - - { - e.preventDefault(); - setStepFlow(2); - }} - > - - - - + {processing == 1 && ( + + )} + {processing != 1 && ( + + )} + + + ))} - - - + ); }; @@ -248,15 +271,15 @@ const ButtonSpace = styled.div` const Body = styled.div` margin: 50px auto 0px auto; - width: 55%; + width: 55%; @media (max-width: 768px) { - min-width: 100%; + min-width: 100%; margin: 10px auto 0px auto; } @media (max-width: 1224px) { - width: 75%; + width: 75%; } -` +`; const Space = styled.div` width: 100%; @@ -267,11 +290,11 @@ const Space = styled.div` .bordered { display: flex; justify-content: center; - border: 1px dashed #8C99B0; + border: 1px dashed #8c99b0; align-items: flex-end; border-radius: 12px; padding: 6px; - background-color: #F5F5FA; + background-color: #f5f5fa; margin-top: 10px; .inner { margin-top: 0.25rem; @@ -340,7 +363,7 @@ const Space = styled.div` position: relative; cursor: pointer; border-radius: 4px; - color: #CF1C84; + color: #cf1c84; &:hover { text-decoration: underline; } diff --git a/src/components/VerifyAlias.tsx b/src/components/VerifyAlias.tsx index 787b827fb5..d384723152 100644 --- a/src/components/VerifyAlias.tsx +++ b/src/components/VerifyAlias.tsx @@ -1,6 +1,6 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useRef, useState } from 'react'; +import { useState } from 'react'; // External Packages import { useTheme } from 'styled-components'; diff --git a/src/components/ViewChannelItem.jsx b/src/components/ViewChannelItem.jsx index 77b93e453d..46368e6881 100644 --- a/src/components/ViewChannelItem.jsx +++ b/src/components/ViewChannelItem.jsx @@ -1,11 +1,11 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { useContext, useEffect, useMemo, useState } from 'react'; // External Packages import Skeleton from '@yisheng90/react-loading'; import axios from 'axios'; import { useAccount, useDeviceWidthCheck } from 'hooks'; -import { cloneDeep } from 'lodash'; +import cloneDeep from 'lodash/cloneDeep'; import { GoVerified } from 'react-icons/go'; import { IoMdPeople } from 'react-icons/io'; import { MdCheckCircle, MdError } from 'react-icons/md'; @@ -16,7 +16,6 @@ import 'react-toastify/dist/ReactToastify.min.css'; import styled, { css, useTheme } from 'styled-components'; // Internal Compoonents -import * as PushAPI from '@pushprotocol/restapi'; import { Device } from 'assets/Device'; import MetaInfoDisplayer from 'components/MetaInfoDisplayer'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; @@ -43,6 +42,7 @@ import VerifiedTooltipContent from './VerifiedTooltipContent'; import APP_PATHS from 'config/AppPaths'; import { addresses, appConfig, CHAIN_DETAILS } from 'config/index.js'; import { IPFSGateway } from 'helpers/IpfsHelper'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; // Create Header function ViewChannelItem({ channelObjectProp, loadTeaser, playTeaser, minimal, profileType }) { @@ -70,21 +70,21 @@ function ViewChannelItem({ channelObjectProp, loadTeaser, playTeaser, minimal, p const onCoreNetwork = chainId === appConfig.coreContractChain; - const [channelObject, setChannelObject] = React.useState(channelObjectProp); - const [subscribed, setSubscribed] = React.useState(false); - const [loading, setLoading] = React.useState(false); - const [subscriberCount, setSubscriberCount] = React.useState(0); - const [isPushAdmin, setIsPushAdmin] = React.useState(false); - const [vLoading, setvLoading] = React.useState(false); - const [bLoading, setBLoading] = React.useState(false); - const [txInProgress, setTxInProgress] = React.useState(false); - const [canUnverify, setCanUnverify] = React.useState(false); - const [verifierDetails, setVerifierDetails] = React.useState(null); - const [copyText, setCopyText] = React.useState(channelObject.channel); - const [tooltTipHeight, setToolTipheight] = React.useState(0); - const [channelObjectFromHash, setChannelObjectFromHash] = React.useState({}); - const [channelObjectStartBlock, setChannelObjectStartBlock] = React.useState({}); - const [showChannelChangedWarning, setShowChannelChangedWarning] = React.useState(false); + const [channelObject, setChannelObject] = useState(channelObjectProp); + const [subscribed, setSubscribed] = useState(false); + const [loading, setLoading] = useState(false); + const [subscriberCount, setSubscriberCount] = useState(0); + const [isPushAdmin, setIsPushAdmin] = useState(false); + const [vLoading, setvLoading] = useState(false); + const [bLoading, setBLoading] = useState(false); + const [txInProgress, setTxInProgress] = useState(false); + const [canUnverify, setCanUnverify] = useState(false); + const [verifierDetails, setVerifierDetails] = useState(null); + const [copyText, setCopyText] = useState(channelObject.channel); + const [tooltTipHeight, setToolTipheight] = useState(0); + const [channelObjectFromHash, setChannelObjectFromHash] = useState({}); + const [channelObjectStartBlock, setChannelObjectStartBlock] = useState({}); + const [showChannelChangedWarning, setShowChannelChangedWarning] = useState(false); const isVerified = channelObject.verified_status; const isBlocked = channelObject.blocked; const isMobile = useDeviceWidthCheck(600); @@ -96,7 +96,7 @@ function ViewChannelItem({ channelObjectProp, loadTeaser, playTeaser, minimal, p // ------ toast related section const isChannelBlacklisted = CHANNEL_BLACKLIST.includes(channelObject.channel); - const [toast, showToast] = React.useState(null); + const [toast, showToast] = useState(null); const clearToast = () => showToast(null); useEffect(() => { @@ -194,7 +194,7 @@ function ViewChannelItem({ channelObjectProp, loadTeaser, playTeaser, minimal, p } //clear toast variable after it is shown - React.useEffect(() => { + useEffect(() => { if (toast) { clearToast(); } @@ -540,7 +540,7 @@ function ViewChannelItem({ channelObjectProp, loadTeaser, playTeaser, minimal, p {channelObject && channelObject?.channel && ( Ethereum Polygon Ethereum Alias Chain LogoManage diff --git a/src/components/ViewDelegateeItem.jsx b/src/components/ViewDelegateeItem.jsx index 9b86cb7309..acd68a15fd 100644 --- a/src/components/ViewDelegateeItem.jsx +++ b/src/components/ViewDelegateeItem.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useState } from "react"; +import { useEffect, useState } from 'react'; // External Packages import Skeleton from '@yisheng90/react-loading'; @@ -13,16 +13,16 @@ import Web3 from 'web3'; // Internal Compoonents import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import EPNSCoreHelper from "helpers/EPNSCoreHelper"; -import Blockies from "primaries/BlockiesIdenticon"; -import { toolingPostReq } from "../api/index"; +import EPNSCoreHelper from 'helpers/EPNSCoreHelper'; +import Blockies from 'primaries/BlockiesIdenticon'; +import { toolingPostReq } from '../api/index'; import { createTransactionObject } from '../helpers/GaslessHelper'; import { executeDelegateTx } from '../helpers/WithGasHelper'; import { Anchor, Image, Item, ItemBreak, ItemH, Span } from '../primaries/SharedStyling'; import { useAccount } from 'hooks'; // Internal Configs -import { abis, addresses } from "config/index.js"; +import { abis, addresses } from 'config/index.js'; export const PUSH_BALANCE_TRESHOLD = 100; //minimum number of push export const GAS_LIMIT = 50; //dollars limit of gas; @@ -33,17 +33,16 @@ export const ERROR_TOAST_DEFAULTS = { closeOnClick: true, pauseOnHover: true, draggable: true, - progress: undefined + progress: undefined, }; - -function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalance,setGaslessInfo, theme }) { +function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalance, setGaslessInfo, theme }) { const { account } = useAccount(); - const [loading, setLoading] = React.useState(true); - const [txLoading, setTxLoading] = React.useState(false); - const [txInProgress, setTxInProgress] = React.useState(false); - const [isBalance, setIsBalance] = React.useState(false); - const [transactionMode,setTransactionMode] = React.useState('gasless'); + const [loading, setLoading] = useState(true); + const [txLoading, setTxLoading] = useState(false); + const [txInProgress, setTxInProgress] = useState(false); + const [isBalance, setIsBalance] = useState(false); + const [transactionMode, setTransactionMode] = useState('gasless'); const [imageSrc, setImageSrc] = useState(null); const [imageSrcSet, setImageSrcSet] = useState(null); @@ -72,30 +71,29 @@ function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalan var web3 = new Web3(provider); var ens = web3.eth.ens; - React.useEffect(() => { + useEffect(() => { setLoading(false); if (pushBalance !== 0) { - setIsBalance(true) + setIsBalance(true); } }, [account, delegateeObject]); - const checkForDelegateError = async(gasEstimate) => { + const checkForDelegateError = async (gasEstimate) => { // return false if no error // otherwise return error message // get gas price const gasPrice = await EPNSCoreHelper.getGasPriceInDollars(provider); const totalCost = gasPrice * gasEstimate; - if(totalCost > GAS_LIMIT){ - return "Gas Price is too high, Please try again in a while." + if (totalCost > GAS_LIMIT) { + return 'Gas Price is too high, Please try again in a while.'; } - return false - } + return false; + }; //execute delegate tx wth gas when tokenbalance < PUSH_BALANCE_TRESHOLD - const delegateAction = async (delegateeAddress) => { - if(txInProgress) return; + if (txInProgress) return; setTxInProgress(true); // if (!isBalance) { // toast.dark("No PUSH to Delegate!", { @@ -104,17 +102,24 @@ function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalan // }); // return; // } - + setTxLoading(true); - if(transactionMode === 'withgas'){ - await executeDelegateTx({delegateeAddress,epnsToken,toast,setTxInProgress:setTxLoading,provider,LoaderToast}); - setTxInProgress(false); - return; + if (transactionMode === 'withgas') { + await executeDelegateTx({ + delegateeAddress, + epnsToken, + toast, + setTxInProgress: setTxLoading, + provider, + LoaderToast, + }); + setTxInProgress(false); + return; } if (pushBalance < PUSH_BALANCE_TRESHOLD) { // await executeDelegateTx({delegateeAddress,epnsToken,toast,setTxInProgress:setTxLoading,provider,LoaderToast}) - toast.dark("Atleast " + PUSH_BALANCE_TRESHOLD +" PUSH required for gasless delegation!", { - position: "bottom-right", + toast.dark('Atleast ' + PUSH_BALANCE_TRESHOLD + ' PUSH required for gasless delegation!', { + position: 'bottom-right', type: toast.TYPE.ERROR, autoClose: 5000, hideProgressBar: false, @@ -127,75 +132,88 @@ function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalan setTxInProgress(false); return; } - if(!web3.utils.isAddress(delegateeAddress)) - delegateeAddress = await ens.getAddress(delegateeAddress); - await createTransactionObject({delegateeAddress,account,epnsToken,addresses,signerObject,provider,setTxLoading}); + if (!web3.utils.isAddress(delegateeAddress)) delegateeAddress = await ens.getAddress(delegateeAddress); + await createTransactionObject({ + delegateeAddress, + account, + epnsToken, + addresses, + signerObject, + provider, + setTxLoading, + }); setTxInProgress(false); - toolingPostReq('/gov/prev_delegation',{"walletAddress": account}).then(res=>{ - console.debug("result",res.data.user) - setGaslessInfo(res.data.user); - // toast.dark("Successfully Fetched Prev Delegation Data", { - // position: "bottom-right", - // type: toast.TYPE.SUCCESS, - // autoClose: 5000, - // hideProgressBar: false, - // closeOnClick: true, - // pauseOnHover: true, - // draggable: true, - // progress: undefined, - // }); - } - ).catch(e=>{ - setTxInProgress(false); - toast.dark(e, { - position: "bottom-right", - type: toast.TYPE.ERROR, - autoClose: 5000, - hideProgressBar: false, - closeOnClick: true, - pauseOnHover: true, - draggable: true, - progress: undefined, + toolingPostReq('/gov/prev_delegation', { walletAddress: account }) + .then((res) => { + console.debug('result', res.data.user); + setGaslessInfo(res.data.user); + // toast.dark("Successfully Fetched Prev Delegation Data", { + // position: "bottom-right", + // type: toast.TYPE.SUCCESS, + // autoClose: 5000, + // hideProgressBar: false, + // closeOnClick: true, + // pauseOnHover: true, + // draggable: true, + // progress: undefined, + // }); + }) + .catch((e) => { + setTxInProgress(false); + toast.dark(e, { + position: 'bottom-right', + type: toast.TYPE.ERROR, + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + }); + }) + .finally(() => { + setTxInProgress(false); }); - }).finally(()=>{ - setTxInProgress(false); - - }) - } + }; // toast customize const LoaderToast = ({ msg, color }) => ( - + {msg} - ) + ); // render return ( - - + + - {loading && - - } + {loading && ( + + )} - {!loading && delegateeObject.pic && - + {!loading && delegateeObject.pic && ( {delegateeObject.name} - } - {!loading && !delegateeObject.pic && - - } + )} + {!loading && !delegateeObject.pic && ( + + )} - - {delegateeObject.votingPower.toLocaleString()} + + + {delegateeObject.votingPower.toLocaleString()} + - {delegateeObject.name} + + {delegateeObject.name} + - + - {delegateeObject.wallet} + + {delegateeObject.wallet} + {/* @@ -245,29 +291,34 @@ function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalan
*/} - setTransactionMode(e.target.value)}> - <> Test - - + setTransactionMode(e.target.value)}> + <> + {' '} + Test + + + - - - { - - txLoading ? ( - - + + {txLoading ? ( + + + + ) : ( + <> + { + delegateAction(delegateeObject.wallet); + }} + > + Delegate - ): ( - <> - - { - delegateAction(delegateeObject.wallet) - }} - >Delegate - - ) - } + + )} - + @@ -294,7 +348,7 @@ function ViewDelegateeItem({ delegateeObject, epnsToken, signerObject, pushBalan } // css styles -const SelectTag=styled.select` +const SelectTag = styled.select` border: none; padding: 0 10px; background: transparent; @@ -323,14 +377,15 @@ const DelegateeItem = styled.div` left: 0; right: 0; bottom: 0; - background: ${props => props.theme == "nominee" ? "#35c5f3" : "linear-gradient( 283deg, #34c5f2 0%, #e20880 45%, #35c5f3 100%)"}; + background: ${(props) => + props.theme == 'nominee' ? '#35c5f3' : 'linear-gradient( 283deg, #34c5f2 0%, #e20880 45%, #35c5f3 100%)'}; } -` +`; const DelegateeImageOuter = styled.div` padding-top: 100%; position: relative; -` +`; const DelegateeImageInner = styled.div` position: absolute; @@ -344,19 +399,19 @@ const DelegateeImageInner = styled.div` display: flex; justify-content: center; align-items: center; -` +`; const DelegateeProfile = styled(ItemH)` background: #fff; border-bottom-right-radius: 16px; border-bottom-left-radius: 90px; padding: 20px; -` +`; const DelegateeWallet = styled(Span)` word-break: break-all; padding-top: 4px; -` +`; const ChannelActionButton = styled.button` border: 0; @@ -381,39 +436,43 @@ const ChannelActionButton = styled.button` cursor: pointer; pointer: hand; } - ${ props => props.disabled && css` - &:hover { - opacity: 1; - cursor: default; - pointer: default; - } - &:active { - opacity: 1; - cursor: default; - pointer: default; - } - `} -` + ${(props) => + props.disabled && + css` + &:hover { + opacity: 1; + cursor: default; + pointer: default; + } + &:active { + opacity: 1; + cursor: default; + pointer: default; + } + `} +`; const ActionTitle = styled.span` - ${ props => props.hideit && css` - visibility: hidden; - `}; -` + ${(props) => + props.hideit && + css` + visibility: hidden; + `}; +`; const UnsubscribeButton = styled(ChannelActionButton)` background: #000; -` +`; const Toaster = styled.div` display: flex; flex-direction: row; align-items: center; margin: 0px 10px; -` +`; const ToasterMsg = styled.div` margin: 0px 10px; -` +`; // Export Default export default ViewDelegateeItem; diff --git a/src/components/YieldFarmChainError.tsx b/src/components/YieldFarmChainError.tsx index c1e0931f3d..084a2d4308 100644 --- a/src/components/YieldFarmChainError.tsx +++ b/src/components/YieldFarmChainError.tsx @@ -1,15 +1,12 @@ -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import Close from 'assets/chat/group-chat/close.svg?react'; -import { ButtonV2, ItemHV2, ItemVV2 } from './reusables/SharedStylingV2'; -import styled, { useTheme } from 'styled-components'; -import { ethers } from 'ethers'; +import { ButtonV2, ItemVV2 } from './reusables/SharedStylingV2'; +import styled from 'styled-components'; import { appConfig } from 'config/index.js'; import { useAccount } from 'hooks'; const YieldFarmChainError = ({ onClose }) => { - const { account, chainId: currentChainId, switchChain } = useAccount(); - - const theme = useTheme(); + const { chainId: currentChainId, switchChain } = useAccount(); const handleChainChange = () => { const chainIdToPass = appConfig.allowedNetworks[0]; @@ -25,8 +22,7 @@ const YieldFarmChainError = ({ onClose }) => { if (currentChainId === appConfig.coreContractChain || currentChainId === appConfig.mainnetCoreContractChain) { onClose(); } - }, [currentChainId]) - + }, [currentChainId]); return ( diff --git a/src/components/channel/AddSettingModalContent.tsx b/src/components/channel/AddSettingModalContent.tsx index e6f11f10e3..0f23fb202b 100644 --- a/src/components/channel/AddSettingModalContent.tsx +++ b/src/components/channel/AddSettingModalContent.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useMemo, useState } from 'react'; +import { useMemo, useState, useRef } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -71,10 +71,14 @@ const AddSettingModalContent = ({ const [settingName, setSettingName] = useState(settingToEdit ? settingToEdit.description : ''); const [isDefault, setIsDefault] = useState( settingToEdit - ? (settingToEdit.type === 1 && settingToEdit.default) || (settingToEdit.type === 2 && settingToEdit.enabled) || (settingToEdit.type === 3 && settingToEdit.enabled) + ? (settingToEdit.type === 1 && settingToEdit.default) || + (settingToEdit.type === 2 && settingToEdit.enabled) || + (settingToEdit.type === 3 && settingToEdit.enabled) : true ); - const [isRange, setIsRange] = useState(settingToEdit && (settingToEdit.type === 2 || settingToEdit.type === 3) ? true : false); + const [isRange, setIsRange] = useState( + settingToEdit && (settingToEdit.type === 2 || settingToEdit.type === 3) ? true : false + ); const [lowerLimit, setLowerLimit] = useState( settingToEdit && (settingToEdit.type === 2 || settingToEdit.type === 3) ? settingToEdit.lowerLimit.toString() : '' ); @@ -82,7 +86,9 @@ const AddSettingModalContent = ({ settingToEdit && (settingToEdit.type === 2 || settingToEdit.type === 3) ? settingToEdit.upperLimit.toString() : '' ); const [sliderStep, setSliderStep] = useState( - settingToEdit && (settingToEdit.type === 2 || settingToEdit.type === 3) && settingToEdit.ticker ? settingToEdit.ticker.toString() : '1' + settingToEdit && (settingToEdit.type === 2 || settingToEdit.type === 3) && settingToEdit.ticker + ? settingToEdit.ticker.toString() + : '1' ); const [enableMultiRange, setEnableMultiRange] = useState( @@ -116,7 +122,7 @@ const AddSettingModalContent = ({ const handleClose = () => !isLoading && onClose(); - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => handleClose()); const onConfirm = (event) => { @@ -135,32 +141,30 @@ const AddSettingModalContent = ({ ) { const index = settingToEdit ? settingToEdit.index : Math.floor(Math.random() * 1000000); const settingData: ChannelSetting = isRange - ? enableMultiRange - ? - { - type: 3, - default: { - lower: Number(defaultStartValue), - upper: Number(defaultEndValue) - }, - enabled: isDefault, - description: settingName, - index: index, - lowerLimit: Number(lowerLimit), - upperLimit: Number(upperLimit), - ticker: Number(sliderStep), - } - : - { - type: 2, - default: Number(defaultValue), - enabled: isDefault, - description: settingName, - index: index, - lowerLimit: Number(lowerLimit), - upperLimit: Number(upperLimit), - ticker: Number(sliderStep), - } + ? enableMultiRange + ? { + type: 3, + default: { + lower: Number(defaultStartValue), + upper: Number(defaultEndValue), + }, + enabled: isDefault, + description: settingName, + index: index, + lowerLimit: Number(lowerLimit), + upperLimit: Number(upperLimit), + ticker: Number(sliderStep), + } + : { + type: 2, + default: Number(defaultValue), + enabled: isDefault, + description: settingName, + index: index, + lowerLimit: Number(lowerLimit), + upperLimit: Number(upperLimit), + ticker: Number(sliderStep), + } : { type: 1, default: isDefault, @@ -182,19 +186,16 @@ const AddSettingModalContent = ({ return ( lowerLimit !== '' && upperLimit !== '' && - (enableMultiRange ? (defaultStartValue !== '' && defaultEndValue !== '') : defaultValue !== '') && + (enableMultiRange ? defaultStartValue !== '' && defaultEndValue !== '' : defaultValue !== '') && sliderStep !== '' && Number(lowerLimit) <= Number(upperLimit) && Number(sliderStep) > 0 && Number(sliderStep) <= Number(upperLimit) - Number(lowerLimit) && - (enableMultiRange ? - (Number(defaultStartValue) >= Number(lowerLimit) && - Number(defaultEndValue) <= Number(upperLimit) && - Number(defaultEndValue) > Number(defaultStartValue)) - : - (Number(defaultValue) >= Number(lowerLimit) && - Number(defaultValue) <= Number(upperLimit)) - ) + (enableMultiRange + ? Number(defaultStartValue) >= Number(lowerLimit) && + Number(defaultEndValue) <= Number(upperLimit) && + Number(defaultEndValue) > Number(defaultStartValue) + : Number(defaultValue) >= Number(lowerLimit) && Number(defaultValue) <= Number(upperLimit)) ); }, [lowerLimit, upperLimit, defaultValue, sliderStep, defaultStartValue, defaultEndValue, enableMultiRange]); @@ -333,13 +334,19 @@ const AddSettingModalContent = ({ self="stretch" margin="12px 0px" > - setEnableMultiRange(!enableMultiRange)}/> - + setEnableMultiRange(!enableMultiRange)} + /> + User can select a range of values in the slider - {!enableMultiRange && + {!enableMultiRange && ( {errorInfo?.default} - } - {enableMultiRange && + )} + {enableMultiRange && ( - + {errorInfo?.defaultStart || errorInfo?.defaultEnd} - } + )} Preview - {!enableMultiRange && + {!enableMultiRange && ( - - setSliderPreviewVal(x)} - preview={true} - /> - + + setSliderPreviewVal(x)} + preview={true} + /> + - } + )} - {enableMultiRange && + {enableMultiRange && ( - - { - setSliderPreviewStartVal(startVal) - setSliderPreviewEndVal(endVal) - }} - preview={true} - /> - - - } + + { + setSliderPreviewStartVal(startVal); + setSliderPreviewEndVal(endVal); + }} + preview={true} + /> + + + )} )} diff --git a/src/components/channel/ChannelInfoHeader.tsx b/src/components/channel/ChannelInfoHeader.tsx index c4aec9368e..fac1ad2e04 100644 --- a/src/components/channel/ChannelInfoHeader.tsx +++ b/src/components/channel/ChannelInfoHeader.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { CSSProperties } from 'react'; +import { CSSProperties, ReactNode } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -15,7 +15,7 @@ import { device } from 'config/Globals'; interface ChannelInfoHeaderProps { title: string; description: string; - Button?: React.ReactNode; + Button?: ReactNode; style?: CSSProperties; } diff --git a/src/components/channel/ChannelInfoList.tsx b/src/components/channel/ChannelInfoList.tsx index 06360963b1..06faf47491 100644 --- a/src/components/channel/ChannelInfoList.tsx +++ b/src/components/channel/ChannelInfoList.tsx @@ -1,9 +1,8 @@ // React + Web3 Essentials -import React, { CSSProperties } from 'react'; +import { CSSProperties } from 'react'; // External Packages import styled from 'styled-components'; -import { useNavigate } from 'react-router-dom'; // Internal Compoonents import { Item } from 'primaries/SharedStyling'; diff --git a/src/components/channel/ChannelListSettings.tsx b/src/components/channel/ChannelListSettings.tsx index de14e1d57e..05515190a6 100644 --- a/src/components/channel/ChannelListSettings.tsx +++ b/src/components/channel/ChannelListSettings.tsx @@ -1,14 +1,14 @@ import ManageNotifSettingDropdown from 'components/dropdowns/ManageNotifSettingDropdown'; import { ImageV2 } from 'components/reusables/SharedStylingV2'; import { useAccount } from 'hooks'; -import React, { useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; import { getChannel, getUserSubscriptions } from 'services'; import { convertAddressToAddrCaip } from 'helpers/CaipHelper'; import { useDispatch, useSelector } from 'react-redux'; import { useNavigate } from 'react-router-dom'; import { updateBulkSubscriptions, updateBulkUserSettings } from 'redux/slices/channelSlice'; -import { cloneDeep } from 'lodash'; +import cloneDeep from 'lodash/cloneDeep'; import { AiOutlineMore } from 'react-icons/ai'; import EmptyNotificationSettings from './EmptyNotificationSettings'; import LoaderSpinner from 'primaries/LoaderSpinner'; diff --git a/src/components/channel/ChannelProfileComponent.tsx b/src/components/channel/ChannelProfileComponent.tsx index 317aa9ce53..36f2070702 100644 --- a/src/components/channel/ChannelProfileComponent.tsx +++ b/src/components/channel/ChannelProfileComponent.tsx @@ -1,8 +1,5 @@ import { ItemH } from 'components/SharedStyling'; -import React, { useEffect, useState } from 'react'; -import { useSelector } from 'react-redux'; -import ChannelsDataStore from 'singletons/ChannelsDataStore'; -import styled, { useTheme } from 'styled-components'; +import { useEffect, useState } from 'react'; import Skeleton from '@yisheng90/react-loading'; import { Image, Span } from 'primaries/SharedStyling'; import { appConfig } from 'config/index.js'; @@ -11,17 +8,15 @@ import { ButtonV2 } from 'components/reusables/SharedStylingV2'; import { IPFSGateway } from 'helpers/IpfsHelper'; import axios from 'axios'; import MetaInfoDisplayer from 'components/MetaInfoDisplayer'; -import OptinNotifSettingDropdown from 'components/dropdowns/OptinNotifSettingDropdown'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; const ChannelProfileComponent = ({ channelID, channelDetails }) => { const themes = useTheme(); - const { channels, page, ZERO_ADDRESS } = useSelector((state: any) => state.channels); - const [isLoading, setIsLoading] = useState(false); - const [channelIcon, setChannelIcon] = React.useState(''); - const [channelObjectFromHash, setChannelObjectFromHash] = React.useState({}); - const [copyText, setCopyText] = React.useState(channelDetails?.channel); - const [txInProgress, setTxInProgress] = React.useState(false); + const [isLoading] = useState(false); + const [channelIcon, setChannelIcon] = useState(''); + const [channelObjectFromHash, setChannelObjectFromHash] = useState({}); + const [copyText, setCopyText] = useState(channelDetails?.channel); useEffect(() => { // Getting Channel Icon from Channel IPFS Hash @@ -183,7 +178,7 @@ const ChannelProfileComponent = ({ channelID, channelDetails }) => { {channelDetails && channelDetails?.channel && ( Ethereum { !MaskedAliasChannels[+channelDetails?.alias_blockchain_id][channelDetails?.channel] && ( Alias Chain Logo { void; } @@ -27,7 +27,10 @@ const DelegateSettingsDropdown = ({ options, item }: DelegateSettingsDropdownPro
setIsOpen(true)} /> {isOpen && ( - setIsOpen(false)} ref={dropdownRef}> + setIsOpen(false)} + ref={dropdownRef} + > {options.map(({ icon, onClick, text }, index) => { return ( state.admin); - const { epnsWriteProvider } = useSelector((state: any) => state.contracts); const { channelSettings } = useSelector((state: any) => state.channels); const dispatch = useDispatch(); @@ -42,11 +40,11 @@ function NotificationSettings() { const onCoreNetwork = CORE_CHAIN_ID === chainId; const EDIT_SETTING_FEE = 50; - const [channelAddress, setChannelAddress] = React.useState(''); - const [settings, setSettings] = React.useState([]); - const [settingToEdit, setSettingToEdit] = React.useState(undefined); - const [isLoading, setIsLoading] = React.useState(false); - const [isLoadingSettings, setIsLoadingSettings] = React.useState(true); + const [channelAddress, setChannelAddress] = useState(''); + const [settings, setSettings] = useState([]); + const [settingToEdit, setSettingToEdit] = useState(); + const [isLoading, setIsLoading] = useState(false); + const [isLoadingSettings, setIsLoadingSettings] = useState(true); const { handleConnectWallet } = useContext(AppContext); const { userPushSDKInstance } = useSelector((state: any) => { diff --git a/src/components/chat/intro/Intro.tsx b/src/components/chat/intro/Intro.tsx index ff76c31885..a4ad61584a 100644 --- a/src/components/chat/intro/Intro.tsx +++ b/src/components/chat/intro/Intro.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages import styled, { useTheme } from 'styled-components'; diff --git a/src/components/chat/recommended/Recommended.tsx b/src/components/chat/recommended/Recommended.tsx index 35988780ab..c5470fbe07 100644 --- a/src/components/chat/recommended/Recommended.tsx +++ b/src/components/chat/recommended/Recommended.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState } from 'react'; // External Packages import { ChatPreview } from '@pushprotocol/uiweb'; diff --git a/src/components/chat/unlockProfile/UnlockProfile.tsx b/src/components/chat/unlockProfile/UnlockProfile.tsx index 6861cea8b2..b3997eb870 100644 --- a/src/components/chat/unlockProfile/UnlockProfile.tsx +++ b/src/components/chat/unlockProfile/UnlockProfile.tsx @@ -1,8 +1,7 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; // External Packages -import { useSelector } from 'react-redux'; import styled, { useTheme } from 'styled-components'; // Internal Compoonents diff --git a/src/components/chat/unlockProfile/UnlockProfileWrapper.tsx b/src/components/chat/unlockProfile/UnlockProfileWrapper.tsx index 7074c27533..6c08ab8ec6 100644 --- a/src/components/chat/unlockProfile/UnlockProfileWrapper.tsx +++ b/src/components/chat/unlockProfile/UnlockProfileWrapper.tsx @@ -1,6 +1,6 @@ import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import useModalBlur from 'hooks/useModalBlur'; -import React, { useEffect } from 'react'; +import { useEffect } from 'react'; import styled from 'styled-components'; import UnlockProfile from './UnlockProfile'; diff --git a/src/components/chat/w2wChat/Modal/Modal.tsx b/src/components/chat/w2wChat/Modal/Modal.tsx index e771e7b27a..c34c8e82e4 100644 --- a/src/components/chat/w2wChat/Modal/Modal.tsx +++ b/src/components/chat/w2wChat/Modal/Modal.tsx @@ -1,40 +1,46 @@ // React + Web3 Essentials -import React from 'react' -import ReactDOM from 'react-dom' +import { MouseEvent } from 'react'; +import { createPortal } from 'react-dom'; import styled from 'styled-components'; import { ImageV2, ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; - -const Modal = props => { +const Modal = (props) => { if (!props.showImageModal) { - return null + return null; } let time = new Date(props?.time).toLocaleTimeString('en-US'); let date = time.slice(0, -6) + time.slice(-2); // image click handler wont close the modal - const preventModalClose = (e:React.MouseEvent | React.MouseEvent)=>{ + const preventModalClose = (e: MouseEvent | MouseEvent) => { e.stopPropagation(); - } + }; - return ReactDOM.createPortal( + return createPortal( - - + {date} , document.getElementById('portal') - ) -} + ); +}; const ModalContainer = styled(ItemVV2)` position: fixed; @@ -45,20 +51,20 @@ const ModalContainer = styled(ItemVV2)` background-color: rgba(37, 37, 37, 0.5); /* z-index of header is 99999 */ z-index: 100000; -` - -const ModalContent = styled(ItemHV2)` - align-items: flex-start; - width:100vw; - height: 100vh; -` +`; const ModalClose = styled.div` display: flex; align-items: flex-start; padding-right: 20px; - margin-top: 30px; -` + margin-top: 30px; +`; + +const ModalContent = styled(ItemHV2)` + align-items: flex-start; + width: 100vw; + height: 100vh; +`; const ModalCloseIcon = styled.i` font-size: 2rem; @@ -67,10 +73,10 @@ const ModalCloseIcon = styled.i` cursor: pointer; background-color: black; padding: 10px; - &:hover{ + &:hover { transform: rotate(25deg); } -` +`; const ModalImageContainer = styled.div` width: 80%; @@ -81,14 +87,14 @@ const ModalImageContainer = styled.div` object-fit: cover; flex-direction: column-reverse; align-items: center; -` +`; const ModalImage = styled(ImageV2)` width: 100%; z-index: 3000; height: 80%; object-fit: contain; -` +`; const ModalDate = styled.span` font-size: 1.2rem; @@ -97,6 +103,6 @@ const ModalDate = styled.span` padding: 10px; margin-bottom: 10px; background-color: black; -` +`; -export default Modal +export default Modal; diff --git a/src/components/chat/w2wChat/TypeBar/Gifs/GifPicker.tsx b/src/components/chat/w2wChat/TypeBar/Gifs/GifPicker.tsx index 7d7b468a00..3d6b0e6da8 100644 --- a/src/components/chat/w2wChat/TypeBar/Gifs/GifPicker.tsx +++ b/src/components/chat/w2wChat/TypeBar/Gifs/GifPicker.tsx @@ -1,12 +1,12 @@ // React + Web3 Essentials -import React, { FC, useRef, useState } from 'react'; +import { FC, useRef, useState } from 'react'; // External Packages import styled from 'styled-components'; // Internal Components import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { ItemVV2 } from "components/reusables/SharedStylingV2"; +import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import { useFetch } from '../../stickers/useFetchHook'; import { useClickAway } from 'hooks/useClickAway'; @@ -24,7 +24,7 @@ const GifPicker: FC = ({ setIsOpened, isOpen, onSelect }) => { const [searchInputValue, setSearchInputValue] = useState(''); const timeOutRef = useRef(null); - useClickAway(timeOutRef,null,() => { + useClickAway(timeOutRef, null, () => { setIsOpened(!isOpen); }); @@ -39,51 +39,57 @@ const GifPicker: FC = ({ setIsOpened, isOpen, onSelect }) => { ); return ( - - - - - { - if (timeOutRef.current) clearTimeout(timeOutRef.current); - timeOutRef.current = setTimeout(() => { - setSearchInputValue(e.target.value); - }, 500); - }} - type="text" - placeholder="Search..." - /> - - - - - - - {loading ? ( - - - - ) : error ? ( -
-

Sorry... Giphy has limited the request

-
- ) : ( - - {(data as any).data?.map((item: any) => ( - { - onSelect(item?.images?.original?.url); - setIsOpened(!isOpen); - }} - src={item?.images?.original?.url} - alt="" - /> - ))} - - )} -
+ + + + + { + if (timeOutRef.current) clearTimeout(timeOutRef.current); + timeOutRef.current = setTimeout(() => { + setSearchInputValue(e.target.value); + }, 500); + }} + type="text" + placeholder="Search..." + /> + + + + + + + {loading ? ( + + + + ) : error ? ( +
+

Sorry... Giphy has limited the request

+
+ ) : ( + + {(data as any).data?.map((item: any) => ( + { + onSelect(item?.images?.original?.url); + setIsOpened(!isOpen); + }} + src={item?.images?.original?.url} + alt="" + /> + ))} + + )} +
); }; @@ -100,13 +106,13 @@ const OuterContainer = styled.div` right: 8rem; flex-direction: column; box-shadow: 0 3px 10px rgb(0 0 0 / 0.2); -` +`; const SearchContainer = styled.div` width: 100%; display: flex; justify-content: center; -` +`; const Search = styled.div` display: flex; @@ -117,11 +123,11 @@ const Search = styled.div` margin-top: 10px; border-radius: 20px; background-color: rgb(116, 115, 115); -` +`; const SearchInputContainer = styled.div` width: 85%; -` +`; const SearchInput = styled.input` background: transparent; @@ -132,18 +138,18 @@ const SearchInput = styled.input` &::placeholder { color: white; } -` +`; const SearchIconContainer = styled.div` width: 10%; display: flex; justify-content: center; align-items: center; -` +`; const SearchIcon = styled.i` align-items: flex-start; -` +`; const GifPickerContainer = styled.div` display: flex; @@ -169,7 +175,7 @@ const GifPickerContainer = styled.div` background: #ca599b; border-radius: 10px; } -` +`; const GifPickerImage = styled.img` flex: 1; @@ -179,6 +185,6 @@ const GifPickerImage = styled.img` padding: 5px; height: 50%; object-fit: cover; -` +`; export default GifPicker; diff --git a/src/components/chat/w2wChat/TypeBar/Typebar.tsx b/src/components/chat/w2wChat/TypeBar/Typebar.tsx index 6720da4bb0..87cdb68576 100644 --- a/src/components/chat/w2wChat/TypeBar/Typebar.tsx +++ b/src/components/chat/w2wChat/TypeBar/Typebar.tsx @@ -1,8 +1,7 @@ // React + Web3 Essentials -import React, { ChangeEvent, useContext, useEffect, useRef, useState } from 'react'; +import { ChangeEvent, useContext, useEffect, useRef, useState } from 'react'; // External Packages -import * as PushAPI from '@pushprotocol/restapi'; import Picker from 'emoji-picker-react'; import styled, { useTheme } from 'styled-components'; @@ -15,11 +14,9 @@ import { FileMessageContent } from './Files/Files'; import GifPicker from './Gifs/GifPicker'; // Internal configs -import { appConfig } from 'config/index.js'; -import { caip10ToWallet } from 'helpers/w2w'; import { MessagetypeType } from '../../../../types/chat'; import { filterXSS } from 'xss'; -import { AppContext } from 'contexts/AppContext'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; interface ITypeBar { isGroup: boolean; @@ -45,10 +42,8 @@ const Typebar = ({ isJoinGroup, setOpenSuccessSnackBar, setSnackbarText, - approveIntent, }: ITypeBar) => { - const { currentChat, activeTab, setChat }: ChatUserAppContext = useContext(Context); - const { connectedUser } = useContext(AppContext); + const { currentChat }: ChatUserAppContext = useContext(Context); const [showEmojis, setShowEmojis] = useState(false); const [isGifPickerOpened, setIsGifPickerOpened] = useState(false); const fileInputRef = useRef(null); @@ -184,7 +179,7 @@ const Typebar = ({ filter={theme.snackbarBorderIcon} > (function Alert(props, ref) { +const Alert = forwardRef(function Alert(props, ref) { return ( (function Alert(props, ); }); -const ChatBox = ({ showGroupInfoModal, triggerChatParticipant }): JSX.Element => { - const { currentChat, viewChatBox, receivedIntents, activeTab, setViewChatBox, setChat, selectedChatId }: ContextType = +const ChatBox = ({ triggerChatParticipant }): JSX.Element => { + const { currentChat, viewChatBox, receivedIntents, activeTab, setViewChatBox, selectedChatId }: ContextType = useContext(Context); const { web3NameList }: AppContextType = useContext(AppContext); const { setSelectedChatId } = useContext(Context); - const { userPushSDKInstance } = useSelector((state: any) => { - return state.user; - }); - const { account } = useAccount(); const [Loading, setLoading] = useState(true); const [imageSource, setImageSource] = useState(''); const [openReprovalSnackbar, setOpenSuccessSnackBar] = useState(false); - const [SnackbarText, setSnackbarText] = useState(''); + const [SnackbarText] = useState(''); const [isGroup, setIsGroup] = useState(false); const [showGroupInfo, setShowGroupInfo] = useState(false); const groupInfoRef = useRef(null); @@ -140,7 +129,7 @@ const ChatBox = ({ showGroupInfoModal, triggerChatParticipant }): JSX.Element => } return chatId; }; - const handleCloseSuccessSnackbar = (event?: React.SyntheticEvent | Event, reason?: string): void => { + const handleCloseSuccessSnackbar = (event?: SyntheticEvent | Event, reason?: string): void => { if (reason === 'clickaway') { return; } @@ -152,7 +141,7 @@ const ChatBox = ({ showGroupInfoModal, triggerChatParticipant }): JSX.Element => return produce(oldData, (draft) => { draft.local.address = account; draft.incoming[0].address = caip10ToWallet(currentChat.wallets.toString()); - draft.incoming[0].status = PushAPI.VideoCallStatus.INITIALIZED; + draft.incoming[0].status = VideoCallStatus.INITIALIZED; draft.meta.chatId = currentChat.chatId; }); }); @@ -265,11 +254,6 @@ const ChatBox = ({ showGroupInfoModal, triggerChatParticipant }): JSX.Element => ); }; -const SpinnerWrapper = styled.div` - width: 100%; - margin-top: 20px; - height: ${(props) => props.height || '90px'}; -`; const MessageInputWrapper = styled.div` width: 98%; display: flex; @@ -278,19 +262,6 @@ const MessageInputWrapper = styled.div` bottom: 8px; `; -const ChatContainer = styled.div` - overflow-x: hidden; - align-items: unset; - display: block; - justify-content: flex-start; - position: absolute; - top: 20px; - bottom: 0px; - left: 0; - right: 0; - margin: 0; - width: 100%; -`; const MessageContainer = styled(ItemVV2)` align-items: center; display: flex; @@ -319,29 +290,6 @@ const MessageContainer = styled(ItemVV2)` } `; -const GroupInfo = styled(ItemHV2)` - position: absolute; - top: 32px; - right: 15px; - width: 200px; - border: 1px solid ${(props) => props.theme.default.border}; - background-color: ${(props) => props.theme.default.bg}; - border-radius: 12px; - justify-content: flex-start; - gap: 9px; - padding: 8px; -`; - -const MoreOptions = styled.div` - position: relative; - height: 100%; - max-width: 32px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; -`; - const Container = styled(Content)` box-sizing: border-box; background: ${(props) => props.theme.chat.chatboxBg || 'transparent'}; diff --git a/src/components/chat/w2wChat/chatQR/chatQR.tsx b/src/components/chat/w2wChat/chatQR/chatQR.tsx index cdfb39e86c..1d3ead81f4 100644 --- a/src/components/chat/w2wChat/chatQR/chatQR.tsx +++ b/src/components/chat/w2wChat/chatQR/chatQR.tsx @@ -1,12 +1,11 @@ -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import usePeer from 'hooks/usePeer'; -import { useSelector } from 'react-redux'; import { QRCodeCanvas } from 'qrcode.react'; import CryptoHelper from 'helpers/CryptoHelper'; import LoaderSpinner, { LOADER_OVERLAY, LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import styled, { useTheme } from 'styled-components'; -import { AiOutlineClose, AiOutlineQrcode } from 'react-icons/ai'; -import { H2V2, ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; +import { AiOutlineClose } from 'react-icons/ai'; +import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; import GLOBALS, { device } from 'config/Globals'; import BlurBG from 'components/reusables/blurs/BlurBG'; import chatBoxImage from '../../../../assets/chat/chatBox.svg?react'; diff --git a/src/components/chat/w2wChat/chatQR/mobileView.tsx b/src/components/chat/w2wChat/chatQR/mobileView.tsx index 763e03803d..e132ca0081 100644 --- a/src/components/chat/w2wChat/chatQR/mobileView.tsx +++ b/src/components/chat/w2wChat/chatQR/mobileView.tsx @@ -2,14 +2,14 @@ import BlurBG from 'components/reusables/blurs/BlurBG'; import { LOADER_OVERLAY, LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import GLOBALS, { device } from 'config/Globals'; -import React, { useContext } from 'react'; +import { useContext } from 'react'; import { AiOutlineClose, AiOutlineMore } from 'react-icons/ai'; import styled, { useTheme } from 'styled-components'; import backgroundImage from '../../../../assets/chat/QRBackground.svg?react'; import { AppContext } from 'contexts/AppContext'; -const MobileView = ({ type = LOADER_TYPE.STANDALONE, overlay = LOADER_OVERLAY.NORMAL, blur = 0, width = 'auto' }) => { - const { pgpPvtKey, connectedPeerID, displayQR, setDisplayQR, createUserIfNecessary } = useContext(AppContext); +const MobileView = ({ type = LOADER_TYPE.STANDALONE, overlay = LOADER_OVERLAY.NORMAL, blur = 0 }) => { + const { displayQR, setDisplayQR } = useContext(AppContext); const theme = useTheme(); return ( diff --git a/src/components/chat/w2wChat/chats/Chats.tsx b/src/components/chat/w2wChat/chats/Chats.tsx index c07ff7b430..10ef6a6dbf 100644 --- a/src/components/chat/w2wChat/chats/Chats.tsx +++ b/src/components/chat/w2wChat/chats/Chats.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { ethers } from 'ethers'; // External Packages @@ -7,7 +7,7 @@ import { TwitterTweetEmbed } from 'react-twitter-embed'; import styled from 'styled-components'; // Internal Components -import * as PushAPI from '@pushprotocol/restapi'; +import { user as pushUser } from '@pushprotocol/restapi'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { ImageV2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import { shortenText } from 'helpers/UtilityHelper'; @@ -63,7 +63,7 @@ export default function Chats({ msg, caip10, messageBeingSent, ApproveIntent, is setProfilePicture(member.image); } else { // console.log(msg) - let user = await PushAPI.user.get({ account: msg.fromCAIP10, env: appConfig.appEnv }); + let user = await pushUser.get({ account: msg.fromCAIP10, env: appConfig.appEnv }); setProfilePicture(user.profilePicture); } }; diff --git a/src/components/chat/w2wChat/groupChat/createGroup/AddWalletContent.tsx b/src/components/chat/w2wChat/groupChat/createGroup/AddWalletContent.tsx index 831b1e1931..154b368ca0 100644 --- a/src/components/chat/w2wChat/groupChat/createGroup/AddWalletContent.tsx +++ b/src/components/chat/w2wChat/groupChat/createGroup/AddWalletContent.tsx @@ -1,13 +1,13 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useContext } from 'react'; +import { useState, useEffect } from 'react'; // External Packages import { MdError } from 'react-icons/md'; import styled, { ThemeProvider, useTheme } from 'styled-components'; // Internal Components -import * as PushAPI from '@pushprotocol/restapi'; +import { user as pushUser } from '@pushprotocol/restapi'; import AddDark from 'assets/chat/group-chat/adddark.svg?react'; import AddLight from 'assets/chat/group-chat/addlight.svg?react'; import Clear from 'assets/chat/group-chat/close.svg?react'; @@ -24,9 +24,8 @@ import ModalConfirmButton from 'primaries/SharedModalComponents/ModalConfirmButt // Internal configs import { appConfig } from 'config/index.js'; import { device } from 'config/Globals'; -import { addWalletValidation, MemberAlreadyPresent } from 'helpers/w2w/groupChat'; -import { Context } from 'modules/chat/ChatModule'; -import { AppContext, User } from '../../../../../types/chat'; +import { addWalletValidation } from 'helpers/w2w/groupChat'; +import { User } from '../../../../../types/chat'; import GroupModalHeader from './GroupModalHeader'; import MemberListContainer from './MemberListContainer'; import { useAccount } from 'hooks'; @@ -41,18 +40,17 @@ export const AddWalletContent = ({ title, groupMembers, }) => { - const { currentChat }: AppContext = useContext(Context); - const [searchedUser, setSearchedUser] = React.useState(''); + const [searchedUser, setSearchedUser] = useState(''); const { account } = useAccount(); - const [filteredUserData, setFilteredUserData] = React.useState(null); - const [isInValidAddress, setIsInvalidAddress] = React.useState(false); - const [isLoadingSearch, setIsLoadingSearch] = React.useState(false); + const [filteredUserData, setFilteredUserData] = useState(null); + const [isInValidAddress, setIsInvalidAddress] = useState(false); + const [isLoadingSearch, setIsLoadingSearch] = useState(false); const provider = new ethers.providers.InfuraProvider(appConfig.coreContractChain, appConfig.infuraAPIKey); const theme = useTheme(); const searchFeedToast = useToast(); - React.useEffect(() => { + useEffect(() => { if (isInValidAddress) { searchFeedToast.showMessageToast({ toastTitle: 'Error', @@ -108,7 +106,7 @@ export const AddWalletContent = ({ let filteredData: User; if (userSearchData.length) { - filteredData = await PushAPI.user.get({ + filteredData = await pushUser.get({ account: caip10, env: appConfig.appEnv, }); diff --git a/src/components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent.tsx b/src/components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent.tsx index 6b8464a136..8c62f0c38c 100644 --- a/src/components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent.tsx +++ b/src/components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent.tsx @@ -1,130 +1,24 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useRef } from 'react'; // External Packages import styled, { ThemeProvider, useTheme } from 'styled-components'; import { useClickAway } from 'react-use'; -import * as PushAPI from '@pushprotocol/restapi'; // Internal Components import { ModalInnerComponentType } from 'hooks/useModalBlur'; -import { appConfig } from '../../../../../config/index.js'; -import useToast from 'hooks/useToast'; -import { MdCheckCircle, MdError } from 'react-icons/md'; -import { ChatUserAppContext, Feeds } from 'types/chat'; -import { Context } from 'modules/chat/ChatModule'; -import { fetchInbox } from 'helpers/w2w/user'; -import { profilePicture } from 'config/W2WConfig'; -import { useAccount, useDeviceWidthCheck } from 'hooks'; import { device } from 'config/Globals'; import { CreateGroupModal } from '@pushprotocol/uiweb'; -import { AppContext } from 'contexts/AppContext'; -export const CreateGroupModalContent = ({ onClose, onConfirm: createGroup, toastObject }: ModalInnerComponentType) => { - const [createGroupState, setCreateGroupState] = React.useState(1); - const { setInbox }: ChatUserAppContext = useContext(Context); - const [groupNameData, setGroupNameData] = React.useState(''); - const [groupDescriptionData, setGroupDescriptionData] = React.useState(''); - const [groupImageData, setGroupImageData] = React.useState(null); - const [groupTypeObject, setGroupTypeObject] = React.useState(); - const [isLoading, setIsLoading] = React.useState(false); - const [memberList, setMemberList] = React.useState([]); - const { connectedUser, setConnectedUser, createUserIfNecessary } = useContext(AppContext); - const { provider } = useAccount(); +export const CreateGroupModalContent = ({ onClose }: ModalInnerComponentType) => { const themes = useTheme(); - const createGroupToast = useToast(); - const isMobile = useDeviceWidthCheck(600); - - const handlePrevious = () => { - setCreateGroupState(1); - }; const handleClose = () => onClose(); // to close the modal upon a click on backdrop - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => handleClose()); - const handleCreateGroup = async (): Promise => { - if (memberList.length >= 2) { - setIsLoading(true); - try { - const memberWalletList = memberList.filter((member) => !member.isAdmin).map((member) => member.wallets); - const adminWalletList = memberList.filter((member) => member.isAdmin).map((member) => member.wallets); - let createdUser; - if (!connectedUser.publicKey) { - createdUser = await createUserIfNecessary(); - } - const signer = await provider.getSigner(); - const createGroupRes = await PushAPI.chat.createGroup({ - groupName: groupNameData, - groupDescription: groupDescriptionData, - members: memberWalletList, - groupImage: groupImageData ?? profilePicture, - admins: adminWalletList, - isPublic: groupTypeObject.groupTypeData == 'public' ? true : false, - signer: signer!, - pgpPrivateKey: connectedUser?.privateKey || createdUser?.privateKey, - env: appConfig.appEnv, - }); - if (typeof createGroupRes !== 'string') { - const inboxes: Feeds[] = await fetchInbox({ connectedUser }); - setInbox(inboxes); - createGroupToast.showMessageToast({ - toastTitle: 'Success', - toastMessage: 'Group created successfully', - toastType: 'SUCCESS', - getToastIcon: (size) => ( - - ), - }); - handleClose(); - } else { - createGroupToast.showMessageToast({ - toastTitle: 'Error', - toastMessage: createGroupRes, - toastType: 'ERROR', - getToastIcon: (size) => ( - - ), - }); - } - } catch (e) { - console.error('Error in creating group', e.message); - createGroupToast.showMessageToast({ - toastTitle: 'Error', - toastMessage: e.message, - toastType: 'ERROR', - getToastIcon: (size) => ( - - ), - }); - } - setTimeout(() => { - setIsLoading(false); - }, 2000); - } else { - createGroupToast.showMessageToast({ - toastTitle: 'Error', - toastMessage: 'Need atleast 3 members to create a group! Please retry!', - toastType: 'ERROR', - getToastIcon: (size) => ( - - ), - }); - } - }; + return ( diff --git a/src/components/chat/w2wChat/groupChat/createGroup/GroupDetailsContent.tsx b/src/components/chat/w2wChat/groupChat/createGroup/GroupDetailsContent.tsx index 76e099aa73..21ed7b166e 100644 --- a/src/components/chat/w2wChat/groupChat/createGroup/GroupDetailsContent.tsx +++ b/src/components/chat/w2wChat/groupChat/createGroup/GroupDetailsContent.tsx @@ -1,9 +1,9 @@ // React + Web3 Essentials -import React from 'react'; +import { useState, useRef } from 'react'; // External Packages import styled, { ThemeProvider, useTheme } from 'styled-components'; -import * as PushAPI from '@pushprotocol/restapi'; +import { chat as pushChat } from '@pushprotocol/restapi'; import { MdError } from 'react-icons/md'; // Internal Components @@ -33,11 +33,11 @@ export const GroupDetailsContent = ({ handlePrevious, handleClose, }) => { - const [imageSrc, setImageSrc] = React.useState(); - const [isImageUploaded, setIsImageUploaded] = React.useState(false); - const [isLoading, setIsLoading] = React.useState(false); - const fileUploadInputRef = React.useRef(); - const [errorInfo, setErrorInfo] = React.useState<{ name: string; description: string }>({ + const [imageSrc, setImageSrc] = useState(); + const [isImageUploaded, setIsImageUploaded] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const fileUploadInputRef = useRef(); + const [errorInfo, setErrorInfo] = useState<{ name: string; description: string }>({ name: '', description: '', }); @@ -79,7 +79,7 @@ export const GroupDetailsContent = ({ const handleValidation = async () => { try { - const getGroupResponse = await PushAPI.chat.getGroupByName({ groupName: groupNameData, env: appConfig.appEnv }); + const getGroupResponse = await pushChat.getGroupByName({ groupName: groupNameData, env: appConfig.appEnv }); if (typeof getGroupResponse !== 'string') { setErrorInfo((x) => ({ ...x, diff --git a/src/components/chat/w2wChat/groupChat/createGroup/MemberListContainer.tsx b/src/components/chat/w2wChat/groupChat/createGroup/MemberListContainer.tsx index 70574c2c10..088dbcfbf3 100644 --- a/src/components/chat/w2wChat/groupChat/createGroup/MemberListContainer.tsx +++ b/src/components/chat/w2wChat/groupChat/createGroup/MemberListContainer.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState, useRef } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -34,8 +34,8 @@ const MemberListContainer = ({ darkIcon, memberList, }: MemberListContainerType) => { - const [selectedWallet, setSelectedWallet] = React.useState(null); - const dropdownRef = React.useRef(null); + const [selectedWallet, setSelectedWallet] = useState(null); + const dropdownRef = useRef(null); const theme = useTheme(); const [dropdownHeight, setDropdownHeight] = useState(0); diff --git a/src/components/chat/w2wChat/groupChat/groupInfo/PendingMembers.tsx b/src/components/chat/w2wChat/groupChat/groupInfo/PendingMembers.tsx index 4f44743d6e..21921b28d7 100644 --- a/src/components/chat/w2wChat/groupChat/groupInfo/PendingMembers.tsx +++ b/src/components/chat/w2wChat/groupChat/groupInfo/PendingMembers.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useContext } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -9,6 +9,7 @@ import { ImageV2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedSt import { shortenText } from 'helpers/UtilityHelper'; import { Context } from 'modules/chat/ChatModule'; import { AppContext } from 'types/chat'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; export const PendingMembers = ({ setshowPendingRequests, showPendingRequests }) => { const { currentChat }: AppContext = useContext(Context); @@ -49,7 +50,7 @@ export const PendingMembers = ({ setshowPendingRequests, showPendingRequests }) arrow diff --git a/src/components/chat/w2wChat/groupChat/groupInfo/ProfileCard.tsx b/src/components/chat/w2wChat/groupChat/groupInfo/ProfileCard.tsx index 84f919db6a..cdf5aeed1d 100644 --- a/src/components/chat/w2wChat/groupChat/groupInfo/ProfileCard.tsx +++ b/src/components/chat/w2wChat/groupChat/groupInfo/ProfileCard.tsx @@ -1,9 +1,8 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; -import { ethers } from 'ethers'; // Internal Components import MoreDark from 'assets/chat/group-chat/moredark.svg?react'; diff --git a/src/components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent.tsx b/src/components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent.tsx index 5ba327c42b..0be235cccb 100644 --- a/src/components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent.tsx +++ b/src/components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent.tsx @@ -1,5 +1,4 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { ethers } from 'ethers'; +import { useContext, useState, useRef } from 'react'; // External Packages import styled, { ThemeProvider, useTheme } from 'styled-components'; @@ -45,12 +44,12 @@ export const GroupInfoModalContent = ({ onClose }: ModalInnerComponentType) => { const [copyText, setCopyText] = useState(''); const { account } = useAccount(); const groupInfoToast = useToast(); - const [selectedMemeberAddress, setSelectedMemeberAddress] = React.useState(null); - const [showAddMoreWalletModal, setShowAddMoreWalletModal] = React.useState(false); - // const [memberList, setMemberList] = React.useState(currentChat?.groupInformation?.groupMembers); - const [showPendingRequests, setshowPendingRequests] = React.useState(false); - const [memberList, setMemberList] = React.useState([]); - const [isLoading, setIsLoading] = React.useState(false); + const [selectedMemeberAddress, setSelectedMemeberAddress] = useState(null); + const [showAddMoreWalletModal, setShowAddMoreWalletModal] = useState(false); + // const [memberList, setMemberList] = useState(currentChat?.groupInformation?.groupMembers); + const [showPendingRequests, setshowPendingRequests] = useState(false); + const [memberList, setMemberList] = useState([]); + const [isLoading, setIsLoading] = useState(false); const groupCreator = currentChat?.groupInformation?.groupCreator; const membersExceptGroupCreator = currentChat?.groupInformation?.members.filter( (x) => x.wallet?.toLowerCase() !== groupCreator?.toLowerCase() @@ -60,7 +59,7 @@ export const GroupInfoModalContent = ({ onClose }: ModalInnerComponentType) => { const isAccountOwnerAdmin = currentChat?.groupInformation?.members?.some( (member) => caip10ToWallet(member?.wallet)?.toLowerCase() === account?.toLowerCase() && member?.isAdmin ); - const dropdownRef = React.useRef(null); + const dropdownRef = useRef(null); useClickAway(dropdownRef, () => setSelectedMemeberAddress(null)); const theme = useTheme(); const isMobile = useDeviceWidthCheck(600); @@ -309,7 +308,7 @@ export const GroupInfoModalContent = ({ onClose }: ModalInnerComponentType) => { }; // to close the modal upon a click on backdrop - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => handleClose()); const handlePrevious = () => { diff --git a/src/components/chat/w2wChat/intentFeed/IntentFeed.tsx b/src/components/chat/w2wChat/intentFeed/IntentFeed.tsx index 1a99376060..0ab9aa255a 100644 --- a/src/components/chat/w2wChat/intentFeed/IntentFeed.tsx +++ b/src/components/chat/w2wChat/intentFeed/IntentFeed.tsx @@ -1,7 +1,6 @@ // React + Web3 Essentials // @ts-ignore -import React, { useContext, useState } from 'react'; -import { ethers } from 'ethers'; +import { useContext, useState } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; diff --git a/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx b/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx index 05031d2162..b164b2efac 100644 --- a/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx +++ b/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; // External Packages import { MdError } from 'react-icons/md'; @@ -10,7 +10,7 @@ import { Waypoint } from 'react-waypoint'; import ChatSnap from 'components/chat/chatsnap/ChatSnap'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; -import { decryptFeeds, walletToCAIP10 } from 'helpers/w2w'; +import { walletToCAIP10 } from 'helpers/w2w'; import { fetchInbox, getDefaultGroupFeed } from 'helpers/w2w/user'; import useToast from 'hooks/useToast'; import { Context } from 'modules/chat/ChatModule'; @@ -19,6 +19,7 @@ import { checkIfGroup, getChatsnapMessage, getGroupImage, getName } from '../../ import { getDefaultFeed } from '../../../../helpers/w2w/user'; import { useAccount } from 'hooks'; import { AppContext } from 'contexts/AppContext'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; // Internal Configs @@ -32,52 +33,68 @@ interface MessageFeedPropsI { const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { const theme = useTheme(); - const { setChat, setInbox, currentChat, receivedIntents, setActiveTab, activeTab, inbox, setHasUserBeenSearched, filteredUserData, setFilteredUserData }: ChatUserAppContext = useContext(Context); + const { + setChat, + setInbox, + currentChat, + receivedIntents, + setActiveTab, + activeTab, + inbox, + setHasUserBeenSearched, + filteredUserData, + setFilteredUserData, + }: ChatUserAppContext = useContext(Context); const { connectedUser } = useContext(AppContext); const [feeds, setFeeds] = useState([]); const [messagesLoading, setMessagesLoading] = useState(true); - const [stopApi, setStopApi] = useState(true); const [selectedChatSnap, setSelectedChatSnap] = useState(); const [page, setPage] = useState(1); - const { chainId, account } = useAccount(); + const { account } = useAccount(); const [showError, setShowError] = useState(false); - const [bgUpdateLoading,setBgUpdateLoading]=useState(false); - const [limit, setLimit] = React.useState(10); - const [isFetchingDone,setIsFetchingDone]=useState(false) + const [bgUpdateLoading, setBgUpdateLoading] = useState(false); + const [limit] = React.useState(10); + const [isFetchingDone, setIsFetchingDone] = useState(false); const messageFeedToast = useToast(); - const onFeedClick = (feed:Feeds,i:number):void => { - if((receivedIntents?.filter((userExist) => userExist.did && props?.filteredUserData[0]?.did && userExist.did?.toLowerCase() === props?.filteredUserData[0]?.did?.toLowerCase())) -.length) - { + const onFeedClick = (feed: Feeds, i: number): void => { + if ( + (receivedIntents?.filter( + (userExist) => + userExist.did && + props?.filteredUserData[0]?.did && + userExist.did?.toLowerCase() === props?.filteredUserData[0]?.did?.toLowerCase() + )).length + ) { setActiveTab(1); } setChat(feed); setSelectedChatSnap(i); setHasUserBeenSearched(false); - filteredUserData.length>0 ? setFilteredUserData([]):null; - } - - const fetchInboxApi = async ({limit, page}): Promise => { + filteredUserData.length > 0 ? setFilteredUserData([]) : null; + }; + + const fetchInboxApi = async ({ limit, page }): Promise => { try { - const inboxes:Feeds[] = await fetchInbox({connectedUser, limit, page}); - if(inboxes?.length>10 && inboxes?.length===feeds?.length){ + const inboxes: Feeds[] = await fetchInbox({ connectedUser, limit, page }); + if (inboxes?.length > 10 && inboxes?.length === feeds?.length) { setIsFetchingDone(true); - } - else if(inboxes.length<10){ + } else if (inboxes.length < 10) { setIsFetchingDone(true); } - if (JSON.stringify(inbox) !== JSON.stringify(inboxes)){ + if (JSON.stringify(inbox) !== JSON.stringify(inboxes)) { setInbox(inboxes); - if(checkIfGroup(currentChat)){ - - if(currentChat && inboxes[selectedChatSnap] && currentChat?.groupInformation?.members?.length !== inboxes[selectedChatSnap]?.groupInformation?.members?.length) - { + if (checkIfGroup(currentChat)) { + if ( + currentChat && + inboxes[selectedChatSnap] && + currentChat?.groupInformation?.members?.length !== + inboxes[selectedChatSnap]?.groupInformation?.members?.length + ) { setChat(inboxes[selectedChatSnap]); } - } } setShowError(false); @@ -97,31 +114,29 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { }); } setShowError(true); - } - finally{ + } finally { setMessagesLoading(false); } }; - const updateInbox = async ({chatLimit, page}:{chatLimit?:number, page?: number}): Promise => { - await fetchInboxApi({limit: chatLimit,page}); + const updateInbox = async ({ chatLimit, page }: { chatLimit?: number; page?: number }): Promise => { + await fetchInboxApi({ limit: chatLimit, page }); }; useEffect(() => { - setFeeds(prevInbox=>[...prevInbox,...inbox]); - },[inbox]); + setFeeds((prevInbox) => [...prevInbox, ...inbox]); + }, [inbox]); useEffect(() => { - if(feeds && feeds.length > 0 && props.automatedSearch) { + if (feeds && feeds.length > 0 && props.automatedSearch) { onFeedClick(feeds[0], 0); setActiveTab(0); } }, [feeds]); useEffect(() => { - if(!props.hasUserBeenSearched) - updateInbox({chatLimit:limit}); - },[]); + if (!props.hasUserBeenSearched) updateInbox({ chatLimit: limit }); + }, []); useEffect(() => { if (!props.hasUserBeenSearched) { @@ -147,15 +162,17 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { // When searching as of now the search will always result in only one user being displayed. // There is no multiple users appearing on the sidebar when a search is done. The wallets must match exactly. const searchedData: User | IGroup = props.filteredUserData[0]; - let feed: Feeds,isNew:boolean; - if((searchedData as IGroup)?.groupName) { - ({feed,isNew} = await getDefaultGroupFeed({groupData:searchedData as IGroup,inbox,intents:receivedIntents})); - } - else { - feed = await getDefaultFeed({userData:searchedData as User,inbox,intents:receivedIntents}); + let feed: Feeds, isNew: boolean; + if ((searchedData as IGroup)?.groupName) { + ({ feed, isNew } = await getDefaultGroupFeed({ + groupData: searchedData as IGroup, + inbox, + intents: receivedIntents, + })); + } else { + feed = await getDefaultFeed({ userData: searchedData as User, inbox, intents: receivedIntents }); } - if(isNew && !feed?.groupInformation?.isPublic) - { + if (isNew && !feed?.groupInformation?.isPublic) { messageFeedToast.showMessageToast({ toastTitle: 'Error', toastMessage: 'Cannot search for private groups now', @@ -169,13 +186,10 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { }); setFilteredUserData([]); setActiveTab(0); - } - else{ + } else { setFeeds([feed]); } - } - } else { if (props.isInvalidAddress) { messageFeedToast.showMessageToast({ @@ -194,8 +208,7 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { // reset if active tab is 4 if (activeTab == 4) { setActiveTab(0); - } - else { + } else { setFeeds([]); } } @@ -204,16 +217,16 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { searchFn(); } - return ()=>{ + return () => { setMessagesLoading(false); - } + }; }, [props.hasUserBeenSearched, props.filteredUserData]); const handlePagination = async () => { - setPage(prevPage=>prevPage+1); + setPage((prevPage) => prevPage + 1); // setLimit(prevLimit=>prevLimit+10); setBgUpdateLoading(true); - await updateInbox({page}); + await updateInbox({ page }); setBgUpdateLoading(false); }; @@ -246,9 +259,10 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { /> ) : ( <> - {!feeds?.length && !messagesLoading && activeTab!==3 && activeTab!==4 ? ( + {!feeds?.length && !messagesLoading && activeTab !== 3 && activeTab !== 4 ? ( - Start a new chat by using the + button + Start a new chat by using the + button{' '} + ) : ( feeds.map((feed: Feeds, i) => ( @@ -258,32 +272,28 @@ const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { key={`${feed.threadhash}${i}`} > {showWayPoint(i) && !isFetchingDone && } - { - feed?.groupInformation?.groupType !== 'spaces' && ( - onFeedClick(feed,i)} + onClick={(): void => onFeedClick(feed, i)} /> - ) - } + )} )) - ) } + )} )} - { - bgUpdateLoading && ( + {bgUpdateLoading && ( - ) - } + )} ); diff --git a/src/components/chat/w2wChat/profile/Profile.tsx b/src/components/chat/w2wChat/profile/Profile.tsx index 2968a1b07b..31a7d01251 100644 --- a/src/components/chat/w2wChat/profile/Profile.tsx +++ b/src/components/chat/w2wChat/profile/Profile.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useContext } from 'react'; // External packages import Stack from '@mui/material/Stack'; @@ -15,16 +15,16 @@ import { AppContext } from 'contexts/AppContext'; import { AppContextType } from 'types/context'; import { useAccount } from 'hooks'; -const Profile = ({ setActiveTab,showQR,setShowQR }: any): JSX.Element => { - const { web3NameList,connectedUser }:AppContextType=useContext(AppContext); - const { account } = useAccount() +const Profile = ({ setActiveTab, showQR, setShowQR }: any): JSX.Element => { + const { web3NameList, connectedUser }: AppContextType = useContext(AppContext); + const { account } = useAccount(); // theme context const theme = useTheme(); // resolve web3 name useResolveWeb3Name(account); - + const ensName = web3NameList[account]; return ( @@ -52,16 +52,15 @@ const Profile = ({ setActiveTab,showQR,setShowQR }: any): JSX.Element => { size="16px" weight="400" > - {ensName ? ensName : shortenText(account,8,7)} + {ensName ? ensName : shortenText(account, 8, 7)} {/* */} - setShowQR(!showQR)}> - + setShowQR(!showQR)}> + - {/* */} @@ -83,9 +82,7 @@ const DisplayText = styled(Typography)` } `; -const SettingsWrapper = styled.span` -`; - +const SettingsWrapper = styled.span``; const Settings = styled(AiOutlineMore)` position: relative; diff --git a/src/components/chat/w2wChat/searchBar/SearchBar.tsx b/src/components/chat/w2wChat/searchBar/SearchBar.tsx index 94c75180fb..9733d6e483 100644 --- a/src/components/chat/w2wChat/searchBar/SearchBar.tsx +++ b/src/components/chat/w2wChat/searchBar/SearchBar.tsx @@ -1,6 +1,6 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useRef, useState } from 'react'; +import { useContext, useEffect, ChangeEvent, useState } from 'react'; // External Packages import CloseIcon from '@material-ui/icons/Close'; @@ -47,7 +47,7 @@ const SearchBar = ({ autofilled, searchedUser, setSearchedUser }) => { } }, [userShouldBeSearched, autofilled]); - const onChangeSearchBox = async (event: React.ChangeEvent): Promise => { + const onChangeSearchBox = async (event: ChangeEvent): Promise => { let searchAddress = event.target.value; if (searchAddress === '') { diff --git a/src/components/chat/welcome/Welcome.tsx b/src/components/chat/welcome/Welcome.tsx index 5985fc8c15..52e9b97435 100644 --- a/src/components/chat/welcome/Welcome.tsx +++ b/src/components/chat/welcome/Welcome.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; // External Packages import styled from 'styled-components'; diff --git a/src/components/dropdowns/DropdownBtnHandler.tsx b/src/components/dropdowns/DropdownBtnHandler.tsx index b8143057f9..c3e8dbab85 100644 --- a/src/components/dropdowns/DropdownBtnHandler.tsx +++ b/src/components/dropdowns/DropdownBtnHandler.tsx @@ -1,4 +1,4 @@ -import React, { useRef } from 'react'; +import { useRef, ReactNode, FC } from 'react'; // External Packages import styled, { css } from 'styled-components'; @@ -8,8 +8,8 @@ import { useClickAway } from 'hooks/useClickAway'; import { ItemHV2 } from 'components/reusables/SharedStylingV2'; interface DropdownBtnHandlerProps { - children: React.ReactNode; - renderDropdownContainer: React.ReactNode; + children: ReactNode; + renderDropdownContainer: ReactNode; showDropdown: boolean; toggleDropdown: () => void; closeDropdown: () => void; @@ -17,14 +17,14 @@ interface DropdownBtnHandlerProps { centerOnMobile: boolean; } -export const DropdownBtnHandler: React.FC = ({ - children, - renderDropdownContainer, - showDropdown, - toggleDropdown, - closeDropdown, - containerPadding, - centerOnMobile, +export const DropdownBtnHandler: FC = ({ + children, + renderDropdownContainer, + showDropdown, + toggleDropdown, + closeDropdown, + containerPadding, + centerOnMobile, }) => { const dropdownRef = useRef(null); const renderDropdownContainerRef = useRef(null); @@ -32,46 +32,57 @@ export const DropdownBtnHandler: React.FC = ({ useClickAway(dropdownRef, renderDropdownContainerRef, closeDropdown); return ( - - {children} - {showDropdown && ( - -
e.stopPropagation()}> - {renderDropdownContainer} -
-
- )} -
+ + {children} + {showDropdown && ( + +
e.stopPropagation()} + > + {renderDropdownContainer} +
+
+ )} +
); }; const Container = styled.span` - position:relative; + position: relative; margin: 0; padding: 0; background: none; border: 0; outline: 0; -` +`; -const DropdownContainer = styled(ItemHV2)<{ containerPadding?: string, centerOnMobile: boolean }>` - background: ${(props)=>props.theme.settingsModalBackground}; - border:1px solid; - border-color:${(props)=>props.theme.settingsModalBorderColor}; - border-radius: 8px; - box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.05); - align-items:flex-start; - padding: ${props => props.containerPadding ? props.containerPadding : '7px 14px'}; - position:absolute; - top:0rem; - z-index:10; - right:-0.5rem; +const DropdownContainer = styled(ItemHV2)<{ containerPadding?: string; centerOnMobile: boolean }>` + background: ${(props) => props.theme.settingsModalBackground}; + border: 1px solid; + border-color: ${(props) => props.theme.settingsModalBorderColor}; + border-radius: 8px; + box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.05); + align-items: flex-start; + padding: ${(props) => (props.containerPadding ? props.containerPadding : '7px 14px')}; + position: absolute; + top: 0rem; + z-index: 10; + right: -0.5rem; - @media (max-width:768px){ - ${(props) => props.centerOnMobile && css` - left: 50%; - transform: translateX(-50%); - `} - width: fit-content; - } + @media (max-width: 768px) { + ${(props) => + props.centerOnMobile && + css` + left: 50%; + transform: translateX(-50%); + `} + width: fit-content; + } `; diff --git a/src/components/dropdowns/ManageNotifSettingDropdown.tsx b/src/components/dropdowns/ManageNotifSettingDropdown.tsx index 73a3e026e2..14bee0f8b0 100644 --- a/src/components/dropdowns/ManageNotifSettingDropdown.tsx +++ b/src/components/dropdowns/ManageNotifSettingDropdown.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useMemo, useState } from 'react'; +import { ReactNode, Dispatch, SetStateAction, FC, useMemo, useState } from 'react'; // External Packages import styled, { css, useTheme } from 'styled-components'; @@ -13,7 +13,6 @@ import UpdateNotifSettingDropdown from './UpdateNotifSettingDropdown'; // Internal Configs import { ImageV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import { useAccount } from 'hooks'; -import { AppContext } from 'contexts/AppContext'; import useToast from 'hooks/useToast'; import { appConfig } from 'config/index.js'; import { MdCheckCircle, MdError } from 'react-icons/md'; @@ -23,7 +22,7 @@ import { ChannelSetting, UserSetting } from 'helpers/channel/types'; import { removeUserSetting, updateSubscriptionStatus } from 'redux/slices/channelSlice'; interface ManageNotifSettingDropdownProps { - children: React.ReactNode; + children: ReactNode; centerOnMobile: boolean; channelDetail: any; userSetting?: UserSetting[]; @@ -35,11 +34,11 @@ interface ManageNotifSettingDropdownContainerProps { userSetting?: UserSetting[]; channelSetting?: ChannelSetting[]; channelDetail: any; - optOutHandler: (options: { setLoading?: React.Dispatch> }) => Promise; + optOutHandler: (options: { setLoading?: Dispatch> }) => Promise; closeDropdown: () => void; } -const ManageNotifSettingDropdownContainer: React.FC = ({ +const ManageNotifSettingDropdownContainer: FC = ({ centerOnMobile, optOutHandler, channelSetting, @@ -109,15 +108,14 @@ const ManageNotifSettingDropdownContainer: React.FC = (options) => { - const { children, centerOnMobile, userSetting, channelDetail, onSuccessOptout } = options; +const ManageNotifSettingDropdown: FC = (options) => { + const { children, centerOnMobile, userSetting, channelDetail } = options; const [isOpen, setIsOpen] = useState(false); - const { chainId, provider, account, wallet } = useAccount(); + const { chainId, provider, account } = useAccount(); const { userPushSDKInstance } = useSelector((state: any) => { return state.user; }); const dispatch = useDispatch(); - const { handleConnectWallet, connectWallet } = useContext(AppContext); const channelSetting = useMemo(() => { if (channelDetail && channelDetail?.channel_settings) { @@ -137,7 +135,7 @@ const ManageNotifSettingDropdown: React.FC = (o const onCoreNetwork = chainId === appConfig.coreContractChain; const unsubscribeToast = useToast(); - const optOutHandler = async ({ setLoading }: { setLoading?: React.Dispatch> }) => { + const optOutHandler = async ({ setLoading }: { setLoading?: Dispatch> }) => { const setLoadingFunc = setLoading || (() => {}); setLoadingFunc(true); let userPushInstance = userPushSDKInstance; diff --git a/src/components/dropdowns/OptinNotifSettingDropdown.tsx b/src/components/dropdowns/OptinNotifSettingDropdown.tsx index 39e36ce649..fa0fda0839 100644 --- a/src/components/dropdowns/OptinNotifSettingDropdown.tsx +++ b/src/components/dropdowns/OptinNotifSettingDropdown.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useMemo, useState } from 'react'; +import { useContext, useMemo, useState, ReactNode, FC, Dispatch, SetStateAction } from 'react'; import * as PushAPI from '@pushprotocol/restapi'; import { ethers } from 'ethers'; @@ -20,14 +20,14 @@ import { convertAddressToAddrCaip } from 'helpers/CaipHelper'; import useToast from 'hooks/useToast'; import { MdCheckCircle, MdError } from 'react-icons/md'; import { ChannelSetting } from 'helpers/channel/types'; -import { notifChannelSettingFormatString, userSettingsFromDefaultChannelSetting } from 'helpers/channel/notifSetting'; +import { userSettingsFromDefaultChannelSetting } from 'helpers/channel/notifSetting'; import { AppContext } from 'contexts/AppContext'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { updateSubscriptionStatus, updateUserSetting } from 'redux/slices/channelSlice'; import RangeSlider from 'components/reusables/sliders/RangeSlider'; interface OptinNotifSettingDropdownProps { - children: React.ReactNode; + children: ReactNode; channelDetail: any; setLoading: (loading: boolean) => {}; onSuccessOptin: () => {}; @@ -37,11 +37,11 @@ interface OptinNotifSettingDropdownContainerProps { settings: ChannelSetting[]; optInHandler: (options: { channelSettings?: ChannelSetting[]; - setLoading?: React.Dispatch>; + setLoading?: Dispatch>; }) => Promise; } -const OptinNotifSettingDropdownContainer: React.FC = ({ +const OptinNotifSettingDropdownContainer: FC = ({ settings, optInHandler, }) => { @@ -171,7 +171,7 @@ const OptinNotifSettingDropdownContainer: React.FC = (options) => { +const OptinNotifSettingDropdown: FC = (options) => { const { children, channelDetail, setLoading, onSuccessOptin } = options; const { chainId, provider, account, wallet } = useAccount(); @@ -207,7 +207,7 @@ const OptinNotifSettingDropdown: React.FC = (opt setLoading, }: { channelSettings?: ChannelSetting[]; - setLoading?: React.Dispatch>; + setLoading?: Dispatch>; }) => { const setLoadingFunc = setLoading || (options && options.setLoading) || (() => {}); setLoadingFunc(true); diff --git a/src/components/dropdowns/UpdateNotifSettingDropdown.tsx b/src/components/dropdowns/UpdateNotifSettingDropdown.tsx index 301aa5c33b..90106a2ce2 100644 --- a/src/components/dropdowns/UpdateNotifSettingDropdown.tsx +++ b/src/components/dropdowns/UpdateNotifSettingDropdown.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useState } from 'react'; +import { useContext, useState, ReactNode, Dispatch, SetStateAction, FC } from 'react'; // External Packages import Switch from 'react-switch'; @@ -25,7 +25,7 @@ import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderS import { updateUserSetting } from 'redux/slices/channelSlice'; interface UpdateNotifSettingDropdownProps { - children: React.ReactNode; + children: ReactNode; centerOnMobile: boolean; channelDetail: any; channelSetting?: ChannelSetting[]; @@ -37,11 +37,11 @@ interface UpdateNotifSettingDropdownContainerProps { settings: UserSetting[]; saveUserSettingHandler: (options: { userSettings?: UserSetting[]; - setLoading?: React.Dispatch>; + setLoading?: Dispatch>; }) => Promise; } -const UpdateNotifSettingDropdownContainer: React.FC = ({ +const UpdateNotifSettingDropdownContainer: FC = ({ settings, saveUserSettingHandler, }) => { @@ -176,7 +176,7 @@ const UpdateNotifSettingDropdownContainer: React.FC = ({ +const UpdateNotifSettingDropdown: FC = ({ children, centerOnMobile, channelDetail, @@ -210,7 +210,7 @@ const UpdateNotifSettingDropdown: React.FC = ({ setLoading, }: { userSettings?: UserSetting[]; - setLoading?: React.Dispatch>; + setLoading?: Dispatch>; }) => { const setLoadingFunc = setLoading || (() => {}); const saveOnSuccessSettingFunc = onSuccessSave || (() => {}); diff --git a/src/components/reusables/labels/Tag.tsx b/src/components/reusables/labels/Tag.tsx index ad44e47f72..68175bbfe5 100644 --- a/src/components/reusables/labels/Tag.tsx +++ b/src/components/reusables/labels/Tag.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React from 'react'; - // External Packages import styled from 'styled-components'; diff --git a/src/components/reusables/loaders/LoaderSpinner.tsx b/src/components/reusables/loaders/LoaderSpinner.tsx index 4fdec56022..10072d5903 100644 --- a/src/components/reusables/loaders/LoaderSpinner.tsx +++ b/src/components/reusables/loaders/LoaderSpinner.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React from 'react'; - // External Packages import { useTheme } from 'styled-components'; diff --git a/src/components/reusables/sliders/InputSlider.tsx b/src/components/reusables/sliders/InputSlider.tsx index 28a54a38b2..1a7431977f 100644 --- a/src/components/reusables/sliders/InputSlider.tsx +++ b/src/components/reusables/sliders/InputSlider.tsx @@ -1,4 +1,4 @@ -import React, { ComponentPropsWithoutRef, useEffect, useRef } from 'react'; +import { ComponentPropsWithoutRef, useEffect, useRef, MouseEvent, TouchEvent } from 'react'; import styled from 'styled-components'; interface InputSliderProps extends Omit, 'children' | 'onChange'> { @@ -10,8 +10,8 @@ interface InputSliderProps extends Omit, 'childr defaultVal: number; preview?: boolean; onChange: (value: { x: number }) => void; - onDragStart?: (e: React.MouseEvent | React.TouchEvent) => void; - onDragEnd?: (e: React.MouseEvent | React.TouchEvent) => void; + onDragStart?: (e: MouseEvent | TouchEvent) => void; + onDragEnd?: (e: MouseEvent | TouchEvent) => void; } const InputSlider = ({ @@ -33,7 +33,7 @@ const InputSlider = ({ const containerRef = useRef(null); const previewSliderRef = useRef(null); - const handleMouseDown = (e: React.MouseEvent | React.TouchEvent) => { + const handleMouseDown = (e: MouseEvent | TouchEvent) => { if (disabled) return; if (onDragStart) onDragStart(e); document.addEventListener('mousemove', handleMouseMove); diff --git a/src/components/reusables/sliders/RangeSlider.tsx b/src/components/reusables/sliders/RangeSlider.tsx index 5008f7a4c2..5dd7ced154 100644 --- a/src/components/reusables/sliders/RangeSlider.tsx +++ b/src/components/reusables/sliders/RangeSlider.tsx @@ -1,4 +1,4 @@ -import React, { ComponentPropsWithoutRef, useEffect, useRef } from 'react'; +import { ComponentPropsWithoutRef, useEffect, useRef, MouseEvent, TouchEvent } from 'react'; import styled from 'styled-components'; interface RangeSliderProps extends Omit, 'children' | 'onChange'> { @@ -11,9 +11,9 @@ interface RangeSliderProps extends Omit, 'childr defaultStartVal: number; defaultEndVal: number; preview?: boolean; - onChange: (value: { startVal: number, endVal: number }) => void; - onDragStart?: (e: React.MouseEvent | React.TouchEvent) => void; - onDragEnd?: (e: React.MouseEvent | React.TouchEvent) => void; + onChange: (value: { startVal: number; endVal: number }) => void; + onDragStart?: (e: MouseEvent | TouchEvent) => void; + onDragEnd?: (e: MouseEvent | TouchEvent) => void; } const RangeSlider = ({ @@ -40,7 +40,7 @@ const RangeSlider = ({ const inactiveLeftRef = useRef(null); const inactiveRightRef = useRef(null); - const handleMouseDownLeftThumb = (e: React.MouseEvent | React.TouchEvent) => { + const handleMouseDownLeftThumb = (e: MouseEvent | TouchEvent) => { if (disabled) return; if (onDragStart) onDragStart(e); // Add event listeners for mousemove and touchmove to track thumb movement @@ -53,7 +53,7 @@ const RangeSlider = ({ const handleMouseMoveLeftThumb = (e) => { if (disabled) return; if (!containerRef.current) return; - + const { left, width } = containerRef.current.getBoundingClientRect(); const { clientX } = e instanceof MouseEvent ? e : e.touches[0]; let x = (clientX - left) / width; @@ -72,7 +72,7 @@ const RangeSlider = ({ if (Number(x.toFixed(decimalPlaces)) >= endVal) return; onChange({ startVal: Number(x.toFixed(decimalPlaces)), endVal: endVal }); - }; + }; const handleMouseUpLeftThumb = (e) => { if (disabled) return; @@ -84,7 +84,7 @@ const RangeSlider = ({ document.removeEventListener('touchend', handleMouseUpLeftThumb); }; - const handleMouseDownRightThumb = (e: React.MouseEvent | React.TouchEvent) => { + const handleMouseDownRightThumb = (e: MouseEvent | TouchEvent) => { if (disabled) return; if (onDragStart) onDragStart(e); // Add event listeners for mousemove and touchmove to track thumb movement @@ -97,7 +97,7 @@ const RangeSlider = ({ const handleMouseMoveRightThumb = (e) => { if (disabled) return; if (!containerRef.current) return; - + const { left, width } = containerRef.current.getBoundingClientRect(); const { clientX } = e instanceof MouseEvent ? e : e.touches[0]; let x = (clientX - left) / width; @@ -117,7 +117,7 @@ const RangeSlider = ({ if (Number(x.toFixed(decimalPlaces)) <= startVal) return; onChange({ startVal: startVal, endVal: Number(x.toFixed(decimalPlaces)) }); - }; + }; const handleMouseUpRightThumb = (e) => { if (disabled) return; @@ -132,19 +132,25 @@ const RangeSlider = ({ const showPreview = () => { previewSliderStartRef.current?.style.setProperty('display', 'flex'); previewSliderEndRef.current?.style.setProperty('display', 'flex'); - } + }; const hidePreview = () => { previewSliderStartRef.current?.style.setProperty('display', 'none'); previewSliderEndRef.current?.style.setProperty('display', 'none'); - } + }; useEffect(() => { - if (thumbStartRef.current && inactiveLeftRef.current && thumbEndRef.current && activeRef.current && inactiveRightRef.current) { + if ( + thumbStartRef.current && + inactiveLeftRef.current && + thumbEndRef.current && + activeRef.current && + inactiveRightRef.current + ) { thumbStartRef.current.style.left = `${((startVal - min) / (max - min)) * 98}%`; inactiveLeftRef.current.style.width = `${((startVal - min) / (max - min)) * 100}%`; activeRef.current.style.width = `${((endVal - startVal) / (max - min)) * 100}%`; - thumbEndRef.current.style.left = `${((endVal - min) / (max - min)) * 95}%`; + thumbEndRef.current.style.left = `${((endVal - min) / (max - min)) * 95}%`; inactiveRightRef.current.style.width = `${((max - endVal) / (max - min)) * 100}%`; previewSliderStartRef.current?.style.setProperty( @@ -168,25 +174,29 @@ const RangeSlider = ({ {...props} {...props} > - - - - - - {preview && !Number.isNaN(Number(startVal)) && {startVal}} - {preview && !Number.isNaN(Number(endVal)) && {endVal}} + + + + + + {preview && !Number.isNaN(Number(startVal)) && ( + {startVal} + )} + {preview && !Number.isNaN(Number(endVal)) && ( + {endVal} + )} ); }; diff --git a/src/components/reusables/toasts/NotifToastUI.tsx b/src/components/reusables/toasts/NotifToastUI.tsx index 2643ffaadb..d71f298273 100644 --- a/src/components/reusables/toasts/NotifToastUI.tsx +++ b/src/components/reusables/toasts/NotifToastUI.tsx @@ -1,19 +1,14 @@ // React + Web3 Essentials -import React, { useContext } from "react"; +import { useContext, useEffect } from 'react'; // External Packages -import { NotificationItem } from "@pushprotocol/uiweb"; -import styled, { useTheme } from "styled-components"; +import { NotificationItem } from '@pushprotocol/uiweb'; +import styled, { useTheme } from 'styled-components'; import { ToastContainer } from 'react-toastify'; // Internal Components -import { NotificationContext } from "contexts/NotificationContext"; -import { NotificationEvent } from "@pushprotocol/restapi/src/lib/pushstream/pushStreamTypes"; - -// Interfaces -interface Props { - payload: object -} +import { NotificationContext } from 'contexts/NotificationContext'; +import { NotificationEvent } from '@pushprotocol/restapi/src/lib/pushstream/pushStreamTypes'; const NotifToastUI = ({ payload }: { payload: NotificationEvent }) => { // get theme @@ -22,49 +17,53 @@ const NotifToastUI = ({ payload }: { payload: NotificationEvent }) => { // get notification context and set it const { notificationReceived, setNotificationRecieved } = useContext(NotificationContext); - React.useEffect(() => { + useEffect(() => { setNotificationRecieved(notificationReceived + 1); - }, []) + }, []); return ( - ) -} + ); +}; export default NotifToastUI; const NotificationItemExtended = styled(NotificationItem)` &&&.Toastify__toast-container { background: transparent !important; } - .Toastify__toast {} - .Toastify__toast-body {} - .Toastify__progress-bar {} -` - + .Toastify__toast { + } + .Toastify__toast-body { + } + .Toastify__progress-bar { + } +`; const Container = styled(ToastContainer)` &&&.Toastify__toast-container { background: transparent !important; } - .Toastify__toast {} - .Toastify__toast-body {} - .Toastify__progress-bar {} + .Toastify__toast { + } + .Toastify__toast-body { + } + .Toastify__progress-bar { + } `; - // .NotifToastOverride { // background: transparent; // box-shadow: none; diff --git a/src/components/userSettings/UserSettings.tsx b/src/components/userSettings/UserSettings.tsx index 40e28bc39b..cbf0e7f428 100644 --- a/src/components/userSettings/UserSettings.tsx +++ b/src/components/userSettings/UserSettings.tsx @@ -1,27 +1,22 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useMemo, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import styled from 'styled-components'; import { useDispatch, useSelector } from 'react-redux'; import { useNavigate } from 'react-router-dom'; import { AiOutlineMore } from 'react-icons/ai'; -import { cloneDeep } from 'lodash'; // Internal Components import { useAccount } from 'hooks'; import { Button } from 'primaries/SharedStyling'; import { ImageV2 } from 'components/reusables/SharedStylingV2'; -import LoaderSpinner from 'primaries/LoaderSpinner'; import { updateBulkSubscriptions, updateBulkUserSettings } from 'redux/slices/channelSlice'; -import { convertAddressToAddrCaip } from 'helpers/CaipHelper'; -import ManageNotifSettingDropdown from 'components/dropdowns/ManageNotifSettingDropdown'; // Internal Configs import { device } from 'config/Globals'; import ChannelListSettings from 'components/channel/ChannelListSettings'; import PushSnapSettings from 'components/PushSnap/PushSnapSettings'; -import EmptyNotificationSettings from 'components/channel/EmptyNotificationSettings'; interface ChannelListItem { channel: string; diff --git a/src/components/video/IncomingCall.tsx b/src/components/video/IncomingCall.tsx index 24bd72d818..b2b3a90c33 100644 --- a/src/components/video/IncomingCall.tsx +++ b/src/components/video/IncomingCall.tsx @@ -1,11 +1,10 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; // External Packages // import { MdClear } from 'react-icons/md'; import { BsChevronDown } from 'react-icons/bs'; import styled from 'styled-components'; -import * as PushAPI from '@pushprotocol/restapi'; // Internal Components import { ItemHV2, SectionV2 } from 'components/reusables/SharedStylingV2'; @@ -20,7 +19,7 @@ import VideoPlayer from './VideoPlayer'; // Internal Configs import { device } from 'config/Globals'; -import { VideoCallStatus } from '@pushprotocol/restapi'; +import { VideoCallStatus, user as pushUser } from '@pushprotocol/restapi'; import { appConfig } from 'config/index.js'; import { AppContext } from 'contexts/AppContext'; @@ -43,7 +42,7 @@ const IncomingCall = () => { useEffect(() => { (async () => { - const userData = await PushAPI.user.get({ account: videoCallData.incoming[0].address, env: appConfig.appEnv }); + const userData = await pushUser.get({ account: videoCallData.incoming[0].address, env: appConfig.appEnv }); setIncomingCallUserData(userData); })(); }, []); diff --git a/src/components/video/OnConnectingVideoCall.tsx b/src/components/video/OnConnectingVideoCall.tsx index 7b2de74f7e..6a401581be 100644 --- a/src/components/video/OnConnectingVideoCall.tsx +++ b/src/components/video/OnConnectingVideoCall.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useContext } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -15,7 +15,7 @@ import { device } from 'config/Globals'; export const OnConnectingVideoCall = () => { const { videoCallData, incomingCallUserData } = useContext(VideoCallContext); - const { web3NameList }: AppContextType = React.useContext(AppContext); + const { web3NameList }: AppContextType = useContext(AppContext); const web3Name = web3NameList[videoCallData.incoming[0].address]; const shortnedAddress = shortenText(videoCallData.incoming[0].address, 5); const theme = useTheme(); diff --git a/src/components/video/OutgoingOngoingCall.tsx b/src/components/video/OutgoingOngoingCall.tsx index fb90d373fe..cd4620baf2 100644 --- a/src/components/video/OutgoingOngoingCall.tsx +++ b/src/components/video/OutgoingOngoingCall.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useContext } from 'react'; // External Packages import styled from 'styled-components'; @@ -10,7 +10,7 @@ import LoaderSpinner, { LOADER_TYPE, PROGRESS_POSITIONING, } from 'components/reusables/loaders/LoaderSpinner'; -import { ImageV2, ItemHV2, ItemVV2, SectionV2, SpanV2 } from 'components/reusables/SharedStylingV2'; +import { ItemHV2, SectionV2 } from 'components/reusables/SharedStylingV2'; import UserInfo from 'components/video/UserInfo'; import VideoPlayer from 'components/video/VideoPlayer'; import { VideoCallContext } from 'contexts/VideoCallContext'; diff --git a/src/components/video/VideoPlayer.tsx b/src/components/video/VideoPlayer.tsx index 5f0ee76318..9bbf4796ae 100644 --- a/src/components/video/VideoPlayer.tsx +++ b/src/components/video/VideoPlayer.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useRef } from 'react'; +import { useContext, useEffect, useRef } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -27,7 +27,7 @@ const VideoPlayer = ({ localVideoStyles, incoming }: VideoPlayerType) => { const { videoCallData, isCallAccepted } = useContext(VideoCallContext); const { connectedUser } = useContext(AppContext); const { currentChat }: ChatUserAppContext = useContext(Context); - const { web3NameList }: AppContextType = React.useContext(MainContext); + const { web3NameList }: AppContextType = useContext(MainContext); const web3Name = web3NameList[videoCallData.incoming[0].address]; const theme = useTheme(); diff --git a/src/components/yield/StakingModalComponent.tsx b/src/components/yield/StakingModalComponent.tsx index 41b4c8e026..a5bc69bf88 100644 --- a/src/components/yield/StakingModalComponent.tsx +++ b/src/components/yield/StakingModalComponent.tsx @@ -2,7 +2,7 @@ import { useClickAway } from 'react-use'; import { Input, Span } from 'primaries/SharedStyling'; // React + Web3 Essentials -import React, { useContext, useState } from 'react'; +import { useContext, useState, useRef, useEffect } from 'react'; import { ethers } from 'ethers'; // External Packages @@ -13,7 +13,7 @@ import { useSelector } from 'react-redux'; // Internal Compoonents import Close from 'assets/chat/group-chat/close.svg?react'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { bn, bnToInt, formatTokens } from 'helpers/StakingHelper'; +import { bnToInt, formatTokens } from 'helpers/StakingHelper'; import { P } from 'components/SharedStyling'; import { ButtonV2, H2V2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import { AppContext } from 'contexts/AppContext'; @@ -29,10 +29,10 @@ const StakingModalComponent = ({ onClose, InnerComponentProps, toastObject }) => const [maxAmount, setMaxAmount] = useState(0); const [approvedToken, setApprovedToken] = useState(0); - const [depositApproved, setDepositApprove] = React.useState(false); + const [depositApproved, setDepositApprove] = useState(false); - const [txInProgressApprDep, setTxInProgressApprDep] = React.useState(false); - const [txInProgressDep, setTxInProgressDep] = React.useState(false); + const [txInProgressApprDep, setTxInProgressApprDep] = useState(false); + const [txInProgressDep, setTxInProgressDep] = useState(false); const [txnMessage, setTxnMessage] = useState(null); @@ -49,7 +49,7 @@ const StakingModalComponent = ({ onClose, InnerComponentProps, toastObject }) => onClose(); }; const theme = useTheme(); - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => handleClose()); const fillMax = async () => { @@ -79,7 +79,7 @@ const StakingModalComponent = ({ onClose, InnerComponentProps, toastObject }) => setTxInProgressApprDep(false); }; - React.useEffect(() => { + useEffect(() => { fillMax(); checkApprDeposit(); }, []); diff --git a/src/components/yield/UnstakingModalComponent.tsx b/src/components/yield/UnstakingModalComponent.tsx index 315e86b779..78e5f9905a 100644 --- a/src/components/yield/UnstakingModalComponent.tsx +++ b/src/components/yield/UnstakingModalComponent.tsx @@ -1,11 +1,9 @@ // React + Web3 Essentials -import React, { useState } from 'react'; -import { ethers } from 'ethers'; +import { useState, useRef } from 'react'; // External Packages import { useClickAway } from 'react-use'; import styled, { useTheme } from 'styled-components'; -import { MdCheckCircle, MdError } from 'react-icons/md'; // Internal Compoonents import { ButtonV2, H2V2, ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; @@ -15,195 +13,194 @@ import { Input } from 'primaries/SharedStyling'; import { useAccount } from 'hooks'; // Internal Configs -import { abis, addresses } from 'config'; + import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { formatTokens } from 'helpers/StakingHelper'; - const UnstakingModalComponent = ({ onClose, InnerComponentProps, toastObject }) => { - - const { - title, - userData, - getUserData, - getPoolStats, - PoolStats, - withdrawTokens, - unstakeErrorMessage - } = InnerComponentProps; - - const withdrawAmount = formatTokens(userData?.userStaked); - - const theme = useTheme(); - const { account, provider } = useAccount(); - const [amount, setAmount] = useState(withdrawAmount); - const [txInProgressWithdraw, setTxInProgressWithdraw] = React.useState(false); - - const handleClose = () => { - onClose(); - }; - - const containerRef = React.useRef(null); - useClickAway(containerRef, () => handleClose()); - - return ( - - - - {title} Staking Pool - handleClose()} - style={{ cursor: 'pointer' }} - /> - - - -

Balance

- - - - - PUSH - - - -
- - - withdrawTokens()} - > - {txInProgressWithdraw ? - () : - "Withdraw" - } - - - - - {/* You must wait until the current epoch is over to unstake funds. */} - - {unstakeErrorMessage} - - -
- ); + const { title, userData, getUserData, getPoolStats, PoolStats, withdrawTokens, unstakeErrorMessage } = + InnerComponentProps; + + const withdrawAmount = formatTokens(userData?.userStaked); + + const theme = useTheme(); + const { account, provider } = useAccount(); + const [amount, setAmount] = useState(withdrawAmount); + const [txInProgressWithdraw, setTxInProgressWithdraw] = useState(false); + + const handleClose = () => { + onClose(); + }; + + const containerRef = useRef(null); + useClickAway(containerRef, () => handleClose()); + + return ( + + + {title} Staking Pool + handleClose()} + style={{ cursor: 'pointer' }} + /> + + + +

+ Balance +

+ + + + + PUSH + +
+ + + withdrawTokens()} + > + {txInProgressWithdraw ? ( + + ) : ( + 'Withdraw' + )} + + + + + {/* You must wait until the current epoch is over to unstake funds. */} + + {unstakeErrorMessage} + +
+ ); }; export default UnstakingModalComponent; const Container = styled(ItemVV2)` - padding: 8px; - width: 340px; - gap:20px; - font-family: 'Strawford'; - font-style: normal; - font-weight: 500; - line-height: 150%; - - @media(max-width:500px){ - width: 270px; - padding:16px 15px; - } - - -` + padding: 8px; + width: 340px; + gap: 20px; + font-family: 'Strawford'; + font-style: normal; + font-weight: 500; + line-height: 150%; + + @media (max-width: 500px) { + width: 270px; + padding: 16px 15px; + } +`; const TokenInput = styled(Input)` - background:transparent; -` + background: transparent; +`; const PrimaryText = styled(H2V2)` - font-size: 16px; - font-weight: 500; - line-height: 150%; /* 24px */ - letter-spacing: -0.304px; - color: ${(props) => props.theme.stakingPrimaryText}; -` + font-size: 16px; + font-weight: 500; + line-height: 150%; /* 24px */ + letter-spacing: -0.304px; + color: ${(props) => props.theme.stakingPrimaryText}; +`; const MaxText = styled.p` - font-size: 14px; - font-style: normal; - font-weight: 500; - color: #657795; - margin: 0px; -` + font-size: 14px; + font-style: normal; + font-weight: 500; + color: #657795; + margin: 0px; +`; const FilledButton = styled(ButtonV2)` - width:100%; - background: #D53A94; - border: 1px solid #D53A94; - border-radius: 8px; - padding: 12px; - font-size: 16px; - line-height: 141%; - letter-spacing: -0.03em; - color: #FFFFFF; - cursor:pointer; - & > div{ - display:block; - } - - @media(max-width:600px){ - font-size: 14px; - } - + width: 100%; + background: #d53a94; + border: 1px solid #d53a94; + border-radius: 8px; + padding: 12px; + font-size: 16px; + line-height: 141%; + letter-spacing: -0.03em; + color: #ffffff; + cursor: pointer; + & > div { + display: block; + } + + @media (max-width: 600px) { + font-size: 14px; + } `; const EmptyButton = styled(ButtonV2)` - font-size: 16px; - line-height: 19px; - flex-direction:row; - flex:1; - height: 49px; - padding:12px; - border-radius: 8px; - & > div{ - display:block; - } - &:after{ - background:transparent; - } - - &:hover{ - opacity:1; - } - - @media(max-width:600px){ - font-size: 14px; - } -` + font-size: 16px; + line-height: 19px; + flex-direction: row; + flex: 1; + height: 49px; + padding: 12px; + border-radius: 8px; + & > div { + display: block; + } + &:after { + background: transparent; + } + + &:hover { + opacity: 1; + } + + @media (max-width: 600px) { + font-size: 14px; + } +`; const WarningText = styled.p` - margin:0px; - color: #D53A94; - text-align: center; - font-family: Strawford; - font-size: 12px; - font-style: normal; - font-weight: 400; - line-height: normal; -` \ No newline at end of file + margin: 0px; + color: #d53a94; + text-align: center; + font-family: Strawford; + font-size: 12px; + font-style: normal; + font-weight: 400; + line-height: normal; +`; diff --git a/src/components/yield/YieldComponent.js b/src/components/yield/YieldComponent.js index e5db67638e..3b1b76c8a6 100644 --- a/src/components/yield/YieldComponent.js +++ b/src/components/yield/YieldComponent.js @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState } from 'react'; // External Packages import { FiSearch, FiSliders } from 'react-icons/fi'; @@ -26,11 +26,7 @@ const InboxComponent = () => { setSearch(''); }; - return ( - - - - ); + return ; }; const Container = styled.div` @@ -60,7 +56,7 @@ const NavBoxHolder = styled.div` bottom: 0; width: 100%; content: ''; - background-color: ${props => props.theme.default.border}; + background-color: ${(props) => props.theme.default.border}; } `; @@ -124,7 +120,7 @@ const SearchBar = styled.input` padding-left: 50px; border-radius: 99px; border: none; - background: #F4F5FA; + background: #f4f5fa; // background: ${(props) => props.theme.viewChannelSearchBg}; // color: ${(props) => props.theme.viewChannelSearchText}; color: #657795; @@ -135,11 +131,11 @@ const SearchBar = styled.input` font-size: 16px; line-height: 150%; - input[type="reset"] { + input[type='reset'] { display: none; } &::placeholder { - color: #657795; + color: #657795; } &:hover, &:active, diff --git a/src/components/yield/YieldPoolCard.tsx b/src/components/yield/YieldPoolCard.tsx index be1306ef95..7207a061d6 100644 --- a/src/components/yield/YieldPoolCard.tsx +++ b/src/components/yield/YieldPoolCard.tsx @@ -1,10 +1,10 @@ // React + Web3 Essentials -import React, { useContext, useState } from 'react'; +import { useContext, useState, useEffect } from 'react'; import { ethers } from 'ethers'; // External Packages import styled, { useTheme } from 'styled-components'; -import { MdCheckCircle, MdError, MdWarning } from 'react-icons/md'; +import { MdCheckCircle, MdError } from 'react-icons/md'; import { useSelector } from 'react-redux'; // Internal Compoonents @@ -12,7 +12,7 @@ import useToast from 'hooks/useToast'; import { B } from 'components/SharedStyling'; import StakingToolTip from './StakingToolTip'; import InfoLogo from '../../assets/inforWithoutBG.svg'; -import { Button, Span } from 'primaries/SharedStyling'; +import { Span } from 'primaries/SharedStyling'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { formatTokens, numberWithCommas } from 'helpers/StakingHelper'; import { @@ -43,7 +43,7 @@ const YieldPoolCard = ({ }: any) => { const { account, provider } = useAccount(); - const [txInProgressWithdraw, setTxInProgressWithdraw] = React.useState(false); + const [txInProgressWithdraw, setTxInProgressWithdraw] = useState(false); const [txInProgressClaimRewards, setTxInProgressClaimRewards] = useState(false); const [txInProgressMigrate, setTxInProgressMigrate] = useState(false); @@ -561,7 +561,7 @@ const YieldPoolCard = ({ }); }; - React.useEffect(() => { + useEffect(() => { setWithdrawErrorMessage(null); setUnstakeErrorMessage(null); }, [account]); @@ -613,7 +613,7 @@ const YieldPoolCard = ({ {PoolStats ? ( <> @@ -650,7 +650,7 @@ const YieldPoolCard = ({ {PoolStats ? ( <> diff --git a/src/components/yield/YieldPushFeeV3.tsx b/src/components/yield/YieldPushFeeV3.tsx index 9bbab468f5..2762379a58 100644 --- a/src/components/yield/YieldPushFeeV3.tsx +++ b/src/components/yield/YieldPushFeeV3.tsx @@ -1,19 +1,18 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, useRef } from 'react'; import { ethers } from 'ethers'; // External Packages -import styled, { css, useTheme } from 'styled-components'; +import styled, { useTheme } from 'styled-components'; import { MdCheckCircle, MdError } from 'react-icons/md'; // Internal Compoonents import useToast from 'hooks/useToast'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; import InfoLogo from '../../assets/inforWithoutBG.svg'; -import { B, Button } from 'primaries/SharedStyling'; +import { B } from 'primaries/SharedStyling'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { formatTokens, numberWithCommas } from 'helpers/StakingHelper'; -import ErrorLogo from '../../assets/errorLogo.svg?react'; import StakingToolTip, { StakingToolTipContent } from './StakingToolTip'; import StakingModalComponent from './StakingModalComponent'; import { @@ -40,7 +39,7 @@ const YieldPushFeeV3 = ({ userDataPush, getUserDataPush, PUSHPoolstats, getPUSHP const { account, provider } = useAccount(); const [txInProgressWithdraw, setTxInProgressWithdraw] = useState(false); - const [txInProgressClaimRewards, setTxInProgressClaimRewards] = React.useState(false); + const [txInProgressClaimRewards, setTxInProgressClaimRewards] = useState(false); const [unstakeErrorMessage, setUnstakeErrorMessage] = useState(null); const [withdrawErrorMessage, setWithdrawErrorMessage] = useState(null); @@ -358,7 +357,7 @@ const YieldPushFeeV3 = ({ userDataPush, getUserDataPush, PUSHPoolstats, getPUSHP }); }; - React.useEffect(() => { + useEffect(() => { setWithdrawErrorMessage(null); setUnstakeErrorMessage(null); }, [account]); @@ -830,7 +829,7 @@ const ToolTipAPR = () => { const [isActive, setIsActive] = useState(false); const handleClose = () => setIsActive(false); - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => handleClose()); return ( diff --git a/src/components/yield/YieldUniswapV3.tsx b/src/components/yield/YieldUniswapV3.tsx index a4406aa108..24ee8ee349 100644 --- a/src/components/yield/YieldUniswapV3.tsx +++ b/src/components/yield/YieldUniswapV3.tsx @@ -1,16 +1,16 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState, useEffect } from 'react'; import { ethers } from 'ethers'; // External Packages -import styled, { css, useTheme } from 'styled-components'; +import styled, { useTheme } from 'styled-components'; import { MdCheckCircle, MdError } from 'react-icons/md'; // Internal Compoonents import useToast from 'hooks/useToast'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; import InfoLogo from '../../assets/inforWithoutBG.svg'; -import { B, Button } from 'primaries/SharedStyling'; +import { B } from 'primaries/SharedStyling'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { formatTokens, numberWithCommas } from 'helpers/StakingHelper'; import StakingToolTip from './StakingToolTip'; @@ -44,8 +44,8 @@ const bn = function (number, defaultValue = null) { const YieldUniswapV3 = ({ lpPoolStats, userDataLP, getLpPoolStats, getUserDataLP }) => { const { account, provider } = useAccount(); - const [txInProgressWithdraw, setTxInProgressWithdraw] = React.useState(false); - const [txInProgressClaimRewards, setTxInProgressClaimRewards] = React.useState(false); + const [txInProgressWithdraw, setTxInProgressWithdraw] = useState(false); + const [txInProgressClaimRewards, setTxInProgressClaimRewards] = useState(false); const [withdrawErrorMessage, setWithdrawErrorMessage] = useState(null); const [unstakeErrorMessage, setUnstakeErrorMessage] = useState(null); @@ -216,7 +216,7 @@ const YieldUniswapV3 = ({ lpPoolStats, userDataLP, getLpPoolStats, getUserDataLP }); }; - React.useEffect(() => { + useEffect(() => { setWithdrawErrorMessage(null); setUnstakeErrorMessage(null); }, [account]); diff --git a/src/config/index.js b/src/config/index.js index 978ab7f18e..4d38435646 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -9,6 +9,8 @@ if (import.meta.env.VITE_APP_DEPLOY_ENV == 'PROD') { appendName = 'staging'; } else if (import.meta.env.VITE_APP_DEPLOY_ENV == 'DEV') { appendName = 'dev'; +} else if (import.meta.env.VITE_APP_DEPLOY_ENV == 'PREVIEW') { + appendName = 'dev'; } else if (import.meta.env.VITE_APP_DEPLOY_ENV == 'LOCALHOST') { appendName = 'localhost'; } else if (import.meta.env.VITE_APP_DEPLOY_ENV == 'W2W') { diff --git a/src/contexts/AppContext.tsx b/src/contexts/AppContext.tsx index 33afb59f0d..eaa3b18b42 100644 --- a/src/contexts/AppContext.tsx +++ b/src/contexts/AppContext.tsx @@ -2,7 +2,7 @@ import { CONSTANTS, ProgressHookType, PushAPI } from '@pushprotocol/restapi'; import { ethers } from 'ethers'; import useModalBlur from 'hooks/useModalBlur'; -import React, { createContext, useContext, useEffect, useRef, useState } from 'react'; +import { createContext, useContext, useEffect, useRef, useState } from 'react'; // Internal Components import { LOADER_SPINNER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; @@ -24,7 +24,7 @@ import { Web3NameListType, onboardingProgressI, } from 'types/context'; -import { GlobalContext, ReadOnlyWalletMode } from './GlobalContext'; +import { GlobalContext } from './GlobalContext'; export const AppContext = createContext(null); @@ -250,7 +250,6 @@ const AppContextProvider = ({ children }) => { const librarySigner = web3Provider?.getSigner(currentAddress); const decryptedPGPKeys = retrieveUserPGPKeyFromStorage(currentAddress); - if (decryptedPGPKeys) { userInstance = await PushAPI.initialize(librarySigner!, { decryptedPGPPrivateKey: decryptedPGPKeys, @@ -268,7 +267,6 @@ const AppContextProvider = ({ children }) => { }); } - // connect stream as well await setupStream(userInstance); diff --git a/src/contexts/ErrorContext.tsx b/src/contexts/ErrorContext.tsx index e933388b8e..dae7ccad1a 100644 --- a/src/contexts/ErrorContext.tsx +++ b/src/contexts/ErrorContext.tsx @@ -1,16 +1,12 @@ // React + Web3 Essentials -import React, { createContext, useState } from 'react'; +import { createContext, useState, FC, ReactNode } from 'react'; export const ErrorContext = createContext(null); -const ErrorContextProvider:React.FC = ({ children }) => { +const ErrorContextProvider: FC = ({ children }) => { const [authError, setAuthError] = useState(undefined); - - return ( - - {children} - - ) -} -export default ErrorContextProvider; \ No newline at end of file + return {children}; +}; + +export default ErrorContextProvider; diff --git a/src/contexts/NavigationContext.tsx b/src/contexts/NavigationContext.tsx index b425226912..955fa10286 100644 --- a/src/contexts/NavigationContext.tsx +++ b/src/contexts/NavigationContext.tsx @@ -1,19 +1,17 @@ // React + Web3 Essentials -import React, { createContext, useState } from 'react' +import { createContext, useState } from 'react'; export const NavigationContext = createContext({ navigationSetup: null, - setNavigationSetup: (value: any) => {} + setNavigationSetup: (value: any) => {}, }); -const NavigationContextProvider = ({children}) => { +const NavigationContextProvider = ({ children }) => { const [navigationSetup, setNavigationSetup] = useState(null); - + return ( - - {children} - - ) -} + {children} + ); +}; -export default NavigationContextProvider; \ No newline at end of file +export default NavigationContextProvider; diff --git a/src/contexts/NavigationContext_old.js b/src/contexts/NavigationContext_old.js index fcaa02706a..8f3bc124a2 100644 --- a/src/contexts/NavigationContext_old.js +++ b/src/contexts/NavigationContext_old.js @@ -1,16 +1,16 @@ // React + Web3 Essentials -import React, { createContext, useState } from 'react' +import { createContext, useState } from 'react'; export const NavigationContext = createContext({}); const NavigationContextProvider = (props) => { const [navigationSetup, setNavigationSetup] = useState(null); - + return ( {props.children} - ) -} + ); +}; -export default NavigationContextProvider; \ No newline at end of file +export default NavigationContextProvider; diff --git a/src/contexts/NotificationContext.tsx b/src/contexts/NotificationContext.tsx index 2ec8a2cb62..7f3f6d4d03 100644 --- a/src/contexts/NotificationContext.tsx +++ b/src/contexts/NotificationContext.tsx @@ -1,19 +1,19 @@ // React + Web3 Essentials -import React, { createContext, useState } from 'react'; +import { createContext, useState, FC, ReactNode } from 'react'; export const NotificationContext = createContext({ notificationReceived: 0, - setNotificationRecieved: (value: number) => {} + setNotificationRecieved: (value: number) => {}, }); -const NotificationContextProvider:React.FC = ({children}) => { +const NotificationContextProvider: FC = ({ children }) => { const [notificationReceived, setNotificationRecieved] = useState(0); - + return ( {children} - ) -} + ); +}; -export default NotificationContextProvider; \ No newline at end of file +export default NotificationContextProvider; diff --git a/src/contexts/SpaceComponentsContext.tsx b/src/contexts/SpaceComponentsContext.tsx index 577020d740..3b857034d3 100644 --- a/src/contexts/SpaceComponentsContext.tsx +++ b/src/contexts/SpaceComponentsContext.tsx @@ -1,12 +1,5 @@ // React + Web3 Essentials -import React, { createContext, useContext, useEffect, useState } from 'react'; -import { ethers } from 'ethers'; - -// External imports -import * as PushAPI from '@pushprotocol/restapi'; - -// Internal Components imports -import { appConfig } from 'config/index.js'; +import { createContext, FC, ReactNode } from 'react'; import { ISpaceBannerProps, @@ -18,18 +11,18 @@ import { } from '@pushprotocol/uiweb'; export interface IUseSpaceReturnValues { - SpaceInvitesComponent: React.FC; - SpaceWidgetComponent: React.FC; - SpaceFeedComponent: React.FC; - SpaceBannerComponent: React.FC; - CreateSpaceComponent: React.FC; + SpaceInvitesComponent: FC; + SpaceWidgetComponent: FC; + SpaceFeedComponent: FC; + SpaceBannerComponent: FC; + CreateSpaceComponent: FC; } export const SpaceComponentContext = createContext({}); -const SpaceComponentContextProvider: React.FC<{ +const SpaceComponentContextProvider: FC<{ spaceUI: SpacesUI; - children: React.ReactNode; + children: ReactNode; }> = ({ spaceUI, children }) => { return ( = ({ children }) => { +const SpaceContextProvider: FC = ({ children }) => { const [spaceId, setSpaceId] = useState(null); const [spaceInvites, setSpaceInvites] = useState(0); const { account } = useAccount(); diff --git a/src/contexts/VideoCallContext.tsx b/src/contexts/VideoCallContext.tsx index d24717b826..68378880c3 100644 --- a/src/contexts/VideoCallContext.tsx +++ b/src/contexts/VideoCallContext.tsx @@ -1,9 +1,8 @@ // React + Web3 Essentials -import React, { createContext, useContext, useEffect, useRef, useState } from 'react'; +import { createContext, useContext, useEffect, useRef, useState, FC, ReactNode } from 'react'; import { produce } from 'immer'; -import * as PushAPI from '@pushprotocol/restapi'; -import { VideoCallStatus } from '@pushprotocol/restapi'; +import { VideoCallStatus, video as pushVideo, VideoCallData } from '@pushprotocol/restapi'; import { appConfig } from 'config/index.js'; import { initVideoCallData } from '@pushprotocol/restapi/src/lib/video'; @@ -34,7 +33,7 @@ interface VideoCallMetaDataType { const VideoCallContext = createContext(null); -const VideoCallContextProvider: React.FC = ({ children }) => { +const VideoCallContextProvider: FC = ({ children }) => { const videoObjectRef = useRef(null); const [isCallConnected, setIsCallConnected] = useState(false); const [isCallAccepted, setIsCallAccepted] = useState(false); @@ -42,7 +41,7 @@ const VideoCallContextProvider: React.FC = ({ children }) => { const { chainId, account, provider } = useAccount(); const { connectedUser, createUserIfNecessary } = useContext(AppContext); - const [data, setData] = useState(initVideoCallData); + const [data, setData] = useState(initVideoCallData); useEffect(() => { if (data.incoming[0].status === VideoCallStatus.CONNECTED) { @@ -63,7 +62,7 @@ const VideoCallContextProvider: React.FC = ({ children }) => { if (!connectedUser.publicKey) { createdUser = await createUserIfNecessary(); } - videoObjectRef.current = new PushAPI.video.Video({ + videoObjectRef.current = new pushVideo.Video({ signer: provider.getSigner(account), chainId, pgpPrivateKey: connectedUser.privateKey || createdUser?.privateKey, @@ -119,7 +118,7 @@ const VideoCallContextProvider: React.FC = ({ children }) => { return produce(oldData, (draft) => { draft.local.address = videoCallMetaData.recipientAddress; draft.incoming[0].address = videoCallMetaData.senderAddress; - draft.incoming[0].status = PushAPI.VideoCallStatus.RECEIVED; + draft.incoming[0].status = VideoCallStatus.RECEIVED; draft.meta.chatId = videoCallMetaData.chatId; draft.meta.initiator.address = videoCallMetaData.senderAddress; draft.meta.initiator.signal = videoCallMetaData.signalData; @@ -155,9 +154,7 @@ const VideoCallContextProvider: React.FC = ({ children }) => { setIsCallAccepted, setIsCallConnected, isVideoCallInitiator: - data.incoming[0].status !== PushAPI.VideoCallStatus.UNINITIALIZED - ? videoObjectRef.current?.isInitiator - : () => {}, + data.incoming[0].status !== VideoCallStatus.UNINITIALIZED ? videoObjectRef.current?.isInitiator : () => {}, videoObject: videoObjectRef.current, }} > diff --git a/src/firebase.js b/src/firebase.js deleted file mode 100644 index dc20702af4..0000000000 --- a/src/firebase.js +++ /dev/null @@ -1,65 +0,0 @@ -// External Packages -import { initializeApp } from '@firebase/app'; -import { getMessaging, getToken, onMessage } from '@firebase/messaging'; - -// Internal Components -import { postReq } from 'api'; - -// Internal Configs -import { appConfig } from 'config/index.js'; - -// Initialize the Firebase app in the service worker by passing the generated config -var firebaseConfig = { ...appConfig.firebaseConfig }; -const TOKEN_KEY = 'EPNS_BASE_PUSH_TOKEN'; -const CACHEPREFIX = 'PUSH_TOKEN_'; - -const firebaseApp = initializeApp(firebaseConfig); -const messaging = getMessaging(firebaseApp); - -const getLocalToken = () => localStorage.getItem(TOKEN_KEY); -const setLocalToken = (token) => localStorage.setItem(TOKEN_KEY, token); - -export const getPushToken = async () => { - try { - let token = getLocalToken(TOKEN_KEY); - if (!token) { - token = await getToken(messaging, { - vapidKey: appConfig.vapidKey, - }); - setLocalToken(token); - } - return token; - } catch (err) { - console.log('\n\n\n\n'); - console.error('An error occurred while retrieving token. ', err); - console.log('\n\n\n\n'); - } -}; - -export const onMessageListener = () => - new Promise((resolve) => { - onMessage(messaging, (payload) => { - resolve(payload); - }); - }); - -export const browserFunction = async (account) => { - try { - const tokenKey = `${CACHEPREFIX}${account}`; - const tokenExists = localStorage.getItem(tokenKey) || localStorage.getItem(CACHEPREFIX); //temp to prevent more than 1 account to register - if (!tokenExists) { - const response = await getPushToken(); - const object = { - op: 'register', - wallet: account.toLowerCase(), - device_token: response, - platform: 'dapp', - }; - await postReq('/pushtokens/_register_no_auth', object); - localStorage.setItem(tokenKey, response); - localStorage.setItem(CACHEPREFIX, 'response'); //temp to prevent more than 1 account to register - } - } catch (e) { - console.error('Error setting up the browser notification', e); - } -}; diff --git a/src/helpers/GaslessHelper.ts b/src/helpers/GaslessHelper.ts index 3989859bbb..0508dc210c 100644 --- a/src/helpers/GaslessHelper.ts +++ b/src/helpers/GaslessHelper.ts @@ -2,7 +2,7 @@ import { ethers } from 'ethers'; // External Packages -import { toast, ToastContent, ToastOptions } from 'react-toastify'; +import { toast } from 'react-toastify'; // Internal Components import { toolingPostReq } from '../api/index'; diff --git a/src/helpers/RoutesHelper.ts b/src/helpers/RoutesHelper.ts index a36e25380f..05c5be8764 100644 --- a/src/helpers/RoutesHelper.ts +++ b/src/helpers/RoutesHelper.ts @@ -1,4 +1,5 @@ // Internal Configs +import { getPreviewBasePath } from '../../basePath.js'; import { appConfig } from '../config/index.js'; // Constants @@ -21,3 +22,6 @@ export const channelsServiceEndpoints = { export const ipfsServiceEndpoints = { ipfsUpload: (): string => `${ipfsRoute}/upload`, }; + +export const getPublicAssetPath = (path: string) => + getPreviewBasePath() ? `${getPreviewBasePath()}/${path}` : `./${path}`; diff --git a/src/helpers/pushStaking/src/index.ts b/src/helpers/pushStaking/src/index.ts index 7242c76be8..91d5e53455 100644 --- a/src/helpers/pushStaking/src/index.ts +++ b/src/helpers/pushStaking/src/index.ts @@ -1,8 +1,6 @@ import { ethers } from 'ethers'; -import { PushCoreV2 } from '../types'; import { CoreV2Reward } from './CoreV2Reward'; import { Helpers } from './helpers'; -import { Constants } from './constants'; export const getUserPushStakingInfo = async ( provider: ethers.providers.JsonRpcProvider, diff --git a/src/helpers/w2w/groupChat.ts b/src/helpers/w2w/groupChat.ts index d3fc4c8948..d70adeec9a 100644 --- a/src/helpers/w2w/groupChat.ts +++ b/src/helpers/w2w/groupChat.ts @@ -1,8 +1,7 @@ import { appConfig } from 'config/index.js'; import { walletToCAIP10 } from '.'; import { ConnectedUser, Feeds, Member, User } from '../../types/chat'; -import * as PushAPI from '@pushprotocol/restapi'; -import { GroupDTO } from '@pushprotocol/restapi'; +import { GroupDTO, chat as pushChat } from '@pushprotocol/restapi'; import { findObject } from 'helpers/UtilityHelper'; import * as w2wChatHelper from 'helpers/w2w'; @@ -116,7 +115,7 @@ export const getUpdatedMemberList = (feed: Feeds, walletAddress: string): Array< export const updateGroup = async (options: UpdateGroupType) => { const { currentChat, connectedUser, adminList, memeberList } = options; - const updateResponse = await PushAPI.chat.updateGroup({ + const updateResponse = await pushChat.updateGroup({ chatId: currentChat?.groupInformation?.chatId, groupName: currentChat?.groupInformation?.groupName, groupDescription: currentChat?.groupInformation?.groupDescription, diff --git a/src/helpers/w2w/user.ts b/src/helpers/w2w/user.ts index 3dce363483..e34f820305 100644 --- a/src/helpers/w2w/user.ts +++ b/src/helpers/w2w/user.ts @@ -4,7 +4,6 @@ import * as w2wHelper from 'helpers/w2w/'; import { ConnectedUser, Feeds, IGroup, MessageIPFS, User } from 'types/chat'; import { walletToCAIP10 } from '.'; import { appConfig } from '../../config/index.js'; -import { decrypt, message } from 'openpgp'; import { getGroup } from 'services/chats/getGroup'; export function checkConnectedUser(connectedUser: ConnectedUser): boolean { diff --git a/src/hooks/useAccount.tsx b/src/hooks/useAccount.tsx index 8bb28a513b..cfddcdcbac 100644 --- a/src/hooks/useAccount.tsx +++ b/src/hooks/useAccount.tsx @@ -1,6 +1,6 @@ import { useConnectWallet, useSetChain } from '@web3-onboard/react'; import { appConfig } from 'config/index.js'; -import { GlobalContext, ReadOnlyWalletMode } from 'contexts/GlobalContext'; +import { GlobalContext } from 'contexts/GlobalContext'; import { ethers } from 'ethers'; import { useContext, useMemo } from 'react'; diff --git a/src/hooks/useBrowserNotification.ts b/src/hooks/useBrowserNotification.ts deleted file mode 100644 index b37c524e56..0000000000 --- a/src/hooks/useBrowserNotification.ts +++ /dev/null @@ -1,48 +0,0 @@ -// React + Web3 Essentials -import { useEffect, useState } from 'react'; - -// External Packages -import { toast } from "react-toastify"; - -export function useBrowserNotification(account){ - const [triggerNotification, setTriggerNotification] = useState(false); - - useEffect(() => { - if (!("serviceWorker" in navigator)) return - if (!account) return; - (async function () { - const {browserFunction} = require('firebase') - await browserFunction(account); - })(); - }, [account]); - - useEffect(() => { - if (!("serviceWorker" in navigator)) return - const {onMessageListener} = require("firebase") - onMessageListener().then(payload => { - if (!("Notification" in window)) { - toast.dark(`${payload.notification.body} from: ${payload.notification.title}`, { - type: toast.TYPE.DARK, - autoClose: 5000, - position: "top-right" - }); - } else { - console.info('\n\n\n\n\n') - console.info("revieced push notification") - console.info('\n\n\n\n\n') - const notificationTitle = payload.notification.title; - const notificationOptions = { - title: payload.data.app, - body: payload.notification.body, - image: payload.data.aimg, - icon: payload?.data?.icon, - data: { - url: payload?.data?.acta || payload?.data?.url, - }, - }; - var notification = new Notification(notificationTitle, notificationOptions); - } - }).catch(err => console.error('failed: ', err)) - .finally(() => setTriggerNotification(!triggerNotification)); //retrigger the listener after it has been used once - }, [triggerNotification]); - } \ No newline at end of file diff --git a/src/hooks/usePeer.ts b/src/hooks/usePeer.ts index 34eeef45b1..ab55dcb333 100644 --- a/src/hooks/usePeer.ts +++ b/src/hooks/usePeer.ts @@ -1,4 +1,4 @@ -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; import { Peer } from 'peerjs'; import { AppContext } from 'contexts/AppContext'; diff --git a/src/hooks/useResolveWeb3Name.ts b/src/hooks/useResolveWeb3Name.ts index c4c0a8d21e..0dc175ad2f 100644 --- a/src/hooks/useResolveWeb3Name.ts +++ b/src/hooks/useResolveWeb3Name.ts @@ -4,7 +4,7 @@ import { useContext, useEffect, useState } from 'react'; // Internal Components import { caip10ToWallet } from 'helpers/w2w'; -import { AppContext as ContextType, MessageIPFS } from 'types/chat'; +import { AppContext as ContextType } from 'types/chat'; import { Context } from 'modules/chat/ChatModule'; import { AppContext } from 'contexts/AppContext'; import { AppContextType } from 'types/context'; diff --git a/src/hooks/useSDKSocket.ts b/src/hooks/useSDKSocket.ts index 451bc7c8c9..58bff0bbc9 100644 --- a/src/hooks/useSDKSocket.ts +++ b/src/hooks/useSDKSocket.ts @@ -9,7 +9,6 @@ import { convertAddressToAddrCaip } from '../helpers/CaipHelper'; import { VideoCallStatus } from '@pushprotocol/restapi'; import { ADDITIONAL_META_TYPE } from '@pushprotocol/restapi/src/lib/payloads/constants'; import { ENV } from '@pushprotocol/restapi/src/lib/constants'; -import { SpaceContext } from 'contexts/SpaceContext'; // Types export type SDKSocketHookOptions = { @@ -75,11 +74,12 @@ export const useSDKSocket = ({ account, env, chainId, socketType }: SDKSocketHoo retry: true, }); } - } else if( - payload?.data?.additionalMeta?.data === "PUSH SPACE META MESSAGE" || payload?.data?.additionalMeta?.type === `${ADDITIONAL_META_TYPE.PUSH_SPACE}+1`){ + } else if ( + payload?.data?.additionalMeta?.data === 'PUSH SPACE META MESSAGE' || + payload?.data?.additionalMeta?.type === `${ADDITIONAL_META_TYPE.PUSH_SPACE}+1` + ) { // uiweb will handle this - } - else { + } else { showNotifcationToast(payload); } } diff --git a/src/hooks/useStream.ts b/src/hooks/useStream.ts index 32c911208d..a061d847ee 100644 --- a/src/hooks/useStream.ts +++ b/src/hooks/useStream.ts @@ -1,6 +1,5 @@ import { useContext, useEffect, useState } from 'react'; import { useAccount } from './useAccount'; -import { AppContext } from 'contexts/AppContext'; import { NotificationEvent, NotificationEventType, @@ -8,19 +7,10 @@ import { } from '@pushprotocol/restapi/src/lib/pushstream/pushStreamTypes'; import { VideoCallContext } from 'contexts/VideoCallContext'; import { ADDITIONAL_META_TYPE } from '@pushprotocol/restapi/src/lib/payloads'; -import { PushAPI, VideoCallStatus } from '@pushprotocol/restapi'; +import { VideoCallStatus } from '@pushprotocol/restapi'; import { showNotifcationToast } from 'components/reusables/toasts/toastController'; import { useSelector } from 'react-redux'; -const eventlistener = async (pushAPI: PushAPI, eventName: string, triggerFunc: (data) => void): Promise => { - pushAPI.stream.on(eventName, (data: any) => { - console.log('Stream Event Received', eventName); - console.log(data); - console.log('\n'); - triggerFunc(data); - }); -}; - const useSDKStream = () => { const { account } = useAccount(); const { userPushSDKInstance } = useSelector((state: any) => { diff --git a/src/index.tsx b/src/index.tsx index 69fc221d16..ae0a307172 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,50 +1,47 @@ // React + Web3 Essentials import { Web3OnboardProvider } from '@web3-onboard/react'; -import ReactDOM from 'react-dom/client' +import ReactDOM from 'react-dom/client'; // External Packages -import { ApolloClient, ApolloProvider, InMemoryCache } from "@apollo/client"; -import { Provider } from "react-redux"; -import { BrowserRouter } from "react-router-dom"; +import { Provider } from 'react-redux'; +import { BrowserRouter } from 'react-router-dom'; // Internal Components -import App from "./App"; +import App from './App'; import ErrorContextProvider from './contexts/ErrorContext'; import { VideoCallContextProvider } from './contexts/VideoCallContext'; -import "./index.css"; -import store from "./redux/store"; -import * as serviceWorker from "./serviceWorker"; +import './index.css'; +import store from './redux/store'; +import { unregister as unregisterServiceWorker } from './serviceWorker'; import GlobalContextProvider from './contexts/GlobalContext'; // Internal Configs -import * as dotenv from "dotenv"; +import { config as dotEnvConfig } from 'dotenv'; import { web3Onboard } from './connectors/web3Onboard'; import AppContextProvider from './contexts/AppContext'; +import { getPreviewBasePath } from '../basePath'; // enable environmental variables across the entire application -dotenv.config(); -// You should replace this uri with your own and put it into a .env file -const client = new ApolloClient({ - uri: "https://api.thegraph.com/subgraphs/name/epnsproject/epnsstaging", - cache: new InMemoryCache(), -}); +dotEnvConfig(); + +const publicURL = import.meta.env.PUBLIC_URL; + +const previewBasePath = getPreviewBasePath(); ReactDOM.createRoot(document.getElementById('root')!).render( - + - - - - - - - - - - - - - + + + + + + + + + + + ); @@ -52,4 +49,4 @@ ReactDOM.createRoot(document.getElementById('root')!).render( // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://bit.ly/CRA-PWA -serviceWorker.unregister(); +unregisterServiceWorker(); diff --git a/src/modules/airdrop/AirdropModule.tsx b/src/modules/airdrop/AirdropModule.tsx index 5b511f7921..5051589649 100644 --- a/src/modules/airdrop/AirdropModule.tsx +++ b/src/modules/airdrop/AirdropModule.tsx @@ -1,9 +1,8 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useState } from 'react'; +import { useState, useEffect } from 'react'; // External Packages -import ReactGA from 'react-ga'; import { BsChevronExpand } from 'react-icons/bs'; import { toast } from 'react-toastify'; import styled, { useTheme } from 'styled-components'; @@ -12,7 +11,7 @@ import styled, { useTheme } from 'styled-components'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import AirdropHelper from 'helpers/AirdropHelper'; -import { A, B, Button, Content, H2, H3, Item, Para, Section, Span } from 'primaries/SharedStyling'; +import { A, B, Button, H2, Item, Para, Section, Span } from 'primaries/SharedStyling'; import { useAccount } from 'hooks'; // Internal Configs @@ -26,13 +25,13 @@ const AirdropModule = () => { const { account, provider, chainId } = useAccount(); const onCoreNetwork = chainId === appConfig.coreContractChain; - const [controlAt, setControlAt] = React.useState(0); - const [loading, setLoading] = React.useState(true); - const [txInProgress, setTxInProgress] = React.useState(false); - const [distributorContract, setDistributorContract] = React.useState(null); - const [user, setUser] = React.useState(null); + const [controlAt] = useState(0); + const [loading, setLoading] = useState(true); + const [setTxInProgress] = useState(false); + const [distributorContract, setDistributorContract] = useState(null); + const [user, setUser] = useState(null); - const [showAnswers, setShowAnswers] = React.useState([]); + const [showAnswers, setShowAnswers] = useState([]); const toggleShowAnswer = (id) => { let newShowAnswers = [...showAnswers]; @@ -41,14 +40,14 @@ const AirdropModule = () => { setShowAnswers(newShowAnswers); }; - React.useEffect(() => { + useEffect(() => { if (!onCoreNetwork) { const url = window.location.origin; window.location.replace(`${url}/#/notavailable`); } }); - React.useEffect(() => { + useEffect(() => { if (!!(provider && account)) { let signer = provider.getSigner(account); console.debug(abis.distributor); @@ -59,7 +58,7 @@ const AirdropModule = () => { } }, [account, provider]); - React.useEffect(() => { + useEffect(() => { if (distributorContract) { checkClaim(); } @@ -131,8 +130,6 @@ const AirdropModule = () => { ); - const [darkMode, setDarkMode] = useState(false); - return ( { const { userPushSDKInstance } = useSelector((state: any) => { return state.user; }); - const { handleConnectWallet } = React.useContext(AppContext); + const { handleConnectWallet } = useContext(AppContext); const isChannelDetails = channelDetails && channelDetails !== 'unfetched'; @@ -92,7 +92,7 @@ const ChannelOwnerDashboard = () => { return { aliasAddress: aliasAddress, aliasVerified: isAliasVerified }; }; - React.useEffect(() => { + useEffect(() => { if (!onCoreNetwork || !aliasAddrFromContract || processingState === 0) return; intervalID = setInterval(async () => { diff --git a/src/modules/channels/ChannelsModule.tsx b/src/modules/channels/ChannelsModule.tsx index 4c0e649a88..8dd70bfb75 100644 --- a/src/modules/channels/ChannelsModule.tsx +++ b/src/modules/channels/ChannelsModule.tsx @@ -1,17 +1,15 @@ -// React + Web3 Essentials -import React, { useEffect, useState } from "react"; -import ReactGA from "react-ga"; +import ReactGA from 'react-ga'; // External Packages -import styled from "styled-components"; +import styled from 'styled-components'; // Internal Components -import ChannelProfile from "segments/ChannelProfile"; -import ViewChannels from "segments/ViewChannels"; +import ChannelProfile from 'segments/ChannelProfile'; +import ViewChannels from 'segments/ViewChannels'; // Internal Configs -import APP_PATHS from "config/AppPaths"; -import GLOBALS, { device, globalsMargin } from "config/Globals"; +import APP_PATHS from 'config/AppPaths'; +import GLOBALS, { device, globalsMargin } from 'config/Globals'; export enum ChannelTYPE { CHANNEL = 'Channel', @@ -31,7 +29,7 @@ const ChannelsModule = ({ channelID, loadTeaser, playTeaser }) => { playTeaser={playTeaser} minimal={channelID ? true : false} /> - {channelID && + {channelID && ( { minimal={false} profileType={ChannelTYPE.CHANNEL_PROFILE} /> - } + )} ); -} +}; export default ChannelsModule; -// css style +// css style const Container = styled.div` - align-items: stretch; - align-self: stretch; + align-items: stretch; + align-self: stretch; flex: 1; - background: ${(props) => props.theme.default.bg}; - border-top-left-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; - box-shadow: ${GLOBALS.ADJUSTMENTS.MODULE_BOX_SHADOW}; - display: flex; - flex-direction: column; - flex: initial; - justify-content: center; - position: relative; + background: ${(props) => props.theme.default.bg}; + border-top-left-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; + box-shadow: ${GLOBALS.ADJUSTMENTS.MODULE_BOX_SHADOW}; + display: flex; + flex-direction: column; + flex: initial; + justify-content: center; + position: relative; overflow: hidden; box-sizing: border-box; margin: ${GLOBALS.ADJUSTMENTS.MARGIN.BIG_MODULES.DESKTOP}; - height: calc(100vh - ${GLOBALS.CONSTANTS.HEADER_HEIGHT}px - ${globalsMargin.BIG_MODULES.DESKTOP.TOP} - ${globalsMargin.BIG_MODULES.DESKTOP.BOTTOM}); - + height: calc( + 100vh - ${GLOBALS.CONSTANTS.HEADER_HEIGHT}px - ${globalsMargin.BIG_MODULES.DESKTOP.TOP} - + ${globalsMargin.BIG_MODULES.DESKTOP.BOTTOM} + ); + @media ${device.laptop} { margin: ${GLOBALS.ADJUSTMENTS.MARGIN.BIG_MODULES.TABLET}; - height: calc(100vh - ${GLOBALS.CONSTANTS.HEADER_HEIGHT}px - ${globalsMargin.BIG_MODULES.TABLET.TOP} - ${globalsMargin.BIG_MODULES.TABLET.BOTTOM}); - border-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; - + height: calc( + 100vh - ${GLOBALS.CONSTANTS.HEADER_HEIGHT}px - ${globalsMargin.BIG_MODULES.TABLET.TOP} - + ${globalsMargin.BIG_MODULES.TABLET.BOTTOM} + ); + border-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} + ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; } @media ${device.mobileL} { margin: ${GLOBALS.ADJUSTMENTS.MARGIN.BIG_MODULES.MOBILE}; - height: calc(100vh - ${GLOBALS.CONSTANTS.HEADER_HEIGHT}px - ${globalsMargin.BIG_MODULES.MOBILE.TOP} - ${globalsMargin.BIG_MODULES.MOBILE.BOTTOM}); + height: calc( + 100vh - ${GLOBALS.CONSTANTS.HEADER_HEIGHT}px - ${globalsMargin.BIG_MODULES.MOBILE.TOP} - + ${globalsMargin.BIG_MODULES.MOBILE.BOTTOM} + ); border: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; - border-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} 0 0; - + border-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE} 0 0; } `; @@ -86,4 +92,4 @@ const Interface = styled.div` display: flex; overflow: hidden; -`; \ No newline at end of file +`; diff --git a/src/modules/chat/ChatModule.tsx b/src/modules/chat/ChatModule.tsx index 0ddeccba43..2e03ca5d2d 100644 --- a/src/modules/chat/ChatModule.tsx +++ b/src/modules/chat/ChatModule.tsx @@ -1,6 +1,6 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState, useRef, createContext } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; // External Packages @@ -11,40 +11,27 @@ import { ReactQueryDevtools } from 'react-query/devtools'; import { useSelector } from 'react-redux'; import { ToastOptions } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; -import { useClickAway } from 'react-use'; import styled, { useTheme } from 'styled-components'; // Internal Compoonents import ChatQR from 'components/chat/w2wChat/chatQR/chatQR'; import MobileView from 'components/chat/w2wChat/chatQR/mobileView'; import { CreateGroupModalContent } from 'components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent'; -import { GroupInfoModalContent } from 'components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent'; import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; -import LoaderSpinner, { - LOADER_OVERLAY, - LOADER_SPINNER_TYPE, - LOADER_TYPE, - PROGRESS_POSITIONING, -} from 'components/reusables/loaders/LoaderSpinner'; +import LoaderSpinner, { LOADER_OVERLAY, LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { AppContext } from 'contexts/AppContext'; import { VideoCallContext } from 'contexts/VideoCallContext'; -import { caip10ToWallet } from 'helpers/w2w'; import * as w2wHelper from 'helpers/w2w/'; -import { checkIfGroup, rearrangeMembers } from 'helpers/w2w/groupChat'; -import { checkIfIntent, getUpdatedChatAndIntent, getUpdatedGroupInfo } from 'helpers/w2w/user'; -import { useAccount, useDeviceWidthCheck, useSDKSocket } from 'hooks'; +import { useAccount, useDeviceWidthCheck } from 'hooks'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; import useToast from 'hooks/useToast'; import ChatSection from 'sections/chat/ChatSection'; import ChatSidebarSection from 'sections/chat/ChatSidebarSection'; import VideoCallSection from 'sections/video/VideoCallSection'; -import { ChatUserAppContext, Feeds, MessageIPFS, MessageIPFSWithCID, User, VideoCallInfoI } from 'types/chat'; +import { ChatUserAppContext, Feeds, User } from 'types/chat'; // Internal Configs -import UnlockProfile from 'components/chat/unlockProfile/UnlockProfile'; import GLOBALS, { device, globalsMargin } from 'config/Globals'; -import { appConfig } from 'config/index.js'; -import { GlobalContext } from 'contexts/GlobalContext'; export const ToastPosition: ToastOptions = { position: 'top-right', @@ -56,7 +43,7 @@ export const ToastPosition: ToastOptions = { progress: 0, }; -export const Context = React.createContext(null); +export const Context = createContext(null); // Create Header function Chat({ chatid }) { @@ -72,21 +59,11 @@ function Chat({ chatid }) { // Check if the URL ends with '/chat' and does not include a chat ID const isUserChatting = pathname.endsWith('/chat') && !pathname.includes('::chatid'); - const { account, chainId, provider, wallet } = useAccount(); + const { account, provider } = useAccount(); const { videoCallData } = useContext(VideoCallContext); - const { - blockedLoading, - setBlockedLoading, - getUser, - pgpPvtKey, - connectedUser, - setConnectedUser, - displayQR, - setDisplayQR, - handleConnectWallet, - } = useContext(AppContext); + const { setBlockedLoading, getUser, connectedUser, setConnectedUser, displayQR } = useContext(AppContext); const { userPushSDKInstance } = useSelector((state: any) => { return state.user; @@ -95,7 +72,7 @@ function Chat({ chatid }) { const theme = useTheme(); const [viewChatBox, setViewChatBox] = useState(false); - const [currentChat, setCurrentChat] = useState(); + const [currentChat] = useState(); const [selectedChatId, setSelectedChatId] = useState(); const [receivedIntents, setReceivedIntents] = useState([]); @@ -109,34 +86,11 @@ function Chat({ chatid }) { const [userShouldBeSearched, setUserShouldBeSearched] = useState(false); const [filteredUserData, setFilteredUserData] = useState([]); const [signerData, setSignerData] = useState(); - const { readOnlyWallet } = React.useContext(GlobalContext); const isMobile = useDeviceWidthCheck(600); const queryClient = new QueryClient({}); - const containerRef = React.useRef(null); - - // trigger chat participant open - const triggerChatParticipant = async (chatParticipant: string, chatId: string) => { - let formattedChatParticipant = chatParticipant; - let userPushInstance = userPushSDKInstance; - - if (!formattedChatParticipant.includes('.')) { - if (!(await ethers.utils.isAddress(caip10ToWallet(formattedChatParticipant)))) formattedChatParticipant = chatId; - } - let formattedchatId = reformatChatId(formattedChatParticipant); - - //If no PGP keys then connect the wallet. - if (!userPushInstance.readmode()) { - if (userPushInstance && !userPushInstance.readmode()) { - navigate(`/chat/${formattedchatId}`); - return formattedChatParticipant; - } - } else { - navigate(`/chat/${formattedchatId}`); - return formattedChatParticipant; - } - }; + const containerRef = useRef(null); useEffect(() => { setActiveTab(0); @@ -152,20 +106,10 @@ function Chat({ chatid }) { } }, [connectedUser, userPushSDKInstance]); - const groupInfoToast = useToast(); - - const { - isModalOpen: isUnlockProfileOpen, - showModal: showModal, - ModalComponent: UnlockProfileModalComponent, - } = useModalBlur(); + const { showModal: showModal } = useModalBlur(); const createGroupToast = useToast(); - const { - isModalOpen: isCreateGroupModalOpen, - showModal: showCreateGroupModal, - ModalComponent: CreateGroupModalComponent, - } = useModalBlur(); + const { showModal: showCreateGroupModal, ModalComponent: CreateGroupModalComponent } = useModalBlur(); const connectUser = async (): Promise => { const caip10: string = w2wHelper.walletToCAIP10({ account }); diff --git a/src/modules/claimGalxe/ClaimGalxeModule.tsx b/src/modules/claimGalxe/ClaimGalxeModule.tsx index 717e256a54..00e4dbacbf 100644 --- a/src/modules/claimGalxe/ClaimGalxeModule.tsx +++ b/src/modules/claimGalxe/ClaimGalxeModule.tsx @@ -1,6 +1,6 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -17,6 +17,7 @@ import 'react-toastify/dist/ReactToastify.min.css'; // Internal Configs import { abis, addresses, appConfig, CHAIN_DETAILS } from 'config/index.js'; import GLOBALS, { device, globalsMargin } from 'config/Globals'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; const ClaimGalxeModule = () => { const theme = useTheme(); @@ -149,7 +150,7 @@ const ClaimGalxeModule = () => { { - - + + diff --git a/src/modules/createChannel/CreateChannelModule.jsx b/src/modules/createChannel/CreateChannelModule.jsx index ccdf05cd49..2e1bc78938 100644 --- a/src/modules/createChannel/CreateChannelModule.jsx +++ b/src/modules/createChannel/CreateChannelModule.jsx @@ -1,10 +1,9 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, useContext } from 'react'; // External Packages import 'react-dropdown/style.css'; -import 'react-dropzone-uploader/dist/styles.css'; import { MdCallMade, MdError } from 'react-icons/md'; import styled, { css, ThemeProvider, useTheme } from 'styled-components'; import { useSelector } from 'react-redux'; @@ -30,7 +29,6 @@ import { abis, addresses, appConfig } from 'config/index.js'; import { handleLogoSizeLimitation, toDataURL } from 'helpers/LogoSizeHelper'; import { AppContext } from 'contexts/AppContext'; - // Constants const minStakeFees = 50; const coreChainId = appConfig.coreContractChain; @@ -42,18 +40,18 @@ function CreateChannelModule() { const { userPushSDKInstance } = useSelector((state) => { return state.user; }); - const {handleConnectWallet} = React.useContext(AppContext); + const { handleConnectWallet } = useContext(AppContext); const theme = useTheme(); const onCoreNetwork = CORE_CHAIN_ID === chainId; - const [processing, setProcessing] = React.useState(0); - const [processingInfo, setProcessingInfo] = React.useState(''); - - const [uploadDone, setUploadDone] = React.useState(false); - const [stakeFeesChoosen, setStakeFeesChoosen] = React.useState(false); - const [channelInfoDone, setChannelInfoDone] = React.useState(false); - const [chainDetails, setChainDetails] = React.useState(CORE_CHAIN_ID); - const [channelName, setChannelName] = React.useState(''); + const [processing, setProcessing] = useState(0); + const [processingInfo, setProcessingInfo] = useState(''); + + const [uploadDone, setUploadDone] = useState(false); + const [stakeFeesChoosen, setStakeFeesChoosen] = useState(false); + const [channelInfoDone, setChannelInfoDone] = useState(false); + const [chainDetails, setChainDetails] = useState(CORE_CHAIN_ID); + const [channelName, setChannelName] = useState(''); /* if channelExpiryDate is undefined -> channel is not time bound if channelExpiryDate is null -> channel is time bound but user hasnt entered the date @@ -61,19 +59,17 @@ function CreateChannelModule() { if channelExpiryDate is a date string -> channel is time bound and user has entered the date */ const [channelExpiryDate, setChannelExpiryDate] = useState(undefined); - const [channelAlias, setChannelAlias] = React.useState(''); - const [channelInfo, setChannelInfo] = React.useState(''); - const [channelURL, setChannelURL] = React.useState(''); - const [channelFile, setChannelFile] = React.useState(undefined); - const [channelStakeFees, setChannelStakeFees] = React.useState(minStakeFees); + const [channelAlias, setChannelAlias] = useState(''); + const [channelInfo, setChannelInfo] = useState(''); + const [channelURL, setChannelURL] = useState(''); + const [channelFile, setChannelFile] = useState(undefined); + const [channelStakeFees, setChannelStakeFees] = useState(minStakeFees); const [pushTokenAmountVal, setPushTokenAmountVal] = useState(''); const [txStatus, setTxStatus] = useState(2); - const [progress, setProgress] = React.useState(0); - const [progressInfo, setProgressInfo] = React.useState(''); - const [logoInfo, setLogoInfo] = React.useState(''); - const [errorInfo, setErrorInfo] = React.useState({name: '',description: '', address: '', url: ''}); - - + const [progress, setProgress] = useState(0); + const [progressInfo, setProgressInfo] = useState(''); + const [logoInfo, setLogoInfo] = useState(''); + const [errorInfo, setErrorInfo] = useState({ name: '', description: '', address: '', url: '' }); //image upload states const [view, setView] = useState(false); @@ -81,11 +77,11 @@ function CreateChannelModule() { const [imageType, setImageType] = useState(null); const [croppedImage, setCroppedImage] = useState(undefined); - const [stepFlow, setStepFlow] = React.useState(0); + const [stepFlow, setStepFlow] = useState(0); const channelToast = useToast(); //checking DAI for user - React.useEffect(() => { + useEffect(() => { if (!onCoreNetwork) return; const checkPushTokenApprovalFunc = async () => { let checkPushTokenApprovedAmount = new ethers.Contract(addresses.pushToken, abis.pushToken, provider); @@ -99,7 +95,7 @@ function CreateChannelModule() { }, []); // timer - // React.useEffect(() => { + // useEffect(() => { // const timer = setInterval(() => { // setProgress((oldProgress) => { // if (oldProgress === 100) { @@ -167,41 +163,44 @@ function CreateChannelModule() { const isAllFilledAndValid = () => { setErrorInfo(''); - if (isEmpty(channelName) || isEmpty(channelInfo) || isEmpty(channelURL) || (isEmpty(channelAlias) && chainDetails !== coreChainId)){ - if ( - isEmpty(channelName) - ) { - setErrorInfo(x => ({ + if ( + isEmpty(channelName) || + isEmpty(channelInfo) || + isEmpty(channelURL) || + (isEmpty(channelAlias) && chainDetails !== coreChainId) + ) { + if (isEmpty(channelName)) { + setErrorInfo((x) => ({ ...x, name: 'Please, enter the channel name.', })); } if (isEmpty(channelInfo)) { - setErrorInfo(x => ({ + setErrorInfo((x) => ({ ...x, description: 'Please, enter the channel description', })); } if (isEmpty(channelURL)) { - setErrorInfo(x => ({ + setErrorInfo((x) => ({ ...x, url: 'Please, enter the channel url', })); } if (isEmpty(channelAlias) && chainDetails !== coreChainId) { - setErrorInfo(x => ({ + setErrorInfo((x) => ({ ...x, - address:'Please, enter the channel address', + address: 'Please, enter the channel address', })); } - return false - } + return false; + } if (!isLengthValid(channelName, 125)) { - setErrorInfo(x => ({ + setErrorInfo((x) => ({ ...x, name: 'Channel Name should not exceed 125 characters! Please retry!', })); @@ -209,14 +208,14 @@ function CreateChannelModule() { return false; } if (!isLengthValid(channelURL, 125)) { - setErrorInfo(x => ({ + setErrorInfo((x) => ({ ...x, url: 'Channel Url should not exceed 125 characters! Please retry!', })); return false; } - if(chainDetails !== coreChainId && !isValidAddress(channelAlias)) { - setErrorInfo(x => ({ + if (chainDetails !== coreChainId && !isValidAddress(channelAlias)) { + setErrorInfo((x) => ({ ...x, address: 'Channel Alias address is invalid! Please enter a valid address!', })); @@ -224,7 +223,7 @@ function CreateChannelModule() { return false; } if (!isValidUrl(channelURL)) { - setErrorInfo(x => ({ + setErrorInfo((x) => ({ ...x, url: 'Channel URL is invalid! Please enter a valid url!', })); @@ -237,7 +236,7 @@ function CreateChannelModule() { const handleCreateChannel = async (e) => { // Check everything in order // skip this for now - + // e.preventDefault(); if (!userPushSDKInstance.signer) { @@ -248,14 +247,25 @@ function CreateChannelModule() { if (!isAllFilledAndValid()) { channelToast.showMessageToast({ toastTitle: 'Error', - toastMessage: `${errorInfo.name || errorInfo.description || errorInfo.address || errorInfo.url || "Please enter the channel details"}`, + toastMessage: `${ + errorInfo.name || + errorInfo.description || + errorInfo.address || + errorInfo.url || + 'Please enter the channel details' + }`, toastType: 'ERROR', - getToastIcon: (size) => , + getToastIcon: (size) => ( + + ), }); return false; } - + if (!channelFile) { setLogoInfo('Please upload logo of the channel'); @@ -263,7 +273,12 @@ function CreateChannelModule() { toastTitle: 'Error', toastMessage: `Please upload logo of the channel`, toastType: 'ERROR', - getToastIcon: (size) => , + getToastIcon: (size) => ( + + ), }); return false; @@ -293,7 +308,6 @@ function CreateChannelModule() { input = JSON.stringify(input); setProgress(0); console.debug(`input is ${input}`); - // const ipfs = require("nano-ipfs-store").at("https://ipfs.infura.io:5001"); setProcessingInfo('Loading...'); setProgressInfo('Please wait, payload is getting uploaded to IPFS.'); @@ -304,13 +318,13 @@ function CreateChannelModule() { console.debug('IPFS storagePointer:', storagePointer); // setProcessingInfo("Payload Uploaded, Approval to transfer DAI..."); //console.log(await ipfs.cat(storagePointer)); - + channelToast.showLoaderToast({ loaderMessage: 'Waiting for Confirmation...' }); setProcessingInfo('Payload Uploaded'); setProgressInfo('Please complete the transaction in your wallet to continue.'); - + setProgress(10); - + // Send Transaction // First Approve DAI var signer = provider.getSigner(account); @@ -335,17 +349,16 @@ function CreateChannelModule() { let contract = new ethers.Contract(addresses.epnscore, abis.epnscore, signer); - let channelType = CHANNEL_TYPE["GENERAL"]; // Open Channel + let channelType = CHANNEL_TYPE['GENERAL']; // Open Channel const identity = '1+' + storagePointer; // IPFS Storage Type and HASH const identityBytes = ethers.utils.toUtf8Bytes(identity); - setProgress(50); let timestampIfTimebound = 0; - if(channelExpiryDate) { + if (channelExpiryDate) { timestampIfTimebound = channelExpiryDate.getTime() / 1000; - channelType = CHANNEL_TYPE["TIMEBOUND"]; + channelType = CHANNEL_TYPE['TIMEBOUND']; } const tx = await contract.createChannelWithPUSH(channelType, identityBytes, fees, timestampIfTimebound, { @@ -361,7 +374,12 @@ function CreateChannelModule() { toastTitle: 'Error', toastMessage: `There was an error in creating the channel`, toastType: 'ERROR', - getToastIcon: (size) => , + getToastIcon: (size) => ( + + ), }); setProcessing(3); @@ -389,13 +407,18 @@ function CreateChannelModule() { }, 2000); } } catch (err) { - if (err.code === 4001 || err.code==="ACTION_REJECTED") { + if (err.code === 4001 || err.code === 'ACTION_REJECTED') { // EIP-1193 userRejectedRequest error channelToast.showMessageToast({ toastTitle: 'Error', toastMessage: `User denied message signature.`, toastType: 'ERROR', - getToastIcon: (size) => , + getToastIcon: (size) => ( + + ), }); setStepFlow(2); setProcessing(0); @@ -405,7 +428,12 @@ function CreateChannelModule() { toastTitle: 'Error', toastMessage: `There was an error in creating the channel`, toastType: 'ERROR', - getToastIcon: (size) => , + getToastIcon: (size) => ( + + ), }); console.error('Error --> %o', err); @@ -420,12 +448,12 @@ function CreateChannelModule() { useEffect(() => { if (croppedImage) { - console.debug("Image cropped",croppedImage); + console.debug('Image cropped', croppedImage); toDataURL(croppedImage, function (dataUrl) { const response = handleLogoSizeLimitation(dataUrl); - console.debug("response",response); + console.debug('response', response); if (response.success) { - console.debug("Cropped Image....",croppedImage); + console.debug('Cropped Image....', croppedImage); setChannelFile(croppedImage); } }); @@ -449,172 +477,186 @@ function CreateChannelModule() { return ( - - - - {/* + + + + {/* ⚠️ Channel Creation is currently Paused due to Smart Contract v1.5 Upgrade. Please check this article for more info. */} - - - Create Your Channel + + Create Your Channel + + + Push (EPNS) makes it extremely easy to open and maintain a genuine channel of communication with your + users. - - - Push (EPNS) makes it extremely easy to open and maintain a genuine channel of communication with your - users. - - - {txStatus === 0 && ( - -
Transaction failed due to one of the following reasons:
-

1. There is not enough PUSH in your wallet.

-

2. Gas price increased due to network congestion. Adjust gas limit manually.

- - )} -
-
- - {!onCoreNetwork ? ( - <> - -

Please select {networkName[appConfig.coreContractChain]} Network in your Wallet to create a channel.

-
- - - You will be asked to change your network to the Alias Network after

- channel creation is complete. -
- - -

What is an Alias Network?

- -
- - ) : ( - <> - {!(processing === 1 || processing === 3) &&(
- - = 0 ? 'active' : 'inactive'} active={stepFlow == 0 ? 'active' : 'inactive'} - onClick={() => setStepFlow(0)} - > -
Channel Info
- = 0 ? 'active' : 'inactive'} /> -
- = 1 ? 'active' : 'inactive'} active={stepFlow == 1 ? 'active' : 'inactive'} - onClick={() => setStepFlow(1)} - > -
Upload Logo
- = 1 ? 'active' : 'inactive'} /> -
- = 2 ? 'active' : 'inactive'} active={stepFlow == 2 ? 'active' : 'inactive'} - onClick={() => setStepFlow(2)} - > -
Staking Info
- = 2 ? 'active' : 'inactive'} /> -
- -
-
)} - - {/* Channel Entry */} - {stepFlow === 0 && ( - - - - {processing === 1 ? ( - + {txStatus === 0 && ( + +
Transaction failed due to one of the following reasons:
+

1. There is not enough PUSH in your wallet.

+

2. Gas price increased due to network congestion. Adjust gas limit manually.

+ + )} +
+
+ + {!onCoreNetwork ? ( + <> + +

+ Please select {networkName[appConfig.coreContractChain]} Network in your Wallet to create a channel. +

+
+ + + You will be asked to change your network to the Alias Network after

+ channel creation is complete. +
+ + +

What is an Alias Network?

+ +
+ + ) : ( + <> + {!(processing === 1 || processing === 3) && ( +
+ + = 0 ? 'active' : 'inactive'} + active={stepFlow == 0 ? 'active' : 'inactive'} + onClick={() => setStepFlow(0)} + > +
Channel Info
+ = 0 ? 'active' : 'inactive'} /> +
+ = 1 ? 'active' : 'inactive'} + active={stepFlow == 1 ? 'active' : 'inactive'} + onClick={() => setStepFlow(1)} + > +
Upload Logo
+ = 1 ? 'active' : 'inactive'} /> +
+ = 2 ? 'active' : 'inactive'} + active={stepFlow == 2 ? 'active' : 'inactive'} + onClick={() => setStepFlow(2)} + > +
Staking Info
+ = 2 ? 'active' : 'inactive'} /> +
+ +
+
+ )} + + {/* Channel Entry */} + {stepFlow === 0 && ( + + + + {processing === 1 ? ( + ) : null} - - )} - - {/* Image Upload Section */} - {stepFlow === 1 && ( - - + )} + + {/* Image Upload Section */} + {stepFlow === 1 && ( + + - {processing === 1 ? ( - + ) : null} + + )} + + {/* Stake Fees Section */} + {stepFlow === 2 && ( + + + + {processing === 1 ? ( + ) : null} - - )} - - {/* Stake Fees Section */} - {stepFlow === 2 && ( - - + )} + + {/* Channel Setup Progress */} + {(processing === 1 || processing === 3) && ( + - - {processing === 1 ? ( - - ) : null} - - )} - - {/* Channel Setup Progress */} - {(processing === 1 || processing === 3) && ( - - )} - - )} + )} + + )}
); @@ -633,41 +675,38 @@ const Step = styled.div` background: #e20880; `}; - ${({ type }) => - type === 'inactive' && - css` - `}; + ${({ type }) => type === 'inactive' && css``}; `; const Test = styled.div` display: flex; flex-direction: column; align-self: stretch; -` +`; const ItemWarning = styled.div` color: white; text-align: center; - background: #F22E2E; - flex: 1; - padding: 10px 10px; + background: #f22e2e; + flex: 1; + padding: 10px 10px; margin: 10px 0px; font-weight: 500; border-radius: 10px; -` +`; const ItemLink = styled.a` text-decoration: underline; color: white; -` +`; const BodySection = styled(Section)` - margin: 0px 0px 40px; - - .content { - padding: 10px 20px 10px; - .center { - .body-text { + margin: 0px 0px 40px; + + .content { + padding: 10px 20px 10px; + .center { + .body-text { color: ${(props) => props.theme.default.secondaryColor}; font-weight: 400; font-size: 16px; @@ -676,45 +715,45 @@ const BodySection = styled(Section)` letter-spacing: 0.03em; margin: 0px 0px; - @media (max-width: 768px){ + @media (max-width: 768px) { font-weight: 300; font-size: 14px; text-align: center; letter-spacing: 0em; line-height: 140%; - } + } } - } + } - @media (max-width: 768px){ - padding: 0px 0px 0px; - } - } - @media (max-width: 768px){ - margin: 0px 0px 0px; - } -` + @media (max-width: 768px) { + padding: 0px 0px 0px; + } + } + @media (max-width: 768px) { + margin: 0px 0px 0px; + } +`; const TextH2 = styled(H2)` text-transform: capitalize; margin: 20px 0px; .text { - font-weight: 400; + font-weight: 400; font-size: 32px; color: ${(props) => props.theme.color}; - @media (max-width: 768px){ + @media (max-width: 768px) { font-weight: 500; font-size: 26px; line-height: 141%; - } + } } - @media (max-width: 768px){ - text-transform: capitalize; - margin: 0px 0px 12px 0px; + @media (max-width: 768px) { + text-transform: capitalize; + margin: 0px 0px 12px 0px; } -` +`; const Line = styled.div` position: absolute; @@ -817,8 +856,8 @@ const Tab = styled.div` css` color: #e20880; @media (max-width: 768px) { - width: 100%; - } + width: 100%; + } `}; ${({ active }) => @@ -826,21 +865,21 @@ const Tab = styled.div` css` color: #e20880; @media (max-width: 768px) { - width: 100%; - } + width: 100%; + } `}; - ${({ active }) => + ${({ active }) => active === 'inactive' && css` - @media (max-width: 768px) { - width: 40%; + @media (max-width: 768px) { + width: 40%; div { font-size: 0px; - @media (max-width: 768px) { - } + @media (max-width: 768px) { + } } - } + } `}; `; diff --git a/src/modules/editChannel/EditChannel.tsx b/src/modules/editChannel/EditChannel.tsx index 69234cb84e..0d01881107 100644 --- a/src/modules/editChannel/EditChannel.tsx +++ b/src/modules/editChannel/EditChannel.tsx @@ -1,10 +1,10 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, useRef } from 'react'; // External Packages import { useSelector } from 'react-redux'; -import styled, { useTheme } from 'styled-components'; +import styled from 'styled-components'; // Internal Compoonents import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; @@ -12,16 +12,14 @@ import { useAccount, useDeviceWidthCheck } from 'hooks'; import FaucetInfo from 'components/FaucetInfo'; // Internal Configs -import { addresses, appConfig } from 'config/index.js'; +import { addresses } from 'config/index.js'; import GLOBALS, { device } from 'config/Globals'; import { Button } from '../../components/SharedStyling'; import EditChannelForms from './EditChannelForms'; import useToast from 'hooks/useToast'; import { MODAL_POSITION } from 'hooks/useModalBlur'; import { useClickAway } from 'react-use'; -import { LOADER_OVERLAY, LOADER_SPINNER_TYPE, LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import GLOABALS from 'config/Globals'; -import Spinner from 'components/reusables/spinners/SpinnerUnit'; +import { LOADER_SPINNER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import VerifyLogo from '../../assets/Vector.svg'; import { MdCheckCircle, MdError } from 'react-icons/md'; import uploadLogoModal from './uploadLogoModal'; @@ -32,31 +30,24 @@ import { isEmpty } from 'helpers/InputValidation'; import { isLengthValid, isValidUrl } from 'helpers/ValidationHelper'; import { handleLogoSizeLimitation, toDataURL } from 'helpers/LogoSizeHelper'; -export default function EditChannel({ - closeEditChannel, - UploadLogoComponent, - displayUplaodLogoModal, - isUploadLogoModalOpen, -}) { - const { chainId, account, provider } = useAccount(); +export default function EditChannel({ closeEditChannel, UploadLogoComponent, displayUplaodLogoModal }) { + const { account, provider } = useAccount(); const { channelDetails, - canVerify, aliasDetails: { isAliasVerified, aliasAddrFromContract }, } = useSelector((state) => state.admin); const { epnsReadProvider, epnsWriteProvider } = useSelector((state) => state.contracts); - const theme = useTheme(); // it can be fetched from contract for dynamic, but making it const will be fast const minFeesForAddChannel = 50; - const [channelName, setChannelName] = React.useState(channelDetails?.name); - const [channelInfo, setChannelInfo] = React.useState(channelDetails?.info); - const [channelURL, setChannelURL] = React.useState(channelDetails?.url); - const [channelLogo, setChannelLogo] = React.useState(channelDetails?.icon); - // const [channelFile, setChannelFile] = React.useState(undefined); - const [channelFile, setChannelFile] = React.useState(channelDetails?.icon); + const [channelName, setChannelName] = useState(channelDetails?.name); + const [channelInfo, setChannelInfo] = useState(channelDetails?.info); + const [channelURL, setChannelURL] = useState(channelDetails?.url); + const [channelLogo, setChannelLogo] = useState(channelDetails?.icon); + // const [channelFile, setChannelFile] = useState(undefined); + const [channelFile, setChannelFile] = useState(channelDetails?.icon); const [croppedImage, setCroppedImage] = useState(channelDetails?.icon); const [imageSrc, setImageSrc] = useState(croppedImage); const [imageType, setImageType] = useState(null); @@ -174,7 +165,7 @@ export default function EditChannel({ const isMobile = useDeviceWidthCheck(600); - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => { closeUploadModal(); }); diff --git a/src/modules/editChannel/EditChannelForms.tsx b/src/modules/editChannel/EditChannelForms.tsx index 1034db6f21..c3ae500827 100644 --- a/src/modules/editChannel/EditChannelForms.tsx +++ b/src/modules/editChannel/EditChannelForms.tsx @@ -1,218 +1,207 @@ -import React, { useState } from 'react'; import styled, { useTheme } from 'styled-components'; -import { - Button, - Content, - FormSubmision, - H3, - Input, - Item, - ItemH, - P, - Section, - Span, - TextField, -} from 'primaries/SharedStyling'; +import { FormSubmision, Input, Item, Section, Span, TextField } from 'primaries/SharedStyling'; import { AiFillExclamationCircle } from 'react-icons/ai'; -import { isAllFilledAndValid } from 'helpers/InputValidation'; import { isValidUrl } from 'helpers/ValidationHelper'; const EditChannelForms = ({ - channelName, - setChannelName, - channelInfo, - setChannelInfo, - channelURL, - setChannelURL, - editChannel, - errorInfo, - setErrorInfo + channelName, + setChannelName, + channelInfo, + setChannelInfo, + channelURL, + setChannelURL, + editChannel, + errorInfo, + setErrorInfo, }) => { + const theme = useTheme(); + // const [errorInfo, setErrorInfo] = useState<{name:string, description:string, address:string, url:string}>({name: '',description: '', address: '', url: ''}); + // const [urlDetails,setUrlDetails] = useState(channelURL); - const theme = useTheme(); - // const [errorInfo, setErrorInfo] = useState<{name:string, description:string, address:string, url:string}>({name: '',description: '', address: '', url: ''}); - // const [urlDetails,setUrlDetails] = useState(channelURL); - - - const ErrorMessage = ({ message }) => { - return ( - - - - {message} - - - ) - } - - const handleUrlChange = (e)=>{ - const response = e.target.value; - if (!isValidUrl(response)) { - setErrorInfo(x => ({ - ...x, - url: 'Channel URL is invalid! Please enter a valid url!', - })); - setChannelURL(response); - }else{ - setErrorInfo(''); - setChannelURL(response); - } - - - } - + const ErrorMessage = ({ message }) => { return ( - -
- - - - - - { - setChannelName(e.target.value); - }} - /> - + + + + {message} + + + ); + }; - + const handleUrlChange = (e) => { + const response = e.target.value; + if (!isValidUrl(response)) { + setErrorInfo((x) => ({ + ...x, + url: 'Channel URL is invalid! Please enter a valid url!', + })); + setChannelURL(response); + } else { + setErrorInfo(''); + setChannelURL(response); + } + }; - {errorInfo?.name && ()} + return ( + + + + + + + { + setChannelName(e.target.value); + }} + /> + + - - - - - {250 - channelInfo.length} - - - { - setChannelInfo(e.target.value.slice(0, 250)); - }} - autocomplete="off" - /> - - {errorInfo?.description && ()} + {errorInfo?.name && } - - - { - handleUrlChange(e); - // setChannelURL(e.target.value); - }} - /> - - {errorInfo?.url && ()} + + + + + {250 - channelInfo.length} + + + { + setChannelInfo(e.target.value.slice(0, 250)); + }} + autocomplete="off" + /> + + {errorInfo?.description && } - - - - ); + + + { + handleUrlChange(e); + // setChannelURL(e.target.value); + }} + /> + + {errorInfo?.url && } +
+ +
+ ); }; export default EditChannelForms; const Container = styled(Section)` - display:block; + display: block; - @media (max-width:425px){ - margin:28px 0px 0px 0px; - } + @media (max-width: 425px) { + margin: 28px 0px 0px 0px; + } - @media (max-width:600px){ - margin:18px 0px 0px 0px; - } + @media (max-width: 600px) { + margin: 18px 0px 0px 0px; + } `; const Form = styled(FormSubmision)` - height:inherit; -` + height: inherit; +`; const Label = styled.div` font-style: normal; @@ -224,9 +213,9 @@ const Label = styled.div` `; const FormContainer = styled(Item)` -width:100%; -align-items:flex-start; -font-style: normal; + width: 100%; + align-items: flex-start; + font-style: normal; font-weight: 400; font-size: 15px; line-height: 140%; @@ -276,4 +265,4 @@ font-style: normal; // background-color: #fff; // color: #d00775; // } -// `; \ No newline at end of file +// `; diff --git a/src/modules/editChannel/uploadLogoModal.tsx b/src/modules/editChannel/uploadLogoModal.tsx index 862bb5bd09..a332cabba9 100644 --- a/src/modules/editChannel/uploadLogoModal.tsx +++ b/src/modules/editChannel/uploadLogoModal.tsx @@ -1,33 +1,19 @@ import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import { Button, Item } from 'components/SharedStyling'; import ImageClipper from 'primaries/ImageClipper'; -import React, { useEffect, useRef, useState } from 'react'; +import { useRef } from 'react'; import { AiOutlineClose } from 'react-icons/ai'; -import { useSelector } from 'react-redux'; import { useClickAway } from 'react-use'; -import styled, { useTheme } from 'styled-components'; -import { device } from 'config/Globals'; +import styled from 'styled-components'; -const uploadLogoModal = ({ - onClose, InnerComponentProps -}) => { - const { - setChannelLogo, - channelLogo, - croppedImage, - setCroppedImage, - setChannelFile, - imageSrc, - setImageSrc, - imageType, - setImageType - } = InnerComponentProps; +const uploadLogoModal = ({ onClose, InnerComponentProps }) => { + const { setChannelLogo, croppedImage, setCroppedImage, imageSrc, setImageSrc, imageType, setImageType } = + InnerComponentProps; - const theme = useTheme(); const childRef = useRef(); - const containerRef = React.useRef(null); + const containerRef = useRef(null); useClickAway(containerRef, () => { - onClose() + onClose(); }); const handleDragOver = (e) => { @@ -39,7 +25,7 @@ const uploadLogoModal = ({ e.preventDefault(); e.stopPropagation(); //let's grab the image file - handleFile(e.dataTransfer, "transfer", e); + handleFile(e.dataTransfer, 'transfer', e); }; const handleFile = async (file, path, e) => { @@ -54,14 +40,16 @@ const uploadLogoModal = ({ reader.onloadend = function (e) { setImageSrc(reader.result); - setImageType(file?.files[0]?.type) + setImageType(file?.files[0]?.type); }; } }; return ( - + + + Please upload a PNG, JPG. Crop the image to resize to 128px. @@ -72,9 +60,7 @@ const uploadLogoModal = ({ onDrop={(e) => handleOnDrop(e)} className="bordered" > -
-
{croppedImage ? (
@@ -92,9 +78,7 @@ const uploadLogoModal = ({ className="cropper" imageSrc={imageSrc} imageType={imageType} - onImageCropped={(croppedImage) => - setCroppedImage(croppedImage) - } + onImageCropped={(croppedImage) => setCroppedImage(croppedImage)} width="128px" height="128px" ref={childRef} @@ -103,19 +87,20 @@ const uploadLogoModal = ({ )}
- -

- Drag and Drop or -

+ +

Drag and Drop or

-
{/*
*/} - - {croppedImage ? ( <> { - setChannelLogo(croppedImage) + setChannelLogo(croppedImage); onClose(); - }}>Upload Image + }} + > + Upload Image ) : ( @@ -145,94 +130,89 @@ const uploadLogoModal = ({ { childRef.current.showCroppedImage(); - }}>Crop Image + }} + > + Crop Image + )} -
- -
); }; export default uploadLogoModal; -const Container = styled.div` -` +const Container = styled.div``; const ModalContainer = styled.div` - display:flex; - flex-direction: column; - margin: 18px 10px 32px 10px; - -` + display: flex; + flex-direction: column; + margin: 18px 10px 32px 10px; +`; const ModalPrimaryText = styled.p` - margin:0px; - font-family: 'Strawford'; - font-style: normal; - font-weight: 400; - font-size: 15px; - line-height: 140%; - text-align: center; - color: ${(props) => props.theme.modalTextColor} -` + margin: 0px; + font-family: 'Strawford'; + font-style: normal; + font-weight: 400; + font-size: 15px; + line-height: 140%; + text-align: center; + color: ${(props) => props.theme.modalTextColor}; +`; const ModalNav = styled.div` - text-align: end; - width: 100%; -` + text-align: end; + width: 100%; +`; const CloseButton = styled(AiOutlineClose)` - cursor:pointer; - font-size:20px; - color: ${(props) => props.theme.modalTextColor}; - + cursor: pointer; + font-size: 20px; + color: ${(props) => props.theme.modalTextColor}; `; const DragText = styled(Item)` -display:flex; -flex-direction:row; -align-items:center; -` - -const ModalFooter = styled(ItemVV2)` + display: flex; + flex-direction: row; + align-items: center; +`; -` +const ModalFooter = styled(ItemVV2)``; const CropButton = styled(Button)` -font-family: 'Strawford'; -font-style: normal; -font-weight: 500; -font-size: 18px; -line-height: 22px; -display: flex; -border-radius: 15px; -align-items: center; -text-align: center; -background: #CF1C84; -color:#fff; -padding: 16px 27px; -width: 12rem; -` + font-family: 'Strawford'; + font-style: normal; + font-weight: 500; + font-size: 18px; + line-height: 22px; + display: flex; + border-radius: 15px; + align-items: center; + text-align: center; + background: #cf1c84; + color: #fff; + padding: 16px 27px; + width: 12rem; +`; const UploadButton = styled(Button)` -font-family: 'Strawford'; -font-style: normal; -font-weight: 500; -font-size: 18px; -line-height: 22px; -display: flex; -border-radius: 15px; -align-items: center; -text-align: center; -background: #CF1C84; -color:#fff; -padding: 16px 18px; -width: 12rem; -` + font-family: 'Strawford'; + font-style: normal; + font-weight: 500; + font-size: 18px; + line-height: 22px; + display: flex; + border-radius: 15px; + align-items: center; + text-align: center; + background: #cf1c84; + color: #fff; + padding: 16px 18px; + width: 12rem; +`; const Space = styled.div` width: 100%; @@ -243,7 +223,7 @@ const Space = styled.div` .bordered { display: flex; justify-content: center; - border: 1px dashed #8C99B0; + border: 1px dashed #8c99b0; align-items: flex-end; border-radius: 12px; padding: 0px 50px 0px 50px; @@ -263,21 +243,21 @@ const Space = styled.div` justify-content: space-evenly; align-items: center; margin-right: auto; - .crop-innderdiv{ - width: 100%; - background: ${(props) => props.theme.modalImageBgColor}; - border-radius: 20px; - padding: 17px 100px 17px 100px; - @media (max-width: 768px) { - padding: 17px 2px 17px; - } + .crop-innderdiv { + width: 100%; + background: ${(props) => props.theme.modalImageBgColor}; + border-radius: 20px; + padding: 17px 100px 17px 100px; + @media (max-width: 768px) { + padding: 17px 2px 17px; + } - margin-bottom: 12px; + margin-bottom: 12px; } div { - height:128px; - // width:128px; + height: 128px; + // width:128px; .croppedImage { border-radius: 20px; // @media (max-width: 768px) { @@ -329,7 +309,7 @@ const Space = styled.div` position: relative; cursor: pointer; border-radius: 4px; - color: #CF1C84; + color: #cf1c84; &:hover { text-decoration: underline; } @@ -340,7 +320,7 @@ const Space = styled.div` font-size: 15px; line-height: 140%; color: ${(props) => props.theme.modalTextColor}; - margin:0px 0.3rem 0px 0px; + margin: 0px 0.3rem 0px 0px; } } } diff --git a/src/modules/gov/GovModule.tsx b/src/modules/gov/GovModule.tsx index dd9348f52f..cc4d4fc5d3 100644 --- a/src/modules/gov/GovModule.tsx +++ b/src/modules/gov/GovModule.tsx @@ -1,12 +1,12 @@ // React + Web3 Essentials import { ethers } from 'ethers'; -import React, { useState } from 'react'; +import { useState, useEffect, useContext } from 'react'; // External Packages import ReactGA from 'react-ga'; import { BsChevronExpand } from 'react-icons/bs'; import { toast } from 'react-toastify'; -import styled, { css, ThemeProvider, useTheme } from 'styled-components'; +import styled, { css, useTheme } from 'styled-components'; // Internal Components import { toolingPostReq } from 'api/index'; @@ -15,7 +15,7 @@ import { GAS_LIMIT, PUSH_BALANCE_TRESHOLD } from 'components/ViewDelegateeItem'; import EPNSCoreHelper from 'helpers/EPNSCoreHelper'; import Blockies from 'primaries/BlockiesIdenticon'; import InfoTooltip from 'primaries/InfoTooltip'; -import { A, B, Button, Content, H2, H3, Input, Item, ItemH, LI, Section, Span, UL } from 'primaries/SharedStyling'; +import { A, B, Button, H2, H3, Input, Item, ItemH, LI, Section, Span, UL } from 'primaries/SharedStyling'; import LoaderSpinner from 'components/reusables/loaders/LoaderSpinner'; import ViewDelegateeItem from 'components/ViewDelegateeItem'; import { createTransactionObject } from 'helpers/GaslessHelper'; @@ -42,32 +42,32 @@ const GovModule = () => { // setup theme (styled components) const theme = useTheme(); - const { web3NameList }: AppContextType = React.useContext(AppContext); + const { web3NameList }: AppContextType = useContext(AppContext); const { account, provider, chainId } = useAccount(); + const onCoreNetwork = chainId === appConfig.coreContractChain; - const [dashboardLoading, setDashboardLoading] = React.useState(true); - const [delegateesLoading, setDelegateesLoading] = React.useState(true); - - const [txInProgress, setTxInProgress] = React.useState(false); - const [controlAt, setControlAt] = React.useState(0); - const [delegateesObject, setDelegateesObject] = React.useState({}); - const [pushDelegatees, setPushDelegatees] = React.useState([]); - const [pushNominees, setPushNominees] = React.useState([]); - const [epnsToken, setEpnsToken] = React.useState(null); - const [tokenBalance, setTokenBalance] = React.useState(null); - const [prettyTokenBalance, setPrettyTokenBalance] = React.useState(null); - - const [showDelegateePrompt, setShowDelegateePrompt] = React.useState(false); - const [delegatee, setDelegatee] = React.useState(null); - - const [showAnswers, setShowAnswers] = React.useState([]); - const [selfVotingPower, setSelfVotingPower] = React.useState(null); - const [newDelegateeAddress, setNewDelegateeAddress] = React.useState('0x'); - const [newDelegateeVotingPower, setNewDelegateeVotingPower] = React.useState(null); - const [signerObject, setSignerObject] = React.useState(null); + const [dashboardLoading, setDashboardLoading] = useState(true); + const [delegateesLoading, setDelegateesLoading] = useState(true); + const [txInProgress, setTxInProgress] = useState(false); + const [controlAt, setControlAt] = useState(0); + const [delegateesObject, setDelegateesObject] = useState({}); + const [pushDelegatees, setPushDelegatees] = useState([]); + const [pushNominees, setPushNominees] = useState([]); + const [epnsToken, setEpnsToken] = useState(null); + const [tokenBalance, setTokenBalance] = useState(null); + const [prettyTokenBalance, setPrettyTokenBalance] = useState(null); + + const [showDelegateePrompt, setShowDelegateePrompt] = useState(false); + const [delegatee, setDelegatee] = useState(null); + + const [showAnswers, setShowAnswers] = useState([]); + const [selfVotingPower, setSelfVotingPower] = useState(null); + const [newDelegateeAddress, setNewDelegateeAddress] = useState('0x'); + const [newDelegateeVotingPower, setNewDelegateeVotingPower] = useState(null); + const [signerObject, setSignerObject] = useState(null); const [gaslessInfo, setGaslessInfo] = useState(null); - const [transactionMode, setTransactionMode] = React.useState('gasless'); + const [transactionMode, setTransactionMode] = useState('gasless'); // Resolving web3 names useResolveWeb3Name(account); @@ -79,21 +79,21 @@ const GovModule = () => { setShowAnswers(newShowAnswers); }; - React.useEffect(() => { + useEffect(() => { if (!onCoreNetwork) { const url = window.location.origin; window.location.replace(`${url}/#/notavailable`); } }); - React.useEffect(() => { + useEffect(() => { toolingPostReq('/gov/prev_delegation', { walletAddress: account }).then((res) => { console.debug('result', res.data.user); setGaslessInfo(res.data.user); }); }, []); - React.useEffect(() => { + useEffect(() => { console.debug(account); if (!!(provider && account)) { let signer = provider.getSigner(account); @@ -103,17 +103,17 @@ const GovModule = () => { } }, [account]); - React.useEffect(() => { + useEffect(() => { if (epnsToken) { getMyInfo(); } }, [epnsToken, account, provider, prettyTokenBalance, tokenBalance]); - React.useEffect(() => { + useEffect(() => { setDashboardLoading(false); }, [account]); - React.useEffect(() => { + useEffect(() => { if (!epnsToken) return; const delegateesList = Object.values(delegateesJSON); // write helper function to sort by voting power diff --git a/src/modules/internal/InternalDevModule.tsx b/src/modules/internal/InternalDevModule.tsx index 7bb3fc00db..2c464228bc 100644 --- a/src/modules/internal/InternalDevModule.tsx +++ b/src/modules/internal/InternalDevModule.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import { toast } from 'react-toastify'; @@ -18,7 +18,7 @@ import { ButtonV2, ItemVV2, SectionV2, SpanV2 } from 'components/reusables/Share import Spinner from 'components/reusables/spinners/SpinnerUnit'; import { showNotifcationToast } from 'components/reusables/toasts/toastController'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; -import { DemoModalContent} from './DemoModalContent'; +import { DemoModalContent } from './DemoModalContent'; // Internal Configs import GLOBALS, { device } from 'config/Globals'; @@ -110,11 +110,7 @@ const InternalDevModule = () => { ModalComponent: LocalScreenDemoModalComponent, } = useModalBlur(); - const { - isModalOpen: isFullScreenDemoModalOpen, - showModal: showFullScreenDemoModal, - ModalComponent: FullScreenDemoModalComponent, - } = useModalBlur(); + const { showModal: showFullScreenDemoModal, ModalComponent: FullScreenDemoModalComponent } = useModalBlur(); return ( @@ -126,21 +122,21 @@ const InternalDevModule = () => { flex="initial" borderRadius="15px" padding="20px 20px" - onClick={ showFullScreenDemoModal} + onClick={showFullScreenDemoModal} > Show Full Screen Modal - + - {/* Local Screen useModalBlur Component */} - - {isLocalScreenDemoModalOpen && {randomText.slice(0,70)}} + {/* Local Screen useModalBlur Component */} + + {isLocalScreenDemoModalOpen && {randomText.slice(0, 70)}} { - + - {/* Progess Bar Component */} + {/* Progess Bar Component */} props.theme.default.secondaryBg}; diff --git a/src/modules/receiveNotifs/MetamaskPushSnapModal.tsx b/src/modules/receiveNotifs/MetamaskPushSnapModal.tsx index d9a7b34124..ec849c198d 100644 --- a/src/modules/receiveNotifs/MetamaskPushSnapModal.tsx +++ b/src/modules/receiveNotifs/MetamaskPushSnapModal.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useState, useContext } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -29,7 +29,7 @@ const MetamaskPushSnapModal = ({ onClose, closeEnabled = true }: { onClose: () = hrsLeft: 0, }); - const { setSnapState, SnapState } = React.useContext(AppContext); + const { setSnapState, SnapState } = useContext(AppContext); const handleCloseModal = () => { var uri = window.location.toString(); diff --git a/src/modules/receiveNotifs/ReceiveNotifsModule.tsx b/src/modules/receiveNotifs/ReceiveNotifsModule.tsx index 0a51ca8d46..d6fab13711 100644 --- a/src/modules/receiveNotifs/ReceiveNotifsModule.tsx +++ b/src/modules/receiveNotifs/ReceiveNotifsModule.tsx @@ -1,32 +1,27 @@ -// React + Web3 Essentials -import React from "react"; - // External Packages -import ReactGA from "react-ga"; -import styled, { useTheme } from "styled-components"; +import ReactGA from 'react-ga'; +import styled from 'styled-components'; // Internal Components -import { ItemVV2 } from "components/reusables/SharedStylingV2"; -import { H2, Item, Section, Span } from "../../primaries/SharedStyling"; -import Info from "segments/Info"; +import { ItemVV2 } from 'components/reusables/SharedStylingV2'; +import { Section } from '../../primaries/SharedStyling'; // Internal Configs -import GLOBALS, { device, globalsMargin } from "config/Globals"; -import useModalBlur, { MODAL_POSITION } from "hooks/useModalBlur"; -import MetamaskPushSnapModal from "./MetamaskPushSnapModal"; +import GLOBALS, { device } from 'config/Globals'; +import MetamaskPushSnapModal from './MetamaskPushSnapModal'; // Create Header function ReceiveNotifsModule() { - ReactGA.pageview("/receive"); - - // get theme - const theme = useTheme(); + ReactGA.pageview('/receive'); // Render return ( - {}} closeEnabled={false} /> + {}} + closeEnabled={false} + /> ); @@ -34,19 +29,19 @@ function ReceiveNotifsModule() { // css style const Container = styled(Section)` - align-items: center; - align-self: center; - background: ${(props) => props.theme.default.bg}; - border-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; - box-shadow: ${GLOBALS.ADJUSTMENTS.MODULE_BOX_SHADOW}; - display: flex; - flex-direction: column; - flex: initial; - justify-content: center; + align-items: center; + align-self: center; + background: ${(props) => props.theme.default.bg}; + border-radius: ${GLOBALS.ADJUSTMENTS.RADIUS.LARGE}; + box-shadow: ${GLOBALS.ADJUSTMENTS.MODULE_BOX_SHADOW}; + display: flex; + flex-direction: column; + flex: initial; + justify-content: center; max-width: 1200px; width: auto; padding: ${GLOBALS.ADJUSTMENTS.PADDING.BIG}; - position: relative; + position: relative; margin: ${GLOBALS.ADJUSTMENTS.MARGIN.MINI_MODULES.DESKTOP}; @media ${device.laptop} { @@ -60,6 +55,5 @@ const Container = styled(Section)` } `; - // Export Default export default ReceiveNotifsModule; diff --git a/src/modules/snap/PushSnapModal.tsx b/src/modules/snap/PushSnapModal.tsx index e8f04232d7..b6ee3f3cc3 100644 --- a/src/modules/snap/PushSnapModal.tsx +++ b/src/modules/snap/PushSnapModal.tsx @@ -1,14 +1,13 @@ +import { useState } from 'react'; import SnapExample from 'assets/snap/SnapExample.svg?react'; import InfoLogo from 'assets/snap/spam-icon.svg?react'; import { Image, Section } from 'components/SharedStyling'; import { ButtonV2, H2V2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import React, { useState } from 'react'; import styled from 'styled-components'; const PushSnapModal = () => { const [loading, setLoading] = useState(false); - const [walletConnected, setWalletConnected] = useState(false); const connectToMetamask = () => { setLoading(!loading); diff --git a/src/modules/snap/SnapModule.tsx b/src/modules/snap/SnapModule.tsx index 5b9c3c2e21..07023a46e1 100644 --- a/src/modules/snap/SnapModule.tsx +++ b/src/modules/snap/SnapModule.tsx @@ -1,8 +1,7 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState, useContext } from 'react'; // External Packages -import ReactGA from 'react-ga'; import { useNavigate } from 'react-router-dom'; import styled, { useTheme } from 'styled-components'; @@ -14,8 +13,7 @@ import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderS import { AppContext } from 'contexts/AppContext'; import { useAccount } from 'hooks'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; -import Info from 'segments/Info'; -import { H2, Image, Item, Section, Span } from '../../primaries/SharedStyling'; +import { Image, Section } from '../../primaries/SharedStyling'; // Internal Configs import ActiveIcon from 'assets/snap/ActiveIcon.svg'; @@ -34,7 +32,7 @@ const SnapModule = ({ route }) => { const [walletConnected, setWalletConnected] = useState(false); const [addedAddress, setAddedAddress] = useState(false); - const { showMetamaskPushSnap, setSnapState, setSnapInstalled, snapInstalled } = React.useContext(AppContext); + const { showMetamaskPushSnap, setSnapState, setSnapInstalled, snapInstalled } = useContext(AppContext); const { account, provider } = useAccount(); diff --git a/src/modules/space/SpaceModule.tsx b/src/modules/space/SpaceModule.tsx index 2d0a47255e..4258feda32 100644 --- a/src/modules/space/SpaceModule.tsx +++ b/src/modules/space/SpaceModule.tsx @@ -1,37 +1,19 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; // External Packages import styled from 'styled-components'; -// Internal Components -// import { SpaceBoxSection, SpaceSidebarSection } from 'sections/space'; -// import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; - // Internal Configs import GLOBALS, { device, globalsMargin } from '../../config/Globals'; import * as w2wHelper from 'helpers/w2w/'; -// import { SpaceGlobalContext, SpaceLocalContext, SpaceLocalContextProvider } from 'contexts'; -// import { getSpaceRequests, getSpaces } from 'services/space'; -// import { getSpaceRequestsFromIndexedDB, getSpacesFromIndexedDB } from 'helpers/space'; -// import { SpaceInfoModalContent } from 'components/space/spaceModals/spaceInfoModal'; -// import useToast from 'hooks/useToast'; -// import MemberMenuModal from 'components/space/spaceModals/MemberMenu/MemberMenuModal'; -// import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; -// import CreateSpaceModal from 'components/space/spaceModals/createSpaceModals/CreateSpaceModal'; -// import SpaceNotification from 'components/space/spaceNotification/SpaceNotification'; -// import { useDeviceWidthCheck } from 'hooks/useDeviceWidthCheck'; import SpaceFeedSection from 'sections/space/SpaceFeedSection'; import { appConfig } from 'config/index.js'; -import * as PushAPI from '@pushprotocol/restapi'; -import { ConnectedUser, User } from 'types/chat'; import LoaderSpinner from 'primaries/LoaderSpinner'; -import { LOADER_OVERLAY, LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { Item } from 'primaries/SharedStyling'; +import { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import { useAccount, useSDKSocket } from 'hooks'; -import { SpaceContext } from 'contexts/SpaceContext'; import { AppContext } from 'contexts/AppContext'; export const SpaceModule = ({ spaceid }) => { @@ -39,8 +21,7 @@ export const SpaceModule = ({ spaceid }) => { const [isLoading, setIsLoading] = useState(true); - const { getUser, connectedUser, setConnectedUser, pgpPvtKey, setPgpPvtKey, createUserIfNecessary } = - useContext(AppContext); + const { getUser, connectedUser, setConnectedUser } = useContext(AppContext); useSDKSocket({ account, chainId, env: appConfig.appEnv }); diff --git a/src/modules/yield/YieldFarmingModule.tsx b/src/modules/yield/YieldFarmingModule.tsx index 2214efcd25..5b173e8ad1 100644 --- a/src/modules/yield/YieldFarmingModule.tsx +++ b/src/modules/yield/YieldFarmingModule.tsx @@ -4,7 +4,6 @@ import React from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; -import { CiWarning } from 'react-icons/ci'; // Internal Compoonents import PoolCard from 'components/PoolCard'; diff --git a/src/modules/yield/YieldFarmingModuleV2.tsx b/src/modules/yield/YieldFarmingModuleV2.tsx index c6fa79d9e4..c5f2e52b45 100644 --- a/src/modules/yield/YieldFarmingModuleV2.tsx +++ b/src/modules/yield/YieldFarmingModuleV2.tsx @@ -1,20 +1,19 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Compoonents -import { ItemHV2, ItemVV2, SectionV2, SpanV2 } from 'components/reusables/SharedStylingV2'; +import { ItemHV2, SectionV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import DeprecatedYieldFarming from 'sections/yield/DeprecatedYieldFarming'; import NewYieldFarming from 'sections/yield/NewYieldFarming'; import { useAccount } from 'hooks'; // Internal Configs -import { abis, addresses, appConfig } from 'config/index.js'; +import { appConfig } from 'config/index.js'; import GLOBALS, { device, globalsMargin } from 'config/Globals'; -import { ethers } from 'ethers'; import useModalBlur, { MODAL_POSITION } from 'hooks/useModalBlur'; import YieldFarmChainError from 'components/YieldFarmChainError'; diff --git a/src/pages/AirdropPage.tsx b/src/pages/AirdropPage.tsx index 7575329fb3..7f30e839e3 100644 --- a/src/pages/AirdropPage.tsx +++ b/src/pages/AirdropPage.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages import ReactGA from 'react-ga'; import styled from 'styled-components'; diff --git a/src/pages/ChannelDashboardPage.jsx b/src/pages/ChannelDashboardPage.jsx index 147e91cfbf..46da05c9b6 100644 --- a/src/pages/ChannelDashboardPage.jsx +++ b/src/pages/ChannelDashboardPage.jsx @@ -1,16 +1,16 @@ // React + Web3 Essentials -import React, { useState } from "react"; +import { useState } from 'react'; // External Packages -import ReactGA from "react-ga"; +import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; -import ChannelDashboardModule from "modules/channelDashboard/channelDashboardModule"; +import ChannelDashboardModule from 'modules/channelDashboard/channelDashboardModule'; // Internal Configs -import GLOBALS from "config/Globals"; +import GLOBALS from 'config/Globals'; // Other Information section const ChannelDashboardPage = () => { @@ -20,7 +20,7 @@ const ChannelDashboardPage = () => { ); -} +}; export default ChannelDashboardPage; // This defines the page settings, toggle align-self to center if not covering entire stuff, align-items to place them at center @@ -29,5 +29,5 @@ const Container = styled(SectionV2)` flex: 1; flex-direction: column; align-self: stretch; - justify-content:flex-start; + justify-content: flex-start; `; diff --git a/src/pages/ChannelsPage.jsx b/src/pages/ChannelsPage.jsx index d6ecfb6a6b..3de921cb5d 100644 --- a/src/pages/ChannelsPage.jsx +++ b/src/pages/ChannelsPage.jsx @@ -1,17 +1,14 @@ -// React + Web3 Essentials -import React, { useEffect } from "react"; - // External Packages import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; -import ChannelsModule from "modules/channels/ChannelsModule"; +import ChannelsModule from 'modules/channels/ChannelsModule'; // Internal Configs -import APP_PATHS from "config/AppPaths"; -import GLOBALS from "config/Globals"; +import APP_PATHS from 'config/AppPaths'; +import GLOBALS from 'config/Globals'; // Other Information section const ChannelsPage = ({ loadTeaser, playTeaser, channelID }) => { @@ -21,10 +18,14 @@ const ChannelsPage = ({ loadTeaser, playTeaser, channelID }) => { // RENDER return ( - + ); -} +}; export default ChannelsPage; // This defines the page settings, toggle align-self to center if not covering entire stuff, align-items to place them at center diff --git a/src/pages/ClaimGalxePage.tsx b/src/pages/ClaimGalxePage.tsx index ae4ff71634..23498c2b26 100644 --- a/src/pages/ClaimGalxePage.tsx +++ b/src/pages/ClaimGalxePage.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages import ReactGA from 'react-ga'; import styled from 'styled-components'; diff --git a/src/pages/FAQPage.tsx b/src/pages/FAQPage.tsx index 48715970d9..b02544b2a3 100644 --- a/src/pages/FAQPage.tsx +++ b/src/pages/FAQPage.tsx @@ -1,17 +1,10 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages -import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; import FaqModule from 'modules/faq/FaqModule'; -// Internal Configs -import GLOBALS from 'config/Globals'; - // Other Information section const FAQPage = () => { // RENDER diff --git a/src/pages/GovPage.tsx b/src/pages/GovPage.tsx index 385dbc3946..f9051ce614 100644 --- a/src/pages/GovPage.tsx +++ b/src/pages/GovPage.tsx @@ -1,5 +1,3 @@ -import React from 'react'; - import { SectionV2 } from 'components/reusables/SharedStylingV2'; import GovModule from 'modules/gov/GovModule'; import styled from 'styled-components'; diff --git a/src/pages/InboxPage.jsx b/src/pages/InboxPage.jsx index 183baa3042..c8674ddc8a 100644 --- a/src/pages/InboxPage.jsx +++ b/src/pages/InboxPage.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState } from 'react'; import { useLocation, useParams } from 'react-router-dom'; // External Packages diff --git a/src/pages/ReceiveNotifsPage.jsx b/src/pages/ReceiveNotifsPage.jsx index e4c1696186..72e5f8edc2 100644 --- a/src/pages/ReceiveNotifsPage.jsx +++ b/src/pages/ReceiveNotifsPage.jsx @@ -1,16 +1,16 @@ // React + Web3 Essentials -import React, { useState } from "react"; +import { useState } from 'react'; // External Packages -import ReactGA from "react-ga"; +import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; -import ReceiveNotifsModule from "modules/receiveNotifs/ReceiveNotifsModule"; +import ReceiveNotifsModule from 'modules/receiveNotifs/ReceiveNotifsModule'; // Internal Configs -import GLOBALS from "config/Globals"; +import GLOBALS from 'config/Globals'; // Other Information section const ReceiveNotifsPage = () => { @@ -20,7 +20,7 @@ const ReceiveNotifsPage = () => { ); -} +}; export default ReceiveNotifsPage; // This defines the page settings, toggle align-self to center if not covering entire stuff, align-items to place them at center diff --git a/src/pages/SendNotifsPage.tsx b/src/pages/SendNotifsPage.tsx index c009ca2f11..331eab14fd 100644 --- a/src/pages/SendNotifsPage.tsx +++ b/src/pages/SendNotifsPage.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages import styled from 'styled-components'; @@ -8,9 +5,6 @@ import styled from 'styled-components'; import { SectionV2 } from 'components/reusables/SharedStylingV2'; import SendNotifsModule from 'modules/sendNotifs/SendNotifsModule'; -// Internal Configs -import GLOBALS from 'config/Globals'; - // Page structure const SendNotifsPage = () => { // RENDER diff --git a/src/pages/SnapPage.tsx b/src/pages/SnapPage.tsx index 0b456a1899..6227a8ef0b 100644 --- a/src/pages/SnapPage.tsx +++ b/src/pages/SnapPage.tsx @@ -1,15 +1,10 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages -import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; // Internal Configs -import GLOBALS from 'config/Globals'; import SnapModule from 'modules/snap/SnapModule'; import { useParams } from 'react-router-dom'; diff --git a/src/pages/SpacePage.tsx b/src/pages/SpacePage.tsx index e0e412cea1..1cd4bfa256 100644 --- a/src/pages/SpacePage.tsx +++ b/src/pages/SpacePage.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React, { useContext, useEffect } from 'react'; - // External Packages import styled from 'styled-components'; diff --git a/src/pages/SupportPage.tsx b/src/pages/SupportPage.tsx index 2cef7b6089..32bb449332 100644 --- a/src/pages/SupportPage.tsx +++ b/src/pages/SupportPage.tsx @@ -1,17 +1,9 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - -// External Packages -import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; import { SupportModule } from 'modules/support/SupportModule'; -// Internal Configs -import GLOBALS from 'config/Globals'; - // Other Information section const SupportPage = () => { // RENDER diff --git a/src/pages/TutorialPage.tsx b/src/pages/TutorialPage.tsx index d6626007a6..3f08c5fe80 100644 --- a/src/pages/TutorialPage.tsx +++ b/src/pages/TutorialPage.tsx @@ -1,17 +1,10 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // Extaernal Packages -import ReactGA from 'react-ga'; import styled from 'styled-components'; // Internal Components import { SectionV2 } from 'components/reusables/SharedStylingV2'; import TutorialModule from 'modules/tutorial/TutorialModule'; -// Internal Configs -import GLOBALS from 'config/Globals'; - // Other Information section const TutorialPage = () => { // RENDER diff --git a/src/primaries/AutoImageClipper.tsx b/src/primaries/AutoImageClipper.tsx index f2d572d244..8a4e15e4f3 100644 --- a/src/primaries/AutoImageClipper.tsx +++ b/src/primaries/AutoImageClipper.tsx @@ -1,141 +1,141 @@ // React + Web3 Essentials -import React, { Fragment, useCallback, useState } from "react"; +import { Fragment, useCallback, useState, useEffect } from 'react'; // External Packages -import Cropper from "react-easy-crop"; -import styledComponents from "styled-components"; -import Resizer from "react-image-file-resizer"; +import Cropper from 'react-easy-crop'; +import styledComponents from 'styled-components'; +import Resizer from 'react-image-file-resizer'; type CropType = { - x: number; - y: number; -} + x: number; + y: number; +}; type CroppedAreaPixels = { - height: number; - width: number; - x: number; - y: number; -} + height: number; + width: number; + x: number; + y: number; +}; const AutoImageClipper = (props) => { - const { imageSrc, onImageCropped, width, height } = props; - const [crop, setCrop] = useState({ x: 0, y: 0 }); - const [zoom, setZoom] = useState(1); - const [croppedAreaPixels, setCroppedAreaPixels] = useState(null); - const [croppedImage, setCroppedImage] = useState(null); - const onCropComplete = useCallback((croppedArea, croppedAreaPixels) => { - setCroppedAreaPixels(croppedAreaPixels); - }, []); + const { imageSrc, onImageCropped, width, height } = props; + const [crop, setCrop] = useState({ x: 0, y: 0 }); + const [zoom, setZoom] = useState(1); + const [croppedAreaPixels, setCroppedAreaPixels] = useState(null); + const [croppedImage, setCroppedImage] = useState(null); + const onCropComplete = useCallback((croppedArea, croppedAreaPixels) => { + setCroppedAreaPixels(croppedAreaPixels); + }, []); - React.useEffect(() => { - async function showCroppedImage() { - try { - if (imageSrc) { - const croppedImage = await getCroppedImg(imageSrc, croppedAreaPixels); - const image = await resizeFile(croppedImage); - onImageCropped(image); - } else { - return "Nothing"; - } - } catch (e) { - console.error(e); - } + useEffect(() => { + async function showCroppedImage() { + try { + if (imageSrc) { + const croppedImage = await getCroppedImg(imageSrc, croppedAreaPixels); + const image = await resizeFile(croppedImage); + onImageCropped(image); + } else { + return 'Nothing'; } - showCroppedImage(); - }, [crop]); + } catch (e) { + console.error(e); + } + } + showCroppedImage(); + }, [crop]); - async function getCroppedImg(imageSrc, pixelCrop) { - const image = await createImage(imageSrc); - const canvas = document.createElement("canvas"); - canvas.width = pixelCrop?.width; - canvas.height = pixelCrop?.height; - const ctx = canvas.getContext("2d"); - const fileName = "none.jpg"; + async function getCroppedImg(imageSrc, pixelCrop) { + const image = await createImage(imageSrc); + const canvas = document.createElement('canvas'); + canvas.width = pixelCrop?.width; + canvas.height = pixelCrop?.height; + const ctx = canvas.getContext('2d'); + const fileName = 'none.jpg'; - ctx.drawImage( - image, - pixelCrop.x, - pixelCrop.y, - pixelCrop.width, - pixelCrop.height, - 0, - 0, - pixelCrop.width, - pixelCrop.height - ); + ctx.drawImage( + image, + pixelCrop.x, + pixelCrop.y, + pixelCrop.width, + pixelCrop.height, + 0, + 0, + pixelCrop.width, + pixelCrop.height + ); - // As Base64 string - // return canvas.toDataURL('image/jpeg'); + // As Base64 string + // return canvas.toDataURL('image/jpeg'); - // As a blob - return new Promise((resolve, reject) => { - canvas.toBlob((file) => { - // resolve(URL.createObjectURL(file)); - resolve( - new File([file], fileName, { - type: "image/jpeg", - lastModified: Date.now() - }) - ); - }, "image/jpeg"); - }); - } + // As a blob + return new Promise((resolve, reject) => { + canvas.toBlob((file) => { + // resolve(URL.createObjectURL(file)); + resolve( + new File([file], fileName, { + type: 'image/jpeg', + lastModified: Date.now(), + }) + ); + }, 'image/jpeg'); + }); + } - const resizeFile = (file) => { - return new Promise((resolve) => { - Resizer.imageFileResizer( - file, - 128, - 128, - "JPEG", - 80, - 0, - (uri) => { - resolve(uri); - setCroppedImage(uri); - }, - "base64" - ); - }); - }; + const resizeFile = (file) => { + return new Promise((resolve) => { + Resizer.imageFileResizer( + file, + 128, + 128, + 'JPEG', + 80, + 0, + (uri) => { + resolve(uri); + setCroppedImage(uri); + }, + 'base64' + ); + }); + }; - const createImage = (url) => { - return new Promise((resolve, reject) => { - const image = new Image(); - image.addEventListener("load", () => resolve(image)); - image.addEventListener("error", (error) => reject(error)); - image.setAttribute("crossOrigin", "anonymous"); // needed to avoid cross-origin issues on CodeSandbox - image.src = url; - }); - }; + const createImage = (url) => { + return new Promise((resolve, reject) => { + const image = new Image(); + image.addEventListener('load', () => resolve(image)); + image.addEventListener('error', (error) => reject(error)); + image.setAttribute('crossOrigin', 'anonymous'); // needed to avoid cross-origin issues on CodeSandbox + image.src = url; + }); + }; - const onZoomChange = (zoom) => { - setZoom(zoom); - }; - return ( - - - - - - ); + const onZoomChange = (zoom) => { + setZoom(zoom); + }; + return ( + + + + + + ); }; const Container = styledComponents.div` diff --git a/src/primaries/ImageClipper.jsx b/src/primaries/ImageClipper.jsx index e071fac08f..6990ee5533 100644 --- a/src/primaries/ImageClipper.jsx +++ b/src/primaries/ImageClipper.jsx @@ -1,21 +1,15 @@ // React + Web3 Essentials -import React, { - forwardRef, - Fragment, - useCallback, - useImperativeHandle, - useState, -} from "react"; +import { forwardRef, Fragment, useCallback, useImperativeHandle, useState } from 'react'; // External Packages -import Cropper from "react-easy-crop"; -import styledComponents from "styled-components"; +import Cropper from 'react-easy-crop'; +import styledComponents from 'styled-components'; import Pica from 'pica'; -import Compressor from "compressorjs"; +import Compressor from 'compressorjs'; export function isBrave() { if (window.navigator.brave != undefined) { - if (window.navigator.brave.isBrave.name == "isBrave") { + if (window.navigator.brave.isBrave.name == 'isBrave') { return true; } else { return false; @@ -27,7 +21,7 @@ export function isBrave() { const ImageClipper = forwardRef((props, ref) => { // const [imageSrc, setImageSrc] = useState(null); - const { imageSrc,imageType, onImageCropped, width,height } = props; + const { imageSrc, imageType, onImageCropped, width, height } = props; const [crop, setCrop] = useState({ x: 0, y: 0 }); const [zoom, setZoom] = useState(1); const [croppedAreaPixels, setCroppedAreaPixels] = useState(null); @@ -45,11 +39,10 @@ const ImageClipper = forwardRef((props, ref) => { //because pica has compatiblity issues on brave, we use pica on chrome and comprressorjs on brave after checking if window is opened on brave or chrome. const image = isBrave() ? await resizeImageOnBrave(croppedImage) : await resizeImage(clean); - const finalImage = await convertBlobToBase64(image); onImageCropped(finalImage); } else { - return "Nothing"; + return 'Nothing'; } } catch (e) { console.error(e); @@ -60,26 +53,24 @@ const ImageClipper = forwardRef((props, ref) => { async function resizeImage(clean) { const pica = Pica(); let file = await createImage(clean); - const canvas = document.createElement("canvas"); + const canvas = document.createElement('canvas'); canvas.height = 128; canvas.width = 128; - return new Promise(resolve => { - - resolve( - pica - .resize(file, canvas, { - unsharpAmount: 100, - unsharpRadius: 0.7, - unsharpThreshold: 2, + return new Promise((resolve) => { + resolve( + pica + .resize(file, canvas, { + unsharpAmount: 100, + unsharpRadius: 0.7, + unsharpThreshold: 2, }) - .then(result => pica.toBlob(result, imageType, 1)), - ); - + .then((result) => pica.toBlob(result, imageType, 1)) + ); }); } - async function resizeImageOnBrave(clean){ + async function resizeImageOnBrave(clean) { return new Promise((resolve, reject) => { new Compressor(clean, { quality: 1, @@ -88,21 +79,23 @@ const ImageClipper = forwardRef((props, ref) => { maxHeight: 128, checkOrientation: false, success: resolve, - error: reject + error: reject, }); - }) + }); } - const convertBlobToBase64 = async (blob) => { // blob data - return await blobToBase64(blob); -} + const convertBlobToBase64 = async (blob) => { + // blob data + return await blobToBase64(blob); + }; -const blobToBase64 = blob => new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.readAsDataURL(blob); - reader.onload = () => resolve(reader.result); - reader.onerror = error => reject(error); -}); + const blobToBase64 = (blob) => + new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(blob); + reader.onload = () => resolve(reader.result); + reader.onerror = (error) => reject(error); + }); // function toDataURL(url, callback) { // var xhr = new XMLHttpRequest(); @@ -118,14 +111,13 @@ const blobToBase64 = blob => new Promise((resolve, reject) => { // xhr.send(); // } - async function getCroppedImg(imageSrc, pixelCrop) { const image = await createImage(imageSrc); - const canvas = document.createElement("canvas"); + const canvas = document.createElement('canvas'); canvas.width = pixelCrop.width; canvas.height = pixelCrop.height; - const ctx = canvas.getContext("2d"); - const fileName = "none.jpg"; + const ctx = canvas.getContext('2d'); + const fileName = 'none.jpg'; ctx.drawImage( image, @@ -144,25 +136,28 @@ const blobToBase64 = blob => new Promise((resolve, reject) => { // As a blob return new Promise((resolve, reject) => { - canvas.toBlob((file) => { - // resolve(URL.createObjectURL(file)); - resolve( - new File([file], fileName, { - type: imageType, - lastModified: Date.now(), - }) - ); - },imageType, 1); + canvas.toBlob( + (file) => { + // resolve(URL.createObjectURL(file)); + resolve( + new File([file], fileName, { + type: imageType, + lastModified: Date.now(), + }) + ); + }, + imageType, + 1 + ); }); } - const createImage = (url) => new Promise((resolve, reject) => { const image = new Image(); - image.addEventListener("load", () => resolve(image)); - image.addEventListener("error", (error) => reject(error)); - image.setAttribute("crossOrigin", "anonymous"); // needed to avoid cross-origin issues on CodeSandbox + image.addEventListener('load', () => resolve(image)); + image.addEventListener('error', (error) => reject(error)); + image.setAttribute('crossOrigin', 'anonymous'); // needed to avoid cross-origin issues on CodeSandbox image.src = url; }); @@ -183,10 +178,10 @@ const blobToBase64 = blob => new Promise((resolve, reject) => { // objectFit="vertical-cover" style={{ containerStyle: { - width: width ? width : "250px", - height: height? height : "250px", - position: "relative", - borderRadius: "20px", + width: width ? width : '250px', + height: height ? height : '250px', + position: 'relative', + borderRadius: '20px', }, }} /> diff --git a/src/primaries/Profile.tsx b/src/primaries/Profile.tsx index f72b08e252..1e3a4039a5 100644 --- a/src/primaries/Profile.tsx +++ b/src/primaries/Profile.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useRef } from 'react'; +import { useContext, useState, useRef } from 'react'; // External Packages import { useSelector } from 'react-redux'; @@ -16,21 +16,21 @@ import Dropdown from '../components/Dropdown'; import { Item } from './SharedStyling.js'; // Internal Configs -import { SpanV2 } from 'components/reusables/SharedStylingV2.js'; import APP_PATHS from 'config/AppPaths'; import { AppContext } from 'contexts/AppContext'; import { ErrorContext } from 'contexts/ErrorContext'; import { GlobalContext, GlobalContextType, ReadOnlyWalletMode } from 'contexts/GlobalContext'; import { AppContextType } from 'types/context'; +import { getPublicAssetPath } from 'helpers/RoutesHelper.js'; // Create Header const Profile = ({ isDarkMode }: { isDarkMode: boolean }) => { - const { web3NameList, initializePushSdkReadMode, removePGPKeyForUser }: AppContextType = useContext(AppContext); - const { setReadOnlyWallet, readOnlyWallet, mode, setMode }: GlobalContextType = useContext(GlobalContext); + const { web3NameList, removePGPKeyForUser }: AppContextType = useContext(AppContext); + const { setReadOnlyWallet, setMode }: GlobalContextType = useContext(GlobalContext); const { authError } = useContext(ErrorContext); const toggleArrowRef = useRef(null); const dropdownRef = useRef(null); - const modalRef = React.useRef(null); + const modalRef = useRef(null); const { account, disconnect, wallet, connect } = useAccount(); const { userPushSDKInstance } = useSelector((state: any) => { @@ -43,7 +43,7 @@ const Profile = ({ isDarkMode }: { isDarkMode: boolean }) => { // Get theme const theme = useTheme(); - const [showDropdown, setShowDropdown] = React.useState(false); + const [showDropdown, setShowDropdown] = useState(false); // useClickAway(modalRef, dropdownRef, () => showDropdown && setShowDropdown(false)); const dropdownValues = [ @@ -51,24 +51,24 @@ const Profile = ({ isDarkMode }: { isDarkMode: boolean }) => { id: 'walletAddress', value: account, title: account, - function: () => { }, - invertedIcon: './copy.svg', + function: () => {}, + invertedIcon: getPublicAssetPath('copy.svg'), }, { id: 'userSettings', value: '', title: 'Settings', - function: () => { }, + function: () => {}, to: APP_PATHS.UserSettings, - invertedIcon: 'svg/setting.svg', + invertedIcon: getPublicAssetPath('svg/setting.svg'), }, { id: 'prodDapp', value: '', - function: () => { }, + function: () => {}, link: `https://${envUtil.prod}`, title: 'Production dapp', - invertedIcon: './prod.svg', + invertedIcon: getPublicAssetPath('prod.svg'), }, { id: 'disconnect', @@ -81,7 +81,7 @@ const Profile = ({ isDarkMode }: { isDarkMode: boolean }) => { setShowDropdown(false); }, title: 'Logout', - invertedIcon: './logout.svg', + invertedIcon: getPublicAssetPath('logout.svg'), }, ]; @@ -132,7 +132,7 @@ const Profile = ({ isDarkMode }: { isDarkMode: boolean }) => { arrow diff --git a/src/sections/chat/ChatSidebarSection.tsx b/src/sections/chat/ChatSidebarSection.tsx index 77d0ef2b9f..c1ddfd579d 100644 --- a/src/sections/chat/ChatSidebarSection.tsx +++ b/src/sections/chat/ChatSidebarSection.tsx @@ -1,13 +1,8 @@ // React + Web3 Essentials -import { Web3Provider } from '@ethersproject/providers'; -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useState, useRef } from 'react'; // External Packages -import { ethers } from 'ethers'; import { AiOutlineQrcode } from 'react-icons/ai'; -import { useSelector } from 'react-redux'; -import { useNavigate } from 'react-router-dom'; -import { useClickAway } from 'react-use'; import styled, { useTheme } from 'styled-components'; // Internal Compoonents @@ -16,24 +11,15 @@ import BlankChat from 'assets/chat/BlankChat.svg?react'; import CreateGroupIcon from 'assets/chat/group-chat/creategroup.svg?react'; import CreateGroupFillIcon from 'assets/chat/group-chat/creategroupfill.svg?react'; import NewTag from 'components/NewTag'; -import Recommended from 'components/chat/recommended/Recommended'; -import ProfileHeader from 'components/chat/w2wChat/profile'; import SearchBar from 'components/chat/w2wChat/searchBar/SearchBar'; import { ButtonV2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { AppContext } from 'contexts/AppContext'; import StyleHelper from 'helpers/StyleHelper'; import { getIsNewTagVisible } from 'helpers/TimerHelper'; -import { caip10ToWallet, reformatChatId } from 'helpers/w2w'; -import { fetchIntent } from 'helpers/w2w/user'; import { Context } from 'modules/chat/ChatModule'; -import { Feeds } from 'types/chat'; // Internal Configs import GLOBALS, { device } from 'config/Globals'; -import { GlobalContext } from 'contexts/GlobalContext'; -import { useAccount } from 'hooks'; -import { appConfig } from '../../config/index.js'; const createGroupOnMouseEnter = [ { @@ -81,7 +67,7 @@ const ChatSidebarSection = ({ showCreateGroupModal, setSelectedChatId }) => { const [numberOfChatReqs, setNumberOfChatReqs] = useState(-1); const [requestLoadingData, setRequestLoadingData] = useState(null); - const containerRef = React.useRef(null); + const containerRef = useRef(null); // Manage refresh and chats tab const [primaryChatLoading, setPrimaryChatLoading] = useState({ @@ -90,12 +76,6 @@ const ChatSidebarSection = ({ showCreateGroupModal, setSelectedChatId }) => { chatRenderKey: [...Array(24)].map(() => ((Math.random() * 36) | 0).toString(36)).join(''), }); - const { userPushSDKInstance } = useSelector((state: any) => { - return state.user; - }); - - let navigate = useNavigate(); - // const handleCreateGroup = async () => { // if (!userPushSDKInstance.readmode()) { // showCreateGroupModal(); diff --git a/src/sections/space/SpaceFeedSection.tsx b/src/sections/space/SpaceFeedSection.tsx index 974d4820a4..f4e724435f 100644 --- a/src/sections/space/SpaceFeedSection.tsx +++ b/src/sections/space/SpaceFeedSection.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useMemo, useState } from 'react'; +import { useContext, useEffect } from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -15,24 +15,21 @@ import { SpaceContext } from 'contexts/SpaceContext'; import { device } from 'config/Globals'; import { useNavigate } from 'react-router-dom'; import { SpaceComponentContext } from 'contexts/SpaceComponentsContext'; -import { useAccount, useDeviceWidthCheck } from 'hooks'; +import { useAccount } from 'hooks'; import useMediaQuery from 'hooks/useMediaQuery'; -import { appConfig } from 'config/index.js'; - // External imports -import * as PushAPI from '@pushprotocol/restapi'; import { AppContext } from 'contexts/AppContext'; const SpaceFeedSection = ({ spaceid }) => { const { SpaceFeedComponent, SpaceInvitesComponent, CreateSpaceComponent } = useContext(SpaceComponentContext); const { account } = useAccount(); - const { spaceId, setSpaceId, spaceInvites } = useContext(SpaceContext); + const { setSpaceId, spaceInvites } = useContext(SpaceContext); const { connectedUser } = useContext(AppContext); const theme = useTheme(); const isMobile = useMediaQuery(device.mobileL); - React.useEffect(() => { + useEffect(() => { if (spaceid) { setSpaceId(spaceid); } @@ -46,18 +43,6 @@ const SpaceFeedSection = ({ spaceid }) => { navigate(`/spaces/${spaceId}`); }; - // crossChecking this - - // React.useEffect(() => { - // (async () => { - // const feed = await PushAPI.space.requests({ - // account, - // env: appConfig.appEnv, - // }); - // // setSpaceInvites(feed?.length); - // })(); - // }, [spaceId]); - return ( diff --git a/src/sections/space/SpaceWidgetSection.tsx b/src/sections/space/SpaceWidgetSection.tsx index 007052d350..a2c2e958e4 100644 --- a/src/sections/space/SpaceWidgetSection.tsx +++ b/src/sections/space/SpaceWidgetSection.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext, useState } from 'react'; +import { useContext, useState } from 'react'; // External Packages import { useNavigate } from 'react-router-dom'; @@ -13,18 +13,16 @@ export const SpaceWidgetSection = () => { const { SpaceWidgetComponent } = useContext(SpaceComponentContext); const { account } = useAccount(); const { spaceId, setSpaceId } = useContext(SpaceContext); - const [width, setWidth] = useState('400'); - const [zIndex, setZIndex] = useState('1000'); - const [shareUrl, setShareUrl] = useState(''); + const [width] = useState('400'); + const [zIndex] = useState('1000'); const isMobile = useDeviceWidthCheck(480); - const navigate=useNavigate(); + const navigate = useNavigate(); const handleClose = () => { setSpaceId(null); navigate('/spaces'); }; - return ( { - const { videoCallData, createWrapper, requestWrapper, acceptRequestWrapper, disconnectWrapper, isCallAccepted } = - useContext(VideoCallContext); + const { videoCallData, createWrapper, requestWrapper, isCallAccepted } = useContext(VideoCallContext); const { connectedUser, createUserIfNecessary } = useContext(AppContext); - const [isLoading, setLoading] = useState(true); + const [setLoading] = useState(true); const [blockedLoading, setBlockedLoading] = useState({ enabled: false, title: null, }); // handling a frontend error with resize-observer package - React.useEffect(() => { + useEffect(() => { window.addEventListener('error', function (err) { if (err.message === 'ResizeObserver loop limit exceeded') { const resizeObserverErrDiv = document.getElementById('webpack-dev-server-client-overlay-div'); @@ -38,7 +37,7 @@ const VideoCallSection = () => { }); }, []); - React.useEffect(() => { + useEffect(() => { const setupStream = async () => { setBlockedLoading({ enabled: true, @@ -84,7 +83,7 @@ const VideoCallSection = () => { // Incoming call UI if (videoCallData.incoming[0].status === VideoCallStatus.RECEIVED) { - return isCallAccepted ? : ; + return isCallAccepted ? : ; } // Outgoing & Ongoing call UI diff --git a/src/sections/yield/DeprecatedYieldFarming.tsx b/src/sections/yield/DeprecatedYieldFarming.tsx index 288f419fb4..7ae639095f 100644 --- a/src/sections/yield/DeprecatedYieldFarming.tsx +++ b/src/sections/yield/DeprecatedYieldFarming.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useState } from 'react'; +import { useState, useCallback, useEffect } from 'react'; import { ethers } from 'ethers'; // External Packages @@ -26,7 +26,7 @@ const DeprecatedYieldFarming = ({ setActiveTab }) => { const [depStaking, setDepStaking] = useState(null); const [depYieldFarmLP, setDepYieldFarmLP] = useState(null); const [depYieldFarmPUSH, setDepYieldFarmPUSH] = useState(null); - const [uniswapV2Router02, setUniswapV2Router02] = React.useState(null); + const [uniswapV2Router02, setUniswapV2Router02] = useState(null); const [depPoolStats, setDepPoolStats] = useState(null); const [depPushPoolStats, setDepPushPoolStats] = useState(null); @@ -37,19 +37,19 @@ const DeprecatedYieldFarming = ({ setActiveTab }) => { const library = provider?.getSigner(account); - const getDepPoolStats = React.useCallback(async () => { + const getDepPoolStats = useCallback(async () => { const poolStats = await YieldFarmingDataStore.getInstance().getPoolStats(); setDepPoolStats({ ...poolStats }); }, [pushToken, depStaking, depYieldFarmLP, depYieldFarmPUSH, uniswapV2Router02]); - const getDepPUSHPoolStats = React.useCallback(async () => { + const getDepPUSHPoolStats = useCallback(async () => { const pushPoolStats = await YieldFarmingDataStore.getInstance().getPUSHPoolStats(); setDepPushPoolStats({ ...pushPoolStats }); }, [pushToken, depStaking, depYieldFarmLP, depYieldFarmPUSH, uniswapV2Router02]); - const getDepLPPoolStats = React.useCallback( + const getDepLPPoolStats = useCallback( async (poolStats) => { const lpPoolStats = await YieldFarmingDataStore.getInstance().getLPPoolStats(poolStats); @@ -58,19 +58,19 @@ const DeprecatedYieldFarming = ({ setActiveTab }) => { [pushToken, depStaking, depYieldFarmLP, depYieldFarmPUSH, uniswapV2Router02] ); - const getDepUserDataPUSH = React.useCallback(async () => { + const getDepUserDataPUSH = useCallback(async () => { const userDataPUSH = await YieldFarmingDataStore.getInstance().getUserData(depYieldFarmPUSH); setDepUserDataPUSH({ ...userDataPUSH }); }, [depYieldFarmPUSH]); - const getDepUserDataLP = React.useCallback(async () => { + const getDepUserDataLP = useCallback(async () => { const userDataLP = await YieldFarmingDataStore.getInstance().getUserData(depYieldFarmLP); setDepUserDataLP({ ...userDataLP }); }, [depYieldFarmLP]); - React.useEffect(() => { + useEffect(() => { let pushToken = new ethers.Contract(addresses.pushToken, abis.pushToken, library); let staking = new ethers.Contract(addresses.staking, abis.staking, library); @@ -102,7 +102,7 @@ const DeprecatedYieldFarming = ({ setActiveTab }) => { } }, [account]); - React.useEffect(() => { + useEffect(() => { if (pushToken != null && depStaking != null && depYieldFarmPUSH != null) { // Instantiate Data Stores YieldFarmingDataStore.getInstance().init( @@ -118,7 +118,7 @@ const DeprecatedYieldFarming = ({ setActiveTab }) => { } }, [getDepPoolStats]); - React.useEffect(() => { + useEffect(() => { if (depPoolStats) { syncData(depPoolStats); } diff --git a/src/sections/yield/NewYieldFarming.tsx b/src/sections/yield/NewYieldFarming.tsx index dfd248d7fb..8f937941b4 100644 --- a/src/sections/yield/NewYieldFarming.tsx +++ b/src/sections/yield/NewYieldFarming.tsx @@ -1,12 +1,12 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useState, useCallback, useEffect } from 'react'; import { ethers } from 'ethers'; // External Packages import styled from 'styled-components'; // Internal Compoonents -import { ItemHV2, ItemVV2, SectionV2 } from 'components/reusables/SharedStylingV2'; +import { ItemHV2 } from 'components/reusables/SharedStylingV2'; import YieldAnnouncementSection from 'sections/yield/YieldAnnouncementSection'; import YieldPushPriceSection from 'sections/yield/YieldPushPriceSection'; import YieldStatsSection from 'sections/yield/YieldStatsSection'; @@ -17,7 +17,6 @@ import { useAccount } from 'hooks'; // Internal Configs import { abis, addresses, appConfig } from 'config/index.js'; -import { GlobalContext } from 'contexts/GlobalContext'; const NewYieldFarming = ({ setActiveTab }) => { const { provider, account, chainId } = useAccount(); @@ -36,32 +35,31 @@ const NewYieldFarming = ({ setActiveTab }) => { const library = provider?.getSigner(account); - const getPoolStats = React.useCallback(async () => { + const getPoolStats = useCallback(async () => { const poolStats = await YieldFarmingDataStoreV2.getInstance().getPoolStats(provider); setPoolStats({ ...poolStats }); }, [staking, pushToken, pushCoreV2, yieldFarmingLP, uniswapV2Router02Instance, provider]); - - const getLpPoolStats = React.useCallback(async () => { + const getLpPoolStats = useCallback(async () => { const poolStats = await YieldFarmingDataStoreV2.getInstance().getPoolStats(provider); const lpPoolStats = await YieldFarmingDataStoreV2.getInstance().getLPPoolStats(poolStats); setLpPoolStats({ ...lpPoolStats }); }, [staking, pushToken, pushCoreV2, yieldFarmingLP, uniswapV2Router02Instance, provider]); - const getPUSHPoolStats = React.useCallback(async () => { + const getPUSHPoolStats = useCallback(async () => { // const pushPoolStats = await YieldFarmingDataStoreV2.getInstance().getPUSHPoolStats(provider); // setPUSHPoolStats({ ...pushPoolStats }); }, []); - const getUserDataLP = React.useCallback(async () => { + const getUserDataLP = useCallback(async () => { const userDataLP = await YieldFarmingDataStoreV2.getInstance().getUserDataLP(); setUserDataLP({ ...userDataLP }); }, [staking, pushToken, pushCoreV2, yieldFarmingLP, uniswapV2Router02Instance]); - const getUserDataPush = React.useCallback(async () => { + const getUserDataPush = useCallback(async () => { const [pushPoolStats, userDataPush] = await YieldFarmingDataStoreV2.getInstance().getUserDataPUSH(provider); setPUSHPoolStats({ ...pushPoolStats }); @@ -69,8 +67,7 @@ const NewYieldFarming = ({ setActiveTab }) => { }, [staking, pushToken, pushCoreV2, yieldFarmingLP, uniswapV2Router02Instance, provider]); //initiate the YieldFarmV2 data store here - React.useEffect(() => { - + useEffect(() => { if (chainId !== appConfig.coreContractChain && chainId !== appConfig.mainnetCoreContractChain) { return; } @@ -108,7 +105,6 @@ const NewYieldFarming = ({ setActiveTab }) => { setUniswapV2Router02Instance(uniswapV2Router02Instance); } - YieldFarmingDataStoreV2.getInstance().init( account, staking, @@ -122,7 +118,6 @@ const NewYieldFarming = ({ setActiveTab }) => { getUserDataLP(); getLpPoolStats(); getUserDataPush(); - }, [account, chainId]); return ( diff --git a/src/sections/yield/YieldAnnouncementSection.tsx b/src/sections/yield/YieldAnnouncementSection.tsx index a9c4fca999..1ed93f499a 100644 --- a/src/sections/yield/YieldAnnouncementSection.tsx +++ b/src/sections/yield/YieldAnnouncementSection.tsx @@ -10,42 +10,40 @@ import { AInlineV2, H2V2, ImageV2, ItemHV2, ItemVV2 } from 'components/reusables import GLOBALS from 'config/Globals'; import { useDeviceWidthCheck } from 'hooks'; import styled from 'styled-components'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; // yield announcement section -const YieldAnnouncementSection = ( - { - logo, - title, - body, - setActiveTab - } -) => { - +const YieldAnnouncementSection = ({ logo, title, body, setActiveTab }) => { const isMobile = useDeviceWidthCheck(600); // RENDER return ( @@ -53,25 +51,21 @@ const YieldAnnouncementSection = ( - {body} {" "} - {title.includes("New V2") && + {body}{' '} + {title.includes('New V2') && ( <> - setActiveTab(1)}> - here - - {" "} to migrate. + setActiveTab(1)}>here to migrate. - } - + )} ); -} +}; export default YieldAnnouncementSection; @@ -79,8 +73,7 @@ const AILine = styled(AInlineV2)` cursor: pointer; color: #fff; - &:hover{ + &:hover { text-decoration: underline; } - -` +`; diff --git a/src/sections/yield/YieldPushPriceSection.tsx b/src/sections/yield/YieldPushPriceSection.tsx index fbea60210f..883d852dbb 100644 --- a/src/sections/yield/YieldPushPriceSection.tsx +++ b/src/sections/yield/YieldPushPriceSection.tsx @@ -1,6 +1,3 @@ -// React + Web3 Essentials -import React from 'react'; - // External Packages import styled from 'styled-components'; @@ -8,9 +5,9 @@ import styled from 'styled-components'; import { H2V2, ImageV2, ItemHV2, Skeleton, SkeletonLine } from 'components/reusables/SharedStylingV2'; // Internal Configs -import GLOBALS from 'config/Globals'; -import { ethers } from 'ethers'; + import { useDeviceWidthCheck } from 'hooks'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; const YieldPushPriceSection = ({ poolStats }) => { function numberWithCommas(x) { @@ -46,7 +43,7 @@ const YieldPushPriceSection = ({ poolStats }) => { diff --git a/src/sections/yield/YieldSnapshotSection.tsx b/src/sections/yield/YieldSnapshotSection.tsx index 846c9d65c1..7f19d8c679 100644 --- a/src/sections/yield/YieldSnapshotSection.tsx +++ b/src/sections/yield/YieldSnapshotSection.tsx @@ -1,23 +1,10 @@ -// React + Web3 Essentials -import React, { useState } from 'react'; - // External Packages import styled from 'styled-components'; // Internal Compoonents -import ChatBox from 'components/chat/w2wChat/chatBox/ChatBox'; -import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; +import { ItemHV2 } from 'components/reusables/SharedStylingV2'; import YieldUniswapV3 from 'components/yield/YieldUniswapV3'; import YieldPushFeeV3 from 'components/yield/YieldPushFeeV3'; -import YieldUniswapV2 from 'components/yield/YieldUniswapV2'; -import YieldPushFeeV2 from 'components/yield/YieldPushFeeV2'; - -// Internal Configs -import GLOBALS from 'config/Globals'; -import { ethers } from 'ethers'; -import { abis, addresses } from 'config/index.js'; -import YieldFarmingDataStore from 'singletons/YieldFarmingDataStore'; -import YieldPoolCard from 'components/yield/YieldPoolCard'; // Chat Sections // Divided into two, left and right diff --git a/src/segments/ChannelProfile.tsx b/src/segments/ChannelProfile.tsx index b016e1ef39..029ac2df73 100644 --- a/src/segments/ChannelProfile.tsx +++ b/src/segments/ChannelProfile.tsx @@ -1,41 +1,31 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import { NotificationItem } from '@pushprotocol/uiweb'; -import { useDispatch, useSelector } from 'react-redux'; +import { useSelector } from 'react-redux'; import { useNavigate } from 'react-router-dom'; -import { useClickAway } from 'react-use'; -import { addPaginatedNotifications, setFinishedFetching } from 'redux/slices/notificationSlice'; -import styled, { ThemeProvider, useTheme } from 'styled-components'; +import styled, { useTheme } from 'styled-components'; // Internal Compoonents import Back from 'assets/chat/arrowleft.svg?react'; -import ChannelLoading from 'components/ChannelLoading'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; -import { useAccount } from 'hooks'; import DisplayNotice from 'primaries/DisplayNotice'; // Internal Configs -import { latest } from '@pushprotocol/restapi/src/lib/chat'; import ViewChannelItem from 'components/ViewChannelItem'; -import ChannelProfileComponent from 'components/channel/ChannelProfileComponent'; import { ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; import APP_PATHS from 'config/AppPaths'; import { device } from 'config/Globals'; -import { appConfig } from 'config/index.js'; -import ChannelsDataStore from 'singletons/ChannelsDataStore'; // Constants const NOTIFICATIONS_PER_PAGE = 20; // Create Header const ChannelProfile = ({ channelID, loadTeaser, playTeaser, minimal, profileType }) => { - const dispatch = useDispatch(); const { userPushSDKInstance } = useSelector((state: any) => { return state.user; }); - const modalRef = React.useRef(null); // get theme const themes = useTheme(); @@ -46,9 +36,6 @@ const ChannelProfile = ({ channelID, loadTeaser, playTeaser, minimal, profileTyp const [notifications, setNotifications] = useState([]); const [channelDetails, setChannelDetails] = useState(null); - // get signer - const { account, provider } = useAccount(); - // Setup navigation const navigate = useNavigate(); diff --git a/src/segments/ChannelTutorial.jsx b/src/segments/ChannelTutorial.jsx index acace2c4b3..16d02c0764 100644 --- a/src/segments/ChannelTutorial.jsx +++ b/src/segments/ChannelTutorial.jsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React from "react"; +import React from 'react'; // External Packages import styled, { useTheme } from 'styled-components'; @@ -7,12 +7,12 @@ import { FaShareSquare, FaYoutube } from 'react-icons/fa'; // Internal Components import { Button, Image, Item, ItemH, Span } from 'primaries/SharedStyling'; -import MetaInfoDisplayer from "components/MetaInfoDisplayer"; -import { ImageV2 } from "components/reusables/SharedStylingV2"; +import MetaInfoDisplayer from 'components/MetaInfoDisplayer'; +import { ImageV2 } from 'components/reusables/SharedStylingV2'; // Internal Configs -import channelTuts from "config/channelTuts"; - +import channelTuts from 'config/channelTuts'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; // Check channel has tutorial export const isChannelTutorialized = (addr) => { @@ -25,7 +25,7 @@ export const isChannelTutorialized = (addr) => { }); return keyFound; -} +}; // Channel Tutorial const ChannelTutorial = ({ addr, bgColor, loadTeaser, playTeaser }) => { @@ -46,7 +46,7 @@ const ChannelTutorial = ({ addr, bgColor, loadTeaser, playTeaser }) => { }); return item; - } + }; const item = getChannelTutItem(addr); @@ -56,15 +56,15 @@ const ChannelTutorial = ({ addr, bgColor, loadTeaser, playTeaser }) => { flex="initial" onMouseEnter={() => { setShowTuts(true); - console.debug("enter") + console.debug('enter'); }} onMouseLeave={() => { setShowTuts(false); - console.debug("exit") + console.debug('exit'); }} zIndex="9" > - {showTuts && + {showTuts && ( { padding="10px" border={`1px solid ${themes.borderBg}`} > - {item.userjourneyshort && + {item.userjourneyshort && ( { alt={`${item.alt}`} /> - } + )} - {item.userjourneyyoutube && + {item.userjourneyyoutube && ( - } - - {item.article && + )} + + {item.article && ( - } + )} - } + )} } text="Tutorial" @@ -159,13 +160,13 @@ const ChannelTutorial = ({ addr, bgColor, loadTeaser, playTeaser }) => { /> ); -} +}; // CSS STYLES const TutsInner = styled(Item)` border-radius: 10px; box-shadow: 0px 15px 20px -5px rgb(0 0 0 / 10%); -` +`; // Export Default export default ChannelTutorial; diff --git a/src/segments/Inbox.tsx b/src/segments/Inbox.tsx index 8f71b6c961..0abaf05710 100644 --- a/src/segments/Inbox.tsx +++ b/src/segments/Inbox.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useContext, useEffect, useState, useRef } from 'react'; // External Packages import { useDispatch, useSelector } from 'react-redux'; @@ -9,7 +9,7 @@ import { Waypoint } from 'react-waypoint'; import styled, { ThemeProvider, useTheme } from 'styled-components'; // Internal Compoonents -import * as PushAPI from '@pushprotocol/restapi'; +import { utils as pushApiUtils } from '@pushprotocol/restapi'; import { NotificationItem } from '@pushprotocol/uiweb'; import Close from 'assets/chat/group-chat/close.svg?react'; import OpenLink from 'assets/snap/GoToImage.svg?react'; @@ -17,7 +17,6 @@ import MetamaskLogo from 'assets/snap/metamasksnap.svg?react'; import SearchFilter from 'components/SearchFilter'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { GlobalContext } from 'contexts/GlobalContext'; -import { convertAddressToAddrCaip } from 'helpers/CaipHelper'; import CryptoHelper from 'helpers/CryptoHelper'; import { useAccount } from 'hooks'; import { Item } from 'primaries/SharedStyling'; @@ -44,32 +43,31 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { const { userPushSDKInstance } = useSelector((state: any) => { return state.user; }); - const modalRef = React.useRef(null); + const modalRef = useRef(null); useClickAway(modalRef, () => showFilter && setShowFilter(false)); const { account, provider, chainId } = useAccount(); const { notifications, page, finishedFetching, toggle } = useSelector((state: any) => state.notifications); const themes = useTheme(); - let user = convertAddressToAddrCaip(account, chainId); // toast related section - const [toast, showToast] = React.useState(null); + const [toast, showToast] = useState(null); const clearToast = () => showToast(null); const { run, welcomeNotifs } = useSelector((state: any) => state.userJourney); - const [limit, setLimit] = React.useState(10); - const [allNotf, setNotif] = React.useState([]); - const [filteredNotifications, setFilteredNotifications] = React.useState([]); - const [filter, setFilter] = React.useState(false); - const [allFilter, setAllFilter] = React.useState([]); - const [loadFilter, setLoadFilter] = React.useState(false); - const [bgUpdateLoading, setBgUpdateLoading] = React.useState(false); - const [loading, setLoading] = React.useState(false); + const [limit, setLimit] = useState(10); + const [allNotf, setNotif] = useState([]); + const [filteredNotifications, setFilteredNotifications] = useState([]); + const [filter, setFilter] = useState(false); + const [allFilter, setAllFilter] = useState([]); + const [loadFilter, setLoadFilter] = useState(false); + const [bgUpdateLoading, setBgUpdateLoading] = useState(false); + const [loading, setLoading] = useState(false); const { readOnlyWallet } = useContext(GlobalContext); - const [showSnapInfo, setShowSnapInfo] = React.useState(true); + const [showSnapInfo, setShowSnapInfo] = useState(true); const navigate = useNavigate(); const navigateToSnaps = () => { @@ -83,7 +81,7 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { ); //clear toast variable after it is shown - React.useEffect(() => { + useEffect(() => { if (toast) { clearToast(); } @@ -133,7 +131,7 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { } }; - React.useEffect(() => { + useEffect(() => { // console.log(allFilter) setFilteredNotifications(allFilter); }, [allFilter]); @@ -147,7 +145,7 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { page: page, limit: NOTIFICATIONS_PER_PAGE, }); - const parsedResponse = PushAPI.utils.parseApiResponse(results); + const parsedResponse = pushApiUtils.parseApiResponse(results); dispatch(addPaginatedNotifications(parsedResponse)); if (parsedResponse.length === 0) { dispatch(setFinishedFetching()); @@ -171,7 +169,7 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { if (!notifications.length) { dispatch(incrementPage()); } - const parsedResponse = PushAPI.utils.parseApiResponse(results); + const parsedResponse = pushApiUtils.parseApiResponse(results); const map1 = new Map(); const map2 = new Map(); results.forEach((each) => { @@ -211,7 +209,7 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { if (!notifications.length) { dispatch(incrementPage()); } - const parsedResponse = PushAPI.utils.parseApiResponse(results); + const parsedResponse = pushApiUtils.parseApiResponse(results); const map1 = new Map(); const map2 = new Map(); results.forEach((each) => { @@ -231,7 +229,7 @@ const Inbox = ({ showFilter, setShowFilter, search, setSearch }) => { } }; - React.useEffect(() => { + useEffect(() => { if (userPushSDKInstance?.account == readOnlyWallet || !userPushSDKInstance) return; fetchLatestNotifications(); fetchAllNotif(); diff --git a/src/segments/Spam.tsx b/src/segments/Spam.tsx index 6cec655965..075b067307 100644 --- a/src/segments/Spam.tsx +++ b/src/segments/Spam.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { useContext } from 'react'; +import { useRef, useState, useEffect } from 'react'; // External Packages import { useDispatch, useSelector } from 'react-redux'; @@ -33,7 +33,6 @@ import { useAccount } from 'hooks'; // Internal Configs import { appConfig } from 'config/index.js'; import { device } from 'config/Globals'; -import { AppContext } from 'contexts/AppContext'; // Constants const NOTIFICATIONS_PER_PAGE = 10; @@ -44,7 +43,7 @@ const SpamBox = ({ showFilter, setShowFilter, search, setSearch }) => { const { userPushSDKInstance } = useSelector((state: any) => { return state.user; }); - const modalRef = React.useRef(null); + const modalRef = useRef(null); useClickAway(modalRef, () => showFilter && setShowFilter(false)); const { account, chainId, provider } = useAccount(); const { epnsCommReadProvider } = useSelector((state: any) => state.contracts); @@ -54,7 +53,7 @@ const SpamBox = ({ showFilter, setShowFilter, search, setSearch }) => { let user = convertAddressToAddrCaip(account, chainId); // toast related section - const [toast, showToast] = React.useState(null); + const [toast, showToast] = useState(null); const clearToast = () => showToast(null); const { run } = useSelector((state: any) => state.userJourney); @@ -65,13 +64,13 @@ const SpamBox = ({ showFilter, setShowFilter, search, setSearch }) => { chainId: chainId, verifyingContract: epnsCommReadProvider?.address, }; - const [allNotif, setNotif] = React.useState([]); - const [loadFilter, setLoadFilter] = React.useState(false); - const [filteredNotifications, setFilteredNotifications] = React.useState([]); - const [filter, setFilter] = React.useState(false); - const [allFilter, setAllFilter] = React.useState([]); - const [bgUpdateLoading, setBgUpdateLoading] = React.useState(false); - const [loading, setLoading] = React.useState(false); + const [allNotif, setNotif] = useState([]); + const [loadFilter, setLoadFilter] = useState(false); + const [filteredNotifications, setFilteredNotifications] = useState([]); + const [filter, setFilter] = useState(false); + const [allFilter, setAllFilter] = useState([]); + const [bgUpdateLoading, setBgUpdateLoading] = useState(false); + const [loading, setLoading] = useState(false); const onCoreNetwork = chainId === appConfig.coreContractChain; @@ -82,7 +81,7 @@ const SpamBox = ({ showFilter, setShowFilter, search, setSearch }) => { ); //clear toast variable after it is shown - React.useEffect(() => { + useEffect(() => { if (toast) { clearToast(); } @@ -137,7 +136,7 @@ const SpamBox = ({ showFilter, setShowFilter, search, setSearch }) => { setBgUpdateLoading(false); }; - React.useEffect(() => { + useEffect(() => { console.debug(filteredNotifications, allFilter); setFilteredNotifications(allFilter); }, [allFilter]); @@ -283,13 +282,13 @@ const SpamBox = ({ showFilter, setShowFilter, search, setSearch }) => { } }; - React.useEffect(() => { + useEffect(() => { if (!userPushSDKInstance) return; fetchLatestNotifications(); fetchAllNotif(); }, [userPushSDKInstance]); - React.useEffect(() => { + useEffect(() => { if (epnsCommReadProvider) { loadNotifications(); } diff --git a/src/segments/ViewChannels.tsx b/src/segments/ViewChannels.tsx index 8c2a407e6b..1051483577 100644 --- a/src/segments/ViewChannels.tsx +++ b/src/segments/ViewChannels.tsx @@ -1,11 +1,11 @@ // React + Web3 Essentials -import React, { useEffect, useState } from 'react'; +import { useEffect, useState } from 'react'; // External Packages import { AiOutlineSearch } from 'react-icons/ai'; import { useDispatch, useSelector } from 'react-redux'; import { Waypoint } from 'react-waypoint'; -import styled, { useTheme } from 'styled-components'; +import styled from 'styled-components'; // Internal Compoonents import ChainsSelect from 'components/ChainsSelect'; @@ -38,7 +38,6 @@ const SEARCH_LIMIT = 10; // Create Header function ViewChannels({ loadTeaser, playTeaser, minimal }) { - const theme = useTheme(); const dispatch = useDispatch(); const { userPushSDKInstance } = useSelector((state: any) => { return state.user; diff --git a/src/singletons/ChannelsDataStore.js b/src/singletons/ChannelsDataStore.js index dcddc38fb2..d87898958c 100644 --- a/src/singletons/ChannelsDataStore.js +++ b/src/singletons/ChannelsDataStore.js @@ -1,5 +1,4 @@ // Internal Components -import * as PushAPI from '@pushprotocol/restapi'; import { getReq, postReq } from 'api'; import EPNSCoreHelper from 'helpers/EPNSCoreHelper'; diff --git a/src/structure/Header.tsx b/src/structure/Header.tsx index 931832dfd3..839f3321fc 100644 --- a/src/structure/Header.tsx +++ b/src/structure/Header.tsx @@ -1,14 +1,13 @@ -import React, { Suspense, useContext, useEffect, useRef } from 'react'; +import { Suspense, useContext, useEffect, useRef, useState } from 'react'; // React + Web3 Essentials -import { ethers } from 'ethers'; import { Link } from 'react-router-dom'; // External Packages -import { AiOutlineClose, AiOutlineMenu } from 'react-icons/ai'; +import { AiOutlineMenu } from 'react-icons/ai'; import { useLocation } from 'react-router-dom'; import { DarkModeSwitch } from 'react-toggle-dark-mode'; -import styled, { css, useTheme } from 'styled-components'; +import styled, { useTheme } from 'styled-components'; // Internal Components import OpenLink from 'assets/snap/GoToImage.svg?react'; @@ -17,9 +16,9 @@ import { LOADER_SPINNER_TYPE } from 'components/reusables/loaders/LoaderSpinner' import Spinner from 'components/reusables/spinners/SpinnerUnit'; import { AppContext } from 'contexts/AppContext'; import { ErrorContext } from 'contexts/ErrorContext'; -import { GlobalContext, ReadOnlyWalletMode } from 'contexts/GlobalContext'; +import { GlobalContext } from 'contexts/GlobalContext'; import { NavigationContext } from 'contexts/NavigationContext'; -import Bell from 'primaries/Bell'; + import Profile from 'primaries/Profile'; import { Button, Item, ItemH, Section, Span } from 'primaries/SharedStyling'; import PushLogoDark from '../assets/pushDark.svg'; @@ -27,7 +26,7 @@ import PushLogoLight from '../assets/pushLight.svg'; // Internal Configs import ChainIndicator from 'components/ChainIndicator'; -import { ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; +import { SpanV2 } from 'components/reusables/SharedStylingV2'; import APP_PATHS from 'config/AppPaths'; import GLOBALS from 'config/Globals'; import { themeDark, themeLight } from 'config/Themization'; @@ -36,6 +35,7 @@ import { UnsupportedChainIdError } from 'connectors/error'; import { useAccount, useDeviceWidthCheck } from 'hooks'; import { useClickAway } from 'react-use'; import MobileNavigation from './MobileNavigation'; +import { getPublicAssetPath } from 'helpers/RoutesHelper'; // header tags for pages that are not there in navigationList (Sidebar) const EXTRA_HEADER_TAGS = { @@ -70,32 +70,32 @@ function Header({ isDarkMode, darkModeToggle }) { const navRef = useRef(); const { navigationSetup } = useContext(NavigationContext); - const { setSnapInstalled, snapInstalled } = React.useContext(AppContext); - const { mode } = React.useContext(GlobalContext); - const { isActive, switchChain, connect, wallet } = useAccount(); + const { setSnapInstalled, snapInstalled } = useContext(AppContext); + + const { isActive, switchChain, wallet } = useAccount(); const { authError: error } = useContext(ErrorContext); - const [showLoginControls, setShowLoginControls] = React.useState(false); + const [showLoginControls, setShowLoginControls] = useState(false); // Handle Nav Bar - const [showNavBar, setShowNavBar] = React.useState(false); + const [showNavBar, setShowNavBar] = useState(false); // Handle Header Tag - const [headerTag, setHeaderTag] = React.useState(null); + const [headerTag, setHeaderTag] = useState(null); // Get Location const location = useLocation(); - // const [snapInstalled, setSnapInstalled] = React.useState(false); + // const [snapInstalled, setSnapInstalled] = useState(false); - React.useEffect(() => { + useEffect(() => { // runs when navigation setup is updated, will run on init updateHeaderTag(location); // console.log(Object.keys(navigationSetup)) }, [navigationSetup]); // Change text based on change of location - React.useEffect(() => { + useEffect(() => { // runs on location, i.e. route, change updateHeaderTag(location); }, [location]); @@ -196,16 +196,16 @@ function Header({ isDarkMode, darkModeToggle }) { justify="flex-start" flex="0" > - + - + - + diff --git a/src/structure/MasterInterfacePage.tsx b/src/structure/MasterInterfacePage.tsx index 405291c4c4..a06dc279ae 100644 --- a/src/structure/MasterInterfacePage.tsx +++ b/src/structure/MasterInterfacePage.tsx @@ -1,11 +1,11 @@ // React + Web3 Essentials -import React, { lazy, Suspense } from 'react'; +import { lazy, Suspense, useState, useEffect, useContext } from 'react'; // External Packages import useToast from 'hooks/useToast'; -import { MdError, MdWarning } from 'react-icons/md'; +import { MdWarning } from 'react-icons/md'; import { VscClose } from 'react-icons/vsc'; -import { Navigate, redirect, Route, Routes, useLocation, useNavigate, useSearchParams } from 'react-router-dom'; +import { Navigate, Route, Routes, useLocation, useNavigate, useSearchParams } from 'react-router-dom'; import { ToastContainer } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.min.css'; import styled from 'styled-components'; @@ -16,7 +16,6 @@ import LoaderSpinner, { LOADER_TYPE, PROGRESS_POSITIONING, } from 'components/reusables/loaders/LoaderSpinner'; -import ConnectedWalletRoute from '../components/ConnectedWalletRoute'; import { Anchor, Item } from '../primaries/SharedStyling'; const AirdropPage = lazy(() => import('pages/AirdropPage')); const ChannelDashboardPage = lazy(() => import('pages/ChannelDashboardPage')); @@ -34,7 +33,6 @@ const ReceiveNotifsPage = lazy(() => import('pages/ReceiveNotifsPage')); const NotifSettingsPage = lazy(() => import('pages/NotifSettingsPage')); const SendNotifsPage = lazy(() => import('pages/SendNotifsPage')); const SpacePage = lazy(() => import('pages/SpacePage')); -const SpamPage = lazy(() => import('pages/SpamPage')); const SupportPage = lazy(() => import('pages/SupportPage')); const TutorialPage = lazy(() => import('pages/TutorialPage')); // const YieldFarmingPage = lazy(() => import('pages/YieldFarmingPage')); @@ -65,33 +63,28 @@ import { ItemVV2 } from 'components/reusables/SharedStylingV2'; import APP_PATHS from 'config/AppPaths'; import GLOBALS from 'config/Globals'; import { AppContext } from 'contexts/AppContext'; -import { ethers } from 'ethers'; -import CryptoHelper from 'helpers/CryptoHelper'; -import * as w2wHelper from 'helpers/w2w'; import { MODAL_POSITION } from 'hooks/useModalBlur'; import MetamaskPushSnapModal from 'modules/receiveNotifs/MetamaskPushSnapModal'; import SnapPage from 'pages/SnapPage'; -import { ConnectedUser, Feeds, User } from 'types/chat'; import { AppContextType } from 'types/context'; // Create Header function MasterInterfacePage() { // Get search params - const [searchParams, setSearchParams] = useSearchParams(); + const [searchParams] = useSearchParams(); // get location const location = useLocation(); - const { hash, pathname, search } = location; // Master Interface controls settings - const [playTeaserVideo, setPlayTeaserVideo] = React.useState(false); - const [loadTeaserVideo, setLoadTeaserVideo] = React.useState(null); + const [playTeaserVideo, setPlayTeaserVideo] = useState(false); + const [loadTeaserVideo, setLoadTeaserVideo] = useState(null); - const { MetamaskPushSnapModalComponent, blockedLoading }: AppContextType = React.useContext(AppContext); + const { MetamaskPushSnapModalComponent, blockedLoading }: AppContextType = useContext(AppContext); - const { showMetamaskPushSnap } = React.useContext(AppContext); + const { showMetamaskPushSnap } = useContext(AppContext); - React.useEffect(() => { + useEffect(() => { if (location.hash == '#receive-notifications') { showMetamaskPushSnap(); } @@ -110,7 +103,7 @@ function MasterInterfacePage() { // } // // For redirecting if required - // React.useEffect(() => { + // useEffect(() => { // const checkAndRedirect = () => { // if (location.pathname === APP_PATHS.Channels && searchParams.get('channel')) { // const navigate = useNavigate(); diff --git a/src/structure/MobileNavigation.tsx b/src/structure/MobileNavigation.tsx index f33f04ea33..ccf559e782 100644 --- a/src/structure/MobileNavigation.tsx +++ b/src/structure/MobileNavigation.tsx @@ -1,29 +1,21 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; +import { useContext, useEffect, useState } from 'react'; // External Packages -import { FaDiscord, FaGithub, FaMedium, FaTelegramPlane, FaTwitter } from 'react-icons/fa'; + import { useDispatch, useSelector } from 'react-redux'; import { useLocation } from 'react-router-dom'; import styled, { css, useTheme } from 'styled-components'; // Internal Compoonents -import { postReq } from 'api'; -import NavButton from 'components/NavButton'; -import NavigationButton from 'components/NavigationButton'; -import { NavigationLoaderButton } from 'components/NavigationLoaderButton'; + import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import navigationList from 'config/NavigationList'; import { NavigationContext } from 'contexts/NavigationContext'; import { useAccount } from 'hooks'; -import { AnchorLink as Anchor, Item, ItemH, Section, Span } from 'primaries/SharedStyling'; +import { Item, Span } from 'primaries/SharedStyling'; import { SEND_NOTIFICATION_STATES, setCanSend } from 'redux/slices/sendNotificationSlice'; -import { - incrementStepIndex, - setCommunicateOpen, - setDeveloperOpen, - setTutorialContinous, -} from '../redux/slices/userJourneySlice'; +import { incrementStepIndex, setTutorialContinous } from '../redux/slices/userJourneySlice'; // Internal Configs import MobileNavButton from 'components/MobileNavButton'; @@ -31,7 +23,7 @@ import GLOBALS from 'config/Globals'; import { appConfig } from 'config/index.js'; // Create Header -function MobileNavigation({showNavBar,setShowNavBar}) { +function MobileNavigation({ showNavBar, setShowNavBar }) { const { channelDetails, delegatees, @@ -187,7 +179,7 @@ function MobileNavigation({showNavBar,setShowNavBar}) { }; // Location has changed, reflect it accordingly - React.useEffect(() => { + useEffect(() => { if (navigationSetup) { // loop and find the item in question Object.entries(navigationSetup).forEach(([key, value]) => { @@ -398,9 +390,20 @@ function MobileNavigation({showNavBar,setShowNavBar}) { // dispatch(setDeveloperOpen(false)) // } let innerRendered = ( -
+
{secondaryButton ? ( - + {section.hasItems ? renderChildItems(data.drilldown, section.opened, GLOBALS.CONSTANTS.NAVBAR_SECTIONS.PRIMARY) : null} @@ -415,13 +418,27 @@ function MobileNavigation({showNavBar,setShowNavBar}) { // console.log(`Clicked secondary button`); mutateTransformedList(section, true); }} - id={data.id}> - - + id={data.id} + > + ) : ( - + - + }} + > + {/* { @@ -493,16 +518,26 @@ function MobileNavigation({showNavBar,setShowNavBar}) { } let rendered = ( - + {Object.keys(drilldown).map(function (key) { const item = drilldown[key]; const data = item.data; return ( - + { @@ -521,9 +556,17 @@ function MobileNavigation({showNavBar,setShowNavBar}) { } // console.log(`Clicked button`); // mutateTransformedList(item) - }}> - + }} + > + ); @@ -535,28 +578,41 @@ function MobileNavigation({showNavBar,setShowNavBar}) { }; return ( - + {!navigationSetup && ( - - + + )} {navigationSetup && Object.keys(navigationSetup).length > 0 && ( <> - {renderMainItems(navigationSetup.primary, GLOBALS.CONSTANTS.NAVBAR_SECTIONS.PRIMARY)} - - - Developers - - {renderMainItems(navigationSetup.secondary, GLOBALS.CONSTANTS.NAVBAR_SECTIONS.SECONDARY)} -