53 changed files with 34805 additions and 4 deletions
@ -0,0 +1,29 @@ |
|||
# |
|||
# Copyright © 2016-2019 The Thingsboard Authors |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
# |
|||
|
|||
# Editor configuration, see https://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 |
|||
@ -0,0 +1,46 @@ |
|||
# See http://help.github.com/ignore-files/ for more about ignoring files. |
|||
|
|||
# compiled output |
|||
/dist |
|||
/tmp |
|||
/out-tsc |
|||
# Only exists if Bazel was run |
|||
/bazel-out |
|||
|
|||
# dependencies |
|||
/node_modules |
|||
|
|||
# profiling files |
|||
chrome-profiler-events.json |
|||
speed-measure-plugin.json |
|||
|
|||
# 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 |
|||
.history/* |
|||
|
|||
# misc |
|||
/.sass-cache |
|||
/connect.lock |
|||
/coverage |
|||
/libpeerconnection.log |
|||
npm-debug.log |
|||
yarn-error.log |
|||
testem.log |
|||
/typings |
|||
|
|||
# System Files |
|||
.DS_Store |
|||
Thumbs.db |
|||
@ -0,0 +1,167 @@ |
|||
{ |
|||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", |
|||
"version": 1, |
|||
"newProjectRoot": "projects", |
|||
"projects": { |
|||
"thingsboard": { |
|||
"root": "", |
|||
"sourceRoot": "src", |
|||
"projectType": "application", |
|||
"prefix": "tb", |
|||
"schematics": { |
|||
"@schematics/angular:component": { |
|||
"style": "scss" |
|||
} |
|||
}, |
|||
"architect": { |
|||
"build": { |
|||
"builder": "@angular-builders/custom-webpack:browser", |
|||
"options": { |
|||
"outputPath": "target/generated-resources/public", |
|||
"index": "src/index.html", |
|||
"main": "src/main.ts", |
|||
"polyfills": "src/polyfills.ts", |
|||
"tsConfig": "src/tsconfig.app.json", |
|||
"assets": [ |
|||
"src/thingsboard.ico", |
|||
"src/assets" |
|||
], |
|||
"styles": [ |
|||
"src/styles.scss" |
|||
], |
|||
"scripts": [ |
|||
"node_modules/ace-builds/src-min/ace.js", |
|||
"node_modules/ace-builds/src-min/ext-language_tools.js", |
|||
"node_modules/ace-builds/src-min/ext-searchbox.js", |
|||
"node_modules/ace-builds/src-min/theme-github.js", |
|||
"node_modules/ace-builds/src-min/mode-text.js", |
|||
"node_modules/ace-builds/src-min/mode-markdown.js", |
|||
"node_modules/ace-builds/src-min/mode-html.js", |
|||
"node_modules/ace-builds/src-min/mode-css.js", |
|||
"node_modules/ace-builds/src-min/mode-json.js", |
|||
"node_modules/ace-builds/src-min/mode-java.js", |
|||
"node_modules/ace-builds/src-min/mode-javascript.js", |
|||
"node_modules/ace-builds/src-min/snippets/text.js", |
|||
"node_modules/ace-builds/src-min/snippets/markdown.js", |
|||
"node_modules/ace-builds/src-min/snippets/html.js", |
|||
"node_modules/ace-builds/src-min/snippets/css.js", |
|||
"node_modules/ace-builds/src-min/snippets/json.js", |
|||
"node_modules/ace-builds/src-min/snippets/java.js", |
|||
"node_modules/ace-builds/src-min/snippets/javascript.js", |
|||
{ "bundleName": "worker-html", "input": "node_modules/ace-builds/src-min/worker-html.js" }, |
|||
{ "bundleName": "worker-css", "input": "node_modules/ace-builds/src-min/worker-css.js" }, |
|||
{ "bundleName": "worker-json", "input": "node_modules/ace-builds/src-min/worker-json.js" }, |
|||
{ "bundleName": "worker-javascript", "input": "node_modules/ace-builds/src-min/worker-javascript.js" } |
|||
], |
|||
"es5BrowserSupport": true, |
|||
"customWebpackConfig": { |
|||
"path": "./extra-webpack.config.js" |
|||
} |
|||
}, |
|||
"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, |
|||
"budgets": [ |
|||
{ |
|||
"type": "initial", |
|||
"maximumWarning": "2mb", |
|||
"maximumError": "5mb" |
|||
} |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
"serve": { |
|||
"builder": "@angular-builders/dev-server:generic", |
|||
"options": { |
|||
"browserTarget": "thingsboard:build", |
|||
"proxyConfig": "proxy.conf.json" |
|||
}, |
|||
"configurations": { |
|||
"production": { |
|||
"browserTarget": "thingsboard:build:production" |
|||
} |
|||
} |
|||
}, |
|||
"extract-i18n": { |
|||
"builder": "@angular-devkit/build-angular:extract-i18n", |
|||
"options": { |
|||
"browserTarget": "thingsboard: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": [ |
|||
"src/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/**" |
|||
] |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"thingsboard-e2e": { |
|||
"root": "e2e/", |
|||
"projectType": "application", |
|||
"prefix": "", |
|||
"architect": { |
|||
"e2e": { |
|||
"builder": "@angular-devkit/build-angular:protractor", |
|||
"options": { |
|||
"protractorConfig": "e2e/protractor.conf.js", |
|||
"devServerTarget": "thingsboard:serve" |
|||
}, |
|||
"configurations": { |
|||
"production": { |
|||
"devServerTarget": "thingsboard:serve:production" |
|||
} |
|||
} |
|||
}, |
|||
"lint": { |
|||
"builder": "@angular-devkit/build-angular:tslint", |
|||
"options": { |
|||
"tsConfig": "e2e/tsconfig.e2e.json", |
|||
"exclude": [ |
|||
"**/node_modules/**" |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"defaultProject": "thingsboard" |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
/* |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
// Protractor configuration file, see link for more information
|
|||
// https://github.com/angular/protractor/blob/master/lib/config.ts
|
|||
|
|||
const { SpecReporter } = require('jasmine-spec-reporter'); |
|||
|
|||
exports.config = { |
|||
allScriptsTimeout: 11000, |
|||
specs: [ |
|||
'./src/**/*.e2e-spec.ts' |
|||
], |
|||
capabilities: { |
|||
'browserName': 'chrome' |
|||
}, |
|||
directConnect: true, |
|||
baseUrl: 'http://localhost:4200/', |
|||
framework: 'jasmine', |
|||
jasmineNodeOpts: { |
|||
showColors: true, |
|||
defaultTimeoutInterval: 30000, |
|||
print: function() {} |
|||
}, |
|||
onPrepare() { |
|||
require('ts-node').register({ |
|||
project: require('path').join(__dirname, './tsconfig.e2e.json') |
|||
}); |
|||
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); |
|||
} |
|||
}; |
|||
@ -0,0 +1,39 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
import { AppPage } from './app.po'; |
|||
import { browser, logging } from 'protractor'; |
|||
|
|||
describe('workspace-project App', () => { |
|||
let page: AppPage; |
|||
|
|||
beforeEach(() => { |
|||
page = new AppPage(); |
|||
}); |
|||
|
|||
it('should display welcome message', () => { |
|||
page.navigateTo(); |
|||
expect(page.getTitleText()).toEqual('Welcome to tb-license-server!'); |
|||
}); |
|||
|
|||
afterEach(async () => { |
|||
// Assert that there are no errors emitted from the browser
|
|||
const logs = await browser.manage().logs().get(logging.Type.BROWSER); |
|||
expect(logs).not.toContain(jasmine.objectContaining({ |
|||
level: logging.Level.SEVERE, |
|||
} as logging.Entry)); |
|||
}); |
|||
}); |
|||
@ -0,0 +1,27 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
import { browser, by, element } from 'protractor'; |
|||
|
|||
export class AppPage { |
|||
navigateTo() { |
|||
return browser.get(browser.baseUrl) as Promise<any>; |
|||
} |
|||
|
|||
getTitleText() { |
|||
return element(by.css('tb-root h1')).getText() as Promise<string>; |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
{ |
|||
"extends": "../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../out-tsc/app", |
|||
"module": "commonjs", |
|||
"target": "es5", |
|||
"types": [ |
|||
"jasmine", |
|||
"jasminewd2", |
|||
"node" |
|||
] |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
/* |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
const CompressionPlugin = require('compression-webpack-plugin'); |
|||
const webpack = require('webpack'); |
|||
const dirTree = require('directory-tree'); |
|||
|
|||
var langs = []; |
|||
|
|||
dirTree('./src/assets/locale/', {extensions:/\.json$/}, (item) => { |
|||
/* It is expected what the name of a locale file has the following format: */ |
|||
/* 'locale.constant-LANG_CODE[_REGION_CODE].json', e.g. locale.constant-es.json or locale.constant-zh_CN.json*/ |
|||
langs.push(item.name.slice(item.name.lastIndexOf('-') + 1, -5)); |
|||
}); |
|||
|
|||
module.exports = { |
|||
plugins: [ |
|||
new webpack.DefinePlugin({ |
|||
TB_VERSION: JSON.stringify(require('./package.json').version), |
|||
SUPPORTED_LANGS: JSON.stringify(langs) |
|||
}), |
|||
new CompressionPlugin({ |
|||
filename: "[path].gz[query]", |
|||
algorithm: "gzip", |
|||
test: /\.js$|\.css$|\.svg$|\.ttf$|\.woff$|\.woff2$|\.eot$|\.json$/, |
|||
threshold: 10240, |
|||
minRatio: 0.8, |
|||
deleteOriginalAssets: false |
|||
}) |
|||
] |
|||
}; |
|||
File diff suppressed because it is too large
@ -0,0 +1,74 @@ |
|||
{ |
|||
"name": "thingsboard", |
|||
"version": "3.0.0", |
|||
"scripts": { |
|||
"ng": "ng", |
|||
"start": "ng serve --host 0.0.0.0 --open", |
|||
"build": "ng build", |
|||
"build:prod": "ng build --prod --vendor-chunk", |
|||
"test": "ng test", |
|||
"lint": "ng lint", |
|||
"e2e": "ng e2e" |
|||
}, |
|||
"private": true, |
|||
"dependencies": { |
|||
"@angular/animations": "~8.2.0", |
|||
"@angular/cdk": "~8.1.2", |
|||
"@angular/common": "~8.2.0", |
|||
"@angular/compiler": "~8.2.0", |
|||
"@angular/core": "~8.2.0", |
|||
"@angular/flex-layout": "^8.0.0-beta.26", |
|||
"@angular/forms": "~8.2.0", |
|||
"@angular/material": "^8.1.2", |
|||
"@angular/platform-browser": "~8.2.0", |
|||
"@angular/platform-browser-dynamic": "~8.2.0", |
|||
"@angular/router": "~8.2.0", |
|||
"@auth0/angular-jwt": "^3.0.0", |
|||
"@mat-datetimepicker/core": "^2.0.1", |
|||
"@ngrx/effects": "^8.2.0", |
|||
"@ngrx/store": "^8.2.0", |
|||
"@ngrx/store-devtools": "^8.2.0", |
|||
"@ngx-translate/core": "^11.0.1", |
|||
"@ngx-translate/http-loader": "^4.0.0", |
|||
"ace-builds": "^1.4.5", |
|||
"compass-sass-mixins": "^0.12.7", |
|||
"core-js": "^3.1.4", |
|||
"font-awesome": "^4.7.0", |
|||
"hammerjs": "^2.0.8", |
|||
"material-design-icons": "^3.0.1", |
|||
"messageformat": "^2.3.0", |
|||
"ngx-clipboard": "^12.2.0", |
|||
"ngx-translate-messageformat-compiler": "^4.5.0", |
|||
"rxjs": "~6.5.2", |
|||
"screenfull": "^4.2.1", |
|||
"tslib": "^1.10.0", |
|||
"typeface-roboto": "^0.0.75", |
|||
"zone.js": "~0.9.1" |
|||
}, |
|||
"devDependencies": { |
|||
"@angular-builders/custom-webpack": "^8.1.0", |
|||
"@angular-builders/dev-server": "^7.3.1", |
|||
"@angular-devkit/build-angular": "^0.802.0", |
|||
"@angular/cli": "~8.2.0", |
|||
"@angular/compiler-cli": "~8.2.0", |
|||
"@angular/language-service": "~8.2.0", |
|||
"@types/jasmine": "~3.4.0", |
|||
"@types/jasminewd2": "~2.0.6", |
|||
"@types/node": "~10.14.15", |
|||
"codelyzer": "~5.1.0", |
|||
"compression-webpack-plugin": "^3.0.0", |
|||
"directory-tree": "^2.2.3", |
|||
"jasmine-core": "~3.4.0", |
|||
"jasmine-spec-reporter": "~4.2.1", |
|||
"karma": "~4.2.0", |
|||
"karma-chrome-launcher": "~3.0.0", |
|||
"karma-coverage-istanbul-reporter": "~2.1.0", |
|||
"karma-jasmine": "~2.0.1", |
|||
"karma-jasmine-html-reporter": "^1.4.2", |
|||
"ngrx-store-freeze": "^0.2.4", |
|||
"protractor": "~5.4.2", |
|||
"ts-node": "~8.3.0", |
|||
"tslint": "~5.18.0", |
|||
"typescript": "~3.5.3" |
|||
} |
|||
} |
|||
@ -0,0 +1,141 @@ |
|||
<!-- |
|||
|
|||
Copyright © 2016-2019 The Thingsboard Authors |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
|||
|
|||
--> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
<parent> |
|||
<groupId>org.thingsboard</groupId> |
|||
<version>3.0.0-SNAPSHOT</version> |
|||
<artifactId>thingsboard</artifactId> |
|||
</parent> |
|||
<groupId>org.thingsboard</groupId> |
|||
<artifactId>ui-ngx</artifactId> |
|||
<packaging>jar</packaging> |
|||
|
|||
<name>ThingsBoard Server UI</name> |
|||
<url>https://thingsboard.io</url> |
|||
|
|||
<properties> |
|||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
|||
<main.dir>${basedir}/..</main.dir> |
|||
</properties> |
|||
|
|||
<build> |
|||
<resources> |
|||
<resource> |
|||
<directory>${project.build.directory}/generated-resources</directory> |
|||
</resource> |
|||
</resources> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>com.github.eirslett</groupId> |
|||
<artifactId>frontend-maven-plugin</artifactId> |
|||
<version>1.7.5</version> |
|||
<configuration> |
|||
<installDirectory>target</installDirectory> |
|||
<workingDirectory>${basedir}</workingDirectory> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<id>install node and npm</id> |
|||
<goals> |
|||
<goal>install-node-and-npm</goal> |
|||
</goals> |
|||
<configuration> |
|||
<nodeVersion>v10.16.0</nodeVersion> |
|||
<npmVersion>6.9.0</npmVersion> |
|||
</configuration> |
|||
</execution> |
|||
<execution> |
|||
<id>npm install</id> |
|||
<goals> |
|||
<goal>npm</goal> |
|||
</goals> |
|||
<configuration> |
|||
<arguments>install</arguments> |
|||
</configuration> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
<profiles> |
|||
<profile> |
|||
<id>npm-build</id> |
|||
<activation> |
|||
<activeByDefault>true</activeByDefault> |
|||
</activation> |
|||
<build> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>com.github.eirslett</groupId> |
|||
<artifactId>frontend-maven-plugin</artifactId> |
|||
<version>1.7.5</version> |
|||
<configuration> |
|||
<installDirectory>target</installDirectory> |
|||
<workingDirectory>${basedir}</workingDirectory> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<id>npm build</id> |
|||
<goals> |
|||
<goal>npm</goal> |
|||
</goals> |
|||
<configuration> |
|||
<arguments>run build:prod</arguments> |
|||
</configuration> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
</profile> |
|||
<profile> |
|||
<id>npm-start</id> |
|||
<activation> |
|||
<property> |
|||
<name>npm-start</name> |
|||
</property> |
|||
</activation> |
|||
<build> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>com.github.eirslett</groupId> |
|||
<artifactId>frontend-maven-plugin</artifactId> |
|||
<version>1.7.5</version> |
|||
<configuration> |
|||
<installDirectory>target</installDirectory> |
|||
<workingDirectory>${basedir}</workingDirectory> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<id>npm start</id> |
|||
<goals> |
|||
<goal>npm</goal> |
|||
</goals> |
|||
<configuration> |
|||
<arguments>start</arguments> |
|||
</configuration> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
</profile> |
|||
</profiles> |
|||
</project> |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"/api": { |
|||
"target": "http://localhost:8080", |
|||
"secure": false |
|||
} |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
import { BrowserModule } from '@angular/platform-browser'; |
|||
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; |
|||
import { NgModule } from '@angular/core'; |
|||
|
|||
/* import { AppRoutingModule } from './app-routing.module'; |
|||
import { CoreModule } from './core/core.module'; |
|||
import { LoginModule } from './modules/login/login.module'; |
|||
import { HomeModule } from './modules/home/home.module'; |
|||
|
|||
import { AppComponent } from './app.component'; */ |
|||
|
|||
@NgModule({ |
|||
declarations: [ |
|||
/* AppComponent */ |
|||
], |
|||
imports: [ |
|||
/* BrowserModule, |
|||
BrowserAnimationsModule, |
|||
AppRoutingModule, |
|||
CoreModule, |
|||
LoginModule, |
|||
HomeModule */ |
|||
], |
|||
providers: [], |
|||
bootstrap: [/*AppComponent*/] |
|||
}) |
|||
export class AppModule { } |
|||
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
@ -0,0 +1,11 @@ |
|||
# 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 remove 'not' from the last line of the file and adjust as needed |
|||
|
|||
> 0.5% |
|||
last 2 versions |
|||
Firefox ESR |
|||
not dead |
|||
not IE 9-11 |
|||
@ -0,0 +1,25 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
export const environment = { |
|||
appTitle: 'ThingsBoard', |
|||
production: true, |
|||
// @ts-ignore
|
|||
tbVersion: TB_VERSION, |
|||
// @ts-ignore
|
|||
supportedLangs: SUPPORTED_LANGS, |
|||
defaultLang: 'en_US' |
|||
}; |
|||
@ -0,0 +1,38 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
// 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 = { |
|||
appTitle: 'ThingsBoard', |
|||
production: false, |
|||
// @ts-ignore
|
|||
tbVersion: TB_VERSION, |
|||
// @ts-ignore
|
|||
supportedLangs: SUPPORTED_LANGS, |
|||
defaultLang: 'en_US' |
|||
}; |
|||
|
|||
/* |
|||
* For easier debugging in development mode, you can import the following file |
|||
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. |
|||
* |
|||
* This import should be commented out in production mode because it will have a negative impact |
|||
* on performance if an error is thrown. |
|||
*/ |
|||
// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
|
|||
@ -0,0 +1,31 @@ |
|||
<!-- |
|||
|
|||
Copyright © 2016-2019 The Thingsboard Authors |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
|||
|
|||
--> |
|||
<!doctype html> |
|||
<html lang="en" style="width: 100%;"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>ThingsBoard</title> |
|||
<base href="/"> |
|||
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link rel="icon" type="image/x-icon" href="thingsboard.ico"> |
|||
</head> |
|||
<body class="tb-default"> |
|||
<tb-root></tb-root> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,47 @@ |
|||
/* |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
// 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/tb-license-server'), |
|||
reports: ['html', 'lcovonly', 'text-summary'], |
|||
fixWebpackSourcePaths: true |
|||
}, |
|||
reporters: ['progress', 'kjhtml'], |
|||
port: 9876, |
|||
colors: true, |
|||
logLevel: config.LOG_INFO, |
|||
autoWatch: true, |
|||
browsers: ['Chrome'], |
|||
singleRun: false, |
|||
restartOnFileChange: true |
|||
}); |
|||
}; |
|||
@ -0,0 +1,30 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
import 'hammerjs'; |
|||
|
|||
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.error(err)); |
|||
@ -0,0 +1,79 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
/** |
|||
* 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/guide/browser-support
|
|||
*/ |
|||
|
|||
/*************************************************************************************************** |
|||
* BROWSER POLYFILLS |
|||
*/ |
|||
|
|||
/** IE10 and IE11 requires the following for NgClass support on SVG elements */ |
|||
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
|||
|
|||
/** |
|||
* 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 |
|||
* because those flags need to be set before `zone.js` being loaded, and webpack |
|||
* will put import in the top of bundle, so user need to create a separate file |
|||
* in this directory (for example: zone-flags.ts), and put the following flags |
|||
* into that file, and then add the following code before importing zone.js. |
|||
* import './zone-flags.ts'; |
|||
* |
|||
* The flags allowed in zone-flags.ts are listed here. |
|||
* |
|||
* The following flags will work for all browsers. |
|||
* |
|||
* (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.
|
|||
import 'core-js/es/array'; |
|||
|
|||
/*************************************************************************************************** |
|||
* APPLICATION IMPORTS |
|||
*/ |
|||
@ -0,0 +1,48 @@ |
|||
/** |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
@import "~compass-sass-mixins/lib/animate"; |
|||
|
|||
@keyframes tbMoveFromTopFade { |
|||
from { |
|||
opacity: 0; |
|||
|
|||
transform: translate(0, -100%); |
|||
} |
|||
} |
|||
|
|||
@keyframes tbMoveToTopFade { |
|||
to { |
|||
opacity: 0; |
|||
|
|||
transform: translate(0, -100%); |
|||
} |
|||
} |
|||
|
|||
@keyframes tbMoveFromBottomFade { |
|||
from { |
|||
opacity: 0; |
|||
|
|||
transform: translate(0, 100%); |
|||
} |
|||
} |
|||
|
|||
@keyframes tbMoveToBottomFade { |
|||
to { |
|||
opacity: 0; |
|||
|
|||
transform: translate(0, 150%); |
|||
} |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
/** |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
$mat-xs: "screen and (max-width: 599px)"; |
|||
$mat-sm: "screen and (min-width: 600px) and (max-width: 959px)"; |
|||
$mat-md: "screen and (min-width: 960px) and (max-width: 1279px)"; |
|||
$mat-lg: "screen and (min-width: 1280px) and (max-width: 1919px)"; |
|||
$mat-xl: "screen and (min-width: 1920px) and (max-width: 5000px)"; |
|||
$mat-lt-sm: "screen and (max-width: 599px)"; |
|||
$mat-lt-md: "screen and (max-width: 959px)"; |
|||
$mat-lt-lg: "screen and (max-width: 1279px)"; |
|||
$mat-lt-xl: "screen and (max-width: 1919px)"; |
|||
$mat-gt-xs: "screen and (min-width: 600px)"; |
|||
$mat-gt-sm: "screen and (min-width: 960px)"; |
|||
$mat-gt-md: "screen and (min-width: 1280px)"; |
|||
$mat-gt-xmd: "screen and (min-width: 1600px)"; |
|||
$mat-gt-xl: "screen and (min-width: 1920px)"; |
|||
@ -0,0 +1,314 @@ |
|||
/** |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
/* You can add global styles to this file, and also import other style files */ |
|||
|
|||
@import '~material-design-icons/iconfont/material-icons.css'; |
|||
@import '~typeface-roboto/index.css'; |
|||
@import '~font-awesome/css/font-awesome.min.css'; |
|||
@import 'theme.scss'; |
|||
@import './scss/constants'; |
|||
@import './scss/animations'; |
|||
|
|||
body, html { |
|||
height: 100%; |
|||
min-height: 100%; |
|||
position: relative; |
|||
-webkit-tap-highlight-color: rgba(0,0,0,0); |
|||
-webkit-touch-callout: none; |
|||
|
|||
-webkit-text-size-adjust: 100%; |
|||
-ms-text-size-adjust: 100%; |
|||
|
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
background-color: rgb(250,250,250); |
|||
} |
|||
|
|||
tb-root { |
|||
margin: 0; |
|||
width: 100%; |
|||
min-height: 100%; |
|||
height: 100%; |
|||
display: flex; |
|||
flex-direction: row; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
/*************** |
|||
* TYPE DEFAULTS |
|||
***************/ |
|||
|
|||
body, |
|||
button, |
|||
html, |
|||
input, |
|||
select, |
|||
textarea, |
|||
td, |
|||
th { |
|||
font-family: Roboto, "Helvetica Neue", sans-serif; |
|||
font-size: 16px; |
|||
} |
|||
|
|||
body { |
|||
line-height: normal; |
|||
} |
|||
|
|||
a { |
|||
font-weight: 400; |
|||
color: #106cc8; |
|||
text-decoration: none; |
|||
border-bottom: 1px solid rgba(64, 84, 178, .25); |
|||
|
|||
transition: border-bottom .35s; |
|||
} |
|||
|
|||
a:hover, |
|||
a:focus { |
|||
border-bottom: 1px solid #4054b2; |
|||
} |
|||
|
|||
h1, |
|||
h2, |
|||
h3, |
|||
h4, |
|||
h5, |
|||
h6 { |
|||
margin-top: 1rem; |
|||
margin-bottom: 1rem; |
|||
} |
|||
|
|||
h1 { |
|||
font-size: 3.4rem; |
|||
font-weight: 400; |
|||
line-height: 4rem; |
|||
} |
|||
|
|||
h2 { |
|||
font-size: 2.4rem; |
|||
font-weight: 400; |
|||
line-height: 3.2rem; |
|||
} |
|||
|
|||
h3 { |
|||
font-size: 2rem; |
|||
font-weight: 500; |
|||
letter-spacing: .005em; |
|||
} |
|||
|
|||
h4 { |
|||
font-size: 1.6rem; |
|||
font-weight: 400; |
|||
line-height: 2.4rem; |
|||
letter-spacing: .01em; |
|||
} |
|||
|
|||
p { |
|||
margin: .8em 0 1.6em; |
|||
font-size: 1.6rem; |
|||
font-weight: 400; |
|||
line-height: 1.6em; |
|||
letter-spacing: .01em; |
|||
} |
|||
|
|||
strong { |
|||
font-weight: 500; |
|||
} |
|||
|
|||
blockquote { |
|||
padding-left: 16px; |
|||
margin-left: 0; |
|||
font-style: italic; |
|||
border-left: 3px solid rgba(0, 0, 0, .12); |
|||
} |
|||
|
|||
fieldset { |
|||
padding: 0; |
|||
margin: 0; |
|||
border: none; |
|||
} |
|||
|
|||
section.tb-header-buttons { |
|||
position: absolute; |
|||
top: 86px; |
|||
right: 0; |
|||
z-index: 3; |
|||
pointer-events: none; |
|||
|
|||
@media #{$mat-gt-sm} { |
|||
top: 86px; |
|||
} |
|||
|
|||
.tb-btn-header { |
|||
margin: 6px 8px; |
|||
position: relative !important; |
|||
display: inline-block !important; |
|||
animation: tbMoveFromTopFade .3s ease both; |
|||
|
|||
&.tb-hide { |
|||
animation: tbMoveToTopFade .3s ease both; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.tb-details-buttons { |
|||
button { |
|||
margin: 6px 8px; |
|||
} |
|||
} |
|||
|
|||
label { |
|||
&.tb-title { |
|||
padding-bottom: 15px; |
|||
font-size: 13px; |
|||
font-weight: 400; |
|||
color: #666; |
|||
pointer-events: none; |
|||
|
|||
&.no-padding { |
|||
padding-bottom: 0; |
|||
} |
|||
|
|||
&.tb-required::after { |
|||
font-size: 13px; |
|||
color: rgba(0, 0, 0, .54); |
|||
vertical-align: top; |
|||
content: " *"; |
|||
} |
|||
|
|||
&.tb-error { |
|||
color: rgb(221, 44, 0); |
|||
|
|||
&.tb-required::after { |
|||
color: rgb(221, 44, 0); |
|||
} |
|||
} |
|||
} |
|||
&.tb-small { |
|||
font-size: 12px; |
|||
color: rgba(0, 0, 0, .54); |
|||
pointer-events: none; |
|||
} |
|||
} |
|||
|
|||
pre.tb-highlight { |
|||
display: block; |
|||
padding: 15px; |
|||
margin: 20px 0; |
|||
overflow-x: auto; |
|||
background-color: #f7f7f7; |
|||
|
|||
code { |
|||
box-sizing: border-box; |
|||
display: inline-block; |
|||
padding: 0; |
|||
font-family: monospace; |
|||
font-size: 16px; |
|||
font-weight: 700; |
|||
color: #303030; |
|||
vertical-align: bottom; |
|||
} |
|||
} |
|||
|
|||
.ace_editor { |
|||
font-size: 16px !important; |
|||
} |
|||
|
|||
.tb-timewindow-panel { |
|||
overflow: hidden; |
|||
background: #fff; |
|||
border-radius: 4px; |
|||
box-shadow: |
|||
0 7px 8px -4px rgba(0, 0, 0, .2), |
|||
0 13px 19px 2px rgba(0, 0, 0, .14), |
|||
0 5px 24px 4px rgba(0, 0, 0, .12); |
|||
} |
|||
|
|||
.tb-panel-actions { |
|||
margin-bottom: 0; |
|||
padding: 8px 8px 8px 16px; |
|||
.mat-button+.mat-button, |
|||
.mat-button+.mat-raised-button, |
|||
.mat-raised-button+.mat-button, |
|||
.mat-raised-button+.mat-raised-button { |
|||
margin-left: 8px; |
|||
} |
|||
} |
|||
|
|||
.tb-container { |
|||
position: relative; |
|||
padding: 10px 0; |
|||
margin-top: 32px; |
|||
} |
|||
|
|||
.tb-fullscreen { |
|||
position: fixed !important; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100% !important; |
|||
height: 100% !important; |
|||
} |
|||
|
|||
.tb-fullscreen-parent { |
|||
background: #fff; |
|||
} |
|||
|
|||
mat-label { |
|||
&.tb-title { |
|||
font-size: 13px; |
|||
font-weight: 400; |
|||
color: #666; |
|||
pointer-events: none; |
|||
|
|||
&.no-padding { |
|||
padding-bottom: 0; |
|||
} |
|||
|
|||
&.tb-required::after { |
|||
font-size: 13px; |
|||
color: rgba(0, 0, 0, .54); |
|||
vertical-align: top; |
|||
content: " *"; |
|||
} |
|||
|
|||
&.tb-error { |
|||
color: rgb(221, 44, 0); |
|||
|
|||
&.tb-required::after { |
|||
color: rgb(221, 44, 0); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.tb-error-messages { |
|||
height: 24px; //30px |
|||
margin-top: -6px; |
|||
} |
|||
|
|||
.tb-error-message { |
|||
transition: all .3s cubic-bezier(.55, 0, .55, .2); |
|||
padding: 10px 0 0 10px; |
|||
overflow: hidden; |
|||
font-size: 12px; |
|||
line-height: 14px; |
|||
color: rgb(221, 44, 0); |
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
///
|
|||
/// Copyright © 2016-2019 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
// 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); |
|||
@ -0,0 +1,557 @@ |
|||
/** |
|||
* Copyright © 2016-2019 The Thingsboard Authors |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0 |
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
*/ |
|||
@import '~@angular/material/theming'; |
|||
@import '~@mat-datetimepicker/core/datetimepicker/datetimepicker-theme.scss'; |
|||
@import './scss/constants'; |
|||
|
|||
@include mat-core(); |
|||
|
|||
$tb-primary-color: #305680; |
|||
$tb-secondary-color: #527dad; |
|||
$tb-hue3-color: #a7c1de; |
|||
|
|||
$tb-dark-primary-color: #9fa8da; |
|||
|
|||
$tb-mat-indigo: ( |
|||
50: #e8eaf6, |
|||
100: #c5cae9, |
|||
200: #9fa8da, |
|||
300: #7986cb, |
|||
400: #5c6bc0, |
|||
500: $tb-primary-color, |
|||
600: $tb-secondary-color, |
|||
700: #303f9f, |
|||
800: #283593, |
|||
900: #1a237e, |
|||
A100: $tb-hue3-color, |
|||
A200: #536dfe, |
|||
A400: #3d5afe, |
|||
A700: #304ffe, |
|||
contrast: ( |
|||
50: $dark-primary-text, |
|||
100: $dark-primary-text, |
|||
200: $dark-primary-text, |
|||
300: $light-primary-text, |
|||
400: $light-primary-text, |
|||
500: $light-primary-text, |
|||
600: $light-primary-text, |
|||
700: $light-primary-text, |
|||
800: $light-primary-text, |
|||
900: $light-primary-text, |
|||
A100: $dark-primary-text, |
|||
A200: $light-primary-text, |
|||
A400: $light-primary-text, |
|||
A700: $light-primary-text, |
|||
) |
|||
); |
|||
|
|||
$tb-primary: mat-palette($tb-mat-indigo); |
|||
$tb-accent: mat-palette($mat-deep-orange); |
|||
|
|||
// Background palette for light themes. |
|||
$tb-light-theme-background: ( |
|||
status-bar: map_get($mat-grey, 300), |
|||
app-bar: map_get($mat-grey, 100), |
|||
background: #eee, // map_get($mat-grey, 50), |
|||
hover: rgba(black, 0.04), |
|||
card: white, |
|||
dialog: white, |
|||
disabled-button: rgba(black, 0.12), |
|||
raised-button: white, |
|||
focused-button: $dark-focused, |
|||
selected-button: map_get($mat-grey, 300), |
|||
selected-disabled-button: map_get($mat-grey, 400), |
|||
disabled-button-toggle: map_get($mat-grey, 200), |
|||
unselected-chip: map_get($mat-grey, 300), |
|||
disabled-list-option: map_get($mat-grey, 200), |
|||
); |
|||
|
|||
@function get-tb-light-theme($primary, $accent, $warn: mat-palette($mat-red)) { |
|||
@return ( |
|||
primary: $primary, |
|||
accent: $accent, |
|||
warn: $warn, |
|||
is-dark: false, |
|||
foreground: $mat-light-theme-foreground, |
|||
background: $tb-light-theme-background, |
|||
); |
|||
} |
|||
|
|||
$tb-theme: get-tb-light-theme( |
|||
$tb-primary, |
|||
$tb-accent |
|||
); |
|||
|
|||
$primary: mat-color($tb-primary); |
|||
$accent: mat-color($tb-accent); |
|||
|
|||
$tb-dark-mat-indigo: ( |
|||
50: #e8eaf6, |
|||
100: #c5cae9, |
|||
200: #9fa8da, |
|||
300: #7986cb, |
|||
400: #5c6bc0, |
|||
500: $tb-dark-primary-color, |
|||
600: $tb-secondary-color, |
|||
700: #303f9f, |
|||
800: #283593, |
|||
900: #1a237e, |
|||
A100: $tb-hue3-color, |
|||
A200: #536dfe, |
|||
A400: #3d5afe, |
|||
A700: #304ffe, |
|||
contrast: ( |
|||
50: $dark-primary-text, |
|||
100: $dark-primary-text, |
|||
200: $dark-primary-text, |
|||
300: $dark-primary-text, |
|||
400: $dark-primary-text, |
|||
500: map_get($tb-mat-indigo, 900), |
|||
600: $light-primary-text, |
|||
700: $light-primary-text, |
|||
800: $light-primary-text, |
|||
900: $light-primary-text, |
|||
A100: $dark-primary-text, |
|||
A200: $dark-primary-text, |
|||
A400: $dark-primary-text, |
|||
A700: $dark-primary-text, |
|||
) |
|||
); |
|||
|
|||
$tb-dark-primary: mat-palette($tb-dark-mat-indigo); |
|||
|
|||
$tb-dark-theme-background: ( |
|||
status-bar: black, |
|||
app-bar: map_get($tb-mat-indigo, 900), |
|||
background: map_get($tb-mat-indigo, 800), |
|||
hover: rgba(white, 0.04), |
|||
card: map_get($tb-mat-indigo, 800), |
|||
dialog: map_get($tb-mat-indigo, 800), |
|||
disabled-button: rgba(white, 0.12), |
|||
raised-button: map-get($tb-mat-indigo, 50), |
|||
focused-button: $light-focused, |
|||
selected-button: map_get($tb-mat-indigo, 900), |
|||
selected-disabled-button: map_get($tb-mat-indigo, 800), |
|||
disabled-button-toggle: black, |
|||
unselected-chip: map_get($tb-mat-indigo, 700), |
|||
disabled-list-option: black, |
|||
); |
|||
|
|||
@function get-tb-dark-theme($primary, $accent, $warn: mat-palette($mat-red)) { |
|||
@return ( |
|||
primary: $primary, |
|||
accent: $accent, |
|||
warn: $warn, |
|||
is-dark: true, |
|||
foreground: $mat-dark-theme-foreground, |
|||
background: $tb-dark-theme-background, |
|||
); |
|||
} |
|||
|
|||
$tb-dark-theme: get-tb-dark-theme( |
|||
$tb-dark-primary, |
|||
$tb-accent |
|||
); |
|||
|
|||
.tb-default { |
|||
@include angular-material-theme($tb-theme); |
|||
@include mat-datetimepicker-theme($tb-theme); |
|||
} |
|||
|
|||
.tb-dark { |
|||
@include angular-material-theme($tb-dark-theme); |
|||
} |
|||
|
|||
.tb-default, .tb-dark { |
|||
|
|||
/********************************* |
|||
* MATERIAL DESIGN CUSTOMIZATIONS |
|||
********************************/ |
|||
|
|||
.mat-tooltip { |
|||
white-space: pre-line; |
|||
} |
|||
|
|||
button { |
|||
pointer-events: all; |
|||
} |
|||
|
|||
button:not(.mat-menu-item):not(.mat-sort-header-button) { |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
button.mat-menu-item { |
|||
font-size: 15px; |
|||
} |
|||
|
|||
button.mat-fab.mat-fab-bottom-right { |
|||
top: auto; |
|||
right: 20px; |
|||
bottom: 20px; |
|||
left: auto; |
|||
position: absolute; |
|||
} |
|||
|
|||
.layout-padding, .layout-padding > * { |
|||
@media #{$mat-lt-md} { |
|||
padding: 4px; |
|||
} |
|||
@media #{$mat-gt-sm} { |
|||
padding: 8px; |
|||
} |
|||
} |
|||
|
|||
.mat-padding { |
|||
padding: 8px; |
|||
@media #{$mat-gt-sm} { |
|||
padding: 16px; |
|||
} |
|||
} |
|||
|
|||
.mat-content { |
|||
position: relative; |
|||
overflow: auto; |
|||
} |
|||
|
|||
.layout-wrap { |
|||
flex-wrap: wrap; |
|||
} |
|||
|
|||
mat-form-field.mat-block { |
|||
display: block; |
|||
} |
|||
|
|||
mat-toolbar.mat-table-toolbar { |
|||
background: #fff; |
|||
padding: 0 24px; |
|||
.mat-toolbar-tools { |
|||
padding: 0; |
|||
& > button.mat-icon-button:last-child { |
|||
margin-right: -12px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
mat-toolbar.mat-table-toolbar, .mat-cell { |
|||
button.mat-icon-button { |
|||
mat-icon { |
|||
color: rgba(0, 0, 0, .54); |
|||
} |
|||
} |
|||
} |
|||
|
|||
mat-toolbar.mat-primary { |
|||
button.mat-icon-button { |
|||
mat-icon { |
|||
color: white; |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
.mat-row { |
|||
transition: background-color .2s; |
|||
&:hover:not(.tb-current-entity) { |
|||
background-color: #f4f4f4; |
|||
} |
|||
&.tb-current-entity { |
|||
background-color: #e9e9e9; |
|||
} |
|||
} |
|||
|
|||
.mat-row:not(.mat-row-select), .mat-header-row:not(.mat-row-select) { |
|||
mat-cell:first-child, mat-footer-cell:first-child, mat-header-cell:first-child { |
|||
padding: 0 12px; |
|||
} |
|||
mat-cell:nth-child(n+2):nth-last-child(n+2), mat-footer-cell:nth-child(n+2):nth-last-child(n+2), mat-header-cell:nth-child(n+2):nth-last-child(n+2) { |
|||
padding: 0 28px 0 0; |
|||
} |
|||
} |
|||
|
|||
.mat-row.mat-row-select, .mat-header-row.mat-row-select { |
|||
mat-cell:first-child, mat-footer-cell:first-child, mat-header-cell:first-child { |
|||
width: 30px; |
|||
padding: 0 0 0 12px; |
|||
} |
|||
mat-cell:nth-child(2), mat-footer-cell:nth-child(2), mat-header-cell:nth-child(2) { |
|||
padding: 0 12px; |
|||
} |
|||
mat-cell:nth-child(n+3):nth-last-child(n+2), mat-footer-cell:nth-child(n+3):nth-last-child(n+2), mat-header-cell:nth-child(n+3):nth-last-child(n+2) { |
|||
padding: 0 28px 0 0; |
|||
} |
|||
&.mat-selected:not(.tb-current-entity) { |
|||
background-color: #ededed; |
|||
} |
|||
} |
|||
|
|||
.mat-header-cell { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.mat-cell, .mat-header-cell { |
|||
min-width: 80px; |
|||
&:last-child { |
|||
padding: 0 12px 0 0; |
|||
} |
|||
&.mat-column-select { |
|||
min-width: 30px; |
|||
max-width: 30px; |
|||
width: 30px; |
|||
padding: 0 0 0 12px; |
|||
} |
|||
&.mat-column-actions { |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
} |
|||
} |
|||
|
|||
.mat-cell, .mat-footer-cell { |
|||
font-size: 13px; |
|||
} |
|||
|
|||
.mat-cell, .mat-footer-cell, .mat-header-cell { |
|||
// fix for ie11 'align-items: center' |
|||
height: 20px; |
|||
} |
|||
|
|||
.mat-toolbar-tools { |
|||
font-size: 20px; |
|||
letter-spacing: .005em; |
|||
box-sizing: border-box; |
|||
font-weight: 400; |
|||
display: flex; |
|||
align-items: center; |
|||
flex-direction: row; |
|||
width: 100%; |
|||
height: 64px; |
|||
max-height: 64px; |
|||
padding: 0 16px; |
|||
margin: 0; |
|||
} |
|||
|
|||
.mat-icon { |
|||
vertical-align: middle; |
|||
&.tb-mat-32 { |
|||
width: 32px; |
|||
height: 32px; |
|||
font-size: 32px; |
|||
svg { |
|||
width: 24px; |
|||
height: 24px; |
|||
transform: scale(1.33); |
|||
} |
|||
} |
|||
&.tb-mat-96 { |
|||
width: 96px; |
|||
height: 96px; |
|||
font-size: 96px; |
|||
svg { |
|||
width: 24px; |
|||
height: 24px; |
|||
transform: scale(4); |
|||
} |
|||
} |
|||
} |
|||
|
|||
.mat-icon-button { |
|||
&.tb-mat-32 { |
|||
width: 32px; |
|||
height: 32px; |
|||
line-height: 32px; |
|||
} |
|||
&.tb-mat-96 { |
|||
width: 96px; |
|||
height: 96px; |
|||
line-height: 96px; |
|||
} |
|||
} |
|||
|
|||
.mat-snack-bar-container { |
|||
position: absolute; |
|||
background: none; |
|||
box-shadow: none; |
|||
margin: 0; |
|||
padding: 0; |
|||
border: none; |
|||
border-radius: inherit; |
|||
max-width: inherit; |
|||
min-width: inherit; |
|||
pointer-events: none; |
|||
display: flex; |
|||
} |
|||
|
|||
.mat-snack-bar-handset { |
|||
.mat-snack-bar-container { |
|||
position: relative !important; |
|||
width: 100% !important; |
|||
top: 0 !important; |
|||
left: 0 !important; |
|||
height: inherit !important; |
|||
tb-snack-bar-component { |
|||
width: 100%; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.mat-drawer-side { |
|||
border: none; |
|||
} |
|||
|
|||
.mat-drawer-inner-container { |
|||
display: flex; |
|||
flex-direction: column; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
mat-drawer.tb-details-drawer { |
|||
z-index: 59 !important; |
|||
width: 100% !important; |
|||
max-width: 100% !important; |
|||
@media #{$mat-gt-sm} { |
|||
width: 80% !important; |
|||
} |
|||
@media #{$mat-gt-md} { |
|||
width: 65% !important; |
|||
} |
|||
} |
|||
|
|||
.mat-card-subtitle, .mat-card-content { |
|||
font-size: 16px; |
|||
} |
|||
|
|||
.mat-toolbar > button:first-child { |
|||
margin-left: -8px; |
|||
} |
|||
|
|||
.mat-toolbar > button:last-child { |
|||
margin-right: -8px; |
|||
} |
|||
|
|||
.mat-toolbar { |
|||
line-height: normal; |
|||
} |
|||
|
|||
mat-toolbar *, mat-toolbar :after, mat-toolbar :before { |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.mat-button, .mat-flat-button, .mat-stroked-button, .mat-raised-button { |
|||
&:not(.mat-icon-button) { |
|||
@media #{$mat-lt-md} { |
|||
padding: 0 6px; |
|||
min-width: 88px; |
|||
} |
|||
mat-icon { |
|||
margin-right: 5px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.tb-dialog { |
|||
.mat-dialog-container { |
|||
padding: 0; |
|||
> *:first-child, form { |
|||
max-width: 100%; |
|||
min-width: 100%; |
|||
display: flex; |
|||
flex-direction: column; |
|||
overflow: auto; |
|||
height: 100%; |
|||
} |
|||
.mat-dialog-content { |
|||
margin: 0; |
|||
padding: 24px; |
|||
} |
|||
.mat-dialog-actions { |
|||
margin-bottom: 0; |
|||
padding: 8px 8px 8px 16px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.tb-fullscreen-dialog-gt-sm { |
|||
@media #{$mat-gt-sm} { |
|||
min-height: 100%; |
|||
min-width: 100%; |
|||
max-width: none !important; |
|||
position: absolute !important; |
|||
top: 0; |
|||
bottom: 0; |
|||
left: 0; |
|||
right: 0; |
|||
.mat-dialog-container { |
|||
> *:first-child, form { |
|||
min-width: 100% !important; |
|||
} |
|||
.mat-dialog-content { |
|||
max-height: 100%; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.tb-fullscreen-dialog { |
|||
@media #{$mat-lt-md} { |
|||
min-height: 100%; |
|||
min-width: 100%; |
|||
max-width: none !important; |
|||
position: absolute !important; |
|||
top: 0; |
|||
bottom: 0; |
|||
left: 0; |
|||
right: 0; |
|||
.mat-dialog-container { |
|||
> *:first-child, form { |
|||
min-width: 100% !important; |
|||
} |
|||
.mat-dialog-content { |
|||
max-height: 100%; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.tb-absolute-fill { |
|||
position: absolute; |
|||
top: 0; |
|||
bottom: 0; |
|||
left: 0; |
|||
right: 0; |
|||
} |
|||
|
|||
span.no-data-found { |
|||
position: relative; |
|||
display: flex; |
|||
height: calc(100% - 57px); |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
|
|||
mat-tab-group.tb-headless { |
|||
margin-top: -50px; |
|||
} |
|||
|
|||
.mat-tab-label { |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
.tb-primary-background { |
|||
background-color: $primary; |
|||
} |
|||
|
|||
} |
|||
|
|||
|
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,11 @@ |
|||
{ |
|||
"extends": "../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../out-tsc/app", |
|||
"types": ["node"] |
|||
}, |
|||
"exclude": [ |
|||
"test.ts", |
|||
"**/*.spec.ts" |
|||
] |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
{ |
|||
"extends": "../tsconfig.json", |
|||
"compilerOptions": { |
|||
"outDir": "../out-tsc/spec", |
|||
"types": [ |
|||
"jasmine", |
|||
"node" |
|||
] |
|||
}, |
|||
"files": [ |
|||
"test.ts", |
|||
"polyfills.ts" |
|||
], |
|||
"include": [ |
|||
"**/*.spec.ts", |
|||
"**/*.d.ts" |
|||
] |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
{ |
|||
"extends": "../tslint.json", |
|||
"rules": { |
|||
"directive-selector": [ |
|||
true, |
|||
"attribute", |
|||
"tb", |
|||
"camelCase" |
|||
], |
|||
"component-selector": [ |
|||
true, |
|||
"element", |
|||
"tb", |
|||
"kebab-case" |
|||
] |
|||
} |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
{ |
|||
"compileOnSave": false, |
|||
"compilerOptions": { |
|||
"baseUrl": "./", |
|||
"outDir": "./dist/out-tsc", |
|||
"sourceMap": true, |
|||
"declaration": false, |
|||
"module": "es2015", |
|||
"moduleResolution": "node", |
|||
"emitDecoratorMetadata": true, |
|||
"experimentalDecorators": true, |
|||
"importHelpers": true, |
|||
"target": "es5", |
|||
"typeRoots": [ |
|||
"node_modules/@types" |
|||
], |
|||
"paths": { |
|||
"@app/*": ["src/app/*"], |
|||
"@env/*": [ |
|||
"src/environments/*" |
|||
], |
|||
"@core/*": ["src/app/core/*"], |
|||
"@modules/*": ["src/app/modules/*"], |
|||
"@shared/*": ["src/app/shared/*"] |
|||
}, |
|||
"lib": [ |
|||
"es2018", |
|||
"dom" |
|||
] |
|||
} |
|||
} |
|||
@ -0,0 +1,75 @@ |
|||
{ |
|||
"extends": "tslint:recommended", |
|||
"rulesDirectory": [ |
|||
"codelyzer" |
|||
], |
|||
"rules": { |
|||
"array-type": false, |
|||
"arrow-parens": false, |
|||
"deprecation": { |
|||
"severity": "warn" |
|||
}, |
|||
"import-blacklist": [ |
|||
true, |
|||
"rxjs/Rx" |
|||
], |
|||
"interface-name": false, |
|||
"max-classes-per-file": false, |
|||
"max-line-length": [ |
|||
true, |
|||
140 |
|||
], |
|||
"member-access": false, |
|||
"member-ordering": [ |
|||
true, |
|||
{ |
|||
"order": [ |
|||
"static-field", |
|||
"instance-field", |
|||
"static-method", |
|||
"instance-method" |
|||
] |
|||
} |
|||
], |
|||
"no-consecutive-blank-lines": false, |
|||
"no-console": [ |
|||
true, |
|||
"debug", |
|||
"info", |
|||
"time", |
|||
"timeEnd", |
|||
"trace" |
|||
], |
|||
"no-empty": false, |
|||
"no-inferrable-types": [ |
|||
true, |
|||
"ignore-params" |
|||
], |
|||
"no-non-null-assertion": true, |
|||
"no-redundant-jsdoc": true, |
|||
"no-switch-case-fall-through": true, |
|||
"no-use-before-declare": true, |
|||
"no-var-requires": false, |
|||
"object-literal-key-quotes": [ |
|||
true, |
|||
"as-needed" |
|||
], |
|||
"object-literal-sort-keys": false, |
|||
"ordered-imports": false, |
|||
"quotemark": [ |
|||
true, |
|||
"single" |
|||
], |
|||
"trailing-comma": false, |
|||
"no-output-on-prefix": true, |
|||
"use-input-property-decorator": true, |
|||
"use-output-property-decorator": true, |
|||
"use-host-property-decorator": true, |
|||
"no-input-rename": true, |
|||
"no-output-rename": true, |
|||
"use-life-cycle-interface": true, |
|||
"use-pipe-transform-interface": true, |
|||
"component-class-suffix": true, |
|||
"directive-class-suffix": true |
|||
} |
|||
} |
|||
Loading…
Reference in new issue