2024-04-13 08:05:45 +00:00
< div class = "mobile-wrapper" >
< div class = "mobile-container" >
< div class = "panel" >
2024-04-30 00:25:19 +00:00
< div class = "nav-header" >
@if (enterpriseInfo?.header_img) {
< a class = "d-flex" [ routerLink ] = " [ ' / ' | relativeUrl ] " >
2024-07-25 22:34:52 +00:00
< img * ngIf = "enterpriseInfo.header_img" [ src ] = " enterpriseInfo ? . header_img " [ alt ] = " enterpriseInfo . title " height = "42px" >
2024-04-30 00:25:19 +00:00
< / a >
} @else if (enterpriseInfo?.img || enterpriseInfo?.imageMd5) {
< a [ routerLink ] = " [ ' / ' | relativeUrl ] " >
< img [ src ] = " enterpriseInfo . img | | ' / api / v1 / services / enterprise / images / ' + enterpriseInfo . name + ' / logo ? imageMd5 = ' + enterpriseInfo.imageMd5" class="subdomain_logo" [class]="{' rounded ' : enterpriseInfo . rounded_corner } " >
< / a >
< div class = "vertical-line" > < / div >
}
@if (!enterpriseInfo?.header_img) {
< a [ routerLink ] = " [ ' / ' | relativeUrl ] " >
< app-svg-images * ngIf = "!officialMempoolSpace" name = "mempoolSpace" style = "width: 144px; height: 36px" viewBox = "0 0 500 126" width = "500" height = "126" class = "mempool-logo" > < / app-svg-images >
< app-svg-images * ngIf = "officialMempoolSpace" name = "officialMempoolSpace" style = "width: 144px; height: 36px" width = "500" height = "126" viewBox = "0 0 500 126" > < / app-svg-images >
< / a >
}
@if (enterpriseInfo?.header_img || (!enterpriseInfo?.img & & !enterpriseInfo?.imageMd5)) {
2024-05-07 23:59:02 +00:00
< div [ ngSwitch ] = " network " class = "network-label" [ class . hide-name ] = " enterpriseInfo ? . header_img " >
2024-04-13 14:18:01 +00:00
< span * ngSwitchCase = "'signet'" class = "network signet" > < span class = "name" > Bitcoin Signet< / span > < app-svg-images name = "signet" width = "35" height = "35" viewBox = "0 0 65 65" style = "display: inline-block" class = "mainnet ml-2" > < / app-svg-images > < / span >
2024-05-06 15:40:32 +00:00
< span * ngSwitchCase = "'testnet'" class = "network testnet" > < span class = "name" > Bitcoin Testnet3< / span > < app-svg-images name = "testnet" width = "35" height = "35" viewBox = "0 0 65 65" style = "display: inline-block" class = "mainnet ml-2" > < / app-svg-images > < / span >
< span * ngSwitchCase = "'testnet4'" class = "network testnet" > < span class = "name" > Bitcoin Testnet4< / span > < app-svg-images name = "testnet4" width = "35" height = "35" viewBox = "0 0 65 65" style = "display: inline-block" class = "mainnet ml-2" > < / app-svg-images > < / span >
2024-04-13 14:18:01 +00:00
< span * ngSwitchCase = "'liquid'" class = "network liquid" > < span class = "name" > Liquid< / span > < app-svg-images name = "liquid" width = "35" height = "35" viewBox = "0 0 125 125" style = "display: inline-block" class = "mainnet ml-2" > < / app-svg-images > < / span >
< span * ngSwitchCase = "'liquidtestnet'" class = "network liquidtestnet" > < span class = "name" > Liquid Testnet< / span > < app-svg-images name = "liquidtestnet" width = "35" height = "35" viewBox = "0 0 125 125" style = "display: inline-block" class = "mainnet ml-2" > < / app-svg-images > < / span >
< span * ngSwitchDefault class = "network mainnet" > < span class = "name" > Bitcoin< / span > < app-svg-images name = "bitcoin" width = "35" height = "35" viewBox = "0 0 65 65" style = "display: inline-block" class = "mainnet ml-2" > < / app-svg-images > < / span >
< / div >
2024-04-30 00:25:19 +00:00
}
2024-04-13 12:26:30 +00:00
< / div >
2024-04-13 08:05:45 +00:00
< div class = "field" >
< div class = "label" i18n = "shared.transaction" > Transaction< / div >
< div class = "value" >
< app-truncate [ text ] = " txId " [ lastChars ] = " 12 " [ link ] = " [ ' / tx / ' | relativeUrl , txId ] " >
< app-clipboard [ text ] = " txId " > < / app-clipboard >
< / app-truncate >
< / div >
< / div >
< / div >
< div class = "blockchain-wrapper" [ style ] = " { height: blockchainHeight * 1 . 16 + ' px ' } " >
< app-clockchain [ height ] = " blockchainHeight " [ width ] = " blockchainWidth " mode = "none" > < / app-clockchain >
< / div >
2024-12-09 08:54:26 +01:00
< div class = "panel" * ngIf = "!error || waitingForTransaction" >
2024-06-04 22:45:43 +00:00
@if (replaced) {
< div class = "alert-replaced" role = "alert" >
< span i18n = "transaction.rbf.replacement|RBF replacement" > This transaction has been replaced by:< / span >
2024-12-09 08:54:26 +01:00
< app-truncate [ text ] = " latestReplacement " [ lastChars ] = " 12 " [ link ] = " [ ' / tx / ' | relativeUrl , latestReplacement ] " [ queryParams ] = " { mode: ' status ' } " > < / app-truncate >
2024-06-04 22:45:43 +00:00
< / div >
} @else {
< div class = "tracker-bar" >
< app-tracker-bar [ stage ] = " trackerStage " > < / app-tracker-bar >
< / div >
}
2024-04-13 13:56:29 +00:00
< div class = "data" >
2024-05-30 21:27:10 +00:00
@if (tx & & !tx.status?.confirmed) {
2024-04-16 16:01:52 +09:00
< div class = "field narrower mt-2" >
2024-04-13 13:14:26 +00:00
< div class = "label" i18n = "transaction.first-seen|Transaction first seen" > First seen< / div >
< div class = "value" >
2024-04-14 03:49:26 +00:00
@if (transactionTime > 0) {
2024-06-08 23:28:44 +00:00
< i > < app-time kind = "since" [ time ] = " transactionTime " [ fastRender ] = " true " [ showTooltip ] = " true " > < / app-time > < / i >
2024-04-13 13:14:26 +00:00
} @else {
2024-12-09 08:54:26 +01:00
< span class = "skeleton-loader" style = "max-width: 200px;" > < / span >
2024-04-13 13:14:26 +00:00
}
< / div >
< / div >
2024-12-09 08:54:26 +01:00
@if (!replaced) {
< div class = "field narrower" >
< div class = "label" i18n = "transaction.eta|Transaction ETA" > ETA< / div >
< div class = "value" >
< ng-container * ngIf = "(ETA$ | async) as eta; else etaSkeleton" >
< span class = "justify-content-end d-flex align-items-center" >
@if (eta.blocks >= 7) {
< span i18n = "transaction.eta.not-any-time-soon|Transaction ETA mot any time soon" > Not any time soon< / span >
} @else {
< app-time kind = "until" [ time ] = " eta . time " [ fastRender ] = " false " [ fixedRender ] = " true " > < / app-time >
}
< / span >
< / ng-container >
< ng-template # etaSkeleton >
< span class = "skeleton-loader" style = "max-width: 200px;" > < / span >
< / ng-template >
< / div >
< / div >
}
2024-04-13 08:05:45 +00:00
} @else if (tx & & tx.status?.confirmed) {
2024-04-16 16:01:52 +09:00
< div class = "field narrower mt-2" >
2024-04-13 13:14:26 +00:00
< div class = "label" i18n = "transaction.confirmed-at" > Confirmed at< / div >
< div class = "value" >
‎ {{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm' }}
< div class = "lg-inline" >
2024-06-08 23:28:44 +00:00
< i class = "symbol" > (< app-time kind = "since" [ time ] = " tx . status . block_time " [ fastRender ] = " true " [ showTooltip ] = " true " > < / app-time > )< / i >
2024-04-13 13:14:26 +00:00
< / div >
< / div >
< / div >
2024-04-16 16:01:52 +09:00
< div class = "field narrower" >
2024-04-13 08:05:45 +00:00
< div class = "label" i18n = "transaction.block-height" > Block height< / div >
< div class = "value" >
< span class = "justify-content-end d-flex align-items-center" >
< a [ routerLink ] = " [ ' / block / ' | relativeUrl , tx . status ? . block_height ] " class = "block-link" > {{ tx.status?.block_height }}< / a >
< div class = "confirmations" >
< app-confirmations
*ngIf="tx"
[chainTip]="latestBlock?.height"
[height]="tx?.status?.block_height"
>< / app-confirmations >
< / div >
< / span >
< / div >
< / div >
}
< / div >
< / div >
2024-04-13 09:05:50 +00:00
2024-12-09 08:54:26 +01:00
< div class = "bottom-panel" * ngIf = "!error || waitingForTransaction" >
2024-06-29 04:10:47 +00:00
@if (isLoading) {
< div class = "progress-icon" >
< div class = "spinner-border text-light" style = "width: 1em; height: 1em" > < / div >
< / div >
< span class = "explainer" > < / span >
2024-04-13 09:05:50 +00:00
} @else {
2024-12-09 08:54:26 +01:00
@if (tx & & !tx.status?.confirmed & & showAccelerationSummary) {
2024-07-14 04:40:27 +00:00
< ng-container * ngIf = "(ETA$ | async) as eta;" >
< app-accelerate-checkout
*ngIf="(da$ | async) as da;"
[cashappEnabled]="cashappEligible"
[advancedEnabled]="false"
[forceMobile]="true"
[tx]="tx"
[accelerating]="isAcceleration"
[miningStats]="miningStats"
[eta]="eta"
[scrollEvent]="scrollIntoAccelPreview"
(unavailable)="eligibleForAcceleration = false"
class="w-100"
>< / app-accelerate-checkout >
< / ng-container >
}
2024-12-09 08:54:26 +01:00
< div class = "status-panel d-flex flex-column h-100 w-100 justify-content-center align-items-center" [ class . small-status ] = " tx & & ! tx . status ? . confirmed & & showAccelerationSummary " >
2024-07-14 04:40:27 +00:00
@if (tx?.acceleration & & !tx.status?.confirmed) {
< div class = "progress-icon" >
< fa-icon [ icon ] = " [ ' fas ' , ' wand-magic-sparkles ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / div >
< span class = "explainer" i18n = "tracker.explain.accelerated" > Your transaction has been accelerated< / span >
} @else {
@switch (trackerStage) {
@case ('waiting') {
< div class = "progress-icon" >
< div class = "spinner-border text-light" style = "width: 1em; height: 1em" > < / div >
< / div >
< span class = "explainer" i18n = "tracker.explain.waiting" > Waiting for your transaction to appear in the mempool< / span >
}
@case ('pending') {
< div class = "progress-icon" >
< fa-icon [ icon ] = " [ ' fas ' , ' hourglass-start ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / div >
< span class = "explainer" i18n = "tracker.explain.pending" > Your transaction is in the mempool, but it will not be confirmed for some time.< / span >
}
@case ('soon') {
< div class = "progress-icon" >
< fa-icon [ icon ] = " [ ' fas ' , ' hourglass-half ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / div >
< span class = "explainer" i18n = "tracker.explain.soon" > Your transaction is near the top of the mempool, and is expected to confirm soon.< / span >
}
@case ('next') {
< div class = "progress-icon" >
< fa-icon [ icon ] = " [ ' fas ' , ' hourglass-end ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / div >
< span class = "explainer" i18n = "tracker.explain.next-block" > Your transaction is expected to confirm in the next block< / span >
}
@case ('confirmed') {
< div class = "progress-icon" >
< fa-icon [ icon ] = " [ ' fas ' , ' circle-check ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / div >
< span class = "explainer" i18n = "tracker.explain.confirmed" > Your transaction is confirmed!< / span >
}
@case ('replaced') {
< div class = "progress-icon" >
< fa-icon [ icon ] = " [ ' fas ' , ' timeline ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / div >
< span class = "explainer" i18n = "tracker.explain.replaced" > Your transaction has been replaced by a newer version!< / span >
}
2024-06-04 22:45:43 +00:00
}
2024-04-13 09:05:50 +00:00
}
2024-07-14 04:40:27 +00:00
< / div >
2024-04-13 09:05:50 +00:00
}
< / div >
2024-12-09 08:54:26 +01:00
< div class = "bottom-panel" * ngIf = "error && !waitingForTransaction" >
< app-http-error [ error ] = " error " >
< span i18n = "transaction.error.loading-transaction-data" > Error loading transaction data.< / span >
< / app-http-error >
< / div >
2024-04-13 09:05:50 +00:00
2024-12-09 08:54:26 +01:00
< div class = "footer-link"
[routerLink]="['/tx' | relativeUrl, tx?.txid || txId]"
[queryParams]="{ mode: 'details' }"
queryParamsHandling="merge"
>
2024-07-02 15:54:49 +09:00
< span > < ng-container i18n = "accelerator.show-more-details" > See more details< / ng-container > < fa-icon [ icon ] = " [ ' fas ' , ' arrow-alt-circle-right ' ] " > < / fa-icon > < / span >
2024-04-13 09:05:50 +00:00
< / div >
2024-04-13 08:05:45 +00:00
< / div >
2024-04-08 04:27:49 +00:00
< / div >