1
0
mirror of https://github.com/akveo/eva-icons.git synced 2025-09-01 18:03:01 +02:00

feat: initial commit, add base app structure, base modules, components, services

This commit is contained in:
Denis Strigo
2018-08-23 17:30:37 +03:00
parent ddb32ee868
commit 7c36e2b4f3
63 changed files with 12379 additions and 1 deletions

13
.editorconfig Normal file
View File

@@ -0,0 +1,13 @@
# 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

43
.gitignore vendored Normal file
View File

@@ -0,0 +1,43 @@
# compiled output
/dist
/tmp
/out-tsc
# dependencies
/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# e2e
/e2e/*.js
/e2e/*.map
# System Files
.DS_Store
Thumbs.db
debug.log
local.log

View File

@@ -1 +1,27 @@
# eva-icons
# EvaIcons
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 6.1.4.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

136
angular.json Normal file
View File

@@ -0,0 +1,136 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"eva-icons": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"prefix": "app",
"schematics": {},
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/eva-icons",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.css",
"node_modules/nebular-icons/scss/nebular-icons.scss",
"src/app/@theme/styles/styles.scss"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "eva-icons:build"
},
"configurations": {
"production": {
"browserTarget": "eva-icons:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "eva-icons:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "src/tsconfig.spec.json",
"karmaConfig": "src/karma.conf.js",
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.css",
"node_modules/nebular-icons/scss/nebular-icons.scss",
"src/app/@theme/styles/styles.scss"
],
"scripts": [],
"assets": [
"src/favicon.ico",
"src/assets"
]
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
},
"eva-icons-e2e": {
"root": "e2e/",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "eva-icons:serve"
},
"configurations": {
"production": {
"devServerTarget": "eva-icons:serve:production"
}
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "eva-icons",
"schematics": {
"@schematics/angular:component": {
"styleext": "scss"
}
}
}

14
e2e/src/app.e2e-spec.ts Normal file
View File

@@ -0,0 +1,14 @@
import { AppPage } from './app.po';
describe('workspace-project App', () => {
let page: AppPage;
beforeEach(() => {
page = new AppPage();
});
it('should display welcome message', () => {
page.navigateTo();
expect(page.getParagraphText()).toEqual('Welcome to eva-icons!');
});
});

11
e2e/src/app.po.ts Normal file
View File

@@ -0,0 +1,11 @@
import { browser, by, element } from 'protractor';
export class AppPage {
navigateTo() {
return browser.get('/');
}
getParagraphText() {
return element(by.css('app-root h1')).getText();
}
}

13
e2e/tsconfig.e2e.json Normal file
View File

@@ -0,0 +1,13 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"jasminewd2",
"node"
]
}
}

10464
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

51
package.json Normal file
View File

@@ -0,0 +1,51 @@
{
"name": "eva-icons",
"version": "0.0.1",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^6.1.0",
"@angular/common": "^6.1.0",
"@angular/compiler": "^6.1.0",
"@angular/core": "^6.1.0",
"@angular/forms": "^6.1.0",
"@angular/http": "^6.1.0",
"@angular/platform-browser": "^6.1.0",
"@angular/platform-browser-dynamic": "^6.1.0",
"@angular/router": "^6.1.0",
"@nebular/theme": "^2.0.0-rc.10",
"bootstrap": "^4.1.3",
"core-js": "^2.5.4",
"nebular-icons": "^1.0.9",
"rxjs": "^6.0.0",
"zone.js": "~0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.7.0",
"@angular/cli": "~6.1.4",
"@angular/compiler-cli": "^6.1.0",
"@angular/language-service": "^6.1.0",
"@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~8.9.4",
"codelyzer": "~4.2.1",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~1.7.1",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.4.0",
"ts-node": "~5.0.1",
"tslint": "~5.9.1",
"typescript": "~2.7.2"
}
}

View File

@@ -0,0 +1,31 @@
import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { CommonModule } from '@angular/common';
import { throwIfAlreadyLoaded } from './module-import-guard';
import { DataModule } from './data/data.module';
const NB_CORE_PROVIDERS = [
...DataModule.forRoot().providers,
];
@NgModule({
imports: [
CommonModule,
],
exports: [],
declarations: [],
})
export class CoreModule {
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
throwIfAlreadyLoaded(parentModule, 'CoreModule');
}
static forRoot(): ModuleWithProviders {
return <ModuleWithProviders>{
ngModule: CoreModule,
providers: [
...NB_CORE_PROVIDERS,
],
};
}
}

View File

@@ -0,0 +1,27 @@
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IconService } from './icon.service';
const SERVICES = [
IconService,
];
@NgModule({
imports: [
CommonModule,
],
providers: [
...SERVICES,
],
})
export class DataModule {
static forRoot(): ModuleWithProviders {
return <ModuleWithProviders>{
ngModule: DataModule,
providers: [
...SERVICES,
],
};
}
}

View File

@@ -0,0 +1,44 @@
import { of as observableOf, Observable } from 'rxjs';
import { Injectable } from '@angular/core';
@Injectable()
export class IconService {
private fakeIconsData = ['nb-alert', 'nb-angle-double-left', 'nb-angle-double-right',
'nb-arrow-down', 'nb-arrow-dropdown', 'nb-arrow-dropleft',
'nb-arrow-dropright', 'nb-arrow-dropup', 'nb-arrow-left', 'nb-arrow-retweet', 'nb-arrow-right',
'nb-arrow-thin-down', 'nb-arrow-thin-left', 'nb-arrow-thin-right', 'nb-arrow-thin-up',
'nb-arrow-up', 'nb-audio', 'nb-bar-chart', 'nb-checkmark', 'nb-chevron-down',
'nb-chevron-down-outline', 'nb-chevron-left', 'nb-chevron-left-outline', 'nb-chevron-right',
'nb-chevron-right-outline', 'nb-chevron-up', 'nb-chevron-up-outline', 'nb-close',
'nb-close-circled', 'nb-cloudy', 'nb-coffee-maker', 'nb-compose', 'nb-edit', 'nb-email',
'nb-flame-circled', 'nb-gear', 'nb-grid-a', 'nb-grid-a-outline', 'nb-grid-b', 'nb-grid-b-outline',
'nb-heart', 'nb-home', 'nb-keypad', 'nb-layout-centre', 'nb-layout-default', 'nb-layout-one-column',
'nb-layout-sidebar-left', 'nb-layout-sidebar-right', 'nb-layout-two-column', 'nb-lightbulb',
'nb-list', 'nb-location', 'nb-locked', 'nb-loop', 'nb-loop-circled', 'nb-menu', 'nb-notifications',
'nb-paper-plane', 'nb-partlysunny', 'nb-pause', 'nb-pause-outline', 'nb-person', 'nb-phone',
'nb-play', 'nb-play-outline', 'nb-plus', 'nb-plus-circled', 'nb-power', 'nb-power-circled',
'nb-rainy', 'nb-roller-shades', 'nb-search', 'nb-shuffle', 'nb-skip-backward',
'nb-skip-backward-outline', 'nb-skip-forward', 'nb-skip-forward-outline', 'nb-snowy-circled',
'nb-square', 'nb-square-outline', 'nb-star', 'nb-sunny', 'nb-sunny-circled', 'nb-tables', 'nb-title',
'nb-trash', 'nb-volume-high', 'nb-volume-mute', 'nb-drop', 'nb-drops', 'nb-info', 'nb-expand', 'nb-collapse',
'nb-e-commerce'];
data: string[];
constructor() {
this.data = this.fakeIconsData;
}
getIconsData(): Observable<string[]> {
return observableOf(this.data);
}
getFilteredIconsData(searchKey: string) {
const data = this.data.filter((item) => {
return item.indexOf(searchKey) !== -1;
});
return observableOf(data);
}
}

View File

@@ -0,0 +1,5 @@
export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) {
if (parentModule) {
throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`);
}
}

View File

@@ -0,0 +1,38 @@
<div class="logo">
<a href="http://akveo.com" target="_blank"><img src="assets/img/akveo-logo.png"></a>
</div>
<div>
<ul>
<li class="title">More from Akveo</li>
<li><a href="http://akveo.com?utm_source=nebular_documentation&utm_medium=footer" target="_blank">Homepage</a></li>
<li><a href="https://akveo.github.io/react-native-ui-kitten?utm_source=nebular_documentation&utm_medium=footer">React Native UI Kitten</a></li>
<li><a href="http://akveo.com/ngx-admin?utm_source=nebular_documentation&utm_medium=footer"
target="_blank">ngx-admin</a></li>
</ul>
</div>
<div>
<ul>
<li class="title">Follow Us</li>
<li class="social">
<a href="https://github.com/akveo/ngx-admin" target="_blank">
<i class="small-social-github"></i>
</a>
<a href="https://twitter.com/akveo_inc" target="_blank">
<i class="small-social-twitter"></i>
</a>
<a href="https://www.facebook.com/akveo" target="_blank">
<i class="small-social-facebook"></i>
</a>
</li>
<li class="copy">
&copy; 2015-2018 <a href="http://akveo.com?utm_source=nebular_documentation&utm_medium=footer" target="_blank">Akveo LLC</a><br>
Documentation licensed under CC BY 4.0.
</li>
</ul>
</div>
<div class="contact">
<ul>
<li class="title">Contact Us</li>
<li><a href="#">contact@akveo.com</a></li>
</ul>
</div>

View File

@@ -0,0 +1,100 @@
@import '../../../@theme/styles/themes';
@import '~bootstrap/scss/mixins/breakpoints';
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
@include nb-install-component() {
$text-fg: nb-theme(footer-fg);
$social-fg: nb-theme(color-fg-icon);
$title-fg: nb-theme(color-fg);
display: flex;
flex: 1;
flex-wrap: wrap;
padding-top: 1.25rem;
justify-content: space-between;
> div {
display: flex;
margin-right: 0;
justify-content: center;
width: 100%;
&:last-child {
margin-right: 0;
}
a {
color: $text-fg;
}
ul {
list-style: none;
padding-left: 0;
}
li {
display: flex;
margin-bottom: 1.375rem;
justify-content: center;
align-items: center;
text-align: center;
}
&.logo {
display: none;
}
.title {
color: $title-fg;
font-size: 1.125rem;
line-height: 1.375rem;
}
.copy {
color: $text-fg;
display: list-item;
font-size: 0.75rem;
}
.social {
display: flex;
flex-direction: row;
a {
font-size: 3rem;
text-decoration: none;
color: $social-fg;
margin-right: 1rem;
}
}
}
> div.logo {
display: none;
}
@include media-breakpoint-up(md) {
> div {
justify-content: flex-start;
margin-right: 2rem;
width: auto;
li {
justify-content: flex-start;
align-items: flex-start;
text-align: left;
}
}
}
@include media-breakpoint-up(lg) {
> div.logo {
display: flex;
flex-direction: column;
margin-top: 0;
text-align: center;
img {
max-width: 9rem;
}
}
}
}

View File

@@ -0,0 +1,9 @@
import { Component } from '@angular/core';
@Component({
selector: 'eva-footer',
styleUrls: ['./footer.component.scss'],
templateUrl: './footer.component.html',
})
export class FooterComponent {
}

View File

@@ -0,0 +1,18 @@
<div class="section left">
<div class="logo">
<a routerLink="/">Eva Icons</a>
<span class="version">V.{{ currentVersion }}</span>
</div>
<iframe class="stars"
src="https://ghbtns.com/github-btn.html?user=akveo&repo=nebular&type=star&count=true"
frameborder="0"
scrolling="0">
</iframe>
</div>
<div class="section right">
<nb-menu [items]="mainMenu"></nb-menu>
<button class="btn btn-primary btn-download">
<i class="nb-star"></i>
<span>Download</span>
</button>
</div>

View File

@@ -0,0 +1,151 @@
@import '../../../@theme/styles/themes';
@import '~bootstrap/scss/mixins/breakpoints';
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
@include nb-install-component() {
$right-section-width: nb-theme(settings-col-width);
$logo-fg: nb-theme(header-fg);
$version-fg: nb-theme(color-primary);
$primary: nb-theme(color-primary);
display: flex;
flex: 1 0 auto;
flex-direction: row;
align-items: center;
margin: 0 7rem;
justify-content: space-between;
.section {
display: flex;
padding: 0.875rem 0.5rem;
&.left {
}
}
.logo {
display: flex;
flex: 1 0 auto;
flex-direction: row;
font-size: nb-theme(font-size-xlg);
a {
color: $logo-fg;
text-decoration: none !important;
font-weight: bold;
}
.version {
font-size: nb-theme(font-size);
display: none;
font-weight: bold;
color: $version-fg;
}
}
.stars {
width: 95px;
height: 20px;
margin-left: 3rem;
align-self: flex-end;
}
/deep/ nb-menu {
flex: 1;
.menu-items {
display: flex;
justify-content: flex-end;
.menu-item {
border: none;
&:first-child a {
padding-left: 0;
}
a {
position: relative;
font-size: nb-theme(font-size-sm);
color: nb-theme(menu-item-fg);
padding: 0.5rem 1.625rem 0.5rem 1rem;
display: block;
&:hover, &.active, &:focus {
color: $primary;
text-shadow: 0.5px 0 0 currentColor;
font-weight: normal;
outline: none!important;
.menu-icon {
color: $primary;
}
}
&.active {
&::after {
content: '';
position: absolute;
border: 2px solid $primary;
width: 100%;
left: 0;
bottom: 0;
border-radius: nb-theme(radius);
}
}
}
.menu-icon {
font-size: 1.5rem;
}
.menu-title {
vertical-align: super;
}
}
}
}
.btn-download {
display: flex;
align-items: center;
margin-left: 2rem;
color: nb-theme(color-white);
font-size: nb-theme(font-size-xs);
padding: 0.5rem 1rem;
border-radius: 0.25rem;
cursor: pointer;
i {
font-size: 1rem;
}
span {
margin-left: 1.25rem;
}
}
@include media-breakpoint-down(xl) {
margin: 0 1rem;
}
@include media-breakpoint-up(sm) {
.logo {
align-items: baseline;
flex: 1 0 auto;
a {
margin-right: 0.5rem;
}
.version {
display: inline;
}
}
}
@include media-breakpoint-up(is) {
.section {
padding: 0.875rem 1.125rem;
}
}
}

View File

@@ -0,0 +1,30 @@
import { Component } from '@angular/core';
import { EvoVersionService } from '../../services/version.service';
import { NbMenuItem } from '@nebular/theme';
@Component({
selector: 'eva-header',
styleUrls: ['./header.component.scss'],
templateUrl: './header.component.html',
})
export class HeaderComponent {
currentVersion: string;
constructor(private versionService: EvoVersionService) {
this.currentVersion = versionService.getEvoVersion();
}
mainMenu: NbMenuItem[] = [
{
title: 'Outline',
link: '/outline',
icon: 'nb-star',
},
{
title: 'Fill',
link: '/fill',
icon: 'nb-star',
},
];
}

View File

@@ -0,0 +1,5 @@
import { EvoVersionService } from './version.service';
export default [
EvoVersionService,
];

View File

@@ -0,0 +1,9 @@
import { Injectable } from '@angular/core';
@Injectable()
export class EvoVersionService {
getEvoVersion() {
return require('../../../../package.json').version;
}
}

View File

@@ -0,0 +1,35 @@
$small-social-font-path: '/assets/fonts/small-social' !default;
@font-face {
font-family: 'small-social';
src: url('#{$small-social-font-path}/small-social.eot?skntni');
src: url('#{$small-social-font-path}/small-social.eot?skntni#iefix') format('embedded-opentype'),
url('#{$small-social-font-path}/small-social.ttf?skntni') format('truetype'),
url('#{$small-social-font-path}/small-social.woff?skntni') format('woff'),
url('#{$small-social-font-path}/small-social.svg?skntni#small-social') format('svg');
font-weight: normal;
font-style: normal;
}
[class^='small-social-'], [class*=' small-social-'] {
font-family: 'small-social' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.small-social-facebook::before {
content: '\e900';
}
.small-social-github::before {
content: '\e901';
}
.small-social-twitter::before {
content: '\e902';
}

View File

@@ -0,0 +1,8 @@
@import 'themes';
@import 'small-social';
@import '~@nebular/theme/styles/globals';
@include nb-install() {
@include nb-theme-global();
};

View File

@@ -0,0 +1,52 @@
@import '~@nebular/theme/styles/theming';
@import '~@nebular/theme/styles/themes/corporate';
$nb-enabled-themes: (eva);
$nb-themes: nb-register-theme((
font-main: unquote('-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"'),
content-width: 1100px,
color-primary: #3366ff,
separator: transparent,
color-bg: transparent,
color-fg: #0d1c2e,
color-fg-heading: #546d8d,
color-fg-text: #919fb1,
color-fg-icon: #c4c8d1,
shadow: none,
layout-bg: transparent,
layout-padding: 0,
layout-medium-padding: 0,
layout-small-padding: 0,
header-bg: color-bg,
header-padding: 0 0,
header-height: 4.25rem,
header-fg: color-fg,
menu-bg: transparent,
menu-item-padding: 0.675rem 1rem,
menu-item-fg: #d8e1f0,
menu-active-fg: color-primary,
menu-font-size: 0.95rem,
menu-font-weight: font-weight-normal,
menu-active-bg: transparent,
footer-height: 18.75rem,
footer-padding: 1.25rem 0,
footer-fg: #8992a3,
footer-fg-highlight: footer-fg,
footer-separator: transparent,
list-icon-item-bg: #ebf1fa,
list-icon-item-fg: #0d1c2e,
switcher-view-bg: #d8e1f0
), eva, corporate);

View File

@@ -0,0 +1,55 @@
import { RouterModule } from '@angular/router';
import { ModuleWithProviders, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
// components
import { FooterComponent } from './components/footer/footer.component';
import { HeaderComponent } from './components/header/header.component';
// components
// services
import evaServices from './services';
// services
import {
NbMenuModule,
NbLayoutModule,
NbCardModule,
NbThemeModule,
} from '@nebular/theme';
@NgModule({
imports: [
RouterModule,
CommonModule,
NbMenuModule,
NbLayoutModule,
NbCardModule,
],
declarations: [
FooterComponent,
HeaderComponent,
],
exports: [
RouterModule,
CommonModule,
NbMenuModule,
NbLayoutModule,
NbCardModule,
FooterComponent,
HeaderComponent,
],
})
export class EvaThemeModule {
static forRoot(): ModuleWithProviders {
return <ModuleWithProviders>{
ngModule: EvaThemeModule,
providers: [
...NbThemeModule.forRoot({ name: 'eva' }).providers,
...evaServices,
...NbMenuModule.forRoot().providers,
],
};
}
}

View File

@@ -0,0 +1,30 @@
import { ExtraOptions, RouterModule, Routes } from '@angular/router';
import { NgModule } from '@angular/core';
import { FillComponent } from './pages/fill/fill.component';
import { OutlineComponent } from './pages/outline/outline.component';
const routes: Routes = [
{
path: 'outline',
component: OutlineComponent,
},
{
path: 'fill',
component: FillComponent,
},
{ path: '', redirectTo: 'outline', pathMatch: 'full' },
{ path: '**', redirectTo: 'outline' },
];
const config: ExtraOptions = {
useHash: true,
};
@NgModule({
imports: [RouterModule.forRoot(routes, config)],
exports: [RouterModule],
})
export class AppRoutingModule {
}

View File

@@ -0,0 +1,13 @@
<nb-layout>
<nb-layout-header>
<eva-header></eva-header>
</nb-layout-header>
<nb-layout-column>
<router-outlet></router-outlet>
</nb-layout-column>
<nb-layout-footer fixed>
<eva-footer></eva-footer>
</nb-layout-footer>
</nb-layout>

View File

@@ -0,0 +1,57 @@
@import '@theme/styles/themes';
@include nb-install-component() {
$content-width: nb-theme(content-width);
.content-center {
max-width: $content-width;
width: 100%;
margin-left: auto;
margin-right: auto;
display: flex;
flex-wrap: wrap;
}
.contact-us {
padding: 5rem 1rem;
h2 {
color: black;
}
}
/deep/ nb-layout .main-container {
padding-top: 3rem;
.scrollable {
padding-top: 0;
}
}
/deep/ nb-layout .layout-container {
max-width: $content-width;
width: 100%;
margin-left: auto;
margin-right: auto;
}
/deep/ nb-layout-footer {
margin-top: 6rem;
}
/* /deep/ nb-layout-footer ngd-footer .contact {
display: none;
}
@include media-breakpoint-up(xl) {
.contact-us {
padding: 5rem 0;
}
}
@include media-breakpoint-up(macpro) {
/deep/ nb-layout-footer {
margin-right: $settings-width + $settings-margin;
}
}*/
}

