mirror of
https://github.com/richard-loafle/fuse-angular.git
synced 2025-01-09 20:15:07 +00:00
New layout system (wip)
This commit is contained in:
parent
0ac4e6c220
commit
70d895c6ed
|
@ -1,13 +1,6 @@
|
|||
# Editor configuration, see http://editorconfig.org
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
max_line_length = off
|
||||
trim_trailing_whitespace = false
|
||||
charset=utf-8
|
||||
end_of_line=lf
|
||||
insert_final_newline=false
|
||||
indent_style=space
|
||||
indent_size=4
|
||||
|
|
|
@ -51,7 +51,7 @@ export class FuseSearchBarComponent implements OnInit, OnDestroy
|
|||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe(
|
||||
(config) => {
|
||||
this.toolbarColor = config.colorClasses.toolbar;
|
||||
this.toolbarColor = config.layout.toolbar.background;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ export class FuseShortcutsComponent implements OnInit, OnDestroy
|
|||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe(
|
||||
(config) => {
|
||||
this.toolbarColor = config.colorClasses.toolbar;
|
||||
this.toolbarColor = config.layout.toolbar.background;
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
@ -12,102 +12,162 @@
|
|||
|
||||
<div class="theme-options-panel-inner" fxLayout="column" fxLayoutAlign="start start">
|
||||
|
||||
<h3>Layout:</h3>
|
||||
<mat-radio-group [(ngModel)]="fuseConfig.layout.style" (ngModelChange)="onConfigChange()"
|
||||
fxLayout="column" fxLayout.gt-xs="row wrap" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="vertical">Vertical</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="horizontal">Horizontal</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<form [formGroup]="fuseConfigForm">
|
||||
|
||||
<h3>Navigation:</h3>
|
||||
<mat-radio-group [(ngModel)]="fuseConfig.layout.navigation" (ngModelChange)="onConfigChange()"
|
||||
fxLayout="column" fxLayout.gt-xs="row wrap" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="top">Top</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="left">Left</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="right">Right</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<!-- NAVIGATION STYLES -->
|
||||
<!--<h3>Navigation Style:</h3>
|
||||
<mat-radio-group [(ngModel)]="fuseConfig.layout.navigation.style"
|
||||
(ngModelChange)="onConfigChange(true)"
|
||||
fxLayout="column" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="vertical">Vertical</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="horizontal">Horizontal</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
-->
|
||||
<div formGroupName="layout">
|
||||
|
||||
<h3>Navigation Fold (for vertical navigation):</h3>
|
||||
<mat-slide-toggle [(ngModel)]="fuseConfig.layout.navigationFolded"
|
||||
(change)="onConfigChange()">
|
||||
Folded
|
||||
</mat-slide-toggle>
|
||||
<!-- VERTICAL LAYOUT STYLES -->
|
||||
<h3>Vertical Layout Styles:</h3>
|
||||
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="style">
|
||||
<mat-radio-button class="mr-8 mb-8" value="vertical-layout-1">Layout 1</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="vertical-layout-2">Layout 2</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="vertical-layout-3">Layout 3</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
<h3 class="mt-24">Toolbar:</h3>
|
||||
<mat-radio-group [(ngModel)]="fuseConfig.layout.toolbar" (ngModelChange)="onConfigChange()"
|
||||
fxLayout="column" fxLayout.gt-xs="row wrap" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<!-- HORIZONTAL LAYOUT STYLES -->
|
||||
<h3 class="mt-24">Horizontal Layout Styles:</h3>
|
||||
<mat-radio-group fxLayout="column" fxLayoutAlign="start start" formControlName="style">
|
||||
<mat-radio-button class="mr-8 mb-8" value="horizontal-layout-1">Layout 1</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="horizontal-layout-2">Layout 2</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
<h3 class="mt-24">Footer:</h3>
|
||||
<mat-radio-group [(ngModel)]="fuseConfig.layout.footer" (ngModelChange)="onConfigChange()"
|
||||
fxLayout="column" fxLayout.gt-xs="row wrap" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
<h3 class="mt-24">Layout Mode:</h3>
|
||||
<mat-radio-group [(ngModel)]="fuseConfig.layout.mode" (ngModelChange)="onConfigChange()"
|
||||
fxLayout="column" fxLayout.gt-xs="row wrap" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="boxed">Boxed</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="fullwidth">Fullwidth</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
<div formGroupName="navigation">
|
||||
|
||||
<mat-divider></mat-divider>
|
||||
<!-- NAVIGATION POSITIONS -->
|
||||
<h3 class="mt-32">Navigation Position:</h3>
|
||||
|
||||
<h3>Colors:</h3>
|
||||
<div class="colors">
|
||||
<!-- VERTICAL NAVIGATION POSITIONS -->
|
||||
<mat-radio-group formControlName="position"
|
||||
fxLayout="column" fxLayoutAlign="start start"
|
||||
*ngIf="fuseConfig.layout.style.startsWith('vertical')">
|
||||
<mat-radio-button class="mr-8 mb-8" value="left">Left</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="right">Right</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
<!-- HORIZONTAL NAVIGATION POSITIONS -->
|
||||
<mat-radio-group formControlName="position"
|
||||
fxLayout="column" fxLayoutAlign="start start"
|
||||
*ngIf="fuseConfig.layout.style.startsWith('horizontal')">
|
||||
<mat-radio-button class="mr-8 mb-8" value="left">Top</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
<!-- VERTICAL NAVIGATION FOLD -->
|
||||
<ng-container *ngIf="fuseConfig.layout.style.startsWith('vertical')">
|
||||
<h3 class="mt-24">Navigation Fold:</h3>
|
||||
<mat-slide-toggle formControlName="folded">
|
||||
Folded
|
||||
</mat-slide-toggle>
|
||||
</ng-container>
|
||||
|
||||
</div>
|
||||
|
||||
<div formGroupName="toolbar">
|
||||
|
||||
<!-- TOOLBAR -->
|
||||
<h3 class="mt-24">Toolbar:</h3>
|
||||
<mat-radio-group formControlName="position" fxLayout="column" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="below-sticky">Below Sticky</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
</div>
|
||||
|
||||
<div formGroupName="footer">
|
||||
|
||||
<!-- FOOTER -->
|
||||
<h3 class="mt-24">Footer:</h3>
|
||||
<mat-radio-group formControlName="position" fxLayout="column" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="above">Above</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="below">Below</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="below-sticky">Below Sticky</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="none">None</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- LAYOUT MODE -->
|
||||
<h3 class="mt-24">Layout Mode:</h3>
|
||||
<mat-radio-group formControlName="mode" fxLayout="column" fxLayoutAlign="start start">
|
||||
<mat-radio-button class="mr-8 mb-8" value="boxed">Boxed</mat-radio-button>
|
||||
<mat-radio-button class="mr-8 mb-8" value="fullwidth">Fullwidth</mat-radio-button>
|
||||
</mat-radio-group>
|
||||
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||
<h4 class="mr-8">Toolbar Color</h4>
|
||||
<fuse-material-color-picker [(selectedClass)]="fuseConfig.colorClasses.toolbar"
|
||||
(onValueChange)="onConfigChange()"></fuse-material-color-picker>
|
||||
</div>
|
||||
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||
<h4 class="mr-8">Navigation Bar Color</h4>
|
||||
<fuse-material-color-picker [(selectedClass)]="fuseConfig.colorClasses.navbar"
|
||||
(onValueChange)="onConfigChange()"></fuse-material-color-picker>
|
||||
<mat-divider></mat-divider>
|
||||
|
||||
<h3>Custom scrollbars:</h3>
|
||||
<mat-slide-toggle formControlName="customScrollbars">
|
||||
Enable custom scrollbars
|
||||
</mat-slide-toggle>
|
||||
|
||||
<mat-divider></mat-divider>
|
||||
|
||||
<h3>Colors:</h3>
|
||||
<div class="colors">
|
||||
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||
<h4 class="mr-8">Toolbar Color</h4>
|
||||
<fuse-material-color-picker
|
||||
[(selectedClass)]="fuseConfig.layout.toolbar.background"></fuse-material-color-picker>
|
||||
</div>
|
||||
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||
<h4 class="mr-8">Navigation Bar Color</h4>
|
||||
<fuse-material-color-picker
|
||||
[(selectedClass)]="fuseConfig.layout.navigation.background"></fuse-material-color-picker>
|
||||
</div>
|
||||
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||
<h4 class="mr-8">Footer Color</h4>
|
||||
<fuse-material-color-picker
|
||||
[(selectedClass)]="fuseConfig.layout.footer.background"></fuse-material-color-picker>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div fxFlex fxLayout="row" fxLayoutAlign="space-between center">
|
||||
<h4 class="mr-8">Footer Color</h4>
|
||||
<fuse-material-color-picker [(selectedClass)]="fuseConfig.colorClasses.footer"
|
||||
(onValueChange)="onConfigChange()"></fuse-material-color-picker>
|
||||
</div>
|
||||
<mat-divider></mat-divider>
|
||||
|
||||
</div>
|
||||
<h3>Router Animation:</h3>
|
||||
<mat-form-field class="w-100-p">
|
||||
<mat-select class="p-0" formControlName="routerAnimation">
|
||||
<mat-option value="none">
|
||||
None
|
||||
</mat-option>
|
||||
<mat-option value="slideUp">
|
||||
Slide up
|
||||
</mat-option>
|
||||
<mat-option value="slideDown">
|
||||
Slide down
|
||||
</mat-option>
|
||||
<mat-option value="slideRight">
|
||||
Slide right
|
||||
</mat-option>
|
||||
<mat-option value="slideLeft">
|
||||
Slide left
|
||||
</mat-option>
|
||||
<mat-option value="fadeIn">
|
||||
Fade in
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-divider></mat-divider>
|
||||
</form>
|
||||
|
||||
<h3>Router Animation:</h3>
|
||||
<mat-form-field class="w-100-p">
|
||||
<mat-select class="p-0" [(ngModel)]="fuseConfig.routerAnimation">
|
||||
<mat-option value="none">
|
||||
None
|
||||
</mat-option>
|
||||
<mat-option value="slideUp">
|
||||
Slide up
|
||||
</mat-option>
|
||||
<mat-option value="slideDown">
|
||||
Slide down
|
||||
</mat-option>
|
||||
<mat-option value="slideRight">
|
||||
Slide right
|
||||
</mat-option>
|
||||
<mat-option value="slideLeft">
|
||||
Slide left
|
||||
</mat-option>
|
||||
<mat-option value="fadeIn">
|
||||
Fade in
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Component, ElementRef, HostBinding, Input, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';
|
||||
import { style, animate, AnimationBuilder, AnimationPlayer } from '@angular/animations';
|
||||
import { FormBuilder, FormGroup } from '@angular/forms';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
|
@ -15,8 +16,9 @@ import { FuseNavigationService } from '@fuse/components/navigation/navigation.se
|
|||
})
|
||||
export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
||||
{
|
||||
@Input()
|
||||
navigation;
|
||||
fuseConfig: any;
|
||||
fuseConfigForm: FormGroup;
|
||||
player: AnimationPlayer;
|
||||
|
||||
@ViewChild('openButton')
|
||||
openButton;
|
||||
|
@ -27,16 +29,15 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||
@ViewChild('overlay')
|
||||
overlay: ElementRef;
|
||||
|
||||
player: AnimationPlayer;
|
||||
fuseConfig: any;
|
||||
|
||||
@HostBinding('class.bar-closed') barClosed: boolean;
|
||||
@HostBinding('class.bar-closed')
|
||||
barClosed: boolean;
|
||||
|
||||
// Private
|
||||
private _unsubscribeAll: Subject<any>;
|
||||
|
||||
constructor(
|
||||
private _animationBuilder: AnimationBuilder,
|
||||
private _formBuilder: FormBuilder,
|
||||
private _fuseConfigService: FuseConfigService,
|
||||
private _fuseNavigationService: FuseNavigationService,
|
||||
private _renderer: Renderer2
|
||||
|
@ -66,16 +67,44 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||
}
|
||||
);
|
||||
|
||||
// Build the config form
|
||||
// noinspection TypeScriptValidateTypes
|
||||
this.fuseConfigForm = this._formBuilder.group({
|
||||
layout : this._formBuilder.group({
|
||||
style : this.fuseConfig.layout.style,
|
||||
navigation: this._formBuilder.group({
|
||||
position : this.fuseConfig.layout.navigation.position,
|
||||
folded : this.fuseConfig.layout.navigation.folded,
|
||||
background: this.fuseConfig.layout.navigation.background
|
||||
}),
|
||||
toolbar : this._formBuilder.group({
|
||||
position : this.fuseConfig.layout.toolbar.position,
|
||||
background: this.fuseConfig.layout.toolbar.background
|
||||
}),
|
||||
footer : this._formBuilder.group({
|
||||
position : this.fuseConfig.layout.footer.position,
|
||||
background: this.fuseConfig.layout.footer.background
|
||||
}),
|
||||
mode : this.fuseConfig.layout.mode
|
||||
}),
|
||||
customScrollbars: this.fuseConfig.customScrollbars,
|
||||
routerAnimation : this.fuseConfig.routerAnimation
|
||||
});
|
||||
|
||||
// Subscribe to the form value changes
|
||||
this.fuseConfigForm.valueChanges.subscribe((config) => {
|
||||
|
||||
// Update the config
|
||||
this._fuseConfigService.config = config;
|
||||
});
|
||||
|
||||
// Listen for the overlay's click event
|
||||
this._renderer.listen(this.overlay.nativeElement, 'click', () => {
|
||||
this.closeBar();
|
||||
});
|
||||
|
||||
// Get the nav model and add customize nav item
|
||||
// that opens the bar programmatically
|
||||
const nav: any = this.navigation;
|
||||
|
||||
nav.push({
|
||||
// Add customize nav item that opens the bar programmatically
|
||||
const customFunctionNavItem = {
|
||||
'id' : 'custom-function',
|
||||
'title' : 'Custom Function',
|
||||
'type' : 'group',
|
||||
|
@ -90,7 +119,9 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
};
|
||||
|
||||
this._fuseNavigationService.addNavigationItem(customFunctionNavItem, 'end');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,6 +132,9 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||
// Unsubscribe from all subscriptions
|
||||
this._unsubscribeAll.next();
|
||||
this._unsubscribeAll.complete();
|
||||
|
||||
// Remove the custom function menu
|
||||
this._fuseNavigationService.removeNavigationItem('custom-function');
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
@ -110,9 +144,50 @@ export class FuseThemeOptionsComponent implements OnInit, OnDestroy
|
|||
/**
|
||||
* On config change
|
||||
*/
|
||||
onConfigChange(): void
|
||||
onConfigChange(layoutChanged = false): void
|
||||
{
|
||||
this._fuseConfigService.config = this.fuseConfig;
|
||||
|
||||
// If the layout changed, reset the settings
|
||||
if ( layoutChanged )
|
||||
{
|
||||
this.resetConfig();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the config correctly
|
||||
*/
|
||||
resetConfig(): void
|
||||
{
|
||||
// Check the layout style and reset the
|
||||
// configuration properly so we don't end
|
||||
// up with options that don't work with
|
||||
// selected layout style
|
||||
switch ( this.fuseConfig.layout.style )
|
||||
{
|
||||
// Vertical
|
||||
|
||||
// Layout 1
|
||||
case 'vertical-layout-1':
|
||||
{
|
||||
this._fuseConfigService.config = {
|
||||
layout: {
|
||||
style : 'vertical-layout-1',
|
||||
navigation: {
|
||||
position: 'left'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default :
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||
import { MatButtonModule, MatDividerModule, MatFormFieldModule, MatIconModule, MatOptionModule, MatRadioModule, MatSelectModule, MatSlideToggleModule } from '@angular/material';
|
||||
|
||||
|
@ -14,6 +14,7 @@ import { FuseThemeOptionsComponent } from '@fuse/components/theme-options/theme-
|
|||
imports : [
|
||||
CommonModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
|
||||
FlexLayoutModule,
|
||||
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
html,
|
||||
body {
|
||||
|
||||
> mat-sidenav-container {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
display: flex;
|
||||
flex: 1 0 auto;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-height: 100%;
|
||||
min-height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
22
src/@fuse/types/fuse-config.ts
Normal file
22
src/@fuse/types/fuse-config.ts
Normal file
|
@ -0,0 +1,22 @@
|
|||
export interface FuseConfig
|
||||
{
|
||||
layout: {
|
||||
style: string,
|
||||
navigation: {
|
||||
position: 'left' | 'right' | 'top' | 'none',
|
||||
folded: boolean,
|
||||
background: string
|
||||
},
|
||||
toolbar: {
|
||||
position: 'above' | 'above-sticky' | 'below' | 'below-sticky' | 'none',
|
||||
background: string
|
||||
}
|
||||
footer: {
|
||||
position: 'above' | 'below' | 'below-sticky' | 'none',
|
||||
background: string
|
||||
},
|
||||
mode: 'fullwidth' | 'boxed'
|
||||
};
|
||||
customScrollbars: boolean;
|
||||
routerAnimation: string;
|
||||
}
|
1
src/@fuse/types/index.ts
Normal file
1
src/@fuse/types/index.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export * from './fuse-config';
|
|
@ -1 +1,14 @@
|
|||
<vertical-nav-basic-layout></vertical-nav-basic-layout>
|
||||
<!-- VERTICAL LAYOUT 1 -->
|
||||
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-1'">
|
||||
<vertical-layout-1></vertical-layout-1>
|
||||
</ng-container>
|
||||
|
||||
<!-- VERTICAL LAYOUT 2 -->
|
||||
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-2'">
|
||||
<vertical-layout-2></vertical-layout-2>
|
||||
</ng-container>
|
||||
|
||||
<!-- VERTICAL LAYOUT 3 -->
|
||||
<ng-container *ngIf="fuseConfig.layout.style === 'vertical-layout-3'">
|
||||
<vertical-layout-3></vertical-layout-3>
|
||||
</ng-container>
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
:host {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
min-width: 0;
|
||||
}
|
|
@ -1,9 +1,12 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
import { FuseConfigService } from '@fuse/services/config.service';
|
||||
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||
import { FuseSplashScreenService } from '@fuse/services/splash-screen.service';
|
||||
import { FuseTranslationLoaderService } from '@fuse/services/translation-loader.service';
|
||||
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||
|
||||
import { navigation } from 'app/navigation/navigation';
|
||||
import { locale as navigationEnglish } from 'app/navigation/i18n/en';
|
||||
|
@ -14,28 +17,40 @@ import { locale as navigationTurkish } from 'app/navigation/i18n/tr';
|
|||
templateUrl: './app.component.html',
|
||||
styleUrls : ['./app.component.scss']
|
||||
})
|
||||
export class AppComponent
|
||||
export class AppComponent implements OnInit, OnDestroy
|
||||
{
|
||||
navigation: any;
|
||||
fuseConfig: any;
|
||||
|
||||
// Private
|
||||
private _unsubscribeAll: Subject<any>;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {FuseConfigService} _fuseConfigService
|
||||
* @param {FuseNavigationService} _fuseNavigationService
|
||||
* @param {FuseSplashScreenService} _fuseSplashScreenService
|
||||
* @param {FuseTranslationLoaderService} _fuseTranslationLoaderService
|
||||
* @param {TranslateService} _translateService
|
||||
*/
|
||||
constructor(
|
||||
private _fuseConfigService: FuseConfigService,
|
||||
private _fuseNavigationService: FuseNavigationService,
|
||||
private _fuseSplashScreenService: FuseSplashScreenService,
|
||||
private _fuseTranslationLoaderService: FuseTranslationLoaderService,
|
||||
private _translateService: TranslateService
|
||||
)
|
||||
{
|
||||
// Navigation
|
||||
// Get default navigation
|
||||
this.navigation = navigation;
|
||||
|
||||
// Register the navigation to the service
|
||||
this._fuseNavigationService.register('main', this.navigation);
|
||||
|
||||
// Set the main navigation as our current navigation
|
||||
this._fuseNavigationService.setCurrentNavigation('main');
|
||||
|
||||
// Add languages
|
||||
this._translateService.addLangs(['en', 'tr']);
|
||||
|
||||
|
@ -47,5 +62,35 @@ export class AppComponent
|
|||
|
||||
// Use a language
|
||||
this._translateService.use('en');
|
||||
|
||||
// Set the private defaults
|
||||
this._unsubscribeAll = new Subject();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* On init
|
||||
*/
|
||||
ngOnInit(): void
|
||||
{
|
||||
// Subscribe to config changes
|
||||
this._fuseConfigService.config
|
||||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe((config) => {
|
||||
this.fuseConfig = config;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* On destroy
|
||||
*/
|
||||
ngOnDestroy(): void
|
||||
{
|
||||
// Unsubscribe from all subscriptions
|
||||
this._unsubscribeAll.next();
|
||||
this._unsubscribeAll.complete();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import { FuseConfig } from '@fuse/types';
|
||||
|
||||
/**
|
||||
* Default Fuse Configuration
|
||||
*
|
||||
|
@ -5,23 +7,24 @@
|
|||
* basis. See `app/main/pages/authentication/login/login.component.ts` constructor method to learn more
|
||||
* about changing these options per component basis.
|
||||
*/
|
||||
export const fuseConfig = {
|
||||
|
||||
export const fuseConfig: FuseConfig = {
|
||||
layout : {
|
||||
style : 'vertical-basic',
|
||||
style : 'vertical-layout-1',
|
||||
navigation: {
|
||||
position: 'left',
|
||||
folded : false
|
||||
position : 'left',
|
||||
folded : false,
|
||||
background: 'mat-fuse-dark-700-bg'
|
||||
},
|
||||
// navigation : 'left', // 'right', 'left', 'top', 'none'
|
||||
// navigationFolded: false, // true, false
|
||||
toolbar : 'below', // 'above', 'below', 'none'
|
||||
footer : 'below', // 'above', 'below', 'none'
|
||||
mode : 'fullwidth' // 'boxed', 'fullwidth'
|
||||
},
|
||||
colorClasses : {
|
||||
toolbar: 'mat-white-500-bg',
|
||||
navbar : 'mat-fuse-dark-700-bg',
|
||||
footer : 'mat-fuse-dark-900-bg'
|
||||
toolbar : {
|
||||
position : 'below',
|
||||
background: 'mat-white-500-bg'
|
||||
},
|
||||
footer : {
|
||||
position : 'below',
|
||||
background: 'mat-fuse-dark-900-bg'
|
||||
},
|
||||
mode : 'fullwidth'
|
||||
},
|
||||
customScrollbars: true,
|
||||
routerAnimation : 'fadeIn' // fadeIn, slideUp, slideDown, slideRight, slideLeft, none
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
:host {
|
||||
z-index: 1;
|
||||
}
|
11
src/app/layout/components/content/content.component.scss
Normal file
11
src/app/layout/components/content/content.component.scss
Normal file
|
@ -0,0 +1,11 @@
|
|||
content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1 1 auto;
|
||||
z-index: 1;
|
||||
|
||||
> *:not(router-outlet) {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import { Component, HostBinding, OnDestroy, OnInit } from '@angular/core';
|
||||
import { Component, HostBinding, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { ActivatedRoute, NavigationEnd, Router } from '@angular/router';
|
||||
import { Subject } from 'rxjs';
|
||||
import { filter, map } from 'rxjs/operators';
|
||||
|
@ -8,10 +8,11 @@ import { fuseAnimations } from '@fuse/animations';
|
|||
import { FuseConfigService } from '@fuse/services/config.service';
|
||||
|
||||
@Component({
|
||||
selector : 'content',
|
||||
templateUrl: './content.component.html',
|
||||
styleUrls : ['./content.component.scss'],
|
||||
animations : fuseAnimations
|
||||
selector : 'content',
|
||||
templateUrl : './content.component.html',
|
||||
styleUrls : ['./content.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
animations : fuseAnimations
|
||||
})
|
||||
export class ContentComponent implements OnInit, OnDestroy
|
||||
{
|
|
@ -3,7 +3,7 @@ import { RouterModule } from '@angular/router';
|
|||
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ContentComponent } from 'app/layout/blocks/content/content.component';
|
||||
import { ContentComponent } from 'app/layout/components/content/content.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
|
@ -1,6 +1,6 @@
|
|||
:host {
|
||||
display: flex;
|
||||
flex: 0 1 auto;
|
||||
flex: 0 0 auto;
|
||||
z-index: 3;
|
||||
|
||||
.mat-toolbar {
|
|
@ -3,7 +3,7 @@ import { MatButtonModule, MatIconModule, MatToolbarModule } from '@angular/mater
|
|||
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { FooterComponent } from 'app/layout/blocks/footer/footer.component';
|
||||
import { FooterComponent } from 'app/layout/components/footer/footer.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
|
@ -3,12 +3,10 @@ import { NavigationEnd, Router } from '@angular/router';
|
|||
import { Subject } from 'rxjs';
|
||||
import { filter, takeUntil } from 'rxjs/operators';
|
||||
|
||||
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||
import { FusePerfectScrollbarDirective } from '@fuse/directives/fuse-perfect-scrollbar/fuse-perfect-scrollbar.directive';
|
||||
import { FuseSidebarService } from '@fuse/components/sidebar/sidebar.service';
|
||||
|
||||
import { navigation } from 'app/navigation/navigation';
|
||||
import { FuseNavigationService } from '@fuse/components/navigation/navigation.service';
|
||||
|
||||
@Component({
|
||||
selector : 'navbar',
|
||||
templateUrl : './navbar.component.html',
|
||||
|
@ -43,7 +41,6 @@ export class NavbarComponent implements OnInit, OnDestroy
|
|||
{
|
||||
// Set the defaults
|
||||
this.layout = 'vertical';
|
||||
this.navigation = navigation;
|
||||
|
||||
// Set the private defaults
|
||||
this._unsubscribeAll = new Subject();
|
||||
|
@ -94,6 +91,13 @@ export class NavbarComponent implements OnInit, OnDestroy
|
|||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Get current navigation
|
||||
this._fuseNavigationService.onNavigationChanged
|
||||
.pipe(filter(value => value !== null))
|
||||
.subscribe(() => {
|
||||
this.navigation = this._fuseNavigationService.getCurrentNavigation();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
|
@ -4,7 +4,7 @@ import { MatButtonModule, MatIconModule } from '@angular/material';
|
|||
import { FuseNavigationModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { NavbarComponent } from 'app/layout/blocks/navbar/navbar.component';
|
||||
import { NavbarComponent } from 'app/layout/components/navbar/navbar.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
|
@ -3,7 +3,7 @@ import { MatDividerModule, MatListModule, MatSlideToggleModule } from '@angular/
|
|||
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { QuickPanelComponent } from 'app/layout/blocks/quick-panel/quick-panel.component';
|
||||
import { QuickPanelComponent } from 'app/layout/components/quick-panel/quick-panel.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<button mat-icon-button class="toggle-button-navbar"
|
||||
*ngIf="!noNav"
|
||||
(click)="toggleSidebarOpened('navbar')" fxHide.gt-md>
|
||||
(click)="toggleSidebarOpen('navbar')" fxHide.gt-md>
|
||||
<mat-icon>menu</mat-icon>
|
||||
</button>
|
||||
|
||||
|
@ -92,7 +92,7 @@
|
|||
|
||||
<button mat-icon-button
|
||||
class="quick-panel-toggle-button"
|
||||
fuseMatSidenavToggler="quick-panel"
|
||||
(click)="toggleSidebarOpen('quickPanel')"
|
||||
aria-label="Toggle quick panel">
|
||||
<mat-icon class="icon">format_list_bulleted</mat-icon>
|
||||
</button>
|
|
@ -146,11 +146,11 @@ export class ToolbarComponent implements OnInit, OnDestroy
|
|||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Toggle sidebar opened
|
||||
* Toggle sidebar open
|
||||
*
|
||||
* @param key
|
||||
*/
|
||||
toggleSidebarOpened(key): void
|
||||
toggleSidebarOpen(key): void
|
||||
{
|
||||
this._fuseSidebarService.getSidebar(key).toggleOpen();
|
||||
}
|
|
@ -5,7 +5,7 @@ import { MatButtonModule, MatIconModule, MatMenuModule, MatProgressBarModule, Ma
|
|||
import { FuseSearchBarModule, FuseShortcutsModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ToolbarComponent } from 'app/layout/blocks/toolbar/toolbar.component';
|
||||
import { ToolbarComponent } from 'app/layout/components/toolbar/toolbar.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
91
src/app/layout/horizontal/layout-1/layout-1.component.html
Normal file
91
src/app/layout/horizontal/layout-1/layout-1.component.html
Normal file
|
@ -0,0 +1,91 @@
|
|||
<div id="main">
|
||||
|
||||
<!-- TOOLBAR: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar === 'above'">
|
||||
<toolbar class="above" [ngClass]="fuseConfig.colorClasses.toolbar"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Above -->
|
||||
|
||||
<!-- NAVBAR: Top -->
|
||||
<!--<navbar layout="horizontal"
|
||||
class="top-navbar" fxHide fxShow.gt-md
|
||||
[ngClass]="fuseConfig.colorClasses.navbar"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'top'">
|
||||
</navbar>-->
|
||||
<!-- / NAVBAR: Top -->
|
||||
|
||||
<div id="container-1" class="container">
|
||||
|
||||
<!-- NAVBAR: Left -->
|
||||
<fuse-sidebar [name]="'navbar'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="left-navbar" [ngClass]="fuseConfig.colorClasses.navbar"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'left' || fuseConfig.layout.navigation.position === 'top'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Left -->
|
||||
|
||||
<div id="container-2" class="container">
|
||||
|
||||
<!-- TOOLBAR: Below sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar === 'below-sticky'">
|
||||
<toolbar class="below-sticky" [ngClass]="fuseConfig.colorClasses.toolbar"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below sticky -->
|
||||
|
||||
<div id="container-3" class="container" fusePerfectScrollbar>
|
||||
|
||||
<!-- TOOLBAR: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar === 'below'">
|
||||
<toolbar class="below" [ngClass]="fuseConfig.colorClasses.toolbar"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below -->
|
||||
|
||||
<!-- CONTENT -->
|
||||
<content></content>
|
||||
<!-- / CONTENT -->
|
||||
|
||||
<!-- FOOTER: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer === 'below'">
|
||||
<footer class="below" [ngClass]="fuseConfig.colorClasses.footer"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Below sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer === 'below-sticky'">
|
||||
<footer class="below-sticky" [ngClass]="fuseConfig.colorClasses.footer"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below sticky -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- NAVBAR: Right -->
|
||||
<fuse-sidebar [name]="'navbar'" [align]="'right'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="right-navbar" [ngClass]="fuseConfig.colorClasses.navbar"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'right'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Right -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer === 'above'">
|
||||
<footer class="above" [ngClass]="fuseConfig.colorClasses.footer"></footer>
|
||||
</ng-container>
|
||||
<!-- FOOTER: Above -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- QUICK PANEL -->
|
||||
<fuse-sidebar [name]="'quickPanel'" [align]="'right'" class="quick-panel">
|
||||
<quick-panel></quick-panel>
|
||||
</fuse-sidebar>
|
||||
<!-- / QUICK PANEL -->
|
||||
|
||||
<fuse-theme-options [navigation]="navigation"></fuse-theme-options>
|
131
src/app/layout/horizontal/layout-1/layout-1.component.scss
Normal file
131
src/app/layout/horizontal/layout-1/layout-1.component.scss
Normal file
|
@ -0,0 +1,131 @@
|
|||
@import "src/@fuse/scss/fuse";
|
||||
|
||||
horizontal-layout-1 {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
#main {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
|
||||
// Container 1
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
// Container 2
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
|
||||
// Container 3 (Scrollable)
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
transform: translateZ(0);
|
||||
|
||||
&.container-scroll {
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
|
||||
// Content component
|
||||
content {
|
||||
flex: 1 0 auto;
|
||||
|
||||
> *:not(router-outlet) {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vertical-layout-111 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
/* > .mat-sidenav-container {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
|
||||
> .mat-sidenav-content,
|
||||
> .mat-drawer-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
height: 100vh;*/
|
||||
|
||||
@include media-breakpoint-down('sm') {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
#main-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
background: #FAFAFA;
|
||||
|
||||
#wrapper {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.content-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
content {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
> *:not(router-outlet):not(.ps__scrollbar-x-rail):not(.ps__scrollbar-y-rail) {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
> *.ng-animating {
|
||||
|
||||
.mat-tab-body {
|
||||
height: 100vh;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
&[fuse-layout-mode="boxed"] {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
@include mat-elevation(8);
|
||||
}
|
||||
}
|
|
@ -6,12 +6,12 @@ import { FuseConfigService } from '@fuse/services/config.service';
|
|||
import { navigation } from 'app/navigation/navigation';
|
||||
|
||||
@Component({
|
||||
selector : 'vertical-nav-basic-layout',
|
||||
templateUrl : './basic.component.html',
|
||||
styleUrls : ['./basic.component.scss'],
|
||||
selector : 'horizontal-layout-1',
|
||||
templateUrl : './layout-1.component.html',
|
||||
styleUrls : ['./layout-1.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class VerticalNavBasicLayoutComponent implements OnInit, OnDestroy
|
||||
export class HorizontalLayout1Component implements OnInit, OnDestroy
|
||||
{
|
||||
fuseConfig: any;
|
||||
navigation: any;
|
38
src/app/layout/horizontal/layout-1/layout-1.module.ts
Normal file
38
src/app/layout/horizontal/layout-1/layout-1.module.ts
Normal file
|
@ -0,0 +1,38 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { MatSidenavModule } from '@angular/material';
|
||||
|
||||
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ContentModule } from 'app/layout/components/content/content.module';
|
||||
import { FooterModule } from 'app/layout/components/footer/footer.module';
|
||||
import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
|
||||
import { QuickPanelModule } from 'app/layout/components/quick-panel/quick-panel.module';
|
||||
import { ToolbarModule } from 'app/layout/components/toolbar/toolbar.module';
|
||||
|
||||
import { HorizontalLayout1Component } from 'app/layout/horizontal/layout-1/layout-1.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
HorizontalLayout1Component
|
||||
],
|
||||
imports : [
|
||||
MatSidenavModule,
|
||||
|
||||
FuseSharedModule,
|
||||
FuseSidebarModule,
|
||||
FuseThemeOptionsModule,
|
||||
|
||||
ContentModule,
|
||||
FooterModule,
|
||||
NavbarModule,
|
||||
QuickPanelModule,
|
||||
ToolbarModule
|
||||
],
|
||||
exports : [
|
||||
HorizontalLayout1Component
|
||||
]
|
||||
})
|
||||
export class HorizontalLayout1Module
|
||||
{
|
||||
}
|
|
@ -1,13 +1,19 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { VerticalNavBasicLayoutModule } from 'app/layout/vertical/basic/basic.module';
|
||||
import { VerticalLayout1Module } from 'app/layout/vertical/layout-1/layout-1.module';
|
||||
import { VerticalLayout2Module } from 'app/layout/vertical/layout-2/layout-2.module';
|
||||
import { VerticalLayout3Module } from 'app/layout/vertical/layout-3/layout-3.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
VerticalNavBasicLayoutModule
|
||||
VerticalLayout1Module,
|
||||
VerticalLayout2Module,
|
||||
VerticalLayout3Module
|
||||
],
|
||||
exports: [
|
||||
VerticalNavBasicLayoutModule
|
||||
VerticalLayout1Module,
|
||||
VerticalLayout2Module,
|
||||
VerticalLayout3Module
|
||||
]
|
||||
})
|
||||
export class LayoutModule
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
<mat-sidenav-container>
|
||||
|
||||
<div id="main-content">
|
||||
|
||||
<!-- TOOLBAR: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar === 'above'">
|
||||
<toolbar class="above" [ngClass]="fuseConfig.colorClasses.toolbar"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Above -->
|
||||
|
||||
<!-- NAVBAR: Top -->
|
||||
<navbar layout="horizontal"
|
||||
class="top-navbar" fxHide fxShow.gt-md
|
||||
[ngClass]="fuseConfig.colorClasses.navbar"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'top'">
|
||||
</navbar>
|
||||
<!-- / NAVBAR: Top -->
|
||||
|
||||
<div id="wrapper">
|
||||
|
||||
<!-- NAVBAR: Left -->
|
||||
<fuse-sidebar [name]="'navbar'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="left-navbar" [ngClass]="fuseConfig.colorClasses.navbar"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'left' || fuseConfig.layout.navigation.position === 'top'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Left -->
|
||||
|
||||
<div class="content-wrapper">
|
||||
|
||||
<!-- TOOLBAR: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar === 'below'">
|
||||
<toolbar class="below" [ngClass]="fuseConfig.colorClasses.toolbar"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below -->
|
||||
|
||||
<content></content>
|
||||
|
||||
<!-- FOOTER: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer === 'below'">
|
||||
<footer class="below" [ngClass]="fuseConfig.colorClasses.footer"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- NAVBAR: Right -->
|
||||
<fuse-sidebar [name]="'navbar'" [align]="'right'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="right-navbar" [ngClass]="fuseConfig.colorClasses.navbar"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'right'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Right -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer === 'above'">
|
||||
<footer class="above" [ngClass]="fuseConfig.colorClasses.footer"></footer>
|
||||
</ng-container>
|
||||
<!-- FOOTER: Above -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- QUICK PANEL -->
|
||||
<mat-sidenav fuseMatSidenavHelper="quick-panel" position="end">
|
||||
<quick-panel></quick-panel>
|
||||
</mat-sidenav>
|
||||
<!-- / QUICK PANEL -->
|
||||
|
||||
</mat-sidenav-container>
|
||||
|
||||
<fuse-theme-options [navigation]="navigation"></fuse-theme-options>
|
|
@ -1,75 +0,0 @@
|
|||
@import "src/@fuse/scss/fuse";
|
||||
|
||||
vertical-nav-basic-layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
> .mat-sidenav-container {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
|
||||
> .mat-sidenav-content,
|
||||
> .mat-drawer-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
height: 100vh;
|
||||
|
||||
@include media-breakpoint-down('sm') {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
#main-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
|
||||
#wrapper {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.content-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
content {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
> *:not(router-outlet):not(.ps__scrollbar-x-rail):not(.ps__scrollbar-y-rail) {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
> *.ng-animating {
|
||||
|
||||
.mat-tab-body {
|
||||
height: 100vh;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&[fuse-layout-mode="boxed"] {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
@include mat-elevation(8);
|
||||
}
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { MatSidenavModule } from '@angular/material';
|
||||
|
||||
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ContentModule } from 'app/layout/blocks/content/content.module';
|
||||
import { FooterModule } from 'app/layout/blocks/footer/footer.module';
|
||||
import { NavbarModule } from 'app/layout/blocks/navbar/navbar.module';
|
||||
import { QuickPanelModule } from 'app/layout/blocks/quick-panel/quick-panel.module';
|
||||
import { ToolbarModule } from 'app/layout/blocks/toolbar/toolbar.module';
|
||||
|
||||
import { VerticalNavBasicLayoutComponent } from 'app/layout/vertical/basic/basic.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
VerticalNavBasicLayoutComponent
|
||||
],
|
||||
imports : [
|
||||
MatSidenavModule,
|
||||
|
||||
FuseSharedModule,
|
||||
FuseSidebarModule,
|
||||
FuseThemeOptionsModule,
|
||||
|
||||
ContentModule,
|
||||
FooterModule,
|
||||
NavbarModule,
|
||||
QuickPanelModule,
|
||||
ToolbarModule
|
||||
],
|
||||
exports : [
|
||||
VerticalNavBasicLayoutComponent
|
||||
]
|
||||
})
|
||||
export class VerticalNavBasicLayoutModule
|
||||
{
|
||||
}
|
83
src/app/layout/vertical/layout-1/layout-1.component.html
Normal file
83
src/app/layout/vertical/layout-1/layout-1.component.html
Normal file
|
@ -0,0 +1,83 @@
|
|||
<div id="main">
|
||||
|
||||
<!-- TOOLBAR: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'above'">
|
||||
<toolbar class="above" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Above -->
|
||||
|
||||
<div id="container-1" class="container">
|
||||
|
||||
<!-- NAVBAR: Left -->
|
||||
<fuse-sidebar [name]="'navbar'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="left-navbar" [ngClass]="fuseConfig.layout.navigation.background"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'left' || fuseConfig.layout.navigation.position === 'top'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Left -->
|
||||
|
||||
<div id="container-2" class="container">
|
||||
|
||||
<!-- TOOLBAR: Below sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'below-sticky'">
|
||||
<toolbar class="below-sticky" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below sticky -->
|
||||
|
||||
<div id="container-3" class="container">
|
||||
|
||||
<!-- TOOLBAR: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'below'">
|
||||
<toolbar class="below" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below -->
|
||||
|
||||
<!-- CONTENT -->
|
||||
<content></content>
|
||||
<!-- / CONTENT -->
|
||||
|
||||
<!-- FOOTER: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'below'">
|
||||
<footer class="below" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Below sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'below-sticky'">
|
||||
<footer class="below-sticky" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below sticky -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- NAVBAR: Right -->
|
||||
<fuse-sidebar [name]="'navbar'" [align]="'right'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="right-navbar" [ngClass]="fuseConfig.layout.navigation.background"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'right'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Right -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'above'">
|
||||
<footer class="above" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- FOOTER: Above -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- QUICK PANEL -->
|
||||
<fuse-sidebar [name]="'quickPanel'" [align]="'right'" class="quick-panel">
|
||||
<quick-panel></quick-panel>
|
||||
</fuse-sidebar>
|
||||
<!-- / QUICK PANEL -->
|
||||
|
||||
<fuse-theme-options></fuse-theme-options>
|
117
src/app/layout/vertical/layout-1/layout-1.component.scss
Normal file
117
src/app/layout/vertical/layout-1/layout-1.component.scss
Normal file
|
@ -0,0 +1,117 @@
|
|||
@import "src/@fuse/scss/fuse";
|
||||
|
||||
vertical-layout-1 {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
#main {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
|
||||
// Container 1
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
// Container 2
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
|
||||
// Container 3 (Scrollable)
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
transform: translateZ(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vertical-layout-111 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
/* > .mat-sidenav-container {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
|
||||
> .mat-sidenav-content,
|
||||
> .mat-drawer-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
height: 100vh;*/
|
||||
|
||||
@include media-breakpoint-down('sm') {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
#main-content {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
background: #FAFAFA;
|
||||
|
||||
#wrapper {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
.content-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
|
||||
content {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
|
||||
> *:not(router-outlet):not(.ps__scrollbar-x-rail):not(.ps__scrollbar-y-rail) {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
> *.ng-animating {
|
||||
|
||||
.mat-tab-body {
|
||||
height: 100vh;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
&[fuse-layout-mode="boxed"] {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
@include mat-elevation(8);
|
||||
}
|
||||
}
|
64
src/app/layout/vertical/layout-1/layout-1.component.ts
Normal file
64
src/app/layout/vertical/layout-1/layout-1.component.ts
Normal file
|
@ -0,0 +1,64 @@
|
|||
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
import { FuseConfigService } from '@fuse/services/config.service';
|
||||
import { navigation } from 'app/navigation/navigation';
|
||||
|
||||
@Component({
|
||||
selector : 'vertical-layout-1',
|
||||
templateUrl : './layout-1.component.html',
|
||||
styleUrls : ['./layout-1.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class VerticalLayout1Component implements OnInit, OnDestroy
|
||||
{
|
||||
fuseConfig: any;
|
||||
navigation: any;
|
||||
|
||||
// Private
|
||||
private _unsubscribeAll: Subject<any>;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {FuseConfigService} _fuseConfigService
|
||||
*/
|
||||
constructor(
|
||||
private _fuseConfigService: FuseConfigService
|
||||
)
|
||||
{
|
||||
// Set the defaults
|
||||
this.navigation = navigation;
|
||||
|
||||
// Set the private defaults
|
||||
this._unsubscribeAll = new Subject();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* On init
|
||||
*/
|
||||
ngOnInit(): void
|
||||
{
|
||||
// Subscribe to config changes
|
||||
this._fuseConfigService.config
|
||||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe((config) => {
|
||||
this.fuseConfig = config;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* On destroy
|
||||
*/
|
||||
ngOnDestroy(): void
|
||||
{
|
||||
// Unsubscribe from all subscriptions
|
||||
this._unsubscribeAll.next();
|
||||
this._unsubscribeAll.complete();
|
||||
}
|
||||
}
|
35
src/app/layout/vertical/layout-1/layout-1.module.ts
Normal file
35
src/app/layout/vertical/layout-1/layout-1.module.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ContentModule } from 'app/layout/components/content/content.module';
|
||||
import { FooterModule } from 'app/layout/components/footer/footer.module';
|
||||
import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
|
||||
import { QuickPanelModule } from 'app/layout/components/quick-panel/quick-panel.module';
|
||||
import { ToolbarModule } from 'app/layout/components/toolbar/toolbar.module';
|
||||
|
||||
import { VerticalLayout1Component } from 'app/layout/vertical/layout-1/layout-1.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
VerticalLayout1Component
|
||||
],
|
||||
imports : [
|
||||
FuseSharedModule,
|
||||
FuseSidebarModule,
|
||||
FuseThemeOptionsModule,
|
||||
|
||||
ContentModule,
|
||||
FooterModule,
|
||||
NavbarModule,
|
||||
QuickPanelModule,
|
||||
ToolbarModule
|
||||
],
|
||||
exports : [
|
||||
VerticalLayout1Component
|
||||
]
|
||||
})
|
||||
export class VerticalLayout1Module
|
||||
{
|
||||
}
|
83
src/app/layout/vertical/layout-2/layout-2.component.html
Normal file
83
src/app/layout/vertical/layout-2/layout-2.component.html
Normal file
|
@ -0,0 +1,83 @@
|
|||
<div id="main">
|
||||
|
||||
<!-- TOOLBAR: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'above'">
|
||||
<toolbar class="above" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Above -->
|
||||
|
||||
<div id="container-1" class="container">
|
||||
|
||||
<!-- NAVBAR: Left -->
|
||||
<fuse-sidebar [name]="'navbar'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="left-navbar" [ngClass]="fuseConfig.layout.navigation.background"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'left' || fuseConfig.layout.navigation.position === 'top'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Left -->
|
||||
|
||||
<div id="container-2" class="container">
|
||||
|
||||
<!-- TOOLBAR: Below sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'below-sticky'">
|
||||
<toolbar class="below-sticky" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below sticky -->
|
||||
|
||||
<div id="container-3" class="container" fusePerfectScrollbar>
|
||||
|
||||
<!-- TOOLBAR: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'below'">
|
||||
<toolbar class="below" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below -->
|
||||
|
||||
<!-- CONTENT -->
|
||||
<content></content>
|
||||
<!-- / CONTENT -->
|
||||
|
||||
<!-- FOOTER: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'below'">
|
||||
<footer class="below" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Below sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'below-sticky'">
|
||||
<footer class="below-sticky" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below sticky -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- NAVBAR: Right -->
|
||||
<fuse-sidebar [name]="'navbar'" [align]="'right'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="right-navbar" [ngClass]="fuseConfig.layout.navigation.background"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'right'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Right -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'above'">
|
||||
<footer class="above" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- FOOTER: Above -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- QUICK PANEL -->
|
||||
<fuse-sidebar [name]="'quickPanel'" [align]="'right'" class="quick-panel">
|
||||
<quick-panel></quick-panel>
|
||||
</fuse-sidebar>
|
||||
<!-- / QUICK PANEL -->
|
||||
|
||||
<fuse-theme-options></fuse-theme-options>
|
53
src/app/layout/vertical/layout-2/layout-2.component.scss
Normal file
53
src/app/layout/vertical/layout-2/layout-2.component.scss
Normal file
|
@ -0,0 +1,53 @@
|
|||
@import "src/@fuse/scss/fuse";
|
||||
|
||||
vertical-layout-2 {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
#main {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
|
||||
// Container 1
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
// Container 2
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
|
||||
// Container 3 (Scrollable)
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
transform: translateZ(0);
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
|
||||
// Content component
|
||||
content {
|
||||
flex: 1 0 auto;
|
||||
|
||||
> *:not(router-outlet) {
|
||||
flex: 1 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
64
src/app/layout/vertical/layout-2/layout-2.component.ts
Normal file
64
src/app/layout/vertical/layout-2/layout-2.component.ts
Normal file
|
@ -0,0 +1,64 @@
|
|||
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
import { FuseConfigService } from '@fuse/services/config.service';
|
||||
import { navigation } from 'app/navigation/navigation';
|
||||
|
||||
@Component({
|
||||
selector : 'vertical-layout-2',
|
||||
templateUrl : './layout-2.component.html',
|
||||
styleUrls : ['./layout-2.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class VerticalLayout2Component implements OnInit, OnDestroy
|
||||
{
|
||||
fuseConfig: any;
|
||||
navigation: any;
|
||||
|
||||
// Private
|
||||
private _unsubscribeAll: Subject<any>;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {FuseConfigService} _fuseConfigService
|
||||
*/
|
||||
constructor(
|
||||
private _fuseConfigService: FuseConfigService
|
||||
)
|
||||
{
|
||||
// Set the defaults
|
||||
this.navigation = navigation;
|
||||
|
||||
// Set the private defaults
|
||||
this._unsubscribeAll = new Subject();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* On init
|
||||
*/
|
||||
ngOnInit(): void
|
||||
{
|
||||
// Subscribe to config changes
|
||||
this._fuseConfigService.config
|
||||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe((config) => {
|
||||
this.fuseConfig = config;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* On destroy
|
||||
*/
|
||||
ngOnDestroy(): void
|
||||
{
|
||||
// Unsubscribe from all subscriptions
|
||||
this._unsubscribeAll.next();
|
||||
this._unsubscribeAll.complete();
|
||||
}
|
||||
}
|
35
src/app/layout/vertical/layout-2/layout-2.module.ts
Normal file
35
src/app/layout/vertical/layout-2/layout-2.module.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ContentModule } from 'app/layout/components/content/content.module';
|
||||
import { FooterModule } from 'app/layout/components/footer/footer.module';
|
||||
import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
|
||||
import { QuickPanelModule } from 'app/layout/components/quick-panel/quick-panel.module';
|
||||
import { ToolbarModule } from 'app/layout/components/toolbar/toolbar.module';
|
||||
|
||||
import { VerticalLayout2Component } from 'app/layout/vertical/layout-2/layout-2.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
VerticalLayout2Component
|
||||
],
|
||||
imports : [
|
||||
FuseSharedModule,
|
||||
FuseSidebarModule,
|
||||
FuseThemeOptionsModule,
|
||||
|
||||
ContentModule,
|
||||
FooterModule,
|
||||
NavbarModule,
|
||||
QuickPanelModule,
|
||||
ToolbarModule
|
||||
],
|
||||
exports : [
|
||||
VerticalLayout2Component
|
||||
]
|
||||
})
|
||||
export class VerticalLayout2Module
|
||||
{
|
||||
}
|
83
src/app/layout/vertical/layout-3/layout-3.component.html
Normal file
83
src/app/layout/vertical/layout-3/layout-3.component.html
Normal file
|
@ -0,0 +1,83 @@
|
|||
<div id="main">
|
||||
|
||||
<!-- TOOLBAR: Above sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'above-sticky'">
|
||||
<toolbar class="above-sticky" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Above sticky -->
|
||||
|
||||
<div id="container-1" class="container" fusePerfectScrollbar>
|
||||
|
||||
<!-- TOOLBAR: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'above'">
|
||||
<toolbar class="above" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Above -->
|
||||
|
||||
<div id="container-2" class="container">
|
||||
|
||||
<!-- NAVBAR: Left -->
|
||||
<fuse-sidebar [name]="'navbar'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="left-navbar" [ngClass]="fuseConfig.layout.navigation.background"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'left' || fuseConfig.layout.navigation.position === 'top'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Left -->
|
||||
|
||||
<div id="container-3" class="container">
|
||||
|
||||
<!-- TOOLBAR: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.toolbar.position === 'below'">
|
||||
<toolbar class="below" [ngClass]="fuseConfig.layout.toolbar.background"></toolbar>
|
||||
</ng-container>
|
||||
<!-- / TOOLBAR: Below -->
|
||||
|
||||
<!-- CONTENT -->
|
||||
<content></content>
|
||||
<!-- / CONTENT -->
|
||||
|
||||
<!-- FOOTER: Below -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'below'">
|
||||
<footer class="below" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- / FOOTER: Below -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- NAVBAR: Right -->
|
||||
<fuse-sidebar [name]="'navbar'" [align]="'right'"
|
||||
[folded]="fuseConfig.layout.navigation.folded"
|
||||
[lockedOpen]="'gt-md'"
|
||||
class="right-navbar" [ngClass]="fuseConfig.layout.navigation.background"
|
||||
*ngIf="fuseConfig.layout.navigation.position === 'right'">
|
||||
<navbar layout="vertical"></navbar>
|
||||
</fuse-sidebar>
|
||||
<!-- / NAVBAR: Right -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Above -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'above'">
|
||||
<footer class="above" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- FOOTER: Above -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- FOOTER: Above sticky -->
|
||||
<ng-container *ngIf="fuseConfig.layout.footer.position === 'above-sticky'">
|
||||
<footer class="above-sticky" [ngClass]="fuseConfig.layout.footer.background"></footer>
|
||||
</ng-container>
|
||||
<!-- FOOTER: Above sticky -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- QUICK PANEL -->
|
||||
<fuse-sidebar [name]="'quickPanel'" [align]="'right'" class="quick-panel">
|
||||
<quick-panel></quick-panel>
|
||||
</fuse-sidebar>
|
||||
<!-- / QUICK PANEL -->
|
||||
|
||||
<fuse-theme-options></fuse-theme-options>
|
45
src/app/layout/vertical/layout-3/layout-3.component.scss
Normal file
45
src/app/layout/vertical/layout-3/layout-3.component.scss
Normal file
|
@ -0,0 +1,45 @@
|
|||
@import "src/@fuse/scss/fuse";
|
||||
|
||||
vertical-layout-3 {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
|
||||
#main {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
|
||||
// Container 1 (Scrollable)
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
transform: translateZ(0);
|
||||
|
||||
// Container 2
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 0 auto;
|
||||
width: 100%;
|
||||
|
||||
// Container 3
|
||||
> .container {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
64
src/app/layout/vertical/layout-3/layout-3.component.ts
Normal file
64
src/app/layout/vertical/layout-3/layout-3.component.ts
Normal file
|
@ -0,0 +1,64 @@
|
|||
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
|
||||
import { FuseConfigService } from '@fuse/services/config.service';
|
||||
import { navigation } from 'app/navigation/navigation';
|
||||
|
||||
@Component({
|
||||
selector : 'vertical-layout-3',
|
||||
templateUrl : './layout-3.component.html',
|
||||
styleUrls : ['./layout-3.component.scss'],
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class VerticalLayout3Component implements OnInit, OnDestroy
|
||||
{
|
||||
fuseConfig: any;
|
||||
navigation: any;
|
||||
|
||||
// Private
|
||||
private _unsubscribeAll: Subject<any>;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {FuseConfigService} _fuseConfigService
|
||||
*/
|
||||
constructor(
|
||||
private _fuseConfigService: FuseConfigService
|
||||
)
|
||||
{
|
||||
// Set the defaults
|
||||
this.navigation = navigation;
|
||||
|
||||
// Set the private defaults
|
||||
this._unsubscribeAll = new Subject();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* On init
|
||||
*/
|
||||
ngOnInit(): void
|
||||
{
|
||||
// Subscribe to config changes
|
||||
this._fuseConfigService.config
|
||||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe((config) => {
|
||||
this.fuseConfig = config;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* On destroy
|
||||
*/
|
||||
ngOnDestroy(): void
|
||||
{
|
||||
// Unsubscribe from all subscriptions
|
||||
this._unsubscribeAll.next();
|
||||
this._unsubscribeAll.complete();
|
||||
}
|
||||
}
|
35
src/app/layout/vertical/layout-3/layout-3.module.ts
Normal file
35
src/app/layout/vertical/layout-3/layout-3.module.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
|
||||
import { FuseSidebarModule, FuseThemeOptionsModule } from '@fuse/components';
|
||||
import { FuseSharedModule } from '@fuse/shared.module';
|
||||
|
||||
import { ContentModule } from 'app/layout/components/content/content.module';
|
||||
import { FooterModule } from 'app/layout/components/footer/footer.module';
|
||||
import { NavbarModule } from 'app/layout/components/navbar/navbar.module';
|
||||
import { QuickPanelModule } from 'app/layout/components/quick-panel/quick-panel.module';
|
||||
import { ToolbarModule } from 'app/layout/components/toolbar/toolbar.module';
|
||||
|
||||
import { VerticalLayout3Component } from 'app/layout/vertical/layout-3/layout-3.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
VerticalLayout3Component
|
||||
],
|
||||
imports : [
|
||||
FuseSharedModule,
|
||||
FuseSidebarModule,
|
||||
FuseThemeOptionsModule,
|
||||
|
||||
ContentModule,
|
||||
FooterModule,
|
||||
NavbarModule,
|
||||
QuickPanelModule,
|
||||
ToolbarModule
|
||||
],
|
||||
exports : [
|
||||
VerticalLayout3Component
|
||||
]
|
||||
})
|
||||
export class VerticalLayout3Module
|
||||
{
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
<div class="page-layout carded fullwidth single-scroll" fusePerfectScrollbar>
|
||||
<div class="page-layout carded fullwidth">
|
||||
|
||||
<!-- TOP BACKGROUND -->
|
||||
<div class="top-bg mat-accent-bg"></div>
|
||||
|
@ -9,7 +9,7 @@
|
|||
|
||||
<!-- CONTENT HEADER -->
|
||||
<div class="header white-fg p-24" fxLayout="row" fxLayoutAlign="start center">
|
||||
<h2>Fullwidth with page scroll</h2>
|
||||
<h2>Fullwidth with container scroll</h2>
|
||||
</div>
|
||||
<!-- / CONTENT HEADER -->
|
||||
|
||||
|
|
|
@ -1,16 +1,86 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
import { Subject } from 'rxjs';
|
||||
|
||||
import { FuseConfigService } from '@fuse/services/config.service';
|
||||
import { FuseMatchMediaService } from '@fuse/services/match-media.service';
|
||||
|
||||
@Component({
|
||||
selector : 'carded-fullwidth',
|
||||
templateUrl: './fullwidth.component.html',
|
||||
styleUrls : ['./fullwidth.component.scss']
|
||||
})
|
||||
export class CardedFullWidthComponent
|
||||
export class CardedFullWidthComponent implements OnInit, OnDestroy
|
||||
{
|
||||
// Private
|
||||
private _unsubscribeAll: Subject<any>;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param {FuseConfigService} _fuseConfigService
|
||||
* @param {FuseMatchMediaService} _fuseMatchMediaService
|
||||
*/
|
||||
constructor()
|
||||
constructor(
|
||||
private _fuseConfigService: FuseConfigService,
|
||||
private _fuseMatchMediaService: FuseMatchMediaService
|
||||
)
|
||||
{
|
||||
// Configure the layout
|
||||
this._fuseConfigService.config = {
|
||||
layout: {
|
||||
containerScroll: false
|
||||
}
|
||||
};
|
||||
|
||||
// Set the private defaults
|
||||
this._unsubscribeAll = new Subject();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
// @ Lifecycle hooks
|
||||
// -----------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* On init
|
||||
*/
|
||||
ngOnInit(): void
|
||||
{
|
||||
// Enable the containerScroll on small screen
|
||||
// devices to get more screen real estate
|
||||
this._fuseMatchMediaService.onMediaChange
|
||||
.pipe(takeUntil(this._unsubscribeAll))
|
||||
.subscribe((alias) => {
|
||||
|
||||
// If 'xs'
|
||||
if ( alias === 'xs' )
|
||||
{
|
||||
// Set the containerScroll to true
|
||||
this._fuseConfigService.config = {
|
||||
layout: {
|
||||
containerScroll: true
|
||||
}
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set the containerScroll to false (route default)
|
||||
this._fuseConfigService.config = {
|
||||
layout: {
|
||||
containerScroll: false
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* On destroy
|
||||
*/
|
||||
ngOnDestroy(): void
|
||||
{
|
||||
// Unsubscribe from all subscriptions
|
||||
this._unsubscribeAll.next();
|
||||
this._unsubscribeAll.complete();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<mat-icon>menu</mat-icon>
|
||||
</button>
|
||||
|
||||
<h2>Left sidenav with tabs and page scroll</h2>
|
||||
<h2>Left sidenav with tabs and container scroll</h2>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<!-- CONTENT HEADER -->
|
||||
<div class="header white-fg p-24">
|
||||
<h2>Left sidenav with page scroll</h2>
|
||||
<h2>Left sidenav with container scroll</h2>
|
||||
</div>
|
||||
<!-- / CONTENT HEADER -->
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<mat-icon>menu</mat-icon>
|
||||
</button>
|
||||
|
||||
<h2>Right sidenav with tabs and page scroll</h2>
|
||||
<h2>Right sidenav with tabs and container scroll</h2>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
<!-- CONTENT HEADER -->
|
||||
<div class="header white-fg p-24">
|
||||
<h2>Right sidenav with page scroll</h2>
|
||||
<h2>Right sidenav with container scroll</h2>
|
||||
</div>
|
||||
<!-- / CONTENT HEADER -->
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
</button>
|
||||
|
||||
<div>
|
||||
<h2>Left sidenav with page scroll</h2>
|
||||
<h2>Left sidenav with container scroll</h2>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</button>
|
||||
|
||||
<div>
|
||||
<h2>Right sidenav with page scroll</h2>
|
||||
<h2>Right sidenav with container scroll</h2>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue
Block a user