mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2025-12-23 21:17:06 +00:00
Compare commits
104 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8c555a1fb5 | ||
|
|
3827b10fc5 | ||
|
|
6f3ce4059d | ||
|
|
8dbd71f122 | ||
|
|
5870131ab2 | ||
|
|
c764089061 | ||
|
|
a7cf8c236b | ||
|
|
79d2ed8cfe | ||
|
|
84696aed79 | ||
|
|
44550ecdd8 | ||
|
|
68bd4436f4 | ||
|
|
6db86a6b25 | ||
|
|
8e4e4bf401 | ||
|
|
b184c839da | ||
|
|
017ce59254 | ||
|
|
842cb37fcb | ||
|
|
430fe0c0c1 | ||
|
|
8118f94b50 | ||
|
|
83ba318fb7 | ||
|
|
1dd59db09f | ||
|
|
60ab983730 | ||
|
|
6fadc29e4c | ||
|
|
4da339cef1 | ||
|
|
cbd1c3e21c | ||
|
|
e67887f379 | ||
|
|
eeed00b30e | ||
|
|
06c8903f91 | ||
|
|
23b943a765 | ||
|
|
8961d75241 | ||
|
|
ab7bd882a0 | ||
|
|
63bd95ea1e | ||
|
|
98297ea787 | ||
|
|
5251a6305f | ||
|
|
790549a92d | ||
|
|
0643d8c348 | ||
|
|
c2d5a5a2a5 | ||
|
|
94275c507f | ||
|
|
31b4c300f0 | ||
|
|
768d20c481 | ||
|
|
b2a28c36ed | ||
|
|
7dc0892c83 | ||
|
|
ef216718b9 | ||
|
|
f337df17e4 | ||
|
|
ed9c024e13 | ||
|
|
94d9118df7 | ||
|
|
a5b6e545a7 | ||
|
|
0b2af161f4 | ||
|
|
9630d0154f | ||
|
|
62b64cb78c | ||
|
|
8fc20fef8f | ||
|
|
8b97e6623b | ||
|
|
a184be1650 | ||
|
|
09bd4b9fee | ||
|
|
d8782a78d5 | ||
|
|
c4e338cda1 | ||
|
|
77c05ce4e0 | ||
|
|
e92f34b38f | ||
|
|
ecbc370064 | ||
|
|
498b9647e6 | ||
|
|
962df7fe9a | ||
|
|
763111aae3 | ||
|
|
715e77776e | ||
|
|
c8c0b4a609 | ||
|
|
5d62c58725 | ||
|
|
34ffe7e53b | ||
|
|
6960a2ba26 | ||
|
|
27dbbef6e1 | ||
|
|
f7f3a60ff5 | ||
|
|
08e2d5f331 | ||
|
|
fee608cb44 | ||
|
|
343d7902fa | ||
|
|
927b4fd322 | ||
|
|
a52b1f7687 | ||
|
|
0331db4384 | ||
|
|
0f1048cb3c | ||
|
|
bbd59ab6c3 | ||
|
|
620583f99c | ||
|
|
e49771a5e0 | ||
|
|
42095bfe26 | ||
|
|
0d2b5a9662 | ||
|
|
1d1ac4b04a | ||
|
|
6afa55bb0f | ||
|
|
8454526ef5 | ||
|
|
f8292af81e | ||
|
|
46a0ac1aa9 | ||
|
|
37d5e097b5 | ||
|
|
92d7986c8a | ||
|
|
38177c3d68 | ||
|
|
798e2632bc | ||
|
|
19c960cc4c | ||
|
|
8dfc3e854b | ||
|
|
04b80ca168 | ||
|
|
54451bb19e | ||
|
|
5e98d986e2 | ||
|
|
293192557f | ||
|
|
d61549d9e6 | ||
|
|
b2ceb02709 | ||
|
|
ffbd000fe2 | ||
|
|
b6ebd2b839 | ||
|
|
4d4d52ba05 | ||
|
|
251732f221 | ||
|
|
1c34a65034 | ||
|
|
b8803a055f | ||
|
|
6b8cd41d5e |
16
CREDITS
Normal file
16
CREDITS
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Image/Vector/Icon Credits
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
Avatars - https://uifaces.co/
|
||||||
|
Flag icons - http://www.famfamfam.com/lab/icons/flags/
|
||||||
|
Frame vector created by Freepik - https://www.freepik.com/free-photos-vectors/frame
|
||||||
|
A Walk Amongst Friends - Photo by Kristin Ellis on Unsplash - https://unsplash.com/photos/CbZOGbazDWQ
|
||||||
|
Sunrise at Moraine Lake - Photo by Marlon Martinez on Unsplash - https://unsplash.com/photos/woNYcfrnp9M
|
||||||
|
Braies Lake - Photo by Luca Nicoletti on Unsplash - https://unsplash.com/photos/dH-L5zPcv3E
|
||||||
|
Lago di Sorapis - Photo by eberhard grossgasteiger on Unsplash - https://unsplash.com/photos/6uDg_zb20EM
|
||||||
|
Lago di Braies - Photo by Salmen Bejaoui on Unsplash - https://unsplash.com/photos/uXTozY3CcQg
|
||||||
|
Reaching - Photo by Justin Novello on Unsplash - https://unsplash.com/photos/Y14TNvIDllM
|
||||||
|
Yosemite - Photo by Tim Mossholder on Unsplash - https://unsplash.com/photos/ZCrtRSSUpGI
|
||||||
|
Never Stop Changing - Photo by John Westrock on Unsplash - https://unsplash.com/photos/_GY56uSG70U
|
||||||
|
Fall glow - Photo by Casey Horner on Unsplash - https://unsplash.com/photos/gz19zOdgN7w
|
||||||
|
First snow - Photo by eberhard grossgasteiger on Unsplash - https://unsplash.com/photos/LRrGf6dBjA4
|
||||||
3
LICENSE
3
LICENSE
@@ -1 +1,2 @@
|
|||||||
https://themeforest.net/licenses/terms/regular
|
This project is protected by Envato's Regular License. For more information,
|
||||||
|
check the official license page at https://themeforest.net/licenses/terms/regular
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# Fuse - Angular
|
# Fuse - Angular
|
||||||
|
|
||||||
Material Design Admin Template with Angular 6+ and Angular Material
|
Material Design Admin Template with Angular 7+ and Angular Material
|
||||||
|
|
||||||
## The Community
|
## The Community
|
||||||
|
|
||||||
|
|||||||
20
angular.json
20
angular.json
@@ -30,7 +30,8 @@
|
|||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"scripts": []
|
"scripts": [],
|
||||||
|
"showCircularDependencies": false
|
||||||
},
|
},
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
@@ -48,7 +49,14 @@
|
|||||||
"aot": true,
|
"aot": true,
|
||||||
"extractLicenses": true,
|
"extractLicenses": true,
|
||||||
"vendorChunk": false,
|
"vendorChunk": false,
|
||||||
"buildOptimizer": true
|
"buildOptimizer": true,
|
||||||
|
"budgets": [
|
||||||
|
{
|
||||||
|
"type": "initial",
|
||||||
|
"maximumWarning": "2mb",
|
||||||
|
"maximumError": "5mb"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"ec": {
|
"ec": {
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
@@ -96,7 +104,7 @@
|
|||||||
"tsConfig": "src/tsconfig.spec.json",
|
"tsConfig": "src/tsconfig.spec.json",
|
||||||
"karmaConfig": "src/karma.conf.js",
|
"karmaConfig": "src/karma.conf.js",
|
||||||
"styles": [
|
"styles": [
|
||||||
"styles.scss"
|
"src/styles.scss"
|
||||||
],
|
],
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"assets": [
|
"assets": [
|
||||||
@@ -124,12 +132,18 @@
|
|||||||
"fuse-e2e": {
|
"fuse-e2e": {
|
||||||
"root": "e2e/",
|
"root": "e2e/",
|
||||||
"projectType": "application",
|
"projectType": "application",
|
||||||
|
"prefix": "",
|
||||||
"architect": {
|
"architect": {
|
||||||
"e2e": {
|
"e2e": {
|
||||||
"builder": "@angular-devkit/build-angular:protractor",
|
"builder": "@angular-devkit/build-angular:protractor",
|
||||||
"options": {
|
"options": {
|
||||||
"protractorConfig": "e2e/protractor.conf.js",
|
"protractorConfig": "e2e/protractor.conf.js",
|
||||||
"devServerTarget": "fuse:serve"
|
"devServerTarget": "fuse:serve"
|
||||||
|
},
|
||||||
|
"configurations": {
|
||||||
|
"production": {
|
||||||
|
"devServerTarget": "fuse:serve:production"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { Fuse2Page } from './app.po';
|
import { FusePage } from './app.po';
|
||||||
|
|
||||||
describe('Fuse2 App', () => {
|
describe('Fuse App', () => {
|
||||||
let page: Fuse2Page;
|
let page: FusePage;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
page = new Fuse2Page();
|
page = new FusePage();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should display welcome message', () => {
|
it('should display welcome message', () => {
|
||||||
page.navigateTo();
|
page.navigateTo();
|
||||||
expect(page.getParagraphText()).toEqual('Welcome to Fuse2!');
|
expect(page.getParagraphText()).toEqual('Welcome to Fuse!');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
import { browser, by, element } from 'protractor';
|
import { browser, by, element } from 'protractor';
|
||||||
|
|
||||||
export class Fuse2Page {
|
export class FusePage {
|
||||||
navigateTo() {
|
navigateTo(): any {
|
||||||
return browser.get('/');
|
return browser.get('/');
|
||||||
}
|
}
|
||||||
|
|
||||||
getParagraphText() {
|
getParagraphText(): any {
|
||||||
return element(by.css('app-root h1')).getText();
|
return element(by.css('app #main')).getText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10729
package-lock.json
generated
10729
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
103
package.json
103
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "fuse",
|
"name": "fuse",
|
||||||
"version": "6.2.1",
|
"version": "7.1.0",
|
||||||
"license": "https://themeforest.net/licenses/terms/regular",
|
"license": "https://themeforest.net/licenses/terms/regular",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
@@ -18,71 +18,74 @@
|
|||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@agm/core": "1.0.0-beta.3",
|
"@agm/core": "1.0.0-beta.5",
|
||||||
"@angular/animations": "6.0.7",
|
"@angular/animations": "7.2.1",
|
||||||
"@angular/cdk": "6.3.3",
|
"@angular/cdk": "7.2.1",
|
||||||
"@angular/common": "6.0.7",
|
"@angular/common": "7.2.1",
|
||||||
"@angular/compiler": "6.0.7",
|
"@angular/compiler": "7.2.1",
|
||||||
"@angular/core": "6.0.7",
|
"@angular/core": "7.2.1",
|
||||||
"@angular/flex-layout": "6.0.0-beta.16",
|
"@angular/flex-layout": "7.0.0-beta.23",
|
||||||
"@angular/forms": "6.0.7",
|
"@angular/forms": "7.2.1",
|
||||||
"@angular/http": "6.0.7",
|
"@angular/http": "7.2.1",
|
||||||
"@angular/material": "6.3.3",
|
"@angular/material": "7.2.1",
|
||||||
"@angular/material-moment-adapter": "6.3.3",
|
"@angular/material-moment-adapter": "7.2.1",
|
||||||
"@angular/platform-browser": "6.0.7",
|
"@angular/platform-browser": "7.2.1",
|
||||||
"@angular/platform-browser-dynamic": "6.0.7",
|
"@angular/platform-browser-dynamic": "7.2.1",
|
||||||
"@angular/router": "6.0.7",
|
"@angular/router": "7.2.1",
|
||||||
"@ngrx/effects": "6.0.1",
|
"@ngrx/effects": "7.0.0",
|
||||||
"@ngrx/router-store": "6.0.1",
|
"@ngrx/router-store": "7.0.0",
|
||||||
"@ngrx/store": "6.0.1",
|
"@ngrx/store": "7.0.0",
|
||||||
"@ngrx/store-devtools": "6.0.1",
|
"@ngrx/store-devtools": "7.0.0",
|
||||||
"@ngx-translate/core": "10.0.2",
|
"@ngx-translate/core": "11.0.1",
|
||||||
"@swimlane/ngx-charts": "8.1.0",
|
"@swimlane/dragula": "3.7.3",
|
||||||
"@swimlane/ngx-datatable": "13.0.1",
|
"@swimlane/ngx-charts": "10.0.0",
|
||||||
"@swimlane/ngx-dnd": "4.0.0",
|
"@swimlane/ngx-datatable": "14.0.0",
|
||||||
|
"@swimlane/ngx-dnd": "6.0.0",
|
||||||
"@types/prismjs": "1.9.0",
|
"@types/prismjs": "1.9.0",
|
||||||
"angular-calendar": "0.25.2",
|
"angular-calendar": "0.26.4",
|
||||||
"angular-in-memory-web-api": "0.6.0",
|
"angular-in-memory-web-api": "0.8.0",
|
||||||
"chart.js": "2.7.2",
|
"chart.js": "2.7.3",
|
||||||
"classlist.js": "1.1.20150312",
|
"classlist.js": "1.1.20150312",
|
||||||
"core-js": "2.5.7",
|
"core-js": "2.6.2",
|
||||||
"d3": "5.5.0",
|
"d3": "5.7.0",
|
||||||
|
"date-fns": "1.30.1",
|
||||||
"hammerjs": "2.0.8",
|
"hammerjs": "2.0.8",
|
||||||
"lodash": "4.17.10",
|
"lodash": "4.17.11",
|
||||||
"moment": "2.22.2",
|
"moment": "2.23.0",
|
||||||
"ng2-charts": "1.6.0",
|
"ng2-charts": "1.6.0",
|
||||||
"ngrx-store-freeze": "0.2.4",
|
"ngrx-store-freeze": "0.2.4",
|
||||||
"ngx-color-picker": "6.4.0",
|
"ngx-color-picker": "7.3.0",
|
||||||
"ngx-cookie-service": "1.0.10",
|
"ngx-cookie-service": "2.1.0",
|
||||||
"perfect-scrollbar": "1.4.0",
|
"perfect-scrollbar": "1.4.0",
|
||||||
"prismjs": "1.15.0",
|
"prismjs": "1.15.0",
|
||||||
"rxjs": "6.2.1",
|
"rxjs": "6.3.3",
|
||||||
"rxjs-compat": "6.2.1",
|
"rxjs-compat": "6.3.3",
|
||||||
"web-animations-js": "2.3.1",
|
"web-animations-js": "2.3.1",
|
||||||
"zone.js": "0.8.26"
|
"zone.js": "0.8.28"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular/cli": "6.0.8",
|
"@angular/cli": "7.2.2",
|
||||||
"@angular/compiler-cli": "6.0.7",
|
"@angular/compiler-cli": "7.2.1",
|
||||||
"@angular/language-service": "6.0.7",
|
"@angular/language-service": "7.2.1",
|
||||||
"@angular-devkit/build-angular": "0.6.8",
|
"@angular-devkit/build-angular": "0.12.2",
|
||||||
"@angularclass/hmr": "2.1.3",
|
"@angularclass/hmr": "2.1.3",
|
||||||
"@types/jasmine": "2.8.8",
|
"@types/jasmine": "2.8.14",
|
||||||
"@types/jasminewd2": "2.0.3",
|
"@types/jasminewd2": "2.0.6",
|
||||||
"@types/lodash": "4.14.110",
|
"@types/lodash": "4.14.119",
|
||||||
"@types/node": "8.9.5",
|
"@types/node": "8.9.5",
|
||||||
"codelyzer": "4.2.1",
|
"codelyzer": "4.5.0",
|
||||||
"jasmine-core": "2.99.1",
|
"jasmine-core": "2.99.1",
|
||||||
"jasmine-spec-reporter": "4.2.1",
|
"jasmine-spec-reporter": "4.2.1",
|
||||||
"karma": "1.7.1",
|
"karma": "3.1.4",
|
||||||
"karma-chrome-launcher": "2.2.0",
|
"karma-chrome-launcher": "2.2.0",
|
||||||
"karma-coverage-istanbul-reporter": "2.0.1",
|
"karma-coverage-istanbul-reporter": "2.0.4",
|
||||||
"karma-jasmine": "1.1.2",
|
"karma-jasmine": "1.1.2",
|
||||||
"karma-jasmine-html-reporter": "0.2.2",
|
"karma-jasmine-html-reporter": "0.2.2",
|
||||||
"protractor": "5.3.2",
|
"protractor": "5.4.2",
|
||||||
"ts-node": "5.0.1",
|
"ts-node": "7.0.1",
|
||||||
"tslint": "5.9.1",
|
"tslib": "1.9.3",
|
||||||
"typescript": "2.7.2",
|
"tslint": "5.11.0",
|
||||||
"webpack-bundle-analyzer": "2.13.1"
|
"typescript": "3.2.2",
|
||||||
|
"webpack-bundle-analyzer": "3.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
:host {
|
fuse-countdown {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Component, Input, OnDestroy, OnInit } from '@angular/core';
|
import { Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
import { interval, Subject } from 'rxjs';
|
import { interval, Subject } from 'rxjs';
|
||||||
import { map, takeUntil } from 'rxjs/operators';
|
import { map, takeUntil } from 'rxjs/operators';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
@@ -6,7 +6,8 @@ import * as moment from 'moment';
|
|||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-countdown',
|
selector : 'fuse-countdown',
|
||||||
templateUrl: './countdown.component.html',
|
templateUrl: './countdown.component.html',
|
||||||
styleUrls : ['./countdown.component.scss']
|
styleUrls : ['./countdown.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
})
|
})
|
||||||
export class FuseCountdownComponent implements OnInit, OnDestroy
|
export class FuseCountdownComponent implements OnInit, OnDestroy
|
||||||
{
|
{
|
||||||
@@ -48,9 +49,13 @@ export class FuseCountdownComponent implements OnInit, OnDestroy
|
|||||||
const currDate = moment();
|
const currDate = moment();
|
||||||
const eventDate = moment(this.eventDate);
|
const eventDate = moment(this.eventDate);
|
||||||
|
|
||||||
// Get the difference in between the current date and event date
|
// Get the difference in between the current date and event date in seconds
|
||||||
let diff = eventDate.diff(currDate, 'seconds');
|
let diff = eventDate.diff(currDate, 'seconds');
|
||||||
|
|
||||||
|
// Calculate the remaining time for the first time so there will be no
|
||||||
|
// delay on the countdown
|
||||||
|
this.countdown = this._secondsToRemaining(diff);
|
||||||
|
|
||||||
// Create a subscribable interval
|
// Create a subscribable interval
|
||||||
const countDown = interval(1000)
|
const countDown = interval(1000)
|
||||||
.pipe(
|
.pipe(
|
||||||
@@ -58,14 +63,7 @@ export class FuseCountdownComponent implements OnInit, OnDestroy
|
|||||||
return diff = diff - 1;
|
return diff = diff - 1;
|
||||||
}),
|
}),
|
||||||
map(value => {
|
map(value => {
|
||||||
const timeLeft = moment.duration(value, 'seconds');
|
return this._secondsToRemaining(value);
|
||||||
|
|
||||||
return {
|
|
||||||
days : timeLeft.asDays().toFixed(0),
|
|
||||||
hours : timeLeft.hours(),
|
|
||||||
minutes: timeLeft.minutes(),
|
|
||||||
seconds: timeLeft.seconds()
|
|
||||||
};
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -86,4 +84,27 @@ export class FuseCountdownComponent implements OnInit, OnDestroy
|
|||||||
this._unsubscribeAll.next();
|
this._unsubscribeAll.next();
|
||||||
this._unsubscribeAll.complete();
|
this._unsubscribeAll.complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Private methods
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts given seconds to a remaining time
|
||||||
|
*
|
||||||
|
* @param seconds
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
private _secondsToRemaining(seconds): any
|
||||||
|
{
|
||||||
|
const timeLeft = moment.duration(seconds, 'seconds');
|
||||||
|
|
||||||
|
return {
|
||||||
|
days : timeLeft.asDays().toFixed(0),
|
||||||
|
hours : timeLeft.hours(),
|
||||||
|
minutes: timeLeft.minutes(),
|
||||||
|
seconds: timeLeft.seconds()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/@fuse/components/countdown/countdown.theme.scss
Normal file
17
src/@fuse/components/countdown/countdown.theme.scss
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
@mixin fuse-countdown-theme($theme) {
|
||||||
|
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
fuse-countdown {
|
||||||
|
|
||||||
|
.fuse-countdown {
|
||||||
|
|
||||||
|
.time {
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
<!-- DEMO CONTENT -->
|
<!-- DEMO CONTENT -->
|
||||||
<div class="demo-content">
|
<div class="demo-content line-height-1.75">
|
||||||
|
|
||||||
<img src="assets/images/beach.jpg" alt="beach" style="max-width: 640px; width: 100%;">
|
<h1 class="m-0">Early Sunrise in Winter</h1>
|
||||||
|
<h4 class="mt-0 secondary-text">Demo Content</h4>
|
||||||
<h1>Early Sunrise</h1>
|
|
||||||
<h4 class="secondary-text">Demo Content</h4>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tortor nibh, convallis sed purus nec,
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tortor nibh, convallis sed purus nec,
|
||||||
@@ -12,7 +10,7 @@
|
|||||||
vestibulum. Suspendisse euismod in urna eu posuere.
|
vestibulum. Suspendisse euismod in urna eu posuere.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<blockquote>
|
<blockquote class="my-24">
|
||||||
<p>
|
<p>
|
||||||
Nunc vel lacinia lorem. Nullam tincidunt sed purus eu placerat. Donec id dictum erat. Etiam enim ex, dapibus
|
Nunc vel lacinia lorem. Nullam tincidunt sed purus eu placerat. Donec id dictum erat. Etiam enim ex, dapibus
|
||||||
et tortor id, posuere pretium est. Maecenas fringilla ipsum vitae neque elementum, at eleifend ante
|
et tortor id, posuere pretium est. Maecenas fringilla ipsum vitae neque elementum, at eleifend ante
|
||||||
@@ -24,16 +22,12 @@
|
|||||||
</blockquote>
|
</blockquote>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Ut ornare sit amet velit vel congue. Ut nec tristique eros. Lorem ipsum dolor sit amet, consectetur adipiscing
|
Ut ornare sit amet velit vel congue. Ut nec tristique eros. Lorem ipsum dolor sit amet, consectetur
|
||||||
elit. Vivamus sed lorem quis nibh porta iaculis. Vestibulum ut eleifend ante, at semper mi. Nam imperdiet est
|
<b>adipiscing elit</b>. Vivamus sed lorem quis nibh porta iaculis. Vestibulum ut eleifend ante, at semper mi.
|
||||||
nisi, quis hendrerit tellus convallis et. Morbi in luctus neque. Curabitur elementum ut est et gravida. In hac
|
Nam imperdiet est nisi, quis hendrerit tellus convallis et. Morbi in luctus neque. Curabitur elementum ut est et
|
||||||
habitasse platea dictumst.
|
gravida. In hac habitasse platea dictumst. In et placerat eros, eu tempor turpis. Curabitur ac felis finibus,
|
||||||
</p>
|
elementum lectus vitae, venenatis est. Integer mollis nisl a eros scelerisque varius. Etiam venenatis lectus vel
|
||||||
|
erat condimentum tristique vel vel mi. Nulla id euismod mi, et mollis tellus.
|
||||||
<p>
|
|
||||||
In et placerat eros, eu tempor turpis. Curabitur ac felis finibus, elementum lectus vitae, venenatis est.
|
|
||||||
Integer mollis nisl a eros scelerisque varius. Etiam venenatis lectus vel erat condimentum tristique vel vel mi.
|
|
||||||
Nulla id euismod mi, et mollis tellus.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -43,6 +37,12 @@
|
|||||||
velit.
|
velit.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<img class="mt-24 w-100-p" src="assets/images/demo-content/morain-lake.jpg" style="max-width: 640px">
|
||||||
|
|
||||||
|
<p class="mt-8 mb-24 secondary-text">
|
||||||
|
<em>Nullam tincidunt sed purus eu placerat. Donec id dictum erat. Etiam enim ex, dapibus et tortor id.</em>
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Quisque sit amet risus enim. Aliquam sit amet interdum justo, at ultricies sapien. Suspendisse et semper urna,
|
Quisque sit amet risus enim. Aliquam sit amet interdum justo, at ultricies sapien. Suspendisse et semper urna,
|
||||||
in gravida eros. Quisque id nibh iaculis, euismod urna sed, egestas nisi. Donec eros metus, congue a imperdiet
|
in gravida eros. Quisque id nibh iaculis, euismod urna sed, egestas nisi. Donec eros metus, congue a imperdiet
|
||||||
@@ -52,10 +52,18 @@
|
|||||||
<p>
|
<p>
|
||||||
Ut auctor, metus sed dapibus tempus, urna diam auctor odio, in malesuada odio risus vitae nisi. Etiam blandit
|
Ut auctor, metus sed dapibus tempus, urna diam auctor odio, in malesuada odio risus vitae nisi. Etiam blandit
|
||||||
ante urna, vitae placerat massa mollis in. Duis nec urna ac purus semper dictum ut eget justo. Aenean non
|
ante urna, vitae placerat massa mollis in. Duis nec urna ac purus semper dictum ut eget justo. Aenean non
|
||||||
sagittis augue. Sed venenatis rhoncus enim eget ornare. Donec viverra sed felis at venenatis. Mauris aliquam
|
sagittis augue. Sed venenatis rhoncus enim eget ornare. <a href="#">Donec viverra sed felis at venenatis.</a>
|
||||||
fringilla nulla, sit amet congue felis dignissim at.
|
Mauris aliquam fringilla nulla, sit amet congue felis dignissim at.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Orci varius</li>
|
||||||
|
<li>Magnis dis</li>
|
||||||
|
<li>Conubia nostra</li>
|
||||||
|
<li>Semper urna</li>
|
||||||
|
<li>Donec viverra</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Quisque accumsan augue tempor ante mollis, sed placerat diam porttitor. Vestibulum dignissim sem vel velit
|
Quisque accumsan augue tempor ante mollis, sed placerat diam porttitor. Vestibulum dignissim sem vel velit
|
||||||
eleifend, non pellentesque quam convallis. Pellentesque est dolor, dignissim ac tortor tristique, hendrerit
|
eleifend, non pellentesque quam convallis. Pellentesque est dolor, dignissim ac tortor tristique, hendrerit
|
||||||
@@ -69,7 +77,7 @@
|
|||||||
Etiam blandit nunc arcu, et consectetur orci blandit a. Aliquam condimentum pharetra quam at ultricies. Nunc vel
|
Etiam blandit nunc arcu, et consectetur orci blandit a. Aliquam condimentum pharetra quam at ultricies. Nunc vel
|
||||||
lacinia lorem. Nullam tincidunt sed purus eu placerat. Donec id dictum erat. Etiam enim ex, dapibus et tortor
|
lacinia lorem. Nullam tincidunt sed purus eu placerat. Donec id dictum erat. Etiam enim ex, dapibus et tortor
|
||||||
id, posuere pretium est. Maecenas fringilla ipsum vitae neque elementum, at eleifend ante sollicitudin. Donec
|
id, posuere pretium est. Maecenas fringilla ipsum vitae neque elementum, at eleifend ante sollicitudin. Donec
|
||||||
viverra augue dolor, a venenatis tellus consectetur sit amet...
|
viverra augue dolor, a venenatis tellus consectetur sit amet.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<!-- / DEMO CONTENT -->
|
<!-- / DEMO CONTENT -->
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
:host {
|
:host {
|
||||||
display: block;
|
display: block;
|
||||||
|
width: 100%;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
background: #263238;
|
background: #263238;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ export * from './demo/demo.module';
|
|||||||
export * from './highlight/highlight.module';
|
export * from './highlight/highlight.module';
|
||||||
export * from './material-color-picker/material-color-picker.module';
|
export * from './material-color-picker/material-color-picker.module';
|
||||||
export * from './navigation/navigation.module';
|
export * from './navigation/navigation.module';
|
||||||
|
export * from './progress-bar/progress-bar.module';
|
||||||
export * from './search-bar/search-bar.module';
|
export * from './search-bar/search-bar.module';
|
||||||
export * from './shortcuts/shortcuts.module';
|
export * from './shortcuts/shortcuts.module';
|
||||||
export * from './sidebar/sidebar.module';
|
export * from './sidebar/sidebar.module';
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
<button mat-icon-button
|
<button mat-icon-button
|
||||||
type="button"
|
|
||||||
class="mat-elevation-z1"
|
class="mat-elevation-z1"
|
||||||
[matMenuTriggerFor]="colorMenu"
|
[matMenuTriggerFor]="colorMenu"
|
||||||
(menuOpened)="onMenuOpen()"
|
(menuOpened)="onMenuOpen()"
|
||||||
[ngClass]="'mat-'+selectedPalette+'-'+selectedHue+'-bg'">
|
[ngClass]="selectedPalette + '-' + selectedHue">
|
||||||
<mat-icon>palette</mat-icon>
|
<mat-icon>palette</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<mat-menu #colorMenu="matMenu" class="fuse-material-color-picker-menu">
|
<mat-menu #colorMenu="matMenu" class="fuse-material-color-picker-menu mat-elevation-z8">
|
||||||
|
|
||||||
<header [ngClass]="selectedColor?.class || 'mat-accent-bg'" class="mat-elevation-z4"
|
<header [ngClass]="selectedColor?.class || 'accent'" class="mat-elevation-z4"
|
||||||
fxLayout="row" fxLayoutAlign="space-between center">
|
fxLayout="row" fxLayoutAlign="space-between center">
|
||||||
|
|
||||||
<button mat-icon-button
|
<button mat-icon-button
|
||||||
|
class="secondary-text"
|
||||||
[style.visibility]="view === 'hues' ? 'visible' : 'hidden'"
|
[style.visibility]="view === 'hues' ? 'visible' : 'hidden'"
|
||||||
(click)="$event.stopPropagation();backToPaletteSelection()" aria-label="Palette">
|
(click)="goToPalettesView($event)" aria-label="Palette">
|
||||||
<mat-icon class="s-20">arrow_back</mat-icon>
|
<mat-icon class="s-20">arrow_back</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
@@ -23,45 +23,40 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<span *ngIf="!selectedColor?.palette">
|
<span *ngIf="!selectedColor?.palette">
|
||||||
Select Color
|
Select a Color
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<button mat-icon-button
|
<button mat-icon-button
|
||||||
class="remove-color-button"
|
class="remove-color-button secondary-text"
|
||||||
(click)="$event.stopPropagation();removeColor()"
|
(click)="removeColor($event)"
|
||||||
aria-label="Remove Color">
|
aria-label="Remove color"
|
||||||
|
matTooltip="Remove color">
|
||||||
<mat-icon class="s-20">delete</mat-icon>
|
<mat-icon class="s-20">delete</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
||||||
<div [ngSwitch]="view" class="views">
|
<div [ngSwitch]="view" class="views">
|
||||||
|
|
||||||
<div class="view" *ngSwitchCase="'palettes'">
|
<div class="view" *ngSwitchCase="'palettes'">
|
||||||
|
|
||||||
<div fxLayout="row wrap" fxLayoutAlign="start start" class="colors" fusePerfectScrollbar>
|
<div fxLayout="row wrap" fxLayoutAlign="start start" class="colors" fusePerfectScrollbar>
|
||||||
<div class="color"
|
<div class="color" fxLayout="row" fxLayoutAlign="center center"
|
||||||
[ngClass]="'mat-'+color.key+'-bg'"
|
|
||||||
*ngFor="let color of (colors | keys)"
|
*ngFor="let color of (colors | keys)"
|
||||||
(click)="$event.stopPropagation();selectPalette(color.key)"
|
[ngClass]="color.key"
|
||||||
fxLayout="row" fxLayoutAlign="start end" mat-ink-ripple>
|
[class.selected]="selectedPalette === color.key"
|
||||||
<span class="label">
|
(click)="selectPalette($event, color.key)">
|
||||||
{{color.key}}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="view" *ngSwitchCase="'hues'">
|
<div class="view" *ngSwitchCase="'hues'">
|
||||||
<div fxLayout="row wrap" fxLayoutAlign="start start" class="colors" fusePerfectScrollbar>
|
<div fxLayout="row wrap" fxLayoutAlign="start start" class="colors" fusePerfectScrollbar>
|
||||||
<div class="color" *ngFor="let hue of hues"
|
<div class="color" fxLayout="row" fxLayoutAlign="center center"
|
||||||
[fxHide]="selectedPalette === 'white' && hue !== '500'|| selectedPalette === 'black' && hue !== '500'"
|
*ngFor="let hue of hues"
|
||||||
[ngClass]="'mat-'+selectedPalette+'-'+hue+'-bg'"
|
[fxHide]="selectedPalette === 'fuse-white' && hue !== '500' || selectedPalette === 'fuse-black' && hue !== '500'"
|
||||||
(click)="selectHue(hue)" fxLayout="row" fxLayoutAlign="start end" mat-ink-ripple>
|
[ngClass]="selectedPalette + '-' + hue"
|
||||||
<span class="label">
|
[class.selected]="selectedHue === hue"
|
||||||
{{hue}}
|
(click)="selectHue($event, hue)">
|
||||||
</span>
|
|
||||||
<mat-icon *ngIf="selectedHue === hue" class="s-16">check</mat-icon>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
.fuse-material-color-picker-menu {
|
.fuse-material-color-picker-menu {
|
||||||
width: 208px;
|
width: 245px;
|
||||||
|
|
||||||
.mat-menu-content {
|
.mat-menu-content {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@@ -7,44 +7,29 @@
|
|||||||
.views {
|
.views {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: relative;
|
min-height: 165px;
|
||||||
overflow: hidden;
|
|
||||||
min-height: 258px;
|
|
||||||
height: 308px;
|
|
||||||
background-color: #F7F7F7;
|
|
||||||
|
|
||||||
.view {
|
.view {
|
||||||
position: absolute;
|
overflow: hidden;
|
||||||
width: 208px;
|
|
||||||
height: 100%;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
|
|
||||||
.colors {
|
.colors {
|
||||||
position: relative;
|
padding: 1px 0 0 0;
|
||||||
padding: 4px;
|
margin-left: -1px;
|
||||||
|
|
||||||
.color {
|
.color {
|
||||||
position: relative;
|
width: 40px;
|
||||||
width: 46px;
|
height: 40px;
|
||||||
height: 46px;
|
margin: 0 0 1px 1px;
|
||||||
margin: 2px;
|
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
transition: border-radius .4s cubic-bezier(.25, .8, .25, 1);
|
||||||
|
|
||||||
.label {
|
&:hover {
|
||||||
padding: 2px;
|
border-radius: 20%;
|
||||||
font-size: 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mat-icon {
|
&.selected {
|
||||||
position: absolute;
|
border-radius: 50% !important;
|
||||||
top: 2px;
|
|
||||||
right: 2px;
|
|
||||||
font-size: 16px;
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,55 +1,40 @@
|
|||||||
import { Component, EventEmitter, Input, OnChanges, Output, ViewEncapsulation } from '@angular/core';
|
import { Component, EventEmitter, forwardRef, Input, Output, ViewEncapsulation } from '@angular/core';
|
||||||
|
|
||||||
import { fuseAnimations } from '@fuse/animations';
|
import { fuseAnimations } from '@fuse/animations';
|
||||||
import { MatColors } from '@fuse/mat-colors';
|
import { MatColors } from '@fuse/mat-colors';
|
||||||
|
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
|
||||||
|
|
||||||
|
export const FUSE_MATERIAL_COLOR_PICKER_VALUE_ACCESSOR: any = {
|
||||||
|
provide : NG_VALUE_ACCESSOR,
|
||||||
|
useExisting: forwardRef(() => FuseMaterialColorPickerComponent),
|
||||||
|
multi : true
|
||||||
|
};
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-material-color-picker',
|
selector : 'fuse-material-color-picker',
|
||||||
templateUrl : './material-color-picker.component.html',
|
templateUrl : './material-color-picker.component.html',
|
||||||
styleUrls : ['./material-color-picker.component.scss'],
|
styleUrls : ['./material-color-picker.component.scss'],
|
||||||
animations : fuseAnimations,
|
animations : fuseAnimations,
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation: ViewEncapsulation.None,
|
||||||
|
providers : [FUSE_MATERIAL_COLOR_PICKER_VALUE_ACCESSOR]
|
||||||
})
|
})
|
||||||
export class FuseMaterialColorPickerComponent implements OnChanges
|
export class FuseMaterialColorPickerComponent implements ControlValueAccessor
|
||||||
{
|
{
|
||||||
colors: any;
|
colors: any;
|
||||||
hues: string[];
|
hues: string[];
|
||||||
selectedColor: any;
|
|
||||||
view: string;
|
view: string;
|
||||||
|
selectedColor: any;
|
||||||
@Input()
|
|
||||||
selectedPalette: string;
|
selectedPalette: string;
|
||||||
|
|
||||||
@Input()
|
|
||||||
selectedHue: string;
|
selectedHue: string;
|
||||||
|
|
||||||
@Input()
|
// Color changed
|
||||||
selectedFg: string;
|
|
||||||
|
|
||||||
@Input()
|
|
||||||
value: any;
|
|
||||||
|
|
||||||
@Output()
|
@Output()
|
||||||
onValueChange: EventEmitter<any>;
|
colorChanged: EventEmitter<any>;
|
||||||
|
|
||||||
@Output()
|
|
||||||
selectedPaletteChange: EventEmitter<any>;
|
|
||||||
|
|
||||||
@Output()
|
|
||||||
selectedHueChange: EventEmitter<any>;
|
|
||||||
|
|
||||||
@Output()
|
|
||||||
selectedClassChange: EventEmitter<any>;
|
|
||||||
|
|
||||||
@Output()
|
|
||||||
selectedBgChange: EventEmitter<any>;
|
|
||||||
|
|
||||||
@Output()
|
|
||||||
selectedFgChange: EventEmitter<any>;
|
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
_selectedClass: string;
|
private _color: string;
|
||||||
_selectedBg: string;
|
private _modelChange: (value: any) => void;
|
||||||
|
private _modelTouched: (value: any) => void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@@ -57,23 +42,18 @@ export class FuseMaterialColorPickerComponent implements OnChanges
|
|||||||
constructor()
|
constructor()
|
||||||
{
|
{
|
||||||
// Set the defaults
|
// Set the defaults
|
||||||
|
this.colorChanged = new EventEmitter();
|
||||||
this.colors = MatColors.all;
|
this.colors = MatColors.all;
|
||||||
this.hues = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', 'A100', 'A200', 'A400', 'A700'];
|
this.hues = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', 'A100', 'A200', 'A400', 'A700'];
|
||||||
this.selectedFg = '';
|
this.selectedHue = '500';
|
||||||
this.selectedHue = '';
|
|
||||||
this.selectedPalette = '';
|
|
||||||
this.view = 'palettes';
|
this.view = 'palettes';
|
||||||
|
|
||||||
this.onValueChange = new EventEmitter();
|
|
||||||
this.selectedPaletteChange = new EventEmitter();
|
|
||||||
this.selectedHueChange = new EventEmitter();
|
|
||||||
this.selectedClassChange = new EventEmitter();
|
|
||||||
this.selectedBgChange = new EventEmitter();
|
|
||||||
this.selectedFgChange = new EventEmitter();
|
|
||||||
|
|
||||||
// Set the private defaults
|
// Set the private defaults
|
||||||
this._selectedClass = '';
|
this._color = '';
|
||||||
this._selectedBg = '';
|
this._modelChange = () => {
|
||||||
|
};
|
||||||
|
this._modelTouched = () => {
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@@ -86,88 +66,76 @@ export class FuseMaterialColorPickerComponent implements OnChanges
|
|||||||
* @param value
|
* @param value
|
||||||
*/
|
*/
|
||||||
@Input()
|
@Input()
|
||||||
set selectedClass(value)
|
set color(value)
|
||||||
{
|
{
|
||||||
if ( value && value !== '' && this._selectedClass !== value )
|
if ( !value || value === '' || this._color === value )
|
||||||
{
|
{
|
||||||
const color = value.split('-');
|
|
||||||
if ( color.length >= 5 )
|
|
||||||
{
|
|
||||||
this.selectedPalette = color[1] + '-' + color[2];
|
|
||||||
this.selectedHue = color[3];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.selectedPalette = color[1];
|
|
||||||
this.selectedHue = color[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._selectedClass = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
get selectedClass(): string
|
|
||||||
{
|
|
||||||
return this._selectedClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Selected bg
|
|
||||||
*
|
|
||||||
* @param value
|
|
||||||
*/
|
|
||||||
@Input()
|
|
||||||
set selectedBg(value)
|
|
||||||
{
|
|
||||||
if ( value && value !== '' && this._selectedBg !== value )
|
|
||||||
{
|
|
||||||
for ( const palette in this.colors )
|
|
||||||
{
|
|
||||||
if ( !this.colors.hasOwnProperty(palette) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( const hue of this.hues )
|
|
||||||
{
|
|
||||||
if ( this.colors[palette][hue] === value )
|
|
||||||
{
|
|
||||||
this.selectedPalette = palette;
|
|
||||||
this.selectedHue = hue;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._selectedBg = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
get selectedBg(): string
|
|
||||||
{
|
|
||||||
return this._selectedBg;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------
|
|
||||||
// @ Lifecycle hooks
|
|
||||||
// -----------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On changes
|
|
||||||
*
|
|
||||||
* @param changes
|
|
||||||
*/
|
|
||||||
ngOnChanges(changes: any): void
|
|
||||||
{
|
|
||||||
if ( changes.selectedBg && changes.selectedBg.currentValue === '' ||
|
|
||||||
changes.selectedClass && changes.selectedClass.currentValue === '' ||
|
|
||||||
changes.selectedPalette && changes.selectedPalette.currentValue === '' )
|
|
||||||
{
|
|
||||||
this.removeColor();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( changes.selectedPalette || changes.selectedHue || changes.selectedClass || changes.selectedBg )
|
|
||||||
{
|
// Split the color value (red-400, blue-500, fuse-navy-700 etc.)
|
||||||
this.updateSelectedColor();
|
const colorParts = value.split('-');
|
||||||
|
|
||||||
|
// Take the very last part as the selected hue value
|
||||||
|
this.selectedHue = colorParts[colorParts.length - 1];
|
||||||
|
|
||||||
|
// Remove the last part
|
||||||
|
colorParts.pop();
|
||||||
|
|
||||||
|
// Rejoin the remaining parts as the selected palette name
|
||||||
|
this.selectedPalette = colorParts.join('-');
|
||||||
|
|
||||||
|
// Store the color value
|
||||||
|
this._color = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get color(): string
|
||||||
|
{
|
||||||
|
return this._color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Control Value Accessor implementation
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register on change function
|
||||||
|
*
|
||||||
|
* @param fn
|
||||||
|
*/
|
||||||
|
registerOnChange(fn: any): void
|
||||||
|
{
|
||||||
|
this._modelChange = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register on touched function
|
||||||
|
*
|
||||||
|
* @param fn
|
||||||
|
*/
|
||||||
|
registerOnTouched(fn: any): void
|
||||||
|
{
|
||||||
|
this._modelTouched = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write value to the view from model
|
||||||
|
*
|
||||||
|
* @param color
|
||||||
|
*/
|
||||||
|
writeValue(color: any): void
|
||||||
|
{
|
||||||
|
// Return if null
|
||||||
|
if ( !color )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the color
|
||||||
|
this.color = color;
|
||||||
|
|
||||||
|
// Update the selected color
|
||||||
|
this.updateSelectedColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@@ -177,35 +145,61 @@ export class FuseMaterialColorPickerComponent implements OnChanges
|
|||||||
/**
|
/**
|
||||||
* Select palette
|
* Select palette
|
||||||
*
|
*
|
||||||
|
* @param event
|
||||||
* @param palette
|
* @param palette
|
||||||
*/
|
*/
|
||||||
selectPalette(palette): void
|
selectPalette(event, palette): void
|
||||||
{
|
{
|
||||||
this.selectedPalette = palette;
|
// Stop propagation
|
||||||
this.updateSelectedColor();
|
event.stopPropagation();
|
||||||
|
|
||||||
|
// Go to 'hues' view
|
||||||
this.view = 'hues';
|
this.view = 'hues';
|
||||||
|
|
||||||
|
// Update the selected palette
|
||||||
|
this.selectedPalette = palette;
|
||||||
|
|
||||||
|
// Update the selected color
|
||||||
|
this.updateSelectedColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select hue
|
* Select hue
|
||||||
*
|
*
|
||||||
|
* @param event
|
||||||
* @param hue
|
* @param hue
|
||||||
*/
|
*/
|
||||||
selectHue(hue): void
|
selectHue(event, hue): void
|
||||||
{
|
{
|
||||||
|
// Stop propagation
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
// Update the selected huse
|
||||||
this.selectedHue = hue;
|
this.selectedHue = hue;
|
||||||
|
|
||||||
|
// Update the selected color
|
||||||
this.updateSelectedColor();
|
this.updateSelectedColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove color
|
* Remove color
|
||||||
|
*
|
||||||
|
* @param event
|
||||||
*/
|
*/
|
||||||
removeColor(): void
|
removeColor(event): void
|
||||||
{
|
{
|
||||||
|
// Stop propagation
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
// Return to the 'palettes' view
|
||||||
|
this.view = 'palettes';
|
||||||
|
|
||||||
|
// Clear the selected palette and hue
|
||||||
this.selectedPalette = '';
|
this.selectedPalette = '';
|
||||||
this.selectedHue = '';
|
this.selectedHue = '';
|
||||||
|
|
||||||
|
// Update the selected color
|
||||||
this.updateSelectedColor();
|
this.updateSelectedColor();
|
||||||
this.view = 'palettes';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -213,49 +207,40 @@ export class FuseMaterialColorPickerComponent implements OnChanges
|
|||||||
*/
|
*/
|
||||||
updateSelectedColor(): void
|
updateSelectedColor(): void
|
||||||
{
|
{
|
||||||
setTimeout(() => {
|
if ( this.selectedColor && this.selectedColor.palette === this.selectedPalette && this.selectedColor.hue === this.selectedHue )
|
||||||
|
|
||||||
if ( this.selectedColor && this.selectedPalette === this.selectedColor.palette && this.selectedHue === this.selectedColor.hue )
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( this.selectedPalette !== '' && this.selectedHue !== '' )
|
// Set the selected color object
|
||||||
{
|
|
||||||
this.selectedBg = MatColors.getColor(this.selectedPalette)[this.selectedHue];
|
|
||||||
this.selectedFg = MatColors.getColor(this.selectedPalette).contrast[this.selectedHue];
|
|
||||||
this.selectedClass = 'mat-' + this.selectedPalette + '-' + this.selectedHue + '-bg';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.selectedBg = '';
|
|
||||||
this.selectedFg = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectedColor = {
|
this.selectedColor = {
|
||||||
palette: this.selectedPalette,
|
palette: this.selectedPalette,
|
||||||
hue : this.selectedHue,
|
hue : this.selectedHue,
|
||||||
class : this.selectedClass,
|
class : this.selectedPalette + '-' + this.selectedHue,
|
||||||
bg : this.selectedBg,
|
bg : this.selectedPalette === '' ? '' : MatColors.getColor(this.selectedPalette)[this.selectedHue],
|
||||||
fg : this.selectedFg
|
fg : this.selectedPalette === '' ? '' : MatColors.getColor(this.selectedPalette).contrast[this.selectedHue]
|
||||||
};
|
};
|
||||||
|
|
||||||
this.selectedPaletteChange.emit(this.selectedPalette);
|
// Emit the color changed event
|
||||||
this.selectedHueChange.emit(this.selectedHue);
|
this.colorChanged.emit(this.selectedColor);
|
||||||
this.selectedClassChange.emit(this.selectedClass);
|
|
||||||
this.selectedBgChange.emit(this.selectedBg);
|
|
||||||
this.selectedFgChange.emit(this.selectedFg);
|
|
||||||
|
|
||||||
this.value = this.selectedColor;
|
// Mark the model as touched
|
||||||
this.onValueChange.emit(this.selectedColor);
|
this._modelTouched(this.selectedColor.class);
|
||||||
});
|
|
||||||
|
// Update the model
|
||||||
|
this._modelChange(this.selectedColor.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Go back to palette selection
|
* Go to palettes view
|
||||||
|
*
|
||||||
|
* @param event
|
||||||
*/
|
*/
|
||||||
backToPaletteSelection(): void
|
goToPalettesView(event): void
|
||||||
{
|
{
|
||||||
|
// Stop propagation
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
this.view = 'palettes';
|
this.view = 'palettes';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||||
import { MatButtonModule, MatIconModule, MatMenuModule, MatRippleModule } from '@angular/material';
|
import { MatButtonModule, MatIconModule, MatMenuModule, MatTooltipModule } from '@angular/material';
|
||||||
|
|
||||||
import { FusePipesModule } from '@fuse/pipes/pipes.module';
|
import { FusePipesModule } from '@fuse/pipes/pipes.module';
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ import { FuseMaterialColorPickerComponent } from '@fuse/components/material-colo
|
|||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
MatIconModule,
|
MatIconModule,
|
||||||
MatMenuModule,
|
MatMenuModule,
|
||||||
MatRippleModule,
|
MatTooltipModule,
|
||||||
|
|
||||||
FusePipesModule
|
FusePipesModule
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
@mixin fuse-material-color-picker-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
|
||||||
|
.fuse-material-color-picker-menu {
|
||||||
|
|
||||||
|
.mat-menu-content {
|
||||||
|
|
||||||
|
.views {
|
||||||
|
background: #303030;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,42 +1,42 @@
|
|||||||
<ng-container *ngIf="!item.hidden">
|
<ng-container *ngIf="!item.hidden">
|
||||||
|
|
||||||
<!-- normal collapse -->
|
<!-- normal collapse -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && !item.function" matRipple>
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && !item.function">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.url -->
|
<!-- item.url -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
||||||
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl -->
|
<!-- item.externalUrl -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.function -->
|
<!-- item.function -->
|
||||||
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
||||||
(click)="item.function()" matRipple>
|
(click)="item.function()">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- item.url && item.function -->
|
<!-- item.url && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
||||||
(click)="item.function()"
|
(click)="item.function()"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl && item.function -->
|
<!-- item.externalUrl && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
||||||
(click)="item.function()"
|
(click)="item.function()"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<div class="children" [ngClass]="{'open': isOpen}">
|
<div class="children" [ngClass]="{'open': isOpen}">
|
||||||
|
|
||||||
<div class="{{fuseConfig.layout.navbar.background}}">
|
<div class="{{fuseConfig.layout.navbar.primaryBackground}}">
|
||||||
|
|
||||||
<ng-container *ngFor="let item of item.children">
|
<ng-container *ngFor="let item of item.children">
|
||||||
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
|
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
|
|
||||||
<!-- item.url -->
|
<!-- item.url -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
||||||
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl -->
|
<!-- item.externalUrl -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.function -->
|
<!-- item.function -->
|
||||||
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
||||||
(click)="item.function()" matRipple>
|
(click)="item.function()">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- item.url && item.function -->
|
<!-- item.url && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
||||||
(click)="item.function()"
|
(click)="item.function()"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
||||||
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl && item.function -->
|
<!-- item.externalUrl && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
||||||
(click)="item.function()"
|
(click)="item.function()"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
<ng-container *ngFor="let item of navigation">
|
<ng-container *ngFor="let item of navigation">
|
||||||
|
|
||||||
<fuse-nav-vertical-group *ngIf="item.type=='group'" [item]="item"></fuse-nav-vertical-group>
|
<fuse-nav-vertical-group *ngIf="item.type=='group'" [item]="item"></fuse-nav-vertical-group>
|
||||||
<fuse-nav-vertical-collapsable *ngIf="item.type=='collapse'" [item]="item"></fuse-nav-vertical-collapsable>
|
<fuse-nav-vertical-collapsable *ngIf="item.type=='collapsable'"
|
||||||
|
[item]="item"></fuse-nav-vertical-collapsable>
|
||||||
<fuse-nav-vertical-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-vertical-item>
|
<fuse-nav-vertical-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-vertical-item>
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
@@ -20,7 +21,7 @@
|
|||||||
<ng-container *ngFor="let item of navigation">
|
<ng-container *ngFor="let item of navigation">
|
||||||
|
|
||||||
<fuse-nav-horizontal-collapsable *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapsable>
|
<fuse-nav-horizontal-collapsable *ngIf="item.type=='group'" [item]="item"></fuse-nav-horizontal-collapsable>
|
||||||
<fuse-nav-horizontal-collapsable *ngIf="item.type=='collapse'"
|
<fuse-nav-horizontal-collapsable *ngIf="item.type=='collapsable'"
|
||||||
[item]="item"></fuse-nav-horizontal-collapsable>
|
[item]="item"></fuse-nav-horizontal-collapsable>
|
||||||
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
|
<fuse-nav-horizontal-item *ngIf="item.type=='item'" [item]="item"></fuse-nav-horizontal-item>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
import { Subject } from 'rxjs';
|
import { merge, Subject } from 'rxjs';
|
||||||
import { takeUntil } from 'rxjs/operators';
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||||
@@ -8,7 +8,8 @@ import { FuseNavigationService } from '@fuse/components/navigation/navigation.se
|
|||||||
selector : 'fuse-navigation',
|
selector : 'fuse-navigation',
|
||||||
templateUrl : './navigation.component.html',
|
templateUrl : './navigation.component.html',
|
||||||
styleUrls : ['./navigation.component.scss'],
|
styleUrls : ['./navigation.component.scss'],
|
||||||
encapsulation: ViewEncapsulation.None
|
encapsulation : ViewEncapsulation.None,
|
||||||
|
changeDetection: ChangeDetectionStrategy.OnPush
|
||||||
})
|
})
|
||||||
export class FuseNavigationComponent implements OnInit
|
export class FuseNavigationComponent implements OnInit
|
||||||
{
|
{
|
||||||
@@ -22,9 +23,12 @@ export class FuseNavigationComponent implements OnInit
|
|||||||
private _unsubscribeAll: Subject<any>;
|
private _unsubscribeAll: Subject<any>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
*
|
||||||
|
* @param {ChangeDetectorRef} _changeDetectorRef
|
||||||
|
* @param {FuseNavigationService} _fuseNavigationService
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
|
private _changeDetectorRef: ChangeDetectorRef,
|
||||||
private _fuseNavigationService: FuseNavigationService
|
private _fuseNavigationService: FuseNavigationService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -48,7 +52,24 @@ export class FuseNavigationComponent implements OnInit
|
|||||||
this._fuseNavigationService.onNavigationChanged
|
this._fuseNavigationService.onNavigationChanged
|
||||||
.pipe(takeUntil(this._unsubscribeAll))
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
|
|
||||||
|
// Load the navigation
|
||||||
this.navigation = this._fuseNavigationService.getCurrentNavigation();
|
this.navigation = this._fuseNavigationService.getCurrentNavigation();
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Subscribe to navigation item
|
||||||
|
merge(
|
||||||
|
this._fuseNavigationService.onNavigationItemAdded,
|
||||||
|
this._fuseNavigationService.onNavigationItemUpdated,
|
||||||
|
this._fuseNavigationService.onNavigationItemRemoved
|
||||||
|
).pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe(() => {
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
||||||
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { FuseNavigationItem } from '@fuse/types';
|
import { FuseNavigationItem } from '@fuse/types';
|
||||||
|
|
||||||
@@ -15,6 +16,9 @@ export class FuseNavigationService
|
|||||||
private _onNavigationChanged: BehaviorSubject<any>;
|
private _onNavigationChanged: BehaviorSubject<any>;
|
||||||
private _onNavigationRegistered: BehaviorSubject<any>;
|
private _onNavigationRegistered: BehaviorSubject<any>;
|
||||||
private _onNavigationUnregistered: BehaviorSubject<any>;
|
private _onNavigationUnregistered: BehaviorSubject<any>;
|
||||||
|
private _onNavigationItemAdded: BehaviorSubject<any>;
|
||||||
|
private _onNavigationItemUpdated: BehaviorSubject<any>;
|
||||||
|
private _onNavigationItemRemoved: BehaviorSubject<any>;
|
||||||
|
|
||||||
private _currentNavigationKey: string;
|
private _currentNavigationKey: string;
|
||||||
private _registry: { [key: string]: any } = {};
|
private _registry: { [key: string]: any } = {};
|
||||||
@@ -33,6 +37,9 @@ export class FuseNavigationService
|
|||||||
this._onNavigationChanged = new BehaviorSubject(null);
|
this._onNavigationChanged = new BehaviorSubject(null);
|
||||||
this._onNavigationRegistered = new BehaviorSubject(null);
|
this._onNavigationRegistered = new BehaviorSubject(null);
|
||||||
this._onNavigationUnregistered = new BehaviorSubject(null);
|
this._onNavigationUnregistered = new BehaviorSubject(null);
|
||||||
|
this._onNavigationItemAdded = new BehaviorSubject(null);
|
||||||
|
this._onNavigationItemUpdated = new BehaviorSubject(null);
|
||||||
|
this._onNavigationItemRemoved = new BehaviorSubject(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@@ -69,6 +76,36 @@ export class FuseNavigationService
|
|||||||
return this._onNavigationUnregistered.asObservable();
|
return this._onNavigationUnregistered.asObservable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get onNavigationItemAdded
|
||||||
|
*
|
||||||
|
* @returns {Observable<any>}
|
||||||
|
*/
|
||||||
|
get onNavigationItemAdded(): Observable<any>
|
||||||
|
{
|
||||||
|
return this._onNavigationItemAdded.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get onNavigationItemUpdated
|
||||||
|
*
|
||||||
|
* @returns {Observable<any>}
|
||||||
|
*/
|
||||||
|
get onNavigationItemUpdated(): Observable<any>
|
||||||
|
{
|
||||||
|
return this._onNavigationItemUpdated.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get onNavigationItemRemoved
|
||||||
|
*
|
||||||
|
* @returns {Observable<any>}
|
||||||
|
*/
|
||||||
|
get onNavigationItemRemoved(): Observable<any>
|
||||||
|
{
|
||||||
|
return this._onNavigationItemRemoved.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// @ Public methods
|
// @ Public methods
|
||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@@ -295,6 +332,9 @@ export class FuseNavigationService
|
|||||||
{
|
{
|
||||||
navigation.push(item);
|
navigation.push(item);
|
||||||
|
|
||||||
|
// Trigger the observable
|
||||||
|
this._onNavigationItemAdded.next(true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,6 +342,11 @@ export class FuseNavigationService
|
|||||||
if ( id === 'start' )
|
if ( id === 'start' )
|
||||||
{
|
{
|
||||||
navigation.unshift(item);
|
navigation.unshift(item);
|
||||||
|
|
||||||
|
// Trigger the observable
|
||||||
|
this._onNavigationItemAdded.next(true);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add it to a specific location
|
// Add it to a specific location
|
||||||
@@ -319,6 +364,33 @@ export class FuseNavigationService
|
|||||||
// Add the item
|
// Add the item
|
||||||
parent.children.push(item);
|
parent.children.push(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trigger the observable
|
||||||
|
this._onNavigationItemAdded.next(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update navigation item with the given id
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @param properties
|
||||||
|
*/
|
||||||
|
updateNavigationItem(id, properties): void
|
||||||
|
{
|
||||||
|
// Get the navigation item
|
||||||
|
const navigationItem = this.getNavigationItem(id);
|
||||||
|
|
||||||
|
// If there is no navigation with the give id, return
|
||||||
|
if ( !navigationItem )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Merge the navigation properties
|
||||||
|
_.merge(navigationItem, properties);
|
||||||
|
|
||||||
|
// Trigger the observable
|
||||||
|
this._onNavigationItemUpdated.next(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -346,5 +418,8 @@ export class FuseNavigationService
|
|||||||
|
|
||||||
// Remove the item
|
// Remove the item
|
||||||
parent.splice(parent.indexOf(item), 1);
|
parent.splice(parent.indexOf(item), 1);
|
||||||
|
|
||||||
|
// Trigger the observable
|
||||||
|
this._onNavigationItemRemoved.next(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +1,45 @@
|
|||||||
<ng-container *ngIf="!item.hidden">
|
<ng-container *ngIf="!item.hidden">
|
||||||
|
|
||||||
<!-- normal collapse -->
|
<!-- normal collapsable -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && !item.function"
|
||||||
(click)="toggleOpen($event)" matRipple>
|
(click)="toggleOpen($event)">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.url -->
|
<!-- item.url -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
||||||
(click)="toggleOpen($event)"
|
(click)="toggleOpen($event)"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
||||||
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl -->
|
<!-- item.externalUrl -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
||||||
(click)="toggleOpen($event)"
|
(click)="toggleOpen($event)"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.function -->
|
<!-- item.function -->
|
||||||
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
||||||
(click)="toggleOpen($event);item.function()" matRipple>
|
(click)="toggleOpen($event);item.function()">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- item.url && item.function -->
|
<!-- item.url && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
||||||
(click)="toggleOpen($event);item.function()"
|
(click)="toggleOpen($event);item.function()"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}" matRipple>
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl && item.function -->
|
<!-- item.externalUrl && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
||||||
(click)="toggleOpen($event);item.function()"
|
(click)="toggleOpen($event);item.function()"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';
|
import { ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';
|
||||||
import { NavigationEnd, Router } from '@angular/router';
|
import { NavigationEnd, Router } from '@angular/router';
|
||||||
import { Subject } from 'rxjs';
|
import { merge, Subject } from 'rxjs';
|
||||||
import { filter, takeUntil } from 'rxjs/operators';
|
import { filter, takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
import { FuseNavigationItem } from '@fuse/types';
|
import { FuseNavigationItem } from '@fuse/types';
|
||||||
@@ -30,10 +30,12 @@ export class FuseNavVerticalCollapsableComponent implements OnInit, OnDestroy
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
|
* @param {ChangeDetectorRef} _changeDetectorRef
|
||||||
* @param {FuseNavigationService} _fuseNavigationService
|
* @param {FuseNavigationService} _fuseNavigationService
|
||||||
* @param {Router} _router
|
* @param {Router} _router
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
|
private _changeDetectorRef: ChangeDetectorRef,
|
||||||
private _fuseNavigationService: FuseNavigationService,
|
private _fuseNavigationService: FuseNavigationService,
|
||||||
private _router: Router
|
private _router: Router
|
||||||
)
|
)
|
||||||
@@ -111,6 +113,18 @@ export class FuseNavVerticalCollapsableComponent implements OnInit, OnDestroy
|
|||||||
{
|
{
|
||||||
this.collapse();
|
this.collapse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Subscribe to navigation item
|
||||||
|
merge(
|
||||||
|
this._fuseNavigationService.onNavigationItemAdded,
|
||||||
|
this._fuseNavigationService.onNavigationItemUpdated,
|
||||||
|
this._fuseNavigationService.onNavigationItemRemoved
|
||||||
|
).pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe(() => {
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -154,6 +168,10 @@ export class FuseNavVerticalCollapsableComponent implements OnInit, OnDestroy
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.isOpen = true;
|
this.isOpen = true;
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
|
|
||||||
this._fuseNavigationService.onItemCollapseToggled.next();
|
this._fuseNavigationService.onItemCollapseToggled.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,6 +186,10 @@ export class FuseNavVerticalCollapsableComponent implements OnInit, OnDestroy
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.isOpen = false;
|
this.isOpen = false;
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
|
|
||||||
this._fuseNavigationService.onItemCollapseToggled.next();
|
this._fuseNavigationService.onItemCollapseToggled.next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
import { Component, HostBinding, Input } from '@angular/core';
|
import { ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';
|
||||||
|
import { merge, Subject } from 'rxjs';
|
||||||
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
import { FuseNavigationItem } from '@fuse/types';
|
import { FuseNavigationItem } from '@fuse/types';
|
||||||
|
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-nav-vertical-group',
|
selector : 'fuse-nav-vertical-group',
|
||||||
templateUrl: './group.component.html',
|
templateUrl: './group.component.html',
|
||||||
styleUrls : ['./group.component.scss']
|
styleUrls : ['./group.component.scss']
|
||||||
})
|
})
|
||||||
export class FuseNavVerticalGroupComponent
|
export class FuseNavVerticalGroupComponent implements OnInit, OnDestroy
|
||||||
{
|
{
|
||||||
@HostBinding('class')
|
@HostBinding('class')
|
||||||
classes = 'nav-group nav-item';
|
classes = 'nav-group nav-item';
|
||||||
@@ -15,11 +18,57 @@ export class FuseNavVerticalGroupComponent
|
|||||||
@Input()
|
@Input()
|
||||||
item: FuseNavigationItem;
|
item: FuseNavigationItem;
|
||||||
|
|
||||||
|
// Private
|
||||||
|
private _unsubscribeAll: Subject<any>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
constructor()
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {ChangeDetectorRef} _changeDetectorRef
|
||||||
|
* @param {FuseNavigationService} _fuseNavigationService
|
||||||
|
*/
|
||||||
|
constructor(
|
||||||
|
private _changeDetectorRef: ChangeDetectorRef,
|
||||||
|
private _fuseNavigationService: FuseNavigationService
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
// Set the private defaults
|
||||||
|
this._unsubscribeAll = new Subject();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Lifecycle hooks
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On init
|
||||||
|
*/
|
||||||
|
ngOnInit(): void
|
||||||
|
{
|
||||||
|
// Subscribe to navigation item
|
||||||
|
merge(
|
||||||
|
this._fuseNavigationService.onNavigationItemAdded,
|
||||||
|
this._fuseNavigationService.onNavigationItemUpdated,
|
||||||
|
this._fuseNavigationService.onNavigationItemRemoved
|
||||||
|
).pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe(() => {
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On destroy
|
||||||
|
*/
|
||||||
|
ngOnDestroy(): void
|
||||||
|
{
|
||||||
|
// Unsubscribe from all subscriptions
|
||||||
|
this._unsubscribeAll.next();
|
||||||
|
this._unsubscribeAll.complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,37 +2,37 @@
|
|||||||
|
|
||||||
<!-- item.url -->
|
<!-- item.url -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && !item.function"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
||||||
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl -->
|
<!-- item.externalUrl -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && !item.function"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.function -->
|
<!-- item.function -->
|
||||||
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
<span class="nav-link" [ngClass]="item.classes" *ngIf="!item.url && item.function"
|
||||||
(click)="item.function()" matRipple>
|
(click)="item.function()">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<!-- item.url && item.function -->
|
<!-- item.url && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && !item.externalUrl && item.function"
|
||||||
(click)="item.function()"
|
(click)="item.function()"
|
||||||
[routerLink]="[item.url]" [routerLinkActive]="['active', 'mat-accent-bg']"
|
[routerLink]="[item.url]" [routerLinkActive]="['active', 'accent']"
|
||||||
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
[routerLinkActiveOptions]="{exact: item.exactMatch || false}"
|
||||||
[target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- item.externalUrl && item.function -->
|
<!-- item.externalUrl && item.function -->
|
||||||
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
<a class="nav-link" [ngClass]="item.classes" *ngIf="item.url && item.externalUrl && item.function"
|
||||||
(click)="item.function()"
|
(click)="item.function()"
|
||||||
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'" matRipple>
|
[href]="item.url" [target]="item.openInNewTab ? '_blank' : '_self'">
|
||||||
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
<ng-container *ngTemplateOutlet="itemContent"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
import { Component, HostBinding, Input } from '@angular/core';
|
import { ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit } from '@angular/core';
|
||||||
|
import { merge, Subject } from 'rxjs';
|
||||||
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
import { FuseNavigationItem } from '@fuse/types';
|
import { FuseNavigationItem } from '@fuse/types';
|
||||||
|
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector : 'fuse-nav-vertical-item',
|
selector : 'fuse-nav-vertical-item',
|
||||||
templateUrl: './item.component.html',
|
templateUrl: './item.component.html',
|
||||||
styleUrls : ['./item.component.scss']
|
styleUrls : ['./item.component.scss']
|
||||||
})
|
})
|
||||||
export class FuseNavVerticalItemComponent
|
export class FuseNavVerticalItemComponent implements OnInit, OnDestroy
|
||||||
{
|
{
|
||||||
@HostBinding('class')
|
@HostBinding('class')
|
||||||
classes = 'nav-item';
|
classes = 'nav-item';
|
||||||
@@ -15,10 +18,56 @@ export class FuseNavVerticalItemComponent
|
|||||||
@Input()
|
@Input()
|
||||||
item: FuseNavigationItem;
|
item: FuseNavigationItem;
|
||||||
|
|
||||||
|
// Private
|
||||||
|
private _unsubscribeAll: Subject<any>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
constructor()
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {ChangeDetectorRef} _changeDetectorRef
|
||||||
|
* @param {FuseNavigationService} _fuseNavigationService
|
||||||
|
*/
|
||||||
|
constructor(
|
||||||
|
private _changeDetectorRef: ChangeDetectorRef,
|
||||||
|
private _fuseNavigationService: FuseNavigationService
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
// Set the private defaults
|
||||||
|
this._unsubscribeAll = new Subject();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Lifecycle hooks
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On init
|
||||||
|
*/
|
||||||
|
ngOnInit(): void
|
||||||
|
{
|
||||||
|
// Subscribe to navigation item
|
||||||
|
merge(
|
||||||
|
this._fuseNavigationService.onNavigationItemAdded,
|
||||||
|
this._fuseNavigationService.onNavigationItemUpdated,
|
||||||
|
this._fuseNavigationService.onNavigationItemRemoved
|
||||||
|
).pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe(() => {
|
||||||
|
|
||||||
|
// Mark for check
|
||||||
|
this._changeDetectorRef.markForCheck();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On destroy
|
||||||
|
*/
|
||||||
|
ngOnDestroy(): void
|
||||||
|
{
|
||||||
|
// Unsubscribe from all subscriptions
|
||||||
|
this._unsubscribeAll.next();
|
||||||
|
this._unsubscribeAll.complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<ng-container *ngIf="visible">
|
||||||
|
|
||||||
|
<mat-progress-bar color="accent" [bufferValue]="bufferValue" [mode]="mode" [value]="value"></mat-progress-bar>
|
||||||
|
|
||||||
|
</ng-container>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
@import "src/@fuse/scss/fuse";
|
||||||
|
|
||||||
|
fuse-progress-bar {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 99998;
|
||||||
|
|
||||||
|
mat-progress-bar {
|
||||||
|
|
||||||
|
.mat-progress-bar-buffer {
|
||||||
|
background-color: #C5C6CB !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
93
src/@fuse/components/progress-bar/progress-bar.component.ts
Normal file
93
src/@fuse/components/progress-bar/progress-bar.component.ts
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||||
|
import { Subject } from 'rxjs';
|
||||||
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
|
import { FuseProgressBarService } from '@fuse/components/progress-bar/progress-bar.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector : 'fuse-progress-bar',
|
||||||
|
templateUrl : './progress-bar.component.html',
|
||||||
|
styleUrls : ['./progress-bar.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None
|
||||||
|
})
|
||||||
|
export class FuseProgressBarComponent implements OnInit, OnDestroy
|
||||||
|
{
|
||||||
|
bufferValue: number;
|
||||||
|
mode: 'determinate' | 'indeterminate' | 'buffer' | 'query';
|
||||||
|
value: number;
|
||||||
|
visible: boolean;
|
||||||
|
|
||||||
|
// Private
|
||||||
|
private _unsubscribeAll: Subject<any>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param {FuseProgressBarService} _fuseProgressBarService
|
||||||
|
*/
|
||||||
|
constructor(
|
||||||
|
private _fuseProgressBarService: FuseProgressBarService
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Set the defaults
|
||||||
|
|
||||||
|
// Set the private defaults
|
||||||
|
this._unsubscribeAll = new Subject();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Lifecycle hooks
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On init
|
||||||
|
*/
|
||||||
|
ngOnInit(): void
|
||||||
|
{
|
||||||
|
// Subscribe to the progress bar service properties
|
||||||
|
|
||||||
|
// Buffer value
|
||||||
|
this._fuseProgressBarService.bufferValue
|
||||||
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe((bufferValue) => {
|
||||||
|
this.bufferValue = bufferValue;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Mode
|
||||||
|
this._fuseProgressBarService.mode
|
||||||
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe((mode) => {
|
||||||
|
this.mode = mode;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Value
|
||||||
|
this._fuseProgressBarService.value
|
||||||
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe((value) => {
|
||||||
|
this.value = value;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Visible
|
||||||
|
this._fuseProgressBarService.visible
|
||||||
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
|
.subscribe((visible) => {
|
||||||
|
this.visible = visible;
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On destroy
|
||||||
|
*/
|
||||||
|
ngOnDestroy(): void
|
||||||
|
{
|
||||||
|
// Unsubscribe from all subscriptions
|
||||||
|
this._unsubscribeAll.next();
|
||||||
|
this._unsubscribeAll.complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Public methods
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
}
|
||||||
27
src/@fuse/components/progress-bar/progress-bar.module.ts
Normal file
27
src/@fuse/components/progress-bar/progress-bar.module.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
|
||||||
|
import { MatButtonModule, MatIconModule, MatProgressBarModule } from '@angular/material';
|
||||||
|
|
||||||
|
import { FuseProgressBarComponent } from './progress-bar.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
FuseProgressBarComponent
|
||||||
|
],
|
||||||
|
imports : [
|
||||||
|
CommonModule,
|
||||||
|
RouterModule,
|
||||||
|
|
||||||
|
MatButtonModule,
|
||||||
|
MatIconModule,
|
||||||
|
MatProgressBarModule
|
||||||
|
],
|
||||||
|
exports : [
|
||||||
|
FuseProgressBarComponent
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class FuseProgressBarModule
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -1,14 +1,17 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { NavigationEnd, NavigationStart, Router } from '@angular/router';
|
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
|
||||||
import { BehaviorSubject, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { filter } from 'rxjs/operators';
|
import { filter } from 'rxjs/operators';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class FuseLoadingBarService
|
export class FuseProgressBarService
|
||||||
{
|
{
|
||||||
// Private
|
// Private
|
||||||
|
private _bufferValue: BehaviorSubject<number>;
|
||||||
|
private _mode: BehaviorSubject<string>;
|
||||||
|
private _value: BehaviorSubject<number>;
|
||||||
private _visible: BehaviorSubject<boolean>;
|
private _visible: BehaviorSubject<boolean>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,9 +31,50 @@ export class FuseLoadingBarService
|
|||||||
// @ Accessors
|
// @ Accessors
|
||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Buffer value
|
||||||
|
*/
|
||||||
|
get bufferValue(): Observable<any>
|
||||||
|
{
|
||||||
|
return this._bufferValue.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setBufferValue(value: number): void
|
||||||
|
{
|
||||||
|
this._bufferValue.next(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mode
|
||||||
|
*/
|
||||||
|
get mode(): Observable<any>
|
||||||
|
{
|
||||||
|
return this._mode.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setMode(value: 'determinate' | 'indeterminate' | 'buffer' | 'query'): void
|
||||||
|
{
|
||||||
|
this._mode.next(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value
|
||||||
|
*/
|
||||||
|
get value(): Observable<any>
|
||||||
|
{
|
||||||
|
return this._value.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setValue(value: number): void
|
||||||
|
{
|
||||||
|
this._value.next(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Visible
|
||||||
|
*/
|
||||||
get visible(): Observable<any>
|
get visible(): Observable<any>
|
||||||
{
|
{
|
||||||
// Return the _visible as observable
|
|
||||||
return this._visible.asObservable();
|
return this._visible.asObservable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,24 +89,23 @@ export class FuseLoadingBarService
|
|||||||
*/
|
*/
|
||||||
private _init(): void
|
private _init(): void
|
||||||
{
|
{
|
||||||
// Initialize the behavior subject
|
// Initialize the behavior subjects
|
||||||
|
this._bufferValue = new BehaviorSubject(0);
|
||||||
|
this._mode = new BehaviorSubject('indeterminate');
|
||||||
|
this._value = new BehaviorSubject(0);
|
||||||
this._visible = new BehaviorSubject(false);
|
this._visible = new BehaviorSubject(false);
|
||||||
|
|
||||||
// Subscribe to the router events to show/hide the loading bar
|
// Subscribe to the router events to show/hide the loading bar
|
||||||
this._router.events
|
this._router.events
|
||||||
.pipe(
|
.pipe(filter((event) => event instanceof NavigationStart))
|
||||||
filter((event) => event instanceof NavigationStart)
|
|
||||||
)
|
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
this.showLoadingBar();
|
this.show();
|
||||||
});
|
});
|
||||||
|
|
||||||
this._router.events
|
this._router.events
|
||||||
.pipe(
|
.pipe(filter((event) => event instanceof NavigationEnd || event instanceof NavigationError || event instanceof NavigationCancel))
|
||||||
filter((event) => event instanceof NavigationEnd)
|
|
||||||
)
|
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
this.hideLoadingBar();
|
this.hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,20 +114,18 @@ export class FuseLoadingBarService
|
|||||||
// -----------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the loading bar
|
* Show the progress bar
|
||||||
*/
|
*/
|
||||||
showLoadingBar(): void
|
show(): void
|
||||||
{
|
{
|
||||||
// Show
|
|
||||||
this._visible.next(true);
|
this._visible.next(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hide the loading bar
|
* Hide the progress bar
|
||||||
*/
|
*/
|
||||||
hideLoadingBar(): void
|
hide(): void
|
||||||
{
|
{
|
||||||
// Hide
|
|
||||||
this._visible.next(false);
|
this._visible.next(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,12 @@
|
|||||||
<div class="fuse-search-bar" [ngClass]="{'expanded':!collapsed}">
|
<div class="fuse-search-bar" [ngClass]="{'expanded':!collapsed}">
|
||||||
|
|
||||||
<div class="fuse-search-bar-content" [ngClass]="fuseConfig.layout.toolbar.background">
|
<div class="fuse-search-bar-content">
|
||||||
|
|
||||||
<label for="fuse-search-bar-input">
|
<label for="fuse-search-bar-input">
|
||||||
<button mat-icon-button class="fuse-search-bar-expander" aria-label="Expand Search Bar" (click)="expand()"
|
<button mat-icon-button class="fuse-search-bar-expander" aria-label="Expand Search Bar" (click)="expand()"
|
||||||
*ngIf="collapsed">
|
*ngIf="collapsed">
|
||||||
<mat-icon class="s-24 secondary-text">search</mat-icon>
|
<mat-icon class="s-24 secondary-text">search</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
<!--<span class="fuse-search-bar-loader" fxLayout="row" fxLayoutAlign="center center" *ngIf="!collapsed">
|
|
||||||
<mat-progress-spinner color="mat-accent" mode="indeterminate"></mat-progress-spinner>
|
|
||||||
</span>-->
|
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<input id="fuse-search-bar-input" class="ml-24" type="text" placeholder="Search" (input)="search($event)"
|
<input id="fuse-search-bar-input" class="ml-24" type="text" placeholder="Search" (input)="search($event)"
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
height: 64px;
|
height: 64px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
|
||||||
@include media-breakpoint-down('xs') {
|
@include media-breakpoint('xs') {
|
||||||
height: 56px;
|
height: 56px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
height: 64px !important;
|
height: 64px !important;
|
||||||
line-height: 64px !important;
|
line-height: 64px !important;
|
||||||
|
|
||||||
@include media-breakpoint-down('xs') {
|
@include media-breakpoint('xs') {
|
||||||
height: 56px !important;
|
height: 56px !important;
|
||||||
line-height: 56px !important;
|
line-height: 56px !important;
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
height: 64px !important;
|
height: 64px !important;
|
||||||
line-height: 64px !important;
|
line-height: 64px !important;
|
||||||
|
|
||||||
@include media-breakpoint-down('xs') {
|
@include media-breakpoint('xs') {
|
||||||
height: 56px !important;
|
height: 56px !important;
|
||||||
line-height: 56px !important;
|
line-height: 56px !important;
|
||||||
}
|
}
|
||||||
@@ -53,8 +53,9 @@
|
|||||||
display: none;
|
display: none;
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
min-height: 64px;
|
min-height: 64px;
|
||||||
background-color: transparent;
|
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
background-color: transparent;
|
||||||
|
color: currentColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
11
src/@fuse/components/search-bar/search-bar.theme.scss
Normal file
11
src/@fuse/components/search-bar/search-bar.theme.scss
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
@mixin fuse-search-bar-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
|
||||||
|
.fuse-search-bar {
|
||||||
|
|
||||||
|
&.expanded {
|
||||||
|
background-color: map-get($background, background);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="shortcuts" fxHide fxShow.gt-sm>
|
<div class="shortcuts" fxLayout="row" fxHide fxShow.gt-sm>
|
||||||
|
|
||||||
<div fxLayout="row" fxLayoutAlign="space-between center" fxFlex="0 1 auto">
|
<div fxLayout="row" fxLayoutAlign="space-between center" fxFlex="0 1 auto">
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
:host {
|
:host {
|
||||||
|
|
||||||
@include media-breakpoint-down('sm') {
|
@include media-breakpoint('lt-md') {
|
||||||
|
|
||||||
#fuse-shortcuts {
|
#fuse-shortcuts {
|
||||||
|
|
||||||
@@ -19,6 +19,10 @@
|
|||||||
display: flex !important;
|
display: flex !important;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
|
> div {
|
||||||
|
flex: 1 1 auto !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Component, ElementRef, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';
|
import { Component, ElementRef, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';
|
||||||
import { ObservableMedia } from '@angular/flex-layout';
|
import { MediaObserver } from '@angular/flex-layout';
|
||||||
import { CookieService } from 'ngx-cookie-service';
|
import { CookieService } from 'ngx-cookie-service';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
import { takeUntil } from 'rxjs/operators';
|
import { takeUntil } from 'rxjs/operators';
|
||||||
@@ -35,17 +35,17 @@ export class FuseShortcutsComponent implements OnInit, OnDestroy
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* @param {Renderer2} _renderer
|
|
||||||
* @param {CookieService} _cookieService
|
* @param {CookieService} _cookieService
|
||||||
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
||||||
* @param {FuseNavigationService} _fuseNavigationService
|
* @param {FuseNavigationService} _fuseNavigationService
|
||||||
* @param {ObservableMedia} _observableMedia
|
* @param {MediaObserver} _mediaObserver
|
||||||
|
* @param {Renderer2} _renderer
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
private _cookieService: CookieService,
|
private _cookieService: CookieService,
|
||||||
private _fuseMatchMediaService: FuseMatchMediaService,
|
private _fuseMatchMediaService: FuseMatchMediaService,
|
||||||
private _fuseNavigationService: FuseNavigationService,
|
private _fuseNavigationService: FuseNavigationService,
|
||||||
private _observableMedia: ObservableMedia,
|
private _mediaObserver: MediaObserver,
|
||||||
private _renderer: Renderer2
|
private _renderer: Renderer2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -70,9 +70,7 @@ export class FuseShortcutsComponent implements OnInit, OnDestroy
|
|||||||
// Get the navigation items and flatten them
|
// Get the navigation items and flatten them
|
||||||
this.filteredNavigationItems = this.navigationItems = this._fuseNavigationService.getFlatNavigation(this.navigation);
|
this.filteredNavigationItems = this.navigationItems = this._fuseNavigationService.getFlatNavigation(this.navigation);
|
||||||
|
|
||||||
const cookieExists = this._cookieService.check('FUSE2.shortcuts');
|
if ( this._cookieService.check('FUSE2.shortcuts') )
|
||||||
|
|
||||||
if ( cookieExists )
|
|
||||||
{
|
{
|
||||||
this.shortcutItems = JSON.parse(this._cookieService.get('FUSE2.shortcuts'));
|
this.shortcutItems = JSON.parse(this._cookieService.get('FUSE2.shortcuts'));
|
||||||
}
|
}
|
||||||
@@ -107,10 +105,11 @@ export class FuseShortcutsComponent implements OnInit, OnDestroy
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Subscribe to media changes
|
||||||
this._fuseMatchMediaService.onMediaChange
|
this._fuseMatchMediaService.onMediaChange
|
||||||
.pipe(takeUntil(this._unsubscribeAll))
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
if ( this._observableMedia.isActive('gt-sm') )
|
if ( this._mediaObserver.isActive('gt-sm') )
|
||||||
{
|
{
|
||||||
this.hideMobileShortcutsPanel();
|
this.hideMobileShortcutsPanel();
|
||||||
}
|
}
|
||||||
|
|||||||
11
src/@fuse/components/shortcuts/shortcuts.theme.scss
Normal file
11
src/@fuse/components/shortcuts/shortcuts.theme.scss
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
@mixin fuse-shortcuts-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
|
||||||
|
#fuse-shortcuts {
|
||||||
|
|
||||||
|
&.show-mobile-panel {
|
||||||
|
background-color: map-get($background, background);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,14 +9,14 @@ fuse-sidebar {
|
|||||||
bottom: 0;
|
bottom: 0;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
width: 280px;
|
width: 280px;
|
||||||
min-width: 280px;
|
min-width: 280px;
|
||||||
max-width: 280px;
|
max-width: 280px;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.35);
|
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.35);
|
||||||
background: white;
|
|
||||||
|
|
||||||
@include media-breakpoint-down('xs') {
|
@include media-breakpoint('xs') {
|
||||||
min-width: 0 !important;
|
min-width: 0 !important;
|
||||||
max-width: 80vw !important;
|
max-width: 80vw !important;
|
||||||
width: 80vw !important;
|
width: 80vw !important;
|
||||||
@@ -61,10 +61,5 @@ fuse-sidebar {
|
|||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
background-color: rgba(0, 0, 0, 0.6);
|
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
|
||||||
&.fuse-sidebar-overlay-invisible {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, RendererStyleFlags2, ViewEncapsulation } from '@angular/core';
|
import {
|
||||||
|
ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, ViewEncapsulation
|
||||||
|
} from '@angular/core';
|
||||||
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
|
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
|
||||||
import { ObservableMedia } from '@angular/flex-layout';
|
import { MediaObserver } from '@angular/flex-layout';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
import { takeUntil } from 'rxjs/operators';
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
@@ -85,7 +87,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
|||||||
* @param {FuseConfigService} _fuseConfigService
|
* @param {FuseConfigService} _fuseConfigService
|
||||||
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
||||||
* @param {FuseSidebarService} _fuseSidebarService
|
* @param {FuseSidebarService} _fuseSidebarService
|
||||||
* @param {ObservableMedia} _observableMedia
|
* @param {MediaObserver} _mediaObserver
|
||||||
* @param {Renderer2} _renderer
|
* @param {Renderer2} _renderer
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
@@ -95,7 +97,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
|||||||
private _fuseConfigService: FuseConfigService,
|
private _fuseConfigService: FuseConfigService,
|
||||||
private _fuseMatchMediaService: FuseMatchMediaService,
|
private _fuseMatchMediaService: FuseMatchMediaService,
|
||||||
private _fuseSidebarService: FuseSidebarService,
|
private _fuseSidebarService: FuseSidebarService,
|
||||||
private _observableMedia: ObservableMedia,
|
private _mediaObserver: MediaObserver,
|
||||||
private _renderer: Renderer2
|
private _renderer: Renderer2
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -172,7 +174,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
|||||||
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
|
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
|
||||||
|
|
||||||
// Set the style and class
|
// Set the style and class
|
||||||
this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase);
|
this._renderer.setStyle(sibling, styleRule, styleValue);
|
||||||
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
|
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
|
||||||
}
|
}
|
||||||
// If unfolded...
|
// If unfolded...
|
||||||
@@ -317,7 +319,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
|||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
|
|
||||||
// Get the active status
|
// Get the active status
|
||||||
const isActive = this._observableMedia.isActive(this.lockedOpen);
|
const isActive = this._mediaObserver.isActive(this.lockedOpen);
|
||||||
|
|
||||||
// If the both status are the same, don't act
|
// If the both status are the same, don't act
|
||||||
if ( this._wasActive === isActive )
|
if ( this._wasActive === isActive )
|
||||||
@@ -433,7 +435,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
|
|||||||
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
|
this._renderer.setStyle(this._elementRef.nativeElement, 'max-width', styleValue);
|
||||||
|
|
||||||
// Set the style and class
|
// Set the style and class
|
||||||
this._renderer.setStyle(sibling, styleRule, styleValue, RendererStyleFlags2.Important + RendererStyleFlags2.DashCase);
|
this._renderer.setStyle(sibling, styleRule, styleValue);
|
||||||
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
|
this._renderer.addClass(this._elementRef.nativeElement, 'folded');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
src/@fuse/components/sidebar/sidebar.theme.scss
Normal file
16
src/@fuse/components/sidebar/sidebar.theme.scss
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
@mixin fuse-sidebar-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
|
||||||
|
fuse-sidebar {
|
||||||
|
background: map-get($background, background);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fuse-sidebar-overlay {
|
||||||
|
background-color: rgba(0, 0, 0, 0.6);
|
||||||
|
|
||||||
|
&.fuse-sidebar-overlay-invisible {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,20 @@
|
|||||||
|
|
||||||
<form [formGroup]="form">
|
<form [formGroup]="form">
|
||||||
|
|
||||||
|
<!-- COLOR THEME -->
|
||||||
|
<div class="group">
|
||||||
|
|
||||||
|
<h2>Color themes</h2>
|
||||||
|
|
||||||
|
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="colorTheme">
|
||||||
|
<mat-radio-button class="mb-12" value="theme-default">Default Light</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="theme-yellow-light">Yellow Light</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="theme-blue-gray-dark">Blue-Gray Dark</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="theme-pink-dark">Pink Dark</mat-radio-button>
|
||||||
|
</mat-radio-group>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- LAYOUT STYLES -->
|
<!-- LAYOUT STYLES -->
|
||||||
<div class="group" formGroupName="layout">
|
<div class="group" formGroupName="layout">
|
||||||
|
|
||||||
@@ -79,10 +93,13 @@
|
|||||||
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<h3 class="mt-16 mb-8">Primary background:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.navbar.background">
|
formControlName="primaryBackground"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
<h3 class="mt-16 mb-8">Secondary background:</h3>
|
||||||
|
<fuse-material-color-picker class="mb-16"
|
||||||
|
formControlName="secondaryBackground"></fuse-material-color-picker>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -102,10 +119,13 @@
|
|||||||
<mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button>
|
<mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.toolbar.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -125,10 +145,30 @@
|
|||||||
<mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button>
|
<mat-radio-button class="mb-12" value="below-fixed">Below Fixed</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<h3 class="mt-24 mb-8">Color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.footer.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SIDE PANEL -->
|
||||||
|
<div class="group" formGroupName="sidepanel">
|
||||||
|
|
||||||
|
<h2>Side Panel</h2>
|
||||||
|
|
||||||
|
<mat-slide-toggle formControlName="hidden">
|
||||||
|
Hide
|
||||||
|
</mat-slide-toggle>
|
||||||
|
|
||||||
|
<h3 class="mt-24">Position:</h3>
|
||||||
|
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
|
||||||
|
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
|
||||||
|
</mat-radio-group>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -173,10 +213,13 @@
|
|||||||
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<h3 class="mt-16 mb-8">Primary background:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.navbar.background">
|
formControlName="primaryBackground"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
<h3 class="mt-16 mb-8">Secondary background:</h3>
|
||||||
|
<fuse-material-color-picker class="mb-16"
|
||||||
|
formControlName="secondaryBackground"></fuse-material-color-picker>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -196,10 +239,13 @@
|
|||||||
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
|
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.toolbar.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -219,10 +265,30 @@
|
|||||||
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
|
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.footer.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SIDE PANEL -->
|
||||||
|
<div class="group" formGroupName="sidepanel">
|
||||||
|
|
||||||
|
<h2>Side Panel</h2>
|
||||||
|
|
||||||
|
<mat-slide-toggle formControlName="hidden">
|
||||||
|
Hide
|
||||||
|
</mat-slide-toggle>
|
||||||
|
|
||||||
|
<h3 class="mt-24">Position:</h3>
|
||||||
|
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
|
||||||
|
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
|
||||||
|
</mat-radio-group>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -267,10 +333,13 @@
|
|||||||
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<h3 class="mt-16 mb-8">Primary background:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.navbar.background">
|
formControlName="primaryBackground"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
<h3 class="mt-16 mb-8">Secondary background:</h3>
|
||||||
|
<fuse-material-color-picker class="mb-16"
|
||||||
|
formControlName="secondaryBackground"></fuse-material-color-picker>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -289,10 +358,13 @@
|
|||||||
<mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button>
|
<mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.toolbar.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -311,10 +383,30 @@
|
|||||||
<mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button>
|
<mat-radio-button class="mb-12" value="above-fixed">Above Fixed</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.footer.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SIDE PANEL -->
|
||||||
|
<div class="group" formGroupName="sidepanel">
|
||||||
|
|
||||||
|
<h2>Side Panel</h2>
|
||||||
|
|
||||||
|
<mat-slide-toggle formControlName="hidden">
|
||||||
|
Hide
|
||||||
|
</mat-slide-toggle>
|
||||||
|
|
||||||
|
<h3 class="mt-24">Position:</h3>
|
||||||
|
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
|
||||||
|
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
|
||||||
|
</mat-radio-group>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -354,9 +446,14 @@
|
|||||||
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
<mat-radio-button class="mb-16" value="vertical-style-2">Style 2</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<h3 class="mt-16 mb-8">Primary background:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.navbar.background">
|
formControlName="primaryBackground">
|
||||||
|
</fuse-material-color-picker>
|
||||||
|
|
||||||
|
<h3 class="mt-16 mb-8">Secondary background (Vertical):</h3>
|
||||||
|
<fuse-material-color-picker class="mb-16"
|
||||||
|
formControlName="secondaryBackground">
|
||||||
</fuse-material-color-picker>
|
</fuse-material-color-picker>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -376,10 +473,13 @@
|
|||||||
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
|
<mat-radio-button class="mb-12" value="below">Below</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.toolbar.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -398,10 +498,30 @@
|
|||||||
<mat-radio-button class="mb-12" value="above-static">Above Static</mat-radio-button>
|
<mat-radio-button class="mb-12" value="above-static">Above Static</mat-radio-button>
|
||||||
</mat-radio-group>
|
</mat-radio-group>
|
||||||
|
|
||||||
<h3 class="mt-24 mb-8">Color:</h3>
|
<mat-checkbox class="mt-24" formControlName="customBackgroundColor">
|
||||||
|
Use custom background color
|
||||||
|
</mat-checkbox>
|
||||||
|
|
||||||
|
<h3 class="mt-24 mb-8">Background color:</h3>
|
||||||
<fuse-material-color-picker class="mb-16"
|
<fuse-material-color-picker class="mb-16"
|
||||||
[(selectedClass)]="fuseConfig.layout.footer.background">
|
formControlName="background"></fuse-material-color-picker>
|
||||||
</fuse-material-color-picker>
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- SIDE PANEL -->
|
||||||
|
<div class="group" formGroupName="sidepanel">
|
||||||
|
|
||||||
|
<h2>Side Panel</h2>
|
||||||
|
|
||||||
|
<mat-slide-toggle formControlName="hidden">
|
||||||
|
Hide
|
||||||
|
</mat-slide-toggle>
|
||||||
|
|
||||||
|
<h3 class="mt-24">Position:</h3>
|
||||||
|
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="position">
|
||||||
|
<mat-radio-button class="mb-12" value="left">Left</mat-radio-button>
|
||||||
|
<mat-radio-button class="mb-12" value="right">Right</mat-radio-button>
|
||||||
|
</mat-radio-group>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:host {
|
fuse-theme-options {
|
||||||
display: flex;
|
display: flex;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
padding: 40px 24px 24px 24px;
|
padding: 40px 24px 24px 24px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
padding-left: 4px;
|
padding-left: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,7 +45,6 @@
|
|||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: relative;
|
position: relative;
|
||||||
border: 1px solid rgba(0, 0, 0, 0.12);
|
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
padding: 28px 16px 8px 16px;
|
padding: 28px 16px 8px 16px;
|
||||||
margin: 16px 0;
|
margin: 16px 0;
|
||||||
@@ -56,15 +56,12 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
background: white;
|
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
margin: 24px 0 16px 0;
|
margin: 24px 0 16px 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Component, HostBinding, OnDestroy, OnInit, Renderer2 } from '@angular/core';
|
import { Component, HostBinding, Inject, OnDestroy, OnInit, Renderer2, ViewEncapsulation } from '@angular/core';
|
||||||
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
import { FormBuilder, FormControl, FormGroup } from '@angular/forms';
|
||||||
|
import { DOCUMENT } from '@angular/common';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
import { takeUntil } from 'rxjs/operators';
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
@@ -12,6 +13,7 @@ import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
|
|||||||
selector : 'fuse-theme-options',
|
selector : 'fuse-theme-options',
|
||||||
templateUrl : './theme-options.component.html',
|
templateUrl : './theme-options.component.html',
|
||||||
styleUrls : ['./theme-options.component.scss'],
|
styleUrls : ['./theme-options.component.scss'],
|
||||||
|
encapsulation: ViewEncapsulation.None,
|
||||||
animations : fuseAnimations
|
animations : fuseAnimations
|
||||||
})
|
})
|
||||||
export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
||||||
@@ -28,6 +30,7 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
|
* @param {DOCUMENT} document
|
||||||
* @param {FormBuilder} _formBuilder
|
* @param {FormBuilder} _formBuilder
|
||||||
* @param {FuseConfigService} _fuseConfigService
|
* @param {FuseConfigService} _fuseConfigService
|
||||||
* @param {FuseNavigationService} _fuseNavigationService
|
* @param {FuseNavigationService} _fuseNavigationService
|
||||||
@@ -35,6 +38,7 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
* @param {Renderer2} _renderer
|
* @param {Renderer2} _renderer
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
|
@Inject(DOCUMENT) private document: any,
|
||||||
private _formBuilder: FormBuilder,
|
private _formBuilder: FormBuilder,
|
||||||
private _fuseConfigService: FuseConfigService,
|
private _fuseConfigService: FuseConfigService,
|
||||||
private _fuseNavigationService: FuseNavigationService,
|
private _fuseNavigationService: FuseNavigationService,
|
||||||
@@ -61,11 +65,14 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
// Build the config form
|
// Build the config form
|
||||||
// noinspection TypeScriptValidateTypes
|
// noinspection TypeScriptValidateTypes
|
||||||
this.form = this._formBuilder.group({
|
this.form = this._formBuilder.group({
|
||||||
|
colorTheme : new FormControl(),
|
||||||
|
customScrollbars: new FormControl(),
|
||||||
layout : this._formBuilder.group({
|
layout : this._formBuilder.group({
|
||||||
style : new FormControl(),
|
style : new FormControl(),
|
||||||
width : new FormControl(),
|
width : new FormControl(),
|
||||||
navbar : this._formBuilder.group({
|
navbar : this._formBuilder.group({
|
||||||
background: new FormControl(),
|
primaryBackground : new FormControl(),
|
||||||
|
secondaryBackground: new FormControl(),
|
||||||
folded : new FormControl(),
|
folded : new FormControl(),
|
||||||
hidden : new FormControl(),
|
hidden : new FormControl(),
|
||||||
position : new FormControl(),
|
position : new FormControl(),
|
||||||
@@ -73,16 +80,21 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
}),
|
}),
|
||||||
toolbar : this._formBuilder.group({
|
toolbar : this._formBuilder.group({
|
||||||
background : new FormControl(),
|
background : new FormControl(),
|
||||||
|
customBackgroundColor: new FormControl(),
|
||||||
hidden : new FormControl(),
|
hidden : new FormControl(),
|
||||||
position : new FormControl()
|
position : new FormControl()
|
||||||
}),
|
}),
|
||||||
footer : this._formBuilder.group({
|
footer : this._formBuilder.group({
|
||||||
background : new FormControl(),
|
background : new FormControl(),
|
||||||
|
customBackgroundColor: new FormControl(),
|
||||||
|
hidden : new FormControl(),
|
||||||
|
position : new FormControl()
|
||||||
|
}),
|
||||||
|
sidepanel: this._formBuilder.group({
|
||||||
hidden : new FormControl(),
|
hidden : new FormControl(),
|
||||||
position: new FormControl()
|
position: new FormControl()
|
||||||
})
|
})
|
||||||
}),
|
})
|
||||||
customScrollbars: new FormControl()
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Subscribe to the config changes
|
// Subscribe to the config changes
|
||||||
@@ -106,7 +118,6 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
// Reset the form values based on the
|
// Reset the form values based on the
|
||||||
// selected layout style
|
// selected layout style
|
||||||
this._resetFormValues(value);
|
this._resetFormValues(value);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Subscribe to the form value changes
|
// Subscribe to the form value changes
|
||||||
@@ -175,21 +186,28 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
layout: {
|
layout: {
|
||||||
width : 'fullwidth',
|
width : 'fullwidth',
|
||||||
navbar : {
|
navbar : {
|
||||||
background: 'mat-fuse-dark-700-bg',
|
primaryBackground : 'fuse-navy-700',
|
||||||
|
secondaryBackground: 'fuse-navy-900',
|
||||||
folded : false,
|
folded : false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'left',
|
position : 'left',
|
||||||
variant : 'vertical-style-1'
|
variant : 'vertical-style-1'
|
||||||
},
|
},
|
||||||
toolbar : {
|
toolbar : {
|
||||||
background: 'mat-white-500-bg',
|
background : 'fuse-white-500',
|
||||||
|
customBackgroundColor: false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'below-static'
|
position : 'below-static'
|
||||||
},
|
},
|
||||||
footer : {
|
footer : {
|
||||||
background: 'mat-fuse-dark-900-bg',
|
background : 'fuse-navy-900',
|
||||||
|
customBackgroundColor: true,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'below-static'
|
position : 'below-static'
|
||||||
|
},
|
||||||
|
sidepanel: {
|
||||||
|
hidden : false,
|
||||||
|
position: 'right'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -204,21 +222,28 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
layout: {
|
layout: {
|
||||||
width : 'fullwidth',
|
width : 'fullwidth',
|
||||||
navbar : {
|
navbar : {
|
||||||
background: 'mat-fuse-dark-700-bg',
|
primaryBackground : 'fuse-navy-700',
|
||||||
|
secondaryBackground: 'fuse-navy-900',
|
||||||
folded : false,
|
folded : false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'left',
|
position : 'left',
|
||||||
variant : 'vertical-style-1'
|
variant : 'vertical-style-1'
|
||||||
},
|
},
|
||||||
toolbar : {
|
toolbar : {
|
||||||
background: 'mat-white-500-bg',
|
background : 'fuse-white-500',
|
||||||
|
customBackgroundColor: false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'below'
|
position : 'below'
|
||||||
},
|
},
|
||||||
footer : {
|
footer : {
|
||||||
background: 'mat-fuse-dark-900-bg',
|
background : 'fuse-navy-900',
|
||||||
|
customBackgroundColor: true,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'below'
|
position : 'below'
|
||||||
|
},
|
||||||
|
sidepanel: {
|
||||||
|
hidden : false,
|
||||||
|
position: 'right'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -233,21 +258,28 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
layout: {
|
layout: {
|
||||||
width : 'fullwidth',
|
width : 'fullwidth',
|
||||||
navbar : {
|
navbar : {
|
||||||
background: 'mat-fuse-dark-700-bg',
|
primaryBackground : 'fuse-navy-700',
|
||||||
|
secondaryBackground: 'fuse-navy-900',
|
||||||
folded : false,
|
folded : false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'left',
|
position : 'left',
|
||||||
layout : 'vertical-style-1'
|
layout : 'vertical-style-1'
|
||||||
},
|
},
|
||||||
toolbar : {
|
toolbar : {
|
||||||
background: 'mat-white-500-bg',
|
background : 'fuse-white-500',
|
||||||
|
customBackgroundColor: false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'above-static'
|
position : 'above-static'
|
||||||
},
|
},
|
||||||
footer : {
|
footer : {
|
||||||
background: 'mat-fuse-dark-900-bg',
|
background : 'fuse-navy-900',
|
||||||
|
customBackgroundColor: true,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'above-static'
|
position : 'above-static'
|
||||||
|
},
|
||||||
|
sidepanel: {
|
||||||
|
hidden : false,
|
||||||
|
position: 'right'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -262,21 +294,28 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
layout: {
|
layout: {
|
||||||
width : 'fullwidth',
|
width : 'fullwidth',
|
||||||
navbar : {
|
navbar : {
|
||||||
background: 'mat-fuse-dark-700-bg',
|
primaryBackground : 'fuse-navy-700',
|
||||||
|
secondaryBackground: 'fuse-navy-900',
|
||||||
folded : false,
|
folded : false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'top',
|
position : 'top',
|
||||||
variant : 'vertical-style-1'
|
variant : 'vertical-style-1'
|
||||||
},
|
},
|
||||||
toolbar : {
|
toolbar : {
|
||||||
background: 'mat-white-500-bg',
|
background : 'fuse-white-500',
|
||||||
|
customBackgroundColor: false,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'above'
|
position : 'above'
|
||||||
},
|
},
|
||||||
footer : {
|
footer : {
|
||||||
background: 'mat-fuse-dark-900-bg',
|
background : 'fuse-navy-900',
|
||||||
|
customBackgroundColor: true,
|
||||||
hidden : false,
|
hidden : false,
|
||||||
position : 'above-fixed'
|
position : 'above-fixed'
|
||||||
|
},
|
||||||
|
sidepanel: {
|
||||||
|
hidden : false,
|
||||||
|
position: 'right'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -299,5 +338,4 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||||||
{
|
{
|
||||||
this._fuseSidebarService.getSidebar(key).toggleOpen();
|
this._fuseSidebarService.getSidebar(key).toggleOpen();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,13 @@ import { NgModule } from '@angular/core';
|
|||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||||
import { MatButtonModule, MatDividerModule, MatFormFieldModule, MatIconModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule } from '@angular/material';
|
import {
|
||||||
|
MatButtonModule, MatCheckboxModule, MatDividerModule, MatFormFieldModule, MatIconModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule
|
||||||
|
} from '@angular/material';
|
||||||
|
|
||||||
import { FuseDirectivesModule } from '@fuse/directives/directives';
|
import { FuseDirectivesModule } from '@fuse/directives/directives';
|
||||||
import { FuseSidebarModule } from '@fuse/components/sidebar/sidebar.module';
|
|
||||||
import { FuseMaterialColorPickerModule } from '@fuse/components/material-color-picker/material-color-picker.module';
|
import { FuseMaterialColorPickerModule } from '@fuse/components/material-color-picker/material-color-picker.module';
|
||||||
|
import { FuseSidebarModule } from '@fuse/components/sidebar/sidebar.module';
|
||||||
|
|
||||||
import { FuseThemeOptionsComponent } from '@fuse/components/theme-options/theme-options.component';
|
import { FuseThemeOptionsComponent } from '@fuse/components/theme-options/theme-options.component';
|
||||||
|
|
||||||
@@ -22,6 +24,7 @@ import { FuseThemeOptionsComponent } from '@fuse/components/theme-options/theme-
|
|||||||
FlexLayoutModule,
|
FlexLayoutModule,
|
||||||
|
|
||||||
MatButtonModule,
|
MatButtonModule,
|
||||||
|
MatCheckboxModule,
|
||||||
MatDividerModule,
|
MatDividerModule,
|
||||||
MatFormFieldModule,
|
MatFormFieldModule,
|
||||||
MatIconModule,
|
MatIconModule,
|
||||||
|
|||||||
27
src/@fuse/components/theme-options/theme-options.theme.scss
Normal file
27
src/@fuse/components/theme-options/theme-options.theme.scss
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
@mixin fuse-theme-options-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
fuse-theme-options {
|
||||||
|
|
||||||
|
.theme-options-panel {
|
||||||
|
|
||||||
|
form {
|
||||||
|
|
||||||
|
.group {
|
||||||
|
border: 1px solid map-get($foreground, divider);
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
background: map-get($background, background);
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,11 +20,13 @@ fuse-widget {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
border-radius: 2px;
|
border-radius: 8px;
|
||||||
transition: transform 0.5s ease-out 0s, visibility 0s ease-in 0.2s, opacity 0s ease-in 0.2s;
|
transition: transform 0.5s ease-out 0s, visibility 0s ease-in 0.2s, opacity 0s ease-in 0.2s;
|
||||||
transform: rotateY(0deg);
|
transform: rotateY(0deg);
|
||||||
backface-visibility: hidden;
|
backface-visibility: hidden;
|
||||||
|
border: 1px solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
> .fuse-widget-back {
|
> .fuse-widget-back {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -36,9 +38,11 @@ fuse-widget {
|
|||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
|
border-radius: 8px;
|
||||||
transition: transform 0.5s ease-out 0s, visibility 0s ease-in 0.2s, opacity 0s ease-in 0.2s;
|
transition: transform 0.5s ease-out 0s, visibility 0s ease-in 0.2s, opacity 0s ease-in 0.2s;
|
||||||
transform: rotateY(180deg);
|
transform: rotateY(180deg);
|
||||||
backface-visibility: hidden;
|
backface-visibility: hidden;
|
||||||
|
border: 1px solid;
|
||||||
|
|
||||||
[fuseWidgetToggle] {
|
[fuseWidgetToggle] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|||||||
14
src/@fuse/components/widget/widget.theme.scss
Normal file
14
src/@fuse/components/widget/widget.theme.scss
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
@mixin fuse-widget-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
fuse-widget {
|
||||||
|
|
||||||
|
> .fuse-widget-front,
|
||||||
|
> .fuse-widget-back {
|
||||||
|
background: map-get($background, card);
|
||||||
|
border-color: map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Directive, Input, OnInit, HostListener, OnDestroy, HostBinding } from '@angular/core';
|
import { Directive, Input, OnInit, HostListener, OnDestroy, HostBinding } from '@angular/core';
|
||||||
import { MatSidenav } from '@angular/material';
|
import { MatSidenav } from '@angular/material';
|
||||||
import { ObservableMedia } from '@angular/flex-layout';
|
import { MediaObserver } from '@angular/flex-layout';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
import { takeUntil } from 'rxjs/operators';
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
@@ -15,11 +15,11 @@ export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
|
|||||||
@HostBinding('class.mat-is-locked-open')
|
@HostBinding('class.mat-is-locked-open')
|
||||||
isLockedOpen: boolean;
|
isLockedOpen: boolean;
|
||||||
|
|
||||||
@Input('fuseMatSidenavHelper')
|
@Input()
|
||||||
id: string;
|
fuseMatSidenavHelper: string;
|
||||||
|
|
||||||
@Input('mat-is-locked-open')
|
@Input()
|
||||||
matIsLockedOpenBreakpoint: string;
|
matIsLockedOpen: string;
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
private _unsubscribeAll: Subject<any>;
|
private _unsubscribeAll: Subject<any>;
|
||||||
@@ -30,13 +30,13 @@ export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
|
|||||||
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
||||||
* @param {FuseMatSidenavHelperService} _fuseMatSidenavHelperService
|
* @param {FuseMatSidenavHelperService} _fuseMatSidenavHelperService
|
||||||
* @param {MatSidenav} _matSidenav
|
* @param {MatSidenav} _matSidenav
|
||||||
* @param {ObservableMedia} _observableMedia
|
* @param {MediaObserver} _mediaObserver
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
private _fuseMatchMediaService: FuseMatchMediaService,
|
private _fuseMatchMediaService: FuseMatchMediaService,
|
||||||
private _fuseMatSidenavHelperService: FuseMatSidenavHelperService,
|
private _fuseMatSidenavHelperService: FuseMatSidenavHelperService,
|
||||||
private _matSidenav: MatSidenav,
|
private _matSidenav: MatSidenav,
|
||||||
private _observableMedia: ObservableMedia
|
private _mediaObserver: MediaObserver
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Set the defaults
|
// Set the defaults
|
||||||
@@ -56,9 +56,9 @@ export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
|
|||||||
ngOnInit(): void
|
ngOnInit(): void
|
||||||
{
|
{
|
||||||
// Register the sidenav to the service
|
// Register the sidenav to the service
|
||||||
this._fuseMatSidenavHelperService.setSidenav(this.id, this._matSidenav);
|
this._fuseMatSidenavHelperService.setSidenav(this.fuseMatSidenavHelper, this._matSidenav);
|
||||||
|
|
||||||
if ( this._observableMedia.isActive(this.matIsLockedOpenBreakpoint) )
|
if ( this._mediaObserver.isActive(this.matIsLockedOpen) )
|
||||||
{
|
{
|
||||||
this.isLockedOpen = true;
|
this.isLockedOpen = true;
|
||||||
this._matSidenav.mode = 'side';
|
this._matSidenav.mode = 'side';
|
||||||
@@ -74,7 +74,7 @@ export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
|
|||||||
this._fuseMatchMediaService.onMediaChange
|
this._fuseMatchMediaService.onMediaChange
|
||||||
.pipe(takeUntil(this._unsubscribeAll))
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
if ( this._observableMedia.isActive(this.matIsLockedOpenBreakpoint) )
|
if ( this._mediaObserver.isActive(this.matIsLockedOpen) )
|
||||||
{
|
{
|
||||||
this.isLockedOpen = true;
|
this.isLockedOpen = true;
|
||||||
this._matSidenav.mode = 'side';
|
this._matSidenav.mode = 'side';
|
||||||
@@ -105,8 +105,8 @@ export class FuseMatSidenavHelperDirective implements OnInit, OnDestroy
|
|||||||
})
|
})
|
||||||
export class FuseMatSidenavTogglerDirective
|
export class FuseMatSidenavTogglerDirective
|
||||||
{
|
{
|
||||||
@Input('fuseMatSidenavToggler')
|
@Input()
|
||||||
id;
|
fuseMatSidenavToggler: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@@ -126,8 +126,8 @@ export class FuseMatSidenavTogglerDirective
|
|||||||
* On click
|
* On click
|
||||||
*/
|
*/
|
||||||
@HostListener('click')
|
@HostListener('click')
|
||||||
onClick()
|
onClick(): void
|
||||||
{
|
{
|
||||||
this._fuseMatSidenavHelperService.getSidenav(this.id).toggle();
|
this._fuseMatSidenavHelperService.getSidenav(this.fuseMatSidenavToggler).toggle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
|
|||||||
{
|
{
|
||||||
isInitialized: boolean;
|
isInitialized: boolean;
|
||||||
isMobile: boolean;
|
isMobile: boolean;
|
||||||
ps: PerfectScrollbar;
|
ps: PerfectScrollbar | any;
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
private _enabled: boolean | '';
|
private _enabled: boolean | '';
|
||||||
@@ -200,6 +200,19 @@ export class FusePerfectScrollbarDirective implements AfterViewInit, OnDestroy
|
|||||||
this.ps = new PerfectScrollbar(this.elementRef.nativeElement, {
|
this.ps = new PerfectScrollbar(this.elementRef.nativeElement, {
|
||||||
...this.fusePerfectScrollbarOptions
|
...this.fusePerfectScrollbarOptions
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Unbind 'keydown' events of PerfectScrollbar since it causes an extremely
|
||||||
|
// high CPU usage on Angular Material inputs.
|
||||||
|
// Loop through all the event elements of this PerfectScrollbar instance
|
||||||
|
this.ps.event.eventElements.forEach((eventElement) => {
|
||||||
|
|
||||||
|
// If we hit to the element with a 'keydown' event...
|
||||||
|
if ( typeof eventElement.handlers['keydown'] !== 'undefined' )
|
||||||
|
{
|
||||||
|
// Unbind it
|
||||||
|
eventElement.element.removeEventListener('keydown', eventElement.handlers['keydown'][0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ const black12 = 'rgba(black, 0.12)';
|
|||||||
const white12 = 'rgba(white, 0.12)';
|
const white12 = 'rgba(white, 0.12)';
|
||||||
const black6 = 'rgba(black, 0.06)';
|
const black6 = 'rgba(black, 0.06)';
|
||||||
const white6 = 'rgba(white, 0.06)';
|
const white6 = 'rgba(white, 0.06)';
|
||||||
|
|
||||||
const matColors = {
|
const matColors = {
|
||||||
'red': {
|
'red': {
|
||||||
50 : '#ffebee',
|
50 : '#ffebee',
|
||||||
@@ -635,7 +636,8 @@ const matColors = {
|
|||||||
A700: white87
|
A700: white87
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'fuse-dark': {
|
|
||||||
|
'fuse-navy': {
|
||||||
50 : '#ECECEE',
|
50 : '#ECECEE',
|
||||||
100 : '#C5C6CB',
|
100 : '#C5C6CB',
|
||||||
200 : '#9EA1A9',
|
200 : '#9EA1A9',
|
||||||
@@ -667,13 +669,15 @@ const matColors = {
|
|||||||
A700: white87
|
A700: white87
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
white : {
|
|
||||||
|
'fuse-white': {
|
||||||
500 : 'white',
|
500 : 'white',
|
||||||
contrast: {
|
contrast: {
|
||||||
500: black87
|
500: black87
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
black : {
|
|
||||||
|
'fuse-black': {
|
||||||
500 : 'black',
|
500 : 'black',
|
||||||
contrast: {
|
contrast: {
|
||||||
500: 'white'
|
500: 'white'
|
||||||
@@ -683,7 +687,23 @@ const matColors = {
|
|||||||
|
|
||||||
// tslint:disable-next-line
|
// tslint:disable-next-line
|
||||||
const matPresetColors = [
|
const matPresetColors = [
|
||||||
'#ffebee', '#ffcdd2', '#ef9a9a', '#e57373', '#ef5350', '#f44336', '#e53935', '#d32f2f', '#c62828', '#b71c1c', '#ff8a80', '#ff5252', '#ff1744', '#d50000', '#fce4ec', '#f8bbd0', '#f48fb1', '#f06292', '#ec407a', '#e91e63', '#d81b60', '#c2185b', '#ad1457', '#880e4f', '#ff80ab', '#ff4081', '#f50057', '#c51162', '#f3e5f5', '#e1bee7', '#ce93d8', '#ba68c8', '#ab47bc', '#9c27b0', '#8e24aa', '#7b1fa2', '#6a1b9a', '#4a148c', '#ea80fc', '#e040fb', '#d500f9', '#aa00ff', '#ede7f6', '#d1c4e9', '#b39ddb', '#9575cd', '#7e57c2', '#673ab7', '#5e35b1', '#512da8', '#4527a0', '#311b92', '#b388ff', '#7c4dff', '#651fff', '#6200ea', '#e8eaf6', '#c5cae9', '#9fa8da', '#7986cb', '#5c6bc0', '#3f51b5', '#3949ab', '#303f9f', '#283593', '#1a237e', '#8c9eff', '#536dfe', '#3d5afe', '#304ffe', '#e3f2fd', '#bbdefb', '#90caf9', '#64b5f6', '#42a5f5', '#2196f3', '#1e88e5', '#1976d2', '#1565c0', '#0d47a1', '#82b1ff', '#448aff', '#2979ff', '#2962ff', '#e1f5fe', '#b3e5fc', '#81d4fa', '#4fc3f7', '#29b6f6', '#03a9f4', '#039be5', '#0288d1', '#0277bd', '#01579b', '#80d8ff', '#40c4ff', '#00b0ff', '#0091ea', '#e0f7fa', '#b2ebf2', '#80deea', '#4dd0e1', '#26c6da', '#00bcd4', '#00acc1', '#0097a7', '#00838f', '#006064', '#84ffff', '#18ffff', '#00e5ff', '#00b8d4', '#e0f2f1', '#b2dfdb', '#80cbc4', '#4db6ac', '#26a69a', '#009688', '#00897b', '#00796b', '#00695c', '#004d40', '#a7ffeb', '#64ffda', '#1de9b6', '#00bfa5', '#e8f5e9', '#c8e6c9', '#a5d6a7', '#81c784', '#66bb6a', '#4caf50', '#43a047', '#388e3c', '#2e7d32', '#1b5e20', '#b9f6ca', '#69f0ae', '#00e676', '#00c853', '#f1f8e9', '#dcedc8', '#c5e1a5', '#aed581', '#9ccc65', '#8bc34a', '#7cb342', '#689f38', '#558b2f', '#33691e', '#ccff90', '#b2ff59', '#76ff03', '#64dd17', '#f9fbe7', '#f0f4c3', '#e6ee9c', '#dce775', '#d4e157', '#cddc39', '#c0ca33', '#afb42b', '#9e9d24', '#827717', '#f4ff81', '#eeff41', '#c6ff00', '#aeea00', '#fffde7', '#fff9c4', '#fff59d', '#fff176', '#ffee58', '#ffeb3b', '#fdd835', '#fbc02d', '#f9a825', '#f57f17', '#ffff8d', '#ffff00', '#ffea00', '#ffd600', '#fff8e1', '#ffecb3', '#ffe082', '#ffd54f', '#ffca28', '#ffc107', '#ffb300', '#ffa000', '#ff8f00', '#ff6f00', '#ffe57f', '#ffd740', '#ffc400', '#ffab00', '#fff3e0', '#ffe0b2', '#ffcc80', '#ffb74d', '#ffa726', '#ff9800', '#fb8c00', '#f57c00', '#ef6c00', '#e65100', '#ffd180', '#ffab40', '#ff9100', '#ff6d00', '#fbe9e7', '#ffccbc', '#ffab91', '#ff8a65', '#ff7043', '#ff5722', '#f4511e', '#e64a19', '#d84315', '#bf360c', '#ff9e80', '#ff6e40', '#ff3d00', '#dd2c00', '#efebe9', '#d7ccc8', '#bcaaa4', '#a1887f', '#8d6e63', '#795548', '#6d4c41', '#5d4037', '#4e342e', '#3e2723', '#d7ccc8', '#bcaaa4', '#8d6e63', '#5d4037', '#fafafa', '#f5f5f5', '#eeeeee', '#e0e0e0', '#bdbdbd', '#9e9e9e', '#757575', '#616161', '#424242', '#212121', '#ffffff', '#eeeeee', '#bdbdbd', '#616161', '#eceff1', '#cfd8dc', '#b0bec5', '#90a4ae', '#78909c', '#607d8b', '#546e7a', '#455a64', '#37474f', '#263238', '#cfd8dc', '#b0bec5', '#78909c', '#455a64'
|
'#ffebee', '#ffcdd2', '#ef9a9a', '#e57373', '#ef5350', '#f44336', '#e53935', '#d32f2f', '#c62828', '#b71c1c', '#ff8a80', '#ff5252', '#ff1744', '#d50000', '#fce4ec', '#f8bbd0',
|
||||||
|
'#f48fb1', '#f06292', '#ec407a', '#e91e63', '#d81b60', '#c2185b', '#ad1457', '#880e4f', '#ff80ab', '#ff4081', '#f50057', '#c51162', '#f3e5f5', '#e1bee7', '#ce93d8', '#ba68c8',
|
||||||
|
'#ab47bc', '#9c27b0', '#8e24aa', '#7b1fa2', '#6a1b9a', '#4a148c', '#ea80fc', '#e040fb', '#d500f9', '#aa00ff', '#ede7f6', '#d1c4e9', '#b39ddb', '#9575cd', '#7e57c2', '#673ab7',
|
||||||
|
'#5e35b1', '#512da8', '#4527a0', '#311b92', '#b388ff', '#7c4dff', '#651fff', '#6200ea', '#e8eaf6', '#c5cae9', '#9fa8da', '#7986cb', '#5c6bc0', '#3f51b5', '#3949ab', '#303f9f',
|
||||||
|
'#283593', '#1a237e', '#8c9eff', '#536dfe', '#3d5afe', '#304ffe', '#e3f2fd', '#bbdefb', '#90caf9', '#64b5f6', '#42a5f5', '#2196f3', '#1e88e5', '#1976d2', '#1565c0', '#0d47a1',
|
||||||
|
'#82b1ff', '#448aff', '#2979ff', '#2962ff', '#e1f5fe', '#b3e5fc', '#81d4fa', '#4fc3f7', '#29b6f6', '#03a9f4', '#039be5', '#0288d1', '#0277bd', '#01579b', '#80d8ff', '#40c4ff',
|
||||||
|
'#00b0ff', '#0091ea', '#e0f7fa', '#b2ebf2', '#80deea', '#4dd0e1', '#26c6da', '#00bcd4', '#00acc1', '#0097a7', '#00838f', '#006064', '#84ffff', '#18ffff', '#00e5ff', '#00b8d4',
|
||||||
|
'#e0f2f1', '#b2dfdb', '#80cbc4', '#4db6ac', '#26a69a', '#009688', '#00897b', '#00796b', '#00695c', '#004d40', '#a7ffeb', '#64ffda', '#1de9b6', '#00bfa5', '#e8f5e9', '#c8e6c9',
|
||||||
|
'#a5d6a7', '#81c784', '#66bb6a', '#4caf50', '#43a047', '#388e3c', '#2e7d32', '#1b5e20', '#b9f6ca', '#69f0ae', '#00e676', '#00c853', '#f1f8e9', '#dcedc8', '#c5e1a5', '#aed581',
|
||||||
|
'#9ccc65', '#8bc34a', '#7cb342', '#689f38', '#558b2f', '#33691e', '#ccff90', '#b2ff59', '#76ff03', '#64dd17', '#f9fbe7', '#f0f4c3', '#e6ee9c', '#dce775', '#d4e157', '#cddc39',
|
||||||
|
'#c0ca33', '#afb42b', '#9e9d24', '#827717', '#f4ff81', '#eeff41', '#c6ff00', '#aeea00', '#fffde7', '#fff9c4', '#fff59d', '#fff176', '#ffee58', '#ffeb3b', '#fdd835', '#fbc02d',
|
||||||
|
'#f9a825', '#f57f17', '#ffff8d', '#ffff00', '#ffea00', '#ffd600', '#fff8e1', '#ffecb3', '#ffe082', '#ffd54f', '#ffca28', '#ffc107', '#ffb300', '#ffa000', '#ff8f00', '#ff6f00',
|
||||||
|
'#ffe57f', '#ffd740', '#ffc400', '#ffab00', '#fff3e0', '#ffe0b2', '#ffcc80', '#ffb74d', '#ffa726', '#ff9800', '#fb8c00', '#f57c00', '#ef6c00', '#e65100', '#ffd180', '#ffab40',
|
||||||
|
'#ff9100', '#ff6d00', '#fbe9e7', '#ffccbc', '#ffab91', '#ff8a65', '#ff7043', '#ff5722', '#f4511e', '#e64a19', '#d84315', '#bf360c', '#ff9e80', '#ff6e40', '#ff3d00', '#dd2c00',
|
||||||
|
'#efebe9', '#d7ccc8', '#bcaaa4', '#a1887f', '#8d6e63', '#795548', '#6d4c41', '#5d4037', '#4e342e', '#3e2723', '#d7ccc8', '#bcaaa4', '#8d6e63', '#5d4037', '#fafafa', '#f5f5f5',
|
||||||
|
'#eeeeee', '#e0e0e0', '#bdbdbd', '#9e9e9e', '#757575', '#616161', '#424242', '#212121', '#ffffff', '#eeeeee', '#bdbdbd', '#616161', '#eceff1', '#cfd8dc', '#b0bec5', '#90a4ae',
|
||||||
|
'#78909c', '#607d8b', '#546e7a', '#455a64', '#37474f', '#263238', '#cfd8dc', '#b0bec5', '#78909c', '#455a64'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -693,15 +713,15 @@ const matPresetColors = [
|
|||||||
export class MatColors
|
export class MatColors
|
||||||
{
|
{
|
||||||
public static all = matColors;
|
public static all = matColors;
|
||||||
|
|
||||||
public static presets = matPresetColors;
|
public static presets = matPresetColors;
|
||||||
|
|
||||||
public static getColor(colorName)
|
public static getColor(colorName): any
|
||||||
{
|
{
|
||||||
if ( matColors[colorName] )
|
if ( matColors[colorName] )
|
||||||
{
|
{
|
||||||
return matColors[colorName];
|
return matColors[colorName];
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,21 +10,17 @@
|
|||||||
// Fuse
|
// Fuse
|
||||||
@import "fuse";
|
@import "fuse";
|
||||||
|
|
||||||
|
// Theme
|
||||||
|
@import "theme";
|
||||||
|
|
||||||
// Include core Angular Material styles
|
// Include core Angular Material styles
|
||||||
@include mat-core();
|
@include mat-core();
|
||||||
|
|
||||||
// Setup the typography
|
|
||||||
@include angular-material-typography($typography);
|
|
||||||
|
|
||||||
// Create an Angular Material theme from the $theme map
|
|
||||||
@include angular-material-theme($theme);
|
|
||||||
|
|
||||||
// Partials
|
// Partials
|
||||||
@import "partials/reset";
|
|
||||||
@import "partials/normalize";
|
@import "partials/normalize";
|
||||||
@import "partials/scrollbars";
|
@import "partials/scrollbars";
|
||||||
@import "partials/helpers";
|
@import "partials/helpers";
|
||||||
@import "partials/global";
|
@import "partials/general";
|
||||||
@import "partials/icons";
|
@import "partials/icons";
|
||||||
@import "partials/colors";
|
@import "partials/colors";
|
||||||
@import "partials/material";
|
@import "partials/material";
|
||||||
@@ -35,7 +31,6 @@
|
|||||||
@import "partials/cards";
|
@import "partials/cards";
|
||||||
@import "partials/navigation";
|
@import "partials/navigation";
|
||||||
@import "partials/forms";
|
@import "partials/forms";
|
||||||
@import "partials/toolbar";
|
|
||||||
@import "partials/print";
|
@import "partials/print";
|
||||||
|
|
||||||
// Plugins
|
// Plugins
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// Material theming
|
// Material theming tools
|
||||||
@import "theming";
|
@import '~@angular/material/theming';
|
||||||
|
|
||||||
// Breakpoint mixins
|
// Breakpoint mixins
|
||||||
@import "mixins/breakpoints";
|
@import "partials/breakpoints";
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
// Media step breakpoint mixin based on Angular Material lib
|
|
||||||
$breakpoints: (
|
|
||||||
xs: 'screen and (max-width: 599px)',
|
|
||||||
sm: 'screen and (min-width: 600px) and (max-width: 959px)',
|
|
||||||
md: 'screen and (min-width: 960px) and (max-width: 1279px)',
|
|
||||||
lg: 'screen and (min-width: 1280px) and (max-width: 1919px)',
|
|
||||||
xl: 'screen and (min-width: 1920px) and (max-width: 5000px)',
|
|
||||||
lt-sm: 'screen and (max-width: 599px)',
|
|
||||||
lt-md: 'screen and (max-width: 959px)',
|
|
||||||
lt-lg: 'screen and (max-width: 1279px)',
|
|
||||||
lt-xl: 'screen and (max-width: 1919px)',
|
|
||||||
gt-xs: 'screen and (min-width: 600px)',
|
|
||||||
gt-sm: 'screen and (min-width: 960px)',
|
|
||||||
gt-md: 'screen and (min-width: 1280px)',
|
|
||||||
gt-lg: 'screen and (min-width: 1920px)'
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
$grid-breakpoints: (
|
|
||||||
xs: 0,
|
|
||||||
sm: 600px,
|
|
||||||
md: 960px,
|
|
||||||
lg: 1280px,
|
|
||||||
xl: 1920px
|
|
||||||
) !default;
|
|
||||||
|
|
||||||
@mixin media-breakpoint($breakpointName) {
|
|
||||||
|
|
||||||
$mediaQuery: map_get($breakpoints, $breakpointName);
|
|
||||||
|
|
||||||
@if ($mediaQuery != null) {
|
|
||||||
|
|
||||||
@media #{$mediaQuery} {
|
|
||||||
@content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// >> breakpoint-next(sm)
|
|
||||||
// md
|
|
||||||
// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
||||||
// md
|
|
||||||
// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))
|
|
||||||
// md
|
|
||||||
@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
|
|
||||||
$n: index($breakpoint-names, $name);
|
|
||||||
@return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Minimum breakpoint width. Null for the smallest (first) breakpoint.
|
|
||||||
//
|
|
||||||
// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
||||||
// 576px
|
|
||||||
@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {
|
|
||||||
$min: map-get($breakpoints, $name);
|
|
||||||
@return if($min != 0, $min, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Maximum breakpoint width. Null for the largest (last) breakpoint.
|
|
||||||
// The maximum value is calculated as the minimum of the next one less 0.1.
|
|
||||||
//
|
|
||||||
// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
||||||
// 767px
|
|
||||||
@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
|
|
||||||
$next: breakpoint-next($name, $breakpoints);
|
|
||||||
@return if($next, breakpoint-min($next, $breakpoints) - 1px, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.
|
|
||||||
// Useful for making responsive utilities.
|
|
||||||
//
|
|
||||||
// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
||||||
// "" (Returns a blank string)
|
|
||||||
// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
|
|
||||||
// "-sm"
|
|
||||||
@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {
|
|
||||||
@return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.
|
|
||||||
// Makes the @content apply to the given breakpoint and wider.
|
|
||||||
@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
|
|
||||||
$min: breakpoint-min($name, $breakpoints);
|
|
||||||
@if $min {
|
|
||||||
@media (min-width: $min) {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
} @else {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Media of at most the maximum breakpoint width. No query for the largest breakpoint.
|
|
||||||
// Makes the @content apply to the given breakpoint and narrower.
|
|
||||||
@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {
|
|
||||||
$max: breakpoint-max($name, $breakpoints);
|
|
||||||
@if $max {
|
|
||||||
@media (max-width: $max) {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
} @else {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Media that spans multiple breakpoint widths.
|
|
||||||
// Makes the @content apply between the min and max breakpoints
|
|
||||||
@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {
|
|
||||||
$min: breakpoint-max($lower, $breakpoints);
|
|
||||||
$max: breakpoint-max($upper, $breakpoints);
|
|
||||||
|
|
||||||
@media (min-width: $min) and (max-width: $max) {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Media between the breakpoint's minimum and maximum widths.
|
|
||||||
// No minimum for the smallest breakpoint, and no maximum for the largest one.
|
|
||||||
// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.
|
|
||||||
@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {
|
|
||||||
$min: breakpoint-min($name, $breakpoints);
|
|
||||||
$max: breakpoint-max($name, $breakpoints);
|
|
||||||
|
|
||||||
@media (min-width: $min) and (max-width: $max) {
|
|
||||||
@content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,31 @@
|
|||||||
|
// Fix: "Remove the cdk-global-scrollblock effects from the HTML"
|
||||||
|
// Fuse already blocks the body scroll so it doesn't need this feature. We are disabling it
|
||||||
|
// because on Windows, it causes a scrollbar to show up.
|
||||||
|
html {
|
||||||
|
|
||||||
|
&.cdk-global-scrollblock {
|
||||||
|
position: relative !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix: "Inconsistent button heights due to inconsistent line heights"
|
||||||
|
button {
|
||||||
|
|
||||||
|
.mat-button-wrapper {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-icon {
|
||||||
|
|
||||||
|
// Fix: "Font-weight config affecting the icons"
|
||||||
|
font-weight: 400 !important;
|
||||||
|
|
||||||
|
// Fix: "Inconsistent positioning on custom font icons"
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Fix: "Icon button ripple radius is not correct on Edge & Safari"
|
// Fix: "Icon button ripple radius is not correct on Edge & Safari"
|
||||||
.mat-icon-button {
|
.mat-icon-button {
|
||||||
|
|
||||||
@@ -6,11 +34,12 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix: "Inconsistent font sizes across elements"
|
// Fix: "Smooth scrolling for iOS"
|
||||||
.mat-form-field-wrapper {
|
.mat-dialog-container {
|
||||||
font-size: 16px;
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fix: "Inconsistent font sizes across elements"
|
||||||
.mat-checkbox {
|
.mat-checkbox {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
@@ -29,9 +58,9 @@
|
|||||||
background-color: rgba(0, 0, 0, 0.12);
|
background-color: rgba(0, 0, 0, 0.12);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix: "Some idiots using table-cell and inline-table in mat-select"
|
|
||||||
.mat-form-field {
|
.mat-form-field {
|
||||||
|
|
||||||
|
// Fix: "Table-cell and inline-table in mat-select"
|
||||||
&.mat-form-field-type-mat-select {
|
&.mat-form-field-type-mat-select {
|
||||||
|
|
||||||
.mat-form-field-infix {
|
.mat-form-field-infix {
|
||||||
|
|||||||
38
src/@fuse/scss/partials/_breakpoints.scss
Normal file
38
src/@fuse/scss/partials/_breakpoints.scss
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// Media step breakpoint mixin based on Angular Material lib
|
||||||
|
$breakpoints: (
|
||||||
|
xs: 'screen and (max-width: 599px)',
|
||||||
|
sm: 'screen and (min-width: 600px) and (max-width: 959px)',
|
||||||
|
md: 'screen and (min-width: 960px) and (max-width: 1279px)',
|
||||||
|
lg: 'screen and (min-width: 1280px) and (max-width: 1919px)',
|
||||||
|
xl: 'screen and (min-width: 1920px) and (max-width: 5000px)',
|
||||||
|
lt-sm: 'screen and (max-width: 599px)',
|
||||||
|
lt-md: 'screen and (max-width: 959px)',
|
||||||
|
lt-lg: 'screen and (max-width: 1279px)',
|
||||||
|
lt-xl: 'screen and (max-width: 1919px)',
|
||||||
|
gt-xs: 'screen and (min-width: 600px)',
|
||||||
|
gt-sm: 'screen and (min-width: 960px)',
|
||||||
|
gt-md: 'screen and (min-width: 1280px)',
|
||||||
|
gt-lg: 'screen and (min-width: 1920px)'
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
// Re-map the breakpoints for the helper classes
|
||||||
|
$helper-breakpoints: (
|
||||||
|
xs: null,
|
||||||
|
sm: 'gt-xs',
|
||||||
|
md: 'gt-sm',
|
||||||
|
lg: 'gt-md',
|
||||||
|
xl: 'gt-lg'
|
||||||
|
);
|
||||||
|
|
||||||
|
@mixin media-breakpoint($breakpointName) {
|
||||||
|
|
||||||
|
$mediaQuery: map-get($breakpoints, $breakpointName);
|
||||||
|
|
||||||
|
@if ($mediaQuery == null) {
|
||||||
|
@content
|
||||||
|
} @else {
|
||||||
|
@media #{$mediaQuery} {
|
||||||
|
@content
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,29 @@
|
|||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Theming
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin cards-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
.fuse-card {
|
||||||
|
background: map-get($background, card);
|
||||||
|
border-color: map-get($foreground, divider);
|
||||||
|
|
||||||
|
.card-divider {
|
||||||
|
border-top: 1px solid map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Cards
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.fuse-card {
|
.fuse-card {
|
||||||
max-width: 320px;
|
max-width: 320px;
|
||||||
min-width: 320px;
|
min-width: 320px;
|
||||||
background: white;
|
border-radius: 8px;
|
||||||
border-radius: 2px;
|
border: 1px solid;
|
||||||
@include mat-elevation(2);
|
|
||||||
|
|
||||||
&.variable-width {
|
&.variable-width {
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
@@ -37,13 +57,8 @@
|
|||||||
|
|
||||||
// Divider
|
// Divider
|
||||||
.card-divider {
|
.card-divider {
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.12);
|
|
||||||
margin: 16px;
|
margin: 16px;
|
||||||
|
|
||||||
&.light {
|
|
||||||
border-top-color: rgba(255, 255, 255, 0.12);
|
|
||||||
}
|
|
||||||
|
|
||||||
&.full-width {
|
&.full-width {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,23 +1,52 @@
|
|||||||
.secondary-text,
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Theming
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin colors-theme($theme) {
|
||||||
|
|
||||||
|
$is-dark: map-get($theme, is-dark);
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
// Base colors
|
||||||
|
& {
|
||||||
|
color: map-get($foreground, text);
|
||||||
|
|
||||||
|
// If it's a light theme, use a darker background
|
||||||
|
// color other than the default #fafafa
|
||||||
|
@if ($is-dark) {
|
||||||
|
background: map-get($background, background);
|
||||||
|
} @else {
|
||||||
|
background: #F5F5F5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.secondary-text {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
|
||||||
.icon,
|
.icon,
|
||||||
i {
|
i {
|
||||||
color: rgba(0, 0, 0, 0.54);
|
color: map-get($foreground, icon);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hint-text {
|
||||||
|
color: map-get($foreground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.hint-text,
|
|
||||||
.disabled-text {
|
.disabled-text {
|
||||||
color: rgba(0, 0, 0, 0.38);
|
color: map-get($foreground, disabled-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fade-text,
|
||||||
.divider {
|
.divider {
|
||||||
color: rgba(0, 0, 0, 0.12);
|
color: map-get($foreground, divider);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Material colors map
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Material colors map
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
$matPalettes: (
|
$matPalettes: (
|
||||||
primary: $primary,
|
|
||||||
accent: $accent,
|
|
||||||
warn: $warn,
|
|
||||||
red: $mat-red,
|
red: $mat-red,
|
||||||
pink: $mat-pink,
|
pink: $mat-pink,
|
||||||
purple: $mat-purple,
|
purple: $mat-purple,
|
||||||
@@ -36,17 +65,16 @@ $matPalettes: (
|
|||||||
deep-orange: $mat-deep-orange,
|
deep-orange: $mat-deep-orange,
|
||||||
brown: $mat-brown,
|
brown: $mat-brown,
|
||||||
grey: $mat-grey,
|
grey: $mat-grey,
|
||||||
blue-grey: $mat-blue-grey,
|
blue-grey: $mat-blue-grey
|
||||||
white: $mat-white,
|
|
||||||
black: $mat-black,
|
|
||||||
fuse-dark: $mat-fusedark
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Material color hues list
|
// Material color hues list
|
||||||
$matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A700;
|
$matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A700;
|
||||||
|
|
||||||
// Text color levels generator mixin
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@mixin generateTextColorLevels($classes, $contrast) {
|
// @ Text color levels generator
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin generate-text-color-levels($classes, $contrast) {
|
||||||
|
|
||||||
// If the contrast is dark...
|
// If the contrast is dark...
|
||||||
@if ($contrast == 'dark') {
|
@if ($contrast == 'dark') {
|
||||||
@@ -125,7 +153,10 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin generateMaterialElementColors($classes, $contrast) {
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Material element colors generator
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin generate-material-element-colors($classes, $contrast) {
|
||||||
|
|
||||||
// If the contrast color is light...
|
// If the contrast color is light...
|
||||||
$fuseForeground: (
|
$fuseForeground: (
|
||||||
@@ -150,53 +181,55 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
|
|||||||
|
|
||||||
// Native Input
|
// Native Input
|
||||||
input[type="text"] {
|
input[type="text"] {
|
||||||
color: map_get($fuseForeground, base);
|
color: map-get($fuseForeground, base);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
.mat-form-field-label {
|
.mat-form-field-label {
|
||||||
color: map_get($fuseForeground, hint-text);
|
color: map-get($fuseForeground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-form-field-underline {
|
.mat-form-field-underline {
|
||||||
background-color: map_get($fuseForeground, divider);
|
background-color: map-get($fuseForeground, divider);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Select
|
// Select
|
||||||
.mat-select-trigger,
|
.mat-select-trigger,
|
||||||
.mat-select-arrow {
|
.mat-select-arrow {
|
||||||
color: map_get($fuseForeground, hint-text);
|
color: map-get($fuseForeground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-underline {
|
.mat-select-underline {
|
||||||
background-color: map_get($fuseForeground, divider);
|
background-color: map-get($fuseForeground, divider);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-disabled .mat-select-value,
|
.mat-select-disabled .mat-select-value,
|
||||||
.mat-select-arrow,
|
.mat-select-arrow,
|
||||||
.mat-select-trigger {
|
.mat-select-trigger {
|
||||||
color: map_get($fuseForeground, hint-text);
|
color: map-get($fuseForeground, hint-text);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-content,
|
.mat-select-content,
|
||||||
.mat-select-panel-done-animating {
|
.mat-select-panel-done-animating {
|
||||||
background: map_get($background, card);
|
//background: map-get($background, card);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-select-value {
|
.mat-select-value {
|
||||||
color: map_get($fuseForeground, text);
|
color: map-get($fuseForeground, text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Color classes generator mixin
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@mixin generateColorClasses($colorName, $color, $contrastColor, $hue) {
|
// @ Color classes generator
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin generate-color-classes($colorName, $color, $contrastColor, $hue) {
|
||||||
|
|
||||||
.#{$colorName}#{$hue}-bg {
|
.#{$colorName}#{$hue}-bg {
|
||||||
background-color: $color !important;
|
background-color: $color !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-#{$colorName}#{$hue}-bg {
|
.#{$colorName}#{$hue} {
|
||||||
background-color: $color !important;
|
background-color: $color !important;
|
||||||
color: $contrastColor !important;
|
color: $contrastColor !important;
|
||||||
|
|
||||||
@@ -231,13 +264,10 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin generateFuseColorClasses($primary, $accent, $warn) {
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Fuse color classes
|
||||||
$palettes: (
|
// -----------------------------------------------------------------------------------------------------
|
||||||
primary: $primary,
|
@mixin fuse-color-classes($palettes) {
|
||||||
accent: $accent,
|
|
||||||
warn: $warn
|
|
||||||
);
|
|
||||||
|
|
||||||
// Define contrast lists
|
// Define contrast lists
|
||||||
$light-contrasting-classes: ();
|
$light-contrasting-classes: ();
|
||||||
@@ -258,101 +288,74 @@ $matHues: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200, A400, A70
|
|||||||
@if ($color != null and $contrast != null) {
|
@if ($color != null and $contrast != null) {
|
||||||
|
|
||||||
// Generate color classes
|
// Generate color classes
|
||||||
@include generateColorClasses($paletteName, $color, $contrast, '-#{$hue}');
|
@include generate-color-classes($paletteName, $color, $contrast, '-#{$hue}');
|
||||||
|
|
||||||
// If the contrast color is dark
|
// If the contrast color is dark
|
||||||
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
||||||
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
|
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.#{$paletteName}-#{$hue}'), 'comma');
|
||||||
}
|
}
|
||||||
// if the contrast color is light
|
// if the contrast color is light
|
||||||
@else {
|
@else {
|
||||||
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
|
$light-contrasting-classes: append($light-contrasting-classes, unquote('.#{$paletteName}-#{$hue}'), 'comma');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run the generator one more time for default values (500)
|
// Run the generator one more time for default values (500)
|
||||||
@if ($hue == 500) {
|
// if we are not working with primary, accent or warn palettes
|
||||||
|
@if ($hue == 500 and $paletteName != 'primary' and $paletteName != 'accent' and $paletteName != 'warn') {
|
||||||
|
|
||||||
// Generate color classes
|
// Generate color classes
|
||||||
@include generateColorClasses($paletteName, $color, $contrast, '');
|
@include generate-color-classes($paletteName, $color, $contrast, '');
|
||||||
|
|
||||||
// Add color to the correct list depending on the contrasting color
|
// Add color to the correct list depending on the contrasting color
|
||||||
|
|
||||||
// If the contrast color is dark
|
// If the contrast color is dark
|
||||||
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
||||||
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
|
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.#{$paletteName}'), 'comma');
|
||||||
}
|
}
|
||||||
// if the contrast color is light
|
// if the contrast color is light
|
||||||
@else {
|
@else {
|
||||||
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
|
$light-contrasting-classes: append($light-contrasting-classes, unquote('.#{$paletteName}'), 'comma');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Run the generator again for the selected default hue values for
|
||||||
|
// primary, accent and warn palettes
|
||||||
|
//
|
||||||
|
// We are doing this because the default hue value can be changed
|
||||||
|
// by the user when the Material theme being generated.
|
||||||
|
@if ($paletteName == 'primary' or $paletteName == 'accent' or $paletteName == 'warn') {
|
||||||
|
|
||||||
|
// Get the color and the contrasting color for the selected
|
||||||
|
// default hue
|
||||||
|
$color: map-get($palette, 'default');
|
||||||
|
$contrast: map-get($palette, 'default-contrast');
|
||||||
|
|
||||||
|
// Generate color classes
|
||||||
|
@include generate-color-classes($paletteName, $color, $contrast, '');
|
||||||
|
|
||||||
|
// Add color to the correct list depending on the contrasting color
|
||||||
|
|
||||||
|
// If the contrast color is dark
|
||||||
|
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
||||||
|
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.#{$paletteName}'), 'comma');
|
||||||
|
}
|
||||||
|
// if the contrast color is light
|
||||||
|
@else {
|
||||||
|
$light-contrasting-classes: append($light-contrasting-classes, unquote('.#{$paletteName}'), 'comma');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate contrasting colors
|
// Generate contrasting colors
|
||||||
@include generateTextColorLevels($dark-contrasting-classes, 'dark');
|
@include generate-text-color-levels($dark-contrasting-classes, 'dark');
|
||||||
@include generateTextColorLevels($light-contrasting-classes, 'light');
|
@include generate-text-color-levels($light-contrasting-classes, 'light');
|
||||||
@include generateMaterialElementColors($dark-contrasting-classes, 'dark');
|
@include generate-material-element-colors($dark-contrasting-classes, 'dark');
|
||||||
@include generateMaterialElementColors($light-contrasting-classes, 'light');
|
@include generate-material-element-colors($light-contrasting-classes, 'light');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate the color classes...
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Generate Fuse color classes for default Material palettes
|
||||||
// Define contrast lists
|
// -----------------------------------------------------------------------------------------------------
|
||||||
$light-contrasting-classes: ();
|
@include fuse-color-classes($matPalettes);
|
||||||
$dark-contrasting-classes: ();
|
|
||||||
|
|
||||||
@each $paletteName, $palette in $matPalettes {
|
|
||||||
|
|
||||||
// Get the contrasts map
|
|
||||||
$contrasts: map-get($palette, 'contrast');
|
|
||||||
|
|
||||||
@each $hue in $matHues {
|
|
||||||
|
|
||||||
// Get the color and the contrasting color
|
|
||||||
$color: map-get($palette, $hue);
|
|
||||||
$contrast: map-get($contrasts, $hue);
|
|
||||||
|
|
||||||
@if ($color != null and $contrast != null) {
|
|
||||||
|
|
||||||
// Generate color classes
|
|
||||||
@include generateColorClasses($paletteName, $color, $contrast, '-#{$hue}');
|
|
||||||
|
|
||||||
// Add color to the correct list depending on the contrasting color
|
|
||||||
|
|
||||||
// If the contrast color is dark
|
|
||||||
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
|
||||||
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
|
|
||||||
}
|
|
||||||
// if the contrast color is light
|
|
||||||
@else {
|
|
||||||
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-#{$hue}-bg'), 'comma');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run the generator one more time for default values (500)
|
|
||||||
@if ($hue == 500) {
|
|
||||||
|
|
||||||
// Generate color classes
|
|
||||||
@include generateColorClasses($paletteName, $color, $contrast, '');
|
|
||||||
|
|
||||||
// Add color to the correct list depending on the contrasting color
|
|
||||||
|
|
||||||
// If the contrast color is dark
|
|
||||||
@if (rgba(black, 1) == rgba($contrast, 1)) {
|
|
||||||
$dark-contrasting-classes: append($dark-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
|
|
||||||
}
|
|
||||||
// if the contrast color is light
|
|
||||||
@else {
|
|
||||||
$light-contrasting-classes: append($light-contrasting-classes, unquote('.mat-#{$paletteName}-bg'), 'comma');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate contrasting colors
|
|
||||||
@include generateTextColorLevels($dark-contrasting-classes, 'dark');
|
|
||||||
@include generateTextColorLevels($light-contrasting-classes, 'light');
|
|
||||||
@include generateMaterialElementColors($dark-contrasting-classes, 'dark');
|
|
||||||
@include generateMaterialElementColors($light-contrasting-classes, 'light');
|
|
||||||
|
|||||||
70
src/@fuse/scss/partials/_general.scss
Normal file
70
src/@fuse/scss/partials/_general.scss
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Body scroll lock
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
min-height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Boxed body
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
body {
|
||||||
|
|
||||||
|
// Boxed
|
||||||
|
&.boxed {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
@include mat-elevation(8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------*/
|
||||||
|
/* @ Text rendering & box sizing
|
||||||
|
/*----------------------------------------------------------------*/
|
||||||
|
* {
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
-o-text-rendering: optimizeLegibility;
|
||||||
|
-ms-text-rendering: optimizeLegibility;
|
||||||
|
-moz-text-rendering: optimizeLegibility;
|
||||||
|
-webkit-text-rendering: optimizeLegibility;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
&:before, &:after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove focus outline
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Responsive images
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
height: auto;
|
||||||
|
vertical-align: top;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Input
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
input {
|
||||||
|
border: none;
|
||||||
|
padding: 0 16px;
|
||||||
|
}
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
html,
|
|
||||||
body {
|
|
||||||
display: flex;
|
|
||||||
flex: 1 0 auto;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
max-height: 100%;
|
|
||||||
min-height: 100%;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
background: #F5F5F5;
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// POSITION HELPERS
|
// @ Position helpers
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
@each $breakpoint, $materialBreakpoint in $helper-breakpoints {
|
||||||
|
|
||||||
@include media-breakpoint-up($breakpoint) {
|
@include media-breakpoint($materialBreakpoint) {
|
||||||
|
|
||||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
$infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
|
||||||
|
|
||||||
.position#{$infix}-relative {
|
.position#{$infix}-relative {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -21,14 +21,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ####################################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// ABSOLUTE POSITION ALIGNMENT HELPERS
|
// @ Absolute position alignment helpers
|
||||||
// ####################################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
@each $breakpoint, $materialBreakpoint in $helper-breakpoints {
|
||||||
|
|
||||||
@include media-breakpoint-up($breakpoint) {
|
@include media-breakpoint($materialBreakpoint) {
|
||||||
|
|
||||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
$infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
|
||||||
|
|
||||||
.align#{$infix}-top {
|
.align#{$infix}-top {
|
||||||
top: 0;
|
top: 0;
|
||||||
@@ -48,9 +48,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// SIZE HELPERS
|
// @ Size helpers
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@each $prop, $abbrev in (height: h, width: w) {
|
@each $prop, $abbrev in (height: h, width: w) {
|
||||||
|
|
||||||
@for $index from 0 through 180 {
|
@for $index from 0 through 180 {
|
||||||
@@ -75,14 +75,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// SPACING HELPERS
|
// @ Spacing helpers
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
@each $breakpoint, $materialBreakpoint in $helper-breakpoints {
|
||||||
|
|
||||||
@include media-breakpoint-up($breakpoint) {
|
@include media-breakpoint($materialBreakpoint) {
|
||||||
|
|
||||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
$infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
|
||||||
|
|
||||||
@each $prop, $abbrev in (margin: m, padding: p) {
|
@each $prop, $abbrev in (margin: m, padding: p) {
|
||||||
|
|
||||||
@@ -168,9 +168,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// BORDER HELPERS
|
// @ Border helpers
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
$border-style: 1px solid rgba(0, 0, 0, 0.12);
|
$border-style: 1px solid rgba(0, 0, 0, 0.12);
|
||||||
|
|
||||||
.border,
|
.border,
|
||||||
@@ -199,7 +199,7 @@ $border-style: 1px solid rgba(0, 0, 0, 0.12);
|
|||||||
}
|
}
|
||||||
|
|
||||||
.border-horizontal,
|
.border-horizontal,
|
||||||
.b-x {
|
.bx {
|
||||||
border-left: $border-style;
|
border-left: $border-style;
|
||||||
border-right: $border-style;
|
border-right: $border-style;
|
||||||
}
|
}
|
||||||
@@ -210,9 +210,9 @@ $border-style: 1px solid rgba(0, 0, 0, 0.12);
|
|||||||
border-bottom: $border-style;
|
border-bottom: $border-style;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// BORDER RADIUS HELPERS
|
// @ Border radius helpers
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.border-radius-100 {
|
.border-radius-100 {
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
}
|
}
|
||||||
@@ -233,9 +233,9 @@ $border-style: 1px solid rgba(0, 0, 0, 0.12);
|
|||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
// CURSOR HELPERS
|
// @ Cursor helpers
|
||||||
// ######################
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.cursor-pointer {
|
.cursor-pointer {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ mat-icon {
|
|||||||
min-height: 24px;
|
min-height: 24px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
|
|
||||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
@each $breakpoint, $materialBreakpoint in $helper-breakpoints {
|
||||||
|
|
||||||
@include media-breakpoint-up($breakpoint) {
|
@include media-breakpoint($materialBreakpoint) {
|
||||||
|
|
||||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
$infix: if($materialBreakpoint == null, "", "-#{$breakpoint}");
|
||||||
|
|
||||||
@for $size from 2 through 128 {
|
@for $size from 2 through 128 {
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,169 @@
|
|||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
/* Avatars
|
// @ Theming
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin material-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Avatar
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
.avatar {
|
||||||
|
color: map-get($foreground, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Forms
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
.form-wrapper {
|
||||||
|
background-color: map-get($background, card);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Navigation - Simple
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
.navigation-simple {
|
||||||
|
|
||||||
|
.item {
|
||||||
|
|
||||||
|
&.selected {
|
||||||
|
background-color: map-get($background, hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.subheader {
|
||||||
|
border-top: 1px solid map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Pagination - Simple
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
.simple-pagination {
|
||||||
|
background: map-get($background, card);
|
||||||
|
|
||||||
|
.pagination-item {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: map-get($foreground, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
color: map-get($foreground, disabled-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Price tables
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
.price-tables {
|
||||||
|
|
||||||
|
.price-table {
|
||||||
|
background: map-get($background, card);
|
||||||
|
|
||||||
|
&.style-1 {
|
||||||
|
|
||||||
|
.price {
|
||||||
|
|
||||||
|
.currency {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.period {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.style-2 {
|
||||||
|
|
||||||
|
.price {
|
||||||
|
|
||||||
|
.currency {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.period {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.style-3 {
|
||||||
|
|
||||||
|
.package-type {
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.terms {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.note {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------
|
||||||
|
// @ Table - Simple
|
||||||
|
// -------------------------------------------------------------------------------------------------
|
||||||
|
.simple-table-container {
|
||||||
|
background: map-get($background, card);
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
|
||||||
|
&.simple {
|
||||||
|
|
||||||
|
thead {
|
||||||
|
|
||||||
|
tr {
|
||||||
|
|
||||||
|
th {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
border-bottom: 1px solid map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tbody {
|
||||||
|
|
||||||
|
tr {
|
||||||
|
|
||||||
|
td {
|
||||||
|
border-bottom: 1px solid map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.clickable {
|
||||||
|
|
||||||
|
tbody {
|
||||||
|
|
||||||
|
tr {
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: map-get($background, hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Avatar
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.avatar {
|
.avatar {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
min-width: 40px;
|
min-width: 40px;
|
||||||
@@ -9,9 +172,8 @@
|
|||||||
margin: 0 8px 0 0;
|
margin: 0 8px 0 0;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #FFFFFF;
|
|
||||||
|
|
||||||
&.square {
|
&.square {
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
@@ -58,6 +220,7 @@ mat-icon.status {
|
|||||||
|
|
||||||
&.online {
|
&.online {
|
||||||
color: #4CAF50;
|
color: #4CAF50;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "check_circle";
|
content: "check_circle";
|
||||||
}
|
}
|
||||||
@@ -65,14 +228,15 @@ mat-icon.status {
|
|||||||
|
|
||||||
&.do-not-disturb {
|
&.do-not-disturb {
|
||||||
color: #F44336;
|
color: #F44336;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "do_not_disturb_on";
|
content: "remove_circle_outline";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.away {
|
&.away {
|
||||||
background-color: #FFC107;
|
color: #FFC107;
|
||||||
color: #FFFFFF;
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "access_time";
|
content: "access_time";
|
||||||
}
|
}
|
||||||
@@ -80,18 +244,17 @@ mat-icon.status {
|
|||||||
|
|
||||||
&.offline {
|
&.offline {
|
||||||
color: #646464;
|
color: #646464;
|
||||||
background-color: #FFFFFF;
|
|
||||||
&:before {
|
&:before {
|
||||||
content: "not_interested";
|
content: "not_interested";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
/* Forms
|
// @ Forms
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.form-wrapper {
|
.form-wrapper {
|
||||||
background: #FFFFFF;
|
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
|
|
||||||
.form-title {
|
.form-title {
|
||||||
@@ -100,9 +263,9 @@ mat-icon.status {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
/* Navigation - Simple
|
// @ Navigation - Simple
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.navigation-simple {
|
.navigation-simple {
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
@@ -122,24 +285,15 @@ mat-icon.status {
|
|||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.selected {
|
|
||||||
background-color: rgba(0, 0, 0, 0.06);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.subheader {
|
.subheader {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.12);
|
font-weight: 600;
|
||||||
font-weight: 500;
|
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
|
|
||||||
&.light {
|
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.12);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mat-divider {
|
mat-divider {
|
||||||
@@ -147,16 +301,16 @@ mat-icon.status {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
/* Pagination
|
// @ Pagination - Simple
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.simple-pagination {
|
.simple-pagination {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@include mat-elevation(1);
|
|
||||||
background-color: #FFFFFF;
|
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
|
border-radius: 4px;
|
||||||
|
@include mat-elevation(1);
|
||||||
|
|
||||||
.pagination-item {
|
.pagination-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -168,32 +322,24 @@ mat-icon.status {
|
|||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: rgba(0, 0, 0, 0.87);
|
|
||||||
}
|
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
color: rgba(0, 0, 0, 0.87);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.disabled {
|
&.disabled {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
color: rgba(0, 0, 0, 0.26);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
/* Price Tables
|
// @ Price tables
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.price-tables {
|
.price-tables {
|
||||||
|
|
||||||
.price-table {
|
.price-table {
|
||||||
position: relative;
|
position: relative;
|
||||||
background-color: #FFFFFF;
|
|
||||||
width: 280px;
|
width: 280px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
margin: 12px;
|
margin: 12px;
|
||||||
@@ -217,8 +363,7 @@ mat-icon.status {
|
|||||||
.currency {
|
.currency {
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
@@ -230,7 +375,6 @@ mat-icon.status {
|
|||||||
.period {
|
.period {
|
||||||
padding: 0 0 5px 4px;
|
padding: 0 0 5px 4px;
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,14 +405,14 @@ mat-icon.status {
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
padding: 6px 8px;
|
padding: 6px 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.package-type {
|
.package-type {
|
||||||
padding: 48px 32px 24px 32px;
|
padding: 48px 32px 24px 32px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,8 +422,7 @@ mat-icon.status {
|
|||||||
.currency {
|
.currency {
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
@@ -292,8 +435,7 @@ mat-icon.status {
|
|||||||
.period {
|
.period {
|
||||||
padding: 0 32px;
|
padding: 0 32px;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,8 +470,7 @@ mat-icon.status {
|
|||||||
|
|
||||||
.subtitle {
|
.subtitle {
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
font-weight: 600;
|
||||||
font-weight: 500;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -339,7 +480,7 @@ mat-icon.status {
|
|||||||
.currency {
|
.currency {
|
||||||
padding-right: 4px;
|
padding-right: 4px;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
@@ -357,7 +498,6 @@ mat-icon.status {
|
|||||||
.terms {
|
.terms {
|
||||||
margin: 32px;
|
margin: 32px;
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
|
|
||||||
.term {
|
.term {
|
||||||
padding-bottom: 16px;
|
padding-bottom: 16px;
|
||||||
@@ -375,17 +515,15 @@ mat-icon.status {
|
|||||||
.note {
|
.note {
|
||||||
padding: 8px 32px 16px 32px;
|
padding: 8px 32px 16px 32px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
/* Table - Simple
|
// @ Table - Simple
|
||||||
/*----------------------------------------------------------------*/
|
// -----------------------------------------------------------------------------------------------------
|
||||||
.simple-table-container {
|
.simple-table-container {
|
||||||
background: #FFFFFF;
|
|
||||||
|
|
||||||
.table-title {
|
.table-title {
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
@@ -407,9 +545,7 @@ table {
|
|||||||
|
|
||||||
th {
|
th {
|
||||||
padding: 16px 8px;
|
padding: 16px 8px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
||||||
&:first-child {
|
&:first-child {
|
||||||
@@ -429,7 +565,6 @@ table {
|
|||||||
|
|
||||||
td {
|
td {
|
||||||
padding: 16px 8px;
|
padding: 16px 8px;
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
|
|
||||||
|
|
||||||
&:first-child {
|
&:first-child {
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
@@ -455,10 +590,6 @@ table {
|
|||||||
|
|
||||||
tr {
|
tr {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background: rgba(0, 0, 0, 0.03);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
height: 20px;
|
height: 20px;
|
||||||
padding: 0 7px;
|
padding: 0 7px;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
transition: opacity 0.2s ease-in-out 0.1s;
|
transition: opacity 0.2s ease-in-out 0.1s;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
@@ -64,11 +64,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: map-get($background, hover);
|
background-color: rgba(0, 0, 0, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-ripple-element {
|
.mat-ripple-element {
|
||||||
background-color: map-get($background, hover);
|
background-color: rgba(0, 0, 0, 0.04);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
@@ -85,7 +85,6 @@
|
|||||||
|
|
||||||
.nav-link-icon {
|
.nav-link-icon {
|
||||||
margin-right: 16px;
|
margin-right: 16px;
|
||||||
opacity: 0.7;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-link-icon,
|
.nav-link-icon,
|
||||||
@@ -220,24 +219,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Material style
|
// Material 2 style
|
||||||
&.material {
|
&.material2,
|
||||||
|
.material2 & {
|
||||||
|
|
||||||
.nav-subheader {
|
.nav-subheader {
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.12);
|
height: 40px;
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-group {
|
||||||
|
|
||||||
|
> .group-title {
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
.nav-item {
|
.nav-item {
|
||||||
|
|
||||||
.nav-link {
|
.nav-link {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
padding: 0 16px;
|
padding: 0 12px 0 24px;
|
||||||
margin: 4px 8px;
|
border-radius: 0 20px 20px 0;
|
||||||
border-radius: 4px;
|
margin-right: 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,91 @@
|
|||||||
// Page Layouts
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Theming
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin page-layouts-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
.page-layout {
|
||||||
|
|
||||||
|
// Carded layout
|
||||||
|
&.carded {
|
||||||
|
|
||||||
|
// Fullwidth
|
||||||
|
&.fullwidth {
|
||||||
|
|
||||||
|
> .center {
|
||||||
|
|
||||||
|
> .content-card {
|
||||||
|
background: map-get($background, card);
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
|
||||||
|
> .toolbar {
|
||||||
|
border-bottom-color: map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Left / Right sidebar
|
||||||
|
&.left-sidebar,
|
||||||
|
&.right-sidebar {
|
||||||
|
|
||||||
|
> .center {
|
||||||
|
|
||||||
|
> .content-card {
|
||||||
|
background: map-get($background, card);
|
||||||
|
border-radius: 8px 8px 0 0;
|
||||||
|
|
||||||
|
> .toolbar {
|
||||||
|
border-bottom-color: map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Simple layout
|
||||||
|
&.simple {
|
||||||
|
|
||||||
|
// Left / Right sidebar
|
||||||
|
&.left-sidebar,
|
||||||
|
&.right-sidebar {
|
||||||
|
|
||||||
|
> .center {
|
||||||
|
|
||||||
|
> .content {
|
||||||
|
background: map-get($background, card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inner sidebar
|
||||||
|
&.inner-sidebar {
|
||||||
|
|
||||||
|
> .content {
|
||||||
|
|
||||||
|
> .center {
|
||||||
|
|
||||||
|
> .content {
|
||||||
|
background: map-get($background, card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Page Layouts
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
$carded-header-height: 200px !default;
|
$carded-header-height: 200px !default;
|
||||||
$carded-header-height-sm: 160px !default;
|
|
||||||
$carded-toolbar-height: 64px !default;
|
$carded-toolbar-height: 64px !default;
|
||||||
|
|
||||||
$header-height: 120px !default;
|
$header-height: 120px !default;
|
||||||
$header-height-sm: 100px !default;
|
|
||||||
|
|
||||||
// Calculate toolbarless header height
|
// Calculate toolbar-less carded header height
|
||||||
$carded-header-height-without-toolbar: $carded-header-height - $carded-toolbar-height;
|
$carded-header-height-without-toolbar: $carded-header-height - $carded-toolbar-height;
|
||||||
$carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-toolbar-height;
|
|
||||||
|
|
||||||
.page-layout {
|
.page-layout {
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -30,10 +107,6 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
right: 0;
|
right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
height: $carded-header-height;
|
height: $carded-header-height;
|
||||||
|
|
||||||
@include media-breakpoint-down('sm') {
|
|
||||||
height: $carded-header-height-sm;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fullwidth
|
// Fullwidth
|
||||||
@@ -50,18 +123,13 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
|
height: 100%;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
|
|
||||||
> .header {
|
> .header {
|
||||||
height: $carded-header-height-without-toolbar !important;
|
height: $carded-header-height-without-toolbar !important;
|
||||||
min-height: $carded-header-height-without-toolbar !important;
|
min-height: $carded-header-height-without-toolbar !important;
|
||||||
max-height: $carded-header-height-without-toolbar !important;
|
max-height: $carded-header-height-without-toolbar !important;
|
||||||
|
|
||||||
@include media-breakpoint-down('sm') {
|
|
||||||
height: $carded-header-height-without-toolbar-sm !important;
|
|
||||||
min-height: $carded-header-height-without-toolbar-sm !important;
|
|
||||||
max-height: $carded-header-height-without-toolbar-sm !important;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
> .content-card {
|
> .content-card {
|
||||||
@@ -69,13 +137,13 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@include mat-elevation(7);
|
@include mat-elevation(1);
|
||||||
|
|
||||||
> .toolbar {
|
> .toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
|
border-bottom: 1px solid;
|
||||||
height: $carded-toolbar-height;
|
height: $carded-toolbar-height;
|
||||||
min-height: $carded-toolbar-height;
|
min-height: $carded-toolbar-height;
|
||||||
max-height: $carded-toolbar-height;
|
max-height: $carded-toolbar-height;
|
||||||
@@ -143,8 +211,9 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
|
|
||||||
> .content {
|
> .content {
|
||||||
overflow: auto;
|
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,6 +235,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
|
|
||||||
.tab-content {
|
.tab-content {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,12 +291,6 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
height: $carded-header-height;
|
height: $carded-header-height;
|
||||||
min-height: $carded-header-height;
|
min-height: $carded-header-height;
|
||||||
max-height: $carded-header-height;
|
max-height: $carded-header-height;
|
||||||
|
|
||||||
@include media-breakpoint-down('sm') {
|
|
||||||
height: $carded-header-height-sm;
|
|
||||||
min-height: $carded-header-height-sm;
|
|
||||||
max-height: $carded-header-height-sm;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
@@ -244,6 +308,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
z-index: 3;
|
z-index: 3;
|
||||||
margin-left: 32px;
|
margin-left: 32px;
|
||||||
margin-right: 32px;
|
margin-right: 32px;
|
||||||
|
width: 100%;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
|
||||||
> .header {
|
> .header {
|
||||||
@@ -251,12 +316,6 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
height: $carded-header-height-without-toolbar;
|
height: $carded-header-height-without-toolbar;
|
||||||
min-height: $carded-header-height-without-toolbar;
|
min-height: $carded-header-height-without-toolbar;
|
||||||
max-height: $carded-header-height-without-toolbar;
|
max-height: $carded-header-height-without-toolbar;
|
||||||
|
|
||||||
@include media-breakpoint-down('sm') {
|
|
||||||
height: $carded-header-height-without-toolbar-sm;
|
|
||||||
min-height: $carded-header-height-without-toolbar-sm;
|
|
||||||
max-height: $carded-header-height-without-toolbar-sm;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
> .content-card {
|
> .content-card {
|
||||||
@@ -264,14 +323,14 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@include mat-elevation(7);
|
@include mat-elevation(1);
|
||||||
|
|
||||||
> .toolbar {
|
> .toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
|
border-bottom: 1px solid;
|
||||||
height: $carded-toolbar-height;
|
height: $carded-toolbar-height;
|
||||||
min-height: $carded-toolbar-height;
|
min-height: $carded-toolbar-height;
|
||||||
max-height: $carded-toolbar-height;
|
max-height: $carded-toolbar-height;
|
||||||
@@ -296,7 +355,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
width: calc(100% - 32px);
|
width: calc(100% - 32px);
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
|
||||||
@include media-breakpoint-down('md') {
|
@include media-breakpoint('lt-lg') {
|
||||||
width: calc(100% - 64px);
|
width: calc(100% - 64px);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,6 +405,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
|
|
||||||
.content {
|
.content {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,6 +418,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
> .content {
|
> .content {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -379,6 +440,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
|
|
||||||
.tab-content {
|
.tab-content {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -479,7 +541,8 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
@include mat-elevation(7);
|
width: 100%;
|
||||||
|
@include mat-elevation(1);
|
||||||
|
|
||||||
> .header {
|
> .header {
|
||||||
height: $header-height;
|
height: $header-height;
|
||||||
@@ -500,16 +563,18 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
|
|
||||||
.content {
|
.content {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> .center {
|
> .center {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inner Sidebar
|
// Inner sidebar
|
||||||
&.inner-sidebar {
|
&.inner-sidebar {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -528,12 +593,19 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
|
|
||||||
.content {
|
.content {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
> .center {
|
> .center {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
|
||||||
|
> .content {
|
||||||
|
border-radius: 8px;
|
||||||
|
@include mat-elevation(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -594,7 +666,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
|
|||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@include media-breakpoint-down('xs') {
|
@include media-breakpoint('xs') {
|
||||||
|
|
||||||
// Smaller margins
|
// Smaller margins
|
||||||
&.carded {
|
&.carded {
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
.page-break-before {
|
.page-break-before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
@@ -47,6 +46,13 @@
|
|||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#main,
|
||||||
|
#container-1,
|
||||||
|
#container-2,
|
||||||
|
#container-3 {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
.ps {
|
.ps {
|
||||||
overflow: visible !important;
|
overflow: visible !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,83 +0,0 @@
|
|||||||
/*----------------------------------------------------------------*/
|
|
||||||
/* Reset
|
|
||||||
/*----------------------------------------------------------------*/
|
|
||||||
* {
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
-o-text-rendering: optimizeLegibility;
|
|
||||||
-ms-text-rendering: optimizeLegibility;
|
|
||||||
-moz-text-rendering: optimizeLegibility;
|
|
||||||
-webkit-text-rendering: optimizeLegibility;
|
|
||||||
-webkit-tap-highlight-color: transparent;
|
|
||||||
box-sizing: border-box;
|
|
||||||
|
|
||||||
&:before, &:after {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove focus outline
|
|
||||||
&:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
html, body {
|
|
||||||
margin: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset non angular-material input's default browser/os styles
|
|
||||||
*:not(mat-form-field) {
|
|
||||||
|
|
||||||
> input {
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
> input[type="text"],
|
|
||||||
> input[type="tel"],
|
|
||||||
> input[type="email"],
|
|
||||||
> input[type="search"],
|
|
||||||
> input[type="password"],
|
|
||||||
> input[type="button"],
|
|
||||||
> button,
|
|
||||||
> input[type="submit"],
|
|
||||||
> input[type="image"],
|
|
||||||
> textarea {
|
|
||||||
appearance: none;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*:not(mat-form-field) {
|
|
||||||
|
|
||||||
> input[type="button"],
|
|
||||||
> button,
|
|
||||||
> input[type="submit"] {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
button {
|
|
||||||
border-radius: 0;
|
|
||||||
font-family: inherit;
|
|
||||||
font-size: inherit;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
appearance: none;
|
|
||||||
-moz-appearance: none;
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
max-width: 100%;
|
|
||||||
height: auto;
|
|
||||||
vertical-align: top;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
@@ -12,12 +12,12 @@ body:not(.is-mobile) {
|
|||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
::-webkit-scrollbar-thumb {
|
||||||
border: 2px solid transparent;
|
border: 2px solid transparent;
|
||||||
box-shadow: inset 0 0 0 24px rgba(0, 0, 0, 0.37);
|
box-shadow: inset 0 0 0 12px rgba(0, 0, 0, 0.37);
|
||||||
border-radius: 24px;
|
border-radius: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb:active {
|
::-webkit-scrollbar-thumb:active {
|
||||||
box-shadow: inset 0 0 0 24px rgba(0, 0, 0, 0.54);
|
box-shadow: inset 0 0 0 12px rgba(0, 0, 0, 0.54);
|
||||||
border-radius: 24px;
|
border-radius: 12px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
.toolbar {
|
|
||||||
|
|
||||||
.toolbar-separator {
|
|
||||||
height: 48px;
|
|
||||||
width: 1px;
|
|
||||||
border-right: 1px solid rgba(0, 0, 0, 0.12);
|
|
||||||
margin: 0 12px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,47 @@
|
|||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Theming
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin typography-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$accent: map-get($theme, accent);
|
||||||
|
$is-dark: map-get($theme, is-dark);
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: map-get($accent, default);
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
|
||||||
|
&:not(.highlight) {
|
||||||
|
background-color: map-get($background, app-bar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.changelog {
|
||||||
|
|
||||||
|
.entry {
|
||||||
|
background-color: map-get($background, card);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-boxed {
|
||||||
|
@if ($is-dark) {
|
||||||
|
background-color: rgba(255, 255, 255, 0.12);
|
||||||
|
color: rgba(255, 255, 255, 0.54);
|
||||||
|
} @else {
|
||||||
|
background-color: rgba(0, 0, 0, 0.12);
|
||||||
|
color: rgba(0, 0, 0, 0.54);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Typography
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
html {
|
html {
|
||||||
font-size: 62.5%;
|
font-size: 62.5%;
|
||||||
font-family: 'Roboto', 'Helvetica Neue', 'Arial', sans-serif;
|
font-family: 'Muli', 'Helvetica Neue', 'Arial', sans-serif;
|
||||||
line-height: 1.4 !important;
|
line-height: 1.4 !important;
|
||||||
letter-spacing: -0.1px !important;
|
letter-spacing: -0.1px !important;
|
||||||
}
|
}
|
||||||
@@ -46,10 +87,9 @@ h6, .h6 {
|
|||||||
|
|
||||||
// Links
|
// Links
|
||||||
a {
|
a {
|
||||||
color: mat-color($accent);
|
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
||||||
&:not(.mat-button):not(.mat-raised-button):not(.mat-icon-button) {
|
&:not(.mat-button):not(.mat-raised-button):not(.mat-flat-button):not(.mat-stroked-button):not(.mat-icon-button):not(.mat-fab):not(.mat-mini-fab) {
|
||||||
|
|
||||||
&:hover, &:active {
|
&:hover, &:active {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
@@ -103,11 +143,10 @@ code {
|
|||||||
font-family: 'Monaco', 'Menlo', 'Consolas', 'Ubuntu Mono', monospace;;
|
font-family: 'Monaco', 'Menlo', 'Consolas', 'Ubuntu Mono', monospace;;
|
||||||
|
|
||||||
&:not(.highlight) {
|
&:not(.highlight) {
|
||||||
background: rgba(0, 0, 0, 0.065);
|
|
||||||
color: #106CC8;
|
color: #106CC8;
|
||||||
margin: 0 1px;
|
|
||||||
padding: 2px 3px;
|
padding: 2px 3px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
line-height: 1.7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,6 +276,7 @@ strong {
|
|||||||
line-height: 1.25;
|
line-height: 1.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.line-height-1\.5,
|
||||||
.line-height-1\.50 {
|
.line-height-1\.50 {
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
@@ -245,24 +285,29 @@ strong {
|
|||||||
line-height: 1.75;
|
line-height: 1.75;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Letter spacing helpers
|
||||||
|
.letter-spacing-condensed {
|
||||||
|
letter-spacing: -0.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.letter-spacing-normal {
|
||||||
|
letter-spacing: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.letter-spacing-relaxed {
|
||||||
|
letter-spacing: 0.02em;
|
||||||
|
}
|
||||||
|
|
||||||
// Boxed text
|
// Boxed text
|
||||||
.text-boxed {
|
.text-boxed {
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
margin: 0 8px;
|
margin: 0 8px;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: 500;
|
font-weight: 600;
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
background-color: rgba(0, 0, 0, 0.12);
|
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Boxed text light
|
|
||||||
.text-boxed-light {
|
|
||||||
@extend .text-boxed;
|
|
||||||
background-color: rgba(255, 255, 255, 0.7);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Truncate
|
// Truncate
|
||||||
.text-truncate {
|
.text-truncate {
|
||||||
display: block;
|
display: block;
|
||||||
@@ -280,7 +325,6 @@ strong {
|
|||||||
.changelog {
|
.changelog {
|
||||||
|
|
||||||
.entry {
|
.entry {
|
||||||
background: white;
|
|
||||||
margin-bottom: 24px;
|
margin-bottom: 24px;
|
||||||
padding: 24px 32px;
|
padding: 24px 32px;
|
||||||
@include mat-elevation(2);
|
@include mat-elevation(2);
|
||||||
@@ -355,6 +399,10 @@ strong {
|
|||||||
li {
|
li {
|
||||||
margin-bottom: 6px;
|
margin-bottom: 6px;
|
||||||
letter-spacing: 0.015em;
|
letter-spacing: 0.015em;
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,360 +0,0 @@
|
|||||||
/*@font-face {
|
|
||||||
font-family: 'fontello';
|
|
||||||
src: url('../font/fontello.eot?81091010');
|
|
||||||
src: url('../font/fontello.eot?81091010#iefix') format('embedded-opentype'),
|
|
||||||
url('../font/fontello.woff2?81091010') format('woff2'),
|
|
||||||
url('../font/fontello.woff?81091010') format('woff'),
|
|
||||||
url('../font/fontello.ttf?81091010') format('truetype'),
|
|
||||||
url('../font/fontello.svg?81091010#fontello') format('svg');
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
owl-date-time {
|
|
||||||
|
|
||||||
[class^="icon-"]:before, [class*=" icon-"]:before {
|
|
||||||
font-family: "Material Icons";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
speak: none;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
/* For safety - reset parent styles, that can break glyph codes*/
|
|
||||||
font-variant: normal;
|
|
||||||
text-transform: none;
|
|
||||||
|
|
||||||
/* Font smoothing. That was taken from TWBS */
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-cancel:before {
|
|
||||||
content: 'close';
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-up-open:before {
|
|
||||||
content: 'keyboard_arrow_up';
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-down-open:before {
|
|
||||||
content: 'keyboard_arrow_down';
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-left-open:before {
|
|
||||||
content: 'chevron_left';
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-right-open:before {
|
|
||||||
content: 'chevron_right';
|
|
||||||
}
|
|
||||||
|
|
||||||
$white: #FFFFFF;
|
|
||||||
$black: #000000;
|
|
||||||
$grey: #DDDDDD;
|
|
||||||
$blue: #0070BA;
|
|
||||||
|
|
||||||
.owl-widget,
|
|
||||||
.owl-widget * {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-widget {
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-state-focus {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-corner-all {
|
|
||||||
border-radius: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-corner-top {
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-state-default {
|
|
||||||
background: #FFFFFF;
|
|
||||||
color: rgba(0, 0, 0, 0.87);
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-dateTime-inputWrapper {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: flex-start;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.owl-dateTime-input {
|
|
||||||
background: none !important;
|
|
||||||
padding: 0 !important;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
.owl-inputtext {
|
|
||||||
margin: 0;
|
|
||||||
padding: 8px;
|
|
||||||
background: none !important;
|
|
||||||
color: rgba(0, 0, 0, 0.87);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-dateTime-cancel {
|
|
||||||
position: relative !important;
|
|
||||||
right: 0 !important;
|
|
||||||
top: 0 !important;
|
|
||||||
transform: none !important;
|
|
||||||
font-size: 16px !important;
|
|
||||||
width: 16px !important;
|
|
||||||
height: 16px !important;
|
|
||||||
min-width: 16px !important;
|
|
||||||
min-height: 16px !important;
|
|
||||||
line-height: 16px !important;
|
|
||||||
color: rgba(0, 0, 0, 0.54) !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-dateTime {
|
|
||||||
position: relative;
|
|
||||||
width: 140px;
|
|
||||||
|
|
||||||
&.owl-dateTime-inline {
|
|
||||||
width: auto;
|
|
||||||
|
|
||||||
.owl-dateTime-dialog {
|
|
||||||
position: relative;
|
|
||||||
z-index: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-dateTime-dialog {
|
|
||||||
width: 256px;
|
|
||||||
user-select: none;
|
|
||||||
z-index: 99999;
|
|
||||||
top: 24px !important;
|
|
||||||
right: 0 !important;
|
|
||||||
left: auto !important;
|
|
||||||
@include mat-elevation(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-dateTime-dialogHeader {
|
|
||||||
height: 2.5em;
|
|
||||||
padding: .25em;
|
|
||||||
background-color: rgba(0, 0, 0, .1);
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-calendar-wrapper {
|
|
||||||
padding: 16px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-calendar-control {
|
|
||||||
|
|
||||||
.owl-calendar-controlNav {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
.nav-prev,
|
|
||||||
.nav-next {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
&:before {
|
|
||||||
font-family: "Material Icons";
|
|
||||||
position: relative !important;
|
|
||||||
right: 0 !important;
|
|
||||||
top: 0 !important;
|
|
||||||
transform: none !important;
|
|
||||||
font-size: 20px !important;
|
|
||||||
width: 20px !important;
|
|
||||||
height: 20px !important;
|
|
||||||
min-width: 20px !important;
|
|
||||||
min-height: 20px !important;
|
|
||||||
line-height: 20px !important;
|
|
||||||
content: "chevron_left";
|
|
||||||
color: rgba(0, 0, 0, 0.54);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-next:before {
|
|
||||||
content: "chevron_right";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-calendar-controlContent {
|
|
||||||
|
|
||||||
.month-control,
|
|
||||||
.year-control {
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 500;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.month-control {
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.year-control {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-calendar {
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-spacing: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
tbody td {
|
|
||||||
|
|
||||||
&.owl-calendar-selected {
|
|
||||||
background-color: $blue;
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.owl-calendar-invalid {
|
|
||||||
color: #ACACAC;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.owl-calendar-outFocus {
|
|
||||||
color: $grey;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.owl-calendar-hidden {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover {
|
|
||||||
background-color: lighten($blue, 50%);
|
|
||||||
color: $black;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-years,
|
|
||||||
.owl-months {
|
|
||||||
|
|
||||||
td.owl-year,
|
|
||||||
td.owl-month {
|
|
||||||
padding: 0;
|
|
||||||
font-size: 16px;
|
|
||||||
width: 72px;
|
|
||||||
height: 48px;
|
|
||||||
line-height: 48px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-calendar-yearArrow {
|
|
||||||
width: 24px !important;
|
|
||||||
height: 24px !important;
|
|
||||||
|
|
||||||
&.left {
|
|
||||||
left: -16px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.right {
|
|
||||||
right: -16px !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-weekdays {
|
|
||||||
|
|
||||||
th.owl-weekday {
|
|
||||||
height: 32px;
|
|
||||||
line-height: 32px;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 0;
|
|
||||||
color: rgba(0, 0, 0, 0.37);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-days {
|
|
||||||
|
|
||||||
td.owl-day {
|
|
||||||
height: 32px;
|
|
||||||
width: 32px;
|
|
||||||
line-height: 32px;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 100%;
|
|
||||||
padding: 0;
|
|
||||||
|
|
||||||
&.owl-day-today:before {
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
right: 2px;
|
|
||||||
top: 2px;
|
|
||||||
border-top: .5em solid lighten($blue, 20%);
|
|
||||||
border-left: .5em solid transparent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-timer-wrapper {
|
|
||||||
height: 88px;
|
|
||||||
padding: 8px !important;
|
|
||||||
background-color: rgba(0, 0, 0, 0.06);
|
|
||||||
|
|
||||||
.owl-timer-input {
|
|
||||||
background: none;
|
|
||||||
width: 100% !important;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-timer-text {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
|
||||||
height: 40%;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-meridian-btn {
|
|
||||||
font-size: .8em;
|
|
||||||
color: $blue;
|
|
||||||
background-image: none;
|
|
||||||
background-color: transparent;
|
|
||||||
border-color: $blue;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: $white;
|
|
||||||
background-color: $blue;
|
|
||||||
border-color: $blue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.owl-timer-divider {
|
|
||||||
display: inline-block;
|
|
||||||
position: absolute;
|
|
||||||
width: 8px;
|
|
||||||
height: 100%;
|
|
||||||
left: -2px;
|
|
||||||
|
|
||||||
.owl-timer-dot {
|
|
||||||
display: block;
|
|
||||||
background: rgba(0, 0, 0, 0.37);
|
|
||||||
width: 3px;
|
|
||||||
height: 3px;
|
|
||||||
position: absolute;
|
|
||||||
left: 50%;
|
|
||||||
border-radius: 100%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
|
|
||||||
&.dot-top {
|
|
||||||
top: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.dot-bottom {
|
|
||||||
bottom: 40%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
height: 140px;
|
height: 140px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
|
||||||
> hr {
|
> hr {
|
||||||
display: none;
|
display: none;
|
||||||
|
|||||||
@@ -1,3 +1,76 @@
|
|||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Theming
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
@mixin ngx-datatable-theme($theme) {
|
||||||
|
|
||||||
|
$background: map-get($theme, background);
|
||||||
|
$foreground: map-get($theme, foreground);
|
||||||
|
|
||||||
|
ngx-datatable {
|
||||||
|
|
||||||
|
&.material {
|
||||||
|
background: map-get($background, card);
|
||||||
|
color: map-get($foreground, text);
|
||||||
|
|
||||||
|
.datatable-header {
|
||||||
|
|
||||||
|
.datatable-header-cell {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-body {
|
||||||
|
|
||||||
|
.datatable-row-wrapper {
|
||||||
|
border-bottom-color: map-get($foreground, divider);
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
border-top-color: map-get($foreground, divider);
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-body-row {
|
||||||
|
|
||||||
|
.datatable-body-cell {
|
||||||
|
color: map-get($foreground, text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.datatable-footer {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
|
||||||
|
.datatable-pager {
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: map-get($foreground, secondary-text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.cell-selection) {
|
||||||
|
|
||||||
|
.datatable-body {
|
||||||
|
|
||||||
|
.datatable-row-wrapper {
|
||||||
|
|
||||||
|
.datatable-body-row {
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: map-get($background, hover);
|
||||||
|
|
||||||
|
.datatable-row-group {
|
||||||
|
background-color: map-get($background, hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.ngx-datatable {
|
.ngx-datatable {
|
||||||
|
|
||||||
&.material {
|
&.material {
|
||||||
@@ -22,6 +95,11 @@
|
|||||||
min-height: 48px;
|
min-height: 48px;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
padding: 0 24px;
|
padding: 0 24px;
|
||||||
|
|
||||||
|
.datatable-header-cell-template-wrap {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,12 +120,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.datatable-row-wrapper {
|
.datatable-row-wrapper {
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
|
border-bottom: 1px solid;
|
||||||
|
|
||||||
&:first-child {
|
&:first-child {
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.12);
|
border-top: 1px solid;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-body-cell {
|
.datatable-body-cell {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -100,7 +177,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
[class*="datatable-icon-"] {
|
[class*="datatable-icon-"] {
|
||||||
font-family: 'Material Icons';
|
font-family: 'material-outline-icons';
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
@@ -118,48 +195,63 @@
|
|||||||
.datatable-icon-filter:before {
|
.datatable-icon-filter:before {
|
||||||
content: "filter_list";
|
content: "filter_list";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-collapse:before {
|
.datatable-icon-collapse:before {
|
||||||
content: "unfold_less";
|
content: "unfold_less";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-expand:before {
|
.datatable-icon-expand:before {
|
||||||
content: "unfold_more";
|
content: "unfold_more";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-close:before {
|
.datatable-icon-close:before {
|
||||||
content: "close";
|
content: "close";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-up:before {
|
.datatable-icon-up:before {
|
||||||
content: "keyboard_arrow_up";
|
content: "arrow_drop_up";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-down:before {
|
.datatable-icon-down:before {
|
||||||
content: "keyboard_arrow_down";
|
content: "arrow_drop_down";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-sort:before {
|
.datatable-icon-sort:before {
|
||||||
content: "sort";
|
content: "sort";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-done:before {
|
.datatable-icon-done:before {
|
||||||
content: "done";
|
content: "done";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-done-all:before {
|
.datatable-icon-done-all:before {
|
||||||
content: "done_all";
|
content: "done_all";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-search:before {
|
.datatable-icon-search:before {
|
||||||
content: "search";
|
content: "search";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-pin:before {
|
.datatable-icon-pin:before {
|
||||||
content: "lock";
|
content: "lock";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-add:before {
|
.datatable-icon-add:before {
|
||||||
content: "add";
|
content: "add";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-left:before {
|
.datatable-icon-left:before {
|
||||||
content: "chevron_left";
|
content: "chevron_left";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-right:before {
|
.datatable-icon-right:before {
|
||||||
content: "chevron_right";
|
content: "chevron_right";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-skip:before {
|
.datatable-icon-skip:before {
|
||||||
content: "skip_next";
|
content: "skip_next";
|
||||||
}
|
}
|
||||||
|
|
||||||
.datatable-icon-prev:before {
|
.datatable-icon-prev:before {
|
||||||
content: "skip_previous";
|
content: "skip_previous";
|
||||||
}
|
}
|
||||||
30
src/@fuse/scss/theme.scss
Normal file
30
src/@fuse/scss/theme.scss
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
@import "src/@fuse/components/countdown/countdown.theme";
|
||||||
|
@import "src/@fuse/components/material-color-picker/material-color-picker.theme";
|
||||||
|
@import "src/@fuse/components/search-bar/search-bar.theme";
|
||||||
|
@import "src/@fuse/components/shortcuts/shortcuts.theme";
|
||||||
|
@import "src/@fuse/components/sidebar/sidebar.theme";
|
||||||
|
@import "src/@fuse/components/theme-options/theme-options.theme";
|
||||||
|
@import "src/@fuse/components/widget/widget.theme";
|
||||||
|
|
||||||
|
@mixin fuse-core-theme($theme) {
|
||||||
|
|
||||||
|
// Theming for Fuse core styles
|
||||||
|
@include colors-theme($theme);
|
||||||
|
@include cards-theme($theme);
|
||||||
|
@include material-theme($theme);
|
||||||
|
@include page-layouts-theme($theme);
|
||||||
|
@include typography-theme($theme);
|
||||||
|
|
||||||
|
// Theming for Fuse components
|
||||||
|
@include fuse-countdown-theme($theme);
|
||||||
|
@include fuse-search-bar-theme($theme);
|
||||||
|
@include fuse-shortcuts-theme($theme);
|
||||||
|
@include fuse-sidebar-theme($theme);
|
||||||
|
@include fuse-theme-options-theme($theme);
|
||||||
|
@include fuse-material-color-picker-theme($theme);
|
||||||
|
@include fuse-widget-theme($theme);
|
||||||
|
|
||||||
|
// Theming for 3rd party components
|
||||||
|
@include ngx-datatable-theme($theme);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
@import '~@angular/material/theming';
|
|
||||||
|
|
||||||
// Custom color maps
|
|
||||||
$mat-white: (
|
|
||||||
500: white,
|
|
||||||
contrast: (
|
|
||||||
500: $black-87-opacity
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$mat-black: (
|
|
||||||
500: black,
|
|
||||||
contrast: (
|
|
||||||
500: white,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$mat-fusedark: (
|
|
||||||
50: #ECECEE,
|
|
||||||
100: #C5C6CB,
|
|
||||||
200: #9EA1A9,
|
|
||||||
300: #7D818C,
|
|
||||||
400: #5C616F,
|
|
||||||
500: #3C4252,
|
|
||||||
600: #353A48,
|
|
||||||
700: #2D323E,
|
|
||||||
800: #262933,
|
|
||||||
900: #1E2129,
|
|
||||||
A100: #C5C6CB,
|
|
||||||
A200: #9EA1A9,
|
|
||||||
A400: #5C616F,
|
|
||||||
A700: #2D323E,
|
|
||||||
contrast: (
|
|
||||||
50: $black-87-opacity,
|
|
||||||
100: $black-87-opacity,
|
|
||||||
200: $black-87-opacity,
|
|
||||||
300: white,
|
|
||||||
400: white,
|
|
||||||
500: $white-87-opacity,
|
|
||||||
600: $white-87-opacity,
|
|
||||||
700: $white-87-opacity,
|
|
||||||
800: $white-87-opacity,
|
|
||||||
900: $white-87-opacity,
|
|
||||||
A100: $black-87-opacity,
|
|
||||||
A200: $white-87-opacity,
|
|
||||||
A400: $white-87-opacity,
|
|
||||||
A700: $white-87-opacity,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Define the Material palettes
|
|
||||||
$primary: mat-palette($mat-fusedark);
|
|
||||||
$accent: mat-palette($mat-light-blue, 600, 400, 700);
|
|
||||||
$warn: mat-palette($mat-red);
|
|
||||||
|
|
||||||
// Create the Material theme object
|
|
||||||
$theme: mat-light-theme($primary, $accent, $warn);
|
|
||||||
|
|
||||||
// Store the background and foreground colors for easier access
|
|
||||||
$background: map-get($theme, background);
|
|
||||||
$foreground: map-get($theme, foreground);
|
|
||||||
|
|
||||||
// Force the input field font sizes to 16px
|
|
||||||
$typography: mat-typography-config(
|
|
||||||
$input: mat-typography-level(16px, 1.125, 400)
|
|
||||||
)
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
||||||
import { NavigationStart, Router } from '@angular/router';
|
import { ResolveEnd, Router } from '@angular/router';
|
||||||
import { Platform } from '@angular/cdk/platform';
|
import { Platform } from '@angular/cdk/platform';
|
||||||
import { BehaviorSubject, Observable } from 'rxjs';
|
import { BehaviorSubject, Observable } from 'rxjs';
|
||||||
import { filter } from 'rxjs/operators';
|
import { filter } from 'rxjs/operators';
|
||||||
@@ -93,15 +93,18 @@ export class FuseConfigService
|
|||||||
// Set the config from the default config
|
// Set the config from the default config
|
||||||
this._configSubject = new BehaviorSubject(_.cloneDeep(this._defaultConfig));
|
this._configSubject = new BehaviorSubject(_.cloneDeep(this._defaultConfig));
|
||||||
|
|
||||||
// Reload the default config on every navigation start if
|
// Reload the default layout config on every RoutesRecognized event
|
||||||
// the current config is different from the default one
|
// if the current layout config is different from the default one
|
||||||
this._router.events
|
this._router.events
|
||||||
.pipe(filter(event => event instanceof NavigationStart))
|
.pipe(filter(event => event instanceof ResolveEnd))
|
||||||
.subscribe(() => {
|
.subscribe(() => {
|
||||||
if ( !_.isEqual(this._configSubject.getValue(), this._defaultConfig) )
|
if ( !_.isEqual(this._configSubject.getValue().layout, this._defaultConfig.layout) )
|
||||||
{
|
{
|
||||||
// Clone the default config
|
// Clone the current config
|
||||||
const config = _.cloneDeep(this._defaultConfig);
|
const config = _.cloneDeep(this._configSubject.getValue());
|
||||||
|
|
||||||
|
// Reset the layout from the default config
|
||||||
|
config.layout = _.cloneDeep(this._defaultConfig.layout);
|
||||||
|
|
||||||
// Set the config
|
// Set the config
|
||||||
this._configSubject.next(config);
|
this._configSubject.next(config);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { MediaChange, ObservableMedia } from '@angular/flex-layout';
|
import { MediaChange, MediaObserver } from '@angular/flex-layout';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { BehaviorSubject } from 'rxjs';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
|
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@@ -13,10 +14,10 @@ export class FuseMatchMediaService
|
|||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
*
|
||||||
* @param {ObservableMedia} _observableMedia
|
* @param {MediaObserver} _mediaObserver
|
||||||
*/
|
*/
|
||||||
constructor(
|
constructor(
|
||||||
private _observableMedia: ObservableMedia
|
private _mediaObserver: MediaObserver
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Set the defaults
|
// Set the defaults
|
||||||
@@ -38,7 +39,11 @@ export class FuseMatchMediaService
|
|||||||
*/
|
*/
|
||||||
private _init(): void
|
private _init(): void
|
||||||
{
|
{
|
||||||
this._observableMedia
|
this._mediaObserver.media$
|
||||||
|
.pipe(
|
||||||
|
debounceTime(500),
|
||||||
|
distinctUntilChanged()
|
||||||
|
)
|
||||||
.subscribe((change: MediaChange) => {
|
.subscribe((change: MediaChange) => {
|
||||||
if ( this.activeMediaQuery !== change.mqAlias )
|
if ( this.activeMediaQuery !== change.mqAlias )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import { DOCUMENT } from '@angular/common';
|
|||||||
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
|
import { animate, AnimationBuilder, AnimationPlayer, style } from '@angular/animations';
|
||||||
import { NavigationEnd, Router } from '@angular/router';
|
import { NavigationEnd, Router } from '@angular/router';
|
||||||
|
|
||||||
|
import { filter, take } from 'rxjs/operators';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
@@ -46,19 +48,16 @@ export class FuseSplashScreenService
|
|||||||
if ( this.splashScreenEl )
|
if ( this.splashScreenEl )
|
||||||
{
|
{
|
||||||
// Hide it on the first NavigationEnd event
|
// Hide it on the first NavigationEnd event
|
||||||
const hideOnLoad = this._router.events.subscribe((event) => {
|
this._router.events
|
||||||
if ( event instanceof NavigationEnd )
|
.pipe(
|
||||||
{
|
filter((event => event instanceof NavigationEnd)),
|
||||||
|
take(1)
|
||||||
|
)
|
||||||
|
.subscribe(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.hide();
|
this.hide();
|
||||||
|
});
|
||||||
// Unsubscribe from this event so it
|
});
|
||||||
// won't get triggered again
|
|
||||||
hideOnLoad.unsubscribe();
|
|
||||||
}, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,33 @@
|
|||||||
export interface FuseConfig
|
export interface FuseConfig
|
||||||
{
|
{
|
||||||
|
colorTheme: string;
|
||||||
|
customScrollbars: boolean;
|
||||||
layout: {
|
layout: {
|
||||||
style: string,
|
style: string,
|
||||||
width: 'fullwidth' | 'boxed',
|
width: 'fullwidth' | 'boxed',
|
||||||
navbar: {
|
navbar: {
|
||||||
background: string,
|
primaryBackground: string,
|
||||||
|
secondaryBackground: string,
|
||||||
hidden: boolean,
|
hidden: boolean,
|
||||||
folded: boolean,
|
folded: boolean,
|
||||||
position: 'left' | 'right' | 'top',
|
position: 'left' | 'right' | 'top',
|
||||||
variant: string
|
variant: string
|
||||||
},
|
},
|
||||||
toolbar: {
|
toolbar: {
|
||||||
|
customBackgroundColor: boolean,
|
||||||
background: string,
|
background: string,
|
||||||
hidden: boolean,
|
hidden: boolean,
|
||||||
position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed'
|
position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed'
|
||||||
}
|
}
|
||||||
footer: {
|
footer: {
|
||||||
|
customBackgroundColor: boolean,
|
||||||
background: string,
|
background: string,
|
||||||
hidden: boolean,
|
hidden: boolean,
|
||||||
position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed'
|
position: 'above' | 'above-static' | 'above-fixed' | 'below' | 'below-static' | 'below-fixed'
|
||||||
|
},
|
||||||
|
sidepanel: {
|
||||||
|
hidden: boolean,
|
||||||
|
position: 'left' | 'right'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
customScrollbars: boolean;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,25 +1,35 @@
|
|||||||
|
<!-- PROGRESS BAR -->
|
||||||
|
<fuse-progress-bar></fuse-progress-bar>
|
||||||
|
<!-- / PROGRESS BAR -->
|
||||||
|
|
||||||
<!-- VERTICAL LAYOUT 1 -->
|
<!-- VERTICAL LAYOUT 1 -->
|
||||||
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-1'">
|
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-1'">
|
||||||
<vertical-layout-1></vertical-layout-1>
|
<vertical-layout-1></vertical-layout-1>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<!-- / VERTICAL LAYOUT 1 -->
|
||||||
|
|
||||||
<!-- VERTICAL LAYOUT 2 -->
|
<!-- VERTICAL LAYOUT 2 -->
|
||||||
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-2'">
|
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-2'">
|
||||||
<vertical-layout-2></vertical-layout-2>
|
<vertical-layout-2></vertical-layout-2>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<!-- / VERTICAL LAYOUT 2 -->
|
||||||
|
|
||||||
<!-- VERTICAL LAYOUT 3 -->
|
<!-- VERTICAL LAYOUT 3 -->
|
||||||
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-3'">
|
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-3'">
|
||||||
<vertical-layout-3></vertical-layout-3>
|
<vertical-layout-3></vertical-layout-3>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<!-- / VERTICAL LAYOUT 3 -->
|
||||||
|
|
||||||
<!-- HORIZONTAL LAYOUT 1 -->
|
<!-- HORIZONTAL LAYOUT 1 -->
|
||||||
<ng-container *ngIf="fuseConfig.layout.style === 'horizontal-layout-1'">
|
<ng-container *ngIf="fuseConfig.layout.style === 'horizontal-layout-1'">
|
||||||
<horizontal-layout-1></horizontal-layout-1>
|
<horizontal-layout-1></horizontal-layout-1>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<!-- / HORIZONTAL LAYOUT 1 -->
|
||||||
|
|
||||||
<!-- THEME OPTIONS PANEL -->
|
<!-- THEME OPTIONS PANEL -->
|
||||||
<button mat-icon-button class="mat-primary-bg mat-elevation-z2 theme-options-button"
|
<button mat-icon-button class="warn mat-elevation-z2 theme-options-button"
|
||||||
|
[ngClass]="{'right-side-panel': fuseConfig.layout.sidepanel.position === 'right',
|
||||||
|
'side-panel-hidden': fuseConfig.layout.sidepanel.hidden === true}"
|
||||||
(click)="toggleSidebarOpen('themeOptionsPanel')">
|
(click)="toggleSidebarOpen('themeOptionsPanel')">
|
||||||
<mat-icon>settings</mat-icon>
|
<mat-icon>settings</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
@@ -27,3 +37,4 @@
|
|||||||
<fuse-sidebar name="themeOptionsPanel" class="theme-options-sidebar" position="right" [invisibleOverlay]="true">
|
<fuse-sidebar name="themeOptionsPanel" class="theme-options-sidebar" position="right" [invisibleOverlay]="true">
|
||||||
<fuse-theme-options></fuse-theme-options>
|
<fuse-theme-options></fuse-theme-options>
|
||||||
</fuse-sidebar>
|
</fuse-sidebar>
|
||||||
|
<!-- / THEME OPTIONS PANEL -->
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
.theme-options-button {
|
.theme-options-button {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 160px;
|
top: 160px;
|
||||||
right: 70px;
|
right: 0;
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
line-height: 48px;
|
line-height: 48px;
|
||||||
@@ -23,8 +23,15 @@
|
|||||||
opacity: .90;
|
opacity: .90;
|
||||||
z-index: 998;
|
z-index: 998;
|
||||||
|
|
||||||
@include media-breakpoint-down('md') {
|
&.right-side-panel {
|
||||||
right: 0;
|
|
||||||
|
@include media-breakpoint('gt-md') {
|
||||||
|
right: 70px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.side-panel-hidden {
|
||||||
|
right: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
mat-icon {
|
mat-icon {
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ import { locale as navigationTurkish } from 'app/navigation/i18n/tr';
|
|||||||
})
|
})
|
||||||
export class AppComponent implements OnInit, OnDestroy
|
export class AppComponent implements OnInit, OnDestroy
|
||||||
{
|
{
|
||||||
navigation: any;
|
|
||||||
fuseConfig: any;
|
fuseConfig: any;
|
||||||
|
navigation: any;
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
private _unsubscribeAll: Subject<any>;
|
private _unsubscribeAll: Subject<any>;
|
||||||
@@ -72,10 +72,43 @@ export class AppComponent implements OnInit, OnDestroy
|
|||||||
// Use a language
|
// Use a language
|
||||||
this._translateService.use('en');
|
this._translateService.use('en');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ----------------------------------------------------------------------------------------------------
|
||||||
|
* ngxTranslate Fix Start
|
||||||
|
* ----------------------------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you are using a language other than the default one, i.e. Turkish in this case,
|
||||||
|
* you may encounter an issue where some of the components are not actually being
|
||||||
|
* translated when your app first initialized.
|
||||||
|
*
|
||||||
|
* This is related to ngxTranslate module and below there is a temporary fix while we
|
||||||
|
* are moving the multi language implementation over to the Angular's core language
|
||||||
|
* service.
|
||||||
|
**/
|
||||||
|
|
||||||
|
// Set the default language to 'en' and then back to 'tr'.
|
||||||
|
// '.use' cannot be used here as ngxTranslate won't switch to a language that's already
|
||||||
|
// been selected and there is no way to force it, so we overcome the issue by switching
|
||||||
|
// the default language back and forth.
|
||||||
|
/**
|
||||||
|
setTimeout(() => {
|
||||||
|
this._translateService.setDefaultLang('en');
|
||||||
|
this._translateService.setDefaultLang('tr');
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ----------------------------------------------------------------------------------------------------
|
||||||
|
* ngxTranslate Fix End
|
||||||
|
* ----------------------------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
// Add is-mobile class to the body if the platform is mobile
|
// Add is-mobile class to the body if the platform is mobile
|
||||||
if ( this._platform.ANDROID || this._platform.IOS )
|
if ( this._platform.ANDROID || this._platform.IOS )
|
||||||
{
|
{
|
||||||
this.document.body.className += ' is-mobile';
|
this.document.body.classList.add('is-mobile');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the private defaults
|
// Set the private defaults
|
||||||
@@ -95,7 +128,31 @@ export class AppComponent implements OnInit, OnDestroy
|
|||||||
this._fuseConfigService.config
|
this._fuseConfigService.config
|
||||||
.pipe(takeUntil(this._unsubscribeAll))
|
.pipe(takeUntil(this._unsubscribeAll))
|
||||||
.subscribe((config) => {
|
.subscribe((config) => {
|
||||||
|
|
||||||
this.fuseConfig = config;
|
this.fuseConfig = config;
|
||||||
|
|
||||||
|
// Boxed
|
||||||
|
if ( this.fuseConfig.layout.width === 'boxed' )
|
||||||
|
{
|
||||||
|
this.document.body.classList.add('boxed');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.document.body.classList.remove('boxed');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color theme - Use normal for loop for IE11 compatibility
|
||||||
|
for ( let i = 0; i < this.document.body.classList.length; i++ )
|
||||||
|
{
|
||||||
|
const className = this.document.body.classList[i];
|
||||||
|
|
||||||
|
if ( className.startsWith('theme-') )
|
||||||
|
{
|
||||||
|
this.document.body.classList.remove(className);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.document.body.classList.add(this.fuseConfig.colorTheme);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import 'hammerjs';
|
|||||||
|
|
||||||
import { FuseModule } from '@fuse/fuse.module';
|
import { FuseModule } from '@fuse/fuse.module';
|
||||||
import { FuseSharedModule } from '@fuse/shared.module';
|
import { FuseSharedModule } from '@fuse/shared.module';
|
||||||
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
import { FuseProgressBarModule, FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
||||||
|
|
||||||
import { fuseConfig } from 'app/fuse-config';
|
import { fuseConfig } from 'app/fuse-config';
|
||||||
|
|
||||||
@@ -72,6 +72,7 @@ const appRoutes: Routes = [
|
|||||||
|
|
||||||
// Fuse modules
|
// Fuse modules
|
||||||
FuseModule.forRoot(fuseConfig),
|
FuseModule.forRoot(fuseConfig),
|
||||||
|
FuseProgressBarModule,
|
||||||
FuseSharedModule,
|
FuseSharedModule,
|
||||||
FuseSidebarModule,
|
FuseSidebarModule,
|
||||||
FuseThemeOptionsModule,
|
FuseThemeOptionsModule,
|
||||||
|
|||||||
318
src/app/app.theme.scss
Normal file
318
src/app/app.theme.scss
Normal file
@@ -0,0 +1,318 @@
|
|||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Custom color maps for Fuse
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
$fuse-white: (
|
||||||
|
500: white,
|
||||||
|
contrast: (
|
||||||
|
500: $dark-primary-text
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$fuse-black: (
|
||||||
|
500: black,
|
||||||
|
contrast: (
|
||||||
|
500: $light-primary-text,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$fuse-navy: (
|
||||||
|
50: #ECECEE,
|
||||||
|
100: #C5C6CB,
|
||||||
|
200: #9EA1A9,
|
||||||
|
300: #7D818C,
|
||||||
|
400: #5C616F,
|
||||||
|
500: #3C4252,
|
||||||
|
600: #353A48,
|
||||||
|
700: #2D323E,
|
||||||
|
800: #262933,
|
||||||
|
900: #1E2129,
|
||||||
|
A100: #C5C6CB,
|
||||||
|
A200: #9EA1A9,
|
||||||
|
A400: #5C616F,
|
||||||
|
A700: #2D323E,
|
||||||
|
contrast: (
|
||||||
|
50: $dark-primary-text,
|
||||||
|
100: $dark-primary-text,
|
||||||
|
200: $dark-primary-text,
|
||||||
|
300: $light-primary-text,
|
||||||
|
400: $light-primary-text,
|
||||||
|
500: $light-primary-text,
|
||||||
|
600: $light-primary-text,
|
||||||
|
700: $light-primary-text,
|
||||||
|
800: $light-primary-text,
|
||||||
|
900: $light-primary-text,
|
||||||
|
A100: $dark-primary-text,
|
||||||
|
A200: $light-primary-text,
|
||||||
|
A400: $light-primary-text,
|
||||||
|
A700: $light-primary-text,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Generate Fuse color classes for custom palettes
|
||||||
|
$custom_palettes: (
|
||||||
|
fuse-white: $fuse-white,
|
||||||
|
fuse-black: $fuse-black,
|
||||||
|
fuse-navy: $fuse-navy
|
||||||
|
);
|
||||||
|
|
||||||
|
@include fuse-color-classes($custom_palettes);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Typography
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Angular Material typography
|
||||||
|
$typography: mat-typography-config(
|
||||||
|
$font-family: 'Muli, Helvetica Neue, Arial, sans-serif',
|
||||||
|
$title: mat-typography-level(20px, 32px, 600),
|
||||||
|
$body-2: mat-typography-level(14px, 24px, 600),
|
||||||
|
$button: mat-typography-level(14px, 14px, 600),
|
||||||
|
$input: mat-typography-level(16px, 1.125, 400) // line-height must be unitless !!!
|
||||||
|
);
|
||||||
|
|
||||||
|
// Setup the typography
|
||||||
|
@include angular-material-typography($typography);
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Component theming
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Import app and page component themes here to enable theming for them
|
||||||
|
@import "src/app/layout/components/chat-panel/chat-panel.theme";
|
||||||
|
@import "src/app/layout/components/toolbar/toolbar.theme";
|
||||||
|
|
||||||
|
@import "src/app/main/apps/academy/academy.theme";
|
||||||
|
@import "src/app/main/apps/calendar/calendar.theme";
|
||||||
|
@import "src/app/main/apps/chat/chat.theme";
|
||||||
|
@import "src/app/main/apps/contacts/contacts.theme";
|
||||||
|
@import "src/app/main/apps/dashboards/project/project.theme";
|
||||||
|
@import "src/app/main/apps/e-commerce/orders/orders.theme";
|
||||||
|
@import "src/app/main/apps/e-commerce/products/products.theme";
|
||||||
|
@import "src/app/main/apps/file-manager/file-manager.theme";
|
||||||
|
@import "src/app/main/apps/mail/mail.theme";
|
||||||
|
@import "src/app/main/apps/mail-ngrx/mail.theme";
|
||||||
|
@import "src/app/main/apps/scrumboard/scrumboard.theme";
|
||||||
|
@import "src/app/main/apps/todo/todo.theme";
|
||||||
|
|
||||||
|
@import "src/app/main/pages/authentication/login/login.theme";
|
||||||
|
@import "src/app/main/pages/authentication/login-2/login-2.theme";
|
||||||
|
@import "src/app/main/pages/authentication/register/register.theme";
|
||||||
|
@import "src/app/main/pages/authentication/register-2/register-2.theme";
|
||||||
|
@import "src/app/main/pages/authentication/reset-password/reset-password.theme";
|
||||||
|
@import "src/app/main/pages/authentication/reset-password-2/reset-password-2.theme";
|
||||||
|
@import "src/app/main/pages/authentication/forgot-password/forgot-password.theme";
|
||||||
|
@import "src/app/main/pages/authentication/forgot-password-2/forgot-password-2.theme";
|
||||||
|
@import "src/app/main/pages/authentication/lock/lock.theme";
|
||||||
|
@import "src/app/main/pages/authentication/mail-confirm/mail-confirm.theme";
|
||||||
|
@import "src/app/main/pages/coming-soon/coming-soon.theme";
|
||||||
|
@import "src/app/main/pages/errors/404/error-404.theme";
|
||||||
|
@import "src/app/main/pages/errors/500/error-500.theme";
|
||||||
|
@import "src/app/main/pages/maintenance/maintenance.theme";
|
||||||
|
@import "src/app/main/pages/pricing/style-1/style-1.theme";
|
||||||
|
@import "src/app/main/pages/pricing/style-2/style-2.theme";
|
||||||
|
@import "src/app/main/pages/pricing/style-3/style-3.theme";
|
||||||
|
@import "src/app/main/pages/profile/tabs/about/about.theme";
|
||||||
|
@import "src/app/main/pages/profile/tabs/photos-videos/photos-videos.theme";
|
||||||
|
@import "src/app/main/pages/profile/tabs/timeline/timeline.theme";
|
||||||
|
@import "src/app/main/pages/search/classic/search-classic.theme";
|
||||||
|
@import "src/app/main/pages/search/modern/search-modern.theme";
|
||||||
|
@import "src/app/main/pages/faq/faq.theme";
|
||||||
|
@import "src/app/main/pages/knowledge-base/knowledge-base.theme";
|
||||||
|
|
||||||
|
@import "src/app/main/ui/cards/cards.theme";
|
||||||
|
|
||||||
|
@import "src/app/main/angular-material-elements/example-viewer/example-viewer.theme";
|
||||||
|
|
||||||
|
// Define a mixin for easier access
|
||||||
|
@mixin components-theme($theme) {
|
||||||
|
|
||||||
|
// Layout components
|
||||||
|
@include chat-panel-theme($theme);
|
||||||
|
@include toolbar-theme($theme);
|
||||||
|
|
||||||
|
// Apps
|
||||||
|
@include academy-theme($theme);
|
||||||
|
@include calendar-theme($theme);
|
||||||
|
@include chat-theme($theme);
|
||||||
|
@include contacts-theme($theme);
|
||||||
|
@include dashboards-project-theme($theme);
|
||||||
|
@include e-commerce-orders-theme($theme);
|
||||||
|
@include e-commerce-products-theme($theme);
|
||||||
|
@include file-manager-theme($theme);
|
||||||
|
@include mail-theme($theme);
|
||||||
|
@include mail-ngrx-theme($theme);
|
||||||
|
@include scrumboard-theme($theme);
|
||||||
|
@include todo-theme($theme);
|
||||||
|
|
||||||
|
// Pages
|
||||||
|
@include login-theme($theme);
|
||||||
|
@include login-2-theme($theme);
|
||||||
|
@include register-theme($theme);
|
||||||
|
@include register-2-theme($theme);
|
||||||
|
@include reset-password-theme($theme);
|
||||||
|
@include reset-password-2-theme($theme);
|
||||||
|
@include forgot-password-theme($theme);
|
||||||
|
@include forgot-password-2-theme($theme);
|
||||||
|
@include lock-theme($theme);
|
||||||
|
@include mail-confirm-theme($theme);
|
||||||
|
@include coming-soon-theme($theme);
|
||||||
|
@include error-404-theme($theme);
|
||||||
|
@include error-500-theme($theme);
|
||||||
|
@include maintenance-theme($theme);
|
||||||
|
@include pricing-style-1-theme($theme);
|
||||||
|
@include pricing-style-2-theme($theme);
|
||||||
|
@include pricing-style-3-theme($theme);
|
||||||
|
@include profile-about-theme($theme);
|
||||||
|
@include profile-photos-videos-theme($theme);
|
||||||
|
@include profile-timeline-theme($theme);
|
||||||
|
@include search-classic-theme($theme);
|
||||||
|
@include search-modern-theme($theme);
|
||||||
|
@include faq-theme($theme);
|
||||||
|
@include knowledge-base-theme($theme);
|
||||||
|
|
||||||
|
// UI
|
||||||
|
@include ui-cards-theme($theme);
|
||||||
|
|
||||||
|
// Example Viewer
|
||||||
|
@include example-viewer-theme($theme);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Define the default theme
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define the primary, accent and warn palettes
|
||||||
|
$default-primary-palette: mat-palette($fuse-navy);
|
||||||
|
$default-accent-palette: mat-palette($mat-light-blue, 600, 400, 700);
|
||||||
|
$default-warn-palette: mat-palette($mat-red);
|
||||||
|
|
||||||
|
// Create the Material theme object
|
||||||
|
$theme: mat-light-theme($default-primary-palette, $default-accent-palette, $default-warn-palette);
|
||||||
|
|
||||||
|
// Add ".theme-default" class to the body to activate this theme.
|
||||||
|
// Class name must start with "theme-" !!!
|
||||||
|
body.theme-default {
|
||||||
|
|
||||||
|
// Create an Angular Material theme from the $theme map
|
||||||
|
@include angular-material-theme($theme);
|
||||||
|
|
||||||
|
// Apply the theme to the Fuse Core
|
||||||
|
@include fuse-core-theme($theme);
|
||||||
|
|
||||||
|
// Apply the theme to the user components
|
||||||
|
@include components-theme($theme);
|
||||||
|
|
||||||
|
// Generate Fuse color classes for primary, accent and warn colors
|
||||||
|
$palettes: (
|
||||||
|
primary: $default-primary-palette,
|
||||||
|
accent: $default-accent-palette,
|
||||||
|
warn: $default-warn-palette
|
||||||
|
);
|
||||||
|
|
||||||
|
@include fuse-color-classes($palettes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Define a yellow light theme
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define the primary, accent and warn palettes
|
||||||
|
$yellow-light-theme-primary-palette: mat-palette($fuse-navy, 600, 400, 700);
|
||||||
|
$yellow-light-theme-accent-palette: mat-palette($mat-yellow, 600, 400, 700);
|
||||||
|
$yellow-light-theme-warn-palette: mat-palette($mat-red);
|
||||||
|
|
||||||
|
// Create the Material theme object
|
||||||
|
$yellow-light-theme: mat-light-theme($yellow-light-theme-primary-palette, $yellow-light-theme-accent-palette, $yellow-light-theme-warn-palette);
|
||||||
|
|
||||||
|
// Add ".theme-yellow-light" class to the body to activate this theme.
|
||||||
|
// Class name must start with "theme-" !!!
|
||||||
|
body.theme-yellow-light {
|
||||||
|
|
||||||
|
// Generate the Angular Material theme
|
||||||
|
@include angular-material-theme($yellow-light-theme);
|
||||||
|
|
||||||
|
// Apply the theme to the Fuse Core
|
||||||
|
@include fuse-core-theme($yellow-light-theme);
|
||||||
|
|
||||||
|
// Apply the theme to the user components
|
||||||
|
@include components-theme($yellow-light-theme);
|
||||||
|
|
||||||
|
// Generate Fuse color classes for primary, accent and warn colors
|
||||||
|
$palettes: (
|
||||||
|
primary: $yellow-light-theme-primary-palette,
|
||||||
|
accent: $yellow-light-theme-accent-palette,
|
||||||
|
warn: $yellow-light-theme-warn-palette
|
||||||
|
);
|
||||||
|
|
||||||
|
@include fuse-color-classes($palettes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Define a blue-gray dark theme
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define the primary, accent and warn palettes
|
||||||
|
$blue-gray-dark-theme-primary-palette: mat-palette($mat-blue);
|
||||||
|
$blue-gray-dark-theme-accent-palette: mat-palette($mat-blue-gray);
|
||||||
|
$blue-gray-dark-theme-warn-palette: mat-palette($mat-red);
|
||||||
|
|
||||||
|
// Create the Material theme object
|
||||||
|
$blue-gray-dark-theme: mat-dark-theme($blue-gray-dark-theme-primary-palette, $blue-gray-dark-theme-accent-palette, $blue-gray-dark-theme-warn-palette);
|
||||||
|
|
||||||
|
// Add ".theme-blue-gray-dark" class to the body to activate this theme.
|
||||||
|
// Class name must start with "theme-" !!!
|
||||||
|
body.theme-blue-gray-dark {
|
||||||
|
|
||||||
|
// Generate the Angular Material theme
|
||||||
|
@include angular-material-theme($blue-gray-dark-theme);
|
||||||
|
|
||||||
|
// Apply the theme to the Fuse Core
|
||||||
|
@include fuse-core-theme($blue-gray-dark-theme);
|
||||||
|
|
||||||
|
// Apply the theme to the user components
|
||||||
|
@include components-theme($blue-gray-dark-theme);
|
||||||
|
|
||||||
|
// Generate Fuse color classes for primary, accent and warn colors
|
||||||
|
$palettes: (
|
||||||
|
primary: $blue-gray-dark-theme-primary-palette,
|
||||||
|
accent: $blue-gray-dark-theme-accent-palette,
|
||||||
|
warn: $blue-gray-dark-theme-warn-palette
|
||||||
|
);
|
||||||
|
|
||||||
|
@include fuse-color-classes($palettes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
// @ Define a pink dark theme
|
||||||
|
// -----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Define the primary, accent and warn palettes
|
||||||
|
$pink-dark-theme-primary-palette: mat-palette($mat-pink);
|
||||||
|
$pink-dark-theme-accent-palette: mat-palette($mat-pink);
|
||||||
|
$pink-dark-theme-warn-palette: mat-palette($mat-red);
|
||||||
|
|
||||||
|
// Create the Material theme object
|
||||||
|
$pink-dark-theme: mat-dark-theme($pink-dark-theme-primary-palette, $pink-dark-theme-accent-palette, $pink-dark-theme-warn-palette);
|
||||||
|
|
||||||
|
// Add ".theme-pink-dark" class to the body to activate this theme.
|
||||||
|
// Class name must start with "theme-" !!!
|
||||||
|
body.theme-pink-dark {
|
||||||
|
|
||||||
|
// Generate the Angular Material theme
|
||||||
|
@include angular-material-theme($pink-dark-theme);
|
||||||
|
|
||||||
|
// Apply the theme to the Fuse Core
|
||||||
|
@include fuse-core-theme($pink-dark-theme);
|
||||||
|
|
||||||
|
// Apply the theme to the user components
|
||||||
|
@include components-theme($pink-dark-theme);
|
||||||
|
|
||||||
|
// Generate Fuse color classes for primary, accent and warn colors
|
||||||
|
$palettes: (
|
||||||
|
primary: $pink-dark-theme-primary-palette,
|
||||||
|
accent: $pink-dark-theme-accent-palette,
|
||||||
|
warn: $pink-dark-theme-warn-palette
|
||||||
|
);
|
||||||
|
|
||||||
|
@include fuse-color-classes($palettes);
|
||||||
|
}
|
||||||
@@ -20,10 +20,10 @@ export class CalendarFakeDb
|
|||||||
start : subDays(startOfDay(new Date()), 1),
|
start : subDays(startOfDay(new Date()), 1),
|
||||||
end : addDays(new Date(), 1),
|
end : addDays(new Date(), 1),
|
||||||
title : 'A 3 day event',
|
title : 'A 3 day event',
|
||||||
allDay : false,
|
allDay : true,
|
||||||
color : {
|
color : {
|
||||||
primary : '#ad2121',
|
primary : '#F44336',
|
||||||
secondary: '#FAE3E3'
|
secondary: '#FFCDD2'
|
||||||
},
|
},
|
||||||
resizable: {
|
resizable: {
|
||||||
beforeStart: true,
|
beforeStart: true,
|
||||||
@@ -40,8 +40,8 @@ export class CalendarFakeDb
|
|||||||
title : 'An event with no end date',
|
title : 'An event with no end date',
|
||||||
allDay : false,
|
allDay : false,
|
||||||
color : {
|
color : {
|
||||||
primary : '#e3bc08',
|
primary : '#FF9800',
|
||||||
secondary: '#FDF1BA'
|
secondary: '#FFE0B2'
|
||||||
},
|
},
|
||||||
resizable: {
|
resizable: {
|
||||||
beforeStart: true,
|
beforeStart: true,
|
||||||
@@ -59,7 +59,7 @@ export class CalendarFakeDb
|
|||||||
title : 'A long event that spans 2 months',
|
title : 'A long event that spans 2 months',
|
||||||
allDay : false,
|
allDay : false,
|
||||||
color : {
|
color : {
|
||||||
primary : '#1e90ff',
|
primary : '#1E90FF',
|
||||||
secondary: '#D1E8FF'
|
secondary: '#D1E8FF'
|
||||||
},
|
},
|
||||||
resizable: {
|
resizable: {
|
||||||
@@ -78,8 +78,8 @@ export class CalendarFakeDb
|
|||||||
title : 'A draggable and resizable event',
|
title : 'A draggable and resizable event',
|
||||||
allDay : false,
|
allDay : false,
|
||||||
color : {
|
color : {
|
||||||
primary : '#e3bc08',
|
primary : '#673AB7',
|
||||||
secondary: '#FDF1BA'
|
secondary: '#D1C4E9'
|
||||||
},
|
},
|
||||||
resizable: {
|
resizable: {
|
||||||
beforeStart: true,
|
beforeStart: true,
|
||||||
|
|||||||
@@ -6,21 +6,21 @@ export class ChatFakeDb
|
|||||||
'name' : 'Alice Freeman',
|
'name' : 'Alice Freeman',
|
||||||
'avatar': 'assets/images/avatars/alice.jpg',
|
'avatar': 'assets/images/avatars/alice.jpg',
|
||||||
'status': 'online',
|
'status': 'online',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680606588342058356d',
|
'id' : '5725a680606588342058356d',
|
||||||
'name' : 'Arnold',
|
'name' : 'Arnold',
|
||||||
'avatar': 'assets/images/avatars/Arnold.jpg',
|
'avatar': 'assets/images/avatars/Arnold.jpg',
|
||||||
'status': 'do-not-disturb',
|
'status': 'do-not-disturb',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a68009e20d0a9e9acf2a',
|
'id' : '5725a68009e20d0a9e9acf2a',
|
||||||
'name' : 'Barrera',
|
'name' : 'Barrera',
|
||||||
'avatar': 'assets/images/avatars/Barrera.jpg',
|
'avatar': 'assets/images/avatars/Barrera.jpg',
|
||||||
'status': 'do-not-disturb',
|
'status': 'do-not-disturb',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
||||||
'unread': null
|
'unread': null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -28,7 +28,7 @@ export class ChatFakeDb
|
|||||||
'name' : 'Blair',
|
'name' : 'Blair',
|
||||||
'avatar': 'assets/images/avatars/Blair.jpg',
|
'avatar': 'assets/images/avatars/Blair.jpg',
|
||||||
'status': 'offline',
|
'status': 'offline',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
||||||
'unread': 3
|
'unread': 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -36,112 +36,112 @@ export class ChatFakeDb
|
|||||||
'name' : 'Boyle',
|
'name' : 'Boyle',
|
||||||
'avatar': 'assets/images/avatars/Boyle.jpg',
|
'avatar': 'assets/images/avatars/Boyle.jpg',
|
||||||
'status': 'offline',
|
'status': 'offline',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a68031fdbb1db2c1af47',
|
'id' : '5725a68031fdbb1db2c1af47',
|
||||||
'name' : 'Christy',
|
'name' : 'Christy',
|
||||||
'avatar': 'assets/images/avatars/Christy.jpg',
|
'avatar': 'assets/images/avatars/Christy.jpg',
|
||||||
'status': 'offline',
|
'status': 'offline',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680bc670af746c435e2',
|
'id' : '5725a680bc670af746c435e2',
|
||||||
'name' : 'Copeland',
|
'name' : 'Copeland',
|
||||||
'avatar': 'assets/images/avatars/Copeland.jpg',
|
'avatar': 'assets/images/avatars/Copeland.jpg',
|
||||||
'status': 'online',
|
'status': 'online',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680e7eb988a58ddf303',
|
'id' : '5725a680e7eb988a58ddf303',
|
||||||
'name' : 'Estes',
|
'name' : 'Estes',
|
||||||
'avatar': 'assets/images/avatars/Estes.jpg',
|
'avatar': 'assets/images/avatars/Estes.jpg',
|
||||||
'status': 'away',
|
'status': 'away',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680dcb077889f758961',
|
'id' : '5725a680dcb077889f758961',
|
||||||
'name' : 'Harper',
|
'name' : 'Harper',
|
||||||
'avatar': 'assets/images/avatars/Harper.jpg',
|
'avatar': 'assets/images/avatars/Harper.jpg',
|
||||||
'status': 'offline',
|
'status': 'offline',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a6806acf030f9341e925',
|
'id' : '5725a6806acf030f9341e925',
|
||||||
'name' : 'Helen',
|
'name' : 'Helen',
|
||||||
'avatar': 'assets/images/avatars/Helen.jpg',
|
'avatar': 'assets/images/avatars/Helen.jpg',
|
||||||
'status': 'away',
|
'status': 'away',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680ae1ae9a3c960d487',
|
'id' : '5725a680ae1ae9a3c960d487',
|
||||||
'name' : 'Henderson',
|
'name' : 'Henderson',
|
||||||
'avatar': 'assets/images/avatars/Henderson.jpg',
|
'avatar': 'assets/images/avatars/Henderson.jpg',
|
||||||
'status': 'offline',
|
'status': 'offline',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680b8d240c011dd224b',
|
'id' : '5725a680b8d240c011dd224b',
|
||||||
'name' : 'Josefina',
|
'name' : 'Josefina',
|
||||||
'avatar': 'assets/images/avatars/Josefina.jpg',
|
'avatar': 'assets/images/avatars/Josefina.jpg',
|
||||||
'status': 'online',
|
'status': 'online',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a68034cb3968e1f79eac',
|
'id' : '5725a68034cb3968e1f79eac',
|
||||||
'name' : 'Katina',
|
'name' : 'Katina',
|
||||||
'avatar': 'assets/images/avatars/Katina.jpg',
|
'avatar': 'assets/images/avatars/Katina.jpg',
|
||||||
'status': 'away',
|
'status': 'away',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a6801146cce777df2a08',
|
'id' : '5725a6801146cce777df2a08',
|
||||||
'name' : 'Lily',
|
'name' : 'Lily',
|
||||||
'avatar': 'assets/images/avatars/Lily.jpg',
|
'avatar': 'assets/images/avatars/Lily.jpg',
|
||||||
'status': 'do-not-disturb',
|
'status': 'do-not-disturb',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a6808a178bfd034d6ecf',
|
'id' : '5725a6808a178bfd034d6ecf',
|
||||||
'name' : 'Mai',
|
'name' : 'Mai',
|
||||||
'avatar': 'assets/images/avatars/Mai.jpg',
|
'avatar': 'assets/images/avatars/Mai.jpg',
|
||||||
'status': 'away',
|
'status': 'away',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680653c265f5c79b5a9',
|
'id' : '5725a680653c265f5c79b5a9',
|
||||||
'name' : 'Nancy',
|
'name' : 'Nancy',
|
||||||
'avatar': 'assets/images/avatars/Nancy.jpg',
|
'avatar': 'assets/images/avatars/Nancy.jpg',
|
||||||
'status': 'do-not-disturb',
|
'status': 'do-not-disturb',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680bbcec3cc32a8488a',
|
'id' : '5725a680bbcec3cc32a8488a',
|
||||||
'name' : 'Nora',
|
'name' : 'Nora',
|
||||||
'avatar': 'assets/images/avatars/Nora.jpg',
|
'avatar': 'assets/images/avatars/Nora.jpg',
|
||||||
'status': 'do-not-disturb',
|
'status': 'do-not-disturb',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a6803d87f1b77e17b62b',
|
'id' : '5725a6803d87f1b77e17b62b',
|
||||||
'name' : 'Odessa',
|
'name' : 'Odessa',
|
||||||
'avatar': 'assets/images/avatars/Odessa.jpg',
|
'avatar': 'assets/images/avatars/Odessa.jpg',
|
||||||
'status': 'away',
|
'status': 'away',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680e87cb319bd9bd673',
|
'id' : '5725a680e87cb319bd9bd673',
|
||||||
'name' : 'Reyna',
|
'name' : 'Reyna',
|
||||||
'avatar': 'assets/images/avatars/Reyna.jpg',
|
'avatar': 'assets/images/avatars/Reyna.jpg',
|
||||||
'status': 'offline',
|
'status': 'offline',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a6802d10e277a0f35775',
|
'id' : '5725a6802d10e277a0f35775',
|
||||||
'name' : 'Shauna',
|
'name' : 'Shauna',
|
||||||
'avatar': 'assets/images/avatars/Shauna.jpg',
|
'avatar': 'assets/images/avatars/Shauna.jpg',
|
||||||
'status': 'online',
|
'status': 'online',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...',
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
||||||
'unread': null
|
'unread': null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -149,7 +149,7 @@ export class ChatFakeDb
|
|||||||
'name' : 'Shepard',
|
'name' : 'Shepard',
|
||||||
'avatar': 'assets/images/avatars/Shepard.jpg',
|
'avatar': 'assets/images/avatars/Shepard.jpg',
|
||||||
'status': 'online',
|
'status': 'online',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a680cd7efa56a45aea5d',
|
'id' : '5725a680cd7efa56a45aea5d',
|
||||||
@@ -163,21 +163,21 @@ export class ChatFakeDb
|
|||||||
'name' : 'Trevino',
|
'name' : 'Trevino',
|
||||||
'avatar': 'assets/images/avatars/Trevino.jpg',
|
'avatar': 'assets/images/avatars/Trevino.jpg',
|
||||||
'status': 'away',
|
'status': 'away',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a68018c663044be49cbf',
|
'id' : '5725a68018c663044be49cbf',
|
||||||
'name' : 'Tyson',
|
'name' : 'Tyson',
|
||||||
'avatar': 'assets/images/avatars/Tyson.jpg',
|
'avatar': 'assets/images/avatars/Tyson.jpg',
|
||||||
'status': 'do-not-disturb',
|
'status': 'do-not-disturb',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'id' : '5725a6809413bf8a0a5272b1',
|
'id' : '5725a6809413bf8a0a5272b1',
|
||||||
'name' : 'Velazquez',
|
'name' : 'Velazquez',
|
||||||
'avatar': 'assets/images/avatars/Velazquez.jpg',
|
'avatar': 'assets/images/avatars/Velazquez.jpg',
|
||||||
'status': 'online',
|
'status': 'online',
|
||||||
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit...'
|
'mood' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -302,6 +302,7 @@ export class ChatFakeDb
|
|||||||
'contactId' : '5725a680b3249760ea21de52',
|
'contactId' : '5725a680b3249760ea21de52',
|
||||||
'name' : 'Alice Freeman',
|
'name' : 'Alice Freeman',
|
||||||
'unread' : 4,
|
'unread' : 4,
|
||||||
|
'lastMessage' : 'You are the worst!',
|
||||||
'lastMessageTime': '2017-06-12T02:10:18.931Z'
|
'lastMessageTime': '2017-06-12T02:10:18.931Z'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -309,6 +310,7 @@ export class ChatFakeDb
|
|||||||
'contactId' : '5725a680b8d240c011dd224b',
|
'contactId' : '5725a680b8d240c011dd224b',
|
||||||
'name' : 'Josefina',
|
'name' : 'Josefina',
|
||||||
'unread' : null,
|
'unread' : null,
|
||||||
|
'lastMessage' : 'We are losing money! Quick!',
|
||||||
'lastMessageTime': '2017-02-18T10:30:18.931Z'
|
'lastMessageTime': '2017-02-18T10:30:18.931Z'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -316,6 +318,7 @@ export class ChatFakeDb
|
|||||||
'contactId' : '5725a6809413bf8a0a5272b1',
|
'contactId' : '5725a6809413bf8a0a5272b1',
|
||||||
'name' : 'Velazquez',
|
'name' : 'Velazquez',
|
||||||
'unread' : 2,
|
'unread' : 2,
|
||||||
|
'lastMessage' : 'Quickly come to the meeting room 1B, we have a big server issue',
|
||||||
'lastMessageTime': '2017-03-18T12:30:18.931Z'
|
'lastMessageTime': '2017-03-18T12:30:18.931Z'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'abbott@withinpixels.com',
|
'email' : 'abbott@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0175',
|
'phone' : '+1-202-555-0175',
|
||||||
'address' : '933 8th Street Stamford, CT 06902',
|
'address' : '933 8th Street Stamford, CT 06902',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -26,7 +26,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'arnold@withinpixels.com',
|
'email' : 'arnold@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0141',
|
'phone' : '+1-202-555-0141',
|
||||||
'address' : '906 Valley Road Michigan City, IN 46360',
|
'address' : '906 Valley Road Michigan City, IN 46360',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -40,7 +40,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'barrera@withinpixels.com',
|
'email' : 'barrera@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0196',
|
'phone' : '+1-202-555-0196',
|
||||||
'address' : '183 River Street Passaic, NJ 07055',
|
'address' : '183 River Street Passaic, NJ 07055',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -54,7 +54,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'blair@withinpixels.com',
|
'email' : 'blair@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0118',
|
'phone' : '+1-202-555-0118',
|
||||||
'address' : '143 Jones Street Eau Claire, WI 54701',
|
'address' : '143 Jones Street Eau Claire, WI 54701',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -68,7 +68,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'boyle@withinpixels.com',
|
'email' : 'boyle@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0177',
|
'phone' : '+1-202-555-0177',
|
||||||
'address' : '218 Pearl Street Brandon, FL 33510',
|
'address' : '218 Pearl Street Brandon, FL 33510',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -82,7 +82,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'christy@withinpixels.com',
|
'email' : 'christy@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0136',
|
'phone' : '+1-202-555-0136',
|
||||||
'address' : '329 Bridge Street Desoto, TX 75115',
|
'address' : '329 Bridge Street Desoto, TX 75115',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -96,7 +96,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'copeland@withinpixels.com',
|
'email' : 'copeland@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0107',
|
'phone' : '+1-202-555-0107',
|
||||||
'address' : '956 6th Avenue North Bergen, NJ 0704',
|
'address' : '956 6th Avenue North Bergen, NJ 0704',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -110,7 +110,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'estes@withinpixels.com',
|
'email' : 'estes@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0113',
|
'phone' : '+1-202-555-0113',
|
||||||
'address' : '664 York Street Cambridge, MA 02138',
|
'address' : '664 York Street Cambridge, MA 02138',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -124,7 +124,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'harper@withinpixels.com',
|
'email' : 'harper@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0173',
|
'phone' : '+1-202-555-0173',
|
||||||
'address' : '738 Route 11 Cornelius, NC 28031',
|
'address' : '738 Route 11 Cornelius, NC 28031',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -138,7 +138,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'helen@withinpixels.com',
|
'email' : 'helen@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0163',
|
'phone' : '+1-202-555-0163',
|
||||||
'address' : '194 Washington Avenue Saint Petersburg, FL 33702',
|
'address' : '194 Washington Avenue Saint Petersburg, FL 33702',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -152,7 +152,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'henderson@withinpixels.com',
|
'email' : 'henderson@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0151',
|
'phone' : '+1-202-555-0151',
|
||||||
'address' : '686 Roosevelt Avenue Oviedo, FL 32765',
|
'address' : '686 Roosevelt Avenue Oviedo, FL 32765',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -166,7 +166,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'josefina@withinpixels.com',
|
'email' : 'josefina@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0160',
|
'phone' : '+1-202-555-0160',
|
||||||
'address' : '202 Hartford Road Lynchburg, VA 24502',
|
'address' : '202 Hartford Road Lynchburg, VA 24502',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -180,7 +180,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'katina@withinpixels.com',
|
'email' : 'katina@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0186',
|
'phone' : '+1-202-555-0186',
|
||||||
'address' : '219 Woodland Road Valrico, FL 33594',
|
'address' : '219 Woodland Road Valrico, FL 33594',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -194,7 +194,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'lily@withinpixels.com',
|
'email' : 'lily@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0115',
|
'phone' : '+1-202-555-0115',
|
||||||
'address' : '305 Willow Drive Superior, WI 54880',
|
'address' : '305 Willow Drive Superior, WI 54880',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -208,7 +208,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'mai@withinpixels.com',
|
'email' : 'mai@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0199',
|
'phone' : '+1-202-555-0199',
|
||||||
'address' : '148 Heather Lane Mcminnville, TN 37110',
|
'address' : '148 Heather Lane Mcminnville, TN 37110',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -222,7 +222,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'nancy@withinpixels.com',
|
'email' : 'nancy@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0120',
|
'phone' : '+1-202-555-0120',
|
||||||
'address' : '345 Laurel Lane Union City, NJ 07087',
|
'address' : '345 Laurel Lane Union City, NJ 07087',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -236,7 +236,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'nora@withinpixels.com',
|
'email' : 'nora@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0172',
|
'phone' : '+1-202-555-0172',
|
||||||
'address' : '572 Rose Street Summerfield, FL 34491',
|
'address' : '572 Rose Street Summerfield, FL 34491',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -250,7 +250,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'odessa@withinpixels.com',
|
'email' : 'odessa@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0190',
|
'phone' : '+1-202-555-0190',
|
||||||
'address' : '527 Jefferson Court Conyers, GA 30012',
|
'address' : '527 Jefferson Court Conyers, GA 30012',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -264,7 +264,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'reyna@withinpixels.com',
|
'email' : 'reyna@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0116',
|
'phone' : '+1-202-555-0116',
|
||||||
'address' : '297 Strawberry Lane Faribault, MN 55021',
|
'address' : '297 Strawberry Lane Faribault, MN 55021',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -278,7 +278,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'shauna@withinpixels.com',
|
'email' : 'shauna@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0159',
|
'phone' : '+1-202-555-0159',
|
||||||
'address' : '928 Canterbury Court Pittsburgh, PA 15206',
|
'address' : '928 Canterbury Court Pittsburgh, PA 15206',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -292,7 +292,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'shepard@withinpixels.com',
|
'email' : 'shepard@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0173',
|
'phone' : '+1-202-555-0173',
|
||||||
'address' : '904 Ridge Road Pickerington, OH 43147',
|
'address' : '904 Ridge Road Pickerington, OH 43147',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -306,7 +306,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'tillman@withinpixels.com',
|
'email' : 'tillman@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0183',
|
'phone' : '+1-202-555-0183',
|
||||||
'address' : '447 Charles Street Dorchester, MA 02125',
|
'address' : '447 Charles Street Dorchester, MA 02125',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -320,7 +320,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'trevino@withinpixels.com',
|
'email' : 'trevino@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0138',
|
'phone' : '+1-202-555-0138',
|
||||||
'address' : '84 Valley View Road Norman, OK 73072',
|
'address' : '84 Valley View Road Norman, OK 73072',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -334,7 +334,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'tyson@withinpixels.com',
|
'email' : 'tyson@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0146',
|
'phone' : '+1-202-555-0146',
|
||||||
'address' : '204 Clark Street Monsey, NY 10952',
|
'address' : '204 Clark Street Monsey, NY 10952',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -348,7 +348,7 @@ export class ContactsFakeDb
|
|||||||
'email' : 'velezquez@withinpixels.com',
|
'email' : 'velezquez@withinpixels.com',
|
||||||
'phone' : '+1-202-555-0146',
|
'phone' : '+1-202-555-0146',
|
||||||
'address' : '261 Cleveland Street Riverside, NJ 08075',
|
'address' : '261 Cleveland Street Riverside, NJ 08075',
|
||||||
'birthday': null,
|
'birthday': '',
|
||||||
'notes' : ''
|
'notes' : ''
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export class AnalyticsDashboardDb
|
|||||||
widget1: {
|
widget1: {
|
||||||
chartType: 'line',
|
chartType: 'line',
|
||||||
datasets : {
|
datasets : {
|
||||||
'2015': [
|
'2016': [
|
||||||
{
|
{
|
||||||
label: 'Sales',
|
label: 'Sales',
|
||||||
data : [1.9, 3, 3.4, 2.2, 2.9, 3.9, 2.5, 3.8, 4.1, 3.8, 3.2, 2.9],
|
data : [1.9, 3, 3.4, 2.2, 2.9, 3.9, 2.5, 3.8, 4.1, 3.8, 3.2, 2.9],
|
||||||
@@ -12,7 +12,7 @@ export class AnalyticsDashboardDb
|
|||||||
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'2016': [
|
'2017': [
|
||||||
{
|
{
|
||||||
label: 'Sales',
|
label: 'Sales',
|
||||||
data : [2.2, 2.9, 3.9, 2.5, 3.8, 3.2, 2.9, 1.9, 3, 3.4, 4.1, 3.8],
|
data : [2.2, 2.9, 3.9, 2.5, 3.8, 3.2, 2.9, 1.9, 3, 3.4, 4.1, 3.8],
|
||||||
@@ -20,7 +20,7 @@ export class AnalyticsDashboardDb
|
|||||||
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
'2017': [
|
'2018': [
|
||||||
{
|
{
|
||||||
label: 'Sales',
|
label: 'Sales',
|
||||||
data : [3.9, 2.5, 3.8, 4.1, 1.9, 3, 3.8, 3.2, 2.9, 3.4, 2.2, 2.9],
|
data : [3.9, 2.5, 3.8, 4.1, 1.9, 3, 3.8, 3.2, 2.9, 3.4, 2.2, 2.9],
|
||||||
|
|||||||
@@ -1622,7 +1622,7 @@ export class ProjectDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Wireframing',
|
'value' : 'Wireframing',
|
||||||
'classes': 'mat-primary-bg',
|
'classes': 'primary',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1654,7 +1654,7 @@ export class ProjectDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Design',
|
'value' : 'Design',
|
||||||
'classes': 'mat-green-bg',
|
'classes': 'green',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1686,7 +1686,7 @@ export class ProjectDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Coding',
|
'value' : 'Coding',
|
||||||
'classes': 'mat-red-bg',
|
'classes': 'red',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1718,7 +1718,7 @@ export class ProjectDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Marketing',
|
'value' : 'Marketing',
|
||||||
'classes': 'mat-accent-bg',
|
'classes': 'accent',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1750,7 +1750,7 @@ export class ProjectDashboardDb
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
'value' : 'Extra',
|
'value' : 'Extra',
|
||||||
'classes': 'mat-orange-bg',
|
'classes': 'orange',
|
||||||
'icon' : ''
|
'icon' : ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -34,7 +34,6 @@ export class FakeDbService implements InMemoryDbService
|
|||||||
'calendar': CalendarFakeDb.data,
|
'calendar': CalendarFakeDb.data,
|
||||||
|
|
||||||
// E-Commerce
|
// E-Commerce
|
||||||
'e-commerce-dashboard': ECommerceFakeDb.dashboard,
|
|
||||||
'e-commerce-products' : ECommerceFakeDb.products,
|
'e-commerce-products' : ECommerceFakeDb.products,
|
||||||
'e-commerce-orders' : ECommerceFakeDb.orders,
|
'e-commerce-orders' : ECommerceFakeDb.orders,
|
||||||
|
|
||||||
@@ -78,8 +77,7 @@ export class FakeDbService implements InMemoryDbService
|
|||||||
'profile-about' : ProfileFakeDb.about,
|
'profile-about' : ProfileFakeDb.about,
|
||||||
|
|
||||||
// Search
|
// Search
|
||||||
'search-classic': SearchFakeDb.classic,
|
'search': SearchFakeDb.search,
|
||||||
'search-table' : SearchFakeDb.table,
|
|
||||||
|
|
||||||
// FAQ
|
// FAQ
|
||||||
'faq': FaqFakeDb.data,
|
'faq': FaqFakeDb.data,
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'Shopping list',
|
'name' : 'Shopping list',
|
||||||
@@ -61,7 +61,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'Invoices',
|
'name' : 'Invoices',
|
||||||
@@ -74,7 +74,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'Crash logs',
|
'name' : 'Crash logs',
|
||||||
@@ -87,7 +87,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'System logs',
|
'name' : 'System logs',
|
||||||
@@ -100,7 +100,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'Prices',
|
'name' : 'Prices',
|
||||||
@@ -113,7 +113,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'Anabelle Manual',
|
'name' : 'Anabelle Manual',
|
||||||
@@ -126,7 +126,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'Steam summer sale budget',
|
'name' : 'Steam summer sale budget',
|
||||||
@@ -139,7 +139,7 @@ export class FileManagerFakeDb
|
|||||||
'extention': '',
|
'extention': '',
|
||||||
'location' : 'My Files > Documents',
|
'location' : 'My Files > Documents',
|
||||||
'offline' : true,
|
'offline' : true,
|
||||||
'preview' : 'assets/images/etc/sample-file-preview.jpg'
|
'preview' : 'assets/images/file-manager/sample-file-preview.jpg'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -15,8 +15,8 @@ export class InvoiceFakeDb
|
|||||||
'email' : 'johndoe@mail.com'
|
'email' : 'johndoe@mail.com'
|
||||||
},
|
},
|
||||||
'number' : 'P9-0004',
|
'number' : 'P9-0004',
|
||||||
'date' : 'Jul 19, 2015',
|
'date' : 'Jul 19, 2018',
|
||||||
'dueDate' : 'Aug 24, 2015',
|
'dueDate' : 'Aug 24, 2018',
|
||||||
'services': [
|
'services': [
|
||||||
{
|
{
|
||||||
'title' : 'Prototype & Design',
|
'title' : 'Prototype & Design',
|
||||||
|
|||||||
@@ -25,22 +25,21 @@ export class MailFakeDb
|
|||||||
{
|
{
|
||||||
'type' : 'image',
|
'type' : 'image',
|
||||||
'fileName': 'flowers',
|
'fileName': 'flowers',
|
||||||
'preview' : 'assets/images/etc/flowers-thumb.jpg',
|
'preview' : 'assets/images/mail/attachment-1.jpg',
|
||||||
'url' : '',
|
'url' : '',
|
||||||
'size' : '1.1Mb'
|
'size' : '1.1Mb'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'image',
|
'type' : 'image',
|
||||||
'fileName': 'snow',
|
'fileName': 'snow',
|
||||||
'preview' : 'assets/images/etc/snow-thumb.jpg',
|
'preview' : 'assets/images/mail/attachment-2.jpg',
|
||||||
'url' : '',
|
'url' : '',
|
||||||
'size' : '380kb'
|
'size' : '380kb'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'image',
|
'type' : 'image',
|
||||||
'fileName': 'sunrise',
|
'fileName': 'sunrise',
|
||||||
'preview' : 'assets/images/etc/sunrise-thumb.jpg',
|
'preview' : 'assets/images/mail/attachment-3.jpg',
|
||||||
'url' : 'assets/images/etc/early-sunrise.jpg',
|
|
||||||
'size': '17Mb'
|
'size': '17Mb'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/andrew.jpg'
|
'avatar': 'assets/images/avatars/andrew.jpg'
|
||||||
},
|
},
|
||||||
'message': 'sent you a message.',
|
'message': 'sent you a message.',
|
||||||
'time' : 'June 10,2015'
|
'time' : 'June 10,2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'user' : {
|
'user' : {
|
||||||
@@ -24,7 +24,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/garry.jpg'
|
'avatar': 'assets/images/avatars/garry.jpg'
|
||||||
},
|
},
|
||||||
'message': 'shared a public post with your group.',
|
'message': 'shared a public post with your group.',
|
||||||
'time' : 'June 9,2015'
|
'time' : 'June 9,2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'user' : {
|
'user' : {
|
||||||
@@ -32,7 +32,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/carl.jpg'
|
'avatar': 'assets/images/avatars/carl.jpg'
|
||||||
},
|
},
|
||||||
'message': 'wants to play Fallout Shelter with you.',
|
'message': 'wants to play Fallout Shelter with you.',
|
||||||
'time' : 'June 8,2015'
|
'time' : 'June 8,2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'user' : {
|
'user' : {
|
||||||
@@ -40,7 +40,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/jane.jpg'
|
'avatar': 'assets/images/avatars/jane.jpg'
|
||||||
},
|
},
|
||||||
'message': 'started following you.',
|
'message': 'started following you.',
|
||||||
'time' : 'June 7,2015'
|
'time' : 'June 7,2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'user' : {
|
'user' : {
|
||||||
@@ -48,7 +48,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/james.jpg'
|
'avatar': 'assets/images/avatars/james.jpg'
|
||||||
},
|
},
|
||||||
'message': 'sent you a message.',
|
'message': 'sent you a message.',
|
||||||
'time' : 'June 6,2015'
|
'time' : 'June 6,2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'user' : {
|
'user' : {
|
||||||
@@ -56,7 +56,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/joyce.jpg'
|
'avatar': 'assets/images/avatars/joyce.jpg'
|
||||||
},
|
},
|
||||||
'message': 'shared a photo with you.',
|
'message': 'shared a photo with you.',
|
||||||
'time' : 'June 5,2015'
|
'time' : 'June 5,2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'user' : {
|
'user' : {
|
||||||
@@ -64,7 +64,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/vincent.jpg'
|
'avatar': 'assets/images/avatars/vincent.jpg'
|
||||||
},
|
},
|
||||||
'message': 'shared a photo with you.',
|
'message': 'shared a photo with you.',
|
||||||
'time' : 'June 4,2015'
|
'time' : 'June 4,2018'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
posts : [
|
posts : [
|
||||||
@@ -80,7 +80,7 @@ export class ProfileFakeDb
|
|||||||
'share' : 21,
|
'share' : 21,
|
||||||
'media' : {
|
'media' : {
|
||||||
'type' : 'image',
|
'type' : 'image',
|
||||||
'preview': 'assets/images/etc/early-sunrise.jpg'
|
'preview': 'assets/images/profile/morain-lake.jpg'
|
||||||
},
|
},
|
||||||
'comments': [
|
'comments': [
|
||||||
{
|
{
|
||||||
@@ -88,7 +88,7 @@ export class ProfileFakeDb
|
|||||||
'name' : 'Alice Freeman',
|
'name' : 'Alice Freeman',
|
||||||
'avatar': 'assets/images/avatars/alice.jpg'
|
'avatar': 'assets/images/avatars/alice.jpg'
|
||||||
},
|
},
|
||||||
'time' : 'June 10, 2015',
|
'time' : 'June 10, 2018',
|
||||||
'message': 'That’s a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
|
'message': 'That’s a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -99,17 +99,17 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/andrew.jpg'
|
'avatar': 'assets/images/avatars/andrew.jpg'
|
||||||
},
|
},
|
||||||
'message' : 'Hey, man! Check this, it’s pretty awesome!',
|
'message' : 'Hey, man! Check this, it’s pretty awesome!',
|
||||||
'time' : 'June 12, 2015',
|
'time' : 'June 12, 2018',
|
||||||
'type' : 'article',
|
'type' : 'article',
|
||||||
'like' : 98,
|
'like' : 98,
|
||||||
'share' : 6,
|
'share' : 6,
|
||||||
'article' : {
|
'article' : {
|
||||||
'title' : 'The Fallout 4 Pip-Boy Edition Is Back In Stock Now',
|
'title' : 'Never stop changing!',
|
||||||
'subtitle': 'Kotaku',
|
'subtitle': 'John Westrock',
|
||||||
'excerpt' : 'The Fallout 4 Pip-Boy edition is back in stock at Gamestop, for all 3 platforms. Additionally, Walmart also has it in stock for the PS4 and Xbox One as of this writing, as does Best Buy.',
|
'excerpt' : 'John Westrock\'s new photo album called \'Never stop changing\' is published! It features more than 200 photos that will take you right in.',
|
||||||
'media' : {
|
'media' : {
|
||||||
'type' : 'image',
|
'type' : 'image',
|
||||||
'preview': 'assets/images/etc/fallout.jpg'
|
'preview': 'assets/images/profile/never-stop-changing.jpg'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'comments': [
|
'comments': [
|
||||||
@@ -118,7 +118,7 @@ export class ProfileFakeDb
|
|||||||
'name' : 'Alice Freeman',
|
'name' : 'Alice Freeman',
|
||||||
'avatar': 'assets/images/avatars/alice.jpg'
|
'avatar': 'assets/images/avatars/alice.jpg'
|
||||||
},
|
},
|
||||||
'time' : 'June 10, 2015',
|
'time' : 'June 10, 2018',
|
||||||
'message': 'That’s a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
|
'message': 'That’s a wonderful place. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat.'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -129,7 +129,7 @@ export class ProfileFakeDb
|
|||||||
'avatar': 'assets/images/avatars/carl.jpg'
|
'avatar': 'assets/images/avatars/carl.jpg'
|
||||||
},
|
},
|
||||||
'message': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat. Aenean lorem ex, ultrices sit amet ligula sed...',
|
'message': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce et eleifend ligula. Fusce posuere in sapien ac facilisis. Etiam sit amet justo non felis ornare feugiat. Aenean lorem ex, ultrices sit amet ligula sed...',
|
||||||
'time' : 'June 10, 2015',
|
'time' : 'June 10, 2018',
|
||||||
'type' : 'something',
|
'type' : 'something',
|
||||||
'like' : 4,
|
'like' : 4,
|
||||||
'share' : 1
|
'share' : 1
|
||||||
@@ -139,130 +139,130 @@ export class ProfileFakeDb
|
|||||||
|
|
||||||
public static photosVideos = [
|
public static photosVideos = [
|
||||||
{
|
{
|
||||||
'name' : 'June 2015',
|
'name' : 'June 2018',
|
||||||
'info' : '5 Photos',
|
'info' : '5 Photos',
|
||||||
'media': [
|
'media': [
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Sunset',
|
'title' : 'A Walk Amongst Friends',
|
||||||
'preview': 'assets/images/etc/mountain-sunset.jpg'
|
'preview': 'assets/images/profile/a-walk-amongst-friends-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Lake',
|
'title' : 'Braies Lake',
|
||||||
'preview': 'assets/images/etc/mountain-lake.jpg'
|
'preview': 'assets/images/profile/braies-lake-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Hot air balloons',
|
'title' : 'Fall Glow',
|
||||||
'preview': 'assets/images/etc/air-balloons.jpg'
|
'preview': 'assets/images/profile/fall-glow-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Cactus',
|
'title' : 'First Snow',
|
||||||
'preview': 'assets/images/etc/cactus.jpg'
|
'preview': 'assets/images/profile/first-snow-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Road Trip',
|
'title' : 'Lago di Braies',
|
||||||
'preview': 'assets/images/etc/road-trip.jpg'
|
'preview': 'assets/images/profile/lago-di-braies-small.jpg'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'May 2015',
|
'name' : 'May 2018',
|
||||||
'info' : '7 Photos, 3 Videos',
|
'info' : '7 Photos, 3 Videos',
|
||||||
'media': [
|
'media': [
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Sunset',
|
'title' : 'Lago di Sorapis',
|
||||||
'preview': 'assets/images/etc/mountain-sunset.jpg'
|
'preview': 'assets/images/profile/lago-di-sorapis-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Lake',
|
'title' : 'Morain Lake',
|
||||||
'preview': 'assets/images/etc/mountain-lake.jpg'
|
'preview': 'assets/images/profile/morain-lake-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Hot air balloons',
|
'title' : 'Never Stop Changing',
|
||||||
'preview': 'assets/images/etc/air-balloons.jpg'
|
'preview': 'assets/images/profile/never-stop-changing-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Cactus',
|
'title' : 'Reaching',
|
||||||
'preview': 'assets/images/etc/cactus.jpg'
|
'preview': 'assets/images/profile/reaching-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Road Trip',
|
'title' : 'Yosemite',
|
||||||
'preview': 'assets/images/etc/road-trip.jpg'
|
'preview': 'assets/images/profile/yosemite-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Sunset',
|
'title' : 'A Walk Amongst Friends',
|
||||||
'preview': 'assets/images/etc/mountain-sunset.jpg'
|
'preview': 'assets/images/profile/a-walk-amongst-friends-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Lake',
|
'title' : 'Braies Lake',
|
||||||
'preview': 'assets/images/etc/mountain-lake.jpg'
|
'preview': 'assets/images/profile/braies-lake-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Hot air balloons',
|
'title' : 'Fall Glow',
|
||||||
'preview': 'assets/images/etc/air-balloons.jpg'
|
'preview': 'assets/images/profile/fall-glow-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Cactus',
|
'title' : 'First Snow',
|
||||||
'preview': 'assets/images/etc/cactus.jpg'
|
'preview': 'assets/images/profile/first-snow-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Road Trip',
|
'title' : 'Lago di Braies',
|
||||||
'preview': 'assets/images/etc/road-trip.jpg'
|
'preview': 'assets/images/profile/lago-di-braies-small.jpg'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name' : 'April 2015',
|
'name' : 'April 2018',
|
||||||
'info' : '5 Photos',
|
'info' : '7 Photos',
|
||||||
'media': [
|
'media': [
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Sunset',
|
'title' : 'Lago di Sorapis',
|
||||||
'preview': 'assets/images/etc/mountain-sunset.jpg'
|
'preview': 'assets/images/profile/lago-di-sorapis-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Lake',
|
'title' : 'Morain Lake',
|
||||||
'preview': 'assets/images/etc/mountain-lake.jpg'
|
'preview': 'assets/images/profile/morain-lake-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Hot air balloons',
|
'title' : 'Never Stop Changing',
|
||||||
'preview': 'assets/images/etc/air-balloons.jpg'
|
'preview': 'assets/images/profile/never-stop-changing-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Cactus',
|
'title' : 'Reaching',
|
||||||
'preview': 'assets/images/etc/cactus.jpg'
|
'preview': 'assets/images/profile/reaching-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Road Trip',
|
'title' : 'Yosemite',
|
||||||
'preview': 'assets/images/etc/road-trip.jpg'
|
'preview': 'assets/images/profile/yosemite-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Sunset',
|
'title' : 'A Walk Amongst Friends',
|
||||||
'preview': 'assets/images/etc/mountain-sunset.jpg'
|
'preview': 'assets/images/profile/a-walk-amongst-friends-small.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'type' : 'photo',
|
'type' : 'photo',
|
||||||
'title' : 'Mountain Lake',
|
'title' : 'Braies Lake',
|
||||||
'preview': 'assets/images/etc/mountain-lake.jpg'
|
'preview': 'assets/images/profile/braies-lake-small.jpg'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -270,10 +270,10 @@ export class ProfileFakeDb
|
|||||||
|
|
||||||
public static about = {
|
public static about = {
|
||||||
'general': {
|
'general': {
|
||||||
'gender' : 'Female',
|
'gender' : 'Male',
|
||||||
'birthday' : 'May 8th, 1988',
|
'birthday' : 'February 30th, 1974',
|
||||||
'locations': [
|
'locations': [
|
||||||
'Istanbul, Turkey',
|
'London, UK',
|
||||||
'New York, USA'
|
'New York, USA'
|
||||||
],
|
],
|
||||||
'about' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget pharetra felis, sed ullamcorper dui. Sed et elementum neque. Vestibulum pellente viverra ultrices. Etiam justo augue, vehicula ac gravida a, interdum sit amet nisl. Integer vitae nisi id nibh dictum mollis in vitae tortor.'
|
'about' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis eget pharetra felis, sed ullamcorper dui. Sed et elementum neque. Vestibulum pellente viverra ultrices. Etiam justo augue, vehicula ac gravida a, interdum sit amet nisl. Integer vitae nisi id nibh dictum mollis in vitae tortor.'
|
||||||
@@ -308,19 +308,16 @@ export class ProfileFakeDb
|
|||||||
},
|
},
|
||||||
'groups' : [
|
'groups' : [
|
||||||
{
|
{
|
||||||
'logo' : 'assets/images/logos/android.png',
|
|
||||||
'name' : 'Android',
|
'name' : 'Android',
|
||||||
'category': 'Technology',
|
'category': 'Technology',
|
||||||
'members' : '1.856.546'
|
'members' : '1.856.546'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'logo' : 'assets/images/logos/google.png',
|
|
||||||
'name' : 'Google',
|
'name' : 'Google',
|
||||||
'category': 'Web',
|
'category': 'Web',
|
||||||
'members' : '1.226.121'
|
'members' : '1.226.121'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'logo' : 'assets/images/logos/fallout.png',
|
|
||||||
'name' : 'Fallout',
|
'name' : 'Fallout',
|
||||||
'category': 'Games',
|
'category': 'Games',
|
||||||
'members' : '526.142'
|
'members' : '526.142'
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ export class QuickPanelFakeDb
|
|||||||
public static notes = [
|
public static notes = [
|
||||||
{
|
{
|
||||||
'title' : 'Best songs to listen while working',
|
'title' : 'Best songs to listen while working',
|
||||||
'detail': 'Last edit: May 8th, 2015'
|
'detail': 'Last edit: May 8th, 2018'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'title' : 'Useful subreddits',
|
'title' : 'Useful subreddits',
|
||||||
'detail': 'Last edit: January 12th, 2015'
|
'detail': 'Last edit: January 12th, 2018'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user