Replaced placeholder with label for required check

pull/1149/head
ShahanaFarooqui 2 years ago
parent 006775a0ce
commit 47f8d3d972

@ -10,9 +10,9 @@
<link i18n-rel="" rel="mask-icon" href="assets/images/favicon-light/safari-pinned-tab.svg" color="#5bbad5"> <link i18n-rel="" rel="mask-icon" href="assets/images/favicon-light/safari-pinned-tab.svg" color="#5bbad5">
<meta i18n-content="" name="msapplication-TileColor" content="#da532c"> <meta i18n-content="" name="msapplication-TileColor" content="#da532c">
<meta i18n-content="" name="theme-color" content="#ffffff"> <meta i18n-content="" name="theme-color" content="#ffffff">
<style>@font-face{font-family:Roboto;src:url(Roboto-Thin.f7a95c9c5999532c.woff2) format("woff2"),url(Roboto-Thin.c13c157cb81e8ebb.woff) format("woff");font-weight:100;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-ThinItalic.b0e084abf689f393.woff2) format("woff2"),url(Roboto-ThinItalic.1111028df6cea564.woff) format("woff");font-weight:100;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Light.0e01b6cd13b3857f.woff2) format("woff2"),url(Roboto-Light.603ca9a537b88428.woff) format("woff");font-weight:300;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-LightItalic.232ef4b20215f720.woff2) format("woff2"),url(Roboto-LightItalic.1b5e142f787151c8.woff) format("woff");font-weight:300;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Regular.475ba9e4e2d63456.woff2) format("woff2"),url(Roboto-Regular.bcefbfee882bc1cb.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-RegularItalic.e3a9ebdaac06bbc4.woff2) format("woff2"),url(Roboto-RegularItalic.0668fae6af0cf8c2.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Medium.457532032ceb0168.woff2) format("woff2"),url(Roboto-Medium.6e1ae5f0b324a0aa.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-MediumItalic.872f7060602d55d2.woff2) format("woff2"),url(Roboto-MediumItalic.e06fb533801cbb08.woff) format("woff");font-weight:500;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Bold.447291a88c067396.woff2) format("woff2"),url(Roboto-Bold.fc482e6133cf5e26.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BoldItalic.1b15168ef6fa4e16.woff2) format("woff2"),url(Roboto-BoldItalic.e26ba339b06f09f7.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Black.2eaa390d458c877d.woff2) format("woff2"),url(Roboto-Black.b25f67ad8583da68.woff) format("woff");font-weight:900;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BlackItalic.7dc03ee444552bc5.woff2) format("woff2"),url(Roboto-BlackItalic.c8dc642467cb3099.woff) format("woff");font-weight:900;font-style:italic}html{width:100%;height:99%;line-height:1.5;overflow-x:hidden;font-family:Roboto,sans-serif!important;font-size:100%}@media only screen and (max-width: 56.25em){html{font-size:90%}}@media only screen and (max-width: 37.5em){html{font-size:80%}}body{box-sizing:border-box;height:100%;margin:0;overflow:hidden}*{margin:0;padding:0}</style><link rel="stylesheet" href="styles.a28505c079b82298.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.a28505c079b82298.css"></noscript></head> <style>@font-face{font-family:Roboto;src:url(Roboto-Thin.f7a95c9c5999532c.woff2) format("woff2"),url(Roboto-Thin.c13c157cb81e8ebb.woff) format("woff");font-weight:100;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-ThinItalic.b0e084abf689f393.woff2) format("woff2"),url(Roboto-ThinItalic.1111028df6cea564.woff) format("woff");font-weight:100;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Light.0e01b6cd13b3857f.woff2) format("woff2"),url(Roboto-Light.603ca9a537b88428.woff) format("woff");font-weight:300;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-LightItalic.232ef4b20215f720.woff2) format("woff2"),url(Roboto-LightItalic.1b5e142f787151c8.woff) format("woff");font-weight:300;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Regular.475ba9e4e2d63456.woff2) format("woff2"),url(Roboto-Regular.bcefbfee882bc1cb.woff) format("woff");font-weight:400;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-RegularItalic.e3a9ebdaac06bbc4.woff2) format("woff2"),url(Roboto-RegularItalic.0668fae6af0cf8c2.woff) format("woff");font-weight:400;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Medium.457532032ceb0168.woff2) format("woff2"),url(Roboto-Medium.6e1ae5f0b324a0aa.woff) format("woff");font-weight:500;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-MediumItalic.872f7060602d55d2.woff2) format("woff2"),url(Roboto-MediumItalic.e06fb533801cbb08.woff) format("woff");font-weight:500;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Bold.447291a88c067396.woff2) format("woff2"),url(Roboto-Bold.fc482e6133cf5e26.woff) format("woff");font-weight:700;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BoldItalic.1b15168ef6fa4e16.woff2) format("woff2"),url(Roboto-BoldItalic.e26ba339b06f09f7.woff) format("woff");font-weight:700;font-style:italic}@font-face{font-family:Roboto;src:url(Roboto-Black.2eaa390d458c877d.woff2) format("woff2"),url(Roboto-Black.b25f67ad8583da68.woff) format("woff");font-weight:900;font-style:normal}@font-face{font-family:Roboto;src:url(Roboto-BlackItalic.7dc03ee444552bc5.woff2) format("woff2"),url(Roboto-BlackItalic.c8dc642467cb3099.woff) format("woff");font-weight:900;font-style:italic}html{width:100%;height:99%;line-height:1.5;overflow-x:hidden;font-family:Roboto,sans-serif!important;font-size:100%}@media only screen and (max-width: 56.25em){html{font-size:90%}}@media only screen and (max-width: 37.5em){html{font-size:80%}}body{box-sizing:border-box;height:100%;margin:0;overflow:hidden}*{margin:0;padding:0}</style><link rel="stylesheet" href="styles.c425009851b1ee10.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.c425009851b1ee10.css"></noscript></head>
<body> <body>
<rtl-app></rtl-app> <rtl-app></rtl-app>
<script src="runtime.167ee5fb3e9fa5be.js" type="module"></script><script src="polyfills.cba326bc97aa51ea.js" type="module"></script><script src="main.6387290859593c51.js" type="module"></script> <script src="runtime.12cdfbeab5d2a899.js" type="module"></script><script src="polyfills.cba326bc97aa51ea.js" type="module"></script><script src="main.5956ec091dc27d08.js" type="module"></script>
</body></html> </body></html>

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

@ -1,2 +1,2 @@
(()=>{"use strict";var e,v={},b={};function r(e){var n=b[e];if(void 0!==n)return n.exports;var t=b[e]={id:e,loaded:!1,exports:{}};return v[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}r.m=v,e=[],r.O=(n,t,o,u)=>{if(!t){var a=1/0;for(i=0;i<e.length;i++){for(var[t,o,u]=e[i],c=!0,f=0;f<t.length;f++)(!1&u||a>=u)&&Object.keys(r.O).every(_=>r.O[_](t[f]))?t.splice(f--,1):(c=!1,u<a&&(a=u));if(c){e.splice(i--,1);var d=o();void 0!==d&&(n=d)}}return n}u=u||0;for(var i=e.length;i>0&&e[i-1][2]>u;i--)e[i]=e[i-1];e[i]=[t,o,u]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>e+"."+{"default-src_app_shared_components_currency-unit-converter_currency-unit-converter_component_t-449cdf":"609456c1c9126c10",src_app_lnd_lnd_module_ts:"63d752f226eab192",src_app_cln_cln_module_ts:"263691ebb00dac56",src_app_eclair_ecl_module_ts:"5fda4433f560906f"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="RTLApp:";r.l=(t,o,u,i)=>{if(e[t])e[t].push(o);else{var a,c;if(void 0!==u)for(var f=document.getElementsByTagName("script"),d=0;d<f.length;d++){var l=f[d];if(l.getAttribute("src")==t||l.getAttribute("data-webpack")==n+u){a=l;break}}a||(c=!0,(a=document.createElement("script")).type="module",a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",n+u),a.src=r.tu(t)),e[t]=[o];var s=(m,_)=>{a.onerror=a.onload=null,clearTimeout(p);var g=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),g&&g.forEach(h=>h(_)),m)return m(_)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),c&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={runtime:0};r.f.j=(o,u)=>{var i=r.o(e,o)?e[o]:void 0;if(0!==i)if(i)u.push(i[2]);else if("runtime"!=o){var a=new Promise((l,s)=>i=e[o]=[l,s]);u.push(i[2]=a);var c=r.p+r.u(o),f=new Error;r.l(c,l=>{if(r.o(e,o)&&(0!==(i=e[o])&&(e[o]=void 0),i)){var s=l&&("load"===l.type?"missing":l.type),p=l&&l.target&&l.target.src;f.message="Loading chunk "+o+" failed.\n("+s+": "+p+")",f.name="ChunkLoadError",f.type=s,f.request=p,i[1](f)}},"chunk-"+o,o)}else e[o]=0},r.O.j=o=>0===e[o];var n=(o,u)=>{var f,d,[i,a,c]=u,l=0;if(i.some(p=>0!==e[p])){for(f in a)r.o(a,f)&&(r.m[f]=a[f]);if(c)var s=c(r)}for(o&&o(u);l<i.length;l++)d=i[l],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(s)},t=self.webpackChunkRTLApp=self.webpackChunkRTLApp||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))})()})(); (()=>{"use strict";var e,b={},v={};function r(e){var n=v[e];if(void 0!==n)return n.exports;var t=v[e]={id:e,loaded:!1,exports:{}};return b[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}r.m=b,e=[],r.O=(n,t,o,u)=>{if(!t){var a=1/0;for(i=0;i<e.length;i++){for(var[t,o,u]=e[i],c=!0,f=0;f<t.length;f++)(!1&u||a>=u)&&Object.keys(r.O).every(_=>r.O[_](t[f]))?t.splice(f--,1):(c=!1,u<a&&(a=u));if(c){e.splice(i--,1);var d=o();void 0!==d&&(n=d)}}return n}u=u||0;for(var i=e.length;i>0&&e[i-1][2]>u;i--)e[i]=e[i-1];e[i]=[t,o,u]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>e+"."+{"default-src_app_shared_components_currency-unit-converter_currency-unit-converter_component_t-449cdf":"e7b058c0b6c94c42",src_app_lnd_lnd_module_ts:"237b6cb3a3ef3065",src_app_cln_cln_module_ts:"464a5875d208dee8",src_app_eclair_ecl_module_ts:"27274009ffa01245"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="RTLApp:";r.l=(t,o,u,i)=>{if(e[t])e[t].push(o);else{var a,c;if(void 0!==u)for(var f=document.getElementsByTagName("script"),d=0;d<f.length;d++){var l=f[d];if(l.getAttribute("src")==t||l.getAttribute("data-webpack")==n+u){a=l;break}}a||(c=!0,(a=document.createElement("script")).type="module",a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",n+u),a.src=r.tu(t)),e[t]=[o];var s=(m,_)=>{a.onerror=a.onload=null,clearTimeout(p);var g=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),g&&g.forEach(h=>h(_)),m)return m(_)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),c&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={runtime:0};r.f.j=(o,u)=>{var i=r.o(e,o)?e[o]:void 0;if(0!==i)if(i)u.push(i[2]);else if("runtime"!=o){var a=new Promise((l,s)=>i=e[o]=[l,s]);u.push(i[2]=a);var c=r.p+r.u(o),f=new Error;r.l(c,l=>{if(r.o(e,o)&&(0!==(i=e[o])&&(e[o]=void 0),i)){var s=l&&("load"===l.type?"missing":l.type),p=l&&l.target&&l.target.src;f.message="Loading chunk "+o+" failed.\n("+s+": "+p+")",f.name="ChunkLoadError",f.type=s,f.request=p,i[1](f)}},"chunk-"+o,o)}else e[o]=0},r.O.j=o=>0===e[o];var n=(o,u)=>{var f,d,[i,a,c]=u,l=0;if(i.some(p=>0!==e[p])){for(f in a)r.o(a,f)&&(r.m[f]=a[f]);if(c)var s=c(r)}for(o&&o(u);l<i.length;l++)d=i[l],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(s)},t=self.webpackChunkRTLApp=self.webpackChunkRTLApp||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))})()})();
//# sourceMappingURL=runtime.167ee5fb3e9fa5be.js.map //# sourceMappingURL=runtime.12cdfbeab5d2a899.js.map

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

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

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

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

