Merge 'master' into skeleton

This commit is contained in:
sercan 2018-10-19 09:04:15 +03:00
commit bc2b4aefac
141 changed files with 8036 additions and 2561 deletions

16
CREDITS Normal file
View 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

View File

@ -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

View File

@ -48,7 +48,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 +103,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": [
@ -122,12 +129,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": {

View File

@ -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!');
}); });
}); });

View File

@ -1,11 +1,11 @@
import { browser, by, element } from 'protractor'; import { browser, by, element } from 'protractor';
export class Fuse2Page { export class FusePage {
navigateTo(): any { navigateTo(): any {
return browser.get('/'); return browser.get('/');
} }
getParagraphText(): any { getParagraphText(): any {
return element(by.css('app-root h1')).getText(); return element(by.css('app #main')).getText();
} }
} }

4421
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "fuse", "name": "fuse",
"version": "6.3.0", "version": "7.0.0",
"license": "https://themeforest.net/licenses/terms/regular", "license": "https://themeforest.net/licenses/terms/regular",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
@ -18,20 +18,20 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@agm/core": "1.0.0-beta.3", "@agm/core": "1.0.0-beta.5",
"@angular/animations": "6.1.6", "@angular/animations": "7.0.0",
"@angular/cdk": "6.4.6", "@angular/cdk": "7.0.0",
"@angular/common": "6.1.6", "@angular/common": "7.0.0",
"@angular/compiler": "6.1.6", "@angular/compiler": "7.0.0",
"@angular/core": "6.1.6", "@angular/core": "7.0.0",
"@angular/flex-layout": "6.0.0-beta.16", "@angular/flex-layout": "7.0.0-beta.19",
"@angular/forms": "6.1.6", "@angular/forms": "7.0.0",
"@angular/http": "6.1.6", "@angular/http": "7.0.0",
"@angular/material": "6.4.6", "@angular/material": "7.0.0",
"@angular/material-moment-adapter": "6.4.6", "@angular/material-moment-adapter": "7.0.0",
"@angular/platform-browser": "6.1.6", "@angular/platform-browser": "7.0.0",
"@angular/platform-browser-dynamic": "6.1.6", "@angular/platform-browser-dynamic": "7.0.0",
"@angular/router": "6.1.6", "@angular/router": "7.0.0",
"@ngrx/effects": "6.1.0", "@ngrx/effects": "6.1.0",
"@ngrx/router-store": "6.1.0", "@ngrx/router-store": "6.1.0",
"@ngrx/store": "6.1.0", "@ngrx/store": "6.1.0",
@ -40,50 +40,51 @@
"@swimlane/dragula": "3.7.3", "@swimlane/dragula": "3.7.3",
"@swimlane/ngx-charts": "9.0.0", "@swimlane/ngx-charts": "9.0.0",
"@swimlane/ngx-datatable": "13.1.0", "@swimlane/ngx-datatable": "13.1.0",
"@swimlane/ngx-dnd": "5.0.6", "@swimlane/ngx-dnd": "5.1.0",
"@types/prismjs": "1.9.0", "@types/prismjs": "1.9.0",
"angular-calendar": "0.25.2", "angular-calendar": "0.26.3",
"angular-in-memory-web-api": "0.6.1", "angular-in-memory-web-api": "0.6.1",
"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.5.7",
"d3": "5.7.0", "d3": "5.7.0",
"date-fns": "1.29.0",
"hammerjs": "2.0.8", "hammerjs": "2.0.8",
"lodash": "4.17.10", "lodash": "4.17.11",
"moment": "2.22.2", "moment": "2.22.2",
"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.6.0", "ngx-color-picker": "6.7.0",
"ngx-cookie-service": "1.0.10", "ngx-cookie-service": "1.0.10",
"perfect-scrollbar": "1.4.0", "perfect-scrollbar": "1.4.0",
"prismjs": "1.15.0", "prismjs": "1.15.0",
"rxjs": "6.2.2", "rxjs": "6.3.3",
"rxjs-compat": "6.2.2", "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.26"
}, },
"devDependencies": { "devDependencies": {
"@angular/cli": "6.1.5", "@angular/cli": "7.0.1",
"@angular/compiler-cli": "6.1.6", "@angular/compiler-cli": "7.0.0",
"@angular/language-service": "6.1.6", "@angular/language-service": "7.0.0",
"@angular-devkit/build-angular": "0.7.5", "@angular-devkit/build-angular": "0.10.1",
"@angularclass/hmr": "2.1.3", "@angularclass/hmr": "2.1.3",
"@types/jasmine": "2.8.8", "@types/jasmine": "2.8.9",
"@types/jasminewd2": "2.0.3", "@types/jasminewd2": "2.0.5",
"@types/lodash": "4.14.116", "@types/lodash": "4.14.117",
"@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.0.0",
"karma-chrome-launcher": "2.2.0", "karma-chrome-launcher": "2.2.0",
"karma-coverage-istanbul-reporter": "2.0.2", "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.4.0", "protractor": "5.4.1",
"ts-node": "5.0.1", "ts-node": "7.0.1",
"tslint": "5.9.1", "tslint": "5.11.0",
"typescript": "2.7.2", "typescript": "3.1.3",
"webpack-bundle-analyzer": "2.13.1" "webpack-bundle-analyzer": "3.0.3"
} }
} }