10
src/app/app.component.ts Normal file
View File

@@ -0,0 +1,10 @@
import { Component } from '@angular/core';
@Component({
selector: 'eva-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
}

30
src/app/app.module.ts Normal file
View File

@@ -0,0 +1,30 @@
import { APP_BASE_HREF } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule } from '@angular/core';
import { EvaThemeModule } from './@theme/theme.module';
import { AppRoutingModule } from './app-routing.module';
import { CoreModule } from './@core/core.module';
import { AppComponent } from './app.component';
import { PagesModule } from './pages/pages.module';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
BrowserAnimationsModule,
AppRoutingModule,
PagesModule,
EvaThemeModule.forRoot(),
CoreModule.forRoot(),
],
bootstrap: [AppComponent],
providers: [
{ provide: APP_BASE_HREF, useValue: '/' },
],
})
export class AppModule { }

View File

View File

@@ -0,0 +1,3 @@
<p>
fill works!
</p>

View File

@@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'eva-fill',
templateUrl: './fill.component.html',
styleUrls: ['./fill.component.css'],
})
export class FillComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}

View File

@@ -0,0 +1,17 @@
<nb-card *ngFor="let icon of icons">
<nb-card-body>
<i class="{{ icon }}"></i>
<span *ngIf="isFullViewMode"
class="icon-class">
{{ icon }}
</span>
</nb-card-body>
</nb-card>
<nb-card class="fake-card"></nb-card>
<nb-card class="fake-card"></nb-card>
<nb-card class="fake-card"></nb-card>
<nb-card class="fake-card"></nb-card>
<nb-card class="fake-card"></nb-card>
<nb-card class="fake-card"></nb-card>
<nb-card class="fake-card"></nb-card>