@ -1,28 +1,28 @@
<div *ngIf="errorMessage?.trim() === ''; else errorBlock" fxLayout="row" fxFlex="100" fxLayoutAlign="stretch"class="h-100"> <div *ngIf="errorMessage?.trim() === ''; else errorBlock" fxLayout="row" fxFlex="100" fxLayoutAlign="stretch"class="mt-2 h-100">
<div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch">
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Opening Opening
<mat-icon matTooltip="Default feerate for fundchannel and withdraw" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Default feerate for fundchannel and withdraw" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{perkbw?.opening | number}}</div> <div class="overflow-wrap dashboard-info-value">{{perkbw?.opening | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Mutual Close Mutual Close
<mat-icon matTooltip="Feerate to aim for in cooperative shutdown. Note that since mutual close is a negotiation, the actual feerate used in mutual close will be somewhere between this and the corresponding mutual close feerate of the peer" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Feerate to aim for in cooperative shutdown. Note that since mutual close is a negotiation, the actual feerate used in mutual close will be somewhere between this and the corresponding mutual close feerate of the peer" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{perkbw?.mutual_close | number}}</div> <div class="overflow-wrap dashboard-info-value">{{perkbw?.mutual_close | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Unilateral Close Unilateral Close
<mat-icon matTooltip="Feerate for commitment transaction in a live channel which we originally funded" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Feerate for commitment transaction in a live channel which we originally funded" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{perkbw?.unilateral_close | number}}</div> <div class="overflow-wrap dashboard-info-value">{{perkbw?.unilateral_close | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Delayed To Us Delayed To Us
<mat-icon matTooltip="Feerate for returning unilateral close funds to our wallet" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Feerate for returning unilateral close funds to our wallet" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
@ -31,28 +31,28 @@
</div> </div>
<div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch">
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Minimum Acceptable Minimum Acceptable
<mat-icon matTooltip="The smallest feerate that you can use, usually the minimum relayed feerate of the backend" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="The smallest feerate that you can use, usually the minimum relayed feerate of the backend" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{perkbw?.min_acceptable | number}}</div> <div class="overflow-wrap dashboard-info-value">{{perkbw?.min_acceptable | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Maximum Acceptable Maximum Acceptable
<mat-icon matTooltip="The largest feerate we will accept from remote negotiations. If a peer attempts to set the feerate higher than this we will unilaterally close the channel (or simply forget it if it's not open yet)" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="The largest feerate we will accept from remote negotiations. If a peer attempts to set the feerate higher than this we will unilaterally close the channel (or simply forget it if it's not open yet)" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{perkbw?.max_acceptable | number}}</div> <div class="overflow-wrap dashboard-info-value">{{perkbw?.max_acceptable | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
HTLC Resolution HTLC Resolution
<mat-icon matTooltip="Feerate for returning unilateral close HTLC outputs to our wallet" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Feerate for returning unilateral close HTLC outputs to our wallet" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{perkbw?.htlc_resolution | number}}</div> <div class="overflow-wrap dashboard-info-value">{{perkbw?.htlc_resolution | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Penalty Penalty
<mat-icon matTooltip="Feerate to start at when penalizing a cheat attempt" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Feerate to start at when penalizing a cheat attempt" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>

@ -1,52 +1,52 @@
<div *ngIf="errorMessage?.trim() === ''; else errorBlock" fxLayout="row" fxFlex="100" fxLayoutAlign="stretch"class="h-100"> <div *ngIf="errorMessage?.trim() === ''; else errorBlock" fxLayout="row" fxFlex="100" fxLayoutAlign="stretch"class="mt-2 h-100">
<div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch">
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Opening Channel Opening Channel
<mat-icon matTooltip="Estimated cost of typical channel open" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Estimated cost of typical channel open" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.opening_channel_satoshis | number}}</div> <div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.opening_channel_satoshis | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Mutual Close Mutual Close
<mat-icon matTooltip="Estimated cost of typical channel close" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Estimated cost of typical channel close" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.mutual_close_satoshis | number}}</div> <div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.mutual_close_satoshis | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
Unilateral Close Unilateral Close
<mat-icon matTooltip="Estimated cost of typical unilateral close (without HTLCs)" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Estimated cost of typical unilateral close (without HTLCs)" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.unilateral_close_satoshis | number}}</div> <div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.unilateral_close_satoshis | number}}</div>
</div> </div>
<div fxFlex="12"> <div fxFlex="12">
<h4 fxLayoutAlign="start center" class="dashboard-info-title"></h4> <h4 fxLayoutAlign="start start" class="dashboard-info-title"></h4>
<div class="overflow-wrap dashboard-info-value"></div> <div class="overflow-wrap dashboard-info-value"></div>
</div> </div>
</div> </div>
<div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="50" fxLayoutAlign="space-between stretch">
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
HTLC Timeout HTLC Timeout
<mat-icon matTooltip="Estimated cost of typical HTLC timeout transaction" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Estimated cost of typical HTLC timeout transaction" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.htlc_timeout_satoshis | number}}</div> <div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.htlc_timeout_satoshis | number}}</div>
</div> </div>
<div> <div>
<h4 fxLayoutAlign="start center" class="dashboard-info-title"> <h4 fxLayoutAlign="start start" class="dashboard-info-title">
HTLC Success HTLC Success
<mat-icon matTooltip="Estimated cost of typical HTLC fulfillment transaction" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon> <mat-icon matTooltip="Estimated cost of typical HTLC fulfillment transaction" matTooltipPosition="below" class="info-icon info-icon-primary">info_outline</mat-icon>
</h4> </h4>
<div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.htlc_success_satoshis | number}}</div> <div class="overflow-wrap dashboard-info-value">{{feeRates?.onchain_fee_estimates?.htlc_success_satoshis | number}}</div>
</div> </div>
<div fxFlex="12"> <div fxFlex="12">
<h4 fxLayoutAlign="start center" class="dashboard-info-title"></h4> <h4 fxLayoutAlign="start start" class="dashboard-info-title"></h4>
<div class="overflow-wrap dashboard-info-value"></div> <div class="overflow-wrap dashboard-info-value"></div>
</div> </div>
<div fxFlex="12"> <div fxFlex="12">
<h4 fxLayoutAlign="start center" class="dashboard-info-title"></h4> <h4 fxLayoutAlign="start start" class="dashboard-info-title"></h4>
<div class="overflow-wrap dashboard-info-value"></div> <div class="overflow-wrap dashboard-info-value"></div>
</div> </div>
</div> </div>

@ -5,11 +5,13 @@
<span>The actual routing fee on a payment can be different from the fee shown on query routes.</span> <span>The actual routing fee on a payment can be different from the fee shown on query routes.</span>
</div> </div>
<mat-form-field fxLayout="column" fxFlex="69" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="69" fxLayoutAlign="start end">
<input #destPubkey="ngModel" matInput placeholder="Destination Node ID" name="nodeId" tabindex="1" required [(ngModel)]="nodeId"> <mat-label>Destination Node ID</mat-label>
<input #destPubkey="ngModel" matInput name="nodeId" tabindex="1" required [(ngModel)]="nodeId">
<mat-error *ngIf="!nodeId">Destination Node ID is required.</mat-error> <mat-error *ngIf="!nodeId">Destination Node ID is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="29" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="29" fxLayoutAlign="start end">
<input matInput placeholder="Amount (Sats)" name="amount" tabindex="2" type="number" required [step]="1000" [min]="0" [(ngModel)]="amount"> <mat-label>Amount (Sats)</mat-label>
<input matInput name="amount" tabindex="2" type="number" required [step]="1000" [min]="0" [(ngModel)]="amount">
<mat-error *ngIf="!amount">Amount is required.</mat-error> <mat-error *ngIf="!amount">Amount is required.</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" class="mt-1"> <div fxLayout="row" class="mt-1">

@ -9,11 +9,13 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form #form="ngForm" fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between start" class="overflow-x-hidden" (submit)="onSendFunds()" (reset)="resetData()"> <form #form="ngForm" fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between start" class="overflow-x-hidden" (submit)="onSendFunds()" (reset)="resetData()">
<mat-form-field fxLayout="column" fxFlex="55"> <mat-form-field fxLayout="column" fxFlex="55">
<input #addrs="ngModel" matInput autoFocus placeholder="Bitcoin Address" tabindex="1" name="addr" required [(ngModel)]="transaction.address"> <mat-label>Bitcoin Address</mat-label>
<input #addrs="ngModel" matInput autoFocus tabindex="1" name="addr" required [(ngModel)]="transaction.address">
<mat-error *ngIf="!transaction.address">Bitcoin address is required.</mat-error> <mat-error *ngIf="!transaction.address">Bitcoin address is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="30"> <mat-form-field fxLayout="column" fxFlex="30">
<input #amnt="ngModel" matInput placeholder="Amount" name="amt" type="number" tabindex="2" required [step]="100" [min]="0" [(ngModel)]="transaction.amount"> <mat-label>Amount</mat-label>
<input #amnt="ngModel" matInput name="amt" type="number" tabindex="2" required [step]="100" [min]="0" [(ngModel)]="transaction.amount">
<span matSuffix>{{selAmountUnit}} </span> <span matSuffix>{{selAmountUnit}} </span>
<mat-error *ngIf="!transaction.amount">{{amountError}}</mat-error> <mat-error *ngIf="!transaction.amount">{{amountError}}</mat-error>
</mat-form-field> </mat-form-field>
@ -23,8 +25,9 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<div fxFlex="60" fxLayoutAlign="space-between stretch" fxLayout="row wrap"> <div fxFlex="60" fxLayoutAlign="space-between stretch" fxLayout="row wrap">
<mat-form-field fxLayout="column" fxFlex="48" fxLayout="row" fxLayoutAlign="start center"> <mat-form-field fxLayout="column" fxFlex="48" fxLayoutAlign="start center">
<input #blocks="ngModel" matInput placeholder="Target Confirmation Blocks" type="number" name="blocks" tabindex="8" required="true" [step]="1" [min]="0" [(ngModel)]="transaction.blocks"> <mat-label>Target Confirmation Blocks</mat-label>
<input #blocks="ngModel" matInput type="number" name="blocks" tabindex="8" required="true" [step]="1" [min]="0" [(ngModel)]="transaction.blocks">
<mat-error *ngIf="!transaction.blocks">Target Confirmation Blocks is required.</mat-error> <mat-error *ngIf="!transaction.blocks">Target Confirmation Blocks is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>

@ -10,7 +10,8 @@
<form #form="ngForm" fxLayout="column" (submit)="onOpenChannel()" (reset)="resetData()"> <form #form="ngForm" fxLayout="column" (submit)="onOpenChannel()" (reset)="resetData()">
<div fxLayout="column"> <div fxLayout="column">
<mat-form-field *ngIf="!peer && peers && peers.length > 0" fxFlex="100"> <mat-form-field *ngIf="!peer && peers && peers.length > 0" fxFlex="100">
<input type="text" placeholder="Peer Alias" aria-label="Peers" matInput tabindex="1" required [formControl]="selectedPeer" [matAutocomplete]="auto" (change)="onSelectedPeerChanged()"> <mat-label>Peer Alias</mat-label>
<input type="text" aria-label="Peers" matInput tabindex="1" required [formControl]="selectedPeer" [matAutocomplete]="auto" (change)="onSelectedPeerChanged()">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedPeerChanged()"> <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedPeerChanged()">
<mat-option *ngFor="let peer of filteredPeers | async" [value]="peer">{{peer.alias ? peer.alias : peer.nodeId ? peer.nodeId : ''}}</mat-option> <mat-option *ngFor="let peer of filteredPeers | async" [value]="peer">{{peer.alias ? peer.alias : peer.nodeId ? peer.nodeId : ''}}</mat-option>
</mat-autocomplete> </mat-autocomplete>
@ -22,7 +23,8 @@
<div fxLayout="column"> <div fxLayout="column">
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<mat-form-field fxLayout="column" fxFlex="70" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="70" fxLayoutAlign="start end">
<input #amount="ngModel" matInput placeholder="Amount" type="number" tabindex="1" required name="amount" [step]="1000" [min]="1" [max]="totalBalance" [(ngModel)]="fundingAmount"> <mat-label>Amount</mat-label>
<input #amount="ngModel" matInput type="number" tabindex="1" required name="amount" [step]="1000" [min]="1" [max]="totalBalance" [(ngModel)]="fundingAmount">
<mat-hint>Remaining Bal: {{totalBalance - ((fundingAmount) ? fundingAmount : 0) | number}}</mat-hint> <mat-hint>Remaining Bal: {{totalBalance - ((fundingAmount) ? fundingAmount : 0) | number}}</mat-hint>
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-error *ngIf="amount.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="amount.errors?.required">Amount is required.</mat-error>
@ -42,7 +44,8 @@
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<div fxFlex="100" fxLayout="row" fxLayoutAlign="space-between center"> <div fxFlex="100" fxLayout="row" fxLayoutAlign="space-between center">
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input #fee="ngModel" matInput placeholder="Fee (Sats/vByte)" type="number" name="fee" tabindex="7" [step]="1" [min]="0" [(ngModel)]="feeRate"> <mat-label>Fee (Sats/vByte)</mat-label>
<input #fee="ngModel" matInput type="number" name="fee" tabindex="7" [step]="1" [min]="0" [(ngModel)]="feeRate">
</mat-form-field> </mat-form-field>
</div> </div>
</div> </div>

@ -13,7 +13,8 @@
<form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1" [formGroup]="peerFormGroup"> <form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1" [formGroup]="peerFormGroup">
<ng-template matStepLabel>{{peerFormLabel}}</ng-template> <ng-template matStepLabel>{{peerFormLabel}}</ng-template>
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required> <mat-label>Lightning Address (pubkey OR pubkey@ip:port)</mat-label>
<input autoFocus matInput formControlName="peerAddress" tabindex="1" required>
<mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error> <mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error>
</mat-form-field> </mat-form-field>
<div *ngIf="peerConnectionError !== ''" fxFlex="100" class="alert alert-danger mt-1"> <div *ngIf="peerConnectionError !== ''" fxFlex="100" class="alert alert-danger mt-1">
@ -31,7 +32,8 @@
<div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch">
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<mat-form-field fxLayout="column" fxFlex="30" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="30" fxLayoutAlign="start end">
<input matInput autoFocus formControlName="fundingAmount" placeholder="Amount" type="number" tabindex="1" required [step]="1000"> <mat-label>Amount</mat-label>
<input matInput autoFocus formControlName="fundingAmount" type="number" tabindex="1" required [step]="1000">
<mat-hint>Remaining Bal: {{totalBalance - ((channelFormGroup.controls.fundingAmount.value) ? channelFormGroup.controls.fundingAmount.value : 0)}}</mat-hint> <mat-hint>Remaining Bal: {{totalBalance - ((channelFormGroup.controls.fundingAmount.value) ? channelFormGroup.controls.fundingAmount.value : 0)}}</mat-hint>
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-error *ngIf="channelFormGroup.controls.fundingAmount.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="channelFormGroup.controls.fundingAmount.errors?.required">Amount is required.</mat-error>
@ -39,7 +41,8 @@
<mat-error *ngIf="channelFormGroup.controls.fundingAmount.errors?.max">Amount must be less than or equal to {{totalBalance}}.</mat-error> <mat-error *ngIf="channelFormGroup.controls.fundingAmount.errors?.max">Amount must be less than or equal to {{totalBalance}}.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="30"> <mat-form-field fxLayout="column" fxFlex="30">
<input matInput formControlName="feeRate" placeholder="Fee (Sats/vByte)" type="number" name="feeRate" tabindex="7" [step]="1" [min]="0"> <mat-label>Fee (Sats/vByte)</mat-label>
<input matInput formControlName="feeRate" type="number" name="feeRate" tabindex="7" [step]="1" [min]="0">
</mat-form-field> </mat-form-field>
<div fxFlex="35" fxLayoutAlign="start center"> <div fxFlex="35" fxLayoutAlign="start center">
<mat-slide-toggle tabindex="2" color="primary" formControlName="isPrivate" name="isPrivate">Private Channel</mat-slide-toggle> <mat-slide-toggle tabindex="2" color="primary" formControlName="isPrivate" name="isPrivate">Private Channel</mat-slide-toggle>

@ -6,12 +6,14 @@
<div fxFlex="70">Incoming</div> <div fxFlex="70">Incoming</div>
<div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch"> <div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch">
<!-- <mat-form-field fxLayout="column" fxFlex="49"> <!-- <mat-form-field fxLayout="column" fxFlex="49">
<mat-select placeholder="Filter By" tabindex="1" [(ngModel)]="selFilterByIn" (selectionChange)="selFilterIn=''; applyFilterIncoming()" name="filterByIn"> <mat-label>Filter By</mat-label>
<mat-select tabindex="1" [(ngModel)]="selFilterByIn" (selectionChange)="selFilterIn=''; applyFilterIncoming()" name="filterByIn">
<mat-option *ngFor="let column of ['all'].concat(displayedColumns)" [value]="column">{{getLabel(column)}}</mat-option> <mat-option *ngFor="let column of ['all'].concat(displayedColumns)" [value]="column">{{getLabel(column)}}</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput [(ngModel)]="selFilterIn" (input)="applyFilterIncoming()" (keyup)="applyFilterIncoming()" name="filterin" placeholder="Filter"> <mat-label>Filter</mat-label>
<input matInput [(ngModel)]="selFilterIn" (input)="applyFilterIncoming()" (keyup)="applyFilterIncoming()" name="filterin">
</mat-form-field> --> </mat-form-field> -->
</div> </div>
</div> </div>
@ -66,12 +68,14 @@
<div fxFlex="70">Outgoing</div> <div fxFlex="70">Outgoing</div>
<div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch"> <div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch">
<!-- <mat-form-field fxLayout="column" fxFlex="49"> <!-- <mat-form-field fxLayout="column" fxFlex="49">
<mat-select placeholder="Filter By" tabindex="1" [(ngModel)]="selFilterByOut" (selectionChange)="selFilterOut=''; applyFilterOutgoing()" name="filterByOut"> <mat-label>Filter By</mat-label>
<mat-select tabindex="1" [(ngModel)]="selFilterByOut" (selectionChange)="selFilterOut=''; applyFilterOutgoing()" name="filterByOut">
<mat-option *ngFor="let column of ['all'].concat(displayedColumns.slice(0, -1))" [value]="column">{{getLabel(column)}}</mat-option> <mat-option *ngFor="let column of ['all'].concat(displayedColumns.slice(0, -1))" [value]="column">{{getLabel(column)}}</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput [(ngModel)]="selFilterOut" (input)="applyFilterOutgoing()" (keyup)="applyFilterOutgoing()" name="filterout" placeholder="Filter"> <mat-label>Filter</mat-label>
<input matInput [(ngModel)]="selFilterOut" (input)="applyFilterOutgoing()" (keyup)="applyFilterOutgoing()" name="filterout">
</mat-form-field> --> </mat-form-field> -->
</div> </div>
</div> </div>

@ -9,17 +9,20 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="start space-between" fxFlex="100"> <form #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="start space-between" fxFlex="100">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end">
<input matInput autoFocus placeholder="Description" tabindex="2" name="description" required [(ngModel)]="description"> <mat-label>Description</mat-label>
<input matInput autoFocus tabindex="2" name="description" required [(ngModel)]="description">
<mat-error *ngIf="!description">Description is required.</mat-error> <mat-error *ngIf="!description">Description is required.</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" fxLayoutAlign="space-between start" fxFlex="100"> <div fxLayout="row" fxLayoutAlign="space-between start" fxFlex="100">
<mat-form-field fxLayout="column" fxFlex="40"> <mat-form-field fxLayout="column" fxFlex="40">
<input matInput placeholder="Amount" type="number" tabindex="3" name="invValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()"> <mat-label>Amount</mat-label>
<input matInput type="number" tabindex="3" name="invValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()">
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-hint>{{invoiceValueHint}}</mat-hint> <mat-hint>{{invoiceValueHint}}</mat-hint>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="30"> <mat-form-field fxLayout="column" fxFlex="30">
<input matInput placeholder="Expiry" type="number" name="exp" tabindex="4" [step]="selTimeUnit === timeUnitEnum.SECS ? 300 : selTimeUnit === timeUnitEnum.MINS ? 10 : selTimeUnit === timeUnitEnum.HOURS ? 2 : 1" [min]="1" [(ngModel)]="expiry"> <mat-label>Expiry</mat-label>
<input matInput type="number" name="exp" tabindex="4" [step]="selTimeUnit === timeUnitEnum.SECS ? 300 : selTimeUnit === timeUnitEnum.MINS ? 10 : selTimeUnit === timeUnitEnum.HOURS ? 2 : 1" [min]="1" [(ngModel)]="expiry">
<span matSuffix>{{selTimeUnit | titlecase}} </span> <span matSuffix>{{selTimeUnit | titlecase}} </span>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="26"> <mat-form-field fxLayout="column" fxFlex="26">

@ -1,11 +1,13 @@
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch"> <div fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch">
<form *ngIf="calledFrom === 'home'" #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="stretch start" fxFlex="100"> <form *ngIf="calledFrom === 'home'" #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="stretch start" fxFlex="100">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch">
<input matInput placeholder="Description" tabindex="2" name="description" required="true" [(ngModel)]="description"> <mat-label>Description</mat-label>
<input matInput tabindex="2" name="description" required="true" [(ngModel)]="description">
<mat-error *ngIf="!description">Description is required.</mat-error> <mat-error *ngIf="!description">Description is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end">
<input #invcVal="ngModel" matInput placeholder="Amount" type="number" tabindex="3" name="invValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()"> <mat-label>Amount</mat-label>
<input #invcVal="ngModel" matInput type="number" tabindex="3" name="invValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()">
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-hint>{{invoiceValueHint}}</mat-hint> <mat-hint>{{invoiceValueHint}}</mat-hint>
</mat-form-field> </mat-form-field>

@ -1,7 +1,8 @@
<div fxLayout="column" fxFlex="colWidth" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="colWidth" fxLayoutAlign="space-between stretch">
<form *ngIf="calledFrom === 'home'" #sendPaymentForm="ngForm" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap"> <form *ngIf="calledFrom === 'home'" #sendPaymentForm="ngForm" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap">
<mat-form-field fxLayout="column" fxFlex="colWidth"> <mat-form-field fxLayout="column" fxFlex="colWidth">
<textarea #paymentReq="ngModel" matInput placeholder="Payment Request" name="paymentRequest" tabindex="1" required [perfectScrollbar] [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea> <mat-label>Payment Request</mat-label>
<textarea #paymentReq="ngModel" matInput name="paymentRequest" tabindex="1" required [perfectScrollbar] [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea>
<mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint> <mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint>
<mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error> <mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -9,13 +9,15 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form #sendPaymentForm="ngForm" fxLayoutAlign="space-between stretch" fxLayout="column"> <form #sendPaymentForm="ngForm" fxLayoutAlign="space-between stretch" fxLayout="column">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<textarea #paymentReq="ngModel" autoFocus matInput placeholder="Payment Request" name="paymentRequest" rows="4" tabindex="1" required [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea> <mat-label>Payment Request</mat-label>
<textarea #paymentReq="ngModel" autoFocus matInput name="paymentRequest" rows="4" tabindex="1" required [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea>
<mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint> <mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint>
<mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error> <mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error>
<mat-error *ngIf="paymentReq.errors?.decodeError">{{paymentDecodedHint}}</mat-error> <mat-error *ngIf="paymentReq.errors?.decodeError">{{paymentDecodedHint}}</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="zeroAmtInvoice" fxFlex="100"> <mat-form-field *ngIf="zeroAmtInvoice" fxFlex="100">
<input #paymentAmt="ngModel" matInput placeholder="Amount (Sats)" name="amount" tabindex="2" required [(ngModel)]="paymentAmount" (change)="onAmountChange($event)"> <mat-label>Amount (Sats)</mat-label>
<input #paymentAmt="ngModel" matInput name="amount" tabindex="2" required [(ngModel)]="paymentAmount" (change)="onAmountChange($event)">
<mat-hint>It is a zero amount invoice, enter amount to be paid.</mat-hint> <mat-hint>It is a zero amount invoice, enter amount to be paid.</mat-hint>
<mat-error *ngIf="!paymentAmount">Payment amount is required.</mat-error> <mat-error *ngIf="!paymentAmount">Payment amount is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -5,11 +5,13 @@
<span>The actual routing fee on a payment can be different from the fee shown on query routes.</span> <span>The actual routing fee on a payment can be different from the fee shown on query routes.</span>
</div> </div>
<mat-form-field fxLayout="column" fxFlex="69" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="69" fxLayoutAlign="start end">
<input #destPubkey="ngModel" matInput placeholder="Destination Pubkey" name="destinationPubkey" tabindex="1" required [(ngModel)]="destinationPubkey"> <mat-label>Destination Pubkey</mat-label>
<input #destPubkey="ngModel" matInput name="destinationPubkey" tabindex="1" required [(ngModel)]="destinationPubkey">
<mat-error *ngIf="!destinationPubkey">Destination pubkey is required.</mat-error> <mat-error *ngIf="!destinationPubkey">Destination pubkey is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="29" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="29" fxLayoutAlign="start end">
<input matInput placeholder="Amount (Sats)" name="amount" tabindex="2" type="number" required [step]="1000" [min]="0" [(ngModel)]="amount"> <mat-label>Amount (Sats)</mat-label>
<input matInput name="amount" tabindex="2" type="number" required [step]="1000" [min]="0" [(ngModel)]="amount">
<mat-error *ngIf="!amount">Amount is required.</mat-error> <mat-error *ngIf="!amount">Amount is required.</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" class="mt-1"> <div fxLayout="row" class="mt-1">

@ -9,7 +9,8 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form #form="ngForm" fxLayout="row wrap" fxLayoutAlign="space-between start" fxFlex="100" class="overflow-x-hidden" (submit)="onLabelUTXO()" (reset)="resetData()"> <form #form="ngForm" fxLayout="row wrap" fxLayoutAlign="space-between start" fxFlex="100" class="overflow-x-hidden" (submit)="onLabelUTXO()" (reset)="resetData()">
<mat-form-field fxLayout="column" fxFlex.gt-sm="100"> <mat-form-field fxLayout="column" fxFlex.gt-sm="100">
<input autoFocus matInput placeholder="UTXO Label" name="label" tabindex="1" required [(ngModel)]="label"> <mat-label>UTXO Label</mat-label>
<input autoFocus matInput name="label" tabindex="1" required [(ngModel)]="label">
<mat-error *ngIf="!label">UTXO Label is required.</mat-error> <mat-error *ngIf="!label">UTXO Label is required.</mat-error>
</mat-form-field> </mat-form-field>
<div *ngIf="labelError !== ''" fxFlex="100" class="alert alert-danger mt-1"> <div *ngIf="labelError !== ''" fxFlex="100" class="alert alert-danger mt-1">

@ -1,7 +1,8 @@
<div fxLayout="column"> <div fxLayout="column">
<div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutAlign.gt-sm="start center"> <div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutAlign.gt-sm="start center">
<mat-form-field fxLayout="column" fxFlex="48" fxFlex.gt-md="25" fxLayoutAlign="start end" class="mr-2"> <mat-form-field fxLayout="column" fxFlex="48" fxFlex.gt-md="25" fxLayoutAlign="start end" class="mr-2">
<mat-select placeholder="Address Type" name="address_type" tabindex="1" [(ngModel)]="selectedAddressType"> <mat-label>Address Type</mat-label>
<mat-select name="address_type" tabindex="1" [(ngModel)]="selectedAddressType">
<mat-option *ngFor="let addressType of addressTypes" [value]="addressType"> <mat-option *ngFor="let addressType of addressTypes" [value]="addressType">
{{addressType.addressTp}} {{addressType.addressTp}}
</mat-option> </mat-option>

@ -9,11 +9,13 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form *ngIf="!sweepAll; else sweepAllBlock;" #form="ngForm" fxLayout="row wrap"fxLayoutAlign="space-between start" fxFlex="100" class="overflow-x-hidden" (submit)="onSendFunds()" (reset)="resetData()"> <form *ngIf="!sweepAll; else sweepAllBlock;" #form="ngForm" fxLayout="row wrap"fxLayoutAlign="space-between start" fxFlex="100" class="overflow-x-hidden" (submit)="onSendFunds()" (reset)="resetData()">
<mat-form-field fxLayout="column" fxFlex.gt-sm="55"> <mat-form-field fxLayout="column" fxFlex.gt-sm="55">
<input #address="ngModel" autoFocus matInput placeholder="Bitcoin Address" tabindex="1" name="address" required [(ngModel)]="transactionAddress"> <mat-label>Bitcoin Address</mat-label>
<input #address="ngModel" autoFocus matInput tabindex="1" name="address" required [(ngModel)]="transactionAddress">
<mat-error *ngIf="!transactionAddress">Bitcoin address is required.</mat-error> <mat-error *ngIf="!transactionAddress">Bitcoin address is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex.gt-sm="30"> <mat-form-field fxLayout="column" fxFlex.gt-sm="30">
<input #amnt="ngModel" matInput placeholder="Amount" name="amt" type="number" tabindex="2" required [step]="100" [min]="0" [(ngModel)]="transactionAmount"> <mat-label>Amount</mat-label>
<input #amnt="ngModel" matInput name="amt" type="number" tabindex="2" required [step]="100" [min]="0" [(ngModel)]="transactionAmount">
<span matSuffix>{{selAmountUnit}} </span> <span matSuffix>{{selAmountUnit}} </span>
<mat-error *ngIf="!transactionAmount">{{amountError}}</mat-error> <mat-error *ngIf="!transactionAmount">{{amountError}}</mat-error>
</mat-form-field> </mat-form-field>
@ -31,11 +33,13 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '1'" fxFlex="48"> <mat-form-field *ngIf="selTransType === '1'" fxFlex="48">
<input #blocks="ngModel" matInput placeholder="Number of Blocks" type="number" name="blcks" required tabindex="5" [step]="1" [min]="0" [(ngModel)]="transactionBlocks"> <mat-label>Number of Blocks</mat-label>
<input #blocks="ngModel" matInput type="number" name="blcks" required tabindex="5" [step]="1" [min]="0" [(ngModel)]="transactionBlocks">
<mat-error *ngIf="!transactionBlocks">Number of blocks is required.</mat-error> <mat-error *ngIf="!transactionBlocks">Number of blocks is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '2'" fxFlex="48"> <mat-form-field *ngIf="selTransType === '2'" fxFlex="48">
<input #fees="ngModel" matInput placeholder="Fees (Sats/vByte)" type="number" name="chainFees" required tabindex="6" [step]="1" [min]="0" [(ngModel)]="transactionFees"> <mat-label>Fees (Sats/vByte)</mat-label>
<input #fees="ngModel" matInput type="number" name="chainFees" required tabindex="6" [step]="1" [min]="0" [(ngModel)]="transactionFees">
<mat-error *ngIf="!transactionFees">Fees is required.</mat-error> <mat-error *ngIf="!transactionFees">Fees is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
@ -61,7 +65,8 @@
<ng-template matStepLabel>{{passwordFormLabel}}</ng-template> <ng-template matStepLabel>{{passwordFormLabel}}</ng-template>
<div fxLayout="row"> <div fxLayout="row">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<input autoFocus matInput placeholder="Password" type="password" tabindex="1" formControlName="password" required> <mat-label>Password</mat-label>
<input autoFocus matInput type="password" tabindex="1" formControlName="password" required>
<mat-error *ngIf="passwordFormGroup.controls.password.errors?.required">Password is required.</mat-error> <mat-error *ngIf="passwordFormGroup.controls.password.errors?.required">Password is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
@ -75,7 +80,8 @@
<ng-template matStepLabel disabled="true">{{sendFundFormLabel}}</ng-template> <ng-template matStepLabel disabled="true">{{sendFundFormLabel}}</ng-template>
<div fxLayout="column" fxFlex="98" fxLayout.gt-sm="row wrap" fxLayoutAlign="start stretch" fxLayoutAlign.gt-sm="space-between start"> <div fxLayout="column" fxFlex="98" fxLayout.gt-sm="row wrap" fxLayoutAlign="start stretch" fxLayoutAlign.gt-sm="space-between start">
<mat-form-field fxLayout="column" fxFlex.gt-sm="45"> <mat-form-field fxLayout="column" fxFlex.gt-sm="45">
<input matInput formControlName="transactionAddress" placeholder="Bitcoin Address" tabindex="4" name="address" required> <mat-label>Bitcoin Address</mat-label>
<input matInput formControlName="transactionAddress" tabindex="4" name="address" required>
<mat-error *ngIf="sendFundFormGroup.controls.transactionAddress.errors?.required">Bitcoin address is required.</mat-error> <mat-error *ngIf="sendFundFormGroup.controls.transactionAddress.errors?.required">Bitcoin address is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex.gt-sm="25"> <mat-form-field fxLayout="column" fxFlex.gt-sm="25">
@ -86,11 +92,13 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="sendFundFormGroup.controls.selTransType.value === '1'" fxFlex.gt-sm="25" fxLayoutAlign="start end"> <mat-form-field *ngIf="sendFundFormGroup.controls.selTransType.value === '1'" fxFlex.gt-sm="25" fxLayoutAlign="start end">
<input matInput formControlName="transactionBlocks" placeholder="Number of Blocks" type="number" name="blcks" required tabindex="6" [step]="1" [min]="0"> <mat-label>Number of Blocks</mat-label>
<input matInput formControlName="transactionBlocks" type="number" name="blcks" required tabindex="6" [step]="1" [min]="0">
<mat-error *ngIf="sendFundFormGroup.controls.transactionBlocks.errors?.required">Number of blocks is required.</mat-error> <mat-error *ngIf="sendFundFormGroup.controls.transactionBlocks.errors?.required">Number of blocks is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="sendFundFormGroup.controls.selTransType.value === '2'" fxFlex.gt-sm="25" fxLayoutAlign="start end"> <mat-form-field *ngIf="sendFundFormGroup.controls.selTransType.value === '2'" fxFlex.gt-sm="25" fxLayoutAlign="start end">
<input matInput formControlName="transactionFees" placeholder="Fees (Sats/vByte)" type="number" name="chainFees" required tabindex="7" [step]="1" [min]="0"> <mat-label>Fees (Sats/vByte)</mat-label>
<input matInput formControlName="transactionFees" type="number" name="chainFees" required tabindex="7" [step]="1" [min]="0">
<mat-error *ngIf="sendFundFormGroup.controls.transactionFees.errors?.required">Fees is required.</mat-error> <mat-error *ngIf="sendFundFormGroup.controls.transactionFees.errors?.required">Fees is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>

@ -26,7 +26,8 @@
</div> </div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<mat-form-field fxLayout="column" fxFlex.gt-sm="32" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex.gt-sm="32" fxLayoutAlign="start end">
<input #outputIdx="ngModel" matInput placeholder="Index for Change Output" type="number" tabindex="1" required name="outputIdx" [step]="1" [min]="0" [(ngModel)]="outputIndex"> <mat-label>Index for Change Output</mat-label>
<input #outputIdx="ngModel" matInput type="number" tabindex="1" required name="outputIdx" [step]="1" [min]="0" [(ngModel)]="outputIndex">
<mat-error *ngIf="outputIdx.errors?.required">Index for change output is required.</mat-error> <mat-error *ngIf="outputIdx.errors?.required">Index for change output is required.</mat-error>
<mat-error *ngIf="outputIdx.errors?.pendingChannelOutputIndex">Invalid index value.</mat-error> <mat-error *ngIf="outputIdx.errors?.pendingChannelOutputIndex">Invalid index value.</mat-error>
</mat-form-field> </mat-form-field>
@ -38,12 +39,14 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '1'" fxFlex.gt-sm="32" fxLayoutAlign="start end"> <mat-form-field *ngIf="selTransType === '1'" fxFlex.gt-sm="32" fxLayoutAlign="start end">
<input #blcks="ngModel" matInput placeholder="Number of Blocks" type="number" name="blocks" required <mat-label>Number of Blocks</mat-label>
<input #blcks="ngModel" matInput type="number" name="blocks" required
tabindex="3" [step]="1" [min]="0" [(ngModel)]="blocks"> tabindex="3" [step]="1" [min]="0" [(ngModel)]="blocks">
<mat-error *ngIf="!blocks">Number of blocks is required.</mat-error> <mat-error *ngIf="!blocks">Number of blocks is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '2'" fxFlex.gt-sm="32" fxLayoutAlign="start end"> <mat-form-field *ngIf="selTransType === '2'" fxFlex.gt-sm="32" fxLayoutAlign="start end">
<input #fee="ngModel" matInput placeholder="Fees (Sats/vByte)" <mat-label>Fees (Sats/vByte)</mat-label>
<input #fee="ngModel" matInput
type="number" name="fees" required tabindex="4" [step]="1" [min]="0" [(ngModel)]="fees"> type="number" name="fees" required tabindex="4" [step]="1" [min]="0" [(ngModel)]="fees">
<mat-error *ngIf="!fees">Fees is required.</mat-error> <mat-error *ngIf="!fees">Fees is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -27,7 +27,8 @@
<ng-template matStepLabel>{{inputFormLabel}}</ng-template> <ng-template matStepLabel>{{inputFormLabel}}</ng-template>
<div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxLayout="column" fxFlex="48"> <mat-form-field fxLayout="column" fxFlex="48">
<input autoFocus matInput placeholder="Amount" type="number" tabindex="1" formControlName="rebalanceAmount" required [step]="100"> <mat-label>Amount</mat-label>
<input autoFocus matInput type="number" tabindex="1" formControlName="rebalanceAmount" required [step]="100">
<mat-hint>(Local Bal: {{selChannel?.local_balance}}, Remaining: {{selChannel?.local_balance - ((inputFormGroup.controls.rebalanceAmount.value) ? inputFormGroup.controls.rebalanceAmount.value : 0)}})</mat-hint> <mat-hint>(Local Bal: {{selChannel?.local_balance}}, Remaining: {{selChannel?.local_balance - ((inputFormGroup.controls.rebalanceAmount.value) ? inputFormGroup.controls.rebalanceAmount.value : 0)}})</mat-hint>
<span matSuffix>Sats</span> <span matSuffix>Sats</span>
<mat-error *ngIf="inputFormGroup.controls.rebalanceAmount.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="inputFormGroup.controls.rebalanceAmount.errors?.required">Amount is required.</mat-error>
@ -35,7 +36,8 @@
<mat-error *ngIf="inputFormGroup.controls.rebalanceAmount.errors?.max">Amount must be less than or equal to {{selChannel?.local_balance}}.</mat-error> <mat-error *ngIf="inputFormGroup.controls.rebalanceAmount.errors?.max">Amount must be less than or equal to {{selChannel?.local_balance}}.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="48" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="48" fxLayoutAlign="start end">
<input type="text" placeholder="Receive from Peer" aria-label="Receive from Peer" matInput formControlName="selRebalancePeer" tabindex="2" required [matAutocomplete]="auto" (change)="onSelectedPeerChanged()"> <mat-label>Receive from Peer</mat-label>
<input type="text" aria-label="Receive from Peer" matInput formControlName="selRebalancePeer" tabindex="2" required [matAutocomplete]="auto" (change)="onSelectedPeerChanged()">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedPeerChanged()"> <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedPeerChanged()">
<mat-option *ngFor="let activeChannel of filteredActiveChannels | async" [value]="activeChannel">{{activeChannel.remote_alias}} - {{activeChannel.chan_id}}</mat-option> <mat-option *ngFor="let activeChannel of filteredActiveChannels | async" [value]="activeChannel">{{activeChannel.remote_alias}} - {{activeChannel.chan_id}}</mat-option>
</mat-autocomplete> </mat-autocomplete>
@ -54,14 +56,16 @@
<div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch">
<div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxLayout="column" fxFlex="48" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="48" fxLayoutAlign="start end">
<mat-select tabindex="6" formControlName="selFeeLimitType" Placeholder="Fee Limits" required> <mat-label>Fee Limits</mat-label>
<mat-select tabindex="6" formControlName="selFeeLimitType" required>
<mat-option *ngFor="let feeLimitType of feeLimitTypes" [value]="feeLimitType"> <mat-option *ngFor="let feeLimitType of feeLimitTypes" [value]="feeLimitType">
{{feeLimitType.name}} {{feeLimitType.name}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="48"> <mat-form-field fxLayout="column" fxFlex="48">
<input matInput formControlName="feeLimit" type="number" tabindex="7" required placeholder="{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}}" [step]="1"> <mat-label>{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}}</mat-label>
<input matInput formControlName="feeLimit" type="number" tabindex="7" required [step]="1">
<mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.required">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} is required.</mat-error> <mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.required">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} is required.</mat-error>
<mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.min">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} must be a positive number.</mat-error> <mat-error *ngIf="feeFormGroup.controls.feeLimit.errors?.min">{{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} must be a positive number.</mat-error>
</mat-form-field> </mat-form-field>