View File

@ -37,7 +37,7 @@
velit. velit.
</p> </p>
<img class="mt-24 w-100-p" src="assets/images/etc/early-sunrise.jpg" style="max-width: 640px"> <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"> <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> <em>Nullam tincidunt sed purus eu placerat. Donec id dictum erat. Etiam enim ex, dapibus et tortor id.</em>

View File

@ -1,14 +1,15 @@
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';
@Component({ @Component({
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();
});
} }
} }

View File

@ -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
// ----------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------
@ -319,6 +356,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 +410,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);
} }
} }

View File

@ -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();
} }

View File

@ -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();
} }
} }

View File

@ -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();
} }
} }

View File

@ -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;
} }

View File

@ -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">

View File

@ -2,7 +2,7 @@
:host { :host {
@include media-breakpoint-down('sm') { @include media-breakpoint('lt-md') {
#fuse-shortcuts { #fuse-shortcuts {

View File

@ -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,6 +105,7 @@ 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(() => {

View File

@ -16,7 +16,7 @@ fuse-sidebar {
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);
@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;

View File

@ -1,5 +1,5 @@
import { import {
ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, RendererStyleFlags2, ViewEncapsulation ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, Renderer2, ViewEncapsulation
} from '@angular/core'; } 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 { ObservableMedia } from '@angular/flex-layout';
@ -174,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...
@ -320,6 +320,7 @@ export class FuseSidebarComponent implements OnInit, OnDestroy
// Get the active status // Get the active status
const isActive = this._observableMedia.isActive(this.lockedOpen); const isActive = this._observableMedia.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 )
{ {
@ -434,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');
} }

View File

@ -30,7 +30,7 @@ fuse-theme-options {
.title { .title {
font-size: 20px; font-size: 20px;
font-weight: 500; font-weight: 600;
padding-left: 4px; padding-left: 4px;
} }
} }
@ -56,12 +56,12 @@ fuse-theme-options {
margin: 0; margin: 0;
padding: 0 8px; padding: 0 8px;
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 600;
} }
h3 { h3 {
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 600;
margin: 24px 0 16px 0; margin: 24px 0 16px 0;
padding: 0; padding: 0;

View File

@ -118,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

View File

@ -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;

View File

@ -8,6 +8,7 @@
> .fuse-widget-front, > .fuse-widget-front,
> .fuse-widget-back { > .fuse-widget-back {
background: map-get($background, card); background: map-get($background, card);
border-color: map-get($foreground, divider);
} }
} }
} }

View File

@ -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]);
}
});
} }
/** /**

View File

@ -17,11 +17,10 @@
@include mat-core(); @include mat-core();
// 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";
@ -32,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

View File

@ -2,4 +2,4 @@
@import '~@angular/material/theming'; @import '~@angular/material/theming';
// Breakpoint mixins // Breakpoint mixins
@import "mixins/breakpoints"; @import "partials/breakpoints";

View File

@ -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;
}
}

View File

@ -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 {
@ -30,9 +58,9 @@
background-color: rgba(0, 0, 0, 0.12); background-color: rgba(0, 0, 0, 0.12);
} }
// Fix: "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 {

View 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
}
}
}

View File

@ -8,6 +8,7 @@
.fuse-card { .fuse-card {
background: map-get($background, card); background: map-get($background, card);
border-color: map-get($foreground, divider);
.card-divider { .card-divider {
border-top: 1px solid map-get($foreground, divider); border-top: 1px solid map-get($foreground, divider);
@ -21,8 +22,8 @@
.fuse-card { .fuse-card {
max-width: 320px; max-width: 320px;
min-width: 320px; min-width: 320px;
border-radius: 2px; border-radius: 8px;
@include mat-elevation(2); border: 1px solid;
&.variable-width { &.variable-width {
min-width: 0; min-width: 0;

View 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;
}

View File

@ -1,23 +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;
}
body {
// Boxed
&.boxed {
max-width: 1200px;
margin: 0 auto;
@include mat-elevation(8);
}
}

View File

@ -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;
@ -24,11 +24,11 @@
// ----------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------
// @ 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;
@ -78,11 +78,11 @@
// ----------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------
// @ 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) {

View File

@ -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 {

View File

@ -172,7 +172,7 @@
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;
&.square { &.square {
@ -230,13 +230,12 @@ mat-icon.status {
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";
@ -245,7 +244,6 @@ mat-icon.status {
&.offline { &.offline {
color: #646464; color: #646464;
background-color: #FFFFFF;
&:before { &:before {
content: "not_interested"; content: "not_interested";
@ -287,14 +285,14 @@ mat-icon.status {
.title { .title {
font-size: 13px; font-size: 13px;
font-weight: 500; font-weight: 600;
line-height: 1; line-height: 1;
} }
} }
.subheader { .subheader {
font-size: 13px; font-size: 13px;
font-weight: 500; font-weight: 600;
margin-top: 8px; margin-top: 8px;
} }
@ -310,8 +308,9 @@ mat-icon.status {
position: relative; position: relative;
display: inline-flex; display: inline-flex;
flex-direction: row; flex-direction: row;
@include mat-elevation(1);
padding: 0 8px; padding: 0 8px;
border-radius: 4px;
@include mat-elevation(1);
.pagination-item { .pagination-item {
display: flex; display: flex;
@ -364,7 +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;
} }
.value { .value {
@ -406,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;
} }
@ -423,7 +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;
} }
.value { .value {
@ -436,7 +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;
text-align: center; text-align: center;
} }
@ -471,7 +470,7 @@ mat-icon.status {
.subtitle { .subtitle {
font-size: 17px; font-size: 17px;
font-weight: 500; font-weight: 600;
} }
} }
@ -481,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 {
@ -546,7 +545,7 @@ table {
th { th {
padding: 16px 8px; padding: 16px 8px;
font-weight: 500; font-weight: 600;
white-space: nowrap; white-space: nowrap;
&:first-child { &:first-child {

View File

@ -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;
@ -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;
} }
} }
} }

View File

@ -18,6 +18,7 @@
> .content-card { > .content-card {
background: map-get($background, card); background: map-get($background, card);
border-radius: 8px 8px 0 0;
> .toolbar { > .toolbar {
border-bottom-color: map-get($foreground, divider); border-bottom-color: map-get($foreground, divider);
@ -34,6 +35,7 @@
> .content-card { > .content-card {
background: map-get($background, card); background: map-get($background, card);
border-radius: 8px 8px 0 0;
> .toolbar { > .toolbar {
border-bottom-color: map-get($foreground, divider); border-bottom-color: map-get($foreground, divider);
@ -79,15 +81,11 @@
// @ Page Layouts // @ 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;
@ -109,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
@ -136,12 +130,6 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
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 {
@ -149,7 +137,7 @@ $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;
@ -303,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 {
@ -334,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 {
@ -347,7 +323,7 @@ $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;
@ -379,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);
} }
@ -566,7 +542,7 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
z-index: 3; z-index: 3;
min-width: 0; min-width: 0;
width: 100%; width: 100%;
@include mat-elevation(7); @include mat-elevation(1);
> .header { > .header {
height: $header-height; height: $header-height;
@ -625,6 +601,11 @@ $carded-header-height-without-toolbar-sm: $carded-header-height-sm - $carded-too
flex: 1 1 auto; flex: 1 1 auto;
overflow: auto; overflow: auto;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
> .content {
border-radius: 8px;
@include mat-elevation(1);
}
} }
} }
} }
@ -685,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 {

View File

@ -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;
} }

View File

@ -1,76 +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;
}
}
// 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;
}

View File

@ -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;
} }
} }

View File

@ -1,9 +0,0 @@
.toolbar {
.toolbar-separator {
height: 48px;
width: 1px;
border-right: 1px solid rgba(0, 0, 0, 0.12);
margin: 0 12px;
}
}

View File

@ -41,7 +41,7 @@
// ----------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------
html { html {
font-size: 62.5%; font-size: 62.5%;
font-family: 'Roboto', 'Helvetica Neue', 'Arial', sans-serif; font-family: 'Nunito', '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;
} }
@ -89,7 +89,7 @@ h6, .h6 {
a { a {
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;
@ -304,7 +304,7 @@ strong {
padding: 4px 8px; padding: 4px 8px;
margin: 0 8px; margin: 0 8px;
font-size: 11px; font-size: 11px;
font-weight: 500; font-weight: 600;
white-space: nowrap; white-space: nowrap;
} }
@ -399,6 +399,10 @@ strong {
li { li {
margin-bottom: 6px; margin-bottom: 6px;
letter-spacing: 0.015em; letter-spacing: 0.015em;
ul {
margin-top: 6px;
}
} }
} }
} }

View File

@ -23,6 +23,17 @@
opacity: .90; opacity: .90;
z-index: 998; z-index: 998;
&.right-side-panel {
@include media-breakpoint('gt-md') {
right: 70px;
}
}
&.side-panel-hidden {
right: 0 !important;
}
mat-icon { mat-icon {
animation: rotating 3s linear infinite; animation: rotating 3s linear infinite;
} }

View File

@ -73,9 +73,12 @@ export class AppComponent implements OnInit, OnDestroy
this._translateService.use('en'); this._translateService.use('en');
/** /**
* ------------------------------------------------------------------ * ----------------------------------------------------------------------------------------------------
* ngxTranslate Fix Start * ngxTranslate Fix Start
* ------------------------------------------------------------------ * ----------------------------------------------------------------------------------------------------
*/
/**
* If you are using a language other than the default one, i.e. Turkish in this case, * 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 * you may encounter an issue where some of the components are not actually being
* translated when your app first initialized. * translated when your app first initialized.
@ -97,9 +100,9 @@ export class AppComponent implements OnInit, OnDestroy
*/ */
/** /**
* ------------------------------------------------------------------ * ----------------------------------------------------------------------------------------------------
* ngxTranslate Fix End * 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

View File

@ -63,7 +63,11 @@ $custom_palettes: (
// Force the input field font sizes to 16px // Force the input field font sizes to 16px
$typography: mat-typography-config( $typography: mat-typography-config(
$input: mat-typography-level(16px, 1.125, 400) $font-family: 'Nunito, 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 // Setup the typography

View File

@ -11,9 +11,9 @@ import { ContentComponent } from 'app/layout/components/content/content.componen
], ],
imports : [ imports : [
RouterModule, RouterModule,
FuseSharedModule, FuseSharedModule
], ],
exports: [ exports : [
ContentComponent ContentComponent
] ]
}) })

View File

@ -15,7 +15,6 @@
<a mat-button routerLink="/documentation/changelog">Changelog</a> <a mat-button routerLink="/documentation/changelog">Changelog</a>
</div> </div>
</div> </div>
</mat-toolbar> </mat-toolbar>

View File

@ -36,7 +36,7 @@
</div> </div>
<div class="navbar-content"> <div class="navbar-content">
<fuse-navigation layout="vertical"></fuse-navigation> <fuse-navigation class="material2" layout="vertical"></fuse-navigation>
</div> </div>
</div> </div>

View File

@ -61,6 +61,19 @@ fuse-sidebar {
.navbar-content { .navbar-content {
padding-top: 0; padding-top: 0;
// Material 2 specific style
.material2 {
.nav-item {
.nav-link {
border-radius: 20px;
margin: 0 12px;
padding: 0 12px;
}
}
}
} }
} }
} }

View File

@ -22,6 +22,22 @@ fuse-sidebar {
} }
} }
} }
.navbar-content {
// Material 2 specific style
.material2 {
.nav-item {
.nav-link {
border-radius: 20px;
margin: 0 12px;
padding: 0 12px;
}
}
}
}
} }
} }
} }

View File

@ -63,7 +63,7 @@
class="language-button" class="language-button"
[matMenuTriggerFor]="languageMenu"> [matMenuTriggerFor]="languageMenu">
<div fxLayout="row" fxLayoutAlign="center center"> <div fxLayout="row" fxLayoutAlign="center center">
<img class="flag mr-8" [src]="'assets/images/flags/'+selectedLanguage.flag+'.png'"> <img class="flag mr-8" [src]="'assets/icons/flags/'+selectedLanguage.flag+'.png'">
<span class="iso text-uppercase">{{selectedLanguage.id}}</span> <span class="iso text-uppercase">{{selectedLanguage.id}}</span>
</div> </div>
</button> </button>
@ -72,7 +72,7 @@
<button mat-menu-item *ngFor="let lang of languages" (click)="setLanguage(lang)"> <button mat-menu-item *ngFor="let lang of languages" (click)="setLanguage(lang)">
<span fxLayout="row" fxLayoutAlign="start center"> <span fxLayout="row" fxLayoutAlign="start center">
<img class="flag mr-16" [src]="'assets/images/flags/'+lang.flag+'.png'"> <img class="flag mr-16" [src]="'assets/icons/flags/'+lang.flag+'.png'">
<span class="iso">{{lang.title}}</span> <span class="iso">{{lang.title}}</span>
</span> </span>
</button> </button>

View File

@ -33,7 +33,7 @@ toolbar {
min-width: 64px; min-width: 64px;
height: 64px; height: 64px;
@include media-breakpoint-down('xs') { @include media-breakpoint('xs') {
height: 56px; height: 56px;
} }
} }
@ -47,7 +47,7 @@ toolbar {
height: 64px; height: 64px;
width: 1px; width: 1px;
@include media-breakpoint-down('xs') { @include media-breakpoint('xs') {
height: 56px; height: 56px;
} }
} }

View File

@ -2,7 +2,10 @@
$foreground: map-get($theme, foreground); $foreground: map-get($theme, foreground);
.toolbar-separator { toolbar {
background: map-get($foreground, divider);
.toolbar-separator {
background: map-get($foreground, divider);
}
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 KiB

View File

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View File

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

View File

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

BIN
src/assets/images/cards/card1.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 44 KiB

BIN
src/assets/images/cards/card2-large.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 25 KiB

BIN
src/assets/images/cards/card2-medium.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/images/cards/card2-small.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
src/assets/images/cards/card2.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/assets/images/cards/card3.jpg Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Some files were not shown because too many files have changed in this diff Show More