View File

@@ -0,0 +1,79 @@
@import '../../../@theme/styles/themes';
@import '~bootstrap/scss/mixins/breakpoints';
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
@include nb-install-component() {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
nb-card {
overflow: hidden;
cursor: pointer;
&:hover {
background-color: nb-theme(list-icon-item-bg);
}
}
nb-card-body {
display: flex;
align-items: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: nb-theme(list-icon-item-fg);
i {
font-size: 1.5rem;
}
}
&.full-icon-mode {
nb-card {
width: 24%;
&:hover {
border-color: nb-theme(list-icon-item-bg);
}
}
nb-card-body {
padding: 2.25rem 1.25rem;
span {
margin-left: 1.5rem;
}
}
}
&.only-icon-mode {
justify-content: space-around;
nb-card {
width: 11%;
border: none;
align-items: center;
border-radius: 0.25rem;
}
nb-card-body {
padding: 3rem 1.25rem;
i {
font-weight: nb-theme(font-weight-bold);
}
}
}
.fake-card {
visibility: hidden;
margin: 0;
padding: 0;
height: 0;
nb-card-body {
display: none;
}
}
}

View File

@@ -0,0 +1,31 @@
import {
ChangeDetectionStrategy,
Component,
HostBinding,
Input,
} from '@angular/core';
const FULL = 'full';
const ICON = 'icon';
@Component({
selector: 'eva-icon-list',
templateUrl: './icon-list.component.html',
styleUrls: ['./icon-list.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class IconListComponent {
@Input() icons: string[];
@Input() view: string;
@HostBinding('class.full-icon-mode')
get isFullViewMode() {
return this.view === FULL;
}
@HostBinding('class.only-icon-mode')
get isIconViewMode() {
return this.view === ICON;
}
}

View File

@@ -0,0 +1,19 @@
<div class="switch-button full-view"
[class.active]="isFullViewMode"
(click)="changeViewMode('full')">
<div class="rectangle"></div>
<div class="rectangle"></div>
</div>
<div class="switch-button icon-view"
[class.active]="isIconViewMode"
(click)="changeViewMode('icon')">
<div class="square-container">
<div class="square"></div>
<div class="square"></div>
</div>
<div class="square-container">
<div class="square"></div>
<div class="square"></div>
</div>
</div>

View File

@@ -0,0 +1,69 @@
@import '../../../@theme/styles/themes';
@import '~bootstrap/scss/mixins/breakpoints';
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
@include nb-install-component() {
$color-primary: nb-theme(color-primary);
display: flex;
.switch-button {
width: 2rem;
height: 2rem;
margin-left: 1rem;
cursor: pointer;
&:first-child {
margin-left: 0;
}
}
.full-view, .icon-view {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.rectangle {
flex: 1;
margin-top: 0.25rem;
&:first-child {
margin-top: 0;
}
}
.square-container {
flex: 1;
display: flex;
justify-content: space-between;
width: 100%;
height: 50%;
margin-top: 0.25rem;
&:first-child {
margin-top: 0;
}
}
.square {
flex: 1;
width: 50%;
height: 100%;
margin-left: 0.25rem;
&:first-child {
margin-left: 0;
}
}
.rectangle, .square {
background-color: nb-theme(switcher-view-bg);
}
.active {
.rectangle, .square {
background-color: $color-primary;
}
}
}

View File

@@ -0,0 +1,29 @@
import { Component, EventEmitter, Input, Output } from '@angular/core';
const FULL = 'full';
const ICON = 'icon';
@Component({
selector: 'eva-list-view-switcher',
templateUrl: './list-view-switcher.component.html',
styleUrls: ['./list-view-switcher.component.scss'],
})
export class ListViewSwitcherComponent {
@Output() changeView: EventEmitter<string> = new EventEmitter();
@Input() view: string;
get isFullViewMode() {
return this.view === FULL;
}
get isIconViewMode() {
return this.view === ICON;
}
changeViewMode(value) {
this.changeView.emit(value);
this.view = value;
}
}

View File

@@ -0,0 +1,21 @@
<h1>Eva icons</h1>
<div class="search">
<i class="nb-search"></i>
<input class="search-input"
#searchInput
autocomplete="off"
[attr.placeholder]="'Search...'"
tabindex="-1"/>
</div>
<div class="icons">
<eva-list-view-switcher *ngIf="icons.length !== 0"
[view]="view"
(changeView)="changeView($event)">
</eva-list-view-switcher>
<eva-icon-list [icons]="icons"
[view]="view">
</eva-icon-list>
</div>

View File

@@ -0,0 +1,79 @@
@import '../../@theme/styles/themes';
@import '~bootstrap/scss/mixins/breakpoints';
@import '~@nebular/theme/styles/global/bootstrap/breakpoints';
@include nb-install-component() {
$primary: nb-theme(color-primary);
$search-input-padding-sides: 2.5rem;
$search-input-padding-tops: 1.625rem;
margin-top: 3.5rem;
margin-bottom: 4rem;
display: block;
h1 {
color: $primary;
font-size: 5rem;
text-transform: capitalize;
font-weight: 700;
}
// search
.search {
width: 100%;
position: relative;
&::after {
content: '';
position: absolute;
border: 2px solid $primary;
width: 100%;
left: 0;
bottom: 0;
border-radius: nb-theme(radius);
box-shadow: 0 8px 32px 0 #edf0f5;
}
i {
color: $primary;
position: absolute;
font-size: 2.5rem;
font-weight: nb-theme(font-weight-bold);
right: $search-input-padding-sides;
top: calc(#{$search-input-padding-tops} - 0.25rem);
}
}
.search-input {
width: 100%;
border: none;
font-size: nb-theme(font-size-xlg);
padding: $search-input-padding-tops $search-input-padding-sides;
&::placeholder {
color: nb-theme(color-fg-text);
font-weight: nb-theme(font-weight-light);
}
&::-ms-clear {
display: none;
}
}
// search
// icons container
.icons {
position: relative;
}
// icons container
eva-list-view-switcher {
position: absolute;
left: 110%;
top: 25%;
}
eva-icon-list {
margin-top: 5rem;
}
}

View File

@@ -0,0 +1,50 @@
import { AfterViewInit, Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';
import { IconService } from '../../@core/data/icon.service';
import { debounceTime, mergeMap, takeWhile } from 'rxjs/operators';
import { fromEvent } from 'rxjs';
@Component({
selector: 'eva-outline',
templateUrl: './outline.component.html',
styleUrls: ['./outline.component.scss'],
})
export class OutlineComponent implements AfterViewInit, OnDestroy {
private alive = true;
icons: string[];
view: string = 'full';
@ViewChild('searchInput') searchInput: ElementRef;
constructor(private iconService: IconService) {
this.iconService.getIconsData()
.pipe(
takeWhile(() => this.alive),
)
.subscribe((iconsData) => {
this.icons = iconsData;
});
}
ngAfterViewInit() {
fromEvent(this.searchInput.nativeElement, 'keyup')
.pipe(
debounceTime(500),
takeWhile(() => this.alive),
mergeMap((event: any) => this.iconService.getFilteredIconsData(event.target.value)),
)
.subscribe((iconsData) => {
this.icons = iconsData;
});
}
changeView(viewMode) {
this.view = viewMode;
}
ngOnDestroy() {
this.alive = false;
}
}

View File

@@ -0,0 +1,23 @@
import { NgModule } from '@angular/core';
import { EvaThemeModule } from '../@theme/theme.module';
import { OutlineComponent } from './outline/outline.component';
import { FillComponent } from './fill/fill.component';
import { IconListComponent } from './outline/icon-list/icon-list.component';
import { ListViewSwitcherComponent } from './outline/list-view-switcher/list-view-switcher.component';
@NgModule({
imports: [
EvaThemeModule,
],
declarations: [
OutlineComponent,
FillComponent,
IconListComponent,
ListViewSwitcherComponent,
],
})
export class PagesModule {
}

0
src/assets/.gitkeep Normal file
View File

Binary file not shown.

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<font id="small-social" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="facebook" d="M1024 789.333c0 89.664-80.96 170.667-170.667 170.667h-682.667c-89.707 0-170.667-81.003-170.667-170.667v-682.667c0-89.664 80.96-170.667 170.667-170.667h341.333v386.837h-125.163v170.667h125.163v66.496c0 114.688 86.101 217.963 192 217.963h137.963v-170.667h-137.963c-15.104 0-32.704-18.347-32.704-45.781v-68.011h170.667v-170.667h-170.667v-386.837h182.037c89.707 0 170.667 81.003 170.667 170.667v682.667z" />
<glyph unicode="&#xe901;" glyph-name="github" d="M368.96 137.536c-7.125-1.323-10.24-4.672-9.344-9.984 0.896-5.333 4.907-7.104 11.989-5.333 7.104 1.771 10.219 4.907 9.323 9.323-0.875 4.907-4.885 6.891-11.968 5.995zM330.987 132.203c-7.104 0-10.667-2.432-10.667-7.317 0-5.76 3.797-8.213 11.328-7.317 7.104 0 10.667 2.432 10.667 7.317 0 5.76-3.776 8.213-11.328 7.317zM279.040 134.208c-1.771-4.885 1.109-8.192 8.661-9.984 6.656-2.645 10.88-1.323 12.651 3.989 1.344 4.907-1.557 8.427-8.661 10.667-6.656 1.771-10.88 0.235-12.651-4.672zM966.635 903.723c-37.504 37.525-82.667 56.277-135.488 56.277h-639.36c-52.821 0-98.005-18.773-135.509-56.277-37.525-37.504-56.277-82.688-56.277-135.509v-639.36c0-52.821 18.773-97.984 56.277-135.488 37.504-37.547 82.688-56.277 135.509-56.277h149.184c9.749 0 17.088 0.32 21.973 0.981s9.749 3.563 14.656 8.661c4.885 5.12 7.317 12.544 7.317 22.315l-0.341 45.291c-0.213 28.864-0.341 51.733-0.341 68.608l-15.317-2.667c-9.749-1.771-22.080-2.56-36.949-2.347s-30.293 1.792-46.293 4.672c-17.082 3.236-32.142 10.244-44.84 20.142l0.232-0.174c-13.488 10.266-23.684 24.223-29.137 40.364l-0.175 0.596-6.656 15.317c-4.437 10.219-11.435 21.547-20.971 33.963-9.557 12.437-19.2 20.864-28.971 25.301l-4.672 3.328c-3.252 2.37-6.087 5.002-8.583 7.931l-0.057 0.069c-2.366 2.678-4.374 5.752-5.9 9.091l-0.095 0.231c-1.344 3.115-0.213 5.675 3.328 7.68 3.563 1.984 9.984 2.987 19.307 2.987l13.312-2.005c8.896-1.771 19.883-7.083 32.981-15.979 13.216-9.085 24.049-20.66 32.026-34.126l0.273-0.498c10.219-18.197 22.528-32.064 36.949-41.6 14.421-9.579 28.971-14.336 43.627-14.336 14.635 0 27.307 1.109 37.973 3.307 10.624 2.24 20.629 5.568 29.952 10.027 3.989 29.717 14.869 52.608 32.64 68.587-25.681 2.561-48.902 6.788-71.442 12.696l3.175-0.707c-20.203 5.333-41.067 13.973-62.613 25.984-21.547 11.989-39.403 26.837-53.611 44.608s-25.856 41.088-34.944 69.931c-9.109 28.864-13.653 62.165-13.653 99.904 0 53.717 17.536 99.456 52.608 137.173-16.427 40.405-14.869 85.696 4.651 135.872 12.885 3.989 31.979 1.003 57.28-9.003 25.301-9.984 43.84-18.56 55.616-25.643s21.205-13.077 28.309-17.984c38.007 10.998 81.664 17.324 126.799 17.324 0.37 0 0.739 0 1.108-0.001h-0.057c43.947 0 86.592-5.76 127.893-17.323l25.301 16c17.323 10.667 37.739 20.416 61.269 29.291s41.515 11.307 53.952 7.317c19.968-50.176 21.76-95.445 5.312-135.851 35.072-37.739 52.608-83.456 52.608-137.173 0-37.76-4.544-71.168-13.653-100.245-9.088-29.077-20.843-52.395-35.285-69.931-14.421-17.536-32.405-32.277-53.931-44.288-21.547-11.968-42.411-20.651-62.613-25.963-20.203-5.333-42.944-9.344-68.267-12.011 23.083-19.968 34.624-51.477 34.624-94.549v-159.168c0-7.552 1.109-13.653 3.328-18.325 2.24-4.651 5.76-7.851 10.667-9.643 4.907-1.771 9.195-2.88 12.992-3.328 3.776-0.427 9.216-0.661 16.32-0.661h149.163c52.821 0 98.005 18.752 135.509 56.277 37.525 37.504 56.277 82.688 56.277 135.509v639.317c0 52.821-18.773 98.005-56.277 135.509zM202.453 215.467c-3.115-2.219-2.667-5.76 1.323-10.667 4.459-4.437 8-5.12 10.667-1.984 3.115 2.197 2.667 5.76-1.344 10.667-4.437 3.968-7.979 4.651-10.667 1.963zM180.48 232.107c-1.323-3.115 0.213-5.781 4.672-8 3.541-2.219 6.443-1.792 8.64 1.323 1.344 3.115-0.213 5.781-4.651 8.021-4.437 1.323-7.339 0.875-8.661-1.344zM223.104 189.483c-4.011-2.219-4.011-6.229 0-11.989 3.989-5.76 7.765-7.317 11.307-4.651 4.011 3.115 4.011 7.317 0 12.651-3.541 5.76-7.317 7.104-11.307 3.989zM246.4 159.531c-3.989-3.563-3.093-7.765 2.688-12.672 5.312-5.333 9.749-5.973 13.312-1.984 3.541 3.541 2.667 7.765-2.667 12.651-5.333 5.333-9.771 5.973-13.312 2.005z" />
<glyph unicode="&#xe902;" glyph-name="twitter" d="M830.955 960h-639.168c-0.013 0-0.028 0-0.043 0-105.897 0-191.744-85.847-191.744-191.744 0-0.008 0-0.015 0-0.023v0.001-639.168c0-0.006 0-0.014 0-0.021 0-105.897 85.847-191.744 191.744-191.744 0.008 0 0.015 0 0.023 0h639.167c0.006 0 0.014 0 0.021 0 105.897 0 191.744 85.847 191.744 191.744 0 0.008 0 0.015 0 0.023v-0.001 639.147c0 0.013 0 0.028 0 0.043 0 105.897-85.847 191.744-191.744 191.744 0 0 0 0 0 0v0zM765.76 563.435l0.384-16.299c0-166.443-126.613-358.187-358.208-358.187-71.083 0-137.237 20.821-192.981 56.533 9.856-1.131 19.883-1.771 30.059-1.771 58.987 0 113.259 20.139 156.331 53.888-54.852 1.089-101.027 37.039-117.356 86.554l-0.254 0.891c7.744-1.408 15.531-2.176 23.723-2.176 11.52 0 22.613 1.472 33.173 4.352-57.984 12.065-100.937 62.715-100.992 123.407v1.606c16.441-9.315 35.986-15.082 56.817-15.781l0.207-0.006c-33.961 22.898-56 61.223-56 104.695 0 0.026 0 0.051 0 0.077v-0.004c0 23.083 6.187 44.672 17.003 63.275 62.358-76.314 154.627-126.156 258.654-131.506l0.866-0.035c-2.099 8.607-3.303 18.488-3.303 28.651 0 69.538 56.372 125.909 125.909 125.909 0.021 0 0.042 0 0.064 0h-0.003c0.028 0 0.061 0 0.095 0 36.177 0 68.788-15.262 91.748-39.699l0.062-0.066c30.156 6.113 56.936 16.706 81.116 31.193l-1.158-0.643c-9.744-29.678-29.31-53.885-54.778-69.337l-0.561-0.316c26.818 3.259 51.232 10.228 73.869 20.439l-1.591-0.642c-17.244-25.512-38.114-47.054-62.153-64.493l-0.737-0.509z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

9
src/browserslist Normal file
View File

@@ -0,0 +1,9 @@
# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# For IE 9-11 support, please uncomment the last line of the file and adjust as needed
> 0.5%
last 2 versions
Firefox ESR
not dead
# IE 9-11

View File

@@ -0,0 +1,3 @@
export const environment = {
production: true
};

View File

@@ -0,0 +1,15 @@
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.
export const environment = {
production: false
};
/*
* In development mode, for easier debugging, you can ignore zone related error
* stack frames such as `zone.run`/`zoneDelegate.invokeTask` by importing the
* below file. Don't forget to comment it out in production mode
* because it will have a performance impact when errors are thrown
*/
// import 'zone.js/dist/zone-error'; // Included with Angular CLI.

BIN
src/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

14
src/index.html Normal file
View File

@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Eva Icons</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<eva-app></eva-app>
</body>
</html>

31
src/karma.conf.js Normal file
View File

@@ -0,0 +1,31 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false
});
};

12
src/main.ts Normal file
View File

@@ -0,0 +1,12 @@
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));