@ -31,15 +31,18 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '0'" fxFlex="48"> <mat-form-field *ngIf="selTransType === '0'" fxFlex="48">
<input matInput placeholder="Default" disabled> <mat-label>Default</mat-label>
<input matInput disabled>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '1'" fxFlex.gt-sm="48" fxLayoutAlign="start end"> <mat-form-field *ngIf="selTransType === '1'" fxFlex.gt-sm="48" fxLayoutAlign="start end">
<input #blcks="ngModel" matInput placeholder="Number of Blocks" type="number" name="blocks" required <mat-label>Number of Blocks</mat-label>
<input #blcks="ngModel" matInput type="number" name="blocks" required
tabindex="2" [step]="1" [min]="0" [(ngModel)]="blocks"> tabindex="2" [step]="1" [min]="0" [(ngModel)]="blocks">
<mat-error *ngIf="!blocks">Number of blocks is required.</mat-error> <mat-error *ngIf="!blocks">Number of blocks is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="selTransType === '2'" fxFlex.gt-sm="48" fxLayoutAlign="start end"> <mat-form-field *ngIf="selTransType === '2'" fxFlex.gt-sm="48" fxLayoutAlign="start end">
<input #clchfee="ngModel" matInput placeholder="Fees (Sats/vByte)" <mat-label>Fees (Sats/vByte)</mat-label>
<input #clchfee="ngModel" matInput
type="number" name="ccfees" required tabindex="3" [step]="1" [min]="0" [(ngModel)]="fees"> type="number" name="ccfees" required tabindex="3" [step]="1" [min]="0" [(ngModel)]="fees">
<mat-error *ngIf="!fees">Fees is required.</mat-error> <mat-error *ngIf="!fees">Fees is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -10,7 +10,8 @@
<form #form="ngForm" fxLayout="column" (submit)="onOpenChannel()" (reset)="resetData()"> <form #form="ngForm" fxLayout="column" (submit)="onOpenChannel()" (reset)="resetData()">
<div fxLayout="column"> <div fxLayout="column">
<mat-form-field *ngIf="!peer && peers && peers.length > 0" fxFlex="100"> <mat-form-field *ngIf="!peer && peers && peers.length > 0" fxFlex="100">
<input type="text" placeholder="Peer Alias" aria-label="Peers" matInput tabindex="1" required [formControl]="selectedPeer" [matAutocomplete]="auto"> <mat-label>Peer Alias</mat-label>
<input type="text" aria-label="Peers" matInput tabindex="1" required [formControl]="selectedPeer" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedPeerChanged()"> <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedPeerChanged()">
<mat-option *ngFor="let peer of filteredPeers | async" [value]="peer">{{peer.alias ? peer.alias : peer.pub_key ? peer.pub_key : ''}}</mat-option> <mat-option *ngFor="let peer of filteredPeers | async" [value]="peer">{{peer.alias ? peer.alias : peer.pub_key ? peer.pub_key : ''}}</mat-option>
</mat-autocomplete> </mat-autocomplete>
@ -22,7 +23,8 @@
<div fxLayout="column"> <div fxLayout="column">
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<mat-form-field fxLayout="column" fxFlex="60" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="60" fxLayoutAlign="start end">
<input #amt="ngModel" matInput placeholder="Amount" type="number" tabindex="1" required name="amnt" [step]="1000" [min]="1" [max]="totalBalance" [(ngModel)]="fundingAmount"> <mat-label>Amount</mat-label>
<input #amt="ngModel" matInput type="number" tabindex="1" required name="amnt" [step]="1000" [min]="1" [max]="totalBalance" [(ngModel)]="fundingAmount">
<mat-hint>(Remaining Bal: {{totalBalance - ((fundingAmount) ? fundingAmount : 0) | number}})</mat-hint> <mat-hint>(Remaining Bal: {{totalBalance - ((fundingAmount) ? fundingAmount : 0) | number}})</mat-hint>
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-error *ngIf="amount.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="amount.errors?.required">Amount is required.</mat-error>

