CL UX
pull/260/head
Shahana Farooqui 4 years ago
parent 072ea3a3bc
commit aa1bed37b8

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

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.fc36fcae8eb3636c1114.css"></head>
<link rel="stylesheet" href="styles.68c5c110c36114003e31.css"></head>
<body>
<rtl-app></rtl-app>
<script src="runtime.f5b171b45657a19a4591.js" defer></script><script src="polyfills-es5.b8e32dec482ae69710a2.js" nomodule defer></script><script src="polyfills.ebf9033c33aa4a5af12a.js" defer></script><script src="main.5bfb336cbdd2b95045e5.js" defer></script></body>
<script src="runtime.4d31ed077d423c51840a.js" defer></script><script src="polyfills-es5.b8e32dec482ae69710a2.js" nomodule defer></script><script src="polyfills.ebf9033c33aa4a5af12a.js" defer></script><script src="main.6fd1544f4bd38f6345b0.js" defer></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,a,i=r[0],c=r[1],l=r[2],p=0,s=[];p<i.length;p++)a=i[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++)0!==o[t[i]]&&(n=!1);n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={0:0},u=[];function a(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,a),t.l=!0,t.exports}a.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,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+""+({}[e]||e)+"."+{1:"454a80537ee5d2127464",6:"f7ed5a1aaa268c58d3c2",7:"b6519acc9e1e1431ca4d"}[e]+".js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);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 l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,(function(r){return e[r]}).bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="",a.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var f=c;t()}([]);
!function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],p=0,s=[];p<i.length;p++)a=i[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&s.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++)0!==o[t[i]]&&(n=!1);n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={0:0},u=[];function a(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,a),t.l=!0,t.exports}a.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,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+""+({}[e]||e)+"."+{1:"454a80537ee5d2127464",6:"73625eb067fc986239a4",7:"31855585ce9c53edd56d"}[e]+".js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);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 l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,(function(r){return e[r]}).bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="",a.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var f=c;t()}([]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -90,7 +90,7 @@ export class AppComponent implements OnInit, AfterViewInit, OnDestroy {
}
// START: Workaround to add adjust container width initially
this.sideNavigation.toggle();
setTimeout(() => { this.sideNavigation.toggle(); }, 50);
setTimeout(() => { this.sideNavigation.toggle(); }, 500);
if (this.settings.menuType === 'COMPACT' || this.settings.menuType === 'MINI') {
this.sideNavigation.toggle(); // To dynamically update the width to 100% after side nav is closed
setTimeout(() => { this.sideNavigation.toggle(); }, 100);

@ -30,5 +30,8 @@
</div>
</div>
<ng-template #noChannelBlock>
<div fxLayout="column" fxFlex="100" class="w-100 mt-2">No channels available.</div>
<div fxLayout="row" fxFlex="10" fxLayoutAlign="space-between center" class="w-100 mt-1">
No channels available.
<button fxFlex="33" fxLayoutAlign="center center" mat-stroked-button color="primary" (click)="goToChannels()" tabindex="1">Open Channel</button>
</div>
</ng-template>

@ -1,4 +1,5 @@
import { Component, OnChanges, Input } from '@angular/core';
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
import { faBalanceScale, faDumbbell } from '@fortawesome/free-solid-svg-icons';
import { ChannelCL } from '../../../shared/models/clModels';
@ -8,15 +9,17 @@ import { ChannelCL } from '../../../shared/models/clModels';
templateUrl: './channel-capacity-info.component.html',
styleUrls: ['./channel-capacity-info.component.scss']
})
export class CLChannelCapacityInfoComponent implements OnChanges {
export class CLChannelCapacityInfoComponent {
public faBalanceScale = faBalanceScale;
public faDumbbell = faDumbbell;
@Input() channelBalances: {localBalance: number, remoteBalance: number, balancedness: string};
@Input() allChannels: ChannelCL[];
@Input() sortBy: string = 'Balance Score';
constructor() {}
constructor(private router: Router) {}
ngOnChanges() {}
goToChannels() {
this.router.navigateByUrl('/lnd/peerschannels');
}
}

@ -20,5 +20,8 @@
</div>
</div>
<ng-template #noChannelBlock>
<div fxLayout="column" fxFlex="100" class="w-100 mt-2">No channels available.</div>
<div fxLayout="row" fxFlex="10" fxLayoutAlign="space-between center" class="w-100 mt-1">
No channels available.
<button fxFlex="33" fxLayoutAlign="center center" mat-stroked-button color="primary" (click)="goToChannels()" tabindex="1">Open Channel</button>
</div>
</ng-template>

@ -1,4 +1,5 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
import { ChannelCL } from '../../../shared/models/clModels';
@ -12,6 +13,10 @@ export class CLChannelLiquidityInfoComponent {
@Input() totalLiquidity: number;
@Input() allChannels: ChannelCL[];
constructor() {}
constructor(private router: Router) {}
goToChannels() {
this.router.navigateByUrl('/lnd/peerschannels');
}
}

@ -169,8 +169,8 @@ export class CLHomeComponent implements OnInit, OnDestroy {
this.channelsStatus = {
active: { channels: rtlStore.information.num_active_channels, capacity: rtlStore.localRemoteBalance.localBalance },
inactive: { channels: rtlStore.information.num_inactive_channels, capacity: rtlStore.localRemoteBalance.pendingBalance | 0 },
pending: { channels: rtlStore.information.num_pending_channels, capacity: rtlStore.localRemoteBalance.inactiveBalance | 0 }
pending: { channels: rtlStore.information.num_pending_channels, capacity: rtlStore.localRemoteBalance.pendingBalance | 0 },
inactive: { channels: rtlStore.information.num_inactive_channels, capacity: rtlStore.localRemoteBalance.inactiveBalance | 0 }
};
this.totalInboundLiquidity = 0;
this.totalOutboundLiquidity = 0;

@ -20,7 +20,7 @@
</mat-form-field>
<div fxFlex="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="3" type="button" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="4" type="submit" (click)="onLookup()">Lookup</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="4" type="submit" (click)="onLookup()">Lookup</button>
</div>
</form>
<div fxFlex="100" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch" *ngIf="flgSetLookupValue" class="w-100 mt-2">

@ -29,30 +29,32 @@
<mat-divider class="my-1"></mat-divider>
</div>
</div>
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start" class="my-1">
<h4 fxFlex="100" fxLayoutAlign="start" class="font-bold-500">Addresses</h4>
<div perfectScrollbar class="table-container mt-2" fxFlex="100">
<table mat-table [dataSource]="addresses" matSort class="overflow-auto">
<div fxLayout="column" class="mt-2">
<h4 fxFlex="100" fxLayoutAlign="start" class="font-bold-500 mb-1">Addresses</h4>
<div perfectScrollbar fxLayout="row" fxLayoutAlign="start center" fxFlex="100" class="table-container">
<table mat-table #table [dataSource]="addresses" matSort class="overflow-auto">
<ng-container matColumnDef="type">
<mat-header-cell *matHeaderCellDef mat-sort-header>Type</mat-header-cell>
<mat-cell *matCellDef="let address">
<div>{{address?.type}}</div>
</mat-cell>
<th mat-header-cell *matHeaderCellDef mat-sort-header>Type</th>
<td mat-cell *matCellDef="let address"> {{address?.type}} </td>
</ng-container>
<ng-container matColumnDef="address">
<mat-header-cell *matHeaderCellDef mat-sort-header>Address</mat-header-cell>
<mat-cell *matCellDef="let address">
<div>{{address?.address}}</div>
</mat-cell>
<th mat-header-cell *matHeaderCellDef mat-sort-header>Address</th>
<td mat-cell *matCellDef="let address"> {{address?.address}} </td>
</ng-container>
<ng-container matColumnDef="port">
<mat-header-cell *matHeaderCellDef mat-sort-header>Port</mat-header-cell>
<mat-cell *matCellDef="let address">
<div>{{address?.port}}</div>
</mat-cell>
<th mat-header-cell *matHeaderCellDef mat-sort-header>Port</th>
<td mat-cell *matCellDef="let address"> {{address?.port}} </td>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns;"></mat-header-row>
<mat-row fxLayoutAlign="stretch stretch" *matRowDef="let row; columns: displayedColumns;"></mat-row>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pl-1"><span fxLayoutAlign="end center">Actions</span></th>
<td mat-cell *matCellDef="let address" class="pl-1">
<span fxLayoutAlign="end center">
<button mat-stroked-button color="primary" type="button" tabindex="1" rtlClipboard [payload]="lookupResult.nodeid + '@' + address.address + ':' + address.port" (copied)="onCopyNodeURI($event)">Copy Node URI</button>
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
</div>

@ -1,7 +1,8 @@
import { Component, OnInit, Input, ViewChild } from '@angular/core';
import { MatTableDataSource, MatSort } from '@angular/material';
import { MatTableDataSource, MatSort, MatSnackBar } from '@angular/material';
import { LookupNodeCL } from '../../../shared/models/clModels';
import { LoggerService } from '../../../shared/services/logger.service';
@Component({
selector: 'rtl-cl-node-lookup',
@ -12,9 +13,9 @@ export class CLNodeLookupComponent implements OnInit {
@ViewChild(MatSort, { static: true }) sort: MatSort;
@Input() lookupResult: LookupNodeCL;
public addresses: any;
public displayedColumns = ['type', 'address', 'port'];
public displayedColumns = ['type', 'address', 'port', 'actions'];
constructor() { }
constructor(private logger: LoggerService, private snackBar: MatSnackBar) { }
ngOnInit() {
this.addresses = this.lookupResult.addresses ? new MatTableDataSource<any>([...this.lookupResult.addresses]) : new MatTableDataSource([]);
@ -22,4 +23,9 @@ export class CLNodeLookupComponent implements OnInit {
this.addresses.sort = this.sort;
}
onCopyNodeURI(payload: string) {
this.snackBar.open('Node URI copied.');
this.logger.info('Copied Text: ' + payload);
}
}

@ -8,7 +8,7 @@
</mat-select>
</mat-form-field>
<div class="mt-2" fxFlex="48" fxFlex.gt-md="25">
<button fxFlex="100" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onGenerateAddress()" tabindex="2" class="top-minus-15px">Generate Address</button>
<button fxFlex="100" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onGenerateAddress()" tabindex="2" class="top-minus-15px">Generate Address</button>
</div>
</div>
</div>

@ -1,6 +1,5 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { Component, OnInit } from '@angular/core';
import { take } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import { ADDRESS_TYPES } from '../../../shared/services/consts-enums-functions';
@ -15,11 +14,10 @@ import * as fromRTLReducer from '../../../store/rtl.reducers';
templateUrl: './on-chain-receive.component.html',
styleUrls: ['./on-chain-receive.component.scss']
})
export class CLOnChainReceiveComponent implements OnInit, OnDestroy {
export class CLOnChainReceiveComponent implements OnInit {
public addressTypes = ADDRESS_TYPES;
public selectedAddressType = ADDRESS_TYPES[0];
public newAddress = '';
private unSubs: Array<Subject<void>> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];
constructor(private store: Store<fromRTLReducer.RTLState>, private lndEffects: CLEffects) {}
@ -29,7 +27,7 @@ export class CLOnChainReceiveComponent implements OnInit, OnDestroy {
this.store.dispatch(new RTLActions.OpenSpinner('Getting New Address...'));
this.store.dispatch(new RTLActions.GetNewAddressCL(this.selectedAddressType));
this.lndEffects.setNewAddressCL
.pipe(takeUntil(this.unSubs[0]))
.pipe(take(1))
.subscribe(newAddress => {
this.newAddress = newAddress;
this.store.dispatch(new RTLActions.OpenAlert({
@ -43,11 +41,4 @@ export class CLOnChainReceiveComponent implements OnInit, OnDestroy {
});
}
ngOnDestroy() {
this.unSubs.forEach(completeSub => {
completeSub.next();
completeSub.complete();
});
}
}

@ -32,6 +32,6 @@
<div fxLayout="column" fxFlex="100" fxFlex.gt-sm="40" fxLayout.gt-sm="row wrap" fxLayoutAlign="start stretch" fxLayoutAlign.gt-sm="space-between start"></div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="7" type="reset">Clear Fields</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="8">Send Funds</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="8">Send Funds</button>
</div>
</form>

@ -46,7 +46,7 @@
<div *ngIf="showAdvanced" fxLayout="column" fxFlex="100" fxFlex.gt-sm="40" fxLayout.gt-sm="row wrap" fxLayoutAlign="start stretch" fxLayoutAlign.gt-sm="space-between start"></div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="10" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onOpenChannel()" type="submit" tabindex="11">Open Channel</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onOpenChannel()" type="submit" tabindex="11">Open Channel</button>
</div>
</form>
<rtl-cl-channels-tables fxLayout="row" fxFlex="100"></rtl-cl-channels-tables>

@ -6,7 +6,7 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="3" (click)="onConnectPeer()">Add Peer</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="3" (click)="onConnectPeer()">Add Peer</button>
</div>
</form>
<div fxLayout="column">

@ -24,7 +24,7 @@
</div>
<div fxFlex="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="3" type="reset" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="4">Fetch Events</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="4">Fetch Events</button>
</div>
</form> -->
<div *ngIf="filteredData" fxLayout="row" fxFlex="100" [ngClass]="{'error-border w-100 routing-tabs-block': flgLoading[0]==='error', 'w-100 routing-tabs-block': true}">

@ -28,18 +28,18 @@
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="40" fxLayoutAlign="space-between start" *ngIf="showDetails" class="mt-2">
<button fxFlex="31" fxLayoutAlign="center center" mat-stroked-button color="warn" tabindex="11" type="button" (click)="onDeleteExpiredInvoices()">Delete Expired</button>
<button fxFlex="31" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="7" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="31" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="8">Create Invoice</button>
<button fxFlex="31" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="8">Create Invoice</button>
</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch" *ngIf="!showDetails" class="mt-1">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="9" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="10">Create Invoice</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="10">Create Invoice</button>
</div>
</form>
<div fxLayout="column" fxLayoutAlign="start stretch" [ngClass]="{'display-none': !showDetails}">
<div fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="start center" fxLayoutAlign="start stretch" class="padding-gap-x page-sub-title-container mt-2">
<div fxFlex="70">
<fa-icon [icon]="faHistory" class="page-title-img mr-1"></fa-icon>
<span class="page-title">Payments History</span>
<span class="page-title">Invoices History</span>
</div>
<mat-form-field fxFlex="30">
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">

@ -7,11 +7,11 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" *ngIf="showDetails" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch" *ngIf="!showDetails" class="mt-1">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
</div>
</form>
<div fxLayout="column" fxLayoutAlign="start stretch" [ngClass]="{'display-none': !showDetails}">

@ -14,7 +14,7 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="3" type="reset" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="4">Query Route</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="4">Query Route</button>
</div>
</form>
<div fxLayout="row" fxLayoutAlign="start center" class="padding-gap-x page-sub-title-container mt-2 mb-1">

@ -10,7 +10,7 @@
</div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="1" (click)="onVerifyChannels({})">Verify All</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="2" (click)="onBackupChannels({})">Backup All</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="2" (click)="onBackupChannels({})">Backup All</button>
</div>
</div>
<div fxLayout="column" fxLayout.gt-xs="row" fxLayoutAlign.gt-xs="start center" fxLayoutAlign="start stretch" class="padding-gap-x page-sub-title-container mt-2">

@ -2,7 +2,7 @@
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" *ngIf="allRestoreExists">
<h4 fxFlex="100">Restore folder location: {{selNode.channelBackupPath}}/restore</h4>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="start start" class="mt-2">
<button fxFlex="48" fxFlex.gt-sm="24" fxFlex.gt-md="20" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="1" (click)="onRestoreChannels({})">Restore All</button>
<button fxFlex="48" fxFlex.gt-sm="24" fxFlex.gt-md="20" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="1" (click)="onRestoreChannels({})">Restore All</button>
</div>
</div>
<div fxLayout="column" fxLayoutAlign="space-between start" fxLayout.gt-md="row wrap" *ngIf="!allRestoreExists && (!channels || channels.data.length<=0)">

@ -30,5 +30,8 @@
</div>
</div>
<ng-template #noChannelBlock>
<div fxLayout="column" fxFlex="100" class="w-100 mt-2">No channels available.</div>
<div fxLayout="row" fxFlex="10" fxLayoutAlign="space-between center" class="w-100 mt-1">
No channels available.
<button fxFlex="33" fxLayoutAlign="center center" mat-stroked-button color="primary" (click)="goToChannels()" tabindex="1">Open Channel</button>
</div>
</ng-template>

@ -1,4 +1,5 @@
import { Component, OnChanges, Input } from '@angular/core';
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
import { faBalanceScale, faDumbbell } from '@fortawesome/free-solid-svg-icons';
import { Channel } from '../../../shared/models/lndModels';
@ -8,15 +9,17 @@ import { Channel } from '../../../shared/models/lndModels';
templateUrl: './channel-capacity-info.component.html',
styleUrls: ['./channel-capacity-info.component.scss']
})
export class ChannelCapacityInfoComponent implements OnChanges {
export class ChannelCapacityInfoComponent {
public faBalanceScale = faBalanceScale;
public faDumbbell = faDumbbell;
@Input() channelBalances: {localBalance: number, remoteBalance: number, balancedness: string};
@Input() allChannels: Channel[];
@Input() sortBy: string = 'Balance Score';
constructor() {}
constructor(private router: Router) {}
ngOnChanges() {}
goToChannels() {
this.router.navigateByUrl('/lnd/peerschannels');
}
}

@ -20,5 +20,8 @@
</div>
</div>
<ng-template #noChannelBlock>
<div fxLayout="column" fxFlex="100" class="w-100 mt-2">No channels available.</div>
<div fxLayout="row" fxFlex="10" fxLayoutAlign="space-between center" class="w-100 mt-1">
No channels available.
<button fxFlex="33" fxLayoutAlign="center center" mat-stroked-button color="primary" (click)="goToChannels()" tabindex="1">Open Channel</button>
</div>
</ng-template>

@ -1,4 +1,5 @@
import { Component, Input } from '@angular/core';
import { Router } from '@angular/router';
import { Channel } from '../../../shared/models/lndModels';
@ -12,5 +13,9 @@ export class ChannelLiquidityInfoComponent {
@Input() totalLiquidity: number;
@Input() allChannels: Channel[];
constructor() {}
constructor(private router: Router) {}
goToChannels() {
this.router.navigateByUrl('/lnd/peerschannels');
}
}

@ -20,7 +20,7 @@
</mat-form-field>
<div fxFlex="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="3" type="button" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="4" type="submit" (click)="onLookup()">Lookup</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="4" type="submit" (click)="onLookup()">Lookup</button>
</div>
</form>
<div fxFlex="100" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch" *ngIf="lookupValue && flgSetLookupValue" class="w-100 mt-2">

@ -29,20 +29,28 @@
<mat-divider class="my-1"></mat-divider>
</div>
</div>
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start" class="my-1">
<h4 fxFlex="100" fxLayoutAlign="start" class="font-bold-500">Addresses</h4>
<div perfectScrollbar class="table-container mt-2" fxFlex="100">
<table mat-table [dataSource]="lookupResult.node.addresses" matSort class="overflow-auto">
<div fxLayout="column" class="mt-2">
<h4 fxFlex="100" fxLayoutAlign="start" class="font-bold-500 mb-1">Addresses</h4>
<div perfectScrollbar fxLayout="row" fxLayoutAlign="start center" fxFlex="100" class="table-container">
<table mat-table #table [dataSource]="lookupResult.node.addresses" matSort>
<ng-container matColumnDef="network">
<mat-header-cell *matHeaderCellDef mat-sort-header>Network</mat-header-cell>
<mat-cell *matCellDef="let address"><div>{{address?.network}}</div></mat-cell>
<th mat-header-cell *matHeaderCellDef mat-sort-header>Network</th>
<td mat-cell *matCellDef="let address"> {{address?.network}} </td>
</ng-container>
<ng-container matColumnDef="addr">
<mat-header-cell *matHeaderCellDef mat-sort-header>Address</mat-header-cell>
<mat-cell *matCellDef="let address"><div>{{address?.addr}}</div></mat-cell>
<th mat-header-cell *matHeaderCellDef mat-sort-header>Address</th>
<td mat-cell *matCellDef="let address"> {{address?.addr}} </td>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns;"></mat-header-row>
<mat-row fxLayoutAlign="stretch stretch" *matRowDef="let row; columns: displayedColumns;"></mat-row>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef class="pl-1"><span fxLayoutAlign="end center">Actions</span></th>
<td mat-cell *matCellDef="let address" class="pl-1">
<span fxLayoutAlign="end center">
<button mat-stroked-button color="primary" type="button" tabindex="1" rtlClipboard [payload]="lookupResult.node.pub_key + '@' + address.addr" (copied)="onCopyNodeURI($event)">Copy Node URI</button>
</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns;"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
</div>
</div>

@ -1,6 +1,8 @@
import { Component, OnInit, Input } from '@angular/core';
import { MatSnackBar } from '@angular/material';
import { GraphNode } from '../../../shared/models/lndModels';
import { LoggerService } from '../../../shared/services/logger.service';
@Component({
selector: 'rtl-node-lookup',
@ -9,10 +11,14 @@ import { GraphNode } from '../../../shared/models/lndModels';
})
export class NodeLookupComponent implements OnInit {
@Input() lookupResult: GraphNode;
public displayedColumns = ['network', 'addr'];
public displayedColumns = ['network', 'addr', 'actions'];
constructor() { }
constructor(private logger: LoggerService, private snackBar: MatSnackBar) { }
ngOnInit() {}
onCopyNodeURI(payload: string) {
this.snackBar.open('Node URI copied.');
this.logger.info('Copied Text: ' + payload);
}
}

@ -8,7 +8,7 @@
<mat-card-content fxLayout="column" fxFlex="100" fxLayoutAlign="start start" class="card-content-gap">
<div fxFlex="30" fxLayoutAlign="space-between center" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="1" (click)="onStopMonitor()">Stop Monitor</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="2" (click)="onStartMonitor()">Start Monitor</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="2" (click)="onStartMonitor()">Start Monitor</button>
</div>
<div fxLayout="column" fxLayoutAlign="center start" class="mt-2">
<span fxFlex="100" fxLayoutAlign="center center" *ngFor="let log of loopMonitorLogs" class="loop-monitor-logs">

@ -8,7 +8,7 @@
</mat-select>
</mat-form-field>
<div class="mt-2" fxFlex="48" fxFlex.gt-md="25">
<button fxFlex="100" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onGenerateAddress()" tabindex="2" class="top-minus-15px">Generate Address</button>
<button fxFlex="100" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onGenerateAddress()" tabindex="2" class="top-minus-15px">Generate Address</button>
</div>
</div>
</div>

@ -1,6 +1,5 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { Component, OnInit } from '@angular/core';
import { take } from 'rxjs/operators';
import { Store } from '@ngrx/store';
import { AddressType } from '../../../shared/models/lndModels';
@ -16,11 +15,10 @@ import * as fromRTLReducer from '../../../store/rtl.reducers';
templateUrl: './on-chain-receive.component.html',
styleUrls: ['./on-chain-receive.component.scss']
})
export class OnChainReceiveComponent implements OnInit, OnDestroy {
export class OnChainReceiveComponent implements OnInit {
public addressTypes = ADDRESS_TYPES;
public selectedAddressType: AddressType = ADDRESS_TYPES[0];
public newAddress = '';
private unSubs: Array<Subject<void>> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];
constructor(private store: Store<fromRTLReducer.RTLState>, private lndEffects: LNDEffects) {}
@ -30,7 +28,7 @@ export class OnChainReceiveComponent implements OnInit, OnDestroy {
this.store.dispatch(new RTLActions.OpenSpinner('Getting New Address...'));
this.store.dispatch(new RTLActions.GetNewAddress(this.selectedAddressType));
this.lndEffects.setNewAddress
.pipe(takeUntil(this.unSubs[0]))
.pipe(take(1))
.subscribe(newAddress => {
this.newAddress = newAddress;
this.store.dispatch(new RTLActions.OpenAlert({
@ -44,11 +42,4 @@ export class OnChainReceiveComponent implements OnInit, OnDestroy {
});
}
ngOnDestroy() {
this.unSubs.forEach(completeSub => {
completeSub.next();
completeSub.complete();
});
}
}

@ -33,7 +33,7 @@
<div fxLayout="column" fxFlex="100" fxFlex.gt-sm="40" fxLayout.gt-sm="row wrap" fxLayoutAlign="start stretch" fxLayoutAlign.gt-sm="space-between start"></div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="7" type="reset">Clear Fields</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="8">Send Funds</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="8">Send Funds</button>
</div>
</form>
<ng-template #sweepAllBlock>
@ -62,7 +62,7 @@
<div>
<div fxFlex="100" fxFlex.gt-sm="30" fxLayout="row" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="7" type="reset">Clear Fields</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="8">Send Funds</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="8">Send Funds</button>
</div>
</div>
</form>

@ -52,7 +52,7 @@
</div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="10" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onOpenChannel()" type="submit" tabindex="11">Open Channel</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onOpenChannel()" type="submit" tabindex="11">Open Channel</button>
</div>
</form>
<rtl-channels-tables fxLayout="row" fxFlex="100"></rtl-channels-tables>

@ -14,6 +14,7 @@ import { LNDEffects } from '../../../../store/lnd.effects';
import { RTLEffects } from '../../../../../store/rtl.effects';
import * as RTLActions from '../../../../../store/rtl.actions';
import * as fromRTLReducer from '../../../../../store/rtl.reducers';
import { ChannelLookupComponent } from '../../../../lookups/channel-lookup/channel-lookup.component';
@Component({
selector: 'rtl-channel-open-table',
@ -118,7 +119,7 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
]
}}));
this.rtlEffects.closeConfirm
.pipe(takeUntil(this.unSubs[2]))
.pipe(takeUntil(this.unSubs[1]))
.subscribe(confirmRes => {
if (confirmRes) {
const base_fee = confirmRes[0].inputValue;
@ -162,7 +163,7 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
}}));
});
this.rtlEffects.closeConfirm
.pipe(takeUntil(this.unSubs[4]))
.pipe(takeUntil(this.unSubs[2]))
.subscribe(confirmRes => {
if (confirmRes) {
const base_fee = confirmRes[0].inputValue;
@ -176,6 +177,24 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
this.applyFilter();
}
// onGraphLookup(channel:Channel) {
// this.store.dispatch(new RTLActions.ChannelLookup(channel.chan_id));
// this.actions$
// .pipe(
// takeUntil(this.unSubs[3]),
// filter((action) => (action.type === RTLActions.SET_LOOKUP))
// ).subscribe((resLookup: RTLActions.SetLookup) => {
// if(resLookup.type === RTLActions.SET_LOOKUP) {
// console.warn(JSON.parse(JSON.stringify(resLookup.payload)));
// this.store.dispatch(new RTLActions.OpenAlert({ data: {
// lookupResult: JSON.parse(JSON.stringify(resLookup.payload)),
// newlyAdded: false,
// component: ChannelLookupComponent
// }}));
// }
// });
// }
onChannelClose(channelToClose: Channel) {
this.store.dispatch(new RTLActions.OpenConfirmation({ data: {
type: AlertTypeEnum.CONFIRM,
@ -185,7 +204,7 @@ export class ChannelOpenTableComponent implements OnInit, OnDestroy {
yesBtnText: 'Close Channel'
}}));
this.rtlEffects.closeConfirm
.pipe(takeUntil(this.unSubs[5]))
.pipe(takeUntil(this.unSubs[4]))
.subscribe(confirmRes => {
if (confirmRes) {
this.store.dispatch(new RTLActions.OpenSpinner('Closing Channel...'));

@ -6,7 +6,7 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="3" (click)="onConnectPeer()">Add Peer</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="3" (click)="onConnectPeer()">Add Peer</button>
</div>
</form>
<div fxLayout="column">

@ -23,7 +23,7 @@
</div>
<div fxFlex="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="3" type="reset" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="4">Fetch Events</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="4">Fetch Events</button>
</div>
</form>
<div fxLayout="row" fxFlex="100" [ngClass]="{'error-border w-100 routing-tabs-block': flgLoading[0]==='error', 'w-100 routing-tabs-block': true}">

@ -22,11 +22,11 @@
</div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between start" *ngIf="showDetails" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="5" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="6">Create Invoice</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="6">Create Invoice</button>
</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch" *ngIf="!showDetails" class="mt-1">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="5" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="6">Create Invoice</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onAddInvoice(addInvoiceForm)" tabindex="6">Create Invoice</button>
</div>
</form>
<div fxLayout="column" fxLayoutAlign="start stretch" *ngIf="showDetails">

@ -33,11 +33,11 @@
</div>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" *ngIf="showDetails" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch" *ngIf="!showDetails" class="mt-1">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onSendPayment();" tabindex="3">Send Payment</button>
</div>
</form>
<div fxLayout="column" fxLayoutAlign="start stretch" [ngClass]="{'display-none': !showDetails}">

@ -14,7 +14,7 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="3" type="reset" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="4">Query Route</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="4">Query Route</button>
</div>
</form>
<div fxLayout="row" fxLayoutAlign="start center" class="padding-gap-x page-sub-title-container mt-2 mb-1">

@ -4,7 +4,7 @@
<div fxFlex="100" fxLayoutAlign="start">Warning: Your connection is unsecure, it's not safe to generate private keys over this connection.Are you sure you want to proceed?</div>
<div fxFlex="100" fxFlex.gt-sm="35" fxLayout="row wrap" fxLayoutAlign="space-between start" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="1" type="reset" (click)="proceed=false;warnRes=true">Do Not Proceed</button>
<button mat-raised-button fxFlex="48" color="primary" type="submit" (click)="proceed=true;warnRes=true" tabindex="2">Proceed</button>
<button mat-flat-button fxFlex="48" color="primary" type="submit" (click)="proceed=true;warnRes=true" tabindex="2">Proceed</button>
</div>
</form>
</div>
@ -33,7 +33,7 @@
<mat-icon class="validation-error-icon red">cancel</mat-icon>Passwords do not match.
</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center" class="my-2">
<button mat-raised-button color="primary" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25" tabindex="7" type="submit" matStepperNext>Next</button>
<button mat-flat-button color="primary" fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25" tabindex="7" type="submit" matStepperNext>Next</button>
</div>
</form>
</mat-step>
@ -50,7 +50,7 @@
</div>
<div fxLayout.lt-sm="column" fxLayout="row wrap" fxFlex="100" fxFlex.gt-md="40" fxLayoutAlign="space-between space-between" class="mb-2">
<button mat-stroked-button color="primary" fxFlex="48" type="reset" tabindex="10" matStepperPrevious class="mt-1">Back</button>
<button mat-raised-button color="primary" fxFlex="48" tabindex="11" type="submit" matStepperNext class="mt-1">Next</button>
<button mat-flat-button color="primary" fxFlex="48" tabindex="11" type="submit" matStepperNext class="mt-1">Next</button>
</div>
</form>
</mat-step>
@ -67,7 +67,7 @@
<div fxLayout.lt-sm="column" fxLayout="row wrap" fxFlex="100" fxFlex.gt-md="40" fxLayoutAlign="space-between space-between" class="mb-2">
<button fxFlex="48" fxFlex.gt-sm="32" fxLayoutAlign="center center" mat-stroked-button color="warn" tabindex="13" type="reset" (click)="resetData()" class="mt-1">Clear</button>
<button mat-stroked-button fxFlex="48" fxFlex.gt-sm="32" tabindex="14" color="primary" type="button" matStepperPrevious class="mt-1">Back</button>
<button mat-raised-button fxFlex="100" fxFlex.gt-sm="32" color="primary" (click)="onInitWallet()" tabindex="15" type="submit" class="mt-1">Initialize Wallet</button>
<button mat-flat-button fxFlex="100" fxFlex.gt-sm="32" color="primary" (click)="onInitWallet()" tabindex="15" type="submit" class="mt-1">Initialize Wallet</button>
</div>
</form>
</mat-step>
@ -91,7 +91,7 @@
<div fxFlex="100" fxLayoutAlign="start" class="mt-2">The node will be usable only after LND has synced completely with the network.</div>
<div fxFlex="100" fxLayoutAlign="start" class="mt-2">Click continue only after writing down the seed.</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center" class="mt-2">
<button fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25" mat-raised-button color="primary" type="submit" (click)="onGoToHome()" tabindex="16">Go To Home</button>
<button fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25" mat-flat-button color="primary" type="submit" (click)="onGoToHome()" tabindex="16">Go To Home</button>
</div>
</form>
</div>
@ -108,7 +108,7 @@
<div fxFlex="100" fxLayoutAlign="start" class="mt-2">Wallet recovery is done.</div>
<div fxFlex="100" fxLayoutAlign="start" class="mt-2">The node will be usable only after LND has synced completely with the network.</div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center" class="mt-2">
<button fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25" mat-raised-button color="primary" type="submit" (click)="onGoToHome()" tabindex="18">Go To Home</button>
<button fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-md="25" mat-flat-button color="primary" type="submit" (click)="onGoToHome()" tabindex="18">Go To Home</button>
</div>
</form>
</div>

@ -7,7 +7,7 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear Field</button>
<button mat-raised-button fxFlex="48" color="primary" type="submit" (click)="onUnlockWallet()" tabindex="3">Unlock Wallet</button>
<button mat-flat-button fxFlex="48" color="primary" type="submit" (click)="onUnlockWallet()" tabindex="3">Unlock Wallet</button>
</div>
</form>
</div>

@ -39,11 +39,11 @@
</div>
</div>
<div fxLayout="row" fxLayoutAlign="end center">
<button *ngIf="(!showQRField || showQRField == '') && (showCopyName === '')" fxFlex="20" fxLayoutAlign="center center" tabindex="1" autoFocus mat-raised-button color="primary" type="submit" [mat-dialog-close]="false" default>OK</button>
<button *ngIf="(!showQRField || showQRField == '') && (showCopyName === '')" fxFlex="20" fxLayoutAlign="center center" tabindex="1" autoFocus mat-flat-button color="primary" type="submit" [mat-dialog-close]="false" default>OK</button>
<button *ngIf="showCopyName !== ''" fxFlex="20" class="mr-2" fxLayoutAlign="center center" tabindex="1" mat-stroked-button color="primary" type="button" [mat-dialog-close]="false" default>Close</button>
<button *ngIf="showCopyName !== ''" fxFlex="30" fxLayoutAlign="center center" autoFocus mat-raised-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="showCopyField" (copied)="onCopyField($event)">Copy {{showCopyName}}</button>
<button *ngIf="showCopyName !== ''" fxFlex="30" fxLayoutAlign="center center" autoFocus mat-flat-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="showCopyField" (copied)="onCopyField($event)">Copy {{showCopyName}}</button>
<button *ngIf="showQRField !== ''" fxFlex="20" class="mr-2" fxLayoutAlign="center center" tabindex="1" class="mr-2" mat-stroked-button color="primary" type="button" [mat-dialog-close]="false" default>Close</button>
<button *ngIf="showQRField !== ''" fxFlex="30" fxLayoutAlign="center center" autoFocus mat-raised-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="showQRField" (copied)="onCopyField($event)">Copy {{showQRName}}</button>
<button *ngIf="showQRField !== ''" fxFlex="30" fxLayoutAlign="center center" autoFocus mat-flat-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="showQRField" (copied)="onCopyField($event)">Copy {{showQRName}}</button>
</div>
</div>
</mat-card-content>

@ -38,8 +38,8 @@
</div>
<div fxLayout="row" fxLayoutAlign="end center">
<button autoFocus mat-stroked-button color="primary" fxFlex="20" type="reset" fxLayoutAlign="center center" class="mr-2" (click)="onClose(false)" tabindex="2" default>{{noBtnText}}</button>
<button *ngIf="flgShowInput" mat-raised-button color="primary" fxLayoutAlign="center center" fxFlex="25" type="submit" tabindex="3" (click)="onClose(getInputs)">{{yesBtnText}}</button>
<button *ngIf="!flgShowInput" mat-raised-button color="primary" fxLayoutAlign="center center" fxFlex="25" type="submit" tabindex="4" (click)="onClose(true)">{{yesBtnText}}</button>
<button *ngIf="flgShowInput" mat-flat-button color="primary" fxLayoutAlign="center center" fxFlex="25" type="submit" tabindex="3" (click)="onClose(getInputs)">{{yesBtnText}}</button>
<button *ngIf="!flgShowInput" mat-flat-button color="primary" fxLayoutAlign="center center" fxFlex="25" type="submit" tabindex="4" (click)="onClose(true)">{{yesBtnText}}</button>
</div>
</form>
</mat-card-content>

@ -19,7 +19,7 @@
<span class="word-break">{{data.message.URL}}</span>
<mat-divider class="w-100 my-1"></mat-divider>
<div fxLayout="row" fxLayoutAlign="end center">
<button fxLayoutAlign="center center" tabindex="1" autoFocus mat-raised-button color="primary" fxFlex="20" type="submit" [mat-dialog-close]="false" default>OK</button>
<button fxLayoutAlign="center center" tabindex="1" autoFocus mat-flat-button color="primary" fxFlex="20" type="submit" [mat-dialog-close]="false" default>OK</button>
</div>
</div>
</mat-card-content>

@ -82,7 +82,7 @@
<p *ngIf="!showAdvanced; else hideAdvancedText">Show Advanced</p>
<ng-template #hideAdvancedText><p>Hide Advanced</p></ng-template>
</button>
<button autoFocus fxFlex="50" fxFlex.gt-sm="33" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="invoice.bolt11" (copied)="onCopyPayment($event)">{{screenSize === screenSizeEnum.XS ? 'Copy Bolt11' : 'Copy Bolt11'}}</button>
<button autoFocus fxFlex="50" fxFlex.gt-sm="33" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="invoice.bolt11" (copied)="onCopyPayment($event)">{{screenSize === screenSizeEnum.XS ? 'Copy Bolt11' : 'Copy Bolt11'}}</button>
</div>
</div>
</mat-card-content>

@ -80,7 +80,7 @@
<p *ngIf="!showAdvanced; else hideAdvancedText">Show Advanced</p>
<ng-template #hideAdvancedText><p>Hide Advanced</p></ng-template>
</button>
<button autoFocus fxFlex="50" fxFlex.gt-sm="33" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="invoice.payment_request" (copied)="onCopyPayment($event)">{{screenSize === screenSizeEnum.XS ? 'Copy Payment' : 'Copy Payment Request'}}</button>
<button autoFocus fxFlex="50" fxFlex.gt-sm="33" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="2" type="submit" rtlClipboard [payload]="invoice.payment_request" (copied)="onCopyPayment($event)">{{screenSize === screenSizeEnum.XS ? 'Copy Payment' : 'Copy Payment Request'}}</button>
</div>
</div>
</mat-card-content>

@ -30,7 +30,7 @@
</div>
<mat-divider class="w-100 my-1"></mat-divider>
<div class="mt-2" fxLayout="row" fxLayoutAlign="end center">
<button autoFocus fxFlex="60" fxFlex.gt-sm="50" fxFlex.gt-md="33" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="1" type="submit" rtlClipboard [payload]="address" (copied)="onCopyAddress($event)">Copy Address</button>
<button autoFocus fxFlex="60" fxFlex.gt-sm="50" fxFlex.gt-md="33" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="1" type="submit" rtlClipboard [payload]="address" (copied)="onCopyAddress($event)">Copy Address</button>
</div>
</div>
</mat-card-content>

@ -78,11 +78,11 @@
<div *ngIf="newlyAdded" fxLayoutAlign="space-between center" fxFlex="60">
<button fxFlex="33" fxLayoutAlign="center center" mat-stroked-button color="warn" (click)="onClose()" tabindex="7">Do It Later</button>
<button fxFlex="32" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="8" type="reset" (click)="resetData()">Clear Field</button>
<button autoFocus fxFlex="33" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="9">Open Channel</button>
<button autoFocus fxFlex="33" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="9">Open Channel</button>
</div>
<div *ngIf="!newlyAdded" fxLayout="row" fxLayoutAlign="space-between stretch" fxFlex="30" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="7" type="reset" (click)="resetData()">Clear Field</button>
<button autoFocus fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="8">Open Channel</button>
<button autoFocus fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="8">Open Channel</button>
</div>
</div>
</form>

@ -85,11 +85,11 @@
<div *ngIf="newlyAdded" fxLayoutAlign="space-between center" fxFlex="60">
<button fxFlex="33" fxLayoutAlign="center center" mat-stroked-button color="warn" (click)="onClose()" tabindex="7">Do It Later</button>
<button fxFlex="32" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="8" type="reset" (click)="resetData()">Clear Field</button>
<button autoFocus fxFlex="33" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="9">Open Channel</button>
<button autoFocus fxFlex="33" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="9">Open Channel</button>
</div>
<div *ngIf="!newlyAdded" fxLayout="row" fxLayoutAlign="space-between stretch" fxFlex="30" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="7" type="reset" (click)="resetData()">Clear Field</button>
<button autoFocus fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" type="submit" tabindex="8">Open Channel</button>
<button autoFocus fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" type="submit" tabindex="8">Open Channel</button>
</div>
</div>
</form>

@ -32,7 +32,7 @@
</div>
<mat-divider class="w-100 my-1"></mat-divider>
<div class="mt-2" fxLayout="row" fxLayoutAlign="end center">
<button autoFocus fxFlex="60" fxFlex.gt-sm="33" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="2"
<button autoFocus fxFlex="60" fxFlex.gt-sm="33" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="2"
type="submit" rtlClipboard payload="{{selInfoType.infoID === 1 ? information.uris[0] : information.identity_pubkey}}" (copied)="onCopyPubkey($event)">Copy {{selInfoType.infoKey}}</button>
</div>
</div>

@ -8,7 +8,7 @@
<div fxLayout="column" fxLayoutAlign="start start">
<div class="box-text">{{error.errorMessage}}</div>
<span fxLayout="row" fxLayoutAlign="center" fxFlex="80">
<button mat-raised-button color="primary" class="mt-2" type="button" (click)="goToHelp()">Go To Help</button>
<button mat-flat-button color="primary" class="mt-2" type="button" (click)="goToHelp()">Go To Help</button>
</span>
</div>
</mat-card-content>

@ -6,7 +6,7 @@
<div fxLayout="row" fxFlex="100" class="padding-gap-x" fxLayoutAlign="start start">
<div fxLayout="column" fxFlex="100">
<div fxFlex="100" *ngFor="let helpTopic of helpTopics">
<mat-expansion-panel class="flat-expansion-panel help-expansion mb-2px">
<mat-expansion-panel class="flat-expansion-panel help-expansion mb-2px" *ngIf="helpTopic.help.lnImplementation === 'ALL' || helpTopic.help.lnImplementation === selNode.lnImplementation">
<mat-expansion-panel-header>
<mat-panel-title>{{helpTopic.help.question}}</mat-panel-title>
</mat-expansion-panel-header>

@ -32,7 +32,8 @@ export class HelpComponent implements OnInit, OnDestroy {
'3. Wait for the balance to be confirmed on-chain before proceeding further.\n' +
'3. Connecting with network peers and opening channels is next.\n',
link: 'onchain',
linkCaption: 'On-Chain page'
linkCaption: 'On-Chain page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Connect with peers',
@ -46,7 +47,8 @@ export class HelpComponent implements OnInit, OnDestroy {
' b. Open Channel - Open channel with the peer.\n' +
' c. Disconnect - Disconnect from the peer.\n',
link: 'peerschannels',
linkCaption: 'Peers/Channels page'
linkCaption: 'Peers/Channels page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Opening Channels',
@ -61,7 +63,9 @@ export class HelpComponent implements OnInit, OnDestroy {
'4. Track the pending open channels under the "Pending" tab . \n' +
'5. Wait for the channel to be confirmed. Only a confimed channel can be used for payments or routing. \n',
link: 'peerschannels',
linkCaption: 'Peers/Channels page'}));
linkCaption: 'Peers/Channels page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Channel Management',
answer: 'Channel maintenance and balance score.\n' +
@ -76,7 +80,8 @@ export class HelpComponent implements OnInit, OnDestroy {
' b. A perfectly balanced channel has a score of one, where as a completely lopsided one has a score of zero.\n' +
' c. The formula for calculating the score is "1 - abs((local bal - remote bal)/total bal)".\n',
link: 'peerschannels',
linkCaption: 'Peers/Channels page'
linkCaption: 'Peers/Channels page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Lightning Transactions - Payments',
@ -87,7 +92,8 @@ export class HelpComponent implements OnInit, OnDestroy {
' 2. Advanced option # 1 (LND only) - Specify a limit on the routing fee which you are willing to pay, for the payment.\n' +
' 3. Advanced option # 2 (LND only) - Specify the outgoing channel which you want the payment to go through.\n',
link: 'transactions',
linkCaption: 'Transactions page'
linkCaption: 'Transactions page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Lightning Transactions - Invoices',
@ -98,7 +104,8 @@ export class HelpComponent implements OnInit, OnDestroy {
' 2. Expiry - The time period, after which the invoice will be invalid.\n' +
' 3. Private Routing Hints - Generate an invoice with routing hints for private channels.\n',
link: 'transactions',
linkCaption: 'Transactions page'
linkCaption: 'Transactions page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Lightning Transactions - Query Route',
@ -108,10 +115,11 @@ export class HelpComponent implements OnInit, OnDestroy {
' 1. Destination Pubkey - Pubkey of the node, you want to send the payment to.\n' +
' 2. Amount - Amount in Sats, which you want to send to the node.\n',
link: 'transactions',
linkCaption: 'Transactions page'
linkCaption: 'Transactions page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Channel Backups (LND Only)',
question: 'Channel Backups',
answer: 'Channel Backups are important to ensure that you have means to recover funds in case of node failures.\n' +
'Backup folder location can be customized in the RTL config file with the channelBackupPath field.\n' +
'RTL automatically creates all channel backup on server startup, as well as everytime a channel is opened or closed\n'+
@ -119,10 +127,11 @@ export class HelpComponent implements OnInit, OnDestroy {
'You can also backup each channel individually and verify them.\n'+
'** Keep taking backups of your channels regularly and store them in redundant locations **.\n',
link: 'backup',
linkCaption: 'Channel Backups'
linkCaption: 'Channel Backups',
lnImplementation: 'LND'
}));
this.helpTopics.push(new HelpTopic({
question: 'Channel Restore (LND Only)',
question: 'Channel Restore',
answer: 'Channel Restore is used to recover funds from the channel backup files in case of node failures.\n' +
'Follow the below steps to perform fund restoration.\n\n' +
'Prerequisite:\n'+
@ -140,7 +149,8 @@ export class HelpComponent implements OnInit, OnDestroy {
'9. Once the channel is closed, the corresponding pending on-chain transactions can be viewed on the "On-Chain" page.\n'+
'10. Once the transactions are confirmed, the channels funds will be restored to your LND Wallet.\n',
link: 'backup',
linkCaption: 'Channel Backups'
linkCaption: 'Channel Backups',
lnImplementation: 'LND'
}));
this.helpTopics.push(new HelpTopic({
question: 'Forwarding History',
@ -148,7 +158,8 @@ export class HelpComponent implements OnInit, OnDestroy {
'Go to "Routing" page under the "Lightning" menu :\n' +
'Transactions routed by the node are listed on this page along with channels and the fee earned by transaction.\n',
link: 'routing',
linkCaption: 'Forwarding History'
linkCaption: 'Forwarding History',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Graph Lookup',
@ -159,7 +170,8 @@ export class HelpComponent implements OnInit, OnDestroy {
' 1. Node Lookup - Enter the pubkey to perform the lookup.\n' +
' 2. Channel Lookup - Enter the short channel ID to perform the lookup.\n',
link: 'lookups',
linkCaption: 'Graph Lookup page'
linkCaption: 'Graph Lookup page',
lnImplementation: 'ALL'
}));
this.helpTopics.push(new HelpTopic({
question: 'Settings',
@ -169,7 +181,8 @@ export class HelpComponent implements OnInit, OnDestroy {
' 1. User Persona - Two options are available to change the dashboard based on the persona.\n' +
' 2. Currency Unit - You can choose your preferred fiat currency, to view the onchain and channel balances in the choosen fiat currency.\n'+
' 3. Default Node - If you are managing multiple nodes via RTL UI, you can select the default node to load upon login.\n'+
'Other Customizations include day and night mode and a choice of color themes to select from.\n'
'Other Customizations include day and night mode and a choice of color themes to select from.\n',
lnImplementation: 'ALL'
}));
}

@ -8,7 +8,7 @@
<div fxLayout="column" fxLayoutAlign="start start">
<div class="box-text">This page does not exist!</div>
<span fxLayout="row" fxLayoutAlign="center" fxFlex="80">
<button mat-raised-button color="primary" class="mt-2" type="button" (click)="goToHelp()">Go To Help</button>
<button mat-flat-button color="primary" class="mt-2" type="button" (click)="goToHelp()">Go To Help</button>
</span>
</div>
</mat-card-content>

@ -65,7 +65,7 @@
<div fxLayout="row" fxFlex="100" class="mt-2">
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" (click)="onResetSettings()" tabindex="12">Reset</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" (click)="onUpdateSettings()" tabindex="13">Update</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" (click)="onUpdateSettings()" tabindex="13">Update</button>
</div>
</div>
</div>

@ -14,7 +14,7 @@
</mat-form-field>
<div fxLayout="row" fxFlex="100" fxFlex.gt-sm="30" fxLayoutAlign="space-between stretch" class="mt-2">
<button fxFlex="48" fxLayoutAlign="center center" mat-stroked-button color="primary" tabindex="2" type="reset" (click)="resetData()">Clear</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-raised-button color="primary" tabindex="3" type="submit">Login</button>
<button fxFlex="48" fxLayoutAlign="center center" mat-flat-button color="primary" tabindex="3" type="submit">Login</button>
</div>
</form>
</mat-card-content>

@ -74,5 +74,5 @@ export interface SelNodeChild {
}
export class HelpTopic {
constructor(public help: {question: string, answer: string, link?: string, linkCaption?: string}) { }
constructor(public help: {question: string, answer: string, link?: string, linkCaption?: string, lnImplementation?: string}) { }
}

@ -228,11 +228,11 @@
outline: none;
}
.mat-raised-button.mat-primary:focus, .mat-raised-button.mat-primary:hover {
@include mat-elevation(8);
.mat-flat-button.mat-primary:focus, .mat-flat-button.mat-primary:hover {
@include mat-elevation(2);
}
.mat-raised-button.mat-primary:disabled {
.mat-flat-button.mat-primary:disabled {
cursor: not-allowed;
}

@ -463,7 +463,6 @@
overflow: hidden;
}
.ngx-charts {
fill: $foreground-text;
.bar {

@ -177,12 +177,6 @@ body {
overflow-wrap: break-word !important;
}
.mat-raised-button {
width: 100%;
margin-top: 0.5rem;
max-height: 3.6rem;
}
.mat-card {
padding: 0 !important;
overflow: hidden;
@ -653,6 +647,11 @@ body {
padding: 0 1.4rem 0 0.4rem;
}
.mat-flat-button {
width: 100%;
margin-top: 0.5rem;
max-height: 3.6rem;
}
}
.op-image{

Loading…
Cancel
Save