80
src/polyfills.ts Normal file
View File

@@ -0,0 +1,80 @@
/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.
*
* This file is divided into 2 sections:
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
* file.
*
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
*
* Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
*/
/***************************************************************************************************
* BROWSER POLYFILLS
*/
/** IE9, IE10 and IE11 requires all of the following polyfills. **/
// import 'core-js/es6/symbol';
// import 'core-js/es6/object';
// import 'core-js/es6/function';
// import 'core-js/es6/parse-int';
// import 'core-js/es6/parse-float';
// import 'core-js/es6/number';
// import 'core-js/es6/math';
// import 'core-js/es6/string';
// import 'core-js/es6/date';
// import 'core-js/es6/array';
// import 'core-js/es6/regexp';
// import 'core-js/es6/map';
// import 'core-js/es6/weak-map';
// import 'core-js/es6/set';
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js'; // Run `npm install --save classlist.js`.
/** IE10 and IE11 requires the following for the Reflect API. */
// import 'core-js/es6/reflect';
/** Evergreen browsers require these. **/
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
import 'core-js/es7/reflect';
/**
* Web Animations `@angular/platform-browser/animations`
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
**/
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/**
* By default, zone.js will patch all possible macroTask and DomEvents
* user can disable parts of macroTask/DomEvents patch by setting following flags
*/
// (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
// (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
// (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
/*
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
* with the following flag, it will bypass `zone.js` patch for IE/Edge
*/
// (window as any).__Zone_enable_cross_context_check = true;
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
import 'zone.js/dist/zone'; // Included with Angular CLI.
/***************************************************************************************************
* APPLICATION IMPORTS
*/