@ -13,7 +13,8 @@
<form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1" [formGroup]="peerFormGroup"> <form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="my-1" [formGroup]="peerFormGroup">
<ng-template matStepLabel>{{peerFormLabel}}</ng-template> <ng-template matStepLabel>{{peerFormLabel}}</ng-template>
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<input autoFocus matInput placeholder="Lightning Address (pubkey OR pubkey@ip:port)" formControlName="peerAddress" tabindex="1" required> <mat-label>Lightning Address (pubkey OR pubkey@ip:port)</mat-label>
<input autoFocus matInput formControlName="peerAddress" tabindex="1" required>
<mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error> <mat-error *ngIf="peerFormGroup.controls.peerAddress.errors?.required">Address is required.</mat-error>
</mat-form-field> </mat-form-field>
<div *ngIf="peerConnectionError !== ''" fxFlex="100" class="alert alert-danger mt-1"> <div *ngIf="peerConnectionError !== ''" fxFlex="100" class="alert alert-danger mt-1">
@ -31,7 +32,8 @@
<div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxLayout.gt-sm="row wrap" fxFlex="100" fxLayoutAlign="space-between stretch">
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center">
<mat-form-field fxLayout="column" fxFlex="60" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="60" fxLayoutAlign="start end">
<input matInput formControlName="fundingAmount" placeholder="Amount" type="number" tabindex="1" required [step]="1000"> <mat-label>Amount</mat-label>
<input matInput formControlName="fundingAmount" type="number" tabindex="1" required [step]="1000">
<mat-hint>Remaining Bal: {{totalBalance - ((channelFormGroup.controls.fundingAmount.value) ? channelFormGroup.controls.fundingAmount.value : 0)}}</mat-hint> <mat-hint>Remaining Bal: {{totalBalance - ((channelFormGroup.controls.fundingAmount.value) ? channelFormGroup.controls.fundingAmount.value : 0)}}</mat-hint>
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-error *ngIf="channelFormGroup.controls.fundingAmount.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="channelFormGroup.controls.fundingAmount.errors?.required">Amount is required.</mat-error>
@ -44,7 +46,8 @@
</div> </div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1">
<mat-form-field fxLayout="column" fxFlex="30" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="30" fxLayoutAlign="start end">
<mat-select tabindex="3" formControlName="selTransType" placeholder="Transaction Type"> <mat-label>Transaction Type</mat-label>
<mat-select tabindex="3" formControlName="selTransType">
<mat-option *ngFor="let transType of transTypes" [value]="transType.id"> <mat-option *ngFor="let transType of transTypes" [value]="transType.id">
{{transType.name}} {{transType.name}}
</mat-option> </mat-option>

