├── .babelrc ├── .commitlintrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── config.yml ├── .gitignore ├── .huskyrc ├── .lintstagedrc ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .renovaterc.json ├── .storybook ├── main.js ├── manager.js ├── patchedReactRedux.js ├── preview-head.html ├── preview.js └── webpack.config.js ├── .stylelintignore ├── .stylelintrc ├── .svgrrc ├── .testcafe-electron-rc ├── .travis.yml ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── appveyor.yml ├── babel.config.js ├── config ├── custom-environment-variables.json ├── default.js ├── development.js ├── e2e.js ├── production.js ├── storybook.js └── test.js ├── crowdin.yml ├── docs ├── ADVANCED.md ├── CONFIG.md ├── CONTRIBUTING.md ├── DEBUGGING.md ├── RELEASING.md ├── SIGNATURES.md └── TROUBLESHOOTING.md ├── electron ├── about │ ├── index.js │ ├── preload.js │ └── public │ │ ├── about.html │ │ ├── renderer.js │ │ └── styles │ │ └── ui.css ├── controller.js ├── lnurl │ ├── index.js │ └── service.js ├── main.js ├── menuBuilder.js ├── migrations │ ├── delete-tmp-wallets.js │ └── purge-local-wallets.js ├── migrator.js ├── pdfGenerator │ ├── invoice.js │ └── service.js ├── preload.js ├── secureStorage │ ├── index.js │ ├── ipcCRUD.js │ └── service.js ├── updater.js ├── utils │ └── fetchSettings.js └── walletBackup │ ├── base │ └── TokenBasedBackupService.js │ ├── dropbox │ ├── db.js │ ├── dbApi.js │ └── index.js │ ├── gdrive │ ├── gdrive.js │ ├── gdriveApi.js │ └── index.js │ ├── local │ └── index.js │ ├── service.js │ └── serviceFactory.js ├── fonts ├── roboto-light.woff2 └── roboto-regular.woff2 ├── i18n ├── index.js ├── intl.js └── translation.js ├── icons ├── angle-down.svg ├── angle-left.svg ├── angle-right.svg ├── angle-up.svg ├── arrow-down.svg ├── arrow-left.svg ├── arrow-right.svg ├── arrow-up.svg ├── autopay-check.svg ├── autopay.svg ├── backup-local.svg ├── badge-app-store.svg ├── badge-google-play.svg ├── big-arrow-right.svg ├── bitcoin.svg ├── bolt-onboarding.svg ├── btcpay.svg ├── chain-link.svg ├── check-circle.svg ├── check.svg ├── circle.svg ├── clock.svg ├── close.svg ├── cloud-lightning.svg ├── cloudbolt.svg ├── connect-onboarding.svg ├── copy.svg ├── delete.svg ├── download.svg ├── dropbox.svg ├── error.svg ├── external-link.svg ├── eye-off.svg ├── eye.svg ├── filter.svg ├── folder-open.svg ├── github.svg ├── google-drive.svg ├── import-onboarding.svg ├── layout-cards.svg ├── layout-list.svg ├── lightning-bolt.svg ├── lightning-channel.svg ├── lightning.svg ├── litecoin.svg ├── lock-safe.svg ├── logo.png ├── logout.svg ├── medium.svg ├── minus-circle.svg ├── onchain.svg ├── open-source.svg ├── padlock.svg ├── peace.svg ├── plus-circle.svg ├── plus-onboarding.svg ├── plus.svg ├── qrcode.svg ├── receive.svg ├── refresh.svg ├── search.svg ├── send.svg ├── settings.svg ├── slack.svg ├── spinner.svg ├── success.svg ├── twitter.svg ├── user-circle.svg ├── user.svg ├── warning.svg ├── x.svg ├── zap-logo-full.svg ├── zap-logo.svg ├── zap-solid.svg └── zap.svg ├── package.json ├── renderer ├── app.html ├── components │ ├── Activity │ │ ├── Activity.js │ │ ├── ActivityActions │ │ │ ├── ActivityActions.js │ │ │ ├── ActivityFilter.js │ │ │ ├── ActivityRefresh.js │ │ │ ├── ActivitySearch.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ActivityListItem.js │ │ ├── ActivityModal │ │ │ ├── ActivityModal.js │ │ │ └── index.js │ │ ├── ErrorDetailsDialog.js │ │ ├── ErrorLink.js │ │ ├── Invoice │ │ │ ├── Invoice.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── InvoiceModal │ │ │ ├── InvoiceModal.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── List.js │ │ ├── Payment │ │ │ ├── Payment.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── PaymentModal │ │ │ ├── Htlc.js │ │ │ ├── HtlcHops.js │ │ │ ├── PaymentModal.js │ │ │ ├── Route.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── Row.js │ │ ├── Transaction │ │ │ ├── Transaction.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── TransactionModal │ │ │ ├── TransactionModal.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── index.js │ │ └── messages.js │ ├── App │ │ ├── App.js │ │ └── index.js │ ├── Autopay │ │ ├── Autopay.js │ │ ├── AutopayActions.js │ │ ├── AutopayAddButton.js │ │ ├── AutopayCardView.js │ │ ├── AutopayCreateForm.js │ │ ├── AutopayCreateModal.js │ │ ├── AutopayCreateSettings.js │ │ ├── AutopayCreateSuccess.js │ │ ├── AutopayGrid.js │ │ ├── AutopayHeader.js │ │ ├── AutopayHeading.js │ │ ├── AutopayLimitBadge.js │ │ ├── AutopayList.js │ │ ├── AutopayMerchantList.js │ │ ├── AutopayModalBody.js │ │ ├── AutopaySearch.js │ │ ├── AutopaySearchNoResults.js │ │ ├── AutopayStatus.js │ │ ├── index.js │ │ └── messages.js │ ├── Channels │ │ ├── ChannelBackButton.js │ │ ├── ChannelBalance.js │ │ ├── ChannelCapacity.js │ │ ├── ChannelCardList.js │ │ ├── ChannelCardListItem.js │ │ ├── ChannelCloseDialog.js │ │ ├── ChannelCount.js │ │ ├── ChannelCreate.js │ │ ├── ChannelCreateForm.js │ │ ├── ChannelCreateHeader.js │ │ ├── ChannelCreateSummary.js │ │ ├── ChannelData.js │ │ ├── ChannelDetail.js │ │ ├── ChannelFilter.js │ │ ├── ChannelFooter.js │ │ ├── ChannelHeader.js │ │ ├── ChannelMoreButton.js │ │ ├── ChannelNodeSearch.js │ │ ├── ChannelSearch.js │ │ ├── ChannelSort.js │ │ ├── ChannelSortDirectionButton.js │ │ ├── ChannelStatus.js │ │ ├── ChannelSummaryList.js │ │ ├── ChannelSummaryListItem.js │ │ ├── Channels.js │ │ ├── ChannelsActions.js │ │ ├── ChannelsCapacity.js │ │ ├── ChannelsCapacityDonut.js │ │ ├── ChannelsHeader.js │ │ ├── ChannelsInfo.js │ │ ├── ChannelsMenu │ │ │ ├── ChannelsMenu.js │ │ │ ├── ChannelsMenuHeader.js │ │ │ ├── ChannelsMenuSummary.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ChannelsRefresh.js │ │ ├── ChannelsSummaryDonut.js │ │ ├── ChannelsViewButtons.js │ │ ├── ChannelsViewSwitcher.js │ │ ├── NodeCardList.js │ │ ├── NodeCardView.js │ │ ├── constants.js │ │ ├── index.js │ │ └── messages.js │ ├── Dialog │ │ ├── DialogAppCrashed.js │ │ ├── DialogLndCrashed.js │ │ ├── index.js │ │ └── messages.js │ ├── ErrorBoundary │ │ └── AppErrorBoundary.js │ ├── Form │ │ ├── Checkbox.js │ │ ├── CryptoAmountInput.js │ │ ├── CurrencyFieldGroup.js │ │ ├── FiatAmountInput.js │ │ ├── Field.js │ │ ├── FieldLabel.js │ │ ├── Form.js │ │ ├── Input.js │ │ ├── InputContainer.js │ │ ├── IntegerInput.js │ │ ├── Label.js │ │ ├── LightningInvoiceInput.js │ │ ├── LndConnectionStringEditor.js │ │ ├── LndConnectionStringInput.js │ │ ├── NodePubkeyInput.js │ │ ├── OpenDialogButton.js │ │ ├── OpenDialogInput.js │ │ ├── PasswordInput.js │ │ ├── PositiveIntegerField.js │ │ ├── Radio.js │ │ ├── RadioCard.js │ │ ├── RadioGroup.js │ │ ├── Range.js │ │ ├── RowLabel.js │ │ ├── SearchInput.js │ │ ├── Select.js │ │ ├── TextArea.js │ │ ├── Toggle.js │ │ ├── TransactionFeeInput.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ └── util.js │ ├── GlobalNotification │ │ ├── GlobalNotification.js │ │ └── index.js │ ├── Home │ │ ├── AutopilotAllocation.js │ │ ├── CreateWalletButton.js │ │ ├── DeleteWalletDialog.js │ │ ├── Home.js │ │ ├── NoWallets.js │ │ ├── WalletHeader.js │ │ ├── WalletLauncher.js │ │ ├── WalletSettingsFormLocal.js │ │ ├── WalletSettingsFormRemote.js │ │ ├── WalletUnlocker.js │ │ ├── WalletsMenu.js │ │ ├── index.js │ │ └── messages.js │ ├── Icon │ │ ├── .eslintrc │ │ ├── AngleDown.js │ │ ├── AngleLeft.js │ │ ├── AngleRight.js │ │ ├── AngleUp.js │ │ ├── ArrowDown.js │ │ ├── ArrowLeft.js │ │ ├── ArrowRight.js │ │ ├── ArrowUp.js │ │ ├── Autopay.js │ │ ├── AutopayCheck.js │ │ ├── BackupLocal.js │ │ ├── BadgeAppStore.js │ │ ├── BadgeGooglePlay.js │ │ ├── BigArrowRight.js │ │ ├── Bitcoin.js │ │ ├── BoltOnboarding.js │ │ ├── Btcpay.js │ │ ├── ChainLink.js │ │ ├── Check.js │ │ ├── CheckCircle.js │ │ ├── Circle.js │ │ ├── Clock.js │ │ ├── Close.js │ │ ├── CloudLightning.js │ │ ├── ConnectOnboarding.js │ │ ├── Copy.js │ │ ├── Delete.js │ │ ├── Download.js │ │ ├── Dropbox.js │ │ ├── Error.js │ │ ├── ExternalLink.js │ │ ├── Eye.js │ │ ├── EyeOff.js │ │ ├── Filter.js │ │ ├── FolderOpen.js │ │ ├── Github.js │ │ ├── GoogleDrive.js │ │ ├── ImportOnboarding.js │ │ ├── LayoutCards.js │ │ ├── LayoutList.js │ │ ├── Lightning.js │ │ ├── LightningBolt.js │ │ ├── LightningChannel.js │ │ ├── LockSafe.js │ │ ├── Logout.js │ │ ├── Medium.js │ │ ├── MinusCircle.js │ │ ├── Onchain.js │ │ ├── OpenSource.js │ │ ├── Padlock.js │ │ ├── Peace.js │ │ ├── Plus.js │ │ ├── PlusCircle.js │ │ ├── PlusOnboarding.js │ │ ├── Qrcode.js │ │ ├── Receive.js │ │ ├── Refresh.js │ │ ├── Search.js │ │ ├── Send.js │ │ ├── Settings.js │ │ ├── Slack.js │ │ ├── Spinner.js │ │ ├── Success.js │ │ ├── Twitter.js │ │ ├── User.js │ │ ├── UserCircle.js │ │ ├── Warning.js │ │ ├── X.js │ │ ├── Zap.js │ │ ├── ZapLogo.js │ │ ├── ZapLogoFull.js │ │ └── ZapSolid.js │ ├── Lnurl │ │ ├── LnurlAuthPrompt.js │ │ ├── LnurlChannelPrompt.js │ │ ├── LnurlWithdrawPrompt.js │ │ ├── index.js │ │ └── messages.js │ ├── Loading │ │ ├── Loading.js │ │ ├── LoadingApp.js │ │ ├── LoadingBolt.js │ │ ├── LoadingLaunchpad.js │ │ ├── Placeholder.js │ │ ├── Transition.js │ │ ├── index.js │ │ └── messages.js │ ├── Login │ │ ├── Login.js │ │ ├── LoginNotAllowed.js │ │ ├── index.js │ │ └── messages.js │ ├── ModalStack.js │ ├── Onboarding │ │ ├── Steps │ │ │ ├── Autopilot.js │ │ │ ├── BackupSetup.js │ │ │ ├── BackupSetupLocal.js │ │ │ ├── ConnectionConfirm.js │ │ │ ├── ConnectionDetails.js │ │ │ ├── ConnectionDetailsContext.js │ │ │ ├── ConnectionDetailsManual.js │ │ │ ├── ConnectionDetailsString.js │ │ │ ├── ConnectionDetailsTabs.js │ │ │ ├── ConnectionType.js │ │ │ ├── Login.js │ │ │ ├── Name.js │ │ │ ├── Network.js │ │ │ ├── Password.js │ │ │ ├── Recover.js │ │ │ ├── SeedConfirm.js │ │ │ ├── SeedView.js │ │ │ ├── WalletCreate.js │ │ │ ├── WalletRecover.js │ │ │ ├── components │ │ │ │ ├── BackupTypeItem.js │ │ │ │ ├── ConnectionTypeItem.js │ │ │ │ ├── Container.js │ │ │ │ ├── ErrorDialog.js │ │ │ │ ├── SeedWordInput.js │ │ │ │ ├── SeedWordList.js │ │ │ │ ├── SkipBackupsDialog.js │ │ │ │ ├── messages.js │ │ │ │ └── settings.js │ │ │ ├── constants.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ └── messages.js │ ├── Pay │ │ ├── Pay.js │ │ ├── PayAddressField.js │ │ ├── PayAmountFields.js │ │ ├── PayButtons.js │ │ ├── PayHeader.js │ │ ├── PayHelpText.js │ │ ├── PayPanelBody.js │ │ ├── PayPanelFooter.js │ │ ├── PayPanelHeader.js │ │ ├── PaySummary.js │ │ ├── PaySummaryLightning.js │ │ ├── PaySummaryOnChain.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ └── utils.js │ ├── Profile │ │ ├── ProfileMenu │ │ │ ├── ProfileMenu.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ProfilePage │ │ │ ├── ProfilePage.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ProfilePaneConnect │ │ │ ├── ProfilePaneConnect.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ProfilePaneNodeInfo │ │ │ ├── ProfilePaneNodeInfo.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ProfilePaneSignMessage │ │ │ ├── ProfilePaneSignMessage.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── ProfilePaneVerifyMessage │ │ │ ├── ProfilePaneVerifyMessage.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── constants.js │ │ └── index.js │ ├── Request │ │ ├── Request.js │ │ ├── RequestSettlePrompt.js │ │ ├── RequestSummary.js │ │ ├── index.js │ │ └── messages.js │ ├── Settings │ │ ├── Security │ │ │ ├── ChangePasswordDialog.js │ │ │ ├── PasswordPromptDialog.js │ │ │ ├── PasswordState.js │ │ │ ├── SetPasswordDialog.js │ │ │ └── messages.js │ │ ├── SettingsFieldsGeneral.js │ │ ├── SettingsFieldsSecurity.js │ │ ├── SettingsFieldsWallet.js │ │ ├── SettingsForm.js │ │ ├── SettingsMenu │ │ │ ├── SettingsMenu.js │ │ │ ├── index.js │ │ │ └── messages.js │ │ ├── SettingsPage.js │ │ ├── index.js │ │ └── messages.js │ ├── Syncing │ │ ├── Address.js │ │ ├── NewWalletHeader.js │ │ ├── OldWalletHeader.js │ │ ├── Progress.js │ │ ├── Syncing.js │ │ ├── Tutorials.js │ │ ├── index.js │ │ └── messages.js │ ├── TabControl │ │ ├── PersistentTabControl.js │ │ └── Tab.js │ ├── UI │ │ ├── ActionBar.js │ │ ├── ActionButton.js │ │ ├── BackgroundPrimary.js │ │ ├── BackgroundSecondary.js │ │ ├── BackgroundTertiary.js │ │ ├── Bar.js │ │ ├── Button.js │ │ ├── ButtonCreate.js │ │ ├── Card.js │ │ ├── CenteredContent.js │ │ ├── ClippedText.js │ │ ├── CloseButton.js │ │ ├── CopyBox.js │ │ ├── CopyButton.js │ │ ├── Countdown.js │ │ ├── DataRow.js │ │ ├── Dialog.js │ │ ├── DialogOverlay.js │ │ ├── Donut.js │ │ ├── Dropdown │ │ │ ├── Dropdown.js │ │ │ ├── IconDropdownButton.js │ │ │ └── index.js │ │ ├── Dropmenu.js │ │ ├── GlobalStyle.js │ │ ├── Header.js │ │ ├── Heading.js │ │ ├── Link.js │ │ ├── MainContent.js │ │ ├── Menu.js │ │ ├── MenuItem.js │ │ ├── Message.js │ │ ├── Modal.js │ │ ├── Notification.js │ │ ├── Page.js │ │ ├── Panel.js │ │ ├── ProgressBar.js │ │ ├── QRCode.js │ │ ├── Sidebar.js │ │ ├── Span.js │ │ ├── Spinner.js │ │ ├── StatusIndicator.js │ │ ├── SwitchButton.js │ │ ├── Tab.js │ │ ├── Tabs.js │ │ ├── Text.js │ │ ├── Titlebar.js │ │ ├── Tooltip.js │ │ ├── Value.js │ │ ├── Wizard.js │ │ ├── index.js │ │ └── messages.js │ ├── Util │ │ ├── Truncate.js │ │ ├── WalletName.js │ │ └── index.js │ └── Wallet │ │ ├── ReceiveModal │ │ ├── ReceiveModal.js │ │ ├── index.js │ │ └── messages.js │ │ ├── Wallet.js │ │ ├── WalletBalance.js │ │ ├── WalletButtons.js │ │ ├── WalletLogo.js │ │ ├── WalletMenu.js │ │ ├── index.js │ │ └── messages.js ├── containers │ ├── Activity │ │ ├── Activity.js │ │ ├── ActivityActions.js │ │ ├── ActivityModal.js │ │ ├── Invoice.js │ │ ├── Payment.js │ │ ├── Transaction.js │ │ └── index.js │ ├── App │ │ ├── App.js │ │ ├── ErrorBoundary.js │ │ ├── ModalStack.js │ │ └── index.js │ ├── Autopay.js │ ├── Autopay │ │ ├── AutopayCreateModal.js │ │ ├── AutopayList.js │ │ ├── AutopayMerchantList.js │ │ └── AutopaySearch.js │ ├── Channels.js │ ├── Channels │ │ ├── ChannelCloseDialog.js │ │ ├── ChannelCreate.js │ │ ├── ChannelCreateForm.js │ │ ├── ChannelDetail.js │ │ ├── ChannelDetailModal.js │ │ ├── ChannelNodeSearch.js │ │ ├── ChannelsHeader.js │ │ ├── ChannelsMenu.js │ │ └── NodeCardList.js │ ├── Dialog │ │ ├── DialogLndCrashed.js │ │ └── index.js │ ├── Form │ │ ├── CurrencyFieldGroup.js │ │ └── index.js │ ├── Home │ │ ├── DeleteWalletDialog.js │ │ ├── Home.js │ │ └── index.js │ ├── Initializer.js │ ├── Lnurl │ │ ├── LnurlAuthPrompt.js │ │ ├── LnurlChannelPrompt.js │ │ └── LnurlWithdrawPrompt.js │ ├── Loading │ │ ├── Loading.js │ │ └── index.js │ ├── Login │ │ ├── Login.js │ │ └── index.js │ ├── Logout.js │ ├── Onboarding │ │ ├── Onboarding.js │ │ └── Steps │ │ │ ├── Autopilot.js │ │ │ ├── BackupSetup.js │ │ │ ├── BackupSetupLocal.js │ │ │ ├── ConnectionConfirm.js │ │ │ ├── ConnectionDetails.js │ │ │ ├── ConnectionDetailsManual.js │ │ │ ├── ConnectionDetailsString.js │ │ │ ├── ConnectionType.js │ │ │ ├── Login.js │ │ │ ├── Name.js │ │ │ ├── Network.js │ │ │ ├── Password.js │ │ │ ├── Recover.js │ │ │ ├── SeedConfirm.js │ │ │ ├── SeedView.js │ │ │ ├── WalletCreate.js │ │ │ ├── WalletRecover.js │ │ │ └── index.js │ ├── Pay.js │ ├── Pay │ │ ├── PaySummaryLightning.js │ │ └── PaySummaryOnChain.js │ ├── Profile │ │ ├── ProfilePage.js │ │ ├── ProfilePaneConnect.js │ │ ├── ProfilePaneNodeInfo.js │ │ ├── ProfilePaneSignMessage.js │ │ └── ProfilePaneVerifyMessage.js │ ├── Request.js │ ├── Root.js │ ├── RootModalStack.js │ ├── Settings │ │ ├── ChangePasswordDialog.js │ │ ├── PasswordPromptDialog.js │ │ ├── PasswordSetDialog.js │ │ ├── SettingsFieldsSecurity.js │ │ ├── SettingsForm.js │ │ ├── SettingsMenu.js │ │ └── SettingsPage.js │ ├── Syncing.js │ ├── UI │ │ ├── CopyButton.js │ │ ├── CryptoSelector.js │ │ ├── CryptoValue.js │ │ ├── CryptoValueSelector.js │ │ ├── FiatSelector.js │ │ ├── FiatValue.js │ │ ├── FormattedDateTime.js │ │ ├── index.js │ │ └── messages.js │ └── Wallet │ │ ├── ReceiveModal.js │ │ ├── Wallet.js │ │ ├── WalletStarter.js │ │ └── index.js ├── empty.html ├── hocs │ ├── index.js │ ├── withEllipsis.js │ ├── withInputValidation.js │ ├── withLoading.js │ ├── withNumberInputMask.js │ ├── withNumberValidation.js │ └── withOpenDialog.js ├── hooks │ ├── index.js │ ├── useAutoFocus.js │ ├── useCloseOnUnmount.js │ ├── useComponentSize.js │ ├── useDebounce.js │ ├── useFormError.js │ ├── useIntlMap.js │ ├── useMaxScreenHeight.js │ ├── useOnClickOutside.js │ ├── useOnKeydown.js │ ├── usePrevious.js │ ├── useScroll.js │ ├── useScrollDrag.js │ ├── useTimeout.js │ └── useWindowDimensions.js ├── index.js ├── reducers │ ├── account │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── activity │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── utils.js │ ├── address │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── app.js │ ├── autopay.js │ ├── autopilot.js │ ├── autoupdate.js │ ├── backup.js │ ├── balance │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── channels │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── utils.js │ ├── contactsform.js │ ├── index.js │ ├── info │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── invoice │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── utils.js │ ├── ipc.js │ ├── lnd.js │ ├── lnurl │ │ ├── constants.js │ │ ├── index.js │ │ ├── ipc.js │ │ ├── messages.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── locale │ │ ├── index.js │ │ ├── ipc.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── messages │ │ ├── index.js │ │ └── messages.js │ ├── modal │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── network │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── utils.js │ ├── neutrino.js │ ├── notification │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── onboarding.js │ ├── pay │ │ ├── constants.js │ │ ├── index.js │ │ ├── ipc.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── payment │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── utils.js │ ├── peers.js │ ├── settings │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── settingsmenu.js │ ├── theme │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── ticker │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js │ ├── transaction │ │ ├── constants.js │ │ ├── index.js │ │ ├── messages.js │ │ ├── reducer.js │ │ ├── selectors.js │ │ └── utils.js │ ├── utils.js │ └── wallet │ │ ├── constants.js │ │ ├── index.js │ │ ├── reducer.js │ │ └── selectors.js ├── store │ ├── configureStore.dev.js │ ├── configureStore.js │ ├── configureStore.prod.js │ ├── db.js │ ├── dbVersions.js │ ├── middleware │ │ ├── debounceMiddleware.js │ │ ├── index.js │ │ └── userTimingMiddleware.js │ └── schema │ │ ├── node.js │ │ ├── setting.js │ │ └── wallet.js ├── themes │ ├── autopay │ │ └── index.js │ ├── base.js │ ├── dark │ │ ├── colors.js │ │ └── index.js │ ├── index.js │ ├── light │ │ ├── colors.js │ │ ├── index.js │ │ └── shadows.js │ └── util │ │ ├── createThemeVariant.js │ │ ├── extractSpaceProps.js │ │ └── index.js └── workers │ ├── grpc.worker.js │ ├── index.js │ ├── neutrino.worker.js │ └── proxymise.js ├── resources ├── icon.icns ├── icon.ico ├── icon.png ├── linux │ ├── 128x128.png │ ├── 16x16.png │ ├── 24x24.png │ ├── 256x256.png │ ├── 32x32.png │ ├── 48x48.png │ ├── 512x512.png │ └── 64x64.png └── mac │ └── entitlements.mac.inherit.plist ├── scripts ├── afterSignHook.js ├── fetch-lnd-for-packaging.js ├── genIcons.js ├── genIconsStory.js ├── lnd-release │ ├── .goreleaser.yml │ ├── README.md │ └── canary.sh └── signedchecksum.sh ├── services ├── bitcoind │ └── index.js ├── grpc │ ├── grpc.js │ ├── helpers.js │ ├── lightning.methods.js │ ├── lightning.subscriptions.js │ ├── router.methods.js │ └── router.subscriptions.js └── neutrino │ ├── index.js │ └── neutrino.js ├── stories ├── .eslintrc ├── Provider.js ├── _general │ ├── _welcome.stories.js │ ├── color.stories.js │ ├── icons.stories.js │ └── typography.stories.js ├── components │ ├── actionbar.stories.js │ ├── background.stories.js │ ├── bar.stories.js │ ├── button.stories.js │ ├── card.stories.js │ ├── countdown.stories.js │ ├── dialog.stories.js │ ├── donut.stories.js │ ├── dropdown.stories.js │ ├── dropmenu.stories.js │ ├── header.stories.js │ ├── link.stories.js │ ├── loadingbolt.stories.js │ ├── menu.stories.js │ ├── message.stories.js │ ├── modal.stories.js │ ├── notification.stories.js │ ├── progressbar.stories.js │ ├── qrcode.stories.js │ ├── spinner.stories.js │ ├── statusindicator.stories.js │ ├── switchbutton.stories.js │ └── tabs.stories.js ├── containers │ ├── activity.stories.js │ ├── channels │ │ ├── channel-balance.stories.js │ │ ├── channel-capacity.stories.js │ │ ├── channel-card-list-item.stories.js │ │ ├── channel-card-list.stories.js │ │ ├── channel-count.stories.js │ │ ├── channel-create-form.stories.js │ │ ├── channel-create-summary.stories.js │ │ ├── channel-status.stories.js │ │ ├── channel-summary-list-item.stories.js │ │ ├── channel-summary-list.stories.js │ │ ├── channels-header.stories.js │ │ ├── channels-menu.stories.js │ │ ├── channels.stories.js │ │ ├── node-card-list.stories.js │ │ └── node-card-view.stories.js │ ├── home.stories.js │ ├── home │ │ ├── WalletHeader.stories.js │ │ └── WalletName.stories.js │ ├── login.stories.js │ ├── onboarding │ │ └── onboarding.component.stories.js │ ├── pay.stories.js │ ├── pay │ │ └── pay.component.stories.js │ ├── profilepage.stories.js │ ├── request.stories.js │ ├── request │ │ └── request.component.stories.js │ ├── settingsmenu.stories.js │ ├── settingspage.stories.js │ ├── syncing.stories.js │ └── wallet.stories.js ├── dialogs │ ├── app-crashed.stories.js │ ├── channel-close.stories.js │ ├── delete-wallet.stories.js │ ├── lnd-crashed.stories.js │ ├── lnurl-withdrawal-prompt.stories.js │ ├── password-change.stories.js │ ├── password-prompt.stories.js │ ├── password-set.stories.js │ ├── payment-error-details.stories.js │ ├── skip-backup.stories.js │ ├── wallet-create-error.stories.js │ └── wallet-recover-error.stories.js ├── forms │ └── form.stories.js ├── helpers.js ├── icons │ └── icon.stories.js └── layouts │ ├── page.stories.js │ └── panel.stories.js ├── test ├── .eslintrc ├── e2e │ ├── .eslintrc │ ├── app.spec.js │ ├── basic-ui.spec.js │ ├── fixtures │ │ ├── readonly.macaroon │ │ └── tls.cert │ ├── onboarding-connect-btcpay.spec.js │ ├── onboarding-connect-lndconnect.spec.js │ ├── onboarding-create.spec.js │ ├── onboarding-import.spec.js │ ├── pages │ │ ├── loading.js │ │ ├── onboarding.js │ │ ├── syncing.js │ │ └── wallet.js │ └── utils │ │ └── helpers.js └── unit │ ├── __helpers__ │ ├── intl.js │ ├── renderWithTheme.js │ ├── setup.js │ └── snapshotDiff.js │ ├── __mocks__ │ ├── comlinkjs.js │ ├── dexie.js │ ├── dns.js │ ├── electron.js │ ├── fileMock.js │ ├── grpc.js │ ├── keytar.js │ └── react-spring │ │ └── renderprops.js │ ├── components │ ├── Form │ │ ├── Checkbox.spec.js │ │ ├── Form.spec.js │ │ ├── Input.spec.js │ │ ├── LightningInvoiceInput.spec.js │ │ ├── NodePubkeyInput.spec.js │ │ ├── PasswordInput.spec.js │ │ ├── Radio.spec.js │ │ ├── Range.spec.js │ │ ├── Select.spec.js │ │ ├── TextArea.spec.js │ │ ├── Toggle.spec.js │ │ └── __snapshots__ │ │ │ ├── Checkbox.spec.js.snap │ │ │ ├── Form.spec.js.snap │ │ │ ├── Input.spec.js.snap │ │ │ ├── LightningInvoiceInput.spec.js.snap │ │ │ ├── NodePubkeyInput.spec.js.snap │ │ │ ├── PasswordInput.spec.js.snap │ │ │ ├── Radio.spec.js.snap │ │ │ ├── Range.spec.js.snap │ │ │ ├── Select.spec.js.snap │ │ │ ├── TextArea.spec.js.snap │ │ │ └── Toggle.spec.js.snap │ ├── Home │ │ ├── CreateWalletButton.spec.js │ │ ├── NoWallets.spec.js │ │ ├── WalletHeader.spec.js │ │ └── __snapshots__ │ │ │ ├── CreateWalletButton.spec.js.snap │ │ │ ├── NoWallets.spec.js.snap │ │ │ └── WalletHeader.spec.js.snap │ ├── LoadingBolt.spec.js │ ├── Pay │ │ ├── PayAddressField.spec.js │ │ ├── PayAmountFields.spec.js │ │ ├── PayButtons.spec.js │ │ ├── PayHeader.spec.js │ │ ├── PayHelpText.spec.js │ │ ├── PayPanelBody.spec.js │ │ ├── PayPanelFooter.spec.js │ │ ├── PayPanelHeader.spec.js │ │ ├── PaySummary.spec.js │ │ ├── PaySummaryLightning.spec.js │ │ ├── PaySummaryOnchain.spec.js │ │ ├── PaySummaryRow.spec.js │ │ └── __snapshots__ │ │ │ ├── PayAddressField.spec.js.snap │ │ │ ├── PayAmountFields.spec.js.snap │ │ │ ├── PayButtons.spec.js.snap │ │ │ ├── PayHeader.spec.js.snap │ │ │ ├── PayHelpText.spec.js.snap │ │ │ ├── PayPanelBody.spec.js.snap │ │ │ ├── PayPanelFooter.spec.js.snap │ │ │ ├── PayPanelHeader.spec.js.snap │ │ │ ├── PaySummary.spec.js.snap │ │ │ ├── PaySummaryLightning.spec.js.snap │ │ │ ├── PaySummaryOnchain.spec.js.snap │ │ │ └── PaySummaryRow.spec.js.snap │ ├── UI │ │ ├── ActionBar.spec.js │ │ ├── BackgroundDark.spec.js │ │ ├── BackgroundLight.spec.js │ │ ├── BackgroundLightest.spec.js │ │ ├── BackgroundPrimary.spec.js │ │ ├── Bar.spec.js │ │ ├── Button.spec.js │ │ ├── Card.spec.js │ │ ├── Countdown.spec.js │ │ ├── Dialog.spec.js │ │ ├── Dropdown.spec.js │ │ ├── Header.spec.js │ │ ├── Heading.spec.js │ │ ├── Link.spec.js │ │ ├── MainContent.spec.js │ │ ├── Message.spec.js │ │ ├── Modal.spec.js │ │ ├── Notification.spec.js │ │ ├── Page.spec.js │ │ ├── Panel.spec.js │ │ ├── ProgressBar.spec.js │ │ ├── QRCode.spec.js │ │ ├── Sidebar.spec.js │ │ ├── Spinner.spec.js │ │ ├── StatusIndicator.spec.js │ │ ├── Text.spec.js │ │ ├── Truncate.spec.js │ │ └── __snapshots__ │ │ │ ├── ActionBar.spec.js.snap │ │ │ ├── BackgroundDark.spec.js.snap │ │ │ ├── BackgroundLight.spec.js.snap │ │ │ ├── BackgroundLightest.spec.js.snap │ │ │ ├── BackgroundPrimary.spec.js.snap │ │ │ ├── Bar.spec.js.snap │ │ │ ├── Button.spec.js.snap │ │ │ ├── Card.spec.js.snap │ │ │ ├── Countdown.spec.js.snap │ │ │ ├── Dialog.spec.js.snap │ │ │ ├── Dropdown.spec.js.snap │ │ │ ├── Header.spec.js.snap │ │ │ ├── Heading.spec.js.snap │ │ │ ├── Link.spec.js.snap │ │ │ ├── MainContent.spec.js.snap │ │ │ ├── Message.spec.js.snap │ │ │ ├── Modal.spec.js.snap │ │ │ ├── Notification.spec.js.snap │ │ │ ├── Page.spec.js.snap │ │ │ ├── Panel.spec.js.snap │ │ │ ├── ProgressBar.spec.js.snap │ │ │ ├── QRCode.spec.js.snap │ │ │ ├── Sidebar.spec.js.snap │ │ │ ├── Spinner.spec.js.snap │ │ │ ├── StatusIndicator.spec.js.snap │ │ │ ├── Text.spec.js.snap │ │ │ └── Truncate.spec.js.snap │ └── Util │ │ ├── WalletName.spec.js │ │ └── __snapshots__ │ │ └── WalletName.spec.js.snap │ ├── lnd │ ├── lnd-config.spec.js │ └── neutrino.spec.js │ ├── reducers │ ├── __snapshots__ │ │ ├── account.spec.js.snap │ │ ├── activity.spec.js.snap │ │ ├── address.spec.js.snap │ │ ├── app.spec.js.snap │ │ ├── autopay.spec.js.snap │ │ ├── autopilot.spec.js.snap │ │ ├── backup.spec.js.snap │ │ ├── balance.spec.js.snap │ │ ├── channels.spec.js.snap │ │ ├── contactsform.spec.js.snap │ │ ├── info.spec.js.snap │ │ ├── invoice.spec.js.snap │ │ ├── lnd.spec.js.snap │ │ ├── modal.spec.js.snap │ │ ├── network.spec.js.snap │ │ ├── neutrino.spec.js.snap │ │ ├── notification.spec.js.snap │ │ ├── onboarding.spec.js.snap │ │ ├── pay.spec.js.snap │ │ ├── payment.spec.js.snap │ │ ├── peers.spec.js.snap │ │ ├── settings.spec.js.snap │ │ ├── settingsmenu.spec.js.snap │ │ ├── ticker.spec.js.snap │ │ ├── transaction.spec.js.snap │ │ └── wallet.spec.js.snap │ ├── account.spec.js │ ├── activity.spec.js │ ├── address.spec.js │ ├── app.spec.js │ ├── autopay.spec.js │ ├── autopilot.spec.js │ ├── backup.spec.js │ ├── balance.spec.js │ ├── channels.spec.js │ ├── contactsform.spec.js │ ├── info.spec.js │ ├── invoice.spec.js │ ├── lnd.spec.js │ ├── modal.spec.js │ ├── network.spec.js │ ├── neutrino.spec.js │ ├── notification.spec.js │ ├── onboarding.spec.js │ ├── pay.spec.js │ ├── payment.spec.js │ ├── peers.spec.js │ ├── settings.spec.js │ ├── settingsmenu.spec.js │ ├── ticker.spec.js │ ├── transaction.spec.js │ └── wallet.spec.js │ └── utils │ ├── btc.spec.js │ ├── byteutils.spec.js │ ├── chainify.spec.js │ ├── crypto.spec.js │ ├── debouncedFuncQueue.spec.js │ ├── difference.spec.js │ ├── events.spec.js │ ├── isStableVersion.spec.js │ ├── isSubDir.spec.js │ ├── lnurl.spec.js │ ├── pagination.test.js │ ├── parseSeed.spec.js │ ├── parseUrlFragments.spec.js │ ├── rateProvider.spec.js │ ├── scheduler.spec.js │ ├── secureStorage.spec.js │ ├── sha256.spec.js │ ├── singleton.spec.js │ ├── splitHostname.spec.js │ ├── userFriendlyErrors.spec.js │ └── validateHost.spec.js ├── translations ├── af-ZA.json ├── ar-SA.json ├── bg-BG.json ├── ca-ES.json ├── cs-CZ.json ├── da-DK.json ├── de-DE.json ├── el-GR.json ├── en.json ├── es-ES.json ├── fi-FI.json ├── fr-FR.json ├── ga-IE.json ├── he-IL.json ├── hi-IN.json ├── hr-HR.json ├── hu-HU.json ├── it-IT.json ├── ja-JP.json ├── ko-KR.json ├── nl-NL.json ├── no-NO.json ├── pl-PL.json ├── pt-BR.json ├── pt-PT.json ├── ro-RO.json ├── ru-RU.json ├── sr-SP.json ├── sv-SE.json ├── tr-TR.json ├── uk-UA.json ├── vi-VN.json ├── zh-CN.json └── zh-TW.json ├── tsconfig.json ├── utils ├── .eslintrc.js ├── api.js ├── appRootPath.js ├── blockExplorer.js ├── btc.js ├── btcpayserver.js ├── byteutils.js ├── chainify.js ├── coin.js ├── connectionString.js ├── createReducer.js ├── crypto.js ├── db.js ├── debouncedFuncQueue.js ├── delay.js ├── difference.js ├── dirExists.js ├── error.js ├── events │ ├── eventDefinition.js │ ├── events.js │ └── index.js ├── featureFlag.js ├── fee.js ├── fetchBlockHeight.js ├── fileExists.js ├── genId.js ├── getDisplayName.js ├── getLndListen.js ├── getPackageDetails.js ├── github.js ├── isBase64url.js ├── isObject.js ├── isStableVersion.js ├── isSubDir.js ├── lndBinaryName.js ├── lndBinaryPath.js ├── lndConfig.js ├── lndGrpcProtoDir.js ├── lnurl │ └── index.js ├── localWallets.js ├── log.js ├── notifications.js ├── pagination.js ├── parseSeed.js ├── parseUrlFragments.js ├── promiseTimeout.js ├── promisifiedCall.js ├── rateProvider │ ├── index.js │ ├── providers.js │ ├── requestTicker.js │ └── requestTickerWithFallback.js ├── sanitize.js ├── scheduler.js ├── secureStorage.js ├── sha256.js ├── singleton.js ├── splitHostname.js ├── streamify.js ├── truncate.js ├── truncateNodePubkey.js ├── userFriendlyErrors.js ├── validateHost.js └── waitForIpc.js ├── webpack ├── dev │ ├── common │ │ ├── devserver.js │ │ └── plugins.js │ ├── main.config.js │ ├── preload.config.js │ ├── renderer.config.js │ └── workers.config.js ├── prod │ ├── common │ │ └── plugins.js │ ├── main.config.js │ ├── preload.config.js │ ├── renderer.config.js │ └── workers.config.js ├── webpack.config.base.js ├── webpack.config.dll.js ├── webpack.config.e2e.js ├── webpack.config.eslint.js ├── webpack.config.main.js ├── webpack.config.prod.js └── webpack.config.renderer.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | [ 4 | "module-resolver", 5 | { 6 | "root": ["./renderer"], 7 | "alias": { 8 | "^@zap/(.+)": "./\\1" 9 | } 10 | } 11 | ] 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /.commitlintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@commitlint/config-conventional"] 3 | } 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.{json,js,jsx,html,css,yml}] 12 | indent_style = space 13 | indent_size = 2 14 | 15 | [.eslintrc] 16 | indent_style = space 17 | indent_size = 2 18 | 19 | [*.md] 20 | trim_trailing_whitespace = false 21 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | *.png binary 3 | *.ico binary 4 | *.icns binary 5 | *.woff2 binary 6 | *.macaroon binary 7 | resources/bin/* binary 8 | resources/bin/* -text 9 | -------------------------------------------------------------------------------- /.huskyrc: -------------------------------------------------------------------------------- 1 | { 2 | "hooks": { 3 | "commit-msg": "commitlint --env HUSKY_GIT_PARAMS", 4 | "pre-push": "npm run lint" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "linters": { 3 | "*.{js,json,md}": ["npm run lint-fix-base", "git add"], 4 | "*.js": ["npm run lint-styles-fix-base", "git add"] 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # App source 2 | package.json 3 | package-lock.json 4 | .git 5 | .babelrc 6 | node_modules 7 | coverage 8 | 9 | # App packaged 10 | release 11 | dist 12 | dll 13 | 14 | # Storybook 15 | storybook-static 16 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | "@ln-zap/prettier-config" 2 | -------------------------------------------------------------------------------- /.renovaterc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["config:js-app", "group:linters", "group:definitelyTyped"], 3 | "baseBranches": ["next"], 4 | "labels": ["dependencies"] 5 | } 6 | -------------------------------------------------------------------------------- /.storybook/main.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | stories: ['../**/*.stories.js'], 3 | addons: [ 4 | '@storybook/addon-actions', 5 | '@storybook/addon-links', 6 | '@storybook/addon-knobs', 7 | 'storybook-addon-intl', 8 | 'storybook-styled-components', 9 | ], 10 | } 11 | -------------------------------------------------------------------------------- /.storybook/manager.js: -------------------------------------------------------------------------------- 1 | import { addons } from '@storybook/addons' 2 | import { themes } from '@storybook/theming' 3 | 4 | addons.setConfig({ 5 | brandTitle: 'Zap', 6 | brandUrl: 'https://ln-zap.github.io/zap-desktop', 7 | theme: themes.dark, 8 | hierarchySeparator: /\./, 9 | }) 10 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | # Storybook 2 | storybook-static 3 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "processors": [ 3 | ["stylelint-processor-styled-components", { 4 | "parserPlugins": [ 5 | "jsx", 6 | "classProperties", 7 | "exportDefaultFrom" 8 | ] 9 | }] 10 | ], 11 | "extends": [ 12 | "stylelint-config-recommended", 13 | "stylelint-config-styled-components" 14 | ], 15 | "rules": { 16 | "no-descending-specificity": null, 17 | "no-empty-source": null 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.svgrrc: -------------------------------------------------------------------------------- 1 | { 2 | "icon": true, 3 | "replaceAttrValues": { 4 | "#FFF": "currentColor", 5 | "#FFFFFF": "currentColor", 6 | "#F5A623": "currentColor", 7 | "#010002": "currentColor", 8 | "#E63939": "currentColor", 9 | "#39E673": "currentColor" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.testcafe-electron-rc: -------------------------------------------------------------------------------- 1 | { 2 | "mainWindowUrl": "./dist/index.html", 3 | "appPath": "." 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "javascript.validate.enable": true, 3 | "search.exclude": { 4 | ".git": true, 5 | ".eslintcache": true, 6 | "bower_components": true, 7 | "dist": true, 8 | "dll": true, 9 | "release": true, 10 | "node_modules": true, 11 | "npm-debug.log.*": true, 12 | "test/**/__snapshots__": true, 13 | "yarn.lock": true 14 | }, 15 | "editor.codeActionsOnSave": { 16 | "source.fixAll.eslint": true 17 | }, 18 | "eslint.validate": ["javascript"] 19 | } 20 | -------------------------------------------------------------------------------- /config/development.js: -------------------------------------------------------------------------------- 1 | module.exports = {} 2 | -------------------------------------------------------------------------------- /config/e2e.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | secureStorage: { 3 | namespace: 'ln-zap-e2e', 4 | }, 5 | } 6 | -------------------------------------------------------------------------------- /config/production.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | lnd: { 3 | rpc: { 4 | host: 'localhost', 5 | port: 11009, 6 | }, 7 | rest: { 8 | host: 'localhost', 9 | port: 8180, 10 | }, 11 | p2p: { 12 | host: '', // disable p2p interface 13 | port: 9735, 14 | }, 15 | }, 16 | } 17 | -------------------------------------------------------------------------------- /config/storybook.js: -------------------------------------------------------------------------------- 1 | module.exports = {} 2 | -------------------------------------------------------------------------------- /config/test.js: -------------------------------------------------------------------------------- 1 | module.exports = {} 2 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | commit_message: '[ci skip]' 2 | files: 3 | - source: /translations/en.json 4 | translation: /translations/%locale%.json 5 | update_option: update_without_changes 6 | -------------------------------------------------------------------------------- /electron/about/preload.js: -------------------------------------------------------------------------------- 1 | window.ipcRenderer = require('electron').ipcRenderer 2 | -------------------------------------------------------------------------------- /electron/lnurl/index.js: -------------------------------------------------------------------------------- 1 | import lnurlService from './service' 2 | 3 | export default lnurlService 4 | -------------------------------------------------------------------------------- /electron/migrations/purge-local-wallets.js: -------------------------------------------------------------------------------- 1 | import config from 'config' 2 | import { purgeAllLocalWallets } from '@zap/utils/localWallets' 3 | 4 | /** 5 | * migration - Migration script to purge all local wallets, causing a resync of the blockchain data. 6 | * 7 | * @returns {undefined} 8 | */ 9 | const migration = async () => { 10 | const { chains, networks } = config 11 | await purgeAllLocalWallets(chains, networks) 12 | } 13 | 14 | export default migration 15 | -------------------------------------------------------------------------------- /electron/secureStorage/index.js: -------------------------------------------------------------------------------- 1 | import storage from './service' 2 | 3 | export createCRUD from './ipcCRUD' 4 | export default storage 5 | -------------------------------------------------------------------------------- /electron/secureStorage/service.js: -------------------------------------------------------------------------------- 1 | import config from 'config' 2 | import createStorage from '@zap/utils/secureStorage' 3 | import createCRUD from './ipcCRUD' 4 | 5 | /** 6 | * createStorageService - Create secure storage service. 7 | * 8 | * @param {object} mainWindow Browser window 9 | */ 10 | export default function createStorageService(mainWindow) { 11 | const storage = createStorage(config.secureStorage.namespace) 12 | // helper func to send messages to the renderer process 13 | const send = (msg, params) => mainWindow.webContents.send(msg, params) 14 | createCRUD(storage, 'app-password', 'password', send) 15 | } 16 | -------------------------------------------------------------------------------- /fonts/roboto-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LN-Zap/zap-desktop/d44d45c6050538a6e4db95b7f69facf210b8db95/fonts/roboto-light.woff2 -------------------------------------------------------------------------------- /fonts/roboto-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LN-Zap/zap-desktop/d44d45c6050538a6e4db95b7f69facf210b8db95/fonts/roboto-regular.woff2 -------------------------------------------------------------------------------- /icons/angle-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/angle-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/angle-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/angle-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/autopay-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/backup-local.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /icons/bolt-onboarding.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/chain-link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/check-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icons/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/clock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/cloud-lightning.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icons/connect-onboarding.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /icons/download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/external-link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/eye-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /icons/import-onboarding.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /icons/layout-cards.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/layout-list.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/lightning-bolt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/lightning-channel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/lightning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LN-Zap/zap-desktop/d44d45c6050538a6e4db95b7f69facf210b8db95/icons/logo.png -------------------------------------------------------------------------------- /icons/logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/medium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/minus-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/padlock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/plus-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /icons/plus-onboarding.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /icons/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/receive.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /icons/refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/send.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /icons/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/user-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icons/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /icons/zap-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /icons/zap.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /renderer/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Zap 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /renderer/components/Activity/ActivityActions/index.js: -------------------------------------------------------------------------------- 1 | import ActivityActions from './ActivityActions' 2 | 3 | export default ActivityActions 4 | export ActivityFilter from './ActivityFilter' 5 | export ActivityRefresh from './ActivityRefresh' 6 | export ActivitySearch from './ActivitySearch' 7 | -------------------------------------------------------------------------------- /renderer/components/Activity/ActivityActions/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | search_placeholder: 'Search Activity', 6 | refresh_button_hint: 'Refresh activity list', 7 | actiity_filter_sent: 'Sent', 8 | actiity_filter_received: 'Received', 9 | actiity_filter_pending: 'Pending', 10 | actiity_filter_expired: 'Expired', 11 | actiity_filter_internal: 'Internal', 12 | activity_filter_hint: 'Activity list filters', 13 | }) 14 | -------------------------------------------------------------------------------- /renderer/components/Activity/ActivityModal/index.js: -------------------------------------------------------------------------------- 1 | export ActivityModal from './ActivityModal' 2 | -------------------------------------------------------------------------------- /renderer/components/Activity/ErrorLink.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import { Message } from 'components/UI' 4 | 5 | const ErrorLinkContainer = styled(Message)` 6 | &:hover { 7 | cursor: pointer; 8 | } 9 | ` 10 | 11 | const ErrorLink = props => 12 | 13 | export default ErrorLink 14 | -------------------------------------------------------------------------------- /renderer/components/Activity/Invoice/index.js: -------------------------------------------------------------------------------- 1 | import Invoice from './Invoice' 2 | 3 | export default Invoice 4 | -------------------------------------------------------------------------------- /renderer/components/Activity/Invoice/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | received: 'Received payment', 6 | requested: 'Requested payment', 7 | type_paid: 'Lightning invoice (paid)', 8 | type_unpaid: 'Lightning invoice (unpaid)', 9 | amount: 'Invoice amount', 10 | }) 11 | -------------------------------------------------------------------------------- /renderer/components/Activity/InvoiceModal/index.js: -------------------------------------------------------------------------------- 1 | export InvoiceModal from './InvoiceModal' 2 | -------------------------------------------------------------------------------- /renderer/components/Activity/InvoiceModal/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | title_received: 'Received', 6 | title_requested: 'Requested', 7 | subtitle: 'Lightning Payment', 8 | pay_req: 'Payment Request', 9 | memo: 'Memo', 10 | amount: 'Amount', 11 | date_requested: 'Date Requested', 12 | status: 'Status', 13 | not_paid: 'Not Paid', 14 | paid: 'Paid', 15 | current_value: 'Current value', 16 | }) 17 | -------------------------------------------------------------------------------- /renderer/components/Activity/List.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { List } from 'react-virtualized' 3 | import { space } from 'styled-system' 4 | import styled from 'styled-components' 5 | 6 | const ROW_HEIGHT = 53 7 | 8 | const StyledList = styled(List)` 9 | ${space} 10 | outline: none; 11 | padding-left: 12px; 12 | ` 13 | 14 | const ActivityList = React.forwardRef((props, ref) => ( 15 | 16 | )) 17 | 18 | ActivityList.displayName = 'ActivityList' 19 | 20 | export default ActivityList 21 | -------------------------------------------------------------------------------- /renderer/components/Activity/Payment/index.js: -------------------------------------------------------------------------------- 1 | import Payment from './Payment' 2 | 3 | export default Payment 4 | -------------------------------------------------------------------------------- /renderer/components/Activity/Payment/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | amount: 'Payment amount', 6 | fee: 'Payment fee', 7 | type: 'Lightning payment', 8 | status_processing: 'Processing your payment…', 9 | status_success: 'Your payment was successful.', 10 | status_error: 'There was a problem sending your payment. Click for more details.', 11 | }) 12 | -------------------------------------------------------------------------------- /renderer/components/Activity/PaymentModal/index.js: -------------------------------------------------------------------------------- 1 | export PaymentModal from './PaymentModal' 2 | export Route from './Route' 3 | export Htlc from './Htlc' 4 | export HtlcHops from './HtlcHops' 5 | -------------------------------------------------------------------------------- /renderer/components/Activity/PaymentModal/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | export default defineMessages({ 4 | title_sent: 'Sent', 5 | subtitle: 'Lightning Payment', 6 | amount: 'Amount', 7 | destination: 'Destination', 8 | date_sent: 'Date sent', 9 | current_value: 'Current value', 10 | preimage: 'Payment preimage', 11 | memo: 'Memo', 12 | htlc_title: 'Routing', 13 | htlc_hop_fee: '{hopFee} {cryptoUnitName} fee', 14 | htlc_hop_no_fee: 'No fee', 15 | }) 16 | -------------------------------------------------------------------------------- /renderer/components/Activity/Transaction/index.js: -------------------------------------------------------------------------------- 1 | import Transaction from './Transaction' 2 | 3 | export default Transaction 4 | -------------------------------------------------------------------------------- /renderer/components/Activity/TransactionModal/index.js: -------------------------------------------------------------------------------- 1 | export TransactionModal from './TransactionModal' 2 | -------------------------------------------------------------------------------- /renderer/components/Activity/index.js: -------------------------------------------------------------------------------- 1 | import Activity from './Activity' 2 | 3 | export default Activity 4 | -------------------------------------------------------------------------------- /renderer/components/Activity/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | all: 'All', 6 | sent: 'Sent', 7 | requested: 'Received', 8 | pending: 'Pending', 9 | expired: 'Expired', 10 | internal: 'Internal', 11 | error_dialog_header: 'Transaction error details', 12 | error_dialog_copy: 'Copy', 13 | error_copied: 'Error details have been copied to your clipboard', 14 | }) 15 | -------------------------------------------------------------------------------- /renderer/components/App/index.js: -------------------------------------------------------------------------------- 1 | import App from './App' 2 | 3 | export default App 4 | -------------------------------------------------------------------------------- /renderer/components/Autopay/AutopayActions.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Box } from 'rebass/styled-components' 3 | import AutopaySearch from 'containers/Autopay/AutopaySearch' 4 | 5 | const AutopayActions = props => ( 6 | 7 | 8 | 9 | ) 10 | 11 | export default AutopayActions 12 | -------------------------------------------------------------------------------- /renderer/components/Autopay/AutopayHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Box } from 'rebass/styled-components' 3 | import AutopayHeading from './AutopayHeading' 4 | 5 | const AutopayHeader = props => ( 6 | 7 | 8 | 9 | ) 10 | 11 | export default AutopayHeader 12 | -------------------------------------------------------------------------------- /renderer/components/Autopay/AutopaySearchNoResults.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FormattedMessage } from 'react-intl' 3 | import { Text } from 'components/UI' 4 | import messages from './messages' 5 | 6 | const AutopaySearchNoResults = props => ( 7 | 8 | 9 | 10 | ) 11 | 12 | export default AutopaySearchNoResults 13 | -------------------------------------------------------------------------------- /renderer/components/Autopay/index.js: -------------------------------------------------------------------------------- 1 | import Autopay from './Autopay' 2 | 3 | export default Autopay 4 | export AutopayActions from './AutopayActions' 5 | export AutopayCardView from './AutopayCardView' 6 | export AutopayHeader from './AutopayHeader' 7 | export AutopayHeading from './AutopayHeading' 8 | export AutopayList from './AutopayList' 9 | export AutopaySearch from './AutopaySearch' 10 | export AutopaySearchNoResults from './AutopaySearchNoResults' 11 | -------------------------------------------------------------------------------- /renderer/components/Channels/ChannelCreateHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FormattedMessage } from 'react-intl' 3 | import { Box } from 'rebass/styled-components' 4 | import { Header } from 'components/UI' 5 | import LightningChannel from 'components/Icon/LightningChannel' 6 | import messages from './messages' 7 | 8 | const ChannelCreateHeader = props => ( 9 | 10 |
} 12 | title={} 13 | /> 14 | 15 | ) 16 | 17 | export default ChannelCreateHeader 18 | -------------------------------------------------------------------------------- /renderer/components/Channels/ChannelMoreButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FormattedMessage } from 'react-intl' 3 | import { Button } from 'components/UI' 4 | import messages from './messages' 5 | 6 | const ChannelMoreButton = props => ( 7 | 10 | ) 11 | export default ChannelMoreButton 12 | -------------------------------------------------------------------------------- /renderer/components/Channels/ChannelsMenu/index.js: -------------------------------------------------------------------------------- 1 | import ChannelsMenu from './ChannelsMenu' 2 | 3 | export default ChannelsMenu 4 | -------------------------------------------------------------------------------- /renderer/components/Channels/ChannelsMenu/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | title: 'Channels', 6 | menu_item_channels_title: 'Manage', 7 | menu_item_channels_description: 'View your channels', 8 | menu_item_channel_create_title: 'Create', 9 | menu_item_channel_create_description: 'Open new channels', 10 | summary_row_lightning_title: 'Lightning', 11 | summary_row_pending_title: 'Pending', 12 | summary_row_onchain_title: 'On-Chain', 13 | }) 14 | -------------------------------------------------------------------------------- /renderer/components/Channels/constants.js: -------------------------------------------------------------------------------- 1 | export const TRANSACTION_SPEED_SLOW = 'TRANSACTION_SPEED_SLOW' 2 | export const TRANSACTION_SPEED_MEDIUM = 'TRANSACTION_SPEED_MEDIUM' 3 | export const TRANSACTION_SPEED_FAST = 'TRANSACTION_SPEED_FAST' 4 | export const CHANNEL_LIST_VIEW_MODE_SUMMARY = 'summary' 5 | export const CHANNEL_LIST_VIEW_MODE_CARD = 'card' 6 | export const CHANNEL_DATA_VIEW_MODE_BASIC = 'CHANNEL_DATA_VIEW_MODE_BASIC' 7 | export const CHANNEL_DATA_VIEW_MODE_FULL = 'CHANNEL_DATA_VIEW_MODE_FULL' 8 | -------------------------------------------------------------------------------- /renderer/components/Dialog/index.js: -------------------------------------------------------------------------------- 1 | export DialogAppCrashed from './DialogAppCrashed' 2 | export DialogLndCrashed from './DialogLndCrashed' 3 | -------------------------------------------------------------------------------- /renderer/components/Form/OpenDialogButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Box } from 'rebass/styled-components' 3 | import Copy from 'components/Icon/FolderOpen' 4 | import { Button } from 'components/UI' 5 | 6 | const OpenDialogButton = props => ( 7 | 20 | ) 21 | 22 | export default OpenDialogButton 23 | -------------------------------------------------------------------------------- /renderer/components/Form/PositiveIntegerField.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import IntegerInput from './IntegerInput' 3 | 4 | const PositiveIntegerField = props => ( 5 | 18 | ) 19 | 20 | export default PositiveIntegerField 21 | -------------------------------------------------------------------------------- /renderer/components/Form/SearchInput.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled from 'styled-components' 3 | import { themeGet } from '@styled-system/theme-get' 4 | import Input from './Input' 5 | import Search from 'components/Icon/Search' 6 | 7 | const Icon = styled(Search)` 8 | cursor: pointer; 9 | height: 16px; 10 | width: 16px; 11 | position: absolute; 12 | left: 16px; 13 | user-select: none; 14 | color: ${themeGet('colors.gray')}; 15 | ` 16 | 17 | const SearchInput = props => { 18 | return } /> 19 | } 20 | 21 | export default SearchInput 22 | -------------------------------------------------------------------------------- /renderer/components/Form/constants.js: -------------------------------------------------------------------------------- 1 | export const TRANSACTION_SPEED_SLOW = 'TRANSACTION_SPEED_SLOW' 2 | export const TRANSACTION_SPEED_MEDIUM = 'TRANSACTION_SPEED_MEDIUM' 3 | export const TRANSACTION_SPEED_FAST = 'TRANSACTION_SPEED_FAST' 4 | -------------------------------------------------------------------------------- /renderer/components/GlobalNotification/index.js: -------------------------------------------------------------------------------- 1 | import GlobalNotification from './GlobalNotification' 2 | 3 | export default GlobalNotification 4 | -------------------------------------------------------------------------------- /renderer/components/Home/WalletHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Textfit } from 'react-textfit' 4 | import { Heading } from 'components/UI' 5 | import { WalletName } from 'components/Util' 6 | 7 | const WalletHeader = ({ wallet }) => ( 8 | 9 | 10 | 11 | 12 | 13 | ) 14 | 15 | WalletHeader.propTypes = { 16 | wallet: PropTypes.object.isRequired, 17 | } 18 | 19 | export default WalletHeader 20 | -------------------------------------------------------------------------------- /renderer/components/Home/index.js: -------------------------------------------------------------------------------- 1 | import Home from './Home' 2 | 3 | export default Home 4 | export CreateWalletButton from './CreateWalletButton' 5 | export NoWallets from './NoWallets' 6 | export WalletsMenu from './WalletsMenu' 7 | export WalletLauncher from './WalletLauncher' 8 | export WalletUnlocker from './WalletUnlocker' 9 | export WalletSettingsFormLocal from './WalletSettingsFormLocal' 10 | export WalletSettingsFormRemote from './WalletSettingsFormRemote' 11 | export WalletHeader from './WalletHeader' 12 | export DeleteWalletDialog from './DeleteWalletDialog' 13 | -------------------------------------------------------------------------------- /renderer/components/Icon/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "max-len": 0 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /renderer/components/Icon/AngleDown.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgAngleDown = props => ( 4 | 5 | 6 | 7 | ) 8 | 9 | export default SvgAngleDown 10 | -------------------------------------------------------------------------------- /renderer/components/Icon/AngleLeft.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgAngleLeft = props => ( 4 | 5 | 6 | 7 | ) 8 | 9 | export default SvgAngleLeft 10 | -------------------------------------------------------------------------------- /renderer/components/Icon/AngleRight.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgAngleRight = props => ( 4 | 5 | 6 | 7 | ) 8 | 9 | export default SvgAngleRight 10 | -------------------------------------------------------------------------------- /renderer/components/Icon/AngleUp.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgAngleUp = props => ( 4 | 5 | 6 | 7 | ) 8 | 9 | export default SvgAngleUp 10 | -------------------------------------------------------------------------------- /renderer/components/Icon/ArrowDown.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgArrowDown = props => ( 4 | 5 | 13 | 14 | ) 15 | 16 | export default SvgArrowDown 17 | -------------------------------------------------------------------------------- /renderer/components/Icon/ArrowLeft.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgArrowLeft = props => ( 4 | 5 | 13 | 14 | ) 15 | 16 | export default SvgArrowLeft 17 | -------------------------------------------------------------------------------- /renderer/components/Icon/ArrowRight.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgArrowRight = props => ( 4 | 5 | 12 | 13 | 14 | 15 | ) 16 | 17 | export default SvgArrowRight 18 | -------------------------------------------------------------------------------- /renderer/components/Icon/ArrowUp.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgArrowUp = props => ( 4 | 5 | 13 | 14 | ) 15 | 16 | export default SvgArrowUp 17 | -------------------------------------------------------------------------------- /renderer/components/Icon/AutopayCheck.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgAutopayCheck = props => ( 4 | 5 | 12 | 17 | 18 | 19 | 20 | ) 21 | 22 | export default SvgAutopayCheck 23 | -------------------------------------------------------------------------------- /renderer/components/Icon/BackupLocal.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgBackupLocal = props => ( 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | ) 12 | 13 | export default SvgBackupLocal 14 | -------------------------------------------------------------------------------- /renderer/components/Icon/BigArrowRight.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgBigArrowRight = props => ( 4 | 5 | 12 | 13 | 14 | 15 | ) 16 | 17 | export default SvgBigArrowRight 18 | -------------------------------------------------------------------------------- /renderer/components/Icon/BoltOnboarding.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgBoltOnboarding = props => ( 4 | 5 | 9 | 10 | ) 11 | 12 | export default SvgBoltOnboarding 13 | -------------------------------------------------------------------------------- /renderer/components/Icon/ChainLink.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgChainLink = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgChainLink 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/Check.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgCheck = props => ( 4 | 16 | 17 | 18 | ) 19 | 20 | export default SvgCheck 21 | -------------------------------------------------------------------------------- /renderer/components/Icon/CheckCircle.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgCheckCircle = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgCheckCircle 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/Circle.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgCircle = props => ( 4 | 5 | 6 | 7 | ) 8 | 9 | export default SvgCircle 10 | -------------------------------------------------------------------------------- /renderer/components/Icon/Clock.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgClock = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgClock 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/Close.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgClose = props => ( 4 | 5 | 6 | 7 | 8 | 9 | 10 | ) 11 | 12 | export default SvgClose 13 | -------------------------------------------------------------------------------- /renderer/components/Icon/CloudLightning.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgCloudLightning = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgCloudLightning 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/ConnectOnboarding.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgConnectOnboarding = props => ( 4 | 5 | 6 | 7 | 8 | 9 | 10 | ) 11 | 12 | export default SvgConnectOnboarding 13 | -------------------------------------------------------------------------------- /renderer/components/Icon/Copy.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgCopy = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgCopy 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/Error.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgError = props => ( 4 | 5 | 10 | 11 | ) 12 | 13 | export default SvgError 14 | -------------------------------------------------------------------------------- /renderer/components/Icon/ExternalLink.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgExternalLink = props => ( 4 | 5 | 9 | 10 | ) 11 | 12 | export default SvgExternalLink 13 | -------------------------------------------------------------------------------- /renderer/components/Icon/Eye.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgEye = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgEye 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/ImportOnboarding.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgImportOnboarding = props => ( 4 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | ) 15 | 16 | export default SvgImportOnboarding 17 | -------------------------------------------------------------------------------- /renderer/components/Icon/LayoutCards.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgLayoutCards = props => ( 4 | 5 | 11 | 12 | ) 13 | 14 | export default SvgLayoutCards 15 | -------------------------------------------------------------------------------- /renderer/components/Icon/LayoutList.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgLayoutList = props => ( 4 | 5 | 11 | 12 | ) 13 | 14 | export default SvgLayoutList 15 | -------------------------------------------------------------------------------- /renderer/components/Icon/LightningBolt.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgLightningBolt = props => ( 4 | 5 | 13 | 14 | ) 15 | 16 | export default SvgLightningBolt 17 | -------------------------------------------------------------------------------- /renderer/components/Icon/LightningChannel.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgLightningChannel = props => ( 4 | 5 | 6 | 7 | 11 | 12 | 13 | ) 14 | 15 | export default SvgLightningChannel 16 | -------------------------------------------------------------------------------- /renderer/components/Icon/MinusCircle.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgMinusCircle = props => ( 4 | 5 | 14 | 15 | ) 16 | 17 | export default SvgMinusCircle 18 | -------------------------------------------------------------------------------- /renderer/components/Icon/Plus.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgPlus = props => ( 4 | 16 | 17 | 18 | ) 19 | 20 | export default SvgPlus 21 | -------------------------------------------------------------------------------- /renderer/components/Icon/PlusCircle.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgPlusCircle = props => ( 4 | 5 | 14 | 15 | ) 16 | 17 | export default SvgPlusCircle 18 | -------------------------------------------------------------------------------- /renderer/components/Icon/PlusOnboarding.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgPlusOnboarding = props => ( 4 | 5 | 6 | 11 | 12 | 13 | 14 | ) 15 | 16 | export default SvgPlusOnboarding 17 | -------------------------------------------------------------------------------- /renderer/components/Icon/Search.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgSearch = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgSearch 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/Spinner.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgSpinner = props => ( 4 | 5 | 6 | 10 | 11 | 12 | 13 | ) 14 | 15 | export default SvgSpinner 16 | -------------------------------------------------------------------------------- /renderer/components/Icon/Success.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgSuccess = props => ( 4 | 5 | 6 | 10 | 11 | 12 | 13 | ) 14 | 15 | export default SvgSuccess 16 | -------------------------------------------------------------------------------- /renderer/components/Icon/User.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgUser = props => ( 4 | 16 | 17 | 18 | 19 | ) 20 | 21 | export default SvgUser 22 | -------------------------------------------------------------------------------- /renderer/components/Icon/UserCircle.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgUserCircle = props => ( 4 | 5 | 13 | 14 | 15 | 16 | 17 | ) 18 | 19 | export default SvgUserCircle 20 | -------------------------------------------------------------------------------- /renderer/components/Icon/Warning.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgWarning = props => ( 4 | 5 | 6 | 10 | 11 | 12 | 13 | ) 14 | 15 | export default SvgWarning 16 | -------------------------------------------------------------------------------- /renderer/components/Icon/X.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgX = props => ( 4 | 5 | 6 | 10 | 11 | 20 | 21 | ) 22 | 23 | export default SvgX 24 | -------------------------------------------------------------------------------- /renderer/components/Icon/Zap.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgZap = props => ( 4 | 5 | 10 | 11 | ) 12 | 13 | export default SvgZap 14 | -------------------------------------------------------------------------------- /renderer/components/Icon/ZapSolid.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const SvgZapSolid = props => ( 4 | 5 | 10 | 11 | ) 12 | 13 | export default SvgZapSolid 14 | -------------------------------------------------------------------------------- /renderer/components/Lnurl/index.js: -------------------------------------------------------------------------------- 1 | export LnurlAuthPrompt from './LnurlAuthPrompt' 2 | export LnurlChannelPrompt from './LnurlChannelPrompt' 3 | export LnurlWithdrawPrompt from './LnurlWithdrawPrompt' 4 | -------------------------------------------------------------------------------- /renderer/components/Loading/index.js: -------------------------------------------------------------------------------- 1 | import LoadingBolt from './Loading' 2 | 3 | export default LoadingBolt 4 | -------------------------------------------------------------------------------- /renderer/components/Loading/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | loading: 'Loading', 6 | starting_lnd: 'Starting LND', 7 | connecting_to_lnd: 'Connecting to LND gRPC interface', 8 | starting_wallet_unlocker: 'Starting wallet unlocker', 9 | connecting_to_unlocker: 'Connecting to unlocker interface', 10 | starting_neutrino: 'Starting Neutrino', 11 | fetching_tickers: 'Fetching tickers', 12 | starting_tor_proxy: 'Starting Tor proxy', 13 | }) 14 | -------------------------------------------------------------------------------- /renderer/components/Login/index.js: -------------------------------------------------------------------------------- 1 | import Login from './Login' 2 | 3 | export LoginNotAllowed from './LoginNotAllowed' 4 | export default Login 5 | -------------------------------------------------------------------------------- /renderer/components/Login/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | intro: 'Enter your password to continue.', 6 | header: 'Secure storage is not available', 7 | error_desc_win32: `Windows Credential Manager is not available. It is required to start Zap wallet.`, 8 | error_desc_linux: `Gnome Keyring is not available. It might not be installed or the process is not running. Please ensure it's installed and running and restart the app`, 9 | error_desc_darwin: `Mac OS Keychain is not available. It is required to start Zap wallet.`, 10 | }) 11 | -------------------------------------------------------------------------------- /renderer/components/Onboarding/Steps/ConnectionDetailsContext.js: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react' 2 | 3 | const ConnectionDetailsContext = createContext({ 4 | openModal: () => {}, 5 | }) 6 | 7 | export default ConnectionDetailsContext 8 | -------------------------------------------------------------------------------- /renderer/components/Onboarding/Steps/components/Container.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import { Flex } from 'rebass/styled-components' 3 | 4 | const Container = styled(Flex)` 5 | position: absolute; 6 | top: 0; 7 | bottom: 0; 8 | ` 9 | 10 | export default Container 11 | -------------------------------------------------------------------------------- /renderer/components/Onboarding/Steps/components/settings.js: -------------------------------------------------------------------------------- 1 | export const BACKUP_FORM_WIDTH = 630 2 | export const BACKUP_FORM_HEIGHT = 470 3 | -------------------------------------------------------------------------------- /renderer/components/Onboarding/Steps/constants.js: -------------------------------------------------------------------------------- 1 | export const FORM_TYPE_MANUAL = 'FORM_TYPE_MANUAL' 2 | export const FORM_TYPE_CONNECTION_STRING = 'FORM_TYPE_CONNECTION_STRING' 3 | -------------------------------------------------------------------------------- /renderer/components/Onboarding/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | next: 'Next', 6 | skip: 'Skip', 7 | previous: 'Back', 8 | start_over: 'Start over', 9 | }) 10 | -------------------------------------------------------------------------------- /renderer/components/Pay/constants.js: -------------------------------------------------------------------------------- 1 | export const PAY_FORM_STEPS = { address: 'address', amount: 'amount', summary: 'summary' } 2 | export const PAY_HEADER_TYPES = { onchain: 'onchain', offchain: 'offchain' } 3 | export const PAYMENT_TYPES = Object.freeze({ 4 | onchain: 'onchain', 5 | bolt11: 'bolt11', 6 | none: 'none', 7 | pubkey: 'pubkey', 8 | }) 9 | export const TRANSACTION_SPEED_SLOW = 'TRANSACTION_SPEED_SLOW' 10 | export const TRANSACTION_SPEED_MEDIUM = 'TRANSACTION_SPEED_MEDIUM' 11 | export const TRANSACTION_SPEED_FAST = 'TRANSACTION_SPEED_FAST' 12 | -------------------------------------------------------------------------------- /renderer/components/Pay/index.js: -------------------------------------------------------------------------------- 1 | export Pay from './Pay' 2 | export PayAddressField from './PayAddressField' 3 | export PayAmountFields from './PayAmountFields' 4 | export PayButtons from './PayButtons' 5 | export PayHeader from './PayHeader' 6 | export PayHelpText from './PayHelpText' 7 | export PayPanelBody from './PayPanelBody' 8 | export PayPanelFooter from './PayPanelFooter' 9 | export PayPanelHeader from './PayPanelHeader' 10 | export PaySummary from './PaySummary' 11 | export PaySummaryLightning from './PaySummaryLightning' 12 | export PaySummaryOnChain from './PaySummaryOnChain' 13 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfileMenu/index.js: -------------------------------------------------------------------------------- 1 | import ProfileMenu from './ProfileMenu' 2 | 3 | export default ProfileMenu 4 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfileMenu/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | profile_pane_nodeinfo_title: 'Node Info', 6 | profile_pane_connect_title: 'Connect', 7 | sign_message_title: 'Sign Message', 8 | verify_message_title: 'Verify Message', 9 | }) 10 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfilePage/index.js: -------------------------------------------------------------------------------- 1 | import ProfilePage from './ProfilePage' 2 | 3 | export default ProfilePage 4 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfilePage/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | profile_page_title: 'Profile', 6 | profile_pane_nodeinfo_title: 'Node Info', 7 | profile_pane_connect_title: 'Connect', 8 | }) 9 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfilePaneConnect/index.js: -------------------------------------------------------------------------------- 1 | import ProfilePaneConnect from './ProfilePaneConnect' 2 | 3 | export default ProfilePaneConnect 4 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfilePaneNodeInfo/index.js: -------------------------------------------------------------------------------- 1 | import ProfilePaneNodeInfo from './ProfilePaneNodeInfo' 2 | 3 | export default ProfilePaneNodeInfo 4 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfilePaneSignMessage/index.js: -------------------------------------------------------------------------------- 1 | import ProfilePaneSignMessage from './ProfilePaneSignMessage' 2 | 3 | export default ProfilePaneSignMessage 4 | -------------------------------------------------------------------------------- /renderer/components/Profile/ProfilePaneVerifyMessage/index.js: -------------------------------------------------------------------------------- 1 | import ProfilePaneVerifyMessage from './ProfilePaneVerifyMessage' 2 | 3 | export default ProfilePaneVerifyMessage 4 | -------------------------------------------------------------------------------- /renderer/components/Profile/constants.js: -------------------------------------------------------------------------------- 1 | export const PANE_NODEINFO = 'nodeinfo' 2 | export const PANE_LNDCONNECT = 'lndconnect' 3 | export const PANE_SIGNMESSAGE = 'signmessage' 4 | export const PANE_VERIFYMESSAGE = 'verifymessage' 5 | export const DEFAULT_PANE = PANE_NODEINFO 6 | -------------------------------------------------------------------------------- /renderer/components/Profile/index.js: -------------------------------------------------------------------------------- 1 | export ProfileMenu from './ProfileMenu' 2 | export ProfilePage from './ProfilePage' 3 | export ProfilePaneConnect from './ProfilePaneConnect' 4 | export ProfilePaneNodeInfo from './ProfilePaneNodeInfo' 5 | -------------------------------------------------------------------------------- /renderer/components/Request/index.js: -------------------------------------------------------------------------------- 1 | export Request from './Request' 2 | export RequestSummary from './RequestSummary' 3 | -------------------------------------------------------------------------------- /renderer/components/Settings/SettingsMenu/index.js: -------------------------------------------------------------------------------- 1 | import SettingsMenu from './SettingsMenu' 2 | 3 | export default SettingsMenu 4 | -------------------------------------------------------------------------------- /renderer/components/Settings/SettingsMenu/messages.js: -------------------------------------------------------------------------------- 1 | import { defineMessages } from 'react-intl' 2 | 3 | /* eslint-disable max-len */ 4 | export default defineMessages({ 5 | disconnect_title: 'Disconnect', 6 | logout_title: 'Logout', 7 | settings_title: 'Preferences', 8 | profile_title: 'Profile', 9 | theme_title: 'Theme', 10 | theme_option_dark: 'Dark', 11 | theme_option_light: 'Light', 12 | locale_title: 'Language', 13 | currency_title: 'Currency', 14 | }) 15 | -------------------------------------------------------------------------------- /renderer/components/Settings/index.js: -------------------------------------------------------------------------------- 1 | export SettingsMenu from './SettingsMenu' 2 | export SettingsForm from './SettingsForm' 3 | export SettingsFieldsWallet from './SettingsFieldsWallet' 4 | export SettingsFieldsGeneral from './SettingsFieldsGeneral' 5 | export SettingsFieldsSecurity from './SettingsFieldsSecurity' 6 | export SettingsPage from './SettingsPage' 7 | -------------------------------------------------------------------------------- /renderer/components/Syncing/OldWalletHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FormattedMessage } from 'react-intl' 3 | import { Header } from 'components/UI' 4 | import messages from './messages' 5 | 6 | const OldWalletHeader = () => ( 7 |
} 9 | title={} 10 | /> 11 | ) 12 | 13 | export default OldWalletHeader 14 | -------------------------------------------------------------------------------- /renderer/components/Syncing/index.js: -------------------------------------------------------------------------------- 1 | import Syncing from './Syncing' 2 | 3 | export default Syncing 4 | export Address from './Address' 5 | export NewWalletHeader from './NewWalletHeader' 6 | export OldWalletHeader from './OldWalletHeader' 7 | export Progress from './Progress' 8 | export Tutorials from './Tutorials' 9 | -------------------------------------------------------------------------------- /renderer/components/TabControl/Tab.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | 4 | // don't update a tab if it's currently hidden 5 | const shouldUpdate = (prevProps, nextProps) => !nextProps.isActive 6 | 7 | const Tab = React.memo(({ children }) => <>{children}, shouldUpdate) 8 | Tab.displayName = 'Tab' 9 | 10 | Tab.propTypes = { 11 | children: PropTypes.node.isRequired, 12 | } 13 | 14 | export default Tab 15 | -------------------------------------------------------------------------------- /renderer/components/UI/BackgroundPrimary.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Flex } from 'rebass/styled-components' 3 | 4 | /** 5 | * @name BackgroundPrimary 6 | * @example 7 | * 8 | */ 9 | class BackgroundPrimary extends React.Component { 10 | render() { 11 | return 12 | } 13 | } 14 | 15 | export default BackgroundPrimary 16 | -------------------------------------------------------------------------------- /renderer/components/UI/BackgroundSecondary.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Box } from 'rebass/styled-components' 3 | 4 | /** 5 | * @name BackgroundSecondary 6 | * @example 7 | * 8 | */ 9 | class BackgroundSecondary extends React.Component { 10 | render() { 11 | return 12 | } 13 | } 14 | 15 | export default BackgroundSecondary 16 | -------------------------------------------------------------------------------- /renderer/components/UI/BackgroundTertiary.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Box } from 'rebass/styled-components' 3 | 4 | /** 5 | * @name BackgroundTertiary 6 | * @example 7 | * 8 | */ 9 | class BackgroundTertiary extends React.Component { 10 | render() { 11 | return 12 | } 13 | } 14 | 15 | export default BackgroundTertiary 16 | -------------------------------------------------------------------------------- /renderer/components/UI/Bar.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Box } from 'rebass/styled-components' 4 | 5 | const Bar = ({ sx, variant, ...rest }) => { 6 | return ( 7 | 18 | ) 19 | } 20 | 21 | Bar.propTypes = { 22 | sx: PropTypes.object, 23 | variant: PropTypes.string, 24 | } 25 | 26 | Bar.defaultProps = { 27 | variant: 'normal', 28 | } 29 | 30 | export default Bar 31 | -------------------------------------------------------------------------------- /renderer/components/UI/Card.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Card as BaseCard } from 'rebass/styled-components' 4 | 5 | const Card = React.forwardRef(({ sx, ...rest }, ref) => { 6 | return ( 7 | 20 | ) 21 | }) 22 | 23 | Card.propTypes = { 24 | sx: PropTypes.object, 25 | } 26 | 27 | Card.displayName = 'Card' 28 | 29 | export default Card 30 | -------------------------------------------------------------------------------- /renderer/components/UI/CenteredContent.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Flex } from 'rebass/styled-components' 3 | 4 | const CenteredContent = props => ( 5 | 13 | ) 14 | 15 | export default CenteredContent 16 | -------------------------------------------------------------------------------- /renderer/components/UI/ClippedText.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import Text from 'components/UI/Text' 3 | 4 | const ClippedText = styled(Text)` 5 | overflow: hidden; 6 | white-space: nowrap; 7 | text-overflow: ellipsis; 8 | ` 9 | 10 | export default ClippedText 11 | -------------------------------------------------------------------------------- /renderer/components/UI/DialogOverlay.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | import { themeGet } from '@styled-system/theme-get' 3 | import { Flex } from 'rebass/styled-components' 4 | 5 | const Overlay = styled(Flex)` 6 | position: ${props => (props.position ? props.position : 'absolute')}; 7 | z-index: 99998; 8 | background-color: ${themeGet('colors.primaryColor')}CC; 9 | top: 0; 10 | bottom: 0; 11 | left: 0; 12 | right: 0; 13 | ` 14 | 15 | export default Overlay 16 | -------------------------------------------------------------------------------- /renderer/components/UI/Dropdown/index.js: -------------------------------------------------------------------------------- 1 | import Dropdown from './Dropdown' 2 | 3 | export { DropdownButton } from './Dropdown' 4 | export default Dropdown 5 | -------------------------------------------------------------------------------- /renderer/components/UI/Link.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Text from './Text' 3 | 4 | const Link = props => 5 | 6 | export default Link 7 | -------------------------------------------------------------------------------- /renderer/components/UI/MainContent.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Box } from 'rebass/styled-components' 3 | 4 | const MainContent = props => ( 5 | 15 | ) 16 | 17 | export default MainContent 18 | -------------------------------------------------------------------------------- /renderer/components/UI/MenuItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Button from 'components/UI/Button' 3 | 4 | const MenuItem = props => ( 5 |