20
src/test.ts Normal file
View File

@@ -0,0 +1,20 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

27
src/tsconfig.app.json Normal file
View File

@@ -0,0 +1,27 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"baseUrl": "./",
"types": [],
"paths": {
"@angular/*": [
"../node_modules/@angular/*"
],
"@nebular/*": [
"../node_modules/@nebular/*"
]
}
},
"exclude": [
"test.ts",
"**/*.spec.ts",
"../node_modules/@nebular/**/*.spec.ts"
],
"include": [
"../src/*.ts",
"../src/**/*.ts",
"../node_modules/@nebular/**/*.ts"
]
}

21
src/tsconfig.spec.json Normal file
View File

@@ -0,0 +1,21 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/spec",
"baseUrl": "./",
"module": "commonjs",
"target": "es5",
"types": [
"jasmine",
"node"
]
},
"files": [
"test.ts",
"polyfills.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

13
src/typings.d.ts vendored Normal file
View File

@@ -0,0 +1,13 @@
/**
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
/* SystemJS module definition */
declare var module: NodeModule;
interface NodeModule {
id: string;
}
declare var require: any;

22
tsconfig.json Normal file
View File

@@ -0,0 +1,22 @@
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
],
"plugins": [
{ "name": "tslint-language-service"}
]
}
}