@ -6,12 +6,14 @@
<div fxFlex="70">Incoming</div> <div fxFlex="70">Incoming</div>
<div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch"> <div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch">
<!-- <mat-form-field fxLayout="column" fxFlex="49"> <!-- <mat-form-field fxLayout="column" fxFlex="49">
<mat-select placeholder="Filter By" tabindex="1" [(ngModel)]="selFilterByIn" (selectionChange)="selFilterIn=''; applyFilterIncoming()" name="filterByIn"> <mat-label>Filter By</mat-label>
<mat-select tabindex="1" [(ngModel)]="selFilterByIn" (selectionChange)="selFilterIn=''; applyFilterIncoming()" name="filterByIn">
<mat-option *ngFor="let column of ['all'].concat(displayedColumns)" [value]="column">{{getLabel(column)}}</mat-option> <mat-option *ngFor="let column of ['all'].concat(displayedColumns)" [value]="column">{{getLabel(column)}}</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput [(ngModel)]="selFilterIn" (input)="applyFilterIncoming()" (keyup)="applyFilterIncoming()" name="filterin" placeholder="Filter"> <mat-label>Filter</mat-label>
<input matInput [(ngModel)]="selFilterIn" (input)="applyFilterIncoming()" (keyup)="applyFilterIncoming()" name="filterin">
</mat-form-field> --> </mat-form-field> -->
</div> </div>
</div> </div>
@ -70,12 +72,14 @@
<div fxFlex="70">Outgoing</div> <div fxFlex="70">Outgoing</div>
<div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch"> <div fxFlex.gt-xs="30" fxLayoutAlign.gt-xs="space-between center" fxLayout="row" fxLayoutAlign="space-between stretch">
<!-- <mat-form-field fxLayout="column" fxFlex="49"> <!-- <mat-form-field fxLayout="column" fxFlex="49">
<mat-select placeholder="Filter By" tabindex="1" [(ngModel)]="selFilterByOut" (selectionChange)="selFilterOut=''; applyFilterOutgoing()" name="filterByOut"> <mat-label>Filter By</mat-label>
<mat-select tabindex="1" [(ngModel)]="selFilterByOut" (selectionChange)="selFilterOut=''; applyFilterOutgoing()" name="filterByOut">
<mat-option *ngFor="let column of ['all'].concat(displayedColumns.slice(0, -1))" [value]="column">{{getLabel(column)}}</mat-option> <mat-option *ngFor="let column of ['all'].concat(displayedColumns.slice(0, -1))" [value]="column">{{getLabel(column)}}</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput [(ngModel)]="selFilterOut" (input)="applyFilterOutgoing()" (keyup)="applyFilterOutgoing()" name="filterout" placeholder="Filter"> <mat-label>Filter</mat-label>
<input matInput [(ngModel)]="selFilterOut" (input)="applyFilterOutgoing()" (keyup)="applyFilterOutgoing()" name="filterout">
</mat-form-field> --> </mat-form-field> -->
</div> </div>
</div> </div>

@ -9,14 +9,16 @@
<form #routingForm="ngForm" fxFlex="100" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch" class="w-100 mb-1" (ngSubmit)="onEventsFetch()"> <form #routingForm="ngForm" fxFlex="100" fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch" class="w-100 mb-1" (ngSubmit)="onEventsFetch()">
<div fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start"> <mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start">
<input #strtDate="ngModel" matInput placeholder="Start Date" name="startDate" <mat-label>Start Date</mat-label>
<input #strtDate="ngModel" matInput name="startDate"
tabindex="1" [matDatepicker]="startDatepicker" [max]="today" [(ngModel)]="startDate"> tabindex="1" [matDatepicker]="startDatepicker" [max]="today" [(ngModel)]="startDate">
<mat-datepicker-toggle matSuffix [for]="startDatepicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="startDatepicker"></mat-datepicker-toggle>
<mat-datepicker #startDatepicker [startAt]="startDate"></mat-datepicker> <mat-datepicker #startDatepicker [startAt]="startDate"></mat-datepicker>
<mat-error *ngIf="strtDate.errors">Invalid date format.</mat-error> <mat-error *ngIf="strtDate.errors">Invalid date format.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start"> <mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start">
<input #enDate="ngModel" matInput placeholder="End Date" name="endDate" tabindex="2" [matDatepicker]="endDatepicker" <mat-label>End Date</mat-label>
<input #enDate="ngModel" matInput name="endDate" tabindex="2" [matDatepicker]="endDatepicker"
[min]="startDate" [max]="today" [(ngModel)]="endDate"> [min]="startDate" [max]="today" [(ngModel)]="endDate">
<mat-datepicker-toggle matSuffix [for]="endDatepicker"></mat-datepicker-toggle> <mat-datepicker-toggle matSuffix [for]="endDatepicker"></mat-datepicker-toggle>
<mat-datepicker #endDatepicker [startAt]="endDate"></mat-datepicker> <mat-datepicker #endDatepicker [startAt]="endDate"></mat-datepicker>

@ -1,7 +1,8 @@
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch">
<form #form="ngForm" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap"> <form #form="ngForm" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end">
<textarea autoFocus matInput rows="1" placeholder="Message to sign" required tabindex="1" name="message" [(ngModel)]="message" (keyup)="onMessageChange()"></textarea> <mat-label>Message to sign</mat-label>
<textarea autoFocus matInput rows="1" required tabindex="1" name="message" [(ngModel)]="message" (keyup)="onMessageChange()"></textarea>
<mat-error *ngIf="!message">Message is required.</mat-error> <mat-error *ngIf="!message">Message is required.</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" class="my-1"> <div fxLayout="row" class="my-1">

@ -1,11 +1,13 @@
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch">
<form #form="ngForm" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap"> <form #form="ngForm" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end">
<textarea autoFocus matInput rows="1" placeholder="Message to verify" required tabindex="1" name="message" [(ngModel)]="message" (keyup)="onChange()"></textarea> <mat-label>Message to verify</mat-label>
<textarea autoFocus matInput rows="1" required tabindex="1" name="message" [(ngModel)]="message" (keyup)="onChange()"></textarea>
<mat-error *ngIf="!message">Message is required.</mat-error> <mat-error *ngIf="!message">Message is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end">
<input #sign="ngModel" matInput placeholder="Signature provided" name="signature" tabindex="2" required [(ngModel)]="signature" (keyup)="onChange()"> <mat-label>Signature provided</mat-label>
<input #sign="ngModel" matInput name="signature" tabindex="2" required [(ngModel)]="signature" (keyup)="onChange()">
<mat-error *ngIf="!signature">Signature is required.</mat-error> <mat-error *ngIf="!signature">Signature is required.</mat-error>
</mat-form-field> </mat-form-field>
<p *ngIf="showVerifyStatus && !verifyRes.valid" fxFlex="100" class="color-warn" fxLayoutAlign="start center"><mat-icon class="mr-1 icon-small">close</mat-icon>Verification failed, please double check message and signature</p> <p *ngIf="showVerifyStatus && !verifyRes.valid" fxFlex="100" class="color-warn" fxLayoutAlign="start center"><mat-icon class="mr-1 icon-small">close</mat-icon>Verification failed, please double check message and signature</p>

@ -9,15 +9,18 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="space-between start" fxFlex="100"> <form #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="space-between start" fxFlex="100">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="end start"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="end start">
<input matInput autoFocus placeholder="Memo" tabindex="1" name="memo" [(ngModel)]="memo"> <mat-label>Memo</mat-label>
<input matInput autoFocus tabindex="1" name="memo" [(ngModel)]="memo">
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="50" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="50" fxLayoutAlign="start end">
<input matInput placeholder="Amount" type="number" tabindex="2" name="invoiceValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()"> <mat-label>Amount</mat-label>
<input matInput type="number" tabindex="2" name="invoiceValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()">
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-hint>{{invoiceValueHint}}</mat-hint> <mat-hint>{{invoiceValueHint}}</mat-hint>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="24" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="24" fxLayoutAlign="start end">
<input matInput placeholder="Expiry" type="number" tabindex="3" name="expiry" [step]="selTimeUnit === timeUnitEnum.SECS ? 300 : selTimeUnit === timeUnitEnum.MINS ? 10 : selTimeUnit === timeUnitEnum.HOURS ? 2 : 1" [min]="1" [(ngModel)]="expiry"> <mat-label>Expiry</mat-label>
<input matInput type="number" tabindex="3" name="expiry" [step]="selTimeUnit === timeUnitEnum.SECS ? 300 : selTimeUnit === timeUnitEnum.MINS ? 10 : selTimeUnit === timeUnitEnum.HOURS ? 2 : 1" [min]="1" [(ngModel)]="expiry">
<span matSuffix>{{selTimeUnit | titlecase}} </span> <span matSuffix>{{selTimeUnit | titlecase}} </span>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="24" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="24" fxLayoutAlign="start end">

@ -1,10 +1,12 @@
<div fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch" class="padding-gap"> <div fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch" class="padding-gap">
<form *ngIf="calledFrom === 'home'" #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="stretch start" fxFlex="100"> <form *ngIf="calledFrom === 'home'" #addInvoiceForm="ngForm" fxLayout="row wrap" fxLayoutAlign="stretch start" fxFlex="100">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="end start"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="end start">
<input matInput placeholder="Memo" tabindex="1" name="memo" [(ngModel)]="memo"> <mat-label>Memo</mat-label>
<input matInput tabindex="1" name="memo" [(ngModel)]="memo">
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start end">
<input matInput placeholder="Amount" type="number" tabindex="2" name="invValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()"> <mat-label>Amount</mat-label>
<input matInput type="number" tabindex="2" name="invValue" [step]="100" [min]="1" [(ngModel)]="invoiceValue" (keyup)="onInvoiceValueChange()">
<span matSuffix> Sats </span> <span matSuffix> Sats </span>
<mat-hint>{{invoiceValueHint}}</mat-hint> <mat-hint>{{invoiceValueHint}}</mat-hint>
</mat-form-field> </mat-form-field>

@ -1,7 +1,8 @@
<div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch" class="padding-gap-x"> <div fxLayout="column" fxFlex="100" fxLayoutAlign="space-between stretch" class="padding-gap-x">
<form *ngIf="calledFrom === 'home'" #sendPaymentForm="ngForm" fxLayoutAlign="space-between stretch" fxLayout="row wrap"> <form *ngIf="calledFrom === 'home'" #sendPaymentForm="ngForm" fxLayoutAlign="space-between stretch" fxLayout="row wrap">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<textarea #paymentReq="ngModel" matInput placeholder="Payment Request" name="paymentRequest" tabindex="1" required [perfectScrollbar] [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea> <mat-label>Payment Request</mat-label>
<textarea #paymentReq="ngModel" matInput name="paymentRequest" tabindex="1" required [perfectScrollbar] [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea>
<mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint> <mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint>
<mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error> <mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -9,13 +9,15 @@
<mat-card-content class="padding-gap-x-large"> <mat-card-content class="padding-gap-x-large">
<form #sendPaymentForm="ngForm" fxLayoutAlign="space-between stretch" fxLayout="column"> <form #sendPaymentForm="ngForm" fxLayoutAlign="space-between stretch" fxLayout="column">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<textarea #paymentReq="ngModel" autoFocus matInput placeholder="Payment Request" name="paymentRequest" rows="4" tabindex="1" required [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea> <mat-label>Payment Request</mat-label>
<textarea #paymentReq="ngModel" autoFocus matInput name="paymentRequest" rows="4" tabindex="1" required [ngModel]="paymentRequest" (ngModelChange)="onPaymentRequestEntry($event)" (matTextareaAutosize)="true"></textarea>
<mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint> <mat-hint *ngIf="paymentRequest && paymentDecodedHint !== ''">{{paymentDecodedHint}}</mat-hint>
<mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error> <mat-error *ngIf="!paymentRequest">Payment request is required.</mat-error>
<mat-error *ngIf="paymentReq.errors?.decodeError">{{paymentDecodedHint}}</mat-error> <mat-error *ngIf="paymentReq.errors?.decodeError">{{paymentDecodedHint}}</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="zeroAmtInvoice" fxFlex="100"> <mat-form-field *ngIf="zeroAmtInvoice" fxFlex="100">
<input #paymentAmt="ngModel" matInput placeholder="Amount (Sats)" name="amount" tabindex="2" required [(ngModel)]="paymentAmount" (change)="onAmountChange($event)"> <mat-label>Amount (Sats)</mat-label>
<input #paymentAmt="ngModel" matInput name="amount" tabindex="2" required [(ngModel)]="paymentAmount" (change)="onAmountChange($event)">
<mat-hint>It is a zero amount invoice, enter amount to be paid.</mat-hint> <mat-hint>It is a zero amount invoice, enter amount to be paid.</mat-hint>
<mat-error *ngIf="!paymentAmount">Payment amount is required.</mat-error> <mat-error *ngIf="!paymentAmount">Payment amount is required.</mat-error>
</mat-form-field> </mat-form-field>
@ -27,7 +29,8 @@
</mat-expansion-panel-header> </mat-expansion-panel-header>
<div fxFlex="100" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap"> <div fxFlex="100" fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap">
<mat-form-field fxLayout="column" fxFlex="30" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="30" fxLayoutAlign="start end">
<mat-select tabindex="5" Placeholder="Fee Limits" [(value)]="selFeeLimitType"> <mat-label>Fee Limits</mat-label>
<mat-select tabindex="5" [(value)]="selFeeLimitType">
<mat-option *ngFor="let feeLimitType of feeLimitTypes" [value]="feeLimitType"> <mat-option *ngFor="let feeLimitType of feeLimitTypes" [value]="feeLimitType">
{{feeLimitType?.name}} {{feeLimitType?.name}}
</mat-option> </mat-option>
@ -39,7 +42,8 @@
<mat-error *ngIf="selFeeLimitType !== feeLimitTypes[0] && !feeLimit">{{selFeeLimitType?.placeholder}} is required.</mat-error> <mat-error *ngIf="selFeeLimitType !== feeLimitTypes[0] && !feeLimit">{{selFeeLimitType?.placeholder}} is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="40" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="40" fxLayoutAlign="start end">
<input type="text" placeholder="First Outgoing Channel" aria-label="First Outgoing Channel" matInput tabindex="7" [formControl]="selectedChannelCtrl" [matAutocomplete]="auto"> <mat-label>First Outgoing Channel</mat-label>
<input type="text" aria-label="First Outgoing Channel" matInput tabindex="7" [formControl]="selectedChannelCtrl" [matAutocomplete]="auto">
<mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedChannelChanged()"> <mat-autocomplete #auto="matAutocomplete" [displayWith]="displayFn" (optionSelected)="onSelectedChannelChanged()">
<mat-option *ngFor="let activeChannel of filteredMinAmtActvChannels" [value]="activeChannel">{{activeChannel?.remote_alias || activeChannel?.chan_id}}</mat-option> <mat-option *ngFor="let activeChannel of filteredMinAmtActvChannels" [value]="activeChannel">{{activeChannel?.remote_alias || activeChannel?.chan_id}}</mat-option>
</mat-autocomplete> </mat-autocomplete>

