├── .angular-cli.json ├── .editorconfig ├── .gitignore ├── .htmlhintrc ├── .sass-lint.yml ├── .travis.yml ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── angular.json ├── background-mac.png ├── bin └── entrypoint.sh ├── download-button.png ├── e2e ├── app.e2e-spec.ts ├── app.po.ts └── tsconfig.e2e.json ├── issue_template.md ├── karma.conf.js ├── main.js ├── modules ├── clientBinaries │ ├── clientBinaries.json │ ├── clientBinariesManager.js │ └── generateVersions.js ├── close-gui │ └── close-gui.js ├── daemon │ ├── daemon.js │ ├── daemonConfig.js │ ├── daemonManager.js │ └── update.js ├── init.js ├── logger.js ├── market │ ├── config.js │ └── market.js ├── multiwallet.js ├── notification │ └── notification.js ├── options.js ├── rpc │ ├── cookie.js │ └── rpc.js ├── webrequest │ └── http-auth.js └── zmq │ └── zmq.js ├── nightly.sh ├── package.json ├── preload.js ├── protractor.conf.js ├── resources ├── configuration │ ├── afterSignHook.js │ └── entitlements.mac.plist ├── icon.icns ├── icon.ico ├── icon.png └── linux │ ├── 128x128.png │ ├── 16x16.png │ ├── 24x24.png │ ├── 256x256.png │ ├── 32x32.png │ ├── 48x48.png │ ├── 512x512.png │ └── 64x64.png ├── src ├── app │ ├── _test │ │ ├── core-test │ │ │ ├── core-test.module.ts │ │ │ ├── market-test │ │ │ │ ├── listing-test │ │ │ │ │ └── mock-data │ │ │ │ │ │ ├── get.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── search.ts │ │ │ │ ├── market.mockservice.ts │ │ │ │ ├── mock-data │ │ │ │ │ └── mock-market.responses.ts │ │ │ │ └── proposal-test │ │ │ │ │ └── mock-data │ │ │ │ │ ├── proposal │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── list.ts │ │ │ │ │ └── result.ts │ │ │ │ │ └── vote │ │ │ │ │ ├── get.ts │ │ │ │ │ └── index.ts │ │ │ └── rpc-test │ │ │ │ ├── mock-data │ │ │ │ ├── getpeerinfo.mock.ts │ │ │ │ └── listunspent.mock.ts │ │ │ │ ├── rpc-mock.service.ts │ │ │ │ ├── rpc-state-mock.service.ts │ │ │ │ └── rpc-test.module.ts │ │ └── wallet-test │ │ │ └── send-test │ │ │ └── send-mock.service.ts │ ├── app.component.html │ ├── app.component.scss │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── app.routing.ts │ ├── core-ui │ │ ├── core-ui.module.ts │ │ ├── core.animations.ts │ │ ├── directive │ │ │ ├── common.directives.ts │ │ │ └── directive.module.ts │ │ ├── main │ │ │ ├── announce-notification │ │ │ │ ├── announcement-notification.component.html │ │ │ │ ├── announcement-notification.component.scss │ │ │ │ ├── announcement-notification.component.spec.ts │ │ │ │ └── announcement-notification.component.ts │ │ │ ├── block-sync-bar │ │ │ │ ├── block-sync-bar.component.html │ │ │ │ ├── block-sync-bar.component.scss │ │ │ │ ├── block-sync-bar.component.spec.ts │ │ │ │ └── block-sync-bar.component.ts │ │ │ ├── cart │ │ │ │ ├── cart.component.html │ │ │ │ ├── cart.component.scss │ │ │ │ ├── cart.component.spec.ts │ │ │ │ └── cart.component.ts │ │ │ ├── loading-placeholder │ │ │ │ ├── loading-placeholder.component.html │ │ │ │ ├── loading-placeholder.component.scss │ │ │ │ ├── loading-placeholder.component.spec.ts │ │ │ │ └── loading-placeholder.component.ts │ │ │ ├── main.module.ts │ │ │ ├── main.router.html │ │ │ ├── main.router.scss │ │ │ ├── main.router.ts │ │ │ ├── order-count │ │ │ │ ├── order-count.component.html │ │ │ │ ├── order-count.component.scss │ │ │ │ ├── order-count.component.spec.ts │ │ │ │ └── order-count.component.ts │ │ │ ├── shared │ │ │ │ └── count-badge │ │ │ │ │ ├── count-badge.component.html │ │ │ │ │ ├── count-badge.component.scss │ │ │ │ │ ├── count-badge.component.spec.ts │ │ │ │ │ └── count-badge.component.ts │ │ │ ├── status │ │ │ │ ├── modal │ │ │ │ │ └── help-modal │ │ │ │ │ │ ├── command.model.ts │ │ │ │ │ │ ├── console-modal.component.html │ │ │ │ │ │ ├── console-modal.component.scss │ │ │ │ │ │ ├── console-modal.component.spec.ts │ │ │ │ │ │ └── console-modal.component.ts │ │ │ │ ├── status.component.html │ │ │ │ ├── status.component.scss │ │ │ │ ├── status.component.spec.ts │ │ │ │ ├── status.component.ts │ │ │ │ └── timeoffset │ │ │ │ │ ├── timeoffset.component.html │ │ │ │ │ ├── timeoffset.component.scss │ │ │ │ │ ├── timeoffset.component.spec.ts │ │ │ │ │ └── timeoffset.component.ts │ │ │ └── version │ │ │ │ ├── version.component.html │ │ │ │ ├── version.component.scss │ │ │ │ ├── version.component.spec.ts │ │ │ │ ├── version.component.ts │ │ │ │ └── version.model.ts │ │ ├── material │ │ │ ├── mat-otpgroup-select-search │ │ │ │ ├── mat-otpgroup-select-search.component.html │ │ │ │ ├── mat-otpgroup-select-search.component.scss │ │ │ │ ├── mat-otpgroup-select-search.component.spec.ts │ │ │ │ └── mat-otpgroup-select-search.component.ts │ │ │ ├── mat-select-search │ │ │ │ ├── mat-select-search.component.html │ │ │ │ ├── mat-select-search.component.scss │ │ │ │ ├── mat-select-search.component.spec.ts │ │ │ │ └── mat-select-search.component.ts │ │ │ └── material.module.ts │ │ └── paginator │ │ │ ├── page-event-model.ts │ │ │ ├── paginator.component.html │ │ │ ├── paginator.component.scss │ │ │ ├── paginator.component.spec.ts │ │ │ └── paginator.component.ts │ ├── core │ │ ├── close-gui │ │ │ ├── close-gui.service.spec.ts │ │ │ └── close-gui.service.ts │ │ ├── core.module.ts │ │ ├── http │ │ │ ├── client-version.model.ts │ │ │ ├── client-version.service.spec.ts │ │ │ └── client-version.service.ts │ │ ├── ipc │ │ │ ├── ipc.service.spec.ts │ │ │ ├── ipc.service.ts │ │ │ └── ipc.types.ts │ │ ├── market │ │ │ ├── api │ │ │ │ ├── bid │ │ │ │ │ ├── bid.model.ts │ │ │ │ │ ├── bid.service.spec.ts │ │ │ │ │ ├── bid.service.ts │ │ │ │ │ ├── bidCollection.model.ts │ │ │ │ │ └── product.model.ts │ │ │ │ ├── cart │ │ │ │ │ ├── cart.model.ts │ │ │ │ │ ├── cart.service.spec.ts │ │ │ │ │ └── cart.service.ts │ │ │ │ ├── category │ │ │ │ │ ├── category.model.ts │ │ │ │ │ ├── category.service.spec.ts │ │ │ │ │ └── category.service.ts │ │ │ │ ├── countrylist │ │ │ │ │ ├── country.model.ts │ │ │ │ │ ├── countrylist.service.spec.ts │ │ │ │ │ └── countrylist.service.ts │ │ │ │ ├── favorites │ │ │ │ │ ├── favorite.model.ts │ │ │ │ │ ├── favorites.service.spec.ts │ │ │ │ │ └── favorites.service.ts │ │ │ │ ├── listing │ │ │ │ │ ├── listing.model.ts │ │ │ │ │ ├── listing.service.spec.ts │ │ │ │ │ └── listing.service.ts │ │ │ │ ├── profile │ │ │ │ │ ├── address │ │ │ │ │ │ ├── address.model.ts │ │ │ │ │ │ ├── address.service.spec.ts │ │ │ │ │ │ └── address.service.ts │ │ │ │ │ ├── profile.model.ts │ │ │ │ │ ├── profile.service.spec.ts │ │ │ │ │ └── profile.service.ts │ │ │ │ ├── report │ │ │ │ │ ├── report.service.spec.ts │ │ │ │ │ └── report.service.ts │ │ │ │ └── template │ │ │ │ │ ├── escrow │ │ │ │ │ ├── escrow.service.spec.ts │ │ │ │ │ └── escrow.service.ts │ │ │ │ │ ├── image │ │ │ │ │ ├── image.model.ts │ │ │ │ │ ├── image.service.spec.ts │ │ │ │ │ ├── image.service.ts │ │ │ │ │ └── imagecollection.model.ts │ │ │ │ │ ├── information │ │ │ │ │ ├── information.service.spec.ts │ │ │ │ │ └── information.service.ts │ │ │ │ │ ├── location │ │ │ │ │ ├── gps.model.ts │ │ │ │ │ ├── location.service.spec.ts │ │ │ │ │ └── location.service.ts │ │ │ │ │ ├── payment │ │ │ │ │ ├── payment.service.spec.ts │ │ │ │ │ └── payment.service.ts │ │ │ │ │ ├── shipping │ │ │ │ │ ├── shipping.service.spec.ts │ │ │ │ │ └── shipping.service.ts │ │ │ │ │ ├── template.model.ts │ │ │ │ │ ├── template.service.spec.ts │ │ │ │ │ └── template.service.ts │ │ │ ├── market-cache │ │ │ │ ├── add-to-cart-cache.service.spec.ts │ │ │ │ ├── add-to-cart-cache.service.ts │ │ │ │ ├── checkout-process-cache.service.spec.ts │ │ │ │ ├── checkout-process-cache.service.ts │ │ │ │ ├── favorite-cache.service.spec.ts │ │ │ │ ├── favorite-cache.service.ts │ │ │ │ ├── market-cache.module.ts │ │ │ │ ├── post-listing-cache.service.spec.ts │ │ │ │ └── post-listing-cache.service.ts │ │ │ ├── market-state │ │ │ │ ├── market-state.service.spec.ts │ │ │ │ └── market-state.service.ts │ │ │ ├── market.module.ts │ │ │ ├── market.service.spec.ts │ │ │ ├── market.service.ts │ │ │ ├── order-status-notifier │ │ │ │ ├── order-status-notifier.service.spec.ts │ │ │ │ └── order-status-notifier.service.ts │ │ │ ├── proposals-notifier │ │ │ │ ├── proposals-notifications.service.spec.ts │ │ │ │ └── proposals-notifications.service.ts │ │ │ └── user-messages │ │ │ │ ├── user-message.model.ts │ │ │ │ ├── user-message.service.spec.ts │ │ │ │ └── user-message.service.ts │ │ ├── notification │ │ │ ├── notification.service.spec.ts │ │ │ └── notification.service.ts │ │ ├── rpc │ │ │ ├── blockstatus │ │ │ │ ├── blockstatus.service.spec.ts │ │ │ │ └── blockstatus.service.ts │ │ │ ├── new-tx-notifier │ │ │ │ ├── new-tx-notifier.service.spec.ts │ │ │ │ └── new-tx-notifier.service.ts │ │ │ ├── peer │ │ │ │ ├── peer.service.spec.ts │ │ │ │ └── peer.service.ts │ │ │ ├── rpc-state │ │ │ │ ├── rpc-state.service.spec.ts │ │ │ │ └── rpc-state.service.ts │ │ │ ├── rpc.mockservice.ts │ │ │ ├── rpc.module.ts │ │ │ ├── rpc.responses.ts │ │ │ ├── rpc.service.spec.ts │ │ │ └── rpc.service.ts │ │ ├── snackbar │ │ │ ├── snackbar.service.spec.ts │ │ │ └── snackbar.service.ts │ │ ├── state │ │ │ ├── state.service.spec.ts │ │ │ └── state.service.ts │ │ ├── util │ │ │ ├── util.spec.ts │ │ │ └── utils.ts │ │ └── zmq │ │ │ ├── zmq.service.spec.ts │ │ │ └── zmq.service.ts │ ├── installer │ │ ├── create-wallet │ │ │ ├── create-wallet.component.html │ │ │ ├── create-wallet.component.scss │ │ │ ├── create-wallet.component.ts │ │ │ ├── createwallet.component.spec.ts │ │ │ └── passphrase │ │ │ │ ├── passphrase.component.html │ │ │ │ ├── passphrase.component.scss │ │ │ │ ├── passphrase.component.spec.ts │ │ │ │ ├── passphrase.component.ts │ │ │ │ ├── passphrase.service.spec.ts │ │ │ │ └── passphrase.service.ts │ │ ├── errors │ │ │ ├── error.component.html │ │ │ ├── error.component.scss │ │ │ ├── error.component.spec.ts │ │ │ └── error.component.ts │ │ ├── installer.module.ts │ │ ├── installer.router.html │ │ ├── installer.router.scss │ │ ├── installer.router.ts │ │ └── terms │ │ │ ├── terms-txt.ts │ │ │ ├── terms.component.html │ │ │ ├── terms.component.scss │ │ │ ├── terms.component.spec.ts │ │ │ └── terms.component.ts │ ├── loading │ │ ├── connection-checker.service.spec.ts │ │ ├── connection-checker.service.ts │ │ ├── loading.component.html │ │ ├── loading.component.scss │ │ ├── loading.component.spec.ts │ │ ├── loading.component.ts │ │ ├── updater.service.spec.ts │ │ └── updater.service.ts │ ├── market │ │ ├── _listing.scss │ │ ├── _lists-shared.scss │ │ ├── _order.scss │ │ ├── _product-card.scss │ │ ├── buy │ │ │ ├── buy.component.html │ │ │ ├── buy.component.scss │ │ │ ├── buy.component.spec.ts │ │ │ ├── buy.component.ts │ │ │ └── checkout-process │ │ │ │ ├── checkout-process.component.html │ │ │ │ ├── checkout-process.component.scss │ │ │ │ ├── checkout-process.component.spec.ts │ │ │ │ └── checkout-process.component.ts │ │ ├── listings │ │ │ ├── listing-item │ │ │ │ ├── listing-item.component.html │ │ │ │ ├── listing-item.component.scss │ │ │ │ ├── listing-item.component.spec.ts │ │ │ │ └── listing-item.component.ts │ │ │ ├── listings.component.html │ │ │ ├── listings.component.scss │ │ │ ├── listings.component.spec.ts │ │ │ ├── listings.component.ts │ │ │ └── preview-listing │ │ │ │ ├── preview-listing.component.html │ │ │ │ ├── preview-listing.component.scss │ │ │ │ ├── preview-listing.component.spec.ts │ │ │ │ └── preview-listing.component.ts │ │ ├── market.module.ts │ │ ├── market.routing.ts │ │ ├── sell │ │ │ ├── add-item │ │ │ │ ├── add-item.component.html │ │ │ │ ├── add-item.component.scss │ │ │ │ ├── add-item.component.spec.ts │ │ │ │ └── add-item.component.ts │ │ │ ├── sell.component.html │ │ │ ├── sell.component.scss │ │ │ ├── sell.component.spec.ts │ │ │ ├── sell.component.ts │ │ │ ├── seller-listing │ │ │ │ ├── seller-listing.component.html │ │ │ │ ├── seller-listing.component.scss │ │ │ │ ├── seller-listing.component.spec.ts │ │ │ │ └── seller-listing.component.ts │ │ │ └── status.class.ts │ │ └── shared │ │ │ ├── addtocart │ │ │ ├── add-to-cart.component.html │ │ │ ├── add-to-cart.component.scss │ │ │ ├── add-to-cart.component.spec.ts │ │ │ └── add-to-cart.component.ts │ │ │ ├── favorite │ │ │ ├── favorite.component.html │ │ │ ├── favorite.component.scss │ │ │ ├── favorite.component.spec.ts │ │ │ └── favorite.component.ts │ │ │ ├── orders │ │ │ ├── order-filter.model.ts │ │ │ ├── order-item │ │ │ │ ├── order-item.component.html │ │ │ │ ├── order-item.component.scss │ │ │ │ ├── order-item.component.spec.ts │ │ │ │ └── order-item.component.ts │ │ │ ├── orders.component.html │ │ │ ├── orders.component.scss │ │ │ ├── orders.component.spec.ts │ │ │ └── orders.component.ts │ │ │ ├── report │ │ │ ├── report.component.html │ │ │ ├── report.component.scss │ │ │ ├── report.component.spec.ts │ │ │ └── report.component.ts │ │ │ └── shipping-address │ │ │ ├── shipping-address.component.html │ │ │ ├── shipping-address.component.scss │ │ │ ├── shipping-address.component.spec.ts │ │ │ └── shipping-address.component.ts │ ├── modals │ │ ├── _confirmations-shared.scss │ │ ├── alpha-mainnet-warning │ │ │ ├── alpha-mainnet-warning.component.html │ │ │ ├── alpha-mainnet-warning.component.scss │ │ │ ├── alpha-mainnet-warning.component.spec.ts │ │ │ └── alpha-mainnet-warning.component.ts │ │ ├── coldstake │ │ │ ├── coldstake.component.html │ │ │ ├── coldstake.component.scss │ │ │ ├── coldstake.component.spec.ts │ │ │ └── coldstake.component.ts │ │ ├── daemon │ │ │ ├── daemon.component.html │ │ │ ├── daemon.component.scss │ │ │ ├── daemon.component.spec.ts │ │ │ └── daemon.component.ts │ │ ├── delete-listing │ │ │ ├── delete-listing.component.html │ │ │ ├── delete-listing.component.scss │ │ │ ├── delete-listing.component.spec.ts │ │ │ └── delete-listing.component.ts │ │ ├── encryptwallet │ │ │ ├── encryptwallet.component.html │ │ │ ├── encryptwallet.component.scss │ │ │ ├── encryptwallet.component.spec.ts │ │ │ └── encryptwallet.component.ts │ │ ├── manage-widgets │ │ │ ├── manage-widgets.component.html │ │ │ ├── manage-widgets.component.scss │ │ │ ├── manage-widgets.component.spec.ts │ │ │ └── manage-widgets.component.ts │ │ ├── market-bid-confirmation-modal │ │ │ ├── bid-confirmation-modal.component.html │ │ │ ├── bid-confirmation-modal.component.scss │ │ │ ├── bid-confirmation-modal.component.spec.ts │ │ │ └── bid-confirmation-modal.component.ts │ │ ├── market-listing-expiration │ │ │ ├── listing-expiration.component.html │ │ │ ├── listing-expiration.component.scss │ │ │ ├── listing-expiration.component.spec.ts │ │ │ └── listing-expiration.component.ts │ │ ├── market-place-order │ │ │ ├── place-order.component.html │ │ │ ├── place-order.component.scss │ │ │ ├── place-order.component.spec.ts │ │ │ └── place-order.component.ts │ │ ├── market-shipping │ │ │ ├── shipping.component.html │ │ │ ├── shipping.component.scss │ │ │ ├── shipping.component.spec.ts │ │ │ └── shipping.component.ts │ │ ├── modals-helper.service.spec.ts │ │ ├── modals-helper.service.ts │ │ ├── modals.module.ts │ │ ├── models │ │ │ ├── listingExpiry.modal.config.interface.ts │ │ │ └── unlock.modal.config.interface.ts │ │ ├── processing-modal │ │ │ ├── processing-modal.component.html │ │ │ ├── processing-modal.component.scss │ │ │ ├── processing-modal.component.spec.ts │ │ │ └── processing-modal.component.ts │ │ ├── proposal-confirmation │ │ │ ├── proposal-confirmation.component.html │ │ │ ├── proposal-confirmation.component.scss │ │ │ ├── proposal-confirmation.component.spec.ts │ │ │ └── proposal-confirmation.component.ts │ │ ├── proposal-vote-confirmation │ │ │ ├── proposal-vote-confirmation.component.html │ │ │ ├── proposal-vote-confirmation.component.scss │ │ │ ├── proposal-vote-confirmation.component.spec.ts │ │ │ └── proposal-vote-confirmation.component.ts │ │ ├── report-modal │ │ │ ├── report-modal.component.html │ │ │ ├── report-modal.component.scss │ │ │ ├── report-modal.component.spec.ts │ │ │ └── report-modal.component.ts │ │ ├── send-confirmation-modal │ │ │ ├── send-confirmation-modal.component.html │ │ │ ├── send-confirmation-modal.component.scss │ │ │ ├── send-confirmation-modal.component.spec.ts │ │ │ └── send-confirmation-modal.component.ts │ │ ├── shared │ │ │ ├── alert │ │ │ │ ├── alert.component.html │ │ │ │ ├── alert.component.scss │ │ │ │ ├── alert.component.spec.ts │ │ │ │ └── alert.component.ts │ │ │ ├── daemon-connection │ │ │ │ ├── daemon-connection.component.html │ │ │ │ ├── daemon-connection.component.scss │ │ │ │ ├── daemon-connection.component.spec.ts │ │ │ │ └── daemon-connection.component.ts │ │ │ └── password │ │ │ │ ├── password.component.html │ │ │ │ ├── password.component.scss │ │ │ │ ├── password.component.spec.ts │ │ │ │ ├── password.component.ts │ │ │ │ └── password.interface.ts │ │ ├── syncing │ │ │ ├── syncing.component.html │ │ │ ├── syncing.component.scss │ │ │ ├── syncing.component.spec.ts │ │ │ └── syncing.component.ts │ │ └── unlockwallet │ │ │ ├── unlockwallet.component.html │ │ │ ├── unlockwallet.component.scss │ │ │ ├── unlockwallet.component.spec.ts │ │ │ └── unlockwallet.component.ts │ ├── multiwallet │ │ ├── multiwallet-sidebar.component.html │ │ ├── multiwallet-sidebar.component.scss │ │ ├── multiwallet-sidebar.component.spec.ts │ │ ├── multiwallet-sidebar.component.ts │ │ ├── multiwallet.module.ts │ │ └── multiwallet.service.ts │ └── wallet │ │ ├── help │ │ ├── help.component.html │ │ ├── help.component.scss │ │ ├── help.component.spec.ts │ │ └── help.component.ts │ │ ├── overview │ │ ├── overview.component.html │ │ ├── overview.component.scss │ │ ├── overview.component.spec.ts │ │ ├── overview.component.ts │ │ └── widgets │ │ │ ├── coldstake │ │ │ ├── coldstake.component.html │ │ │ ├── coldstake.component.scss │ │ │ ├── coldstake.component.spec.ts │ │ │ ├── coldstake.component.ts │ │ │ ├── coldstake.service.spec.ts │ │ │ ├── coldstake.service.ts │ │ │ ├── revert-coldstaking │ │ │ │ ├── revert-coldstaking.component.html │ │ │ │ ├── revert-coldstaking.component.scss │ │ │ │ ├── revert-coldstaking.component.spec.ts │ │ │ │ └── revert-coldstaking.component.ts │ │ │ └── zap-coldstaking │ │ │ │ ├── zap-anoncoldstaking.component.html │ │ │ │ ├── zap-anoncoldstaking.component.scss │ │ │ │ ├── zap-coldstaking.component.html │ │ │ │ ├── zap-coldstaking.component.scss │ │ │ │ ├── zap-coldstaking.component.spec.ts │ │ │ │ └── zap-coldstaking.component.ts │ │ │ ├── shared │ │ │ └── shared.scss │ │ │ ├── stake │ │ │ ├── stake.component.html │ │ │ ├── stake.component.scss │ │ │ ├── stake.component.spec.ts │ │ │ ├── stake.component.ts │ │ │ ├── stake.service.spec.ts │ │ │ └── stake.service.ts │ │ │ └── stakinginfo │ │ │ ├── stakinginfo.component.html │ │ │ ├── stakinginfo.component.scss │ │ │ ├── stakinginfo.component.spec.ts │ │ │ └── stakinginfo.component.ts │ │ ├── proposals │ │ ├── add-proposal │ │ │ ├── add-proposal.component.html │ │ │ ├── add-proposal.component.scss │ │ │ ├── add-proposal.component.spec.ts │ │ │ └── add-proposal.component.ts │ │ ├── models │ │ │ ├── proposal-option-result.model.ts │ │ │ ├── proposal-result-graph-option.model.ts │ │ │ ├── proposal-result.model.ts │ │ │ ├── proposal.model.ts │ │ │ ├── vote-details.model.ts │ │ │ └── vote-option.model.ts │ │ ├── proposal-details │ │ │ ├── proposal-details.component.html │ │ │ ├── proposal-details.component.scss │ │ │ ├── proposal-details.component.spec.ts │ │ │ └── proposal-details.component.ts │ │ ├── proposals.component.html │ │ ├── proposals.component.scss │ │ ├── proposals.component.spec.ts │ │ ├── proposals.component.ts │ │ ├── proposals.service.spec.ts │ │ └── proposals.service.ts │ │ ├── settings │ │ ├── settings.component.html │ │ ├── settings.component.scss │ │ ├── settings.component.spec.ts │ │ ├── settings.component.ts │ │ ├── settings.service.spec.ts │ │ └── settings.service.ts │ │ ├── shared │ │ ├── _filter-sorting.scss │ │ ├── delete-confirmation-modal │ │ │ ├── delete-confirmation-modal.component.html │ │ │ ├── delete-confirmation-modal.component.scss │ │ │ ├── delete-confirmation-modal.component.spec.ts │ │ │ └── delete-confirmation-modal.component.ts │ │ ├── header │ │ │ ├── header.component.html │ │ │ ├── header.component.scss │ │ │ ├── header.component.spec.ts │ │ │ └── header.component.ts │ │ └── shared.module.ts │ │ ├── wallet.module.ts │ │ ├── wallet.routing.ts │ │ └── wallet │ │ ├── address-book │ │ ├── address-book.component.html │ │ ├── address-book.component.scss │ │ ├── address-book.component.spec.ts │ │ ├── address-book.component.ts │ │ └── modal │ │ │ └── new-address-modal │ │ │ ├── new-address-modal.component.html │ │ │ ├── new-address-modal.component.scss │ │ │ ├── new-address-modal.component.spec.ts │ │ │ └── new-address-modal.component.ts │ │ ├── addresslookup │ │ ├── addresslookup.component.html │ │ ├── addresslookup.component.scss │ │ ├── addresslookup.component.spec.ts │ │ ├── addresslookup.component.ts │ │ └── contact.model.ts │ │ ├── balances │ │ ├── balance.component.html │ │ ├── balance.component.scss │ │ ├── balance.component.spec.ts │ │ └── balance.component.ts │ │ ├── history │ │ ├── history.component.html │ │ ├── history.component.scss │ │ ├── history.component.spec.ts │ │ └── history.component.ts │ │ ├── models │ │ └── address-look-up-copy.ts │ │ ├── receive │ │ ├── modals │ │ │ └── add-address-label │ │ │ │ ├── add-address-label.component.html │ │ │ │ ├── add-address-label.component.scss │ │ │ │ ├── add-address-label.component.spec.ts │ │ │ │ └── add-address-label.component.ts │ │ ├── receive.component.html │ │ ├── receive.component.scss │ │ ├── receive.component.spec.ts │ │ └── receive.component.ts │ │ ├── send │ │ ├── fix-wallet-modal │ │ │ ├── fix-wallet-modal.component.html │ │ │ ├── fix-wallet-modal.component.scss │ │ │ ├── fix-wallet-modal.component.spec.ts │ │ │ ├── fix-wallet-modal.component.ts │ │ │ └── wallet-fixed-confirmation │ │ │ │ ├── wallet-fixed-confirmation.component.html │ │ │ │ ├── wallet-fixed-confirmation.component.scss │ │ │ │ ├── wallet-fixed-confirmation.component.spec.ts │ │ │ │ └── wallet-fixed-confirmation.component.ts │ │ ├── send.component.html │ │ ├── send.component.scss │ │ ├── send.component.spec.ts │ │ ├── send.component.ts │ │ ├── send.service.spec.ts │ │ ├── send.service.ts │ │ └── transaction-builder.model.ts │ │ ├── shared │ │ ├── address-table │ │ │ ├── address-table.component.html │ │ │ ├── address-table.component.scss │ │ │ ├── address-table.component.spec.ts │ │ │ └── address-table.component.ts │ │ ├── address.model.ts │ │ ├── address.service.spec.ts │ │ ├── address.service.ts │ │ ├── detail-address │ │ │ ├── detail-address.component.html │ │ │ ├── detail-address.component.scss │ │ │ ├── detail-address.component.spec.ts │ │ │ └── detail-address.component.ts │ │ ├── qr-code-modal │ │ │ ├── qr-code-modal.component.html │ │ │ ├── qr-code-modal.component.scss │ │ │ ├── qr-code-modal.component.spec.ts │ │ │ └── qr-code-modal.component.ts │ │ ├── signature-address-modal │ │ │ ├── sign-verify-message.model.ts │ │ │ ├── signature-address-modal.component.html │ │ │ ├── signature-address-modal.component.scss │ │ │ ├── signature-address-modal.component.spec.ts │ │ │ └── signature-address-modal.component.ts │ │ ├── transaction-table │ │ │ ├── transaction-table.component.html │ │ │ ├── transaction-table.component.scss │ │ │ ├── transaction-table.component.spec.ts │ │ │ └── transaction-table.component.ts │ │ ├── transaction.mockservice.ts │ │ ├── transaction.model.ts │ │ ├── transaction.service.spec.ts │ │ └── transaction.service.ts │ │ └── wallet.module.ts ├── assets │ ├── .gitkeep │ ├── _color-palettes.scss │ ├── _config.scss │ ├── _theme-default.scss │ ├── closingWindow │ │ ├── closingWindow.html │ │ └── closingWindowDev.html │ ├── css │ │ └── nvd3 │ │ │ └── nv.d3.css │ ├── fonts │ │ ├── Inter-UI-Black.woff │ │ ├── Inter-UI-Black.woff2 │ │ ├── Inter-UI-Bold.woff │ │ ├── Inter-UI-Bold.woff2 │ │ ├── Inter-UI-Italic.woff │ │ ├── Inter-UI-Italic.woff2 │ │ ├── Inter-UI-Medium.woff │ │ ├── Inter-UI-Medium.woff2 │ │ ├── Inter-UI-Regular.woff │ │ ├── Inter-UI-Regular.woff2 │ │ ├── part.eot │ │ ├── part.svg │ │ ├── part.ttf │ │ ├── part.woff │ │ └── part.woff2 │ ├── ghost-logo-symbol.svg │ ├── ghost-logo-testnet.svg │ ├── ghost-logo-vertical.svg │ ├── ghost-logo.svg │ ├── icons │ │ ├── SVG │ │ │ ├── add-account.svg │ │ │ ├── airplane.svg │ │ │ ├── alert.svg │ │ │ ├── anon.svg │ │ │ ├── archive.svg │ │ │ ├── arrow-down.svg │ │ │ ├── arrow-left.svg │ │ │ ├── arrow-right.svg │ │ │ ├── arrow-up.svg │ │ │ ├── attach.svg │ │ │ ├── bag-buy.svg │ │ │ ├── bag-sell.svg │ │ │ ├── bag.svg │ │ │ ├── bitcointalk.svg │ │ │ ├── blind.svg │ │ │ ├── bug.svg │ │ │ ├── cart.svg │ │ │ ├── chat-discussion.svg │ │ │ ├── chat.svg │ │ │ ├── check-in-a-box.svg │ │ │ ├── check.svg │ │ │ ├── circle-alert.svg │ │ │ ├── circle-check.svg │ │ │ ├── circle-info-2.svg │ │ │ ├── circle-info.svg │ │ │ ├── circle-minus.svg │ │ │ ├── circle-plus.svg │ │ │ ├── circle-question.svg │ │ │ ├── circle-remove.svg │ │ │ ├── circle-user-2.svg │ │ │ ├── circle-user.svg │ │ │ ├── clear-all.svg │ │ │ ├── cog.svg │ │ │ ├── console-window.svg │ │ │ ├── console.svg │ │ │ ├── copy.svg │ │ │ ├── cross.svg │ │ │ ├── cryptocurrency-bitcoin.svg │ │ │ ├── cryptocurrency-particl.svg │ │ │ ├── currency-dollar.svg │ │ │ ├── currency-euro.svg │ │ │ ├── currency-pound.svg │ │ │ ├── currency-yen.svg │ │ │ ├── dapps.svg │ │ │ ├── date.svg │ │ │ ├── discord.svg │ │ │ ├── display.svg │ │ │ ├── document.svg │ │ │ ├── error.svg │ │ │ ├── facebook.svg │ │ │ ├── filter-2.svg │ │ │ ├── filter.svg │ │ │ ├── flag.svg │ │ │ ├── flash.svg │ │ │ ├── github.svg │ │ │ ├── globe.svg │ │ │ ├── google.svg │ │ │ ├── hamburger.svg │ │ │ ├── handshake.svg │ │ │ ├── heart-outline-add.svg │ │ │ ├── heart-outline-remove.svg │ │ │ ├── heart-outline.svg │ │ │ ├── heart.svg │ │ │ ├── image-upload.svg │ │ │ ├── info.svg │ │ │ ├── label.svg │ │ │ ├── lightbulb.svg │ │ │ ├── lightning.svg │ │ │ ├── listings.svg │ │ │ ├── lock-open.svg │ │ │ ├── lock.svg │ │ │ ├── lock │ │ │ │ ├── lock-off.svg │ │ │ │ ├── lock-stake.svg │ │ │ │ └── lock.svg │ │ │ ├── market │ │ │ │ ├── accept-bid.svg │ │ │ │ ├── delivered.svg │ │ │ │ ├── paid.svg │ │ │ │ ├── place-bid.svg │ │ │ │ ├── reject-bid.svg │ │ │ │ └── shipped.svg │ │ │ ├── mastodon.svg │ │ │ ├── medium.svg │ │ │ ├── minus.svg │ │ │ ├── monetization-on.svg │ │ │ ├── network │ │ │ │ ├── peers-0.svg │ │ │ │ ├── peers-1.svg │ │ │ │ ├── peers-2.svg │ │ │ │ ├── peers-3.svg │ │ │ │ ├── peers-4.svg │ │ │ │ ├── peers-5.svg │ │ │ │ └── peers-6.svg │ │ │ ├── next-double.svg │ │ │ ├── next-single.svg │ │ │ ├── nodes.svg │ │ │ ├── notification-bell.svg │ │ │ ├── notification-speaker.svg │ │ │ ├── overview.svg │ │ │ ├── past.svg │ │ │ ├── pen-1.svg │ │ │ ├── pen-2.svg │ │ │ ├── people.svg │ │ │ ├── person-add.svg │ │ │ ├── person-check.svg │ │ │ ├── person-edit.svg │ │ │ ├── person-heart.svg │ │ │ ├── person-remove.svg │ │ │ ├── person.svg │ │ │ ├── plus.svg │ │ │ ├── preferences.svg │ │ │ ├── previous-double.svg │ │ │ ├── previous-single.svg │ │ │ ├── print.svg │ │ │ ├── proposals.svg │ │ │ ├── public.svg │ │ │ ├── qr.svg │ │ │ ├── receive.svg │ │ │ ├── reddit.svg │ │ │ ├── refresh.svg │ │ │ ├── riot.svg │ │ │ ├── rocket.svg │ │ │ ├── search.svg │ │ │ ├── select.svg │ │ │ ├── send.svg │ │ │ ├── ship.svg │ │ │ ├── small-cross.svg │ │ │ ├── small-minus.svg │ │ │ ├── small-plus.svg │ │ │ ├── smiley.svg │ │ │ ├── snowflake.svg │ │ │ ├── stake.svg │ │ │ ├── staking.svg │ │ │ ├── support-help.svg │ │ │ ├── swap.svg │ │ │ ├── telegram.svg │ │ │ ├── thumb-down.svg │ │ │ ├── thumb-up.svg │ │ │ ├── tool.svg │ │ │ ├── transfer.svg │ │ │ ├── triangle-down.svg │ │ │ ├── triangle-left.svg │ │ │ ├── triangle-right.svg │ │ │ ├── triangle-up.svg │ │ │ ├── truck.svg │ │ │ ├── twitter.svg │ │ │ ├── wikipedia.svg │ │ │ ├── youtube.svg │ │ │ ├── zoom-in.svg │ │ │ └── zoom-out.svg │ │ ├── logo-150x150.png │ │ ├── logo-16x16.png │ │ ├── logo-32x32.png │ │ ├── logo.icns │ │ ├── logo.ico │ │ ├── logo.png │ │ └── notification.png │ ├── images │ │ ├── placeholder_1-1.jpg │ │ └── placeholder_4-3.jpg │ ├── index.css │ ├── loading.gif │ ├── loading.svg │ ├── part-palette.png │ ├── scss │ │ ├── _fonts.scss │ │ ├── _helper.scss │ │ ├── _material-components.scss │ │ └── _mixins.scss │ ├── splash-bg-particl.png │ └── splash-bg.png ├── environments │ ├── environment.docker1.ts │ ├── environment.docker2.ts │ ├── environment.prod.ts │ ├── environment.test.ts │ └── environment.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.scss ├── test.ts ├── tsconfig.app.json ├── tsconfig.spec.json └── typings.d.ts ├── tsconfig.json └── tslint.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | 15 | 16 | [*.scss] 17 | charset = utf-8 18 | indent_style = space 19 | indent_size = 2 20 | insert_final_newline = true 21 | trim_trailing_whitespace = true 22 | -------------------------------------------------------------------------------- /.htmlhintrc: -------------------------------------------------------------------------------- 1 | { 2 | "tagname-lowercase": true, 3 | "attr-no-title-case": true, 4 | "attr-value-double-quotes": true, 5 | "tag-pair": true, 6 | "spec-char-escape": true, 7 | "space-tab-mixed-disabled": "space2", 8 | "id-unique": true, 9 | "inline-style-disabled": true, 10 | "src-not-empty": true, 11 | "attr-no-duplication": true, 12 | "title-require": true 13 | } 14 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mhart/alpine-node:8.9.0 2 | 3 | USER root 4 | 5 | RUN apk add --no-cache python git curl 6 | 7 | RUN npm install -g --unsafe -s yarn 8 | RUN npm install -g --unsafe ts-node 9 | RUN npm install -g --unsafe typescript 10 | RUN npm install -g --unsafe @angular/cli 11 | 12 | RUN mkdir -p /app/ 13 | WORKDIR /app/ 14 | COPY ./package.json /app 15 | COPY ./yarn.lock /app 16 | 17 | 18 | EXPOSE 4200 4300 4400 19 | -------------------------------------------------------------------------------- /background-mac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/background-mac.png -------------------------------------------------------------------------------- /bin/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | yarn install 3 | ng serve --host 0.0.0.0 --port $PORT --env=$GUI_ENV 4 | -------------------------------------------------------------------------------- /download-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/download-button.png -------------------------------------------------------------------------------- /e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { PartguiPage } from './app.po'; 2 | 3 | describe('partgui App', () => { 4 | let page: PartguiPage; 5 | 6 | beforeEach(() => { 7 | page = new PartguiPage(); 8 | }); 9 | 10 | it('should display message saying app works', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('app works!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, element, by } from 'protractor'; 2 | 3 | export class PartguiPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types":[ 8 | "jasmine", 9 | "node" 10 | ] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /issue_template.md: -------------------------------------------------------------------------------- 1 | This is the issue template. Everything is optional, but the more you supply, the better. 2 | Please use short decriptive titles for issues. 3 | 4 | # Describe bug/issue 5 | 6 | .. 7 | 8 | # How to reproduce 9 | 10 | Describe the steps needed to recreate the bug/issue: 11 | 12 | 1. .. 13 | 2. .. 14 | 15 | # More information 16 | 17 | - Operating system and version: 18 | - Client version: -------------------------------------------------------------------------------- /modules/close-gui/close-gui.js: -------------------------------------------------------------------------------- 1 | /* electron */ 2 | const electron = require('electron').app; 3 | const rxIpc = require('rx-ipc-electron/lib/main').default; 4 | const log = require('electron-log'); 5 | 6 | const Observable = require('rxjs/Observable').Observable; 7 | 8 | /* 9 | Register and IPC listener and execute notification. 10 | */ 11 | exports.init = function () { 12 | rxIpc.registerListener('close-gui', function () { 13 | electron.quit() 14 | return Observable.create(observer => { 15 | observer.complete(true); 16 | }); 17 | }); 18 | } 19 | 20 | // todo: test 21 | exports.destroy = function() { 22 | rxIpc.removeListeners('close-gui'); 23 | } -------------------------------------------------------------------------------- /modules/market/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // allowedWallets: ["Market"] 3 | // TODO: Uncomment to enable market 4 | allowedWallets: [] 5 | } 6 | -------------------------------------------------------------------------------- /protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './e2e/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | beforeLaunch: function() { 23 | require('ts-node').register({ 24 | project: 'e2e/tsconfig.e2e.json' 25 | }); 26 | }, 27 | onPrepare() { 28 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /resources/configuration/entitlements.mac.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.cs.allow-jit 6 | 7 | com.apple.security.cs.allow-unsigned-executable-memory 8 | 9 | com.apple.security.cs.allow-dyld-environment-variables 10 | 11 | 12 | -------------------------------------------------------------------------------- /resources/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/icon.icns -------------------------------------------------------------------------------- /resources/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/icon.ico -------------------------------------------------------------------------------- /resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/icon.png -------------------------------------------------------------------------------- /resources/linux/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/128x128.png -------------------------------------------------------------------------------- /resources/linux/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/16x16.png -------------------------------------------------------------------------------- /resources/linux/24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/24x24.png -------------------------------------------------------------------------------- /resources/linux/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/256x256.png -------------------------------------------------------------------------------- /resources/linux/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/32x32.png -------------------------------------------------------------------------------- /resources/linux/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/48x48.png -------------------------------------------------------------------------------- /resources/linux/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/512x512.png -------------------------------------------------------------------------------- /resources/linux/64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/resources/linux/64x64.png -------------------------------------------------------------------------------- /src/app/_test/core-test/core-test.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | 5 | @NgModule({ 6 | imports: [ 7 | CommonModule 8 | ], 9 | declarations: [] 10 | }) 11 | export class CoreTestModule { } 12 | -------------------------------------------------------------------------------- /src/app/_test/core-test/market-test/listing-test/mock-data/index.ts: -------------------------------------------------------------------------------- 1 | export { listingGet } from './get'; 2 | export { listingSearch } from './search'; 3 | -------------------------------------------------------------------------------- /src/app/_test/core-test/market-test/mock-data/mock-market.responses.ts: -------------------------------------------------------------------------------- 1 | import { proposalList, proposalResult } from 'app/_test/core-test/market-test/proposal-test/mock-data/proposal'; 2 | import { voteGet } from 'app/_test/core-test/market-test/proposal-test/mock-data/vote'; 3 | import { listingSearch, listingGet } from 'app/_test/core-test/market-test/listing-test/mock-data'; 4 | 5 | 6 | const Responses = { 7 | proposal: { 8 | list: proposalList, 9 | result: proposalResult 10 | }, 11 | vote: { 12 | get: voteGet 13 | }, 14 | item: { 15 | get: listingGet, 16 | search: listingSearch 17 | } 18 | } 19 | export { 20 | Responses 21 | } 22 | -------------------------------------------------------------------------------- /src/app/_test/core-test/market-test/proposal-test/mock-data/proposal/index.ts: -------------------------------------------------------------------------------- 1 | export { proposalList } from './list'; 2 | export { proposalResult } from './result'; 3 | -------------------------------------------------------------------------------- /src/app/_test/core-test/market-test/proposal-test/mock-data/vote/index.ts: -------------------------------------------------------------------------------- 1 | export { voteGet } from './get'; 2 | -------------------------------------------------------------------------------- /src/app/_test/core-test/rpc-test/rpc-mock.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Observable } from 'rxjs'; 3 | 4 | import mockgetpeerinfo from './mock-data/getpeerinfo.mock'; 5 | import mocklistunspent from './mock-data/listunspent.mock'; 6 | 7 | // TODO: create & move into the testing module 8 | // TODO: add more calls, currently only used in SendComponent 9 | 10 | @Injectable() 11 | export class RpcMockService { 12 | 13 | constructor() { } 14 | 15 | call(method: string, params?: Array | null): Observable { 16 | return Observable.create(observer => { 17 | 18 | if (method === 'getpeerinfo') { 19 | observer.next(mockgetpeerinfo); 20 | } else if (method === 'listunspent') { 21 | observer.next(mocklistunspent); 22 | } else { 23 | observer.next(true); 24 | } 25 | 26 | observer.complete(); 27 | }); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/app/_test/core-test/rpc-test/rpc-test.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [ 6 | CommonModule 7 | ], 8 | declarations: [] 9 | }) 10 | export class RpcTestModule { } 11 | -------------------------------------------------------------------------------- /src/app/_test/wallet-test/send-test/send-mock.service.ts: -------------------------------------------------------------------------------- 1 | import { Observable, of } from 'rxjs'; 2 | import { Injectable } from '@angular/core'; 3 | 4 | const SendService_OBJECT: any = {file: {}}; 5 | 6 | @Injectable() 7 | export class SendMockService { 8 | 9 | constructor() { } 10 | 11 | public getTransactionFee(): Observable { 12 | return of(SendService_OBJECT); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | -------------------------------------------------------------------------------- /src/app/app.routing.ts: -------------------------------------------------------------------------------- 1 | import { ModuleWithProviders } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | import { LoadingComponent } from './loading/loading.component'; 4 | import { installer_routing } from './installer/installer.router'; 5 | 6 | /* actual routing */ 7 | const app_routes: Routes = [ 8 | { path: '', redirectTo: 'loading', pathMatch: 'full' }, 9 | { path: 'loading', component: LoadingComponent }, 10 | installer_routing, 11 | { path: 'wallet', loadChildren: './core-ui/main/main.module#MainModule' } 12 | ]; 13 | 14 | export const app_routing: ModuleWithProviders = RouterModule.forRoot( 15 | app_routes, 16 | // { enableTracing: true } 17 | ); 18 | 19 | -------------------------------------------------------------------------------- /src/app/core-ui/directive/directive.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { FocusDirective, FocusTimeoutDirective } from './common.directives'; 5 | 6 | 7 | @NgModule({ 8 | imports: [ 9 | CommonModule 10 | ], 11 | declarations: [ 12 | FocusDirective, 13 | FocusTimeoutDirective 14 | ], 15 | exports: [ 16 | FocusDirective, 17 | FocusTimeoutDirective 18 | ], 19 | }) 20 | export class DirectiveModule { } 21 | -------------------------------------------------------------------------------- /src/app/core-ui/main/announce-notification/announcement-notification.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ message.text }} 5 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/app/core-ui/main/block-sync-bar/block-sync-bar.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 |

7 | Syncing with the network 8 |

9 | 10 | 16 | 17 | 18 |
19 |
20 | -------------------------------------------------------------------------------- /src/app/core-ui/main/block-sync-bar/block-sync-bar.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | 4 | // Sidebar 5 | .sync-progress-wrapper { 6 | @extend %menu-divider; 7 | cursor: pointer; 8 | padding: 12px 24px 14px; 9 | .sync-info { 10 | font-size: 11px; 11 | text-transform: uppercase; 12 | margin: 0 0 8px; 13 | color: $text-muted; 14 | .highlight { 15 | color: lighten($text-muted, 40%); 16 | font-weight: 500; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app/core-ui/main/cart/cart.component.html: -------------------------------------------------------------------------------- 1 |
3 | 4 | {{ cart?.countOfItems }} 5 | 6 | ({{cart?.subTotal.getAmountAsString()}} GHOST) 7 | 8 | 9 | ({{ 10 | cart?.getSubTotalWithShippingTotal(listCache?.selectedCountry?.iso)?.getAmount() 11 | }} GHOST) 12 |
13 | -------------------------------------------------------------------------------- /src/app/core-ui/main/cart/cart.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .cart-info { 4 | display: inline-block; 5 | margin-right: 24px; 6 | cursor: pointer; 7 | outline: none; 8 | &:hover { 9 | .mat-icon { 10 | color: darken($color, 1.5%); 11 | } 12 | } 13 | @include break(l) { 14 | margin-right: 36px; 15 | } 16 | .mat-icon { 17 | @extend %tfx; 18 | margin-right: 8px; 19 | position: relative; 20 | top: 2px; 21 | } 22 | .tag { // number of items in cart 23 | font-weight: 500; 24 | } 25 | .amount { // GHOST value in cart 26 | color: $text-muted; 27 | font-size: 13px; 28 | font-weight: 400; 29 | margin-left: 8px; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/core-ui/main/loading-placeholder/loading-placeholder.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LoadingPlaceholderComponent } from './loading-placeholder.component'; 4 | 5 | describe('LoadingPlaceholderComponent', () => { 6 | let component: LoadingPlaceholderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ LoadingPlaceholderComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LoadingPlaceholderComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/core-ui/main/loading-placeholder/loading-placeholder.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-loading-placeholder', 5 | templateUrl: './loading-placeholder.component.html', 6 | styleUrls: ['./loading-placeholder.component.scss'] 7 | }) 8 | export class LoadingPlaceholderComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/core-ui/main/order-count/order-count.component.html: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/app/core-ui/main/order-count/order-count.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/app/core-ui/main/order-count/order-count.component.scss -------------------------------------------------------------------------------- /src/app/core-ui/main/order-count/order-count.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { Log } from 'ng2-logger'; 3 | import * as _ from 'lodash'; 4 | 5 | import { OrderStatusNotifierService } from 'app/core/market/order-status-notifier/order-status-notifier.service'; 6 | 7 | @Component({ 8 | selector: 'app-order-count', 9 | templateUrl: './order-count.component.html', 10 | styleUrls: ['./order-count.component.scss'] 11 | }) 12 | export class OrderCountComponent { 13 | 14 | private log: any = Log.create('order-count.component id:' + Math.floor((Math.random() * 1000) + 1)); 15 | 16 | @Input() type: string; 17 | constructor( 18 | private notify: OrderStatusNotifierService 19 | ) {} 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/app/core-ui/main/shared/count-badge/count-badge.component.html: -------------------------------------------------------------------------------- 1 | {{ count }} -------------------------------------------------------------------------------- /src/app/core-ui/main/shared/count-badge/count-badge.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .tag { 4 | @extend %tag; 5 | background: lighten($bg-black, 15%); 6 | margin-left: auto; 7 | font-size: 70%; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/core-ui/main/shared/count-badge/count-badge.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { CountBadgeComponent } from './count-badge.component'; 4 | 5 | describe('CountBadgeComponent', () => { 6 | let component: CountBadgeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ CountBadgeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(CountBadgeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/core-ui/main/shared/count-badge/count-badge.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-count-badge', 5 | templateUrl: './count-badge.component.html', 6 | styleUrls: ['./count-badge.component.scss'] 7 | }) 8 | export class CountBadgeComponent { 9 | @Input() count: number = 0; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/core-ui/main/status/modal/help-modal/command.model.ts: -------------------------------------------------------------------------------- 1 | export class Command { 2 | constructor(private typeValue: number, private textContent: string, private timeValue: string, private code?: number) { } 3 | 4 | get text() { 5 | return this.textContent; 6 | } 7 | 8 | get type() { 9 | return this.typeValue; 10 | } 11 | 12 | get time() { 13 | return this.timeValue; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/core-ui/main/status/timeoffset/timeoffset.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/app/core-ui/main/status/timeoffset/timeoffset.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .warning { 4 | color: $color-alert; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/core-ui/main/version/version.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | Client 4 | 5 | 6 | {{ clientVersion }} 7 | 8 |
9 |
10 | Market 11 | 12 | {{ marketVersion }} 13 | 14 |
15 |
16 | Core 17 | 18 | {{ daemonVersion }} 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /src/app/core-ui/main/version/version.model.ts: -------------------------------------------------------------------------------- 1 | 2 | export class VersionModel { 3 | tag_name: string; 4 | prerelease: string; 5 | html_url: string; 6 | body: string; 7 | }; 8 | -------------------------------------------------------------------------------- /src/app/core-ui/material/mat-otpgroup-select-search/mat-otpgroup-select-search.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/app/core-ui/material/mat-otpgroup-select-search/mat-otpgroup-select-search.component.scss -------------------------------------------------------------------------------- /src/app/core-ui/material/mat-select-search/mat-select-search.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/app/core-ui/material/mat-select-search/mat-select-search.component.scss -------------------------------------------------------------------------------- /src/app/core-ui/paginator/page-event-model.ts: -------------------------------------------------------------------------------- 1 | export class PageEvent { 2 | /** The current page index. */ 3 | pageIndex: number; 4 | /** The current page size */ 5 | pageSize: number; 6 | /** The current total number of items being paged */ 7 | length: number; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/core-ui/paginator/paginator.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { PaginatorComponent } from './paginator.component'; 4 | import { MaterialModule } from '../material/material.module'; 5 | 6 | describe('PaginatorComponent', () => { 7 | let component: PaginatorComponent; 8 | let fixture: ComponentFixture; 9 | 10 | beforeEach(async(() => { 11 | TestBed.configureTestingModule({ 12 | declarations: [ PaginatorComponent ], 13 | imports: [ 14 | MaterialModule 15 | ] 16 | }) 17 | .compileComponents(); 18 | })); 19 | 20 | beforeEach(() => { 21 | fixture = TestBed.createComponent(PaginatorComponent); 22 | component = fixture.componentInstance; 23 | fixture.detectChanges(); 24 | }); 25 | 26 | it('should create', () => { 27 | expect(component).toBeTruthy(); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /src/app/core/close-gui/close-gui.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CloseGuiService } from './close-gui.service'; 4 | import { IpcService } from '../ipc/ipc.service'; 5 | 6 | describe('CloseGuiService', () => { 7 | beforeEach(() => { 8 | TestBed.configureTestingModule({ 9 | providers: [CloseGuiService, IpcService] 10 | }); 11 | }); 12 | 13 | 14 | it('should be created', inject([CloseGuiService], (service: CloseGuiService) => { 15 | expect(service).toBeTruthy(); 16 | })); 17 | }); 18 | -------------------------------------------------------------------------------- /src/app/core/close-gui/close-gui.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Observable } from 'rxjs'; 3 | import { Log } from 'ng2-logger' 4 | 5 | import { IpcService } from '../ipc/ipc.service'; 6 | 7 | @Injectable() 8 | export class CloseGuiService { 9 | constructor( 10 | private _ipc: IpcService 11 | ) { 12 | } 13 | 14 | /** Quit electron and fired an event to backend */ 15 | public quitElectron() { 16 | if (window.electron) { 17 | this._ipc.runCommand('close-gui', null, null); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/app/core/http/client-version.model.ts: -------------------------------------------------------------------------------- 1 | 2 | export class ClientVersionRelease { 3 | tag_name: string; 4 | prerelease: string; 5 | html_url: string; 6 | body: string; 7 | }; 8 | -------------------------------------------------------------------------------- /src/app/core/http/client-version.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { ClientVersionService } from './client-version.service'; 4 | import { HttpClientModule } from '@angular/common/http'; 5 | 6 | describe('ClientVersionService', () => { 7 | beforeEach(() => { 8 | TestBed.configureTestingModule({ 9 | imports: [ 10 | HttpClientModule 11 | ], 12 | providers: [ClientVersionService] 13 | }); 14 | }); 15 | 16 | it('should be created', inject([ClientVersionService], (service: ClientVersionService) => { 17 | expect(service).toBeTruthy(); 18 | })); 19 | }); 20 | -------------------------------------------------------------------------------- /src/app/core/ipc/ipc.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { IpcService } from './ipc.service'; 4 | 5 | describe('IpcService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [IpcService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([IpcService], (service: IpcService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/core/ipc/ipc.types.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'rxjs'; 2 | 3 | // All of this is rx-ipc related stuff 4 | export type IpcListener = (event: Event, ...args: any[]) => void; 5 | 6 | export type ObservableFactoryFunction = (...args: any[]) => Observable; 7 | 8 | export interface Receiver { 9 | send(channel: string, ...args: any[]): void; 10 | } 11 | 12 | // TODO: does it really extend Event? 13 | export interface ListenerEvent extends Event { 14 | sender: any; 15 | } 16 | -------------------------------------------------------------------------------- /src/app/core/market/api/bid/bid.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../market.module'; 4 | import { 5 | SharedModule } from 'app/wallet/shared/shared.module'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | import { BidService } from './bid.service'; 8 | 9 | describe('BidService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | CoreModule.forRoot(), 15 | MarketModule.forRoot() 16 | ], 17 | providers: [BidService] 18 | }); 19 | }); 20 | 21 | it('should be created', inject([BidService], (service: BidService) => { 22 | expect(service).toBeTruthy(); 23 | })); 24 | }); 25 | -------------------------------------------------------------------------------- /src/app/core/market/api/bid/product.model.ts: -------------------------------------------------------------------------------- 1 | import { Listing } from '../listing/listing.model'; 2 | 3 | export class Product { 4 | id: number; 5 | listing: Listing; 6 | listingItemId: number; 7 | status: string; 8 | ListingItem: { 9 | seller: string 10 | }; 11 | bidder: string; 12 | OrderItem: { 13 | status: string, 14 | id: number 15 | }; 16 | ShippingAddress: { 17 | country: string 18 | }; 19 | messages: { 20 | action_button: string, 21 | tooltip: string, 22 | action_disabled: boolean, 23 | action_icon: string, 24 | allow_reject_order: boolean, 25 | status_info: string 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/app/core/market/api/cart/cart.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | import { CartService } from './cart.service'; 7 | 8 | describe('CartService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [CartService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([CartService], (service: CartService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/api/category/category.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { SharedModule } from 'app/wallet/shared/shared.module'; 3 | 4 | import { MarketModule } from '../../market.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | import { CategoryService } from './category.service'; 7 | import { MarketService } from '../../market.service'; 8 | 9 | describe('CategoryService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | CoreModule.forRoot(), 15 | MarketModule.forRoot() 16 | ], 17 | providers: [CategoryService, MarketService] 18 | }); 19 | }); 20 | 21 | it('should be created', inject([MarketService], (service: CategoryService) => { 22 | expect(service).toBeTruthy(); 23 | })); 24 | }); 25 | -------------------------------------------------------------------------------- /src/app/core/market/api/countrylist/country.model.ts: -------------------------------------------------------------------------------- 1 | export interface Country { 2 | fips: string; 3 | iso: string; 4 | iso3: string; 5 | name: string; 6 | numeric: number; 7 | reference: { 8 | geonames: number; 9 | openstreetmap: number; 10 | wikipedia: string; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/core/market/api/favorites/favorite.model.ts: -------------------------------------------------------------------------------- 1 | export class Favorite { 2 | id: number; 3 | listingItemId: number; 4 | profileId: number; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/core/market/api/profile/address/address.model.ts: -------------------------------------------------------------------------------- 1 | export class Address { 2 | id: number; 3 | title: string; 4 | firstName: string; 5 | lastName: string; 6 | addressLine1: string; 7 | addressLine2: string; 8 | city: string; 9 | zipCode: string; 10 | state: string; 11 | country: string; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/core/market/api/profile/address/address.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from 'app/core/market/market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | 7 | import { AddressService } from './address.service'; 8 | 9 | describe('AddressService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | CoreModule.forRoot(), 15 | MarketModule.forRoot() 16 | ], 17 | providers: [ 18 | AddressService 19 | ] 20 | }); 21 | }); 22 | 23 | it('should be created', inject([AddressService], (service: AddressService) => { 24 | expect(service).toBeTruthy(); 25 | })); 26 | }); 27 | -------------------------------------------------------------------------------- /src/app/core/market/api/profile/profile.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | 7 | import { ProfileService } from './profile.service'; 8 | 9 | describe('ProfileService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | MarketModule.forRoot(), 15 | CoreModule.forRoot() 16 | ], 17 | providers: [ 18 | ProfileService 19 | ] 20 | }); 21 | }); 22 | 23 | it('should be created', inject([ProfileService], (service: ProfileService) => { 24 | expect(service).toBeTruthy(); 25 | })); 26 | }); 27 | -------------------------------------------------------------------------------- /src/app/core/market/api/report/report.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { MatSnackBar } from '@angular/material'; 3 | 4 | import { MarketModule } from '../../market.module'; 5 | import { CoreUiModule } from '../../../../core-ui/core-ui.module'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | import { ReportService } from './report.service'; 8 | 9 | 10 | describe('ReportService', () => { 11 | beforeEach(() => { 12 | TestBed.configureTestingModule({ 13 | imports: [ 14 | CoreModule.forRoot(), 15 | CoreUiModule, 16 | MarketModule.forRoot() 17 | ], 18 | providers: [ ReportService ] 19 | }); 20 | }); 21 | 22 | it('should be created', inject([ReportService], (service: ReportService) => { 23 | expect(service).toBeTruthy(); 24 | })); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/escrow/escrow.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../../market.module'; 4 | import { EscrowService } from './escrow.service'; 5 | import { SharedModule } from 'app/wallet/shared/shared.module'; 6 | import { RpcWithStateModule } from 'app/core/rpc/rpc.module'; 7 | import { CoreModule } from 'app/core/core.module'; 8 | 9 | describe('EscrowService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | RpcWithStateModule.forRoot(), 15 | MarketModule.forRoot(), 16 | CoreModule.forRoot() 17 | ], 18 | providers: [ 19 | EscrowService 20 | ] 21 | }); 22 | }); 23 | 24 | it('should be created', inject([EscrowService], (service: EscrowService) => { 25 | expect(service).toBeTruthy(); 26 | })); 27 | }); 28 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/escrow/escrow.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Log } from 'ng2-logger'; 3 | 4 | import { MarketService } from 'app/core/market/market.service'; 5 | 6 | export enum EscrowType { 7 | NOP = 'NOP', 8 | MAD = 'MAD' 9 | } 10 | 11 | @Injectable() 12 | export class EscrowService { 13 | 14 | log: any = Log.create('escrow.service'); 15 | 16 | constructor(private market: MarketService) { } 17 | 18 | add(templateId: number, escrowType: EscrowType) { 19 | return this.market.call('template', ['escrow', 'add', templateId, escrowType, 100, 100]); 20 | } 21 | 22 | update(templateId: number, escrowType: EscrowType) { 23 | return this.market.call('template', ['escrow', 'update', templateId, escrowType, 100, 100]); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/image/image.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../../market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | import { ImageService } from './image.service'; 7 | 8 | describe('ImageService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [ImageService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([ImageService], (service: ImageService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/information/information.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../../market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | import { InformationService } from './information.service'; 7 | 8 | describe('InformationService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [InformationService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([InformationService], (service: InformationService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/information/information.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Log } from 'ng2-logger'; 3 | 4 | import { MarketService } from 'app/core/market/market.service'; 5 | 6 | @Injectable() 7 | export class InformationService { 8 | 9 | log: any = Log.create('information.service'); 10 | 11 | constructor(private market: MarketService) { 12 | } 13 | 14 | public update(templateId: number, title: string, shortDesc: string, longDesc: string, categoryId: number) { 15 | return this.market.call('template', 16 | ['information', 'update', templateId, title, shortDesc, longDesc, categoryId] 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/location/gps.model.ts: -------------------------------------------------------------------------------- 1 | export interface GpsMarker { 2 | title: string; 3 | description: string; 4 | lat: number; 5 | long: number; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/location/location.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../../../market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | import { LocationService } from './location.service'; 7 | 8 | describe('LocationService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [LocationService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([LocationService], (service: LocationService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/payment/payment.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { PaymentService } from './payment.service'; 4 | import { MarketModule } from 'app/core/market/market.module'; 5 | import { SharedModule } from 'app/wallet/shared/shared.module'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | 8 | describe('PaymentService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [ 17 | PaymentService 18 | ] 19 | }); 20 | }); 21 | 22 | it('should be created', inject([PaymentService], (service: PaymentService) => { 23 | expect(service).toBeTruthy(); 24 | })); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/payment/payment.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Log } from 'ng2-logger'; 3 | import { MarketService } from 'app/core/market/market.service'; 4 | 5 | @Injectable() 6 | export class PaymentService { 7 | 8 | log: any = Log.create('shipping.service'); 9 | 10 | constructor(private market: MarketService) { 11 | } 12 | 13 | public update( 14 | templateId: number, 15 | basePrice: number, 16 | domesticPrice: number, 17 | internationalPrice: number, 18 | paymentAddress?: string // TODO: class 19 | ) { 20 | return this.market.call('template', 21 | [ 22 | 'payment', 23 | 'update', 24 | templateId, 25 | 'SALE', 26 | 'GHOST', 27 | basePrice, 28 | domesticPrice, 29 | internationalPrice, 30 | paymentAddress 31 | ] 32 | ); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/shipping/shipping.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { ShippingService } from './shipping.service'; 4 | import { MarketModule } from 'app/core/market/market.module'; 5 | import { HttpClientModule } from '@angular/common/http'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | 8 | describe('ShippingService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | HttpClientModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [ShippingService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([ShippingService], (service: ShippingService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/api/template/shipping/shipping.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Log } from 'ng2-logger'; 3 | import { MarketService } from 'app/core/market/market.service'; 4 | 5 | @Injectable() 6 | export class ShippingService { 7 | 8 | log: any = Log.create('shipping.service'); 9 | 10 | constructor(private market: MarketService) { } 11 | 12 | public add(templateId: number, country: string) { 13 | return this.market.call('template', ['shipping', 'add', templateId, country]); 14 | } 15 | 16 | public list(templateId: number) { 17 | return this.market.call('template', ['shipping', 'list', templateId]); 18 | } 19 | 20 | public remove(templateId: number) { 21 | return this.market.call('template', ['shipping', 'remove', templateId]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/core/market/market-cache/checkout-process-cache.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CheckoutProcessCacheService } from './checkout-process-cache.service'; 4 | 5 | describe('CheckoutProcessCacheService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [CheckoutProcessCacheService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([CheckoutProcessCacheService], (service: CheckoutProcessCacheService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/core/market/market-cache/checkout-process-cache.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Address } from 'app/core/market/api/profile/address/address.model'; 3 | 4 | @Injectable() 5 | export class CheckoutProcessCacheService { 6 | public address: Address; 7 | 8 | public selectedIndex: number = 0; 9 | public linear: boolean = true; 10 | public completed: boolean = false; 11 | 12 | constructor() { 13 | this.address = new Address(); 14 | } 15 | 16 | public clear(): void { 17 | this.selectedIndex = 0; 18 | this.linear = true; 19 | this.address = new Address(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/app/core/market/market-cache/market-cache.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, ModuleWithProviders } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { PostListingCacheService } from './post-listing-cache.service'; 5 | import { FavoriteCacheService } from './favorite-cache.service'; 6 | 7 | import { AddToCartCacheService } from './add-to-cart-cache.service'; 8 | import { CheckoutProcessCacheService } from './checkout-process-cache.service'; 9 | 10 | @NgModule({ 11 | imports: [ 12 | CommonModule 13 | ], 14 | declarations: [] 15 | }) 16 | export class MarketCacheModule { 17 | static forRoot(): ModuleWithProviders { 18 | return { 19 | ngModule: MarketCacheModule, 20 | providers: [ 21 | PostListingCacheService, 22 | FavoriteCacheService, 23 | AddToCartCacheService, 24 | CheckoutProcessCacheService 25 | ] 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/core/market/market-cache/post-listing-cache.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from 'app/core/market/market.module'; 4 | import { MarketCacheModule } from 'app/core/market/market-cache/market-cache.module'; 5 | 6 | import { PostListingCacheService } from './post-listing-cache.service'; 7 | 8 | describe('PostListingCacheService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | MarketModule.forRoot(), 13 | MarketCacheModule.forRoot() 14 | ], 15 | providers: [PostListingCacheService] 16 | }); 17 | }); 18 | 19 | it('should be created', inject([PostListingCacheService], (service: PostListingCacheService) => { 20 | expect(service).toBeTruthy(); 21 | })); 22 | }); 23 | -------------------------------------------------------------------------------- /src/app/core/market/market-state/market-state.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketModule } from '../market.module'; 4 | import { SharedModule } from 'app/wallet/shared/shared.module'; 5 | import { MarketStateService } from './market-state.service'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | 8 | describe('MarketStateService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [MarketStateService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([MarketStateService], (service: MarketStateService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/market.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { MarketService } from './market.service'; 4 | import { MarketModule } from './market.module'; 5 | import { SharedModule } from 'app/wallet/shared/shared.module'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | 8 | describe('MarketService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | MarketModule.forRoot() 15 | ], 16 | providers: [ MarketService ] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([MarketService], (service: MarketService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/order-status-notifier/order-status-notifier.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { HttpClient, HttpClientModule } from '@angular/common/http'; 3 | 4 | import { OrderStatusNotifierService } from './order-status-notifier.service'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | 7 | describe('OrderStatusNotifierService', () => { 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({ 10 | imports: [ 11 | HttpClientModule, 12 | CoreModule.forRoot() 13 | ], 14 | providers: [OrderStatusNotifierService] 15 | }); 16 | }); 17 | 18 | it('should be created', inject([OrderStatusNotifierService], (service: OrderStatusNotifierService) => { 19 | expect(service).toBeTruthy(); 20 | })); 21 | }); 22 | -------------------------------------------------------------------------------- /src/app/core/market/user-messages/user-message.model.ts: -------------------------------------------------------------------------------- 1 | 2 | export enum UserMessageType { 3 | INFO = 'info', 4 | WARNING = 'warning', 5 | ALERT = 'alert' 6 | } 7 | 8 | export class UserMessage { 9 | text: string; 10 | dismissable: boolean; 11 | timeout: number; 12 | messageType: UserMessageType; 13 | action?: Function; 14 | actionLabel?: string; 15 | } 16 | -------------------------------------------------------------------------------- /src/app/core/market/user-messages/user-message.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { HttpClientModule } from '@angular/common/http'; 3 | import { CoreModule } from 'app/core/core.module'; 4 | 5 | import { UserMessageService } from './user-message.service'; 6 | 7 | describe('ProposalsNotificationsService', () => { 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({ 10 | imports: [ 11 | HttpClientModule, 12 | CoreModule.forRoot() 13 | ], 14 | providers: [ 15 | UserMessageService 16 | ] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([UserMessageService], (service: UserMessageService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/market/user-messages/user-message.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 3 | import { UserMessage } from './user-message.model'; 4 | 5 | /* 6 | The point of this is to provide something similar to a message-bus of user important announcements. 7 | Its currently a hash (hacky) job, and needs some love and care to work as its expected. 8 | There's been no requirement for it as yet, which means there exists no implementation plan or idea of what to expect. 9 | So this is provided as a base from which to grow the requirements for its adoption and use. 10 | */ 11 | @Injectable() 12 | export class UserMessageService { 13 | message: BehaviorSubject = new BehaviorSubject(null); 14 | 15 | constructor( 16 | ) {} 17 | 18 | addMessage(message: UserMessage) { 19 | this.message.next(message); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/core/notification/notification.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { NotificationService } from './notification.service'; 4 | import { IpcService } from '../ipc/ipc.service'; 5 | 6 | describe('NotificationService', () => { 7 | beforeEach(() => { 8 | TestBed.configureTestingModule({ 9 | providers: [NotificationService, IpcService] 10 | }); 11 | }); 12 | 13 | 14 | it('should be created', inject([NotificationService], (service: NotificationService) => { 15 | expect(service).toBeTruthy(); 16 | service.sendNotification('test', 'arg2'); 17 | })); 18 | }); 19 | -------------------------------------------------------------------------------- /src/app/core/notification/notification.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Observable } from 'rxjs'; 3 | import { Log } from 'ng2-logger' 4 | 5 | import { IpcService } from '../ipc/ipc.service'; 6 | 7 | @Injectable() 8 | export class NotificationService { 9 | constructor( 10 | private _ipc: IpcService 11 | ) { 12 | } 13 | 14 | /** Send Notification to the backend */ 15 | public sendNotification(title: string, desc?: string) { 16 | if (window.electron) { 17 | this.runNotification(title, desc); 18 | } 19 | } 20 | 21 | private runNotification(...args: any[]): Observable { 22 | return this._ipc.runCommand('notification', null, ...args); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/app/core/rpc/blockstatus/blockstatus.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CoreModule } from '../../core.module'; 4 | import { SharedModule } from '../../../wallet/shared/shared.module'; 5 | import { RpcWithStateModule } from '../rpc.module'; 6 | 7 | import { BlockStatusService } from './blockstatus.service'; 8 | 9 | describe('BlockStatusService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | CoreModule.forRoot(), 15 | RpcWithStateModule.forRoot() 16 | ], 17 | providers: [ 18 | ] 19 | }); 20 | }); 21 | 22 | it('should be created', inject([BlockStatusService], (service: BlockStatusService) => { 23 | expect(service).toBeTruthy(); 24 | })); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/core/rpc/new-tx-notifier/new-tx-notifier.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { HttpClientModule } from '@angular/common/http'; 3 | 4 | import { NewTxNotifierService } from './new-tx-notifier.service'; 5 | import { CoreModule } from 'app/core/core.module'; 6 | import { RpcWithStateModule } from '../rpc.module'; 7 | 8 | describe('NewTxNotifierService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | HttpClientModule, 13 | RpcWithStateModule.forRoot(), 14 | CoreModule.forRoot() 15 | ], 16 | providers: [NewTxNotifierService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([NewTxNotifierService], (service: NewTxNotifierService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/rpc/peer/peer.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { SharedModule } from '../../../wallet/shared/shared.module'; 4 | import { CoreModule } from '../../core.module'; 5 | 6 | import { PeerService } from './peer.service'; 7 | 8 | describe('PeerService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot() 14 | ], 15 | providers: [ 16 | PeerService 17 | ] 18 | }); 19 | }); 20 | 21 | it('should be created', inject([PeerService], (service: PeerService) => { 22 | expect(service).toBeTruthy(); 23 | })); 24 | }); 25 | -------------------------------------------------------------------------------- /src/app/core/rpc/rpc-state/rpc-state.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CoreModule } from 'app/core/core.module'; 4 | 5 | import { RpcStateService } from './rpc-state.service'; 6 | import { RpcWithStateModule } from '../rpc.module'; 7 | 8 | describe('RpcStateService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | RpcWithStateModule.forRoot(), 13 | CoreModule.forRoot() 14 | ] 15 | }); 16 | }); 17 | 18 | it('should be created', inject([RpcStateService], (service: RpcStateService) => { 19 | expect(service).toBeTruthy(); 20 | })); 21 | }); 22 | -------------------------------------------------------------------------------- /src/app/core/rpc/rpc.mockservice.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Observable } from 'rxjs'; 3 | import { Result } from './rpc.responses'; 4 | import { of } from 'rxjs' 5 | /* 6 | This is a fake mock service used for the RpcService. 7 | */ 8 | @Injectable() 9 | export class MockRpcService { 10 | 11 | call(method: string, params?: Array | null): Observable { 12 | // Switching for different methods and return response accordngly. 13 | let json = {}; 14 | switch (method) { 15 | case 'filtertransactions': 16 | json = Result[method]; 17 | break; 18 | default: 19 | break; 20 | } 21 | return of(json); 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/app/core/rpc/rpc.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { HttpClientModule } from '@angular/common/http'; 3 | 4 | import { CoreModule } from '../core.module'; 5 | import { RpcService } from 'app/core/rpc/rpc.service'; 6 | 7 | describe('RpcService', () => { 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({ 10 | imports: [ 11 | CoreModule.forRoot(), 12 | HttpClientModule 13 | ], 14 | providers: [ 15 | // IpcService 16 | ] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([RpcService], (service: RpcService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/core/snackbar/snackbar.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { MatSnackBarModule } from '@angular/material'; // needed? 3 | 4 | import {SnackbarService} from './snackbar.service'; 5 | 6 | 7 | describe('SnackbarServiceService', () => { 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({ 10 | imports: [ 11 | MatSnackBarModule 12 | ], 13 | providers: [SnackbarService] 14 | }); 15 | }); 16 | 17 | it('should be created', inject([SnackbarService], (service: SnackbarService) => { 18 | expect(service).toBeTruthy(); 19 | })); 20 | }); 21 | -------------------------------------------------------------------------------- /src/app/core/snackbar/snackbar.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { MatSnackBar, MatSnackBarConfig } from '@angular/material'; 3 | 4 | @Injectable() 5 | export class SnackbarService { 6 | 7 | constructor(private snackBar: MatSnackBar) { } 8 | 9 | open(message: string, type?: string, action?: string): void { 10 | const config = new MatSnackBarConfig(); 11 | 12 | config.duration = ( 13 | ['err', 'warn'].includes(type) ? 10000 : 14 | 'info' === type ? 5000 : 2000); 15 | 16 | this.snackBar.open(message, action ? action : 'Dismiss', config); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/app/core/state/state.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { StateService } from './state.service'; 4 | 5 | describe('StateService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [StateService] 9 | }); 10 | }); 11 | 12 | it('should be created', inject([StateService], (service: StateService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/core/zmq/zmq.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { IpcService } from '../ipc/ipc.service'; 4 | import { ZmqService } from './zmq.service'; 5 | 6 | describe('ZmqService', () => { 7 | beforeEach(() => { 8 | TestBed.configureTestingModule({ 9 | providers: [ZmqService, IpcService] 10 | }); 11 | }); 12 | 13 | it('should be created', inject([ZmqService], (service: ZmqService) => { 14 | expect(service).toBeTruthy(); 15 | })); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/installer/create-wallet/passphrase/passphrase.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { SharedModule } from '../../../wallet/shared/shared.module'; 4 | import { CoreModule } from '../../../core/core.module'; 5 | import { ModalsModule } from 'app/modals/modals.module'; 6 | import { PassphraseService } from 'app/installer/create-wallet/passphrase/passphrase.service'; 7 | 8 | describe('PassphraseService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ 12 | SharedModule, 13 | CoreModule.forRoot(), 14 | ModalsModule.forRoot() 15 | ], 16 | providers: [PassphraseService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([PassphraseService], (service: PassphraseService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/installer/errors/error.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CloseGuiService } from 'app/core/close-gui/close-gui.service'; 3 | 4 | @Component({ 5 | selector: 'app-terms', 6 | templateUrl: './error.component.html', 7 | styleUrls: ['./error.component.scss'] 8 | }) 9 | export class ErrorComponent { 10 | constructor( 11 | private close: CloseGuiService 12 | ) { } 13 | 14 | quitApp(): void { 15 | this.close.quitElectron(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/installer/installer.router.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/installer/installer.router.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/config'; // import shared colors etc. 2 | -------------------------------------------------------------------------------- /src/app/installer/installer.router.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | // import { EncryptWalletComponent } from './encrypt-wallet/encrypt-wallet.component'; 4 | import { CreateWalletComponent } from './create-wallet/create-wallet.component'; 5 | import { TermsComponent } from './terms/terms.component'; 6 | import { ErrorComponent } from './errors/error.component'; 7 | 8 | @Component({ 9 | templateUrl: './installer.router.html', 10 | styleUrls: ['./installer.router.scss'] 11 | }) 12 | export class InstallerRouterComponent { } 13 | 14 | export const installer_routing = { 15 | path: 'installer', 16 | component: InstallerRouterComponent, 17 | children: [ 18 | { path: '', redirectTo: 'create', pathMatch: 'full' }, 19 | { path: 'create', component: CreateWalletComponent }, 20 | { path: 'terms', component: TermsComponent }, 21 | { path: 'error', component: ErrorComponent }, 22 | ] 23 | }; 24 | -------------------------------------------------------------------------------- /src/app/installer/terms/terms.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CloseGuiService } from 'app/core/close-gui/close-gui.service'; 3 | import { termsObj } from 'app/installer/terms/terms-txt'; 4 | import { Router } from '@angular/router'; 5 | 6 | @Component({ 7 | selector: 'app-terms', 8 | templateUrl: './terms.component.html', 9 | styleUrls: ['./terms.component.scss'] 10 | }) 11 | export class TermsComponent { 12 | isAccepted: boolean = false; 13 | 14 | public text: string = termsObj.text; 15 | constructor( 16 | private router: Router, 17 | private close: CloseGuiService 18 | ) { } 19 | 20 | acceptTerms(): void { 21 | localStorage.setItem('terms', JSON.stringify(termsObj)); 22 | this.router.navigate(['loading']); 23 | } 24 | 25 | decline(): void { 26 | this.close.quitElectron(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/app/loading/connection-checker.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { RpcModule } from '../core/rpc/rpc.module'; 4 | 5 | import { ConnectionCheckerService } from './connection-checker.service'; 6 | import { CoreModule } from 'app/core/core.module'; 7 | 8 | 9 | describe('ConnectionCheckerService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | RpcModule.forTest(), 14 | CoreModule.forRoot() 15 | ], 16 | providers: [ConnectionCheckerService] 17 | }); 18 | }); 19 | 20 | it('should be created', inject([ConnectionCheckerService], (service: ConnectionCheckerService) => { 21 | expect(service).toBeTruthy(); 22 | })); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/loading/loading.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 |
10 | {{loadingMessage}} 11 |
12 | 13 |
14 |

Syncing with the network, {{blockReceived}}/{{blockHeader}} block(s) received.

15 |
16 | 17 |
18 |

“{{johnQuote}}“

19 |
— John McAfee
20 |
21 | 22 |
23 | -------------------------------------------------------------------------------- /src/app/loading/updater.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | import { MatDialogModule } from '@angular/material'; 3 | 4 | import { IpcService } from 'app/core/ipc/ipc.service'; 5 | import { UpdaterService } from './updater.service'; 6 | 7 | 8 | describe('UpdaterService', () => { 9 | beforeEach(() => { 10 | TestBed.configureTestingModule({ 11 | imports: [ MatDialogModule ], 12 | providers: [UpdaterService, IpcService] 13 | }); 14 | }); 15 | 16 | it('should be created', inject([UpdaterService], (service: UpdaterService) => { 17 | expect(service).toBeTruthy(); 18 | })); 19 | }); 20 | -------------------------------------------------------------------------------- /src/app/market/_listing.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/market/_lists-shared'; // shared stuff for listings & orders 3 | 4 | // ------ LISTINGS ------ // 5 | 6 | .listing { 7 | .header { 8 | min-height: 110px !important; 9 | max-height: 110px !important; 10 | padding: 0 24px 0 0; 11 | } 12 | } 13 | 14 | .list-item { 15 | .header-wrapper { 16 | .photo { // crop listing's image to square 17 | min-height: 110px; 18 | max-height: 110px; 19 | height: 110px; 20 | } 21 | .meta .name { 22 | font-size: 16px; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/market/buy/buy.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/market/_order'; // order styles 3 | @import './src/app/wallet/shared/_filter-sorting'; // filtering & sorting 4 | @import './src/app/market/_product-card'; // listing item card preview 5 | 6 | // ------ UI ELEMENTS ------ // 7 | 8 | /* 9 | .mat-card { 10 | & > .title { // TODO: replace with %placeholders when Settings is merged 11 | @extend %box-title; 12 | margin: -4px 0 16px !important; 13 | } 14 | } 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /src/app/market/market.routing.ts: -------------------------------------------------------------------------------- 1 | import { ModuleWithProviders } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | 4 | import { ListingsComponent } from './listings/listings.component'; 5 | import { BuyComponent } from './buy/buy.component'; 6 | import { SellComponent } from './sell/sell.component'; 7 | import { AddItemComponent } from './sell/add-item/add-item.component'; 8 | 9 | const routes: Routes = [ 10 | { path: 'listings', component: ListingsComponent, data: { title: 'Listings' } }, 11 | { path: 'buy', component: BuyComponent, data: { title: 'Buy' } }, 12 | { path: 'sell', component: SellComponent, data: { title: 'Sell' } }, 13 | { path: 'template', component: AddItemComponent, data: { title: 'Sell › Add/Edit item' } } 14 | ]; 15 | 16 | export const market_routing: ModuleWithProviders = RouterModule.forChild(routes); 17 | -------------------------------------------------------------------------------- /src/app/market/sell/sell.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/market/_listing'; // listing styles 3 | @import './src/app/wallet/shared/_filter-sorting'; // filtering & sorting 4 | 5 | // ------ GENERAL ------ // 6 | 7 | .mat-icon { 8 | font-size: 14px; 9 | } 10 | 11 | // ------ LAYOUT ------ // 12 | 13 | .loading-container { 14 | $padding: 35px; 15 | left: ($sidebar-width + $filter-width + (2 * $padding)); 16 | right: $padding; 17 | @include break(l) { 18 | $padding-l: 50px; 19 | left: ($sidebar-width + $filter-width + (2 * $padding-l)); 20 | right: $padding-l; 21 | } 22 | } 23 | 24 | 25 | // ------ LOADING BAR (bottom) ------ // 26 | 27 | .loading-bar { 28 | position: fixed; 29 | bottom: 0; 30 | height: 8px; 31 | } 32 | -------------------------------------------------------------------------------- /src/app/market/sell/seller-listing/seller-listing.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/market/_listing'; // listing styles 3 | -------------------------------------------------------------------------------- /src/app/market/shared/addtocart/add-to-cart.component.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | -------------------------------------------------------------------------------- /src/app/market/shared/addtocart/add-to-cart.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | -------------------------------------------------------------------------------- /src/app/market/shared/favorite/favorite.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // Fav button in Listing's card in Listings 4 | .fav.icon { 5 | background: #fff; 6 | border-radius: 50%; 7 | display: inline-block; 8 | padding: 7px; 9 | margin: 0 0 0 2px; 10 | font-size: 14px; 11 | color: $text; 12 | cursor: pointer; 13 | &:hover, 14 | &.active { 15 | color: $color-alert; 16 | } 17 | } 18 | 19 | // Fav button on Listing's detail modal 20 | button { 21 | .icon { 22 | margin: 0 4px 0 0; 23 | padding: 0; 24 | color: inherit; 25 | &:hover { 26 | color: inherit; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/market/shared/orders/order-item/order-item.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/market/_lists-shared'; 3 | @import './src/app/market/_order'; // order styles 4 | 5 | h3 { 6 | text-align: center; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/market/shared/orders/orders.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/wallet/shared/_filter-sorting'; // filtering & sorting 3 | 4 | -------------------------------------------------------------------------------- /src/app/market/shared/report/report.component.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | 16 | -------------------------------------------------------------------------------- /src/app/market/shared/report/report.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // Fav button in Listing's card in Listings 4 | .report.icon { 5 | @extend %tfx; 6 | background: $color-white; 7 | border-radius: 50%; 8 | display: inline-block; 9 | padding: 7px; 10 | margin: 0 0 0 2px; 11 | font-size: 14px; 12 | color: $text; 13 | cursor: pointer; 14 | &:hover { 15 | color: $color-alert; 16 | } 17 | &.active { 18 | background: $color-alert; 19 | color: $color-white; 20 | &:hover { 21 | background: darken($color-alert, 10%); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/market/shared/shipping-address/shipping-address.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Name{{ shippingAddress?.firstName || '' }} {{ shippingAddress?.lastName || '' }}
Address 9 | {{ shippingAddress?.addressLine1 || '' }} 10 |
11 | {{ shippingAddress?.addressLine2 }} 12 |
13 |
City{{shippingAddress?.city || '' }}
State{{ shippingAddress?.state }}
ZIP{{ shippingAddress?.zipCode || '' }}
Coutry{{ country }}
32 | -------------------------------------------------------------------------------- /src/app/market/shared/shipping-address/shipping-address.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | table.shipping-address { 4 | th { 5 | text-align: right; 6 | vertical-align: top; 7 | padding-right: 7px; 8 | } 9 | td { 10 | word-break: break-word; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/modals/alpha-mainnet-warning/alpha-mainnet-warning.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | -------------------------------------------------------------------------------- /src/app/modals/alpha-mainnet-warning/alpha-mainnet-warning.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { MatDialogRef } from '@angular/material'; 3 | 4 | @Component({ 5 | selector: 'app-alpha-mainnet-warning', 6 | templateUrl: './alpha-mainnet-warning.component.html', 7 | styleUrls: ['./alpha-mainnet-warning.component.scss'] 8 | }) 9 | export class AlphaMainnetWarningComponent implements OnInit { 10 | 11 | constructor() { } 12 | 13 | ngOnInit() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/modals/coldstake/coldstake.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .hot-stake-address { 4 | width: 450px; 5 | margin: 0 0 15px; 6 | } 7 | 8 | .cold-stake-address { 9 | width: 450px; 10 | margin: 0 0 15px; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/modals/daemon/daemon.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Warning: You are using Ghost through a browser. 4 |
5 |
6 |
7 | Couldn't connect to Ghost Daemon: connection refused 8 |
9 |
10 | Error {{ message.error.status }}: {{ message.error.message }} 11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /src/app/modals/daemon/daemon.component.scss: -------------------------------------------------------------------------------- 1 | .center { 2 | text-align: center; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/modals/daemon/daemon.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-daemon', 5 | templateUrl: './daemon.component.html', 6 | styleUrls: ['./daemon.component.scss'] 7 | }) 8 | export class DaemonComponent { 9 | 10 | public message: any; 11 | 12 | constructor() { } 13 | 14 | setData(data: any) { 15 | this.message = data; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/modals/delete-listing/delete-listing.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .modal-content { 4 | max-width: 450px; 5 | } 6 | 7 | table.info { 8 | width: 100%; 9 | margin: 16px 0; 10 | th { 11 | text-align: right; 12 | font-weight: normal; 13 | color: $text-muted; 14 | width: 130px; 15 | padding-right: 8px; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/app/modals/encryptwallet/encryptwallet.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | -------------------------------------------------------------------------------- /src/app/modals/manage-widgets/manage-widgets.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // ------ ... ------ // 4 | 5 | .area { 6 | border: 2px dashed $bg-shadow; 7 | padding: 24px 32px; 8 | margin: 0 0 24px; 9 | p.widget-help { 10 | margin-bottom: 0; 11 | } 12 | &.balances { 13 | margin-top: 32px; 14 | } 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/app/modals/manage-widgets/manage-widgets.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { MatDialogRef } from '@angular/material'; 3 | 4 | @Component({ 5 | selector: 'app-manage-widgets', 6 | templateUrl: './manage-widgets.component.html', 7 | styleUrls: ['./manage-widgets.component.scss'] 8 | }) 9 | export class ManageWidgetsComponent implements OnInit { 10 | 11 | constructor() { } 12 | 13 | ngOnInit() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/modals/market-bid-confirmation-modal/bid-confirmation-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/modals/_confirmations-shared'; // shared stuff for confirmation modals 3 | 4 | 5 | // ------ LAYOUT ------ // 6 | 7 | // ALPHA WARNING 8 | p.alpha { 9 | margin: -20px -15px 24px !important; 10 | text-align: left; 11 | line-height: 1.4; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/modals/market-listing-expiration/listing-expiration.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // ------ UI ------ // 4 | 5 | .mat-card { 6 | & > .title { 7 | @extend %box-title; 8 | margin-bottom: 24px; 9 | } 10 | } 11 | 12 | 13 | // ------ LAYOUT ------ // 14 | 15 | .dialog-content { 16 | max-width: 400px; 17 | } 18 | 19 | .est-fee { 20 | margin-left: 20px; 21 | line-height: 1.45; 22 | } 23 | 24 | .small { 25 | @extend %lighter; 26 | font-size: 80%; 27 | font-weight: 400; 28 | } 29 | -------------------------------------------------------------------------------- /src/app/modals/market-place-order/place-order.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // ------ LAYOUT ------ // 4 | 5 | .image { 6 | padding: 13px 0 0 13px; 7 | } 8 | 9 | // ALPHA WARNING 10 | p.alpha { 11 | max-width: 460px; 12 | margin: 0 -24px 12px !important; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/modals/market-place-order/place-order.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, EventEmitter, OnInit, Output} from '@angular/core'; 2 | import { MatDialogRef } from '@angular/material'; 3 | import { isPrerelease, isMainnetRelease } from 'app/core/util/utils'; 4 | @Component({ 5 | selector: 'app-place-order', 6 | templateUrl: './place-order.component.html', 7 | styleUrls: ['./place-order.component.scss'] 8 | }) 9 | export class PlaceOrderComponent implements OnInit { 10 | public type: string = ''; 11 | isPrerelease: boolean = false; 12 | trackingNumber: string = ''; 13 | @Output() isConfirmed: EventEmitter = new EventEmitter(); 14 | constructor(public _dialogRef: MatDialogRef) { } 15 | 16 | ngOnInit() { 17 | this.isPrerelease = isMainnetRelease() && isPrerelease(); 18 | } 19 | 20 | placeOrder(): void { 21 | this._dialogRef.close(); 22 | this.isConfirmed.emit(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/modals/market-shipping/shipping.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // ------ LAYOUT ------ // 4 | 5 | .image { 6 | padding: 13px 0 0 13px; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/modals/market-shipping/shipping.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, EventEmitter, OnInit, Output } from '@angular/core'; 2 | import { MatDialogRef } from '@angular/material'; 3 | @Component({ 4 | selector: 'app-shipping-order', 5 | templateUrl: './shipping.component.html', 6 | styleUrls: ['./shipping.component.scss'] 7 | }) 8 | export class ShippingComponent implements OnInit { 9 | public type: string = ''; 10 | trackingNumber: string = ''; 11 | isPrerelease: boolean = false; 12 | @Output() isConfirmed: EventEmitter = new EventEmitter(); 13 | constructor(public _dialogRef: MatDialogRef) { } 14 | 15 | ngOnInit() { 16 | } 17 | 18 | placeOrder(): void { 19 | this._dialogRef.close(); 20 | this.isConfirmed.emit(this.trackingNumber); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/modals/models/listingExpiry.modal.config.interface.ts: -------------------------------------------------------------------------------- 1 | import { Template } from 'app/core/market/api/template/template.model'; 2 | 3 | export interface ListingExpiryConfig { 4 | template: Template; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/modals/models/unlock.modal.config.interface.ts: -------------------------------------------------------------------------------- 1 | export interface UnlockModalConfig { 2 | timeout?: number; 3 | showStakeOnly?: boolean; 4 | stakeOnly?: boolean; 5 | autoClose?: boolean 6 | } 7 | -------------------------------------------------------------------------------- /src/app/modals/processing-modal/processing-modal.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |

7 | {{data?.message}} 8 |

9 |

10 | This might take a while 11 |

12 |
13 |
-------------------------------------------------------------------------------- /src/app/modals/processing-modal/processing-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/config'; // import shared colors etc. 2 | 3 | .loading-container { 4 | position: static; 5 | padding: 64px; 6 | margin: -24px; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/modals/processing-modal/processing-modal.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Inject } from '@angular/core'; 2 | import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; 3 | 4 | interface DialogData { 5 | message: string; 6 | } 7 | 8 | @Component({ 9 | selector: 'app-processing-modal', 10 | templateUrl: './processing-modal.component.html', 11 | styleUrls: ['./processing-modal.component.scss'] 12 | }) 13 | export class ProcessingModalComponent { 14 | 15 | constructor(public dialogRef: MatDialogRef, 16 | @Inject(MAT_DIALOG_DATA) public data: DialogData) { } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/modals/proposal-confirmation/proposal-confirmation.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/modals/_confirmations-shared'; // shared stuff for confirmation modals 3 | 4 | 5 | // ------ LAYOUT ------ // 6 | 7 | .tx-info { // info about public/blind/anon TX 8 | .icon { 9 | font-size: 24px; 10 | margin-bottom: 8px; 11 | } 12 | } 13 | 14 | .name { // what you're proposing 15 | font-size: 17px; 16 | } 17 | 18 | .icon.arrow { 19 | margin: 6px 0 24px; 20 | } 21 | -------------------------------------------------------------------------------- /src/app/modals/proposal-vote-confirmation/proposal-vote-confirmation.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/modals/_confirmations-shared'; // shared stuff for confirmation modals 3 | 4 | 5 | // ------ LAYOUT ------ // 6 | 7 | .tx-info { // info about public/blind/anon TX 8 | .icon { 9 | font-size: 24px; 10 | margin-bottom: 8px; 11 | } 12 | } 13 | 14 | .vote-choice { 15 | font-size: 17px; 16 | } 17 | 18 | .proposal-name { 19 | font-weight: bold; 20 | font-size: 16px; 21 | margin-bottom: 8px; 22 | padding: 0 10px; 23 | } 24 | -------------------------------------------------------------------------------- /src/app/modals/report-modal/report-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/modals/_confirmations-shared'; // shared stuff for confirmation modals 3 | 4 | 5 | // ------ LAYOUT ------ // 6 | 7 | .tx-info { 8 | .icon.report { 9 | font-size: 26px; 10 | color: $color-alert; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/modals/report-modal/report-modal.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, EventEmitter, OnInit, Output} from '@angular/core'; 2 | import { MatDialogRef } from '@angular/material'; 3 | @Component({ 4 | selector: 'app-report-modal', 5 | templateUrl: './report-modal.component.html', 6 | styleUrls: ['./report-modal.component.scss'] 7 | }) 8 | export class ReportModalComponent implements OnInit { 9 | public title: string = ''; 10 | public option: boolean; 11 | @Output() isConfirmed: EventEmitter = new EventEmitter(); 12 | constructor(public _dialogRef: MatDialogRef) { } 13 | 14 | ngOnInit() { 15 | } 16 | 17 | flag(): void { 18 | this._dialogRef.close(); 19 | this.isConfirmed.emit(); 20 | } 21 | 22 | dialogClose(): void { 23 | this._dialogRef.close(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/app/modals/send-confirmation-modal/send-confirmation-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/modals/_confirmations-shared'; // shared stuff for confirmation modals 3 | 4 | 5 | // ------ LAYOUT ------ // 6 | -------------------------------------------------------------------------------- /src/app/modals/shared/alert/alert.component.html: -------------------------------------------------------------------------------- 1 |

{{title}}

2 |
3 | {{text}} 4 |
5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/app/modals/shared/alert/alert.component.scss: -------------------------------------------------------------------------------- 1 | .padding-right { 2 | padding-right: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/modals/shared/alert/alert.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | import { Log } from 'ng2-logger'; 4 | 5 | @Component({ 6 | selector: 'app-alert', 7 | templateUrl: './alert.component.html', 8 | styleUrls: ['./alert.component.scss'] 9 | }) 10 | export class AlertComponent { 11 | 12 | public title: string; 13 | public text: string; 14 | log: any = Log.create('alertbox.component'); 15 | 16 | constructor() { } 17 | 18 | open(text: string, title?: string): void { 19 | if (text) { 20 | this.text = text; 21 | } 22 | 23 | if (title) { 24 | this.title = title; 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/app/modals/shared/daemon-connection/daemon-connection.component.html: -------------------------------------------------------------------------------- 1 |

Daemon connection {{ text }}

2 | 3 |

Daemon connection sub heading

4 |

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's 5 | standard dummy text ever since the 1500s.

6 | 7 |

When an unknown printer took a galley of type and scrambled it to make a 8 | type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, 9 | remaining essentially unchanged

10 |
11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/app/modals/shared/daemon-connection/daemon-connection.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/app/modals/shared/daemon-connection/daemon-connection.component.scss -------------------------------------------------------------------------------- /src/app/modals/shared/daemon-connection/daemon-connection.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-daemon-connection', 5 | templateUrl: './daemon-connection.component.html', 6 | styleUrls: ['./daemon-connection.component.scss'] 7 | }) 8 | export class DaemonConnectionComponent implements OnInit { 9 | 10 | public text: string; 11 | constructor() { } 12 | 13 | ngOnInit() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/modals/shared/password/password.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | input { 4 | &[type=checkbox] { 5 | & + label { 6 | margin-left: 12px; 7 | font-size: 12px; 8 | font-weight: 600; 9 | padding: 5px; 10 | } 11 | } 12 | } 13 | 14 | .show-password { // checkbox next to input 15 | margin-left: 20px; 16 | } 17 | 18 | .stake-only { // 'unlock for staking only' button 19 | margin-left: 20px; 20 | } 21 | 22 | .actions { // area with button(s) 23 | margin: 10px 0 20px; 24 | button { 25 | margin: 0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/app/modals/shared/password/password.interface.ts: -------------------------------------------------------------------------------- 1 | export interface IPassword { 2 | password: string; 3 | stakeOnly: boolean; 4 | } 5 | -------------------------------------------------------------------------------- /src/app/modals/syncing/syncing.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .subtitle { 4 | font-weight: 700; 5 | font-size: 15px; 6 | text-transform: uppercase; 7 | margin: 26px 0 10px; 8 | } 9 | 10 | table.sync-progress { 11 | margin: 10px 0 30px; 12 | th, 13 | td { 14 | padding: 3px 20px 3px 0; 15 | font-size: 13px; 16 | } 17 | th { 18 | color: $text-muted; 19 | text-align: left; 20 | font-weight: 400; 21 | } 22 | td { 23 | font-weight: 500; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/modals/unlockwallet/unlockwallet.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .close-button { 4 | border: 0 !important; 5 | box-shadow: none !important; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/wallet/help/help.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-help', 5 | templateUrl: './help.component.html', 6 | styleUrls: ['./help.component.scss'] 7 | }) 8 | export class HelpComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/wallet/overview/widgets/coldstake/coldstake.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CoreModule } from '../../../../core/core.module'; 4 | 5 | import { ColdstakeService } from './coldstake.service'; 6 | import { SharedModule } from 'app/wallet/shared/shared.module'; 7 | import { RpcWithStateModule } from 'app/core/rpc/rpc.module'; 8 | 9 | describe('ColdstakeService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | CoreModule.forRoot(), 14 | SharedModule, 15 | RpcWithStateModule.forRoot() 16 | ], 17 | providers: [ColdstakeService] 18 | }); 19 | }); 20 | 21 | it('should be created', inject([ColdstakeService], (service: ColdstakeService) => { 22 | expect(service).toBeTruthy(); 23 | })); 24 | }); 25 | -------------------------------------------------------------------------------- /src/app/wallet/overview/widgets/coldstake/revert-coldstaking/revert-coldstaking.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .mat-dialog-content { 4 | max-width: 40rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/wallet/overview/widgets/coldstake/zap-coldstaking/zap-anoncoldstaking.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .mat-dialog-content { 4 | max-width: 40rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/wallet/overview/widgets/coldstake/zap-coldstaking/zap-coldstaking.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .mat-dialog-content { 4 | max-width: 40rem; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/wallet/overview/widgets/stake/stake.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CoreModule } from '../../../../core/core.module'; 4 | 5 | import { StakeService } from './stake.service'; 6 | import { SharedModule } from 'app/wallet/shared/shared.module'; 7 | import { RpcWithStateModule } from 'app/core/rpc/rpc.module'; 8 | 9 | describe('StakeService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | CoreModule.forRoot(), 14 | SharedModule, 15 | RpcWithStateModule.forRoot() 16 | ], 17 | providers: [StakeService] 18 | }); 19 | }); 20 | 21 | it('should be created', inject([StakeService], (service: StakeService) => { 22 | expect(service).toBeTruthy(); 23 | })); 24 | }); 25 | -------------------------------------------------------------------------------- /src/app/wallet/overview/widgets/stakinginfo/stakinginfo.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import '../shared/shared.scss'; 3 | 4 | .mat-card { 5 | padding: 0; 6 | } 7 | 8 | .subtitle { 9 | font-size: 11px; 10 | margin-top: 14px; 11 | margin-bottom: 14px; 12 | text-transform: uppercase; 13 | color: #747c82; 14 | opacity: 0.55; 15 | } 16 | 17 | .staking-overview { // listing of staking stats 18 | width: 100%; 19 | .row { 20 | display: flex; 21 | .key { 22 | @extend %lighter; 23 | flex: auto; 24 | padding: 10px 5px 10px 20px; 25 | } 26 | .value { 27 | text-align: right; 28 | font-weight: 500; 29 | flex: auto; 30 | padding: 10px 20px 10px 5px; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/wallet/proposals/models/proposal-option-result.model.ts: -------------------------------------------------------------------------------- 1 | import { VoteOption } from 'app/wallet/proposals/models/vote-option.model'; 2 | 3 | export class ProposalOptionResult { 4 | ProposalOption: VoteOption; 5 | createdAt: Date; 6 | proposalOptionId: number; 7 | proposalResultId: number; 8 | updatedAt: Date; 9 | voters: number; 10 | weight: number; 11 | constructor(object: any) { 12 | this.ProposalOption = new VoteOption(object.ProposalOption); 13 | this.createdAt = object.createdAt; 14 | this.proposalOptionId = object.proposalOptionId; 15 | this.proposalResultId = object.proposalResultId; 16 | this.updatedAt = object.updatedAt; 17 | this.voters = object.voters; 18 | this.weight = object.weight; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/wallet/proposals/models/proposal-result-graph-option.model.ts: -------------------------------------------------------------------------------- 1 | export class GraphOption { 2 | description: string; 3 | voters: number; 4 | optionId: number; 5 | weight: number; 6 | constructor(object: any) { 7 | this.description = object.description; 8 | this.voters = object.voters; 9 | this.optionId = object.optionId; 10 | this.weight = object.weight 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/wallet/proposals/models/vote-details.model.ts: -------------------------------------------------------------------------------- 1 | import { VoteOption } from 'app/wallet/proposals/models/vote-option.model'; 2 | 3 | export class VoteDetails { 4 | ProposalOption: VoteOption 5 | createdAt: Date; 6 | id: number; 7 | proposalOptionId: number; 8 | updatedAt: Date; 9 | voter: string; 10 | weight: number; 11 | 12 | constructor(object: any) { 13 | this.ProposalOption = new VoteOption(object.ProposalOption); 14 | this.createdAt = object.createdAt; 15 | this.id = object.id; 16 | this.proposalOptionId = object.ProposalOption.id; 17 | this.updatedAt = object.updatedAt; 18 | this.voter = object.voter; 19 | this.weight = object.weight; 20 | } 21 | 22 | get isReported(): boolean { 23 | return this.ProposalOption.description === 'REMOVE'; 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/app/wallet/proposals/models/vote-option.model.ts: -------------------------------------------------------------------------------- 1 | export class VoteOption { 2 | public optionId: number; 3 | public description: string; 4 | createdAt: Date; 5 | hash: string; 6 | id: number; 7 | proposalId: string; 8 | updatedAt: Date; 9 | 10 | constructor(object: any) { 11 | this.optionId = object.optionId; 12 | this.description = object.description; 13 | this.createdAt = object.createdAt; 14 | this.hash = object.hash; 15 | this.id = object.id; 16 | this.proposalId = object.proposalId; 17 | this.updatedAt = object.updatedAt; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app/wallet/proposals/proposals.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/wallet/shared/_filter-sorting'; // filtering & sorting 3 | 4 | 5 | // ------ LAYOUT ------ // 6 | 7 | .filter { 8 | .new-proposal { 9 | margin-bottom: 25px; 10 | } 11 | .only-official { // filter > show only official proposals 12 | margin: 6px 0; 13 | display: inline-block; 14 | } 15 | } 16 | 17 | .loading-bar { 18 | position: fixed; 19 | bottom: 0; 20 | left: 0; 21 | right: 0; 22 | z-index: 800; 23 | height: 7px; 24 | } 25 | -------------------------------------------------------------------------------- /src/app/wallet/settings/settings.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | -------------------------------------------------------------------------------- /src/app/wallet/settings/settings.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { SettingsService } from './settings.service'; 4 | 5 | describe('SettingsService', () => { 6 | beforeEach(() => { 7 | TestBed.configureTestingModule({ 8 | providers: [SettingsService] 9 | }); 10 | }); 11 | 12 | it('should ...', inject([SettingsService], (service: SettingsService) => { 13 | expect(service).toBeTruthy(); 14 | })); 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/wallet/shared/delete-confirmation-modal/delete-confirmation-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/config'; // import shared colors etc. 2 | 3 | .address-details { // address details to be deleted 4 | display: block; 5 | padding: 16px 32px; 6 | text-align: center; 7 | font-size: 15px; 8 | line-height: 1.4; 9 | color: $color-alert; 10 | background: rgba($color-alert, 0.12); 11 | border-radius: 3px; 12 | word-wrap: break-word; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/wallet/shared/header/header.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/wallet/shared/header/header.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/app/wallet/shared/header/header.component.scss -------------------------------------------------------------------------------- /src/app/wallet/shared/header/header.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HeaderComponent } from './header.component'; 4 | 5 | describe('HeaderComponent', () => { 6 | let component: HeaderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HeaderComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HeaderComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/wallet/shared/header/header.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-header', 5 | templateUrl: './header.component.html', 6 | styleUrls: ['./header.component.scss'] 7 | }) 8 | export class HeaderComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/address-book/address-book.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/wallet/shared/_filter-sorting'; // filtering & sorting 3 | 4 | // ------ UI ELEMENTS ------ // 5 | 6 | .search-address { 7 | .mat-icon { 8 | top: 4px; 9 | right: 18px; 10 | font-size: 14px; 11 | } 12 | } 13 | 14 | 15 | // ------ LAYOUT ------ // 16 | 17 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/address-book/modal/new-address-modal/new-address-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/config'; // import shared colors etc. 2 | 3 | .mat-dialog-content { 4 | max-width: 500px; 5 | } 6 | 7 | .address { 8 | display: flex; 9 | justify-content: space-between; 10 | align-items: center; 11 | .address-field { 12 | flex: 1 1 100%; 13 | } 14 | .paste { 15 | flex: 0 0 50px; 16 | margin-left: 12px; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/addresslookup/contact.model.ts: -------------------------------------------------------------------------------- 1 | export class Contact { 2 | 3 | constructor(private label: string, private address: string) { } 4 | 5 | public getLabel() { 6 | return this.label; 7 | } 8 | 9 | public getAddress() { 10 | return this.address; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/balances/balance.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | {{ balance.getIntegerPart() }}{{ balance.dot() }}{{ balance.getFractionalPart() || '' }} 7 | 8 |

{{ getTypeOfBalance() }}

9 |
10 | 11 | 12 | 13 | 14 | {{ balance.getIntegerPart() }}{{ balance.dot() }}{{ balance.getFractionalPart() || '' }} 15 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/balances/balance.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .balance { 4 | @extend %enable-select; 5 | display: inline-block; 6 | padding-top: 7px; 7 | & > .point { 8 | color: $color; 9 | margin: 0 2px; 10 | } 11 | & > .big { 12 | font-size: 22px; 13 | @include break(l) { 14 | font-size: 28px; 15 | } 16 | } 17 | & > .small { 18 | font-size: 11px; 19 | @include break(l) { 20 | font-size: 15px; 21 | } 22 | } 23 | & > .description { 24 | @extend %lighter; 25 | text-transform: uppercase; 26 | margin-top: 6px; 27 | } 28 | 29 | // Balance preview in sidebar 30 | &.in-sidebar { 31 | padding: 0; 32 | small { 33 | @extend %lighter; 34 | font-weight: 400; 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/history/history.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | @import './src/app/wallet/shared/_filter-sorting'; // filtering & sorting 3 | 4 | // ------ LAYOUT ------ // 5 | 6 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/models/address-look-up-copy.ts: -------------------------------------------------------------------------------- 1 | export class AddressLookUpCopy { 2 | address: string; 3 | label: string; 4 | } 5 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/receive/modals/add-address-label/add-address-label.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/app/wallet/wallet/receive/modals/add-address-label/add-address-label.component.scss -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/fix-wallet-modal/fix-wallet-modal.component.html: -------------------------------------------------------------------------------- 1 |
Fix wallet
2 | 5 |
6 | We've detected a potential issue with your wallet.dat
7 | Make a manual backup of your wallet.dat and then click "Fix". 8 |
9 | 10 | 11 | 15 | 19 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/fix-wallet-modal/fix-wallet-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/fix-wallet-modal/wallet-fixed-confirmation/wallet-fixed-confirmation.component.html: -------------------------------------------------------------------------------- 1 |
Fix wallet
2 | 5 |
6 |

7 | 8 | Successfully rescanned the chain. Please attempt the transaction again. 9 |

10 |
11 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/fix-wallet-modal/wallet-fixed-confirmation/wallet-fixed-confirmation.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/fix-wallet-modal/wallet-fixed-confirmation/wallet-fixed-confirmation.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { MatDialogRef } from '@angular/material'; 3 | 4 | @Component({ 5 | selector: 'app-wallet-fixed-confirmation', 6 | templateUrl: './wallet-fixed-confirmation.component.html', 7 | styleUrls: ['./wallet-fixed-confirmation.component.scss'] 8 | }) 9 | export class WalletFixedConfirmationComponent implements OnInit { 10 | 11 | constructor( 12 | private dialogRef: MatDialogRef, 13 | ) { } 14 | 15 | ngOnInit() { 16 | } 17 | 18 | dialogClose(): void { 19 | this.dialogRef.close(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/send.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CoreUiModule } from '../../../core-ui/core-ui.module'; 4 | import { CoreModule } from '../../../core/core.module'; 5 | import { SharedModule } from '../../shared/shared.module'; // is this even needed? 6 | 7 | import { SendService } from './send.service'; 8 | 9 | 10 | describe('SendService', () => { 11 | beforeEach(() => { 12 | TestBed.configureTestingModule({ 13 | imports: [ 14 | SharedModule, 15 | CoreModule.forRoot(), 16 | CoreUiModule.forRoot() 17 | ], 18 | providers: [SendService] 19 | 20 | }); 21 | }); 22 | 23 | it('should be created', inject([SendService], (service: SendService) => { 24 | expect(service).toBeTruthy(); 25 | })); 26 | }); 27 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/send/transaction-builder.model.ts: -------------------------------------------------------------------------------- 1 | export enum TxType { 2 | PUBLIC = 'ghost', 3 | BLIND = 'blind', 4 | ANON = 'anon' 5 | } 6 | 7 | export class TransactionBuilder { 8 | input: TxType = TxType.ANON; 9 | output: TxType = TxType.ANON; 10 | toAddress: string; 11 | toLabel: string; 12 | address: string; 13 | amount: number; 14 | comment: string; 15 | commentTo: string; 16 | narration: string; 17 | numsignatures: number = 1; 18 | validAddress: boolean; 19 | validAmount: boolean; 20 | isMine: boolean; 21 | currency: string = 'ghost'; 22 | ringsize: number = 8; 23 | subtractFeeFromAmount: boolean = false; 24 | estimateFeeOnly: boolean = true; 25 | 26 | constructor() { 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/shared/address.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, inject } from '@angular/core/testing'; 2 | 3 | import { CoreModule } from '../../../core/core.module'; 4 | import { SharedModule } from '../../shared/shared.module'; 5 | 6 | import { AddressService } from './address.service'; 7 | import { RpcWithStateModule } from 'app/core/rpc/rpc.module'; 8 | 9 | describe('AddressService', () => { 10 | beforeEach(() => { 11 | TestBed.configureTestingModule({ 12 | imports: [ 13 | SharedModule, 14 | CoreModule.forRoot(), 15 | RpcWithStateModule.forRoot(), 16 | ], 17 | providers: [AddressService] 18 | }); 19 | }); 20 | 21 | it('should ...', inject([AddressService], (service: AddressService) => { 22 | expect(service).toBeTruthy(); 23 | })); 24 | }); 25 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/shared/qr-code-modal/qr-code-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | // ------ Modal ------ // 4 | 5 | .dialog-content { 6 | width: 700px; 7 | padding: 24px; 8 | margin: 10px -24px !important; 9 | } 10 | 11 | mat-dialog-actions { 12 | border-top: 1px dashed $bg-shadow; 13 | .right { 14 | text-align: right; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/shared/signature-address-modal/sign-verify-message.model.ts: -------------------------------------------------------------------------------- 1 | export class SignVerifyMessage { 2 | address: string; 3 | signature: string; 4 | message: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/shared/signature-address-modal/signature-address-modal.component.scss: -------------------------------------------------------------------------------- 1 | @import './src/assets/_config'; // import shared colors etc. 2 | 3 | .signature-address-container { 4 | max-width: 600px; 5 | } 6 | 7 | .signature-address-modal-form { 8 | display: flex; 9 | flex-direction: column; 10 | margin-top: 15px; 11 | .icons { // address lookup/paste icons 12 | text-align: right; 13 | .icon { 14 | margin-left: 10px; 15 | } 16 | } 17 | } 18 | 19 | .signature-address-modal-form > * { 20 | width: 100%; 21 | } 22 | -------------------------------------------------------------------------------- /src/app/wallet/wallet/shared/transaction.mockservice.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | import { Transaction } from './transaction.model'; 4 | import { TransactionService } from './transaction.service'; 5 | import { Result } from 'app/core/rpc/rpc.responses'; 6 | /* 7 | This is a fake mock service used for the TransactionService. 8 | The TransactionTableComponent provides its _own_ TransactionService, 9 | so we have to override it in all tests that use the component. 10 | */ 11 | @Injectable() 12 | export class MockTransactionService extends TransactionService { 13 | txs: Array = []; 14 | 15 | postConstructor(i: number) { 16 | const json = Result['filtertransactions'] 17 | this.txs = json.map(tx => { 18 | if (tx !== undefined) { 19 | return new Transaction(tx); 20 | } 21 | }); 22 | 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Black.woff -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Black.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Bold.woff -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Bold.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Italic.woff -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Italic.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Medium.woff -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Medium.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Regular.woff -------------------------------------------------------------------------------- /src/assets/fonts/Inter-UI-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/Inter-UI-Regular.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/part.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/part.eot -------------------------------------------------------------------------------- /src/assets/fonts/part.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/part.ttf -------------------------------------------------------------------------------- /src/assets/fonts/part.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/part.woff -------------------------------------------------------------------------------- /src/assets/fonts/part.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/fonts/part.woff2 -------------------------------------------------------------------------------- /src/assets/icons/SVG/add-account.svg: -------------------------------------------------------------------------------- 1 | add account -------------------------------------------------------------------------------- /src/assets/icons/SVG/airplane.svg: -------------------------------------------------------------------------------- 1 | airplane -------------------------------------------------------------------------------- /src/assets/icons/SVG/alert.svg: -------------------------------------------------------------------------------- 1 | alert -------------------------------------------------------------------------------- /src/assets/icons/SVG/anon.svg: -------------------------------------------------------------------------------- 1 | anon -------------------------------------------------------------------------------- /src/assets/icons/SVG/archive.svg: -------------------------------------------------------------------------------- 1 | archive -------------------------------------------------------------------------------- /src/assets/icons/SVG/arrow-down.svg: -------------------------------------------------------------------------------- 1 | arrow down -------------------------------------------------------------------------------- /src/assets/icons/SVG/arrow-left.svg: -------------------------------------------------------------------------------- 1 | arrow left -------------------------------------------------------------------------------- /src/assets/icons/SVG/arrow-right.svg: -------------------------------------------------------------------------------- 1 | arrow right -------------------------------------------------------------------------------- /src/assets/icons/SVG/arrow-up.svg: -------------------------------------------------------------------------------- 1 | arrow up -------------------------------------------------------------------------------- /src/assets/icons/SVG/attach.svg: -------------------------------------------------------------------------------- 1 | attach -------------------------------------------------------------------------------- /src/assets/icons/SVG/bag-buy.svg: -------------------------------------------------------------------------------- 1 | bag buy -------------------------------------------------------------------------------- /src/assets/icons/SVG/bag-sell.svg: -------------------------------------------------------------------------------- 1 | bag sell -------------------------------------------------------------------------------- /src/assets/icons/SVG/bag.svg: -------------------------------------------------------------------------------- 1 | bag -------------------------------------------------------------------------------- /src/assets/icons/SVG/bitcointalk.svg: -------------------------------------------------------------------------------- 1 | bitcointalk -------------------------------------------------------------------------------- /src/assets/icons/SVG/blind.svg: -------------------------------------------------------------------------------- 1 | blind -------------------------------------------------------------------------------- /src/assets/icons/SVG/bug.svg: -------------------------------------------------------------------------------- 1 | bug -------------------------------------------------------------------------------- /src/assets/icons/SVG/cart.svg: -------------------------------------------------------------------------------- 1 | cart -------------------------------------------------------------------------------- /src/assets/icons/SVG/chat-discussion.svg: -------------------------------------------------------------------------------- 1 | chat discussion -------------------------------------------------------------------------------- /src/assets/icons/SVG/chat.svg: -------------------------------------------------------------------------------- 1 | chat -------------------------------------------------------------------------------- /src/assets/icons/SVG/check-in-a-box.svg: -------------------------------------------------------------------------------- 1 | check in a box -------------------------------------------------------------------------------- /src/assets/icons/SVG/check.svg: -------------------------------------------------------------------------------- 1 | check -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-alert.svg: -------------------------------------------------------------------------------- 1 | circle alert -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-check.svg: -------------------------------------------------------------------------------- 1 | circle check -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-info-2.svg: -------------------------------------------------------------------------------- 1 | circle info 2 -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-info.svg: -------------------------------------------------------------------------------- 1 | circle info -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-minus.svg: -------------------------------------------------------------------------------- 1 | circle minus -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-plus.svg: -------------------------------------------------------------------------------- 1 | circle plus -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-question.svg: -------------------------------------------------------------------------------- 1 | circle question -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-remove.svg: -------------------------------------------------------------------------------- 1 | circle remove -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-user-2.svg: -------------------------------------------------------------------------------- 1 | circle user 2 -------------------------------------------------------------------------------- /src/assets/icons/SVG/circle-user.svg: -------------------------------------------------------------------------------- 1 | circle user -------------------------------------------------------------------------------- /src/assets/icons/SVG/clear-all.svg: -------------------------------------------------------------------------------- 1 | clear all -------------------------------------------------------------------------------- /src/assets/icons/SVG/cog.svg: -------------------------------------------------------------------------------- 1 | cog -------------------------------------------------------------------------------- /src/assets/icons/SVG/console-window.svg: -------------------------------------------------------------------------------- 1 | console window -------------------------------------------------------------------------------- /src/assets/icons/SVG/console.svg: -------------------------------------------------------------------------------- 1 | console -------------------------------------------------------------------------------- /src/assets/icons/SVG/copy.svg: -------------------------------------------------------------------------------- 1 | copy -------------------------------------------------------------------------------- /src/assets/icons/SVG/cross.svg: -------------------------------------------------------------------------------- 1 | cross -------------------------------------------------------------------------------- /src/assets/icons/SVG/cryptocurrency-bitcoin.svg: -------------------------------------------------------------------------------- 1 | cryptocurrency bitcoin -------------------------------------------------------------------------------- /src/assets/icons/SVG/cryptocurrency-particl.svg: -------------------------------------------------------------------------------- 1 | cryptocurrency particl -------------------------------------------------------------------------------- /src/assets/icons/SVG/currency-dollar.svg: -------------------------------------------------------------------------------- 1 | currency dollar -------------------------------------------------------------------------------- /src/assets/icons/SVG/currency-euro.svg: -------------------------------------------------------------------------------- 1 | currency euro -------------------------------------------------------------------------------- /src/assets/icons/SVG/currency-pound.svg: -------------------------------------------------------------------------------- 1 | currency pound -------------------------------------------------------------------------------- /src/assets/icons/SVG/currency-yen.svg: -------------------------------------------------------------------------------- 1 | currency yen -------------------------------------------------------------------------------- /src/assets/icons/SVG/dapps.svg: -------------------------------------------------------------------------------- 1 | dapps -------------------------------------------------------------------------------- /src/assets/icons/SVG/date.svg: -------------------------------------------------------------------------------- 1 | date -------------------------------------------------------------------------------- /src/assets/icons/SVG/display.svg: -------------------------------------------------------------------------------- 1 | display -------------------------------------------------------------------------------- /src/assets/icons/SVG/document.svg: -------------------------------------------------------------------------------- 1 | document -------------------------------------------------------------------------------- /src/assets/icons/SVG/error.svg: -------------------------------------------------------------------------------- 1 | error -------------------------------------------------------------------------------- /src/assets/icons/SVG/facebook.svg: -------------------------------------------------------------------------------- 1 | facebook -------------------------------------------------------------------------------- /src/assets/icons/SVG/filter-2.svg: -------------------------------------------------------------------------------- 1 | filter 2 -------------------------------------------------------------------------------- /src/assets/icons/SVG/filter.svg: -------------------------------------------------------------------------------- 1 | filter -------------------------------------------------------------------------------- /src/assets/icons/SVG/flag.svg: -------------------------------------------------------------------------------- 1 | flag -------------------------------------------------------------------------------- /src/assets/icons/SVG/flash.svg: -------------------------------------------------------------------------------- 1 | flash -------------------------------------------------------------------------------- /src/assets/icons/SVG/github.svg: -------------------------------------------------------------------------------- 1 | github -------------------------------------------------------------------------------- /src/assets/icons/SVG/globe.svg: -------------------------------------------------------------------------------- 1 | globe -------------------------------------------------------------------------------- /src/assets/icons/SVG/google.svg: -------------------------------------------------------------------------------- 1 | google -------------------------------------------------------------------------------- /src/assets/icons/SVG/hamburger.svg: -------------------------------------------------------------------------------- 1 | hamburger -------------------------------------------------------------------------------- /src/assets/icons/SVG/handshake.svg: -------------------------------------------------------------------------------- 1 | handshake -------------------------------------------------------------------------------- /src/assets/icons/SVG/heart-outline-add.svg: -------------------------------------------------------------------------------- 1 | heart outline add -------------------------------------------------------------------------------- /src/assets/icons/SVG/heart-outline-remove.svg: -------------------------------------------------------------------------------- 1 | heart outline remove -------------------------------------------------------------------------------- /src/assets/icons/SVG/heart-outline.svg: -------------------------------------------------------------------------------- 1 | heart outline -------------------------------------------------------------------------------- /src/assets/icons/SVG/heart.svg: -------------------------------------------------------------------------------- 1 | heart -------------------------------------------------------------------------------- /src/assets/icons/SVG/image-upload.svg: -------------------------------------------------------------------------------- 1 | image upload -------------------------------------------------------------------------------- /src/assets/icons/SVG/info.svg: -------------------------------------------------------------------------------- 1 | info -------------------------------------------------------------------------------- /src/assets/icons/SVG/label.svg: -------------------------------------------------------------------------------- 1 | label -------------------------------------------------------------------------------- /src/assets/icons/SVG/lightbulb.svg: -------------------------------------------------------------------------------- 1 | lightbulb -------------------------------------------------------------------------------- /src/assets/icons/SVG/lightning.svg: -------------------------------------------------------------------------------- 1 | lightning -------------------------------------------------------------------------------- /src/assets/icons/SVG/listings.svg: -------------------------------------------------------------------------------- 1 | listings -------------------------------------------------------------------------------- /src/assets/icons/SVG/lock-open.svg: -------------------------------------------------------------------------------- 1 | lock open -------------------------------------------------------------------------------- /src/assets/icons/SVG/lock.svg: -------------------------------------------------------------------------------- 1 | lock -------------------------------------------------------------------------------- /src/assets/icons/SVG/mastodon.svg: -------------------------------------------------------------------------------- 1 | mastodon -------------------------------------------------------------------------------- /src/assets/icons/SVG/medium.svg: -------------------------------------------------------------------------------- 1 | medium -------------------------------------------------------------------------------- /src/assets/icons/SVG/minus.svg: -------------------------------------------------------------------------------- 1 | minus -------------------------------------------------------------------------------- /src/assets/icons/SVG/monetization-on.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/SVG/next-double.svg: -------------------------------------------------------------------------------- 1 | next double -------------------------------------------------------------------------------- /src/assets/icons/SVG/next-single.svg: -------------------------------------------------------------------------------- 1 | next single -------------------------------------------------------------------------------- /src/assets/icons/SVG/nodes.svg: -------------------------------------------------------------------------------- 1 | nodes -------------------------------------------------------------------------------- /src/assets/icons/SVG/notification-bell.svg: -------------------------------------------------------------------------------- 1 | notification bell -------------------------------------------------------------------------------- /src/assets/icons/SVG/notification-speaker.svg: -------------------------------------------------------------------------------- 1 | notification speaker -------------------------------------------------------------------------------- /src/assets/icons/SVG/overview.svg: -------------------------------------------------------------------------------- 1 | overview -------------------------------------------------------------------------------- /src/assets/icons/SVG/past.svg: -------------------------------------------------------------------------------- 1 | past -------------------------------------------------------------------------------- /src/assets/icons/SVG/pen-1.svg: -------------------------------------------------------------------------------- 1 | pen 1 -------------------------------------------------------------------------------- /src/assets/icons/SVG/pen-2.svg: -------------------------------------------------------------------------------- 1 | pen 2 -------------------------------------------------------------------------------- /src/assets/icons/SVG/people.svg: -------------------------------------------------------------------------------- 1 | people -------------------------------------------------------------------------------- /src/assets/icons/SVG/person-add.svg: -------------------------------------------------------------------------------- 1 | person add -------------------------------------------------------------------------------- /src/assets/icons/SVG/person-check.svg: -------------------------------------------------------------------------------- 1 | person check -------------------------------------------------------------------------------- /src/assets/icons/SVG/person-edit.svg: -------------------------------------------------------------------------------- 1 | person edit -------------------------------------------------------------------------------- /src/assets/icons/SVG/person-heart.svg: -------------------------------------------------------------------------------- 1 | person heart -------------------------------------------------------------------------------- /src/assets/icons/SVG/person-remove.svg: -------------------------------------------------------------------------------- 1 | person remove -------------------------------------------------------------------------------- /src/assets/icons/SVG/person.svg: -------------------------------------------------------------------------------- 1 | person -------------------------------------------------------------------------------- /src/assets/icons/SVG/plus.svg: -------------------------------------------------------------------------------- 1 | plus -------------------------------------------------------------------------------- /src/assets/icons/SVG/preferences.svg: -------------------------------------------------------------------------------- 1 | preferences -------------------------------------------------------------------------------- /src/assets/icons/SVG/previous-double.svg: -------------------------------------------------------------------------------- 1 | previous double -------------------------------------------------------------------------------- /src/assets/icons/SVG/previous-single.svg: -------------------------------------------------------------------------------- 1 | previous single -------------------------------------------------------------------------------- /src/assets/icons/SVG/print.svg: -------------------------------------------------------------------------------- 1 | print -------------------------------------------------------------------------------- /src/assets/icons/SVG/proposals.svg: -------------------------------------------------------------------------------- 1 | proposals -------------------------------------------------------------------------------- /src/assets/icons/SVG/public.svg: -------------------------------------------------------------------------------- 1 | public -------------------------------------------------------------------------------- /src/assets/icons/SVG/qr.svg: -------------------------------------------------------------------------------- 1 | qr -------------------------------------------------------------------------------- /src/assets/icons/SVG/receive.svg: -------------------------------------------------------------------------------- 1 | receive -------------------------------------------------------------------------------- /src/assets/icons/SVG/refresh.svg: -------------------------------------------------------------------------------- 1 | refresh -------------------------------------------------------------------------------- /src/assets/icons/SVG/riot.svg: -------------------------------------------------------------------------------- 1 | riot -------------------------------------------------------------------------------- /src/assets/icons/SVG/rocket.svg: -------------------------------------------------------------------------------- 1 | rocket -------------------------------------------------------------------------------- /src/assets/icons/SVG/search.svg: -------------------------------------------------------------------------------- 1 | search -------------------------------------------------------------------------------- /src/assets/icons/SVG/select.svg: -------------------------------------------------------------------------------- 1 | select -------------------------------------------------------------------------------- /src/assets/icons/SVG/send.svg: -------------------------------------------------------------------------------- 1 | send -------------------------------------------------------------------------------- /src/assets/icons/SVG/ship.svg: -------------------------------------------------------------------------------- 1 | ship -------------------------------------------------------------------------------- /src/assets/icons/SVG/small-cross.svg: -------------------------------------------------------------------------------- 1 | small cross -------------------------------------------------------------------------------- /src/assets/icons/SVG/small-minus.svg: -------------------------------------------------------------------------------- 1 | small minus -------------------------------------------------------------------------------- /src/assets/icons/SVG/small-plus.svg: -------------------------------------------------------------------------------- 1 | small plus -------------------------------------------------------------------------------- /src/assets/icons/SVG/smiley.svg: -------------------------------------------------------------------------------- 1 | smiley -------------------------------------------------------------------------------- /src/assets/icons/SVG/snowflake.svg: -------------------------------------------------------------------------------- 1 | snowflake -------------------------------------------------------------------------------- /src/assets/icons/SVG/stake.svg: -------------------------------------------------------------------------------- 1 | stake -------------------------------------------------------------------------------- /src/assets/icons/SVG/staking.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/SVG/support-help.svg: -------------------------------------------------------------------------------- 1 | support help -------------------------------------------------------------------------------- /src/assets/icons/SVG/swap.svg: -------------------------------------------------------------------------------- 1 | swap -------------------------------------------------------------------------------- /src/assets/icons/SVG/telegram.svg: -------------------------------------------------------------------------------- 1 | telegram -------------------------------------------------------------------------------- /src/assets/icons/SVG/thumb-down.svg: -------------------------------------------------------------------------------- 1 | thumb down -------------------------------------------------------------------------------- /src/assets/icons/SVG/thumb-up.svg: -------------------------------------------------------------------------------- 1 | thumb up -------------------------------------------------------------------------------- /src/assets/icons/SVG/tool.svg: -------------------------------------------------------------------------------- 1 | tool -------------------------------------------------------------------------------- /src/assets/icons/SVG/transfer.svg: -------------------------------------------------------------------------------- 1 | transfer -------------------------------------------------------------------------------- /src/assets/icons/SVG/triangle-down.svg: -------------------------------------------------------------------------------- 1 | triangle down -------------------------------------------------------------------------------- /src/assets/icons/SVG/triangle-left.svg: -------------------------------------------------------------------------------- 1 | triangle left -------------------------------------------------------------------------------- /src/assets/icons/SVG/triangle-right.svg: -------------------------------------------------------------------------------- 1 | triangle right -------------------------------------------------------------------------------- /src/assets/icons/SVG/triangle-up.svg: -------------------------------------------------------------------------------- 1 | triangle up -------------------------------------------------------------------------------- /src/assets/icons/SVG/truck.svg: -------------------------------------------------------------------------------- 1 | truck -------------------------------------------------------------------------------- /src/assets/icons/SVG/twitter.svg: -------------------------------------------------------------------------------- 1 | twitter -------------------------------------------------------------------------------- /src/assets/icons/SVG/youtube.svg: -------------------------------------------------------------------------------- 1 | youtube -------------------------------------------------------------------------------- /src/assets/icons/SVG/zoom-in.svg: -------------------------------------------------------------------------------- 1 | zoom in -------------------------------------------------------------------------------- /src/assets/icons/SVG/zoom-out.svg: -------------------------------------------------------------------------------- 1 | zoom out -------------------------------------------------------------------------------- /src/assets/icons/logo-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/logo-150x150.png -------------------------------------------------------------------------------- /src/assets/icons/logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/logo-16x16.png -------------------------------------------------------------------------------- /src/assets/icons/logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/logo-32x32.png -------------------------------------------------------------------------------- /src/assets/icons/logo.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/logo.icns -------------------------------------------------------------------------------- /src/assets/icons/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/logo.ico -------------------------------------------------------------------------------- /src/assets/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/logo.png -------------------------------------------------------------------------------- /src/assets/icons/notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/icons/notification.png -------------------------------------------------------------------------------- /src/assets/images/placeholder_1-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/images/placeholder_1-1.jpg -------------------------------------------------------------------------------- /src/assets/images/placeholder_4-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/images/placeholder_4-3.jpg -------------------------------------------------------------------------------- /src/assets/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/loading.gif -------------------------------------------------------------------------------- /src/assets/part-palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/part-palette.png -------------------------------------------------------------------------------- /src/assets/splash-bg-particl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/splash-bg-particl.png -------------------------------------------------------------------------------- /src/assets/splash-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/assets/splash-bg.png -------------------------------------------------------------------------------- /src/environments/environment.docker1.ts: -------------------------------------------------------------------------------- 1 | declare const require: any; 2 | 3 | export const environment = { 4 | production: false, 5 | releasesUrl: 'https://api.github.com/repos/ghost-coin/ghost-desktop/releases/latest', 6 | version: require('../../package.json').version, 7 | envName: 'docker1', 8 | ghostHost: 'localhost', 9 | ghostPort: 51725, 10 | marketVersion: 'UNKNOWN', 11 | marketHost: 'localhost', 12 | marketPort: 3100, 13 | isTesting: false 14 | }; 15 | -------------------------------------------------------------------------------- /src/environments/environment.docker2.ts: -------------------------------------------------------------------------------- 1 | declare const require: any; 2 | 3 | export const environment = { 4 | production: false, 5 | releasesUrl: 'https://api.github.com/repos/ghost-coin/ghost-desktop/releases/latest', 6 | version: require('../../package.json').version, 7 | envName: 'docker2', 8 | ghostHost: 'localhost', 9 | ghostPort: 51725, 10 | marketVersion: 'UNKNOWN', 11 | marketHost: 'localhost', 12 | marketPort: 3200, 13 | isTesting: false 14 | }; 15 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | declare const require: any; 2 | 3 | export const environment = { 4 | production: true, 5 | version: require('../../package.json').version, 6 | releasesUrl: 'https://api.github.com/repos/ghost-coin/ghost-desktop/releases/latest', 7 | envName: 'prod', 8 | // marketVersion: require('../../node_modules/ghost-marketplace/package.json').version, 9 | marketVersion: 'UNKNOWN', 10 | ghostHost: 'localhost', 11 | ghostPort: 51725, 12 | marketHost: 'localhost', 13 | marketPort: 3000, 14 | isTesting: false 15 | }; 16 | -------------------------------------------------------------------------------- /src/environments/environment.test.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | declare const require: any; 6 | 7 | export const environment = { 8 | production: true, 9 | envName: 'test', 10 | releasesUrl: 'https://api.github.com/repos/ghost-coin/ghost-desktop/releases/latest', 11 | version: require('../../package.json').version, 12 | // marketVersion: require('../../node_modules/ghost-marketplace/package.json').version, 13 | marketVersion: 'UNKNOWN', 14 | ghostHost: 'localhost', 15 | ghostPort: 51725, 16 | marketHost: 'localhost', 17 | marketPort: 3000, 18 | isTesting: true 19 | }; 20 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | declare const require: any; 6 | 7 | export const environment = { 8 | production: false, 9 | envName: 'dev', 10 | releasesUrl: 'https://api.github.com/repos/ghost-coin/ghost-desktop/releases/latest', 11 | version: require('../../package.json').version, 12 | // marketVersion: require('../../node_modules/ghost-marketplace/package.json').version, 13 | marketVersion: 'UNKNOWN', 14 | ghostHost: 'localhost', 15 | ghostPort: 51725, 16 | marketHost: 'localhost', 17 | marketPort: 3000, 18 | isTesting: false 19 | }; 20 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ghost-coin/ghost-desktop/20b46d8f112c431a4e5c414065e75e2a10eda954/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Ghost Desktop 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 | 19 | 20 |
21 |

“Сryptocurrency is the last chance for financial freedom.”

22 |
— -John McAfee
23 |
24 | 25 |
26 |
27 | 28 | 29 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "es2015", 6 | "baseUrl": "", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "baseUrl": "", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts", 15 | "polyfills.ts" 16 | ], 17 | "include": [ 18 | "**/*.spec.ts", 19 | "**/*.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | 7 | // TODO: maybe move into ipc.types ? 8 | 9 | interface Window { 10 | electron: boolean; 11 | require: any; 12 | ipc: { 13 | on: (channel: string, listener: Function) => void; 14 | once: (channel: string, listener: Function) => void; 15 | send: (channel: string, arguments?: {}) => void; 16 | sendSync: (channel: string, arguments?: {}) => void; 17 | sendToHost: (channel: string, arguments?: {}) => void; 18 | removeListener: (channel: string, listener: Function) => void; 19 | removeAllListeners: (channel?: string) => void; 20 | listenerCount: (channel?: string) => number; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "importHelpers": true, 5 | "outDir": "./dist/out-tsc", 6 | "baseUrl": "src", 7 | "sourceMap": true, 8 | "declaration": false, 9 | "moduleResolution": "node", 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "target": "es5", 13 | "typeRoots": [ 14 | "node_modules/@types" 15 | ], 16 | "lib": [ 17 | "es2016", 18 | "dom" 19 | ], 20 | "module": "es2015" 21 | } 22 | } --------------------------------------------------------------------------------