layout is added
This commit is contained in:
parent
e83357c2db
commit
7501debf70
.prettierrcstyles.scss
.vscode
projects/@app/src
app
app-routing.module.ts
layouts
components
layouts.module.tspages/main
components
index.tsmain-index.page.component.htmlmain-index.page.component.scssmain-index.page.component.spec.tsmain-index.page.component.ts
main-routing.page.module.tsmain.page.module.tssections/main
assets/fonts/materialdesignicons
css
materialdesignicons.cssmaterialdesignicons.css.mapmaterialdesignicons.min.cssmaterialdesignicons.min.css.map
fonts
materialdesignicons-webfont.eotmaterialdesignicons-webfont.ttfmaterialdesignicons-webfont.woffmaterialdesignicons-webfont.woff2
scss
5
.prettierrc
Normal file
5
.prettierrc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"trailingComma": "none",
|
||||
"tabWidth": 2,
|
||||
"singleQuote": true
|
||||
}
|
11
.vscode/extensions.json
vendored
Normal file
11
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"Angular.ng-template",
|
||||
"msjsdiag.debugger-for-chrome",
|
||||
"eamodio.gitlens",
|
||||
"esbenp.prettier-vscode",
|
||||
"ms-vscode.vscode-typescript-tslint-plugin",
|
||||
"VisualStudioExptTeam.vscodeintellicode",
|
||||
"nkokhelox.svg-font-previewer"
|
||||
]
|
||||
}
|
5
.vscode/settings.json
vendored
5
.vscode/settings.json
vendored
@ -7,7 +7,8 @@
|
||||
"editor.trimAutoWhitespace": true,
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"files.trimFinalNewlines": true,
|
||||
"git.ignoreLimitWarning": true,
|
||||
"prettier.singleQuote": true,
|
||||
"files.watcherExclude": {
|
||||
"**/dist/electron/win-unpacked/**": true
|
||||
},
|
||||
"debug.node.autoAttach": "on"
|
||||
}
|
||||
|
@ -5,6 +5,12 @@ import { LayoutsModule } from '@app/layouts/layouts.module';
|
||||
import { DefaultLayoutComponent } from '@app/layouts/components/default.layout.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: DefaultLayoutComponent,
|
||||
loadChildren: () =>
|
||||
import('./pages/main/main.page.module').then(m => m.MainPageModule)
|
||||
},
|
||||
{
|
||||
path: 'user',
|
||||
component: DefaultLayoutComponent,
|
||||
|
@ -1 +1,44 @@
|
||||
<div fxLayout="column" fxFlexFill>
|
||||
<div class="app-layout-default-top" fxFlex="50px">TOP</div>
|
||||
<div class="app-layout-default-body" fxFlexFill>
|
||||
<div class="app-layout-default-body-left">
|
||||
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
|
||||
<!-- This is the tree node template for leaf nodes -->
|
||||
<mat-tree-node
|
||||
*matTreeNodeDef="let node"
|
||||
matTreeNodePadding
|
||||
matTreeNodePaddingIndent="5"
|
||||
>
|
||||
<!-- use a disabled button to provide padding for tree leaf -->
|
||||
<button mat-icon-button disabled></button>
|
||||
{{ node.name }}
|
||||
</mat-tree-node>
|
||||
<!-- This is the tree node template for expandable nodes -->
|
||||
<mat-tree-node
|
||||
*matTreeNodeDef="let node; when: hasChild"
|
||||
matTreeNodePadding
|
||||
matTreeNodePaddingIndent="5"
|
||||
>
|
||||
<button
|
||||
mat-icon-button
|
||||
matTreeNodeToggle
|
||||
[attr.aria-label]="'toggle ' + node.name"
|
||||
>
|
||||
<span
|
||||
class="mdi"
|
||||
[class.mdi-chevron-down]="treeControl.isExpanded(node)"
|
||||
[class.mdi-chevron-right]="!treeControl.isExpanded(node)"
|
||||
></span>
|
||||
</button>
|
||||
{{ node.name }}
|
||||
</mat-tree-node>
|
||||
</mat-tree>
|
||||
</div>
|
||||
<div class="app-layout-default-body-content" fxFlex>
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
<div class="app-layout-default-bottom" fxFlex="50px" fxLayoutGap="20px">
|
||||
Bottom
|
||||
</div>
|
||||
</div>
|
||||
|
@ -0,0 +1,21 @@
|
||||
.app-layout-default-top {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.app-layout-default-body {
|
||||
width: 100%;
|
||||
|
||||
.app-layout-default-body-left {
|
||||
width: 200px;
|
||||
height: 100%;
|
||||
}
|
||||
.app-layout-default-body-content {
|
||||
width: calc(100% - 200px);
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.app-layout-default-bottom {
|
||||
width: 100%;
|
||||
bottom: 0px;
|
||||
}
|
@ -1,4 +1,38 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { FlatTreeControl } from '@angular/cdk/tree';
|
||||
import {
|
||||
MatTreeFlattener,
|
||||
MatTreeFlatDataSource
|
||||
} from '@angular/material/tree';
|
||||
|
||||
interface NavigationNode {
|
||||
name: string;
|
||||
children?: NavigationNode[];
|
||||
}
|
||||
|
||||
interface NavigationFlatNode {
|
||||
expandable: boolean;
|
||||
name: string;
|
||||
level: number;
|
||||
}
|
||||
|
||||
const TREE_DATA: NavigationNode[] = [
|
||||
{
|
||||
name: 'Fruit',
|
||||
children: [{ name: 'Apple' }, { name: 'Banana' }, { name: 'Fruit loops' }]
|
||||
},
|
||||
{
|
||||
name: 'Vegetables',
|
||||
children: [
|
||||
{
|
||||
name: 'Green'
|
||||
},
|
||||
{
|
||||
name: 'Orange'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@Component({
|
||||
selector: 'app-layouts-default',
|
||||
@ -6,5 +40,39 @@ import { Component } from '@angular/core';
|
||||
styleUrls: ['./default.layout.component.scss']
|
||||
})
|
||||
export class DefaultLayoutComponent {
|
||||
constructor() {}
|
||||
treeControl: FlatTreeControl<NavigationFlatNode>;
|
||||
treeFlattener: MatTreeFlattener<NavigationNode, NavigationFlatNode>;
|
||||
dataSource: MatTreeFlatDataSource<NavigationNode, NavigationFlatNode>;
|
||||
|
||||
constructor() {
|
||||
this.treeControl = new FlatTreeControl<NavigationFlatNode>(
|
||||
node => node.level,
|
||||
node => node.expandable
|
||||
);
|
||||
|
||||
this.treeFlattener = new MatTreeFlattener<
|
||||
NavigationNode,
|
||||
NavigationFlatNode
|
||||
>(
|
||||
(node: NavigationNode, level: number) => {
|
||||
return {
|
||||
expandable: !!node.children && 0 < node.children.length,
|
||||
name: node.name,
|
||||
level
|
||||
};
|
||||
},
|
||||
node => node.level,
|
||||
node => node.expandable,
|
||||
node => node.children
|
||||
);
|
||||
|
||||
this.dataSource = new MatTreeFlatDataSource(
|
||||
this.treeControl,
|
||||
this.treeFlattener
|
||||
);
|
||||
|
||||
this.dataSource.data = TREE_DATA;
|
||||
}
|
||||
|
||||
hasChild = (_: number, node: NavigationFlatNode) => node.expandable;
|
||||
}
|
||||
|
@ -2,10 +2,25 @@ import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { FlexLayoutModule } from '@angular/flex-layout';
|
||||
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatTreeModule } from '@angular/material/tree';
|
||||
|
||||
import { COMPONENTS } from './components';
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule],
|
||||
imports: [
|
||||
CommonModule,
|
||||
RouterModule,
|
||||
|
||||
FlexLayoutModule,
|
||||
|
||||
MatButtonModule,
|
||||
MatIconModule,
|
||||
MatTreeModule
|
||||
],
|
||||
declarations: [...COMPONENTS]
|
||||
})
|
||||
export class LayoutsModule {}
|
||||
|
3
projects/@app/src/app/pages/main/components/index.ts
Normal file
3
projects/@app/src/app/pages/main/components/index.ts
Normal file
@ -0,0 +1,3 @@
|
||||
import { MainIndexPageComponent } from './main-index.page.component';
|
||||
|
||||
export const COMPONENTS = [MainIndexPageComponent];
|
@ -0,0 +1 @@
|
||||
main index
|
@ -0,0 +1,33 @@
|
||||
import { TestBed, async } from '@angular/core/testing';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { MainIndexPageComponent } from './main-index.page.component';
|
||||
|
||||
describe('MainIndexPageComponent', () => {
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [RouterTestingModule],
|
||||
declarations: [MainIndexPageComponent]
|
||||
}).compileComponents();
|
||||
}));
|
||||
|
||||
it('should create the app', () => {
|
||||
const fixture = TestBed.createComponent(MainIndexPageComponent);
|
||||
const app = fixture.debugElement.componentInstance;
|
||||
expect(app).toBeTruthy();
|
||||
});
|
||||
|
||||
it(`should have as title 'backend'`, () => {
|
||||
const fixture = TestBed.createComponent(MainIndexPageComponent);
|
||||
const app = fixture.debugElement.componentInstance;
|
||||
expect(app.title).toEqual('backend');
|
||||
});
|
||||
|
||||
it('should render title', () => {
|
||||
const fixture = TestBed.createComponent(MainIndexPageComponent);
|
||||
fixture.detectChanges();
|
||||
const compiled = fixture.debugElement.nativeElement;
|
||||
expect(compiled.querySelector('.content span').textContent).toContain(
|
||||
'backend app is running!'
|
||||
);
|
||||
});
|
||||
});
|
@ -0,0 +1,10 @@
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-pages-main-index',
|
||||
templateUrl: './main-index.page.component.html',
|
||||
styleUrls: ['./main-index.page.component.scss']
|
||||
})
|
||||
export class MainIndexPageComponent {
|
||||
constructor() {}
|
||||
}
|
15
projects/@app/src/app/pages/main/main-routing.page.module.ts
Normal file
15
projects/@app/src/app/pages/main/main-routing.page.module.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
|
||||
import { MainIndexPageComponent } from './components/main-index.page.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: '', redirectTo: 'index' },
|
||||
{ path: 'index', component: MainIndexPageComponent }
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class MainRoutingPageModule {}
|
13
projects/@app/src/app/pages/main/main.page.module.ts
Normal file
13
projects/@app/src/app/pages/main/main.page.module.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { MainRoutingPageModule } from './main-routing.page.module';
|
||||
|
||||
import { MainSectionModule } from '@app/sections/main/main.section.module';
|
||||
|
||||
import { COMPONENTS } from './components';
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, MainSectionModule, MainRoutingPageModule],
|
||||
declarations: [...COMPONENTS]
|
||||
})
|
||||
export class MainPageModule {}
|
1
projects/@app/src/app/sections/main/components/index.ts
Normal file
1
projects/@app/src/app/sections/main/components/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export const COMPONENTS = [];
|
10
projects/@app/src/app/sections/main/main.section.module.ts
Normal file
10
projects/@app/src/app/sections/main/main.section.module.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
import { COMPONENTS } from './components';
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule],
|
||||
declarations: [...COMPONENTS]
|
||||
})
|
||||
export class MainSectionModule {}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
3
projects/@app/src/assets/fonts/materialdesignicons/css/materialdesignicons.min.css
vendored
Normal file
3
projects/@app/src/assets/fonts/materialdesignicons/css/materialdesignicons.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
16
projects/@app/src/assets/fonts/materialdesignicons/css/materialdesignicons.min.css.map
Normal file
16
projects/@app/src/assets/fonts/materialdesignicons/css/materialdesignicons.min.css.map
Normal file
File diff suppressed because one or more lines are too long
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.eot
Normal file
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.eot
Normal file
Binary file not shown.
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.ttf
Normal file
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.ttf
Normal file
Binary file not shown.
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.woff
Normal file
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.woff
Normal file
Binary file not shown.
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.woff2
Normal file
BIN
projects/@app/src/assets/fonts/materialdesignicons/fonts/materialdesignicons-webfont.woff2
Normal file
Binary file not shown.
@ -0,0 +1,27 @@
|
||||
// From Font Awesome
|
||||
.#{$mdi-css-prefix}-spin:before {
|
||||
-webkit-animation: #{$mdi-css-prefix}-spin 2s infinite linear;
|
||||
animation: #{$mdi-css-prefix}-spin 2s infinite linear;
|
||||
}
|
||||
|
||||
@-webkit-keyframes #{$mdi-css-prefix}-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes #{$mdi-css-prefix}-spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(359deg);
|
||||
transform: rotate(359deg);
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
.#{$mdi-css-prefix}:before,
|
||||
.#{$mdi-css-prefix}-set {
|
||||
display: inline-block;
|
||||
font: normal normal normal #{$mdi-font-size-base}/ 1 '#{$mdi-font-name}'; // shortening font declaration
|
||||
font-size: inherit; // can't have font-size inherit on line above, so need to override
|
||||
text-rendering: auto; // optimizelegibility throws things off #1094
|
||||
line-height: inherit;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
$mdi-sizes: 18 24 36 48;
|
||||
@each $mdi-size in $mdi-sizes {
|
||||
.#{$mdi-css-prefix}-#{$mdi-size}px {
|
||||
&.#{$mdi-css-prefix}-set,
|
||||
&.#{$mdi-css-prefix}:before {
|
||||
font-size: $mdi-size * 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.#{$mdi-css-prefix}-dark {
|
||||
&:before {
|
||||
color: rgba(0, 0, 0, 0.54);
|
||||
}
|
||||
&.#{$mdi-css-prefix}-inactive:before {
|
||||
color: rgba(0, 0, 0, 0.26);
|
||||
}
|
||||
}
|
||||
.#{$mdi-css-prefix}-light {
|
||||
&:before {
|
||||
color: rgba(255, 255, 255, 1);
|
||||
}
|
||||
&.#{$mdi-css-prefix}-inactive:before {
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
}
|
||||
|
||||
$mdi-degrees: 45 90 135 180 225 270 315;
|
||||
@each $mdi-degree in $mdi-degrees {
|
||||
.#{$mdi-css-prefix}-rotate-#{$mdi-degree} {
|
||||
&:before {
|
||||
-webkit-transform: rotate(#{$mdi-degree}deg);
|
||||
-ms-transform: rotate(#{$mdi-degree}deg);
|
||||
transform: rotate(#{$mdi-degree}deg);
|
||||
}
|
||||
/*
|
||||
// Not included in production
|
||||
&.#{$mdi-css-prefix}-flip-h:before {
|
||||
-webkit-transform: scaleX(-1) rotate(#{$mdi-degree}deg);
|
||||
transform: scaleX(-1) rotate(#{$mdi-degree}deg);
|
||||
filter: FlipH;
|
||||
-ms-filter: "FlipH";
|
||||
}
|
||||
&.#{$mdi-css-prefix}-flip-v:before {
|
||||
-webkit-transform: scaleY(-1) rotate(#{$mdi-degree}deg);
|
||||
-ms-transform: rotate(#{$mdi-degree}deg);
|
||||
transform: scaleY(-1) rotate(#{$mdi-degree}deg);
|
||||
filter: FlipV;
|
||||
-ms-filter: "FlipV";
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
.#{$mdi-css-prefix}-flip-h:before {
|
||||
-webkit-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
filter: FlipH;
|
||||
-ms-filter: 'FlipH';
|
||||
}
|
||||
.#{$mdi-css-prefix}-flip-v:before {
|
||||
-webkit-transform: scaleY(-1);
|
||||
transform: scaleY(-1);
|
||||
filter: FlipV;
|
||||
-ms-filter: 'FlipV';
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
@function char($character-code) {
|
||||
@if function-exists('selector-append') {
|
||||
@return unquote('"\\#{$character-code}"');
|
||||
}
|
||||
|
||||
@if "\\#{'x'}"== '\\x' {
|
||||
@return str-slice('\x', 1, 1) + $character-code;
|
||||
} @else {
|
||||
@return #{'"\\'}#{$character-code + '"'};
|
||||
}
|
||||
}
|
||||
|
||||
@function mdi($name) {
|
||||
@if map-has-key($mdi-icons, $name) == false {
|
||||
@warn "Icon #{$name} not found.";
|
||||
@return '';
|
||||
}
|
||||
@return char(map-get($mdi-icons, $name));
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
@each $key, $value in $mdi-icons {
|
||||
.#{$mdi-css-prefix}-#{$key}::before {
|
||||
content: char($value);
|
||||
}
|
||||
}
|
||||
|
||||
.#{$mdi-css-prefix}-blank::before {
|
||||
content: '\F68C';
|
||||
visibility: hidden;
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
@font-face {
|
||||
font-family: '#{$mdi-font-name}';
|
||||
src: url('#{$mdi-font-path}/#{$mdi-filename}-webfont.eot?v=#{$mdi-version}');
|
||||
src: url('#{$mdi-font-path}/#{$mdi-filename}-webfont.eot?#iefix&v=#{$mdi-version}')
|
||||
format('embedded-opentype'),
|
||||
url('#{$mdi-font-path}/#{$mdi-filename}-webfont.woff2?v=#{$mdi-version}')
|
||||
format('woff2'),
|
||||
url('#{$mdi-font-path}/#{$mdi-filename}-webfont.woff?v=#{$mdi-version}')
|
||||
format('woff'),
|
||||
url('#{$mdi-font-path}/#{$mdi-filename}-webfont.ttf?v=#{$mdi-version}')
|
||||
format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@
|
||||
/* MaterialDesignIcons.com */
|
||||
@import 'variables';
|
||||
@import 'functions';
|
||||
@import 'path';
|
||||
@import 'core';
|
||||
@import 'icons';
|
||||
@import 'extras';
|
||||
@import 'animated';
|
@ -2,4 +2,25 @@
|
||||
// Material theming tools
|
||||
@import '~@angular/material/theming';
|
||||
|
||||
@include mat-core();
|
||||
|
||||
// Define the palettes for your theme using the Material Design palettes available in palette.scss
|
||||
// (imported above). For each palette, you can optionally specify a default, lighter, and darker
|
||||
// hue. Available color palettes: https://material.io/design/color/
|
||||
$app-primary: mat-palette($mat-indigo);
|
||||
$app-accent: mat-palette($mat-pink, A200, A100, A400);
|
||||
|
||||
// The warn palette is optional (defaults to red).
|
||||
$app-warn: mat-palette($mat-red);
|
||||
|
||||
// Create the theme object (a Sass map containing all of the palettes).
|
||||
$app-theme: mat-light-theme($app-primary, $app-accent, $app-warn);
|
||||
|
||||
// Include theme styles for core and each component used in your app.
|
||||
// Alternatively, you can import and @include the theme mixins for each component
|
||||
// that you are using.
|
||||
@include angular-material-theme($app-theme);
|
||||
|
||||
@import 'assets/fonts/materialdesignicons/scss/materialdesignicons';
|
||||
|
||||
@import '~@totopia-scss/ui/theming';
|
||||
|
Loading…
x
Reference in New Issue
Block a user