@ -18,13 +18,15 @@
<mat-step label="Wallet Password" state="password" [stepControl]="passwordFormGroup"> <mat-step label="Wallet Password" state="password" [stepControl]="passwordFormGroup">
<form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="mt-1" [formGroup]="passwordFormGroup"> <form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between" class="mt-1" [formGroup]="passwordFormGroup">
<mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start"> <mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start">
<input matInput type="password" placeholder="Password" name="initWalletPassword" formControlName="initWalletPassword" tabindex="5" required> <mat-label>Password</mat-label>
<input matInput type="password" name="initWalletPassword" formControlName="initWalletPassword" tabindex="5" required>
<mat-hint>Enter Wallet Password</mat-hint> <mat-hint>Enter Wallet Password</mat-hint>
<mat-error *ngIf="passwordFormGroup.controls.initWalletPassword.errors?.required">Password is required.</mat-error> <mat-error *ngIf="passwordFormGroup.controls.initWalletPassword.errors?.required">Password is required.</mat-error>
<mat-error *ngIf="passwordFormGroup.controls.initWalletPassword.errors?.minlength">Password must be at least 8 characters in length.</mat-error> <mat-error *ngIf="passwordFormGroup.controls.initWalletPassword.errors?.minlength">Password must be at least 8 characters in length.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start"> <mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start">
<input matInput type="password" placeholder="Confirm Password" name="initWalletConfirmPassword" formControlName="initWalletConfirmPassword" tabindex="6" required> <mat-label>Confirm Password</mat-label>
<input matInput type="password" name="initWalletConfirmPassword" formControlName="initWalletConfirmPassword" tabindex="6" required>
<mat-hint>Confirm Wallet Password</mat-hint> <mat-hint>Confirm Wallet Password</mat-hint>
<mat-error *ngIf="passwordFormGroup.controls.initWalletConfirmPassword.errors?.required">Confirm password is required.</mat-error> <mat-error *ngIf="passwordFormGroup.controls.initWalletConfirmPassword.errors?.required">Confirm password is required.</mat-error>
<mat-error *ngIf="passwordFormGroup.controls.initWalletConfirmPassword.errors?.minlength">Confirm password must be at least 8 characters in length.</mat-error> <mat-error *ngIf="passwordFormGroup.controls.initWalletConfirmPassword.errors?.minlength">Confirm password must be at least 8 characters in length.</mat-error>
@ -42,7 +44,8 @@
<div fxFlex="100" fxLayout="column" fxLayoutAlign="start stretch"> <div fxFlex="100" fxLayout="column" fxLayoutAlign="start stretch">
<mat-slide-toggle fxFlex="20" tabindex="8" color="primary" class="chkbox-wallet" formControlName="existingCipher" name="existingCipher" [labelPosition]="'before'">Existing Cipher</mat-slide-toggle> <mat-slide-toggle fxFlex="20" tabindex="8" color="primary" class="chkbox-wallet" formControlName="existingCipher" name="existingCipher" [labelPosition]="'before'">Existing Cipher</mat-slide-toggle>
<mat-form-field fxLayout="column" fxFlex="75" fxLayoutAlign="start" class="my-1"> <mat-form-field fxLayout="column" fxFlex="75" fxLayoutAlign="start" class="my-1">
<input autofocus matInput type="input" placeholder="Comma separated array of 24 words cipher seed" name="cipherSeed" formControlName="cipherSeed" tabindex="9" required> <mat-label>Comma separated array of 24 words cipher seed</mat-label>
<input autofocus matInput type="input" name="cipherSeed" formControlName="cipherSeed" tabindex="9" required>
<mat-hint>Cipher Seed</mat-hint> <mat-hint>Cipher Seed</mat-hint>
<mat-error *ngIf="cipherFormGroup.controls.cipherSeed.errors?.required">Cipher seed is required.</mat-error> <mat-error *ngIf="cipherFormGroup.controls.cipherSeed.errors?.required">Cipher seed is required.</mat-error>
<mat-error *ngIf="!cipherFormGroup.controls.cipherSeed.errors?.required && cipherFormGroup.controls.cipherSeed.errors?.invalidCipher">Invalid Cipher. Enter comma separated 24 words cipher seed.</mat-error> <mat-error *ngIf="!cipherFormGroup.controls.cipherSeed.errors?.required && cipherFormGroup.controls.cipherSeed.errors?.invalidCipher">Invalid Cipher. Enter comma separated 24 words cipher seed.</mat-error>
@ -59,7 +62,8 @@
<div fxFlex="100" fxLayout="column" fxLayoutAlign="start stretch"> <div fxFlex="100" fxLayout="column" fxLayoutAlign="start stretch">
<mat-slide-toggle fxFlex="20" tabindex="10" color="primary" class="chkbox-wallet" formControlName="enterPassphrase" name="enterPassphrase" [labelPosition]="'before'">Existing Passphrase</mat-slide-toggle> <mat-slide-toggle fxFlex="20" tabindex="10" color="primary" class="chkbox-wallet" formControlName="enterPassphrase" name="enterPassphrase" [labelPosition]="'before'">Existing Passphrase</mat-slide-toggle>
<mat-form-field fxLayout="column" fxFlex="75" fxLayoutAlign="start"> <mat-form-field fxLayout="column" fxFlex="75" fxLayoutAlign="start">
<input matInput type="password" placeholder="Passphrase" name="passphrase" formControlName="passphrase" tabindex="12" required> <mat-label>Passphrase</mat-label>
<input matInput type="password" name="passphrase" formControlName="passphrase" tabindex="12" required>
<mat-hint>Enter Passphrase</mat-hint> <mat-hint>Enter Passphrase</mat-hint>
<mat-error *ngIf="passphraseFormGroup.controls.passphrase.errors?.required">Passphrase is required.</mat-error> <mat-error *ngIf="passphraseFormGroup.controls.passphrase.errors?.required">Passphrase is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -1,7 +1,8 @@
<div fxLayout="column" class="padding-gap mb-2"> <div fxLayout="column" class="padding-gap mb-2">
<form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between"> <form fxLayout="column" fxLayout.gt-sm="row wrap" fxLayoutAlign="start" fxLayoutAlign.gt-sm="space-between">
<mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start"> <mat-form-field fxLayout="column" fxFlex="100" fxLayoutAlign="start">
<input autoFocus matInput type="password" placeholder="Password" name="walletPassword" tabindex="1" required [(ngModel)]="walletPassword"> <mat-label>Password</mat-label>
<input autoFocus matInput type="password" name="walletPassword" tabindex="1" required [(ngModel)]="walletPassword">
<mat-hint>Enter Wallet Password</mat-hint> <mat-hint>Enter Wallet Password</mat-hint>
<mat-error *ngIf="!walletPassword">Wallet password is required.</mat-error> <mat-error *ngIf="!walletPassword">Wallet password is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -9,7 +9,8 @@
<mat-card-content fxLayout="row" class="padding-gap-x-large"> <mat-card-content fxLayout="row" class="padding-gap-x-large">
<form fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch"> <form fxLayout="column" fxFlex="100" fxLayoutAlign="start stretch">
<mat-form-field> <mat-form-field>
<input autoFocus matInput placeholder="Password" type="password" id="password" name="password" tabindex="1" required [(ngModel)]="password"> <mat-label>Password</mat-label>
<input autoFocus matInput type="password" id="password" name="password" tabindex="1" required [(ngModel)]="password">
<mat-error *ngIf="!password">Password is required.</mat-error> <mat-error *ngIf="!password">Password is required.</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="end center" class="mt-1"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="end center" class="mt-1">

@ -9,7 +9,8 @@
<mat-card-content fxLayout="row" class="padding-gap-x-large"> <mat-card-content fxLayout="row" class="padding-gap-x-large">
<form #tokenForm="ngForm" fxLayout="column" fxFlex="100" (ngSubmit)="onVerifyToken()"> <form #tokenForm="ngForm" fxLayout="column" fxFlex="100" (ngSubmit)="onVerifyToken()">
<mat-form-field> <mat-form-field>
<input autoFocus matInput placeholder="Token" type="text" id="token" name="token" tabindex="2" required [(ngModel)]="token"> <mat-label>Token</mat-label>
<input autoFocus matInput type="text" id="token" name="token" tabindex="2" required [(ngModel)]="token">
<mat-error *ngIf="!token">Token is required.</mat-error> <mat-error *ngIf="!token">Token is required.</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="end center" class="mt-1"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="end center" class="mt-1">

@ -12,7 +12,8 @@
<ng-template matStepLabel>{{passwordFormLabel}}</ng-template> <ng-template matStepLabel>{{passwordFormLabel}}</ng-template>
<div fxLayout="row"> <div fxLayout="row">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<input autoFocus matInput placeholder="Password" type="password" tabindex="1" formControlName="password" required> <mat-label>Password</mat-label>
<input autoFocus matInput type="password" tabindex="1" formControlName="password" required>
<mat-error *ngIf="passwordFormGroup?.controls?.password?.errors?.required">Password is required.</mat-error> <mat-error *ngIf="passwordFormGroup?.controls?.password?.errors?.required">Password is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
@ -33,7 +34,8 @@
</div> </div>
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<input autoFocus matInput placeholder="Secret Code" type="text" tabindex="4" formControlName="secret" required> <mat-label>Secret Code</mat-label>
<input autoFocus matInput type="text" tabindex="4" formControlName="secret" required>
<fa-icon matSuffix rtlClipboard [icon]="faCopy" [payload]="secretFormGroup?.controls?.secret?.value" (copied)="onCopySecret($event)"></fa-icon> <fa-icon matSuffix rtlClipboard [icon]="faCopy" [payload]="secretFormGroup?.controls?.secret?.value" (copied)="onCopySecret($event)"></fa-icon>
<mat-error *ngIf="secretFormGroup?.controls?.secret?.errors?.required">Secret Code is required.</mat-error> <mat-error *ngIf="secretFormGroup?.controls?.secret?.errors?.required">Secret Code is required.</mat-error>
</mat-form-field> </mat-form-field>
@ -49,7 +51,8 @@
<div *ngIf="!flgValidated || !isTokenValid" fxLayout="column"> <div *ngIf="!flgValidated || !isTokenValid" fxLayout="column">
<div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch"> <div fxLayout="row" fxFlex="100" fxLayoutAlign="space-between stretch">
<mat-form-field fxLayout="column" fxFlex="100"> <mat-form-field fxLayout="column" fxFlex="100">
<input autoFocus matInput placeholder="Token" type="text" tabindex="7" formControlName="token" required> <mat-label>Token</mat-label>
<input autoFocus matInput type="text" tabindex="7" formControlName="token" required>
<mat-error *ngIf="tokenFormGroup?.controls?.token?.errors?.required">Token is required.</mat-error> <mat-error *ngIf="tokenFormGroup?.controls?.token?.errors?.required">Token is required.</mat-error>
<mat-error *ngIf="tokenFormGroup?.controls?.token?.errors?.notValid">Token is invalid.</mat-error> <mat-error *ngIf="tokenFormGroup?.controls?.token?.errors?.notValid">Token is invalid.</mat-error>
</mat-form-field> </mat-form-field>

@ -13,8 +13,9 @@
</div> </div>
<ng-template #controlsPanel let-item='animationDirection'> <ng-template #controlsPanel let-item='animationDirection'>
<div fxLayout="row" fxLayoutAlign="center center" fxFlex="58" [@sliderAnimation]="animationDirection"> <div fxLayout="row" fxLayoutAlign="center center" fxFlex="58" [@sliderAnimation]="animationDirection">
<div fxFlex="50" fxLayoutAlign="center center" fxLayoutAlign.gt-xs="center center" class="font-bold-700"> <div fxFlex="50" fxLayoutAlign="center center" fxLayoutAlign.gt-xs="end center" class="font-bold-700">
<mat-select fxFlex="60" fxFlex.gt-md="30" name="selScrlRange" placeholder="Range" tabindex="3" class="font-bold-700" [(ngModel)]="selScrollRange" (selectionChange)="onRangeChanged($event)"> <mat-label>Range</mat-label>
<mat-select fxFlex="60" fxFlex.gt-md="30" name="selScrlRange" tabindex="3" class="font-bold-700" [(ngModel)]="selScrollRange" (selectionChange)="onRangeChanged($event)">
<mat-option *ngFor="let scrollRange of scrollRanges" [value]="scrollRange"> <mat-option *ngFor="let scrollRange of scrollRanges" [value]="scrollRange">
{{scrollRange | titlecase}} {{scrollRange | titlecase}}
</mat-option> </mat-option>

