Lightning Payments

Lightning Payments
pull/260/head
Shahana Farooqui 5 years ago
parent 3d19c493fb
commit 054f4d7658

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -9,8 +9,8 @@
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/images/favicon/favicon-16x16.png">
<link rel="manifest" href="assets/images/favicon/site.webmanifest">
<link rel="stylesheet" href="styles.283353200dc668e12877.css"></head>
<link rel="stylesheet" href="styles.a8287f97ce506fffef3f.css"></head>
<body>
<rtl-app></rtl-app>
<script src="runtime.508868925a77d5fc90cc.js"></script><script src="polyfills-es5.92f4069201c83f4833ef.js" nomodule></script><script src="polyfills.5ddcccdb990eb395f306.js"></script><script src="main.b901a7c6a0dab32c8849.js"></script></body>
<script src="runtime.e5b60cf568517569717c.js"></script><script src="polyfills-es5.92f4069201c83f4833ef.js" nomodule></script><script src="polyfills.5ddcccdb990eb395f306.js"></script><script src="main.58be42bfaa1eb4a261a4.js"></script></body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
!function(e){function r(r){for(var n,i,a=r[0],c=r[1],f=r[2],p=0,s=[];p<a.length;p++)o[i=a[p]]&&s.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++)0!==o[t[a]]&&(n=!1);n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={0:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+""+({}[e]||e)+"."+{1:"df9093d1e13d9e6f0394",6:"c84a7e3b20b9550b6e5e",7:"97b98af961941a6521c7"}[e]+".js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,(function(r){return e[r]}).bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="",i.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var f=0;f<a.length;f++)r(a[f]);var l=c;t()}([]);
!function(e){function r(r){for(var n,i,a=r[0],c=r[1],f=r[2],p=0,s=[];p<a.length;p++)o[i=a[p]]&&s.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return u.push.apply(u,f||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++)0!==o[t[a]]&&(n=!1);n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={0:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+""+({}[e]||e)+"."+{1:"df9093d1e13d9e6f0394",6:"c3c6c4c3788a25a07972",7:"cd0c8c61bc5617195b9b"}[e]+".js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(f);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,(function(r){return e[r]}).bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="",i.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var f=0;f<a.length;f++)r(a[f]);var l=c;t()}([]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -95,8 +95,8 @@ export class CLForwardingHistoryComponent implements OnInit, OnDestroy {
this.forwardingHistoryEvents = new MatTableDataSource<ForwardingEventCL>([...forwardingEvents]);
this.forwardingHistoryEvents.sort = this.sort;
this.forwardingHistoryEvents.data.forEach(event => {
event.received_time_str = (event.received_time_str === '') ? '' : formatDate(event.received_time_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
event.resolved_time_str = (event.resolved_time_str === '') ? '' : formatDate(event.resolved_time_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
event.received_time_str = (event.received_time_str === '') ? '' : formatDate(event.received_time_str, 'dd/MMM/yyyy HH:mm', 'en-US');
event.resolved_time_str = (event.resolved_time_str === '') ? '' : formatDate(event.resolved_time_str, 'dd/MMM/yyyy HH:mm', 'en-US');
});
this.logger.info(this.forwardingHistoryEvents);
}

@ -133,10 +133,10 @@ export class CLInvoicesComponent implements OnInit, OnDestroy {
this.invoices.sort = this.sort;
this.invoices.data.forEach(invoice => {
if (undefined !== invoice.paid_at_str) {
invoice.paid_at_str = (invoice.paid_at_str === '') ? '' : formatDate(invoice.paid_at_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
invoice.paid_at_str = (invoice.paid_at_str === '') ? '' : formatDate(invoice.paid_at_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
if (undefined !== invoice.expires_at_str) {
invoice.expires_at_str = (invoice.expires_at_str === '') ? '' : formatDate(invoice.expires_at_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
invoice.expires_at_str = (invoice.expires_at_str === '') ? '' : formatDate(invoice.expires_at_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
});
setTimeout(() => { this.flgAnimate = false; }, 5000);

@ -23,11 +23,11 @@ export class CLChannelLookupComponent implements OnInit {
ngOnInit() {
if (this.lookupResult.length > 0 && undefined !== this.lookupResult[0].last_update_str) {
this.lookupResult[0].last_update_str = (this.lookupResult[0].last_update_str === '') ?
'' : formatDate(this.lookupResult[0].last_update_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
'' : formatDate(this.lookupResult[0].last_update_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
if (this.lookupResult.length > 1 && undefined !== this.lookupResult[1].last_update_str) {
this.lookupResult[1].last_update_str = (this.lookupResult[1].last_update_str === '') ?
'' : formatDate(this.lookupResult[1].last_update_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
'' : formatDate(this.lookupResult[1].last_update_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
this.store.select('cl')
.pipe(takeUntil(this.unSubs[0]))

@ -19,7 +19,7 @@ export class CLNodeLookupComponent implements OnInit {
this.logger.info(this.lookupResult);
if (undefined !== this.lookupResult && undefined !== this.lookupResult.last_timestamp_str) {
this.lookupResult.last_timestamp_str = (this.lookupResult.last_timestamp_str === '') ?
'' : formatDate(this.lookupResult.last_timestamp_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
'' : formatDate(this.lookupResult.last_timestamp_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
}

@ -73,7 +73,7 @@ export class CLPaymentsComponent implements OnInit, OnDestroy {
this.payments.data = this.paymentJSONArr;
this.payments.sort = this.sort;
this.payments.data.forEach(payment => {
payment.created_at_str = (payment.created_at_str === '') ? '' : formatDate(payment.created_at_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
payment.created_at_str = (payment.created_at_str === '') ? '' : formatDate(payment.created_at_str, 'dd/MMM/yyyy HH:mm', 'en-US');
});
setTimeout(() => { this.flgAnimate = false; }, 3000);
if (this.flgLoading[0] !== 'error') {
@ -96,9 +96,9 @@ export class CLPaymentsComponent implements OnInit, OnDestroy {
this.paymentDecoded = decodedPayment;
if (undefined !== this.paymentDecoded.created_at_str) {
this.paymentDecoded.created_at_str = (this.paymentDecoded.created_at_str === '') ? '' :
formatDate(this.paymentDecoded.created_at_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
formatDate(this.paymentDecoded.created_at_str, 'dd/MMM/yyyy HH:mm', 'en-US');
this.paymentDecoded.expire_at_str = (this.paymentDecoded.expire_at_str === '') ? '' :
formatDate(this.paymentDecoded.expire_at_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
formatDate(this.paymentDecoded.expire_at_str, 'dd/MMM/yyyy HH:mm', 'en-US');
if (undefined === this.paymentDecoded.msatoshi) {
this.paymentDecoded.msatoshi = 0;
}
@ -153,7 +153,7 @@ export class CLPaymentsComponent implements OnInit, OnDestroy {
// this.paymentDecoded = decodedPayment;
// if (undefined !== this.paymentDecoded.timestamp_str) {
// this.paymentDecoded.timestamp_str = (this.paymentDecoded.timestamp_str === '') ? '' :
// formatDate(this.paymentDecoded.timestamp_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
// formatDate(this.paymentDecoded.timestamp_str, 'dd/MMM/yyyy HH:mm', 'en-US');
// } else {
// this.resetData();
// }

@ -603,7 +603,7 @@ export class CLEffects implements OnDestroy {
postRes.msatoshi = action.payload.amount;
postRes.description = action.payload.description;
postRes.expires_at_str = new Date(postRes.expires_at * 1000).toUTCString();
postRes.expires_at_str = formatDate(postRes.expires_at_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
postRes.expires_at_str = formatDate(postRes.expires_at_str, 'dd/MMM/yyyy HH:mm', 'en-US');
this.logger.info(postRes);
this.store.dispatch(new RTLActions.CloseSpinner());
this.store.dispatch(new RTLActions.OpenAlert({

@ -119,10 +119,10 @@ export class InvoicesComponent implements OnInit, OnDestroy {
this.invoices.sort = this.sort;
this.invoices.data.forEach(invoice => {
if (undefined !== invoice.creation_date_str) {
invoice.creation_date_str = (invoice.creation_date_str === '') ? '' : formatDate(invoice.creation_date_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
invoice.creation_date_str = (invoice.creation_date_str === '') ? '' : formatDate(invoice.creation_date_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
if (undefined !== invoice.settle_date_str) {
invoice.settle_date_str = (invoice.settle_date_str === '') ? '' : formatDate(invoice.settle_date_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
invoice.settle_date_str = (invoice.settle_date_str === '') ? '' : formatDate(invoice.settle_date_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
});
setTimeout(() => { this.flgAnimate = false; }, 5000);

@ -7,15 +7,15 @@ import { SharedModule } from '../shared/shared.module';
import { LNDRootComponent } from './lnd-root.component';
import { HomeComponent } from './home/home.component';
import { PeersComponent } from './peers/peers.component';
import { SendReceiveTransComponent } from './transactions/send-receive/send-receive-trans.component';
import { SendReceiveTransComponent } from './old-transactions/send-receive/send-receive-trans.component';
import { InvoicesComponent } from './invoices/invoices.component';
import { UnlockLNDComponent } from './unlock-lnd/unlock-lnd.component';
import { PaymentsComponent } from './payments/send-receive/payments.component';
import { LightningPaymentsComponent } from './transactions/payments/lightning-payments.component';
import { ChannelManageComponent } from './channels/channel-manage/channel-manage.component';
import { ChannelPendingComponent } from './channels/channel-pending/channel-pending.component';
import { ChannelClosedComponent } from './channels/channel-closed/channel-closed.component';
import { TransactionsComponent } from './transactions/transactions.component';
import { ListTransactionsComponent } from './transactions/list-transactions/list-transactions.component';
import { ListTransactionsComponent } from './old-transactions/list-transactions/list-transactions.component';
import { LookupsComponent } from './lookups/lookups.component';
import { ForwardingHistoryComponent } from './switch/forwarding-history.component';
import { RoutingPeersComponent } from './routing-peers/routing-peers.component';
@ -41,7 +41,7 @@ import { LNDUnlockedGuard } from '../shared/services/auth.guard';
SendReceiveTransComponent,
InvoicesComponent,
UnlockLNDComponent,
PaymentsComponent,
LightningPaymentsComponent,
ChannelManageComponent,
ChannelPendingComponent,
ChannelClosedComponent,

@ -9,9 +9,9 @@ import { ChannelManageComponent } from './channels/channel-manage/channel-manage
import { ChannelPendingComponent } from './channels/channel-pending/channel-pending.component';
import { PeersComponent } from './peers/peers.component';
import { TransactionsComponent } from './transactions/transactions.component';
import { SendReceiveTransComponent } from './transactions/send-receive/send-receive-trans.component';
import { ListTransactionsComponent } from './transactions/list-transactions/list-transactions.component';
import { PaymentsComponent } from './payments/send-receive/payments.component';
import { SendReceiveTransComponent } from './old-transactions/send-receive/send-receive-trans.component';
import { ListTransactionsComponent } from './old-transactions/list-transactions/list-transactions.component';
import { LightningPaymentsComponent } from './transactions/payments/lightning-payments.component';
import { QueryRoutesComponent } from './payments/query-routes/query-routes.component';
import { InvoicesComponent } from './invoices/invoices.component';
import { LookupsComponent } from './lookups/lookups.component';
@ -37,7 +37,7 @@ export const LndRoutes: Routes = [
{ path: 'transactions', component: TransactionsComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'transsendreceive', component: SendReceiveTransComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'translist', component: ListTransactionsComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'paymentsend', component: PaymentsComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'paymentsend', component: LightningPaymentsComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'queryroutes', component: QueryRoutesComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'invoices', component: InvoicesComponent, canActivate: [LNDUnlockedGuard] },
{ path: 'switch', component: ForwardingHistoryComponent, canActivate: [LNDUnlockedGuard] },

@ -23,7 +23,7 @@ export class ChannelLookupComponent implements OnInit {
ngOnInit() {
if (undefined !== this.lookupResult && undefined !== this.lookupResult.last_update_str) {
this.lookupResult.last_update_str = (this.lookupResult.last_update_str === '') ?
'' : formatDate(this.lookupResult.last_update_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
'' : formatDate(this.lookupResult.last_update_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
this.store.select('lnd')
.pipe(takeUntil(this.unSubs[0]))

@ -17,7 +17,7 @@ export class NodeLookupComponent implements OnInit {
ngOnInit() {
if (undefined !== this.lookupResult && undefined !== this.lookupResult.node && undefined !== this.lookupResult.node.last_update_str) {
this.lookupResult.node.last_update_str = (this.lookupResult.node.last_update_str === '') ?
'' : formatDate(this.lookupResult.node.last_update_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
'' : formatDate(this.lookupResult.node.last_update_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
}

@ -99,7 +99,7 @@ export class ListTransactionsComponent implements OnInit, OnDestroy {
this.listTransactions.sort = this.sort;
this.listTransactions.data.forEach(transaction => {
if (undefined !== transaction.time_stamp_str) {
transaction.time_stamp_str = (transaction.time_stamp_str === '') ? '' : formatDate(transaction.time_stamp_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
transaction.time_stamp_str = (transaction.time_stamp_str === '') ? '' : formatDate(transaction.time_stamp_str, 'dd/MMM/yyyy HH:mm', 'en-US');
}
});
this.logger.info(this.listTransactions);

@ -1,81 +0,0 @@
<div fxLayout="column">
<div class="padding-gap">
<mat-card>
<mat-card-header>
<mat-card-subtitle>
<h2>Verify and Send Payments</h2>
</mat-card-subtitle>
</mat-card-header>
<mat-card-content>
<form fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-md="row wrap" #sendPaymentForm="ngForm">
<div fxFlex="69" fxLayoutAlign="space-between stretch">
<mat-form-field class="w-100">
<input matInput placeholder="Payment Request" name="paymentRequest" [(ngModel)]="paymentRequest" tabindex="1" required #paymentReq="ngModel">
</mat-form-field>
</div>
<div fxFlex="30" fxLayoutAlign="space-between stretch">
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" [disabled]="paymentReq.invalid" (click)="onSendPayment()" tabindex="2">
<p *ngIf="paymentReq.invalid && (paymentReq.dirty || paymentReq.touched); else sendText">Invalid Req</p>
<ng-template #sendText><p>Send Payment</p></ng-template>
</button>
<button fxFlex="48" mat-raised-button color="accent" type="reset" tabindex="3" type="reset" (click)="resetData()">Clear</button>
</div>
</form>
</mat-card-content>
</mat-card>
</div>
<div class="padding-gap">
<mat-card>
<mat-card-content class="table-card-content">
<div fxLayout="row" fxLayoutAlign="start start">
<mat-form-field fxFlex="30">
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
</mat-form-field>
</div>
<div perfectScrollbar class="table-container mat-elevation-z8">
<mat-progress-bar *ngIf="flgLoading[0]===true" mode="indeterminate"></mat-progress-bar>
<table mat-table #table [dataSource]="payments" matSort [ngClass]="{'mat-elevation-z8 overflow-auto error-border': flgLoading[0]==='error','mat-elevation-z8 overflow-auto': true}">
<ng-container matColumnDef="creation_date">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Creation Date</th>
<td mat-cell *matCellDef="let payment">{{payment?.creation_date_str}}</td>
</ng-container>
<ng-container matColumnDef="payment_hash">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Payment Hash</th>
<td mat-cell *matCellDef="let payment">
<div>{{payment?.payment_hash | slice:0:10}}...</div>
</td>
</ng-container>
<ng-container matColumnDef="fee">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Fee</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.fee | number}}</span></td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Value</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.value | number}}</span></td>
</ng-container>
<ng-container matColumnDef="payment_preimage">
<th mat-header-cell class="pl-4" *matHeaderCellDef mat-sort-header>Payment Pre Image</th>
<td mat-cell class="pl-4" *matCellDef="let payment">
<div>{{payment?.payment_preimage | slice:0:10}}...</div>
</td>
</ng-container>
<ng-container matColumnDef="value_msat">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Value MSat</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.value_msat | number}}</span></td>
</ng-container>
<ng-container matColumnDef="value_sat">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Value Sat</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.value_sat | number}}</span></td>
</ng-container>
<ng-container matColumnDef="path">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Path</th>
<td mat-cell *matCellDef="let payment">{{payment?.path?.length || 0}} Hops</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: flgSticky;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [@newlyAddedRowAnimation]="(row.payment_hash === newlyAddedPayment && flgAnimate) ? 'added' : 'notAdded'" (click)="onPaymentClick(row, $event)"></tr>
</table>
</div>
</mat-card-content>
</mat-card>
</div>
</div>

@ -1,31 +0,0 @@
.mat-column-path {
padding-left: 10px;
}
.mat-expansion-panel-header {
padding: 0;
}
.mat-accordion .mat-expansion-panel {
padding: 0 10px;
}
.ml-minus-24px {
margin-left: -24px;
}
.info-column {
flex: 1 1 34%;
box-sizing: border-box;
max-width: 34%;
}
.info-value {
flex: 1 1 64%;
max-width: 64%;
word-break: break-word;
}
table {
width:100%;
}

@ -93,7 +93,7 @@ export class ForwardingHistoryComponent implements OnInit, OnDestroy {
this.forwardingHistoryEvents = new MatTableDataSource<ForwardingEvent>([...forwardingEvents]);
this.forwardingHistoryEvents.sort = this.sort;
this.forwardingHistoryEvents.data.forEach(event => {
event.timestamp_str = (event.timestamp_str === '') ? '' : formatDate(event.timestamp_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
event.timestamp_str = (event.timestamp_str === '') ? '' : formatDate(event.timestamp_str, 'dd/MMM/yyyy HH:mm', 'en-US');
});
this.logger.info(this.forwardingHistoryEvents);

@ -0,0 +1,57 @@
<div fxLayout="column">
<form fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-md="row wrap" #sendPaymentForm="ngForm" class="mb-2">
<mat-form-field class="w-100">
<input matInput placeholder="Payment Request" name="paymentRequest" [(ngModel)]="paymentRequest" tabindex="1" required #paymentReq="ngModel">
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between start" fxLayoutAlign.gt-md="start start">
<button fxFlex="48" fxFlex.gt-md="10" fxLayoutAlign="center center" class="mr-2" mat-raised-button color="primary" [disabled]="paymentReq.invalid" (click)="onSendPayment()" tabindex="2">
<p *ngIf="paymentReq.invalid && (paymentReq.dirty || paymentReq.touched); else sendText">Invalid Req</p>
<ng-template #sendText><p>Send Payment</p></ng-template>
</button>
<button fxFlex="48" fxFlex.gt-md="10" mat-stroked-button color="accent" type="reset" tabindex="3" type="reset" (click)="resetData()">Clear Field</button>
</div>
</form>
<div fxLayout="row" fxLayoutAlign="start center" class="padding-gap-x page-sub-title-container">
<div fxFlex="70">
<fa-icon [icon]="faHistory" class="page-title-img mr-1"></fa-icon>
<span class="page-title">Payments History</span>
</div>
<mat-form-field fxFlex="30">
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
</mat-form-field>
</div>
<div perfectScrollbar fxLayout="row" fxLayoutAlign="start center" fxFlex="100" class="table-container">
<mat-progress-bar *ngIf="flgLoading[0]===true" mode="indeterminate"></mat-progress-bar>
<table mat-table #table [dataSource]="payments" matSort [ngClass]="{'overflow-auto error-border': flgLoading[0]==='error','overflow-auto': true}">
<ng-container matColumnDef="creation_date">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Creation Date</th>
<td mat-cell *matCellDef="let payment">{{payment?.creation_date_str}}</td>
</ng-container>
<ng-container matColumnDef="payment_hash">
<th mat-header-cell *matHeaderCellDef mat-sort-header>Payment Hash</th>
<td mat-cell *matCellDef="let payment">{{payment?.payment_hash}}</td>
</ng-container>
<ng-container matColumnDef="fee">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Fee</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.fee | number}}</span></td>
</ng-container>
<ng-container matColumnDef="value">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Value (sats)</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.value | number}}</span></td>
</ng-container>
<ng-container matColumnDef="path">
<th mat-header-cell *matHeaderCellDef mat-sort-header arrowPosition="before">Path (hops)</th>
<td mat-cell *matCellDef="let payment"><span fxLayoutAlign="end center">{{payment?.path?.length || 0}}</span></td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pl-4 pr-3"><span fxLayoutAlign="end center">Actions</span></th>
<td mat-cell *matCellDef="let payment" class="pl-4">
<button mat-stroked-button color="accent" type="button" tabindex="4" (click)="onPaymentClick(payment,$event)">View Info</button>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: flgSticky;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;" [@newlyAddedRowAnimation]="(row.payment_hash === newlyAddedPayment && flgAnimate) ? 'added' : 'notAdded'"></tr>
</table>
</div>
<mat-paginator [pageSizeOptions]="pageSizeOptions" showFirstLastButtons class="mb-4"></mat-paginator>
</div>

@ -0,0 +1,4 @@
.mat-column-actions {
flex: 0 0 5%;
width: 5%;
}

@ -3,10 +3,12 @@ import { formatDate } from '@angular/common';
import { Subject } from 'rxjs';
import { takeUntil, take } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import { faHistory } from '@fortawesome/free-solid-svg-icons';
import { MatTableDataSource, MatSort } from '@angular/material';
import { MatTableDataSource, MatSort, MatPaginator, MatPaginatorIntl } from '@angular/material';
import { GetInfo, Payment, PayRequest } from '../../../shared/models/lndModels';
import { LoggerService } from '../../../shared/services/logger.service';
import { getPaymentsPaginator } from '../../../shared/services/paginator.service';
import { newlyAddedRowAnimation } from '../../../shared/animation/row-animation';
import { LNDEffects } from '../../store/lnd.effects';
@ -15,14 +17,19 @@ import * as RTLActions from '../../../store/rtl.actions';
import * as fromRTLReducer from '../../../store/rtl.reducers';
@Component({
selector: 'rtl-payments',
templateUrl: './payments.component.html',
styleUrls: ['./payments.component.scss'],
animations: [newlyAddedRowAnimation]
selector: 'rtl-lightning-payments',
templateUrl: './lightning-payments.component.html',
styleUrls: ['./lightning-payments.component.scss'],
animations: [newlyAddedRowAnimation],
providers: [
{ provide: MatPaginatorIntl, useValue: getPaymentsPaginator() },
]
})
export class PaymentsComponent implements OnInit, OnDestroy {
export class LightningPaymentsComponent implements OnInit, OnDestroy {
@ViewChild(MatSort, { static: true }) sort: MatSort;
@ViewChild('sendPaymentForm', { static: true }) form;
@ViewChild(MatPaginator, {static: true}) paginator: MatPaginator;
faHistory = faHistory;
public newlyAddedPayment = '';
public flgAnimate = true;
public flgLoading: Array<Boolean | 'error'> = [true];
@ -33,26 +40,28 @@ export class PaymentsComponent implements OnInit, OnDestroy {
public paymentDecoded: PayRequest = {};
public paymentRequest = '';
public flgSticky = false;
public pageSizeOptions = [5, 10, 25, 100];
private unsub: Array<Subject<void>> = [new Subject(), new Subject(), new Subject(), new Subject()];
constructor(private logger: LoggerService, private store: Store<fromRTLReducer.RTLState>, private rtlEffects: RTLEffects, private lndEffects: LNDEffects) {
switch (true) {
case (window.innerWidth <= 415):
this.displayedColumns = ['creation_date', 'fee', 'value'];
this.displayedColumns = ['creation_date', 'fee', 'value', 'actions'];
break;
case (window.innerWidth > 415 && window.innerWidth <= 730):
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'payment_preimage'];
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'path', 'actions'];
break;
case (window.innerWidth > 730 && window.innerWidth <= 1024):
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'payment_preimage', 'path'];
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'path', 'actions'];
break;
case (window.innerWidth > 1024 && window.innerWidth <= 1280):
this.flgSticky = true;
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'payment_preimage', 'value_msat', 'value_sat', 'path'];
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'path', 'actions'];
break;
default:
this.flgSticky = true;
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'payment_preimage', 'value_msat', 'value_sat', 'path'];
this.displayedColumns = ['creation_date', 'payment_hash', 'fee', 'value', 'path', 'actions'];
break;
}
}
@ -72,8 +81,9 @@ export class PaymentsComponent implements OnInit, OnDestroy {
this.payments.data = this.paymentJSONArr;
this.payments.sort = this.sort;
this.payments.data.forEach(payment => {
payment.creation_date_str = (payment.creation_date_str === '') ? '' : formatDate(payment.creation_date_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
payment.creation_date_str = (payment.creation_date_str === '') ? '' : formatDate(payment.creation_date_str, 'dd/MMM/yyyy HH:mm', 'en-US');
});
this.payments.paginator = this.paginator;
setTimeout(() => { this.flgAnimate = false; }, 3000);
if (this.flgLoading[0] !== 'error') {
this.flgLoading[0] = (undefined !== this.paymentJSONArr) ? false : true;
@ -95,7 +105,7 @@ export class PaymentsComponent implements OnInit, OnDestroy {
this.paymentDecoded = decodedPayment;
if (undefined !== this.paymentDecoded.timestamp_str) {
this.paymentDecoded.timestamp_str = (this.paymentDecoded.timestamp_str === '') ? '' :
formatDate(this.paymentDecoded.timestamp_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
formatDate(this.paymentDecoded.timestamp_str, 'dd/MMM/yyyy HH:mm', 'en-US');
if (undefined === this.paymentDecoded.num_satoshis) {
this.paymentDecoded.num_satoshis = '0';
}
@ -151,7 +161,7 @@ export class PaymentsComponent implements OnInit, OnDestroy {
this.paymentDecoded = decodedPayment;
if (undefined !== this.paymentDecoded.timestamp_str) {
this.paymentDecoded.timestamp_str = (this.paymentDecoded.timestamp_str === '') ? '' :
formatDate(this.paymentDecoded.timestamp_str, 'MMM/dd/yy HH:mm:ss', 'en-US');
formatDate(this.paymentDecoded.timestamp_str, 'dd/MMM/yyyy HH:mm', 'en-US');
} else {
this.resetData();
}

@ -17,7 +17,7 @@
<mat-card>
<mat-card-content fxLayout="column">
<mat-tab-group>
<mat-tab label="Payments">Payments</mat-tab>
<mat-tab label="Payments"><rtl-lightning-payments></rtl-lightning-payments></mat-tab>
<mat-tab label="Invoices">Invoices</mat-tab>
</mat-tab-group>
</mat-card-content>

@ -17,7 +17,7 @@ export class TransactionsComponent implements OnInit, OnDestroy {
faExchangeAlt = faExchangeAlt;
faChartPie = faChartPie;
currencyUnits = [];
balances = [{title: 'Local Capacity', dataValue: -1, tooltip: 'Amount you can send'}, {title: 'Remote Capacity', dataValue: -1, tooltip: 'Amount you can receive'}];
balances = [{title: 'Local Capacity', dataValue: 0, tooltip: 'Amount you can send'}, {title: 'Remote Capacity', dataValue: 0, tooltip: 'Amount you can receive'}];
private unSubs: Array<Subject<void>> = [new Subject(), new Subject(), new Subject(), new Subject()];
constructor(private logger: LoggerService, private store: Store<fromRTLReducer.RTLState>) {}

@ -9,7 +9,7 @@
<mat-card-content>
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start">
<div fxLayout="row" fxFlex.gt-sm="100"><div fxLayout="column" fxFlex="40" fxFlex.lt-sm="100">
<mat-radio-group [(ngModel)]="walletOperation" aria-label="Select an option" fxLayoutAlign="space-between">
<mat-radio-group [(ngModel)]="walletOperation" color="primary" aria-label="Select an option" fxLayoutAlign="space-between">
<mat-radio-button value="unlock" tabindex="1">Unlock</mat-radio-button>
<mat-radio-button value="init" tabindex="2">Initialize</mat-radio-button>
</mat-radio-group>

@ -9,10 +9,10 @@
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<div fxFlex="50">
<div fxFlex="60">
<h4>Currency Unit{{selNode.settings.currencyUnit}}</h4>
<h4>Currency Unit</h4>
<mat-select [(ngModel)]="selNode.settings.currencyUnit" placeholder="Currency Unit" (selectionChange)="onCurrencyChange($event)" tabindex="1" required name="currencyUnit">
<mat-option *ngFor="let currencyUnit of currencyUnits" [value]="currencyUnit.id">
{{currencyUnit.name}}
{{currencyUnit.id}}
</mat-option>
</mat-select>
</div>

@ -1,6 +1,6 @@
<div class="spinner-container">
<div class="spinner-circle">
<mat-spinner color="primary"></mat-spinner>
<h4 fxLayoutAlign="center">{{data.titleMessage}}</h4>
<h4 fxLayoutAlign="center" class="mat-h4">{{data.titleMessage}}</h4>
</div>
</div>

@ -0,0 +1,7 @@
import { MatPaginatorIntl } from '@angular/material';
export function getPaymentsPaginator() {
const paymentsPaginator = new MatPaginatorIntl();
paymentsPaginator.itemsPerPageLabel = 'Payments per page:';
return paymentsPaginator;
}

@ -9,7 +9,7 @@ import {
MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatDialogModule, MatExpansionModule, MatGridListModule, MatDatepickerModule,
MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatTreeModule, MatNativeDateModule,
MatSelectModule, MatSidenavModule, MatSlideToggleModule, MatSortModule, MatTableModule, MatToolbarModule, MatTooltipModule, MAT_DIALOG_DEFAULT_OPTIONS, MatBadgeModule,
MatPaginatorModule, MatStepperModule, MatSliderModule, MatTabsModule
MatPaginatorModule, MatStepperModule, MatSliderModule, MatTabsModule, MatPaginatorIntl
} from '@angular/material';
import { QRCodeModule } from 'angularx-qrcode';

@ -9,10 +9,13 @@
$accent-color: mat-color($accent);
$warn: map-get($theme, warn);
$foreground: map-get($theme, foreground);
$foreground-color: mat-color($foreground);
$foreground-base: mat-color($foreground, base);
$foreground-text: mat-color($foreground, text);
$foreground-secondary-text: mat-color($foreground, secondary-text);
$foreground-disabled: mat-color($foreground, disabled);
$foreground-divider: mat-color($foreground, divider);
$background: map-get($theme, background);
$hover-background: rgba(0, 0, 0, 0.04);
$alternate-primary: map-get($alternate-theme, primary);
.bg-primary {
@ -48,17 +51,20 @@
}
}
&.day {
.mat-stroked-button.mat-accent {
color: $foreground-text;
}
.ng-fa-icon, .mat-nested-tree-node-parent .mat-icon {
color: rgba(0, 0, 0, 0.6);
color: $foreground-secondary-text;
}
.selected-color {
border-color: $primary-darker;
}
.page-title-container {
.page-title-container, .page-sub-title-container {
& .page-title-img {
color: rgba(0, 0, 0, 0.4);
color: $foreground-disabled;
}
color: rgba(0, 0, 0, 0.6);
color: $foreground-secondary-text;
}
}
@ -83,7 +89,7 @@
.insecure-message {
font-size: 1.2rem * 1.2;
}
.page-title-container {
.page-title-container, .page-sub-title-container {
font-size: 1.2rem * 1.1;
& .page-title-img {
width: 2rem;
@ -128,7 +134,7 @@
.insecure-message {
font-size: 1.4rem * 1.2;
}
.page-title-container {
.page-title-container, .page-sub-title-container {
font-size: 1.4rem * 1.1;
& .page-title-img {
width: 2rem;
@ -173,7 +179,7 @@
.insecure-message {
font-size: 1.6rem * 1.2;
}
.page-title-container {
.page-title-container, .page-sub-title-container {
margin-top: 0.5rem;
font-size: 1.6rem * 1.1;
& .page-title-img {
@ -226,7 +232,7 @@
.mat-tree-node:hover, .mat-nested-tree-node-parent:hover {
color: $primary-color;
cursor: pointer;
background: rgba(0, 0, 0, 0.04);
background: $hover-background;
& .ng-fa-icon, & .mat-icon {
color: $primary-color;
}
@ -266,16 +272,15 @@
.genseed-message {
width:10%;
color: $accent-color;
color: $primary-color;
}
.insecure-message {
width:100%;
color: $accent-color;
}
.page-title-container {
color: $foreground-color;
.page-title-container, .page-sub-title-container {
color: $foreground-text;
}
.material-icons.primary { color: $primary-color; }
@ -326,4 +331,35 @@
.mat-tab-label.mat-tab-label-active {
color: $primary-darker;
}
.cc-data-block {
margin-right: 3.2rem;
& .cc-data-title {
font-size: 80%;
font-weight: 500;
}
& .cc-data-value {
font-size: 120%;
color: $foreground-secondary-text;
}
}
.mat-cell, .mat-header-cell, .mat-footer-cell {
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: $foreground-divider;
}
table.mat-table {
border: 1px solid $foreground-divider;
border-radius: 4px;
background: none;
thead tr th {
color: $foreground-base;
}
tr.mat-row:hover {
background-color: $hover-background;
}
}
}

@ -1,4 +1,7 @@
$font-family: 'Roboto', sans-serif;
$small-font-size: 1.2rem;
$regular-font-size: 1.4rem;
$large-font-size: 1.6rem;
$nodes-toolbar-height: 52px;
$horizontal-toolbar-height: 60px;

@ -32,99 +32,99 @@ body {
}
&.small-font {
.material-icons {
font-size: 1.8rem;
font-size: $small-font-size * 1.5;
line-height: 2rem;
}
.mat-expansion-panel-header, .mat-menu-item, .mat-list .mat-list-item, .mat-nav-list .mat-list-item, .mat-option, .mat-select, .mat-selection-list .mat-list-item {
font-size: 1.2rem !important;
font-size: $small-font-size !important;
}
.logo {
font-size: 1.2rem * 2;
font-size: $small-font-size * 2;
}
.font-60-percent {
font-size: 1.2rem * 0.6;
font-size: $small-font-size * 0.6;
}
.fa-icon-regular {
font-size: 1.2rem * 1.75;
font-size: $small-font-size * 1.75;
}
.icon-large {
font-size: 1.2rem * 5;
font-size: $small-font-size * 5;
}
.icon-small {
font-size: 1.2rem * 1.5 !important;
font-size: $small-font-size * 1.5 !important;
}
.icon-smaller {
font-size: 1.2rem * 0.75 !important;
font-size: $small-font-size * 0.75 !important;
}
.size-triple {
font-size: 1.2rem * 3;
font-size: $small-font-size * 3;
}
.mat-icon-36 {
font-size: 1.2rem;
font-size: $small-font-size;
}
}
&.regular-font {
.material-icons {
font-size: 2.8rem;
font-size: $regular-font-size * 2;
}
.mat-expansion-panel-header, .mat-menu-item, .mat-list .mat-list-item, .mat-nav-list .mat-list-item, .mat-option, .mat-select, .mat-selection-list .mat-list-item {
font-size: 1.4rem !important;
font-size: $regular-font-size !important;
}
.logo {
font-size: 1.4rem * 2;
font-size: $regular-font-size * 2;
}
.font-60-percent {
font-size: 1.4rem * 0.6;
font-size: $regular-font-size * 0.6;
}
.fa-icon-regular {
font-size: 1.4rem * 1.75;
font-size: $regular-font-size * 1.75;
}
.icon-large {
font-size: 1.4rem * 5;
font-size: $regular-font-size * 5;
}
.icon-small {
font-size: 1.4rem * 1.5 !important;
font-size: $regular-font-size * 1.5 !important;
}
.icon-smaller {
font-size: 1.4rem * 0.75 !important;
font-size: $regular-font-size * 0.75 !important;
}
.size-triple {
font-size: 1.4rem * 3;
font-size: $regular-font-size * 3;
}
.mat-icon-36 {
font-size: 1.4rem;
font-size: $regular-font-size;
}
}
&.large-font {
.material-icons {
font-size: 3.8rem;
font-size: $large-font-size * 2.5;
}
.mat-expansion-panel-header, .mat-menu-item, .mat-list .mat-list-item, .mat-nav-list .mat-list-item, .mat-option, .mat-select, .mat-selection-list .mat-list-item {
font-size: 1.6rem !important;
font-size: $large-font-size !important;
}
.logo {
font-size: 1.6rem * 2;
font-size: $large-font-size * 2;
}
.font-60-percent {
font-size: 1.6rem * 0.6;
font-size: $large-font-size * 0.6;
}
.fa-icon-regular {
font-size: 1.6rem * 1.75;
font-size: $large-font-size * 1.75;
}
.icon-large {
font-size: 1.6rem * 5;
font-size: $large-font-size * 5;
}
.icon-small {
font-size: 1.6rem * 1.5 !important;
font-size: $large-font-size * 1.5 !important;
}
.icon-smaller {
font-size: 1.6rem * 0.75 !important;
font-size: $large-font-size * 0.75 !important;
}
.size-triple {
font-size: 1.6rem * 3;
font-size: $large-font-size * 3;
}
.mat-icon-36 {
font-size: 1.6rem;
font-size: $large-font-size;
}
}
&.horizontal {
@ -333,103 +333,103 @@ body {
}
.mt-1 {
margin-top: 0.5rem !important;
margin-top: 1rem !important;
}
.mb-1 {
margin-bottom: 0.9rem !important;
margin-bottom: 1rem !important;
}
.ml-1 {
margin-left: 0.9rem !important;
margin-left: 1rem !important;
}
.mr-1 {
margin-right: 0.9rem !important;
margin-right: 1rem !important;
}
.mx-1 {
margin: 0 0.9rem !important;
margin: 0 1rem !important;
}
.my-1 {
margin: 0.9rem 0 !important;
margin: 1rem 0 !important;
}
.m-1 {
margin: 0.9rem !important;
margin: 1rem !important;
}
.mt-2 {
margin-top: 1rem !important;
margin-top: 2rem !important;
}
.mt-3 {
margin-top: 1.7rem !important;
margin-top: 3rem !important;
}
.mt-4 {
margin-top: 2rem !important;
margin-top: 4rem !important;
}
.mt-minus-1 {
margin-top: -0.8rem !important;
margin-top: -1rem !important;
}
.mb-2 {
margin-bottom: 1.6rem !important;
margin-bottom: 2rem !important;
}
.mb-4 {
margin-bottom: 3.2rem !important;
margin-bottom: 4rem !important;
}
.ml-2 {
margin-left: 1.6rem !important;
margin-left: 2rem !important;
}
.mr-2 {
margin-right: 1.6rem !important;
margin-right: 2rem !important;
}
.ml-4 {
margin-left: 3.2rem !important;
}
.ml-8 {
margin-left: 6.4rem !important;
margin-left: 4rem !important;
}
.mr-4 {
margin-right: 3.2rem !important;
margin-right: 4rem !important;
}
.mx-2 {
margin: 0 1.6rem !important;
margin: 0 2rem !important;
}
.my-2 {
margin: 1.6rem 0 !important;
margin: 2rem 0 !important;
}
.m-2 {
margin: 1.6rem !important;
margin: 2rem !important;
}
.pt-1 {
padding-top: 0.9rem !important;
padding-top: 1rem !important;
}
.pb-1 {
padding-bottom: 0.9rem !important;
padding-bottom: 1rem !important;
}
.pl-1 {
padding-left: 0.9rem !important;
padding-left: 1rem !important;
}
.pr-1 {
padding-right: 0.9rem !important;
padding-right: 1rem !important;
}
.pr-3 {
padding-right: 3rem !important;
}
.pr-4 {
@ -449,35 +449,39 @@ body {
}
.px-1 {
padding: 0 0.9rem !important;
padding: 0 1rem !important;
}
.py-1 {
padding: 0.9rem 0 !important;
padding: 1rem 0 !important;
}
.p-1 {
padding: 0.9rem !important;
padding: 1rem !important;
}
.pt-2 {
padding-top: 1.6rem !important;
padding-top: 2rem !important;
}
.pb-2 {
padding-bottom: 1.6rem !important;
padding-bottom: 2rem !important;
}
.pl-2 {
padding-left: 1.6rem !important;
padding-left: 2rem !important;
}
.pt-4 {
padding-top: 3.2rem !important;
}
.pl-3 {
padding-left: 3rem !important;
}
.pl-4 {
padding-left: 3.2rem !important;
padding-left: 4rem !important;
}
.pr-2 {
@ -489,7 +493,7 @@ body {
}
.px-2 {
padding: 0 1.6rem !important;
padding: 0 2rem !important;
}
.px-4 {
@ -497,11 +501,11 @@ body {
}
.py-2 {
padding: 1.6rem 0 !important;
padding: 2rem 0 !important;
}
.p-2 {
padding: 1.6rem !important;
padding: 2rem !important;
}
.m-1px {
@ -524,12 +528,6 @@ body {
border-bottom-width: 0;
}
.mat-cell, .mat-header-cell, .mat-footer-cell {
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: rgba(0, 0, 0, 0.12);
}
.flex-ellipsis {
padding-right: 3rem;
white-space: nowrap;
@ -772,11 +770,6 @@ a {
align-content: center;
}
tr.mat-row:hover {
box-shadow: inset 0.1em 0.1em 0.1em 0 rgba(255,255,255,0.5), inset -0.1em -0.1em 0.1em 0 rgba(0,0,0,0.5);
cursor: pointer;
}
.settings.mat-sidenav .mat-drawer-inner-container {
overflow: hidden;
}
@ -826,14 +819,6 @@ tr.mat-row:hover {
margin-bottom: 1.2rem;
}
.cc-data-block {
margin-right: 3.2rem;
& .cc-data-title {
font-size: 80%;
font-weight: 500;
}
& .cc-data-value {
font-size: 120%;
color: rgba(0, 0, 0, 0.6);
}
}
table {
width:100%;
}

@ -10,7 +10,7 @@ $small-typography: mat-typography-config(
$body-2: (font-size: 12px, line-height: 20px, font-weight: 500),
$body-1: (font-size: 12px, line-height: 18px, font-weight: 400),
$caption: (font-size: 10px, line-height: 18px, font-weight: 400),
$button: (font-size: 12px, line-height: 12px, font-weight: 500),
$button: (font-size: 11px, line-height: 12px, font-weight: 500),
$input: (font-size: inherit, line-height: 1.125, font-weight: 400)
);
@ -26,7 +26,7 @@ $regular-typography: mat-typography-config(
$body-2: (font-size: 14px, line-height: 24px, font-weight: 500),
$body-1: (font-size: 14px, line-height: 20px, font-weight: 400),
$caption: (font-size: 12px, line-height: 20px, font-weight: 400),
$button: (font-size: 14px, line-height: 14px, font-weight: 500),
$button: (font-size: 13px, line-height: 14px, font-weight: 500),
$input: (font-size: inherit, line-height: 1.125, font-weight: 400)
);
@ -42,6 +42,6 @@ $large-typography: mat-typography-config(
$body-2: (font-size: 16px, line-height: 26px, font-weight: 500),
$body-1: (font-size: 16px, line-height: 22px, font-weight: 400),
$caption: (font-size: 14px, line-height: 22px, font-weight: 400),
$button: (font-size: 16px, line-height: 16px, font-weight: 500),
$button: (font-size: 15px, line-height: 16px, font-weight: 500),
$input: (font-size: inherit, line-height: 1.125, font-weight: 400)
);

Loading…
Cancel
Save