| import { NotificationModule } from '@progress/kendo-angular-notification'; | import { NotificationModule } from '@progress/kendo-angular-notification'; | ||||
| import { ChartsModule } from '@progress/kendo-angular-charts'; | import { ChartsModule } from '@progress/kendo-angular-charts'; | ||||
| import 'hammerjs'; | import 'hammerjs'; | ||||
| import { BkpDividerComponent } from './bkp-divider/bkp-divider.component'; | |||||
| import { BkpDividerShadowBottomComponent } from './bkp-divider-shadow-bottom/bkp-divider-shadow-bottom.component'; | |||||
| DashboardComponent, | DashboardComponent, | ||||
| AuthComponent, | AuthComponent, | ||||
| CanvasComponent, | CanvasComponent, | ||||
| LoanEditComponent | |||||
| LoanEditComponent, | |||||
| BkpDividerComponent, | |||||
| BkpDividerShadowBottomComponent | |||||
| ], | ], | ||||
| imports: [ | imports: [ | ||||
| BrowserModule, | BrowserModule, |
| <div class="h-divider"> | |||||
| <div class="shadow"></div> | |||||
| </div> |
| /* horizontal divider https://codepen.io/MiKr13/pen/yjaNYp */ | |||||
| .h-divider { | |||||
| margin: auto; | |||||
| /* margin-top: 80px; */ | |||||
| width: 100%; | |||||
| position: relative; | |||||
| } | |||||
| .h-divider .shadow { | |||||
| overflow: hidden; | |||||
| height: 20px; | |||||
| } | |||||
| .h-divider .shadow:after { | |||||
| content: ''; | |||||
| display: block; | |||||
| margin: -25px auto 0; | |||||
| width: 100%; | |||||
| height: 25px; | |||||
| border-radius: 125px/12px; | |||||
| box-shadow: 0 0 8px black; | |||||
| } | |||||
| .h-divider .text { | |||||
| width: 100px; | |||||
| height: 45px; | |||||
| padding: 10px; | |||||
| position: absolute; | |||||
| bottom: 100%; | |||||
| margin-bottom: -33px; | |||||
| left: 50%; | |||||
| margin-left: -60px; | |||||
| border-radius: 100%; | |||||
| box-shadow: 0 2px 4px #999; | |||||
| background: white; | |||||
| } | |||||
| .h-divider .text i { | |||||
| position: absolute; | |||||
| top: 4px; | |||||
| bottom: 4px; | |||||
| left: 4px; | |||||
| right: 4px; | |||||
| border-radius: 100%; | |||||
| border: 1px dashed #aaa; | |||||
| text-align: center; | |||||
| line-height: 50px; | |||||
| font-style: normal; | |||||
| color: #999; | |||||
| } | |||||
| .h-divider .text2 { | |||||
| width: 70px; | |||||
| height: 70px; | |||||
| position: absolute; | |||||
| bottom: 100%; | |||||
| margin-bottom: -35px; | |||||
| left: 50%; | |||||
| margin-left: -25px; | |||||
| border-radius: 100%; | |||||
| box-shadow: 0 2px 4px #999; | |||||
| background: white; | |||||
| } | |||||
| .h-divider img { | |||||
| position: absolute; | |||||
| margin: 4px; | |||||
| max-width: 60px; | |||||
| border-radius: 100%; | |||||
| border: 1px dashed #aaa; | |||||
| } | |||||
| /* end of horizontal dividor */ |
| import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
| import { BkpDividerShadowBottomComponent } from './bkp-divider-shadow-bottom.component'; | |||||
| describe('BkpDividerShadowBottomComponent', () => { | |||||
| let component: BkpDividerShadowBottomComponent; | |||||
| let fixture: ComponentFixture<BkpDividerShadowBottomComponent>; | |||||
| beforeEach(async () => { | |||||
| await TestBed.configureTestingModule({ | |||||
| declarations: [ BkpDividerShadowBottomComponent ] | |||||
| }) | |||||
| .compileComponents(); | |||||
| }); | |||||
| beforeEach(() => { | |||||
| fixture = TestBed.createComponent(BkpDividerShadowBottomComponent); | |||||
| component = fixture.componentInstance; | |||||
| fixture.detectChanges(); | |||||
| }); | |||||
| it('should create', () => { | |||||
| expect(component).toBeTruthy(); | |||||
| }); | |||||
| }); |
| import { Component, OnInit } from '@angular/core'; | |||||
| @Component({ | |||||
| selector: 'bkp-divider-shadow-bottom', | |||||
| templateUrl: './bkp-divider-shadow-bottom.component.html', | |||||
| styleUrls: ['./bkp-divider-shadow-bottom.component.scss'] | |||||
| }) | |||||
| export class BkpDividerShadowBottomComponent implements OnInit { | |||||
| constructor() { } | |||||
| ngOnInit(): void { | |||||
| } | |||||
| } |
| <hr> | |||||
| <h2> | |||||
| <ng-content></ng-content> | |||||
| </h2> |
| $link-color: #f52e62; | |||||
| $text-color: #3f517e; | |||||
| $hr-color: rgba(0,0,0,0.35); | |||||
| $hr-text-color: #453986; | |||||
| $letter-spacing: .32em; | |||||
| $background-color: #fff; | |||||
| div.divider { | |||||
| font-family: "Share Tech Mono", monospace; | |||||
| color: $text-color; | |||||
| font-size: 2vh; | |||||
| text-shadow: 1px 1px 1px rgba(0, 0, 0, .45); | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| &::before, | |||||
| &::after { | |||||
| content: ''; | |||||
| display: block; | |||||
| height: 0.09em; | |||||
| min-width: 30vw; | |||||
| } | |||||
| &::before { | |||||
| background: linear-gradient(to right, rgba(240,240,240,0), #fff); | |||||
| margin-right: 4vh; | |||||
| } | |||||
| &::after { | |||||
| background: linear-gradient(to left, rgba(240,240,240,0), #fff); | |||||
| margin-left: 4vh; | |||||
| } | |||||
| } | |||||
| hr { | |||||
| display: block; | |||||
| margin: 10px 0 -15px; | |||||
| width: 100%; | |||||
| height: 1px; | |||||
| border: 0; | |||||
| background-color: $hr-color; | |||||
| + h2 { | |||||
| display: inline-block; | |||||
| position: relative; | |||||
| left: 50%; | |||||
| margin: 0; | |||||
| padding: 5px 10px; | |||||
| border: 1px solid $hr-text-color; | |||||
| //box-shadow: inset 0 0 0 1px $hr-text-color; | |||||
| transform: translateX(-50%); | |||||
| color: $hr-text-color; | |||||
| font-size: 12px; | |||||
| font-weight: 500; | |||||
| letter-spacing: $letter-spacing; | |||||
| text-align: center; | |||||
| text-transform: uppercase; | |||||
| background-color: $background-color; | |||||
| // Cancel out offset created by letterspacing | |||||
| &::first-letter { | |||||
| margin-left: $letter-spacing; | |||||
| } | |||||
| } | |||||
| } |
| import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
| import { BkpDividerComponent } from './bkp-divider.component'; | |||||
| describe('BkpDividerComponent', () => { | |||||
| let component: BkpDividerComponent; | |||||
| let fixture: ComponentFixture<BkpDividerComponent>; | |||||
| beforeEach(async () => { | |||||
| await TestBed.configureTestingModule({ | |||||
| declarations: [ BkpDividerComponent ] | |||||
| }) | |||||
| .compileComponents(); | |||||
| }); | |||||
| beforeEach(() => { | |||||
| fixture = TestBed.createComponent(BkpDividerComponent); | |||||
| component = fixture.componentInstance; | |||||
| fixture.detectChanges(); | |||||
| }); | |||||
| it('should create', () => { | |||||
| expect(component).toBeTruthy(); | |||||
| }); | |||||
| }); |
| import { Component, OnInit } from '@angular/core'; | |||||
| @Component({ | |||||
| selector: 'bkp-divider', | |||||
| templateUrl: './bkp-divider.component.html', | |||||
| styleUrls: ['./bkp-divider.component.scss'] | |||||
| }) | |||||
| export class BkpDividerComponent implements OnInit { | |||||
| constructor() { } | |||||
| ngOnInit(): void { | |||||
| } | |||||
| } |
| <div class="container outer"> | <div class="container outer"> | ||||
| <div class="container inner"> | <div class="container inner"> | ||||
| <div class="divider"> | |||||
| <bkp-divider-shadow-bottom></bkp-divider-shadow-bottom> | |||||
| <bkp-divider> | |||||
| <kendo-icon [name]="'ascx'" > </kendo-icon> Daily summary | <kendo-icon [name]="'ascx'" > </kendo-icon> Daily summary | ||||
| </div> | |||||
| </bkp-divider> | |||||
| <div class="row"> | <div class="row"> | ||||
| <div class="col-sm-6"> | <div class="col-sm-6"> | ||||
| <kendo-chart> | <kendo-chart> | ||||
| </kendo-chart> | </kendo-chart> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="h-divider"> | |||||
| <div class="shadow"></div> | |||||
| </div> | |||||
| <hr> | |||||
| <h2><kendo-icon [name]="'clip'"> </kendo-icon> Recent Transactions </h2> | |||||
| <bkp-divider-shadow-bottom></bkp-divider-shadow-bottom> | |||||
| <bkp-divider><kendo-icon [name]="'clip'"> </kendo-icon> Recent | |||||
| Transactions </bkp-divider> | |||||
| <div class="row"> | <div class="row"> | ||||
| <div class="col-sm-12"> | <div class="col-sm-12"> | ||||
| <kendo-grid [data]="gridData"> | <kendo-grid [data]="gridData"> | ||||
| </kendo-grid> | </kendo-grid> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="h-divider"> | |||||
| <div class="shadow"></div> | |||||
| </div> | |||||
| <hr> | |||||
| <h2> <kendo-icon [name]="'sum'"> </kendo-icon> Pending Payments</h2> | |||||
| <bkp-divider-shadow-bottom></bkp-divider-shadow-bottom> | |||||
| <bkp-divider><kendo-icon [name]="'sum'"> </kendo-icon> Pending Payments</bkp-divider> | |||||
| <div class="row"> | <div class="row"> | ||||
| <div class="col-sm-12"> | <div class="col-sm-12"> | ||||
| </kendo-grid> | </kendo-grid> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="h-divider"> | |||||
| <div class="shadow"></div> | |||||
| </div> | |||||
| <bkp-divider-shadow-bottom></bkp-divider-shadow-bottom> | |||||
| </div> | </div> | ||||
| </div> | </div> |
| /* Timeline */ | |||||
| .container.outer{ | |||||
| width:100%; | |||||
| background: url('../../assets/img/body_bg.jpg') no-repeat center center fixed; | |||||
| -webkit-background-size: cover; | |||||
| -moz-background-size: cover; | |||||
| -o-background-size: cover; | |||||
| background-size: cover; | |||||
| opacity:0.98; | |||||
| } | |||||
| .container.inner { | |||||
| width: 99%; | |||||
| min-height: calc(100vh - 48px); | |||||
| /* background-color:chartreuse; */ | |||||
| } | |||||
| $link-color: #f52e62; | |||||
| $text-color: #3f517e; | |||||
| $hr-color: rgba(0,0,0,0.35); | |||||
| $hr-text-color: #453986; | |||||
| $letter-spacing: .32em; | |||||
| $background-color: #fff; | |||||
| div.divider { | |||||
| font-family: "Share Tech Mono", monospace; | |||||
| color: $text-color; | |||||
| font-size: 2vh; | |||||
| text-shadow: 1px 1px 1px rgba(0, 0, 0, .45); | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| &::before, | |||||
| &::after { | |||||
| content: ''; | |||||
| display: block; | |||||
| height: 0.09em; | |||||
| min-width: 30vw; | |||||
| } | |||||
| &::before { | |||||
| background: linear-gradient(to right, rgba(240,240,240,0), #fff); | |||||
| margin-right: 4vh; | |||||
| } | |||||
| &::after { | |||||
| background: linear-gradient(to left, rgba(240,240,240,0), #fff); | |||||
| margin-left: 4vh; | |||||
| } | |||||
| } | |||||
| /* horizontal divider https://codepen.io/MiKr13/pen/yjaNYp */ | |||||
| .h-divider { | |||||
| margin: auto; | |||||
| /* margin-top: 80px; */ | |||||
| width: 80%; | |||||
| position: relative; | |||||
| } | |||||
| .h-divider .shadow { | |||||
| overflow: hidden; | |||||
| height: 20px; | |||||
| } | |||||
| .h-divider .shadow:after { | |||||
| content: ''; | |||||
| display: block; | |||||
| margin: -25px auto 0; | |||||
| width: 100%; | |||||
| height: 25px; | |||||
| border-radius: 125px/12px; | |||||
| box-shadow: 0 0 8px black; | |||||
| } | |||||
| .h-divider .text { | |||||
| width: 100px; | |||||
| height: 45px; | |||||
| padding: 10px; | |||||
| position: absolute; | |||||
| bottom: 100%; | |||||
| margin-bottom: -33px; | |||||
| left: 50%; | |||||
| margin-left: -60px; | |||||
| border-radius: 100%; | |||||
| box-shadow: 0 2px 4px #999; | |||||
| background: white; | |||||
| } | |||||
| .h-divider .text i { | |||||
| position: absolute; | |||||
| top: 4px; | |||||
| bottom: 4px; | |||||
| left: 4px; | |||||
| right: 4px; | |||||
| border-radius: 100%; | |||||
| border: 1px dashed #aaa; | |||||
| text-align: center; | |||||
| line-height: 50px; | |||||
| font-style: normal; | |||||
| color: #999; | |||||
| } | |||||
| .h-divider .text2 { | |||||
| width: 70px; | |||||
| height: 70px; | |||||
| position: absolute; | |||||
| bottom: 100%; | |||||
| margin-bottom: -35px; | |||||
| left: 50%; | |||||
| margin-left: -25px; | |||||
| border-radius: 100%; | |||||
| box-shadow: 0 2px 4px #999; | |||||
| background: white; | |||||
| } | |||||
| .h-divider img { | |||||
| position: absolute; | |||||
| margin: 4px; | |||||
| max-width: 60px; | |||||
| border-radius: 100%; | |||||
| border: 1px dashed #aaa; | |||||
| } | |||||
| /* end of horizontal dividor */ | |||||
| hr { | |||||
| display: block; | |||||
| margin: 10px 0 -15px; | |||||
| width: 100%; | |||||
| height: 1px; | |||||
| border: 0; | |||||
| background-color: $hr-color; | |||||
| + h2 { | |||||
| display: inline-block; | |||||
| position: relative; | |||||
| left: 50%; | |||||
| margin: 0; | |||||
| padding: 5px 10px; | |||||
| border: 1px solid $hr-text-color; | |||||
| //box-shadow: inset 0 0 0 1px $hr-text-color; | |||||
| transform: translateX(-50%); | |||||
| color: $hr-text-color; | |||||
| font-size: 12px; | |||||
| font-weight: 500; | |||||
| letter-spacing: $letter-spacing; | |||||
| text-align: center; | |||||
| text-transform: uppercase; | |||||
| background-color: $background-color; | |||||
| // Cancel out offset created by letterspacing | |||||
| &::first-letter { | |||||
| margin-left: $letter-spacing; | |||||
| } | |||||
| } | |||||
| } | |||||
| .container.outer{ | |||||
| width:100%; | |||||
| background: url('../../assets/img/body_bg.jpg') no-repeat center center fixed; | |||||
| -webkit-background-size: cover; | |||||
| -moz-background-size: cover; | |||||
| -o-background-size: cover; | |||||
| background-size: cover; | |||||
| opacity:0.98; | |||||
| } | |||||
| .container.inner { | |||||
| width: 99%; | |||||
| min-height: calc(100vh - 48px); | |||||
| /* background-color:chartreuse; */ | |||||
| } | |||||
| @Component({ | @Component({ | ||||
| selector: 'app-dashboard', | selector: 'app-dashboard', | ||||
| templateUrl: './dashboard.component.html', | templateUrl: './dashboard.component.html', |
| /* Timeline */ | |||||
| .container.outer { | .container.outer { | ||||
| width: 100%; | width: 100%; | ||||
| background: url("../../assets/img/body_bg.jpg") no-repeat center center fixed; | background: url("../../assets/img/body_bg.jpg") no-repeat center center fixed; | ||||
| width: 99%; | width: 99%; | ||||
| min-height: calc(100vh - 48px); | min-height: calc(100vh - 48px); | ||||
| /* background-color:chartreuse; */ | /* background-color:chartreuse; */ | ||||
| } | |||||
| div.divider { | |||||
| font-family: "Share Tech Mono", monospace; | |||||
| color: #3f517e; | |||||
| font-size: 2vh; | |||||
| text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.45); | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| } | |||||
| div.divider::before, div.divider::after { | |||||
| content: ""; | |||||
| display: block; | |||||
| height: 0.09em; | |||||
| min-width: 30vw; | |||||
| } | |||||
| div.divider::before { | |||||
| background: linear-gradient(to right, rgba(240, 240, 240, 0), #fff); | |||||
| margin-right: 4vh; | |||||
| } | |||||
| div.divider::after { | |||||
| background: linear-gradient(to left, rgba(240, 240, 240, 0), #fff); | |||||
| margin-left: 4vh; | |||||
| } | |||||
| /* horizontal divider https://codepen.io/MiKr13/pen/yjaNYp */ | |||||
| .h-divider { | |||||
| margin: auto; | |||||
| /* margin-top: 80px; */ | |||||
| width: 80%; | |||||
| position: relative; | |||||
| } | |||||
| .h-divider .shadow { | |||||
| overflow: hidden; | |||||
| height: 20px; | |||||
| } | |||||
| .h-divider .shadow:after { | |||||
| content: ""; | |||||
| display: block; | |||||
| margin: -25px auto 0; | |||||
| width: 100%; | |||||
| height: 25px; | |||||
| border-radius: 125px/12px; | |||||
| box-shadow: 0 0 8px black; | |||||
| } | |||||
| .h-divider .text { | |||||
| width: 100px; | |||||
| height: 45px; | |||||
| padding: 10px; | |||||
| position: absolute; | |||||
| bottom: 100%; | |||||
| margin-bottom: -33px; | |||||
| left: 50%; | |||||
| margin-left: -60px; | |||||
| border-radius: 100%; | |||||
| box-shadow: 0 2px 4px #999; | |||||
| background: white; | |||||
| } | |||||
| .h-divider .text i { | |||||
| position: absolute; | |||||
| top: 4px; | |||||
| bottom: 4px; | |||||
| left: 4px; | |||||
| right: 4px; | |||||
| border-radius: 100%; | |||||
| border: 1px dashed #aaa; | |||||
| text-align: center; | |||||
| line-height: 50px; | |||||
| font-style: normal; | |||||
| color: #999; | |||||
| } | |||||
| .h-divider .text2 { | |||||
| width: 70px; | |||||
| height: 70px; | |||||
| position: absolute; | |||||
| bottom: 100%; | |||||
| margin-bottom: -35px; | |||||
| left: 50%; | |||||
| margin-left: -25px; | |||||
| border-radius: 100%; | |||||
| box-shadow: 0 2px 4px #999; | |||||
| background: white; | |||||
| } | |||||
| .h-divider img { | |||||
| position: absolute; | |||||
| margin: 4px; | |||||
| max-width: 60px; | |||||
| border-radius: 100%; | |||||
| border: 1px dashed #aaa; | |||||
| } | |||||
| /* end of horizontal dividor */ | |||||
| hr { | |||||
| display: block; | |||||
| margin: 10px 0 -15px; | |||||
| width: 100%; | |||||
| height: 1px; | |||||
| border: 0; | |||||
| background-color: rgba(0, 0, 0, 0.35); | |||||
| } | |||||
| hr + h2 { | |||||
| display: inline-block; | |||||
| position: relative; | |||||
| left: 50%; | |||||
| margin: 0; | |||||
| padding: 5px 10px; | |||||
| border: 1px solid #453986; | |||||
| transform: translateX(-50%); | |||||
| color: #453986; | |||||
| font-size: 12px; | |||||
| font-weight: 500; | |||||
| letter-spacing: 0.32em; | |||||
| text-align: center; | |||||
| text-transform: uppercase; | |||||
| background-color: #fff; | |||||
| } | |||||
| hr + h2::first-letter { | |||||
| margin-left: 0.32em; | |||||
| } | } |