@ -18,7 +18,8 @@
</div> </div>
<div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1"> <div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1">
<mat-form-field fxLayout="column" fxFlex="48"> <mat-form-field fxLayout="column" fxFlex="48">
<input autoFocus matInput placeholder="Amount" type="number" tabindex="1" formControlName="amount" required [step]="1000"> <mat-label>Amount</mat-label>
<input autoFocus matInput type="number" tabindex="1" formControlName="amount" required [step]="1000">
<mat-hint>Range: {{serviceInfo?.limits?.minimal | number}}-{{serviceInfo?.limits?.maximal | number}}</mat-hint> <mat-hint>Range: {{serviceInfo?.limits?.minimal | number}}-{{serviceInfo?.limits?.maximal | number}}</mat-hint>
<span matSuffix>Sats</span> <span matSuffix>Sats</span>
<mat-error *ngIf="inputFormGroup?.controls?.amount?.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="inputFormGroup?.controls?.amount?.errors?.required">Amount is required.</mat-error>
@ -41,7 +42,8 @@
<mat-radio-button fxFlex="48" tabindex="9" value="external">External Address</mat-radio-button> <mat-radio-button fxFlex="48" tabindex="9" value="external">External Address</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<mat-form-field fxLayout="column" fxFlex="100" class="mt-1"> <mat-form-field fxLayout="column" fxFlex="100" class="mt-1">
<input matInput placeholder="Address" tabindex="10" formControlName="address" [required]="addressFormGroup.controls.addressType.value === 'external'"> <mat-label>Address</mat-label>
<input matInput tabindex="10" formControlName="address" [required]="addressFormGroup.controls.addressType.value === 'external'">
<mat-error *ngIf="addressFormGroup.controls.address.errors?.required">Address is required.</mat-error> <mat-error *ngIf="addressFormGroup.controls.address.errors?.required">Address is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>

@ -24,7 +24,8 @@
</div> </div>
<div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1"> <div fxLayout="row wrap" fxFlex="100" fxLayoutAlign="space-between center" class="mt-1">
<mat-form-field [fxFlex]="direction === LoopTypeEnum.LOOP_OUT ? '35' : '48'"> <mat-form-field [fxFlex]="direction === LoopTypeEnum.LOOP_OUT ? '35' : '48'">
<input autoFocus matInput placeholder="Amount" type="number" tabindex="1" formControlName="amount" required [step]="1000"> <mat-label>Amount</mat-label>
<input autoFocus matInput type="number" tabindex="1" formControlName="amount" required [step]="1000">
<mat-hint>Range: {{minQuote.amount | number}}-{{maxQuote.amount | number}}</mat-hint> <mat-hint>Range: {{minQuote.amount | number}}-{{maxQuote.amount | number}}</mat-hint>
<span matSuffix>Sats</span> <span matSuffix>Sats</span>
<mat-error *ngIf="inputFormGroup.controls.amount.errors?.required">Amount is required.</mat-error> <mat-error *ngIf="inputFormGroup.controls.amount.errors?.required">Amount is required.</mat-error>
@ -32,12 +33,14 @@
<mat-error *ngIf="inputFormGroup.controls.amount.errors?.max">Amount must be less than or equal to {{maxQuote.amount | number}}.</mat-error> <mat-error *ngIf="inputFormGroup.controls.amount.errors?.max">Amount must be less than or equal to {{maxQuote.amount | number}}.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field [fxFlex]="direction === LoopTypeEnum.LOOP_OUT ? '30' : '48'"> <mat-form-field [fxFlex]="direction === LoopTypeEnum.LOOP_OUT ? '30' : '48'">
<input matInput placeholder="Sweep Confirmation Target" type="number" tabindex="2" formControlName="sweepConfTarget" required [step]="1"> <mat-label>Sweep Confirmation Target</mat-label>
<input matInput type="number" tabindex="2" formControlName="sweepConfTarget" required [step]="1">
<mat-error *ngIf="inputFormGroup.controls.sweepConfTarget.errors?.required">Confirmation target is required.</mat-error> <mat-error *ngIf="inputFormGroup.controls.sweepConfTarget.errors?.required">Confirmation target is required.</mat-error>
<mat-error *ngIf="inputFormGroup.controls.sweepConfTarget.errors?.min">Confirmation target must be a positive number.</mat-error> <mat-error *ngIf="inputFormGroup.controls.sweepConfTarget.errors?.min">Confirmation target must be a positive number.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="direction === LoopTypeEnum.LOOP_OUT" fxFlex="30"> <mat-form-field *ngIf="direction === LoopTypeEnum.LOOP_OUT" fxFlex="30">
<input matInput placeholder="Max Off-chain Routing Fee (%)" type="number" tabindex="3" formControlName="routingFeePercent" required [step]="1"> <mat-label>Max Off-chain Routing Fee (%)</mat-label>
<input matInput type="number" tabindex="3" formControlName="routingFeePercent" required [step]="1">
<mat-error *ngIf="inputFormGroup.controls.routingFeePercent.errors?.required">Percentage is required.</mat-error> <mat-error *ngIf="inputFormGroup.controls.routingFeePercent.errors?.required">Percentage is required.</mat-error>
<mat-error *ngIf="inputFormGroup.controls.routingFeePercent.errors?.min">Percentage must be a positive number.</mat-error> <mat-error *ngIf="inputFormGroup.controls.routingFeePercent.errors?.min">Percentage must be a positive number.</mat-error>
</mat-form-field> </mat-form-field>
@ -71,7 +74,8 @@
<mat-radio-button fxFlex="48" tabindex="9" value="external">External Address</mat-radio-button> <mat-radio-button fxFlex="48" tabindex="9" value="external">External Address</mat-radio-button>
</mat-radio-group> </mat-radio-group>
<mat-form-field fxLayout="column" fxFlex="100" class="mt-1"> <mat-form-field fxLayout="column" fxFlex="100" class="mt-1">
<input matInput placeholder="Address" tabindex="10" formControlName="address" [required]="addressFormGroup.controls.addressType.value === 'external'"> <mat-label>Address</mat-label>
<input matInput tabindex="10" formControlName="address" [required]="addressFormGroup.controls.addressType.value === 'external'">
<mat-error *ngIf="addressFormGroup.controls.address.errors?.required">Address is required.</mat-error> <mat-error *ngIf="addressFormGroup.controls.address.errors?.required">Address is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>

@ -14,7 +14,8 @@
<mat-card-content class="pb-2"> <mat-card-content class="pb-2">
<form #loginForm="ngForm" fxLayout="column" fxLayoutAlign="start space-between"> <form #loginForm="ngForm" fxLayout="column" fxLayoutAlign="start space-between">
<mat-form-field> <mat-form-field>
<input autoFocus matInput placeholder="Password" id="password" name="password" tabindex="1" required [type]="flgShow ? 'text' : 'password'" [(ngModel)]="password"> <mat-label>Password</mat-label>
<input autoFocus matInput id="password" name="password" tabindex="1" required [type]="flgShow ? 'text' : 'password'" [(ngModel)]="password">
<button mat-icon-button matSuffix tabindex="2" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="flgShow" (click)="flgShow = !flgShow"> <button mat-icon-button matSuffix tabindex="2" [attr.aria-label]="'Hide password'" [attr.aria-pressed]="flgShow" (click)="flgShow = !flgShow">
<mat-icon>{{flgShow ? 'visibility_off' : 'visibility'}}</mat-icon> <mat-icon>{{flgShow ? 'visibility_off' : 'visibility'}}</mat-icon>
</button> </button>

@ -51,7 +51,8 @@
</div> </div>
<div fxLayout="column" fxLayout.gt-sm="row" fxFlex="100" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch"> <div fxLayout="column" fxLayout.gt-sm="row" fxFlex="100" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch">
<mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start end"> <mat-form-field fxLayout="column" fxFlex="49" fxLayoutAlign="start end">
<mat-select autofocus tabindex="1" placeholder="Policy" name="policy" [(ngModel)]="selPolicyType" (selectionChange)="policyMod=null"> <mat-label>Policy</mat-label>
<mat-select autofocus tabindex="1" name="policy" [(ngModel)]="selPolicyType" (selectionChange)="policyMod=null">
<mat-option *ngFor="let policyType of policyTypes" [value]="policyType"> <mat-option *ngFor="let policyType of policyTypes" [value]="policyType">
{{policyType.id | titlecase}} {{policyType.id | titlecase}}
</mat-option> </mat-option>
@ -68,21 +69,25 @@
</div> </div>
<div fxLayout="column" fxLayout.gt-sm="row" fxFlex="100" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch"> <div fxLayout="column" fxLayout.gt-sm="row" fxFlex="100" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch">
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput placeholder="Lease Base Fee (Sats)" type="number" step="100" min="0" tabindex="3" required name="lease_fee_base_sat" [(ngModel)]="lease_fee_base_sat"> <mat-label>Lease Base Fee (Sats)</mat-label>
<input matInput type="number" step="100" min="0" tabindex="3" required name="lease_fee_base_sat" [(ngModel)]="lease_fee_base_sat">
<mat-error *ngIf="!lease_fee_base_sat">Lease base fee is required.</mat-error> <mat-error *ngIf="!lease_fee_base_sat">Lease base fee is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput placeholder="Lease Base Basis (bps)" type="number" step="1" min="0" tabindex="4" required name="lease_fee_basis" [(ngModel)]="lease_fee_basis"> <mat-label>Lease Base Basis (bps)</mat-label>
<input matInput type="number" step="1" min="0" tabindex="4" required name="lease_fee_basis" [(ngModel)]="lease_fee_basis">
<mat-error *ngIf="!lease_fee_basis">Lease base basis is required.</mat-error> <mat-error *ngIf="!lease_fee_basis">Lease base basis is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>
<div fxLayout="column" fxLayout.gt-sm="row" fxFlex="100" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch"> <div fxLayout="column" fxLayout.gt-sm="row" fxFlex="100" fxLayoutAlign.gt-sm="space-between center" fxLayoutAlign="start stretch">
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput placeholder="Max Channel Routing Base Fee (Sats)" type="number" step="100" min="0" tabindex="5" required name="channelFeeMaxBaseSat" [(ngModel)]="channelFeeMaxBaseSat"> <mat-label>Max Channel Routing Base Fee (Sats)</mat-label>
<input matInput type="number" step="100" min="0" tabindex="5" required name="channelFeeMaxBaseSat" [(ngModel)]="channelFeeMaxBaseSat">
<mat-error *ngIf="!channelFeeMaxBaseSat">Max channel routing base fee is required.</mat-error> <mat-error *ngIf="!channelFeeMaxBaseSat">Max channel routing base fee is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="49"> <mat-form-field fxLayout="column" fxFlex="49">
<input matInput placeholder="Max Channel Routing Fee Rate (ppm)" type="number" step="1000" min="0" tabindex="6" required name="channelFeeMaxProportional" [(ngModel)]="channelFeeMaxProportional"> <mat-label>Max Channel Routing Fee Rate (ppm)</mat-label>
<input matInput type="number" step="1000" min="0" tabindex="6" required name="channelFeeMaxProportional" [(ngModel)]="channelFeeMaxProportional">
<mat-error *ngIf="!channelFeeMaxProportional">Max channel routing fee rate is required.</mat-error> <mat-error *ngIf="!channelFeeMaxProportional">Max channel routing fee rate is required.</mat-error>
</mat-form-field> </mat-form-field>
</div> </div>

@ -33,7 +33,8 @@
<div fxLayout="row wrap" fxLayoutAlign="start center"> <div fxLayout="row wrap" fxLayoutAlign="start center">
<mat-slide-toggle tabindex="2" color="primary" name="fiatConversion" [(ngModel)]="selNode.settings.fiatConversion" (change)="selNode.settings.currencyUnit = !$event.checked ? null : selNode.settings.currencyUnit">Enable Fiat Conversion</mat-slide-toggle> <mat-slide-toggle tabindex="2" color="primary" name="fiatConversion" [(ngModel)]="selNode.settings.fiatConversion" (change)="selNode.settings.currencyUnit = !$event.checked ? null : selNode.settings.currencyUnit">Enable Fiat Conversion</mat-slide-toggle>
<mat-form-field> <mat-form-field>
<mat-select #currencyUnit="ngModel" autoFocus placeholder="Fiat Currency" tabindex="3" name="currencyUnit" [disabled]="!selNode.settings.fiatConversion" [required]="selNode.settings.fiatConversion" [(ngModel)]="selNode.settings.currencyUnit" (selectionChange)="onCurrencyChange($event)"> <mat-label>Fiat Currency</mat-label>
<mat-select #currencyUnit="ngModel" autoFocus tabindex="3" name="currencyUnit" [disabled]="!selNode.settings.fiatConversion" [required]="selNode.settings.fiatConversion" [(ngModel)]="selNode.settings.currencyUnit" (selectionChange)="onCurrencyChange($event)">
<mat-option *ngFor="let currencyUnit of currencyUnits" [value]="currencyUnit.id"> <mat-option *ngFor="let currencyUnit of currencyUnits" [value]="currencyUnit.id">
{{currencyUnit.id}} {{currencyUnit.id}}
</mat-option> </mat-option>