136
tslint.json Normal file
View File

@@ -0,0 +1,136 @@
{
"rulesDirectory": [
"node_modules/codelyzer"
],
"rules": {
"trailing-comma": [
true,
{
"multiline": "always",
"singleline": "never"
}
],
"arrow-return-shorthand": true,
"callable-types": true,
"class-name": true,
"comment-format": [
true,
"check-space"
],
"eofline": true,
"forin": true,
"import-blacklist": [
true
],
"import-spacing": true,
"indent": [
true,
"spaces"
],
"interface-over-type-literal": true,
"label-position": true,
"max-line-length": [
true,
120
],
"member-access": false,
"no-arg": true,
"no-console": [
true,
"debug",
"log",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-super": true,
"no-empty": false,
"no-empty-interface": true,
"no-eval": true,
"no-misused-new": true,
"no-non-null-assertion": true,
"no-shadowed-variable": true,
"no-string-literal": false,
"no-string-throw": true,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": true,
"no-unnecessary-initializer": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"prefer-const": true,
"quotemark": [
true,
"single"
],
"radix": true,
"semicolon": [
true,
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"typeof-compare": true,
"unified-signatures": true,
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
],
"directive-selector": [
true,
"attribute",
"eva",
"camelCase"
],
"component-selector": [
true,
"element",
"eva",
"kebab-case"
],
"ban": [
true,
"eval",
"fit",
"fdescribe",
{
"name": "$",
"message": "please don't"
}
],
"use-input-property-decorator": true,
"use-output-property-decorator": true,
"no-output-rename": true,
"use-life-cycle-interface": true,
"use-pipe-transform-interface": true,
"component-class-suffix": true,
"directive-class-suffix": true,
"no-unused-variable": true
}
}