├── .eslintrc.js ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── scripts └── dev-apps.js ├── turbo.json └── workspace ├── apps └── starkgate │ ├── shared │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ │ ├── index.ts │ │ ├── tokens.ts │ │ └── types.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── typedoc.json │ └── vite.config.ts │ └── web │ ├── .env │ ├── .env.development │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── .stylelintignore │ ├── .stylelintrc.cjs │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── index.html │ ├── package.json │ ├── public │ ├── env-config.js │ ├── favicon.svg │ └── robots.txt │ ├── src │ ├── App.jsx │ ├── App.module.scss │ ├── __tests__ │ │ └── utils │ │ │ └── token.spec.js │ ├── abis │ │ ├── L1 │ │ │ ├── ERC20.json │ │ │ ├── StarknetDAIBridge.json │ │ │ ├── StarknetERC20Bridge.json │ │ │ ├── StarknetEthBridge.json │ │ │ ├── StarknetMessaging.json │ │ │ ├── TeleportOracleAuth.json │ │ │ └── index.js │ │ ├── L2 │ │ │ ├── dai_teleport_gateway.json │ │ │ ├── erc20.json │ │ │ ├── index.js │ │ │ └── token_bridge.json │ │ └── index.js │ ├── analytics │ │ ├── gtag.js │ │ ├── index.js │ │ ├── track-event-type.js │ │ └── track.js │ ├── api │ │ ├── attestations.js │ │ ├── gas-cost.js │ │ ├── index.js │ │ ├── screening.js │ │ └── transfers.js │ ├── assets │ │ ├── img │ │ │ ├── light-accent.png │ │ │ ├── starkgate.png │ │ │ └── stars.png │ │ └── svg │ │ │ ├── chains │ │ │ ├── arbitrum.svg │ │ │ ├── ethereum.svg │ │ │ ├── optimism.svg │ │ │ ├── polygon.svg │ │ │ └── starknet.svg │ │ │ ├── etherscan.svg │ │ │ ├── exchanges │ │ │ ├── coinbase.svg │ │ │ ├── huobi.svg │ │ │ └── okx.svg │ │ │ ├── icons │ │ │ ├── alert-circle.svg │ │ │ ├── arrow-right.svg │ │ │ ├── back.svg │ │ │ ├── card.svg │ │ │ ├── chains.svg │ │ │ ├── close.svg │ │ │ ├── collapse.svg │ │ │ ├── copy.svg │ │ │ ├── discord.svg │ │ │ ├── exchange.svg │ │ │ ├── fast.svg │ │ │ ├── forward.svg │ │ │ ├── info.svg │ │ │ ├── link.svg │ │ │ ├── minus-circle.svg │ │ │ ├── plus-circle.svg │ │ │ ├── redirect.svg │ │ │ ├── refresh.svg │ │ │ ├── rocket.svg │ │ │ ├── search.svg │ │ │ ├── selected.svg │ │ │ ├── success.svg │ │ │ ├── swap.svg │ │ │ ├── warning-circle.svg │ │ │ └── warning.svg │ │ │ ├── providers │ │ │ ├── banxa.svg │ │ │ ├── layerswap.svg │ │ │ ├── orbiter.svg │ │ │ ├── ramp.svg │ │ │ └── rhinofi.svg │ │ │ ├── starkscan.svg │ │ │ ├── starkware.svg │ │ │ ├── tabs │ │ │ └── liquidity.svg │ │ │ ├── tokens │ │ │ ├── DAI.svg │ │ │ ├── ETH.svg │ │ │ ├── FRAX.svg │ │ │ ├── FXS.svg │ │ │ ├── LUSD.svg │ │ │ ├── R.svg │ │ │ ├── UNI.svg │ │ │ ├── USDC.svg │ │ │ ├── USDT.svg │ │ │ ├── WBTC.svg │ │ │ ├── rETH.svg │ │ │ ├── sfrxETH.svg │ │ │ └── wstETH.svg │ │ │ ├── viewblock.svg │ │ │ └── voyager.svg │ ├── components │ │ ├── Containers │ │ │ ├── Footer │ │ │ │ ├── Footer.jsx │ │ │ │ └── Footer.module.scss │ │ │ ├── Header │ │ │ │ ├── Header.jsx │ │ │ │ └── Header.module.scss │ │ │ └── index.jsx │ │ ├── Features │ │ │ ├── Account │ │ │ │ ├── Account.jsx │ │ │ │ └── Account.module.scss │ │ │ ├── AutoWithdrawal │ │ │ │ ├── AutoWithdrawal.jsx │ │ │ │ └── AutoWithdrawal.module.scss │ │ │ ├── FastWithdrawal │ │ │ │ ├── FastWithdrawal.jsx │ │ │ │ ├── FastWithdrawal.module.scss │ │ │ │ ├── FastWithdrawalCheckbox.jsx │ │ │ │ └── FastWithdrawalDisclaimer │ │ │ │ │ ├── FastWithdrawalDisclaimer.jsx │ │ │ │ │ └── FastWithdrawalDisclaimer.module.scss │ │ │ ├── ProvidersMenu │ │ │ │ ├── ProvidersMenu.jsx │ │ │ │ └── ProvidersMenu.module.scss │ │ │ ├── SelectToken │ │ │ │ ├── SelectToken.jsx │ │ │ │ └── SelectToken.module.scss │ │ │ ├── Source │ │ │ │ ├── Source.jsx │ │ │ │ └── Source.module.scss │ │ │ ├── ToastManager │ │ │ │ ├── ToastManager.jsx │ │ │ │ └── ToastManager.module.scss │ │ │ ├── Transfer │ │ │ │ ├── Transfer.jsx │ │ │ │ └── Transfer.module.scss │ │ │ ├── TransferLog │ │ │ │ ├── TransferLog.jsx │ │ │ │ └── TransferLog.module.scss │ │ │ ├── WalletButtons │ │ │ │ └── WalletButtons.jsx │ │ │ └── index.jsx │ │ └── UI │ │ │ ├── AccountAddress │ │ │ ├── AccountAddress.jsx │ │ │ └── AccountAddress.module.scss │ │ │ ├── Alert │ │ │ ├── Alert.jsx │ │ │ └── Alert.module.scss │ │ │ ├── BackButton │ │ │ ├── BackButton.jsx │ │ │ └── BackButton.module.scss │ │ │ ├── Badge │ │ │ ├── Badge.jsx │ │ │ └── Badge.module.scss │ │ │ ├── BlockExplorer │ │ │ ├── BlockExplorer.jsx │ │ │ ├── BlockExplorerButton.jsx │ │ │ ├── BlockExplorerPropTypes.jsx │ │ │ └── BlockExplorerSelect │ │ │ │ ├── BlockExplorerSelect.jsx │ │ │ │ └── BlockExplorerSelect.theme.jsx │ │ │ ├── Bullet │ │ │ ├── Bullet.jsx │ │ │ └── Bullet.module.scss │ │ │ ├── BurgerMenu │ │ │ ├── BurgerMenu.jsx │ │ │ └── BurgerMenu.module.scss │ │ │ ├── BurgerMenuItem │ │ │ ├── BurgerMenuItem.jsx │ │ │ └── BurgerMenuItem.module.scss │ │ │ ├── Button │ │ │ ├── Button.jsx │ │ │ └── Button.module.scss │ │ │ ├── ChainSelect │ │ │ ├── ChainSelect.jsx │ │ │ └── ChainSelect.theme.jsx │ │ │ ├── CheckboxWithText │ │ │ ├── CheckboxWithText.jsx │ │ │ └── CheckboxWithText.module.scss │ │ │ ├── Circle │ │ │ ├── Circle.jsx │ │ │ └── Circle.module.scss │ │ │ ├── CircleLogo │ │ │ ├── CircleLogo.jsx │ │ │ └── CircleLogo.module.scss │ │ │ ├── CollapseExpand │ │ │ ├── CollapseExpand.jsx │ │ │ └── CollapseExpand.module.scss │ │ │ ├── Divider │ │ │ ├── Divider.jsx │ │ │ └── Divider.module.scss │ │ │ ├── DynamicIcon │ │ │ └── DynamicIcon.jsx │ │ │ ├── FullScreenContainer │ │ │ ├── FullScreenContainer.jsx │ │ │ └── FullScreenContainer.module.scss │ │ │ ├── Icon │ │ │ ├── Icon.jsx │ │ │ └── Icon.module.scss │ │ │ ├── Image │ │ │ ├── Image.jsx │ │ │ └── Image.module.scss │ │ │ ├── Input │ │ │ ├── Input.jsx │ │ │ └── Input.module.scss │ │ │ ├── KeyFrames │ │ │ └── KeyFrames.jsx │ │ │ ├── Link │ │ │ ├── Link.jsx │ │ │ └── Link.module.scss │ │ │ ├── LinkButton │ │ │ ├── LinkButton.jsx │ │ │ └── LinkButton.module.scss │ │ │ ├── Loading │ │ │ └── Loading.jsx │ │ │ ├── LoginWalletButton │ │ │ └── LoginWalletButton.jsx │ │ │ ├── MainMenuButton │ │ │ ├── MainMenuButton.jsx │ │ │ └── MainMenuButton.module.scss │ │ │ ├── MaxButton │ │ │ ├── MaxButton.jsx │ │ │ └── MaxButton.module.scss │ │ │ ├── Menu │ │ │ ├── Menu.jsx │ │ │ └── Menu.module.scss │ │ │ ├── MenuBackground │ │ │ ├── MenuBackground.jsx │ │ │ └── MenuBackground.module.scss │ │ │ ├── MenuTitle │ │ │ ├── MenuTitle.jsx │ │ │ └── MenuTitle.module.scss │ │ │ ├── Modal │ │ │ ├── BlockedAddressModal │ │ │ │ ├── BlockedAddressModal.jsx │ │ │ │ └── BlockedAddressModal.module.scss │ │ │ ├── ErrorModal │ │ │ │ ├── ErrorModal.jsx │ │ │ │ └── ErrorModal.module.scss │ │ │ ├── Modal │ │ │ │ ├── Modal.jsx │ │ │ │ └── Modal.module.scss │ │ │ ├── ModalBody │ │ │ │ ├── ModalBody.jsx │ │ │ │ └── ModalBody.module.scss │ │ │ ├── ModalFooter │ │ │ │ ├── ModalFooter.jsx │ │ │ │ └── ModalFooter.module.scss │ │ │ ├── ModalHeader │ │ │ │ ├── ModalHeader.jsx │ │ │ │ └── ModalHeader.module.scss │ │ │ ├── ModalHeaderWithIcon │ │ │ │ ├── ModalHeaderWithIcon.jsx │ │ │ │ └── ModalHeaderWithIcon.module.scss │ │ │ ├── ModalText │ │ │ │ ├── ModalText.jsx │ │ │ │ └── ModalText.module.scss │ │ │ ├── ModalTitle │ │ │ │ ├── ModalTitle.jsx │ │ │ │ └── ModalTitle.module.scss │ │ │ ├── ModalWrapper.jsx │ │ │ ├── ProgressModal │ │ │ │ ├── ProgressModalBody │ │ │ │ │ ├── ProgressModalBody.jsx │ │ │ │ │ └── ProgressModalBody.module.scss │ │ │ │ ├── ProgressModalHeader │ │ │ │ │ ├── ProgressModalHeader.jsx │ │ │ │ │ └── ProgressModalHeader.module.scss │ │ │ │ └── index.jsx │ │ │ ├── TransactionSubmittedModal │ │ │ │ ├── TransactionSubmittedModalBody │ │ │ │ │ ├── TransactionSubmittedModalBody.jsx │ │ │ │ │ └── TransactionSubmittedModalBody.module.scss │ │ │ │ ├── TransactionSubmittedModalButton.jsx │ │ │ │ ├── TransactionSubmittedModalHeader │ │ │ │ │ ├── TransactionSubmittedModalHeader.jsx │ │ │ │ │ └── TransactionSubmittedModalHeader.module.scss │ │ │ │ └── index.jsx │ │ │ └── index.jsx │ │ │ ├── MultiChoiceItem │ │ │ ├── MultiChoiceItem.jsx │ │ │ └── MultiChoiceItem.module.scss │ │ │ ├── MultiChoiceList │ │ │ └── MultiChoiceList.jsx │ │ │ ├── MultiChoiceMenu │ │ │ ├── MultiChoiceMenu.jsx │ │ │ └── MultiChoiceMenu.module.scss │ │ │ ├── NetworkMenu │ │ │ ├── NetworkMenu.jsx │ │ │ └── NetworkMenu.module.scss │ │ │ ├── NetworkSwap │ │ │ ├── NetworkSwap.jsx │ │ │ └── NetworkSwap.module.scss │ │ │ ├── NetworkTitle │ │ │ ├── NetworkTitle.jsx │ │ │ └── NetworkTitle.module.scss │ │ │ ├── RefreshIcon │ │ │ ├── RefreshIcon.jsx │ │ │ └── RefreshIcon.module.scss │ │ │ ├── SearchToken │ │ │ ├── SearchToken.jsx │ │ │ └── SearchToken.module.scss │ │ │ ├── SelectTokenList │ │ │ ├── SelectTokenList.jsx │ │ │ └── SelectTokenList.module.scss │ │ │ ├── SelectTokenRow │ │ │ ├── SelectTokenRow.jsx │ │ │ └── SelectTokenRow.module.scss │ │ │ ├── SideButton │ │ │ ├── SideButton.jsx │ │ │ └── SideButton.module.scss │ │ │ ├── SourceSelect │ │ │ ├── SourceSelect.jsx │ │ │ └── SourceSelect.theme.jsx │ │ │ ├── Stepper │ │ │ ├── Stepper.jsx │ │ │ ├── Stepper.module.scss │ │ │ └── Stepper.theme.jsx │ │ │ ├── StyledBackground │ │ │ ├── StyledBackground.jsx │ │ │ └── StyledBackground.module.scss │ │ │ ├── Tab │ │ │ ├── Tab.jsx │ │ │ └── Tab.module.scss │ │ │ ├── Tabs │ │ │ └── Tabs.jsx │ │ │ ├── TermsDisclaimer │ │ │ └── TermsDisclaimer.jsx │ │ │ ├── Toast │ │ │ ├── CallToActionToast │ │ │ │ ├── CallToActionToast.jsx │ │ │ │ └── CallToActionToast.module.scss │ │ │ ├── CompleteTransferToL1Toast │ │ │ │ └── CompleteTransferToL1Toast.jsx │ │ │ ├── ErrorToast │ │ │ │ ├── ErrorToast.jsx │ │ │ │ └── ErrorToast.module.scss │ │ │ ├── ToastBody │ │ │ │ ├── ToastBody.jsx │ │ │ │ └── ToastBody.module.scss │ │ │ ├── ToastButton │ │ │ │ ├── ToastButton.jsx │ │ │ │ └── ToastButton.module.scss │ │ │ ├── ToastFooter │ │ │ │ ├── ToastFooter.jsx │ │ │ │ └── ToastFooter.module.scss │ │ │ ├── ToastHeader │ │ │ │ ├── ToastHeader.jsx │ │ │ │ └── ToastHeader.module.scss │ │ │ ├── ToastSeparator │ │ │ │ ├── ToastSeparator.jsx │ │ │ │ └── ToastSeparator.module.scss │ │ │ ├── TransferToast │ │ │ │ └── TransferToast.jsx │ │ │ └── index.jsx │ │ │ ├── TokenBalance │ │ │ ├── TokenBalance.jsx │ │ │ └── TokenBalance.module.scss │ │ │ ├── TokenInput │ │ │ ├── TokenInput.jsx │ │ │ └── TokenInput.module.scss │ │ │ ├── TokenSelector │ │ │ ├── TokenSelector.jsx │ │ │ └── TokenSelector.module.scss │ │ │ ├── TransferButton │ │ │ └── TransferButton.jsx │ │ │ ├── TransferLogContainer │ │ │ ├── TransferLogContainer.jsx │ │ │ └── TransferLogContainer.module.scss │ │ │ ├── WalletButton │ │ │ ├── WalletButton.jsx │ │ │ └── WalletButton.module.scss │ │ │ └── index.jsx │ ├── config │ │ ├── block-explorers.js │ │ ├── constants.js │ │ ├── envs.js │ │ ├── sources.js │ │ └── translations.js │ ├── enums │ │ ├── Breakpoint.js │ │ ├── MenuType.js │ │ ├── ToastType.js │ │ ├── TransferError.js │ │ ├── TransferStep.js │ │ └── index.js │ ├── hooks │ │ ├── index.jsx │ │ ├── useAccountChange.jsx │ │ ├── useBridgeContractAPI.jsx │ │ ├── useColors.jsx │ │ ├── useConstants.jsx │ │ ├── useContract.jsx │ │ ├── useEnvs.jsx │ │ ├── useFastWithdrawal.jsx │ │ ├── useFonts.jsx │ │ ├── useGasCost.jsx │ │ ├── useIsMaxTotalBalanceExceeded.jsx │ │ ├── useSendEthereumTransaction.jsx │ │ ├── useStarknetWallet.jsx │ │ ├── useTitle.jsx │ │ ├── useTokenBalance.jsx │ │ ├── useTokenContractAPI.jsx │ │ ├── useTracking.jsx │ │ ├── useTransfer.jsx │ │ ├── useTransferProgress.jsx │ │ ├── useTransferToL1.jsx │ │ ├── useTransferToL2.jsx │ │ ├── useTranslation.jsx │ │ └── useVars.jsx │ ├── index.jsx │ ├── index.scss │ ├── providers │ │ ├── AppProvider │ │ │ ├── AppProvider.jsx │ │ │ ├── app-context.jsx │ │ │ ├── app-hooks.jsx │ │ │ ├── app-reducer.jsx │ │ │ └── index.jsx │ │ ├── DynamicProvider │ │ │ └── DynamicProvider.jsx │ │ ├── MenuProvider │ │ │ ├── MenuProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── menu-context.jsx │ │ │ ├── menu-hooks.jsx │ │ │ └── menu-reducer.jsx │ │ ├── ModalProvider │ │ │ ├── ModalProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── modal-context.jsx │ │ │ ├── modal-hooks.jsx │ │ │ └── modal-reducer.jsx │ │ ├── QueryClientProvider │ │ │ └── QueryClientProvider.jsx │ │ ├── SourceProvider │ │ │ ├── SourceProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── source-context.jsx │ │ │ ├── source-hooks.jsx │ │ │ └── source-reducer.jsx │ │ ├── TokensProvider │ │ │ ├── TokensProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── tokens-context.jsx │ │ │ ├── tokens-hooks.jsx │ │ │ └── tokens-reducer.jsx │ │ ├── TransferLogProvider │ │ │ ├── TransferLogProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── transfer-log-context.jsx │ │ │ └── transfer-log-hooks.jsx │ │ ├── TransferProvider │ │ │ ├── TransferProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── transfer-context.jsx │ │ │ ├── transfer-hooks.jsx │ │ │ └── transfer-reducer.jsx │ │ ├── WalletProvider │ │ │ ├── WalletProvider.jsx │ │ │ ├── index.jsx │ │ │ ├── wallet-context.jsx │ │ │ └── wallet-hooks.jsx │ │ ├── combine-providers.jsx │ │ └── index.jsx │ ├── routes │ │ ├── Bridge │ │ │ ├── Bridge.jsx │ │ │ └── Bridge.module.scss │ │ ├── Faq │ │ │ ├── Faq.jsx │ │ │ ├── Faq.module.scss │ │ │ └── Faqs.jsx │ │ ├── ProtectedRoute.jsx │ │ ├── Terms │ │ │ ├── Terms.jsx │ │ │ ├── Terms.module.scss │ │ │ └── TermsOfUse.jsx │ │ └── index.jsx │ ├── styles │ │ ├── colors.module.scss │ │ ├── dynamic.theme.scss │ │ ├── fonts.module.scss │ │ └── variables.module.scss │ ├── utils │ │ ├── index.js │ │ └── token.js │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── packages ├── config │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ │ ├── cookies.ts │ │ ├── index.ts │ │ ├── labels.ts │ │ ├── urls.ts │ │ └── values.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── typedoc.json │ └── vite.config.ts ├── enums │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .prettierignore │ ├── package.json │ ├── src │ │ ├── BrowserType.ts │ │ ├── ChainInfo.ts │ │ ├── ChainType.ts │ │ ├── EventName.ts │ │ ├── LoginErrorType.ts │ │ ├── NetworkType.ts │ │ ├── SelectorName.ts │ │ ├── TransactionHashPrefix.ts │ │ ├── TransactionStatus.ts │ │ ├── WalletErrorType.ts │ │ ├── WalletId.ts │ │ ├── WalletStatus.ts │ │ └── index.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── typedoc.json │ └── vite.config.ts ├── http-client │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── js-logger │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── starknet-connect │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .mocharc.cjs │ ├── .prettierignore │ ├── README.md │ ├── package.json │ ├── src │ │ ├── __tests__ │ │ │ ├── connector.spec.ts │ │ │ └── provider.spec.ts │ │ ├── connector.ts │ │ ├── index.ts │ │ ├── provider │ │ │ ├── enums.ts │ │ │ ├── index.ts │ │ │ ├── manager.ts │ │ │ ├── provider.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── ui │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── .stylelintignore │ ├── .stylelintrc.cjs │ ├── package.json │ ├── src │ │ ├── assets │ │ │ └── svg │ │ │ │ ├── alert-circle.svg │ │ │ │ ├── close.svg │ │ │ │ ├── collapse.svg │ │ │ │ ├── copy.svg │ │ │ │ ├── disconnect.svg │ │ │ │ ├── discord.svg │ │ │ │ ├── info.svg │ │ │ │ ├── link.svg │ │ │ │ ├── selected.svg │ │ │ │ ├── starkgate.svg │ │ │ │ ├── starknet.svg │ │ │ │ ├── starkware.svg │ │ │ │ ├── success.svg │ │ │ │ ├── tokens │ │ │ │ ├── DAI.svg │ │ │ │ ├── ETH.svg │ │ │ │ ├── FRAX.svg │ │ │ │ ├── USDC.svg │ │ │ │ ├── USDT.svg │ │ │ │ ├── WBTC.svg │ │ │ │ ├── rETH.svg │ │ │ │ └── wstETH.svg │ │ │ │ └── warning.svg │ │ ├── components │ │ │ ├── Alert │ │ │ │ ├── Alert.jsx │ │ │ │ └── Alert.module.scss │ │ │ ├── Button │ │ │ │ ├── Button.jsx │ │ │ │ └── Button.module.scss │ │ │ ├── Checkbox │ │ │ │ ├── Checkbox.jsx │ │ │ │ └── Checkbox.module.scss │ │ │ ├── Circle │ │ │ │ ├── Circle.jsx │ │ │ │ └── Circle.module.scss │ │ │ ├── CircleLogo │ │ │ │ ├── CircleLogo.jsx │ │ │ │ └── CircleLogo.module.scss │ │ │ ├── CollapseExpand │ │ │ │ ├── CollapseExpand.jsx │ │ │ │ └── CollapseExpand.module.scss │ │ │ ├── DiscordButton │ │ │ │ └── DiscordButton.jsx │ │ │ ├── DynamicIcon │ │ │ │ └── DynamicIcon.jsx │ │ │ ├── Icon │ │ │ │ ├── Icon.jsx │ │ │ │ └── Icon.module.scss │ │ │ ├── Image │ │ │ │ └── Image.jsx │ │ │ ├── LinkButton │ │ │ │ ├── LinkButton.jsx │ │ │ │ └── LinkButton.module.scss │ │ │ ├── Loading │ │ │ │ ├── Loading.jsx │ │ │ │ └── Loading.theme.jsx │ │ │ ├── Logo │ │ │ │ ├── Logo.jsx │ │ │ │ └── Logo.module.scss │ │ │ ├── Modal │ │ │ │ ├── ErrorModal │ │ │ │ │ ├── ErrorModal.jsx │ │ │ │ │ └── ErrorModal.module.scss │ │ │ │ ├── Modal │ │ │ │ │ ├── Modal.jsx │ │ │ │ │ └── Modal.module.scss │ │ │ │ ├── ModalBody │ │ │ │ │ ├── ModalBody.jsx │ │ │ │ │ └── ModalBody.module.scss │ │ │ │ ├── ModalFooter │ │ │ │ │ ├── ModalFooter.jsx │ │ │ │ │ └── ModalFooter.module.scss │ │ │ │ ├── ModalHeader │ │ │ │ │ ├── ModalHeader.jsx │ │ │ │ │ └── ModalHeader.module.scss │ │ │ │ ├── ModalHeaderWithIcon │ │ │ │ │ ├── ModalHeaderWithIcon.jsx │ │ │ │ │ └── ModalHeaderWithIcon.module.scss │ │ │ │ ├── ModalText │ │ │ │ │ ├── ModalText.jsx │ │ │ │ │ └── ModalText.module.scss │ │ │ │ ├── ModalTitle │ │ │ │ │ ├── ModalTitle.jsx │ │ │ │ │ └── ModalTitle.module.scss │ │ │ │ ├── ModalWrapper.jsx │ │ │ │ └── index.jsx │ │ │ ├── SideButton │ │ │ │ ├── SideButton.jsx │ │ │ │ └── SideButton.module.scss │ │ │ ├── Stepper │ │ │ │ ├── Stepper.jsx │ │ │ │ ├── Stepper.module.scss │ │ │ │ └── Stepper.theme.jsx │ │ │ ├── StyledBackground │ │ │ │ ├── StyledBackground.jsx │ │ │ │ └── StyledBackground.module.scss │ │ │ ├── TextField │ │ │ │ ├── TextField.jsx │ │ │ │ └── TextField.theme.jsx │ │ │ ├── TextSwitch │ │ │ │ ├── TextSwitch.jsx │ │ │ │ ├── TextSwitch.module.scss │ │ │ │ ├── TextSwitchTab.jsx │ │ │ │ └── index.js │ │ │ ├── Tooltip │ │ │ │ ├── Tooltip.jsx │ │ │ │ └── Tooltip.theme.jsx │ │ │ ├── TransactionLog │ │ │ │ ├── TransactionLogContainer │ │ │ │ │ ├── TransactionLogContainer.jsx │ │ │ │ │ └── TransactionLogContainer.module.scss │ │ │ │ ├── TransactionLogItem │ │ │ │ │ ├── TransactionLogItem.jsx │ │ │ │ │ └── TransactionLogItem.module.scss │ │ │ │ └── index.jsx │ │ │ ├── WalletButton │ │ │ │ ├── AccountWalletButton │ │ │ │ │ ├── AccountWalletButton.jsx │ │ │ │ │ └── AccountWalletButton.module.scss │ │ │ │ ├── ChainLabel │ │ │ │ │ ├── ChainLabel.jsx │ │ │ │ │ └── ChainLabel.module.scss │ │ │ │ ├── ConnectWalletButton │ │ │ │ │ ├── ConnectWalletButton.jsx │ │ │ │ │ └── ConnectWalletButton.module.scss │ │ │ │ ├── WalletButton │ │ │ │ │ ├── WalletButton.jsx │ │ │ │ │ └── WalletButton.module.scss │ │ │ │ ├── WalletErrorAlert │ │ │ │ │ ├── WalletErrorAlert.jsx │ │ │ │ │ └── WalletErrorAlert.module.scss │ │ │ │ ├── WalletMenu │ │ │ │ │ ├── WalletMenu.jsx │ │ │ │ │ └── WalletMenu.module.scss │ │ │ │ ├── WalletMenuItem │ │ │ │ │ ├── WalletMenuItem.jsx │ │ │ │ │ └── WalletMenuItem.module.scss │ │ │ │ └── index.jsx │ │ │ ├── index.jsx │ │ │ └── translations.ts │ │ ├── containers │ │ │ ├── Footer │ │ │ │ ├── Footer.jsx │ │ │ │ └── Footer.module.scss │ │ │ ├── Header │ │ │ │ ├── Header.jsx │ │ │ │ └── Header.module.scss │ │ │ ├── Main │ │ │ │ ├── Main.jsx │ │ │ │ └── Main.module.scss │ │ │ ├── index.jsx │ │ │ └── translations.ts │ │ ├── declaration.d.ts │ │ ├── hooks │ │ │ ├── index.tsx │ │ │ ├── useAnimation.tsx │ │ │ ├── useColors.tsx │ │ │ ├── useConstants.tsx │ │ │ ├── useContract.tsx │ │ │ ├── useDidMountEffect.tsx │ │ │ ├── useEnvs.tsx │ │ │ ├── useFetchData.tsx │ │ │ ├── useFonts.tsx │ │ │ ├── useIsMounted.tsx │ │ │ ├── useLogger.tsx │ │ │ ├── usePrevious.tsx │ │ │ ├── useTracking.tsx │ │ │ ├── useTranslation.tsx │ │ │ └── useVars.tsx │ │ ├── index.jsx │ │ ├── providers │ │ │ ├── ModalProvider │ │ │ │ ├── ModalProvider.jsx │ │ │ │ ├── index.jsx │ │ │ │ ├── modal-context.jsx │ │ │ │ ├── modal-hooks.jsx │ │ │ │ └── modal-reducer.jsx │ │ │ ├── StarknetWalletProvider │ │ │ │ ├── StarknetWalletProvider.jsx │ │ │ │ ├── index.jsx │ │ │ │ ├── starknet-wallet-context.jsx │ │ │ │ ├── starknet-wallet-hooks.jsx │ │ │ │ └── starknet-wallet-reducer.jsx │ │ │ ├── combine-providers.jsx │ │ │ ├── index.jsx │ │ │ └── translations.ts │ │ └── styles │ │ │ ├── _colors.module.scss │ │ │ ├── _fonts.module.scss │ │ │ ├── _vars.module.scss │ │ │ └── index.scss │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── utils-browser │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ │ ├── browser.ts │ │ ├── globals.d.ts │ │ ├── index.ts │ │ ├── storage.ts │ │ ├── styles.ts │ │ └── ua-parser.ts │ ├── test │ │ ├── browser.spec.ts │ │ └── storage.spec.ts │ ├── tsconfig.json │ ├── typedoc.json │ └── vite.config.ts ├── utils │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ │ ├── assert.ts │ │ ├── date.ts │ │ ├── formatter.ts │ │ ├── id.ts │ │ ├── index.ts │ │ ├── number.ts │ │ ├── object.ts │ │ ├── string.ts │ │ └── url.ts │ ├── test │ │ ├── date.spec.ts │ │ ├── number.spec.ts │ │ ├── object.spec.ts │ │ ├── string.spec.ts │ │ ├── url.spec.ts │ │ └── wallet.spec.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── typedoc.json │ └── vite.config.ts └── web3-utils │ ├── .eslintignore │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── .prettierignore │ ├── package.json │ ├── src │ ├── ethereum.ts │ ├── index.ts │ ├── parser.ts │ ├── signature.ts │ └── starknet.ts │ ├── test │ ├── parser.spec.ts │ └── starkex.spec.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── typedoc.json │ └── vite.config.ts └── tools ├── eslint-config-base ├── .prettierignore ├── index.js └── package.json ├── eslint-config-react-custom ├── .prettierignore ├── index.js └── package.json ├── eslint-config-ts ├── .prettierignore ├── index.js └── package.json └── tsconfig ├── .prettierignore ├── README.md ├── base.json ├── node.json ├── package.json └── react.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['base'] 4 | }; 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: dan-ziv 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | 28 | - OS: [e.g. iOS] 29 | - Browser [e.g. chrome, safari] 30 | - Version [e.g. 22] 31 | 32 | **Additional context** 33 | Add any other context about the problem here. 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: dan-ziv 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description of the Changes 2 | 3 | Please add a detailed description of the change, whether it's an enhancement or a bugfix. 4 | If the PR is related to an open issue please link to it. 5 | 6 | Solves #[INSERT_MONDAY_ID_HERE](INSERT_MONDAY_URL_HERE) 7 | 8 | --- 9 | 10 | ### Checklist 11 | 12 | - [ ] Manually tests of the main Application flows are done and passed. 13 | - [ ] New unit / functional tests have been added (whenever applicable). 14 | - [ ] Docs have been updated (whenever relevant). 15 | - [ ] PR title is follow the [Conventional Commits](https://www.conventionalcommits.org/) convention: `[optional scope]: `, e.g: `fix: prevent racing of requests` 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | dist 6 | .pnp 7 | .pnp.js 8 | 9 | # testing 10 | coverage 11 | 12 | # next.js 13 | .next/ 14 | out/ 15 | build 16 | 17 | # misc 18 | .DS_Store 19 | *.pem 20 | 21 | # debug 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | .pnpm-debug.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # turbo 34 | .turbo 35 | 36 | # IDE 37 | .idea 38 | .vscode 39 | 40 | .history 41 | 42 | # Vite 43 | **/vite.config.ts.timestamp-* 44 | 45 | # run-rs 46 | data 47 | 48 | # mocha 49 | coverage/ 50 | .nyc_output/ 51 | 52 | # building tests as part of build 53 | .mocharc.buildtests.js 54 | tsconfig.buildtests.json 55 | 56 | # autoenv 57 | .in 58 | .out 59 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | pnpm-lock.yaml -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "bracketSpacing": false, 4 | "embeddedLanguageFormatting": "auto", 5 | "insertPragma": false, 6 | "printWidth": 100, 7 | "proseWrap": "preserve", 8 | "quoteProps": "as-needed", 9 | "requirePragma": false, 10 | "semi": true, 11 | "singleQuote": true, 12 | "tabWidth": 2, 13 | "trailingComma": "none", 14 | "useTabs": false, 15 | "importOrder": ["^@(.*)$", "^[./]"], 16 | "importOrderSeparation": true, 17 | "importOrderSortSpecifiers": true, 18 | "htmlWhitespaceSensitivity": "css", 19 | "jsxSingleQuote": false, 20 | "plugins": ["@trivago/prettier-plugin-sort-imports"] 21 | } 22 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'workspace/apps/**/*' 3 | - 'workspace/packages/*' 4 | - 'workspace/tools/*' 5 | - 'workspace/pipeline/*' 6 | -------------------------------------------------------------------------------- /scripts/dev-apps.js: -------------------------------------------------------------------------------- 1 | const {execSync} = require('child_process'); 2 | 3 | const devApp = process.argv[2]; 4 | 5 | const sequentialExecution = async (...commands) => { 6 | if (commands.length === 0) { 7 | return 0; 8 | } 9 | 10 | execSync(commands.shift(), {stdio: 'inherit'}); 11 | 12 | return sequentialExecution(...commands); 13 | }; 14 | 15 | sequentialExecution( 16 | `pnpm turbo run build --filter=@${devApp}^...`, 17 | `pnpm turbo run dev --filter=@${devApp}` 18 | ); 19 | -------------------------------------------------------------------------------- /turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turbo.build/schema.json", 3 | "globalEnv": ["npm_package_version", "npm_package_name"], 4 | "pipeline": { 5 | "build": { 6 | "dependsOn": ["prebuild", "ts-declarations", "^build"], 7 | "outputs": ["dist/**"] 8 | }, 9 | "clean": {}, 10 | "dev": { 11 | "cache": false, 12 | "persistent": true 13 | }, 14 | "format": {}, 15 | "lint": { 16 | "dependsOn": ["^lint"] 17 | }, 18 | "pack": { 19 | "dependsOn": ["lint", "build", "test"] 20 | }, 21 | "prebuild": {}, 22 | "test": { 23 | "dependsOn": ["build"] 24 | }, 25 | "ts-declarations": { 26 | "dependsOn": ["prebuild", "^ts-declarations", "^build"] 27 | }, 28 | "@starkgate/web#lint": { 29 | "env": ["NETLIFY"] 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['ts'] 4 | }; 5 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | CHANGELOG.md 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | export * from './tokens'; 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@starkware-webapps/tsconfig/base.json", 3 | "compilerOptions": { 4 | "declarationDir": "dist/types", 5 | "outDir": "dist" 6 | }, 7 | "include": ["src"], 8 | "exclude": ["dist", "node_modules"], 9 | "references": [{"path": "./tsconfig.node.json"}] 10 | } 11 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@starkware-webapps/tsconfig/node.json", 3 | "compilerOptions": { 4 | "composite": true, 5 | "module": "ESNext" 6 | }, 7 | "include": ["vite.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/typedoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "entryPoints": ["./src/index.ts"], 3 | "name": "@starkgate/shared", 4 | "includeVersion": true 5 | } 6 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/shared/vite.config.ts: -------------------------------------------------------------------------------- 1 | import {resolve} from 'path'; 2 | import {defineConfig} from 'vite'; 3 | 4 | type ViteConfigInput = { 5 | mode: string; 6 | }; 7 | 8 | export default ({mode}: ViteConfigInput) => { 9 | const prodMode = mode === 'production'; 10 | 11 | return defineConfig({ 12 | build: { 13 | emptyOutDir: false, 14 | lib: { 15 | entry: resolve(__dirname, 'src/index.ts'), 16 | name: 'StarkGateShared', 17 | formats: ['es', 'cjs'], 18 | fileName: 'index' 19 | }, 20 | sourcemap: !prodMode, 21 | copyPublicDir: false 22 | } 23 | }); 24 | }; 25 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/.env: -------------------------------------------------------------------------------- 1 | VITE_APP_SCREENING_SERVICE_NAME=screening 2 | VITE_APP_TRANSFER_LOG_SERVICE_NAME=transfer-log 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | *.css 4 | *.svg -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['react-custom'], 4 | env: { 5 | jest: true 6 | }, 7 | globals: { 8 | APP_VERSION: true, 9 | APP_NAME: true 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | dist 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | .idea 25 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | CHANGELOG.md 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/.stylelintignore: -------------------------------------------------------------------------------- 1 | dist 2 | src/styles/dynamic.theme.scss -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/public/env-config.js: -------------------------------------------------------------------------------- 1 | window.__env__ = {}; 2 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/App.module.scss: -------------------------------------------------------------------------------- 1 | .app { 2 | display: flex; 3 | flex-direction: column; 4 | } 5 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/__tests__/utils/token.spec.js: -------------------------------------------------------------------------------- 1 | import {isDai, isEth} from '@utils'; 2 | 3 | describe('isEth', () => { 4 | it('should return true for eth symbol', () => { 5 | expect(isEth('ETH')).toBeTruthy(); 6 | }); 7 | 8 | it('should return false for non-eth symbol', () => { 9 | expect(isEth('DAI')).toBeFalsy(); 10 | }); 11 | }); 12 | 13 | describe('isDai', () => { 14 | it('should return true for dai symbol', () => { 15 | expect(isDai('DAI')).toBeTruthy(); 16 | }); 17 | 18 | it('should return false for non-dai symbol', () => { 19 | expect(isDai('ETH')).toBeFalsy(); 20 | }); 21 | }); 22 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/abis/L1/index.js: -------------------------------------------------------------------------------- 1 | import L1_ERC20_ABI from './ERC20.json'; 2 | import L1_DAI_BRIDGE_ABI from './StarknetDAIBridge.json'; 3 | import L1_ERC20_BRIDGE_ABI from './StarknetERC20Bridge.json'; 4 | import L1_ETH_BRIDGE_ABI from './StarknetEthBridge.json'; 5 | import L1_MESSAGING_ABI from './StarknetMessaging.json'; 6 | import L1_TELEPORT_ORACLE_AUTH_ABI from './TeleportOracleAuth.json'; 7 | 8 | export { 9 | L1_ERC20_ABI, 10 | L1_ERC20_BRIDGE_ABI, 11 | L1_ETH_BRIDGE_ABI, 12 | L1_MESSAGING_ABI, 13 | L1_DAI_BRIDGE_ABI, 14 | L1_TELEPORT_ORACLE_AUTH_ABI 15 | }; 16 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/abis/L2/index.js: -------------------------------------------------------------------------------- 1 | import L2_DAI_TELEPORT_GATEWAY from './dai_teleport_gateway.json'; 2 | import L2_ERC20_ABI from './erc20.json'; 3 | import L2_BRIDGE_ABI from './token_bridge.json'; 4 | 5 | export {L2_ERC20_ABI, L2_BRIDGE_ABI, L2_DAI_TELEPORT_GATEWAY}; 6 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/abis/index.js: -------------------------------------------------------------------------------- 1 | export * from './L1'; 2 | export * from './L2'; 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/analytics/gtag.js: -------------------------------------------------------------------------------- 1 | import {GOOGLE_MEASURE_ID} from '@config/envs'; 2 | 3 | export const track = (event, data) => { 4 | window.gtag('event', `${APP_NAME}/${event}`, data); 5 | }; 6 | 7 | export const setUser = data => { 8 | window.gtag('config', GOOGLE_MEASURE_ID, { 9 | user_id: `${data.accountL1}-${data.accountL2}`, 10 | user_account_L1: data.accountL1, 11 | user_account_L2: data.accountL2 12 | }); 13 | }; 14 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/analytics/index.js: -------------------------------------------------------------------------------- 1 | export * from './track'; 2 | export * from './track-event-type'; 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/analytics/track.js: -------------------------------------------------------------------------------- 1 | import {getLogger} from '@starkware-webapps/js-logger'; 2 | 3 | import {track as gtagTrack, setUser as setGtagUser} from './gtag'; 4 | 5 | const logger = getLogger('Analytics'); 6 | 7 | export const track = (event, data) => { 8 | logger.debug('Sending track event...', {event, data}); 9 | gtagTrack(event, data); 10 | logger.debug('Track event sent.'); 11 | }; 12 | 13 | export const setUser = data => { 14 | logger.debug('Set user', data); 15 | setGtagUser(data); 16 | }; 17 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/api/gas-cost.js: -------------------------------------------------------------------------------- 1 | import {RELAYER_GAS_COST_URL} from '@config/envs'; 2 | import {createHttpClient, parseHttpClientError} from '@starkware-webapps/http-client'; 3 | import {promiseHandler} from '@starkware-webapps/utils'; 4 | 5 | const httpClient = createHttpClient({baseURL: RELAYER_GAS_COST_URL}); 6 | 7 | export const fetchGasCost = async bridgeAddress => { 8 | const [response, error] = await promiseHandler( 9 | httpClient.get(`${bridgeAddress}/${Math.floor(new Date().getTime() / 1000)}`) 10 | ); 11 | if (error) { 12 | throw parseHttpClientError(error); 13 | } else { 14 | const { 15 | result: {gasCost} 16 | } = response.data; 17 | return gasCost; 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/api/index.js: -------------------------------------------------------------------------------- 1 | export * from './attestations'; 2 | export * from './gas-cost'; 3 | export * from './screening'; 4 | export * from './transfers'; 5 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/api/screening.js: -------------------------------------------------------------------------------- 1 | import {SCREENING_SERVICE_URL as baseURL} from '@config/envs'; 2 | import {createHttpClient, parseHttpClientError} from '@starkware-webapps/http-client'; 3 | import {promiseHandler} from '@starkware-webapps/utils'; 4 | 5 | const httpClient = createHttpClient({ 6 | baseURL 7 | }); 8 | 9 | export const SCREENING_ENDPOINT = 'screen'; 10 | 11 | export const screenAddress = async address => { 12 | const [result, error] = await promiseHandler( 13 | httpClient.get(`/${SCREENING_ENDPOINT}?address=${address}`) 14 | ); 15 | if (error) { 16 | throw parseHttpClientError(error); 17 | } 18 | const { 19 | data: {blocked} 20 | } = result; 21 | return blocked; 22 | }; 23 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/img/light-accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starknet-io/starkgate-frontend/29902509d92c0aedaac1fa635bc8782f56fcb8e4/workspace/apps/starkgate/web/src/assets/img/light-accent.png -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/img/starkgate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starknet-io/starkgate-frontend/29902509d92c0aedaac1fa635bc8782f56fcb8e4/workspace/apps/starkgate/web/src/assets/img/starkgate.png -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/img/stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/starknet-io/starkgate-frontend/29902509d92c0aedaac1fa635bc8782f56fcb8e4/workspace/apps/starkgate/web/src/assets/img/stars.png -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/alert-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/collapse.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/copy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/fast.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/minus-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/plus-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/refresh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/icons/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/providers/banxa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/assets/svg/tokens/USDT.svg: -------------------------------------------------------------------------------- 1 | tether-usdt-logo -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Containers/Footer/Footer.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import useBreakpoint from 'use-breakpoint'; 3 | 4 | import {Breakpoint, isMobile} from '@enums'; 5 | import {useFooterTranslation} from '@hooks'; 6 | import {evaluate} from '@starkware-webapps/utils'; 7 | 8 | import styles from './Footer.module.scss'; 9 | 10 | export const Footer = () => { 11 | const {rightsTxt} = useFooterTranslation(); 12 | const {breakpoint} = useBreakpoint(Breakpoint); 13 | 14 | return !isMobile(breakpoint) ? ( 15 |
16 |
17 | {evaluate(rightsTxt, {fullYear: new Date().getFullYear()})} 18 |
19 |
20 | ) : null; 21 | }; 22 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Containers/Footer/Footer.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .footer { 4 | font-size: 13px; 5 | height: #{$--footer-height}px; 6 | border-top: 1px solid transparent; 7 | width: 100%; 8 | display: flex; 9 | justify-content: space-around; 10 | align-items: center; 11 | position: absolute; 12 | bottom: 0; 13 | left: 0; 14 | right: 0; 15 | overflow: hidden; 16 | background: transparent; 17 | 18 | .copyright { 19 | color: $--color-orange-soda; 20 | font-size: 12px; 21 | line-height: 24px; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Containers/index.jsx: -------------------------------------------------------------------------------- 1 | export * from './Footer/Footer'; 2 | export * from './Header/Header'; 3 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/Account/Account.module.scss: -------------------------------------------------------------------------------- 1 | .accountMenu { 2 | padding: 8px; 3 | width: 432px; 4 | } 5 | 6 | .linkButtons > * { 7 | margin-right: 5px; 8 | } 9 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/AutoWithdrawal/AutoWithdrawal.module.scss: -------------------------------------------------------------------------------- 1 | .autoWithdrawal { 2 | margin: 16px 0; 3 | } 4 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/FastWithdrawal/FastWithdrawal.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {toClasses} from '@starkware-webapps/utils-browser'; 5 | 6 | import styles from './FastWithdrawal.module.scss'; 7 | import {FastWithdrawalCheckbox} from './FastWithdrawalCheckbox'; 8 | import {FastWithdrawalDisclaimer} from './FastWithdrawalDisclaimer/FastWithdrawalDisclaimer'; 9 | 10 | export const FastWithdrawal = ({checked, disabled}) => { 11 | return ( 12 |
13 | 14 | {checked && } 15 |
16 | ); 17 | }; 18 | 19 | FastWithdrawal.propTypes = { 20 | checked: PropTypes.bool, 21 | disabled: PropTypes.bool 22 | }; 23 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/FastWithdrawal/FastWithdrawal.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .fastWithdrawal { 4 | display: flex; 5 | flex-direction: column; 6 | margin: 16px 0; 7 | 8 | &.disabled { 9 | opacity: 0.5; 10 | 11 | & * { 12 | pointer-events: none !important; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/ProvidersMenu/ProvidersMenu.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .selectContainer { 4 | padding: 8px 0; 5 | } 6 | 7 | .description { 8 | color: $--color-white; 9 | font-size: 12px; 10 | line-height: 18px; 11 | } 12 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/SelectToken/SelectToken.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .selectToken { 4 | padding: 0 8px; 5 | position: relative; 6 | display: flex; 7 | flex-direction: column; 8 | max-height: 100%; 9 | 10 | .background { 11 | content: ''; 12 | background-size: cover; 13 | background-repeat: no-repeat; 14 | position: absolute; 15 | top: 0; 16 | right: 0; 17 | bottom: 0; 18 | left: 0; 19 | opacity: 0.05; 20 | pointer-events: none; 21 | } 22 | 23 | .loadingContainer { 24 | margin: 50px auto; 25 | } 26 | 27 | .title { 28 | display: flex; 29 | white-space: pre; 30 | 31 | .network { 32 | display: flex; 33 | align-items: center; 34 | width: 100%; 35 | justify-content: space-between; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/Source/Source.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .source { 4 | transition: 0.3s ease-in-out; 5 | width: 432px; 6 | } 7 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/ToastManager/ToastManager.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .toastManager { 4 | margin-top: #{$--header-height}px; 5 | } 6 | 7 | .fastIndication { 8 | display: flex; 9 | margin-left: 8px; 10 | 11 | .fastIndicationText { 12 | color: $--color-orange-soda; 13 | margin-left: 4px; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/Transfer/Transfer.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .errorMsg { 4 | font-weight: 400; 5 | font-size: 14px; 6 | line-height: 20px; 7 | color: $--color-jasper; 8 | margin-top: 8px; 9 | } 10 | 11 | .bridgeIsFullReadMore { 12 | font-size: 12px; 13 | color: $--color-very-light-azure; 14 | line-height: 18px; 15 | } 16 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/Features/index.jsx: -------------------------------------------------------------------------------- 1 | export * from './Account/Account'; 2 | export * from './SelectToken/SelectToken'; 3 | export * from './Transfer/Transfer'; 4 | export * from './TransferLog/TransferLog'; 5 | export * from './ToastManager/ToastManager'; 6 | export * from './Source/Source'; 7 | export * from './ProvidersMenu/ProvidersMenu'; 8 | export * from './AutoWithdrawal/AutoWithdrawal'; 9 | export * from './FastWithdrawal/FastWithdrawal'; 10 | export * from './WalletButtons/WalletButtons'; 11 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/AccountAddress/AccountAddress.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .accountAddress { 4 | background: $--color-indigo; 5 | color: $--color-gainsboro; 6 | padding: 8px 16px; 7 | border-radius: 7px; 8 | margin: 8px 0; 9 | display: flex; 10 | align-items: center; 11 | justify-content: space-between; 12 | 13 | .address { 14 | font-size: 16px; 15 | line-height: 24px; 16 | } 17 | 18 | svg { 19 | cursor: pointer; 20 | 21 | &:hover { 22 | path { 23 | stroke: $--color-very-light-azure; 24 | } 25 | } 26 | } 27 | } 28 | 29 | .copiedMsg { 30 | opacity: 0; 31 | transition: 0.3s ease-in-out; 32 | color: $--color-dodger-blue; 33 | font-size: 13px; 34 | float: right; 35 | text-transform: capitalize; 36 | 37 | &.copied { 38 | opacity: 1; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/BackButton/BackButton.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {ReactComponent as BackIcon} from '@assets/svg/icons/back.svg'; 5 | import {useMenusTranslation} from '@hooks'; 6 | 7 | import styles from './BackButton.module.scss'; 8 | 9 | export const BackButton = ({onClick}) => { 10 | const {backBtnTxt} = useMenusTranslation(); 11 | 12 | return ( 13 |
14 | {backBtnTxt} 15 |
16 | ); 17 | }; 18 | 19 | BackButton.propTypes = { 20 | onClick: PropTypes.func 21 | }; 22 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/BackButton/BackButton.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .backButton { 4 | display: flex; 5 | align-items: center; 6 | font-size: 12px; 7 | line-height: 24px; 8 | text-transform: capitalize; 9 | color: $--color-light-steel-blue; 10 | margin-bottom: 8px; 11 | cursor: pointer; 12 | transition: 0.3s ease-in-out; 13 | 14 | svg { 15 | margin-right: 8px; 16 | } 17 | 18 | &:hover { 19 | color: $--color-ceil; 20 | 21 | svg { 22 | path { 23 | fill: $--color-ceil; 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Badge/Badge.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import styles from './Badge.module.scss'; 5 | 6 | export const Badge = ({text}) =>
{text}
; 7 | 8 | Badge.propTypes = { 9 | text: PropTypes.string 10 | }; 11 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Badge/Badge.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .badge { 4 | color: $--color-indigo; 5 | background: $--color-very-light-azure; 6 | border-radius: 4px; 7 | text-transform: uppercase; 8 | font-weight: 600; 9 | font-size: 10px; 10 | line-height: 16px; 11 | padding: 0 3px; 12 | width: fit-content; 13 | letter-spacing: 0.02em; 14 | } 15 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/BlockExplorer/BlockExplorerPropTypes.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | 3 | export const BlockExplorerPropTypes = { 4 | account: PropTypes.string, 5 | tx: PropTypes.string, 6 | isDisabled: PropTypes.bool, 7 | isL1: PropTypes.bool, 8 | isLarge: PropTypes.bool, 9 | onClick: PropTypes.func 10 | }; 11 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Bullet/Bullet.jsx: -------------------------------------------------------------------------------- 1 | import styles from './Bullet.module.scss'; 2 | 3 | export const Bullet = () => { 4 | return
; 5 | }; 6 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Bullet/Bullet.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .bullet { 4 | width: 4px; 5 | height: 4px; 6 | border-radius: 50%; 7 | margin: 0 8px; 8 | background-color: $--color-indigo; 9 | } 10 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/BurgerMenuItem/BurgerMenuItem.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {toClasses} from '@starkware-webapps/utils-browser'; 5 | 6 | import styles from './BurgerMenuItem.module.scss'; 7 | 8 | export const BurgerMenuItem = ({label, isActive, onClick}) => { 9 | return ( 10 |
14 | {label} 15 |
16 | ); 17 | }; 18 | 19 | BurgerMenuItem.propTypes = { 20 | label: PropTypes.string, 21 | isActive: PropTypes.bool, 22 | onClick: PropTypes.func 23 | }; 24 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/BurgerMenuItem/BurgerMenuItem.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .burgerMenuItem { 4 | cursor: pointer; 5 | margin: 5px 20px; 6 | font-weight: 500; 7 | font-size: 16px; 8 | line-height: 24px; 9 | letter-spacing: 0.01em; 10 | color: $--color-white; 11 | opacity: 0.5; 12 | transition: 0.3s ease-in-out; 13 | 14 | &.isActive, 15 | &:hover { 16 | opacity: 1; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/CheckboxWithText/CheckboxWithText.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .checkboxWithText { 4 | display: flex; 5 | align-items: center; 6 | 7 | .disabled { 8 | opacity: 0.5; 9 | 10 | & * { 11 | pointer-events: none !important; 12 | } 13 | } 14 | 15 | .message { 16 | font-size: 12px; 17 | line-height: 18px; 18 | white-space: break-spaces; 19 | color: $--color-white; 20 | } 21 | 22 | .readMore { 23 | color: $--color-very-light-azure; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Circle/Circle.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import styles from './Circle.module.scss'; 5 | 6 | export const Circle = ({size, color, style, children}) => ( 7 |
16 | {children} 17 |
18 | ); 19 | 20 | Circle.propTypes = { 21 | size: PropTypes.number, 22 | color: PropTypes.string, 23 | style: PropTypes.object, 24 | children: PropTypes.object 25 | }; 26 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Circle/Circle.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .circle { 4 | margin: 0 8px 0 0; 5 | background: linear-gradient(0deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2)), 6 | $--color-white; 7 | border-radius: 50%; 8 | display: flex; 9 | 10 | img, 11 | svg { 12 | margin: auto !important; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/CircleLogo/CircleLogo.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {Circle, DynamicIcon} from '@ui'; 5 | 6 | import styles from './CircleLogo.module.scss'; 7 | 8 | const CIRCLE_LOGO_SIZE_DIFF = 8; 9 | 10 | export const CircleLogoSize = { 11 | XS: 22, 12 | SMALL: 32, 13 | MEDIUM: 40, 14 | LARGE: 50 15 | }; 16 | 17 | export const CircleLogo = ({color, size, path, background = true}) => { 18 | return path ? ( 19 | 20 |
21 | 22 |
23 |
24 | ) : null; 25 | }; 26 | 27 | CircleLogo.propTypes = { 28 | color: PropTypes.string, 29 | size: PropTypes.number, 30 | path: PropTypes.string, 31 | background: PropTypes.bool 32 | }; 33 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/CircleLogo/CircleLogo.module.scss: -------------------------------------------------------------------------------- 1 | .circleLogo { 2 | display: flex; 3 | margin: auto; 4 | height: 100%; 5 | 6 | img { 7 | margin: auto; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/CollapseExpand/CollapseExpand.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {ReactComponent as CollapseExpandIcon} from '@assets/svg/icons/collapse.svg'; 5 | import {toClasses} from '@starkware-webapps/utils-browser'; 6 | 7 | import styles from './CollapseExpand.module.scss'; 8 | 9 | export const CollapseExpand = ({isCollapsed, size, onClick}) => { 10 | return ( 11 | 19 | ); 20 | }; 21 | 22 | CollapseExpand.propTypes = { 23 | isCollapsed: PropTypes.bool, 24 | size: PropTypes.number, 25 | onClick: PropTypes.func 26 | }; 27 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/CollapseExpand/CollapseExpand.module.scss: -------------------------------------------------------------------------------- 1 | .collapseExpand { 2 | cursor: pointer; 3 | transition: 0.3s ease-in-out; 4 | 5 | &.isCollapsed { 6 | transform: scale(1, -1); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Divider/Divider.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import styles from './Divider.module.scss'; 4 | 5 | export const Divider = () => { 6 | return
; 7 | }; 8 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Divider/Divider.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .divider { 4 | width: 1px; 5 | height: 24px; 6 | background: $--color-dark-blue-gray; 7 | } 8 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/FullScreenContainer/FullScreenContainer.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React, {forwardRef} from 'react'; 3 | 4 | import styles from './FullScreenContainer.module.scss'; 5 | 6 | export const FullScreenContainer = forwardRef((props, ref) => { 7 | return ( 8 |
9 | {props.children} 10 |
11 | ); 12 | }); 13 | 14 | FullScreenContainer.displayName = 'FullScreenContainer'; 15 | 16 | FullScreenContainer.propTypes = { 17 | onScroll: PropTypes.func, 18 | children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) 19 | }; 20 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/FullScreenContainer/FullScreenContainer.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .fullScreenContainer { 4 | left: 0; 5 | right: 0; 6 | position: absolute; 7 | top: 0; 8 | bottom: #{$--footer-height}px; 9 | color: $--color-white; 10 | overflow: auto; 11 | text-shadow: 1px 1px $--color-black; 12 | transition: 0.3s ease-in-out; 13 | 14 | a { 15 | color: $--color-very-light-azure; 16 | 17 | &:hover { 18 | color: $--color-dodger-blue; 19 | } 20 | 21 | &:visited { 22 | color: $--color-ube; 23 | 24 | &:hover { 25 | color: $--color-ceil; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Icon/Icon.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {toClasses} from '@starkware-webapps/utils-browser'; 5 | 6 | import styles from './Icon.module.scss'; 7 | 8 | export const Icon = ({isClickable, onClick, style, className, children}) => ( 9 |
17 | {children} 18 |
19 | ); 20 | 21 | Icon.propTypes = { 22 | isClickable: PropTypes.bool, 23 | onClick: PropTypes.func, 24 | style: PropTypes.object, 25 | className: PropTypes.string, 26 | children: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) 27 | }; 28 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Icon/Icon.module.scss: -------------------------------------------------------------------------------- 1 | .icon { 2 | display: flex; 3 | align-content: center; 4 | 5 | svg { 6 | margin: 0 10px; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Image/Image.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import styles from './Image.module.scss'; 5 | 6 | export const Image = ({src, width, height, forceSizes = false}) => { 7 | const style = { 8 | maxWidth: `${width}px`, 9 | maxHeight: `${height}px`, 10 | ...(forceSizes && {width: `${width}px`, height: `${height}px`}) 11 | }; 12 | 13 | return ; 14 | }; 15 | 16 | Image.propTypes = { 17 | src: PropTypes.string, 18 | width: PropTypes.number, 19 | height: PropTypes.number, 20 | forceSizes: PropTypes.bool 21 | }; 22 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Image/Image.module.scss: -------------------------------------------------------------------------------- 1 | .image { 2 | display: block; 3 | width: auto; 4 | height: auto; 5 | } 6 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Input/Input.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React, {forwardRef} from 'react'; 3 | 4 | import {toClasses} from '@starkware-webapps/utils-browser'; 5 | 6 | import styles from './Input.module.scss'; 7 | 8 | export const Input = forwardRef(({isDisabled, placeholderColor, style, ...props}, ref) => ( 9 | 18 | )); 19 | 20 | Input.propTypes = { 21 | isDisabled: PropTypes.bool, 22 | placeholderColor: PropTypes.string, 23 | style: PropTypes.object 24 | }; 25 | 26 | Input.displayName = 'Input'; 27 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Link/Link.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .link { 4 | text-decoration: none; 5 | } 6 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/LinkButton/LinkButton.module.scss: -------------------------------------------------------------------------------- 1 | @import '../../../index'; 2 | 3 | .linkButton { 4 | color: $--color-dodger-blue; 5 | padding: 0 8px; 6 | line-height: 18px; 7 | font-weight: 400; 8 | border-radius: 5px; 9 | border: 1px solid $--color-dodger-blue; 10 | font-size: 12px; 11 | text-transform: capitalize; 12 | display: inline-block; 13 | cursor: pointer; 14 | 15 | &.isDisabled { 16 | opacity: 0.3; 17 | pointer-events: none; 18 | } 19 | 20 | svg { 21 | margin-left: 5px; 22 | } 23 | 24 | &:hover { 25 | color: $--color-very-light-azure; 26 | border-color: $--color-very-light-azure; 27 | 28 | svg { 29 | path { 30 | fill: $--color-very-light-azure; 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/Loading/Loading.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {CircularProgress, LinearProgress} from '@mui/material'; 5 | 6 | export const LoadingType = { 7 | CIRCULAR: 0, 8 | LINEAR: 1 9 | }; 10 | 11 | export const LoadingSize = { 12 | XS: 13, 13 | SMALL: 25, 14 | MEDIUM: 50, 15 | LARGE: 70, 16 | XL: 110 17 | }; 18 | 19 | export const Loading = ({size, type = LoadingType.CIRCULAR}) => { 20 | return type === LoadingType.LINEAR ? : ; 21 | }; 22 | 23 | Loading.propTypes = { 24 | size: PropTypes.number, 25 | type: PropTypes.number 26 | }; 27 | -------------------------------------------------------------------------------- /workspace/apps/starkgate/web/src/components/UI/MainMenuButton/MainMenuButton.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | import React from 'react'; 3 | 4 | import {useColors} from '@hooks'; 5 | import {toClasses} from '@starkware-webapps/utils-browser'; 6 | import {Button} from '@ui'; 7 | 8 | import styles from './MainMenuButton.module.scss'; 9 | 10 | export const MainMenuButton = ({className, ...props}) => { 11 | const {colorOrangeSoda, colorWhite, colorFlame, colorIndigo} = useColors(); 12 | return ( 13 |