@ -14,35 +14,40 @@
<div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" fxLayoutAlign.gt-sm="space-between center"> <div fxLayout="column" fxLayoutAlign="space-between stretch" fxLayout.gt-sm="row wrap" fxLayoutAlign.gt-sm="space-between center">
<span fxFlex="10" class="mb-2">{{table.tableId | camelcaseWithReplace:'_'}}:</span> <span fxFlex="10" class="mb-2">{{table.tableId | camelcaseWithReplace:'_'}}:</span>
<mat-form-field fxLayout="column" fxFlex="10"> <mat-form-field fxLayout="column" fxFlex="10">
<mat-select placeholder="Records/Page" tabindex="2" required [disabled]="nodePageDefs[page.pageId][table.tableId].disablePageSize" name="{{page.pageId}}{{table.tableId}}-page-size-options" [(ngModel)]="table.recordsPerPage"> <mat-label>Records/Page</mat-label>
<mat-select tabindex="2" required [disabled]="nodePageDefs[page.pageId][table.tableId].disablePageSize" name="{{page.pageId}}{{table.tableId}}-page-size-options" [(ngModel)]="table.recordsPerPage">
<mat-option *ngFor="let pageSizeOption of pageSizeOptions" [value]="pageSizeOption"> <mat-option *ngFor="let pageSizeOption of pageSizeOptions" [value]="pageSizeOption">
{{pageSizeOption}} {{pageSizeOption}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="10"> <mat-form-field fxLayout="column" fxFlex="10">
<mat-select placeholder="Sort By" tabindex="3" required name="{{page.pageId}}{{table.tableId}}-sort-by" [(ngModel)]="table.sortBy"> <mat-label>Sort By</mat-label>
<mat-select tabindex="3" required name="{{page.pageId}}{{table.tableId}}-sort-by" [(ngModel)]="table.sortBy">
<mat-option *ngFor="let field of table.columnSelection" [value]="field"> <mat-option *ngFor="let field of table.columnSelection" [value]="field">
{{selNode.lnImplementation === 'ECL' ? (field | camelCaseWithSpaces) : (field | camelcaseWithReplace:'_')}} {{selNode.lnImplementation === 'ECL' ? (field | camelCaseWithSpaces) : (field | camelcaseWithReplace:'_')}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="10"> <mat-form-field fxLayout="column" fxFlex="10">
<mat-select placeholder="Sort Order" tabindex="4" required name="{{page.pageId}}{{table.tableId}}-sort-order" [(ngModel)]="table.sortOrder"> <mat-label>Sort Order</mat-label>
<mat-select tabindex="4" required name="{{page.pageId}}{{table.tableId}}-sort-order" [(ngModel)]="table.sortOrder">
<mat-option *ngFor="let so of sortOrders" [value]="so"> <mat-option *ngFor="let so of sortOrders" [value]="so">
{{so === 'desc' ? 'Descending' : 'Ascending'}} {{so === 'desc' ? 'Descending' : 'Ascending'}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field *ngIf="screenSize !== screenSizeEnum.XS" fxFlex="35" matTooltip="Select a minimum of 2 columns"> <mat-form-field *ngIf="screenSize !== screenSizeEnum.XS" fxFlex="35" matTooltip="Select a minimum of 2 columns">
<mat-select placeholder="Column selection (Desktop Resolution)" tabindex="6" multiple required name="{{page.pageId}}{{table.tableId}}-columns-selection" [(ngModel)]="table.columnSelection" (selectionChange)="oncolumnSelectionChange(table)"> <mat-label>Column selection (Desktop Resolution)</mat-label>
<mat-select tabindex="6" multiple required name="{{page.pageId}}{{table.tableId}}-columns-selection" [(ngModel)]="table.columnSelection" (selectionChange)="oncolumnSelectionChange(table)">
<mat-option *ngFor="let field of nodePageDefs[page.pageId][table.tableId].allowedColumns" [value]="field.column" [disabled]="(table.columnSelection.length <= 2 && table.columnSelection.includes(field.column))"> <mat-option *ngFor="let field of nodePageDefs[page.pageId][table.tableId].allowedColumns" [value]="field.column" [disabled]="(table.columnSelection.length <= 2 && table.columnSelection.includes(field.column))">
{{field.label ? field.label : (selNode.lnImplementation === 'ECL' ? (field.column | camelCaseWithSpaces) : (field.column | camelcaseWithReplace:'_'))}} {{field.label ? field.label : (selNode.lnImplementation === 'ECL' ? (field.column | camelCaseWithSpaces) : (field.column | camelcaseWithReplace:'_'))}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field fxLayout="column" fxFlex="15" matTooltip="Select between 1 and 3 columns"> <mat-form-field fxLayout="column" fxFlex="15" matTooltip="Select between 1 and 3 columns">
<mat-select placeholder="Column Selection (Mobile Resolution)" tabindex="5" multiple required name="{{page.pageId}}{{table.tableId}}-columns-selection-sm" [(ngModel)]="table.columnSelectionSM"> <mat-label>Column Selection (Mobile Resolution)</mat-label>
<mat-select tabindex="5" multiple required name="{{page.pageId}}{{table.tableId}}-columns-selection-sm" [(ngModel)]="table.columnSelectionSM">
<mat-option *ngFor="let field of nodePageDefs[page.pageId][table.tableId].allowedColumns" [value]="field.column" [disabled]="(table.columnSelectionSM.length <= 1 && table.columnSelectionSM.includes(field.column)) || (table.columnSelectionSM.length >= 3 && !table.columnSelectionSM.includes(field.column))"> <mat-option *ngFor="let field of nodePageDefs[page.pageId][table.tableId].allowedColumns" [value]="field.column" [disabled]="(table.columnSelectionSM.length <= 1 && table.columnSelectionSM.includes(field.column)) || (table.columnSelectionSM.length >= 3 && !table.columnSelectionSM.includes(field.column))">
{{field.label ? field.label : (selNode.lnImplementation === 'ECL' ? (field.column | camelCaseWithSpaces) : (field.column | camelcaseWithReplace:'_'))}} {{field.label ? field.label : (selNode.lnImplementation === 'ECL' ? (field.column | camelCaseWithSpaces) : (field.column | camelcaseWithReplace:'_'))}}
</mat-option> </mat-option>

@ -7,13 +7,15 @@
<div fxLayout="column" fxFlex="50" fxLayoutAlign="start stretch"> <div fxLayout="column" fxFlex="50" fxLayoutAlign="start stretch">
<mat-slide-toggle autoFocus class="mb-1" tabindex="1" color="primary" name="boltz" [(ngModel)]="enableBoltz" (change)="onEnableServiceChanged($event)">Enable Boltz Service</mat-slide-toggle> <mat-slide-toggle autoFocus class="mb-1" tabindex="1" color="primary" name="boltz" [(ngModel)]="enableBoltz" (change)="onEnableServiceChanged($event)">Enable Boltz Service</mat-slide-toggle>
<mat-form-field class="mb-2"> <mat-form-field class="mb-2">
<input #srvrUrl="ngModel" matInput placeholder="Boltz Server URL" type="text" id="boltzServerUrl" name="srvrUrl" tabindex="2" [required]="enableBoltz" [disabled]="!enableBoltz" [(ngModel)]="serverUrl"> <mat-label>Boltz Server URL</mat-label>
<input #srvrUrl="ngModel" matInput type="text" id="boltzServerUrl" name="srvrUrl" tabindex="2" [required]="enableBoltz" [disabled]="!enableBoltz" [(ngModel)]="serverUrl">
<mat-hint>Service url for boltz server REST APIs, eg. https://localhost:9003</mat-hint> <mat-hint>Service url for boltz server REST APIs, eg. https://localhost:9003</mat-hint>
<mat-error *ngIf="(!serverUrl || serverUrl.trim() === '') && enableBoltz">Boltz server URL is required.</mat-error> <mat-error *ngIf="(!serverUrl || serverUrl.trim() === '') && enableBoltz">Boltz server URL is required.</mat-error>
<mat-error *ngIf="srvrUrl?.errors?.invalid && enableBoltz">Specify the boltz server url with 'https://'.</mat-error> <mat-error *ngIf="srvrUrl?.errors?.invalid && enableBoltz">Specify the boltz server url with 'https://'.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<input matInput placeholder="Boltz Macaroon Path" type="text" id="boltzMacaroonPath" name="boltzMacaroonPath" tabindex="3" [required]="enableBoltz" [disabled]="!enableBoltz" [(ngModel)]="macaroonPath"> <mat-label>Boltz Macaroon Path</mat-label>
<input matInput type="text" id="boltzMacaroonPath" name="boltzMacaroonPath" tabindex="3" [required]="enableBoltz" [disabled]="!enableBoltz" [(ngModel)]="macaroonPath">
<mat-hint>Path for the folder containing boltz 'admin.macaroon', eg. D:\\xyz\\AppData\\Boltz\\testnet</mat-hint> <mat-hint>Path for the folder containing boltz 'admin.macaroon', eg. D:\\xyz\\AppData\\Boltz\\testnet</mat-hint>
<mat-error *ngIf="!macaroonPath && enableBoltz">Boltz macaroon path is required.</mat-error> <mat-error *ngIf="!macaroonPath && enableBoltz">Boltz macaroon path is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -7,13 +7,15 @@
<div fxLayout="column" fxFlex="50" fxLayoutAlign="start stretch"> <div fxLayout="column" fxFlex="50" fxLayoutAlign="start stretch">
<mat-slide-toggle autoFocus class="mb-1" tabindex="1" color="primary" name="loop" [(ngModel)]="enableLoop" (change)="onEnableServiceChanged($event)">Enable Loop Service</mat-slide-toggle> <mat-slide-toggle autoFocus class="mb-1" tabindex="1" color="primary" name="loop" [(ngModel)]="enableLoop" (change)="onEnableServiceChanged($event)">Enable Loop Service</mat-slide-toggle>
<mat-form-field class="mb-2"> <mat-form-field class="mb-2">
<input #srvrUrl="ngModel" matInput placeholder="Loop Server URL" type="text" id="swapServerUrl" name="srvrUrl" tabindex="2" [required]="enableLoop" [disabled]="!enableLoop" [(ngModel)]="selNode.settings.swapServerUrl"> <mat-label>Loop Server URL</mat-label>
<input #srvrUrl="ngModel" matInput type="text" id="swapServerUrl" name="srvrUrl" tabindex="2" [required]="enableLoop" [disabled]="!enableLoop" [(ngModel)]="selNode.settings.swapServerUrl">
<mat-hint>Service url for loop server REST APIs, eg. https://localhost:8081</mat-hint> <mat-hint>Service url for loop server REST APIs, eg. https://localhost:8081</mat-hint>
<mat-error *ngIf="!selNode.settings.swapServerUrl && enableLoop">Loop server URL is required.</mat-error> <mat-error *ngIf="!selNode.settings.swapServerUrl && enableLoop">Loop server URL is required.</mat-error>
<mat-error *ngIf="srvrUrl?.errors?.invalid && enableLoop">Specify the loop server url with 'https://'.</mat-error> <mat-error *ngIf="srvrUrl?.errors?.invalid && enableLoop">Specify the loop server url with 'https://'.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<input matInput placeholder="Loop Macaroon Path" type="text" id="swapMacaroonPath" name="swapMacaroonPath" tabindex="3" [required]="enableLoop" [disabled]="!enableLoop" [(ngModel)]="selNode.authentication.swapMacaroonPath"> <mat-label>Loop Macaroon Path</mat-label>
<input matInput type="text" id="swapMacaroonPath" name="swapMacaroonPath" tabindex="3" [required]="enableLoop" [disabled]="!enableLoop" [(ngModel)]="selNode.authentication.swapMacaroonPath">
<mat-hint>Path for the folder containing service 'loop.macaroon', eg. D:\\xyz\\AppData\\Local\\Loop\\testnet</mat-hint> <mat-hint>Path for the folder containing service 'loop.macaroon', eg. D:\\xyz\\AppData\\Local\\Loop\\testnet</mat-hint>
<mat-error *ngIf="!selNode.authentication.swapMacaroonPath && enableLoop">Loop macaroon path is required.</mat-error> <mat-error *ngIf="!selNode.authentication.swapMacaroonPath && enableLoop">Loop macaroon path is required.</mat-error>
</mat-form-field> </mat-form-field>

@ -5,15 +5,18 @@
<span class="page-title">Password</span> <span class="page-title">Password</span>
</div> </div>
<mat-form-field> <mat-form-field>
<input autoFocus matInput placeholder="Current Password" type="password" id="currpassword" name="currpassword" tabindex="1" required [(ngModel)]="currPassword"> <mat-label>Current Password</mat-label>
<input autoFocus matInput type="password" id="currpassword" name="currpassword" tabindex="1" required [(ngModel)]="currPassword">
<mat-error *ngIf="!currPassword">Current password is required.</mat-error> <mat-error *ngIf="!currPassword">Current password is required.</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<input matInput placeholder="New Password" type="password" id="newpassword" name="newpassword" tabindex="2" required [(ngModel)]="newPassword"> <mat-label>New Password</mat-label>
<input matInput type="password" id="newpassword" name="newpassword" tabindex="2" required [(ngModel)]="newPassword">
<mat-error *ngIf="matchOldAndNewPasswords()">{{errorMsg}}</mat-error> <mat-error *ngIf="matchOldAndNewPasswords()">{{errorMsg}}</mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field> <mat-form-field>
<input matInput placeholder="Confirm New Password" type="password" id="confirmpassword" name="confirmpassword" tabindex="3" required [(ngModel)]="confirmPassword"> <mat-label>Confirm New Password</mat-label>
<input matInput type="password" id="confirmpassword" name="confirmpassword" tabindex="3" required [(ngModel)]="confirmPassword">
<mat-error *ngIf="matchNewPasswords()">{{errorConfirmMsg}}</mat-error> <mat-error *ngIf="matchNewPasswords()">{{errorConfirmMsg}}</mat-error>
</mat-form-field> </mat-form-field>
<div fxLayout="row" fxLayoutAlign="start start" class="mt-1"> <div fxLayout="row" fxLayoutAlign="start start" class="mt-1">

@ -1230,10 +1230,14 @@ a {
} }
.mat-tree-node, .mat-nested-tree-node-parent { .mat-tree-node, .mat-nested-tree-node-parent {
min-height: ($gap*8); min-height: ($gap*6);
height: ($gap*8); height: ($gap*6);
padding: 0 ($gap*1.5) 0 ($gap*1.5); padding: 0 ($gap*1.5) 0 ($gap*1.5);
cursor: pointer; cursor: pointer;
@include for_screensize(phone) {
min-height: ($gap*8);
height: ($gap*8);
}
} }
.mat-tree-node:focus, .mat-tree-node:active, .mat-nested-tree-node:focus, .mat-nested-tree-node:active, .mat-nested-tree-node-parent:focus, .mat-nested-tree-node-parent:active, .mat-tree-node:focus, .mat-tree-node:active, .mat-nested-tree-node:focus, .mat-nested-tree-node:active, .mat-nested-tree-node-parent:focus, .mat-nested-tree-node-parent:active,

@ -383,6 +383,9 @@
} }
& .dashboard-info-title { & .dashboard-info-title {
font-weight: 500; font-weight: 500;
.material-icons.mat-icon.mat-mdc-tooltip-trigger {
min-height: math.div($min-form-ctrl-height, 3);
}
} }
& .dashboard-node-dot { & .dashboard-node-dot {
margin: 0 0 -2px ($gap*1.25); margin: 0 0 -2px ($gap*1.25);

Loading…
Cancel
Save