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 ]" >
2025-01-28 07:57:19 +01:00
< img [ src ]=" enterpriseInfo . img || '/ api / v1 / services / enterprise / images /' + enterpriseInfo . name + '/ logo '" class = "subdomain_logo" [ class ]="{' rounded ' : enterpriseInfo . rounded_corner }" >
2024-04-30 00:25:19 +00:00
</ 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-09-17 14:34:18 +02: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-08-05 10:31:01 +00: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-08-02 17:37:53 +02:00
< span class = "skeleton-loader" style = "max-width: 200px;" ></ span >
2024-04-13 13:14:26 +00:00
}
</ div >
</ div >
2024-09-17 12:15:18 +02: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" >
2024-11-13 14:43:04 +01:00
< app-timestamp [ customFormat ]="' yyyy-MM-dd HH:mm '" [ unixTime ]=" tx . status . block_time " [ hideTimeSince ]=" true " ></ app-timestamp >
2024-04-13 13:14:26 +00:00
< 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-09-17 14:34:18 +02: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-08-02 18:52:07 +02: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;"
[ 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-08-02 18:52:07 +02: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-09-17 14:34:18 +02: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-04-22 15:42:15 +00:00
< div class = "footer-link"
2024-08-02 18:52:07 +02:00
[ routerLink ]="['/ tx ' | relativeUrl , tx ?. txid || txId ]"
2024-04-22 15:42:15 +00:00
[ 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 >