@@ -0,0 +1,31 @@ | |||||
# Specifies intentionally untracked files to ignore when using Git | |||||
# http://git-scm.com/docs/gitignore | |||||
*~ | |||||
*.sw[mnpcod] | |||||
.tmp | |||||
*.tmp | |||||
*.tmp.* | |||||
*.sublime-project | |||||
*.sublime-workspace | |||||
.DS_Store | |||||
Thumbs.db | |||||
UserInterfaceState.xcuserstate | |||||
$RECYCLE.BIN/ | |||||
*.log | |||||
log.txt | |||||
npm-debug.log* | |||||
/.idea | |||||
/.ionic | |||||
/.sass-cache | |||||
/.sourcemaps | |||||
/.versions | |||||
/.vscode | |||||
/coverage | |||||
/dist | |||||
/node_modules | |||||
/platforms | |||||
/plugins | |||||
/www |
@@ -0,0 +1,187 @@ | |||||
{ | |||||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||||
"version": 1, | |||||
"defaultProject": "app", | |||||
"newProjectRoot": "projects", | |||||
"projects": { | |||||
"app": { | |||||
"root": "", | |||||
"sourceRoot": "src", | |||||
"projectType": "application", | |||||
"prefix": "app", | |||||
"schematics": {}, | |||||
"architect": { | |||||
"build": { | |||||
"builder": "@angular-devkit/build-angular:browser", | |||||
"options": { | |||||
"outputPath": "www", | |||||
"index": "src/index.html", | |||||
"main": "src/main.ts", | |||||
"polyfills": "src/polyfills.ts", | |||||
"tsConfig": "tsconfig.app.json", | |||||
"assets": [ | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "src/assets", | |||||
"output": "assets" | |||||
}, | |||||
{ | |||||
"glob": "**/*.svg", | |||||
"input": "node_modules/ionicons/dist/ionicons/svg", | |||||
"output": "./svg" | |||||
} | |||||
], | |||||
"styles": [ | |||||
{ | |||||
"input": "src/theme/variables.scss" | |||||
}, | |||||
{ | |||||
"input": "src/global.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, | |||||
"budgets": [ | |||||
{ | |||||
"type": "initial", | |||||
"maximumWarning": "2mb", | |||||
"maximumError": "5mb" | |||||
} | |||||
] | |||||
}, | |||||
"ci": { | |||||
"progress": false | |||||
} | |||||
} | |||||
}, | |||||
"serve": { | |||||
"builder": "@angular-devkit/build-angular:dev-server", | |||||
"options": { | |||||
"browserTarget": "app:build" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"browserTarget": "app:build:production" | |||||
}, | |||||
"ci": { | |||||
"progress": false | |||||
} | |||||
} | |||||
}, | |||||
"extract-i18n": { | |||||
"builder": "@angular-devkit/build-angular:extract-i18n", | |||||
"options": { | |||||
"browserTarget": "app:build" | |||||
} | |||||
}, | |||||
"test": { | |||||
"builder": "@angular-devkit/build-angular:karma", | |||||
"options": { | |||||
"main": "src/test.ts", | |||||
"polyfills": "src/polyfills.ts", | |||||
"tsConfig": "tsconfig.spec.json", | |||||
"karmaConfig": "karma.conf.js", | |||||
"styles": [], | |||||
"scripts": [], | |||||
"assets": [ | |||||
{ | |||||
"glob": "favicon.ico", | |||||
"input": "src/", | |||||
"output": "/" | |||||
}, | |||||
{ | |||||
"glob": "**/*", | |||||
"input": "src/assets", | |||||
"output": "/assets" | |||||
} | |||||
] | |||||
}, | |||||
"configurations": { | |||||
"ci": { | |||||
"progress": false, | |||||
"watch": false | |||||
} | |||||
} | |||||
}, | |||||
"lint": { | |||||
"builder": "@angular-devkit/build-angular:tslint", | |||||
"options": { | |||||
"tsConfig": [ | |||||
"tsconfig.app.json", | |||||
"tsconfig.spec.json", | |||||
"e2e/tsconfig.json" | |||||
], | |||||
"exclude": ["**/node_modules/**"] | |||||
} | |||||
}, | |||||
"e2e": { | |||||
"builder": "@angular-devkit/build-angular:protractor", | |||||
"options": { | |||||
"protractorConfig": "e2e/protractor.conf.js", | |||||
"devServerTarget": "app:serve" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"devServerTarget": "app:serve:production" | |||||
}, | |||||
"ci": { | |||||
"devServerTarget": "app:serve:ci" | |||||
} | |||||
} | |||||
}, | |||||
"ionic-cordova-build": { | |||||
"builder": "@ionic/angular-toolkit:cordova-build", | |||||
"options": { | |||||
"browserTarget": "app:build" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"browserTarget": "app:build:production" | |||||
} | |||||
} | |||||
}, | |||||
"ionic-cordova-serve": { | |||||
"builder": "@ionic/angular-toolkit:cordova-serve", | |||||
"options": { | |||||
"cordovaBuildTarget": "app:ionic-cordova-build", | |||||
"devServerTarget": "app:serve" | |||||
}, | |||||
"configurations": { | |||||
"production": { | |||||
"cordovaBuildTarget": "app:ionic-cordova-build:production", | |||||
"devServerTarget": "app:serve:production" | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
}, | |||||
"cli": { | |||||
"defaultCollection": "@ionic/angular-toolkit" | |||||
}, | |||||
"schematics": { | |||||
"@ionic/angular-toolkit:component": { | |||||
"styleext": "scss" | |||||
}, | |||||
"@ionic/angular-toolkit:page": { | |||||
"styleext": "scss" | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,12 @@ | |||||
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. | |||||
# For additional information regarding the format and rule options, please see: | |||||
# https://github.com/browserslist/browserslist#queries | |||||
# You can see what browsers were selected by your queries by running: | |||||
# npx browserslist | |||||
> 0.5% | |||||
last 2 versions | |||||
Firefox ESR | |||||
not dead | |||||
not IE 9-11 # For IE 9-11 support, remove 'not'. |
@@ -0,0 +1,36 @@ | |||||
// @ts-check | |||||
// Protractor configuration file, see link for more information | |||||
// https://github.com/angular/protractor/blob/master/lib/config.ts | |||||
const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); | |||||
/** | |||||
* @type { import("protractor").Config } | |||||
*/ | |||||
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.json') | |||||
}); | |||||
jasmine.getEnv().addReporter(new SpecReporter({ | |||||
spec: { | |||||
displayStacktrace: StacktraceOption.PRETTY | |||||
} | |||||
})); | |||||
} | |||||
}; |
@@ -0,0 +1,14 @@ | |||||
import { AppPage } from './app.po'; | |||||
describe('new App', () => { | |||||
let page: AppPage; | |||||
beforeEach(() => { | |||||
page = new AppPage(); | |||||
}); | |||||
it('should display welcome message', () => { | |||||
page.navigateTo(); | |||||
expect(page.getPageTitle()).toContain('Tab 1'); | |||||
}); | |||||
}); |
@@ -0,0 +1,11 @@ | |||||
import { browser, by, element } from 'protractor'; | |||||
export class AppPage { | |||||
navigateTo() { | |||||
return browser.get('/'); | |||||
} | |||||
getPageTitle() { | |||||
return element(by.css('ion-title')).getText(); | |||||
} | |||||
} |
@@ -0,0 +1,13 @@ | |||||
{ | |||||
"extends": "../tsconfig.json", | |||||
"compilerOptions": { | |||||
"outDir": "../out-tsc/app", | |||||
"module": "commonjs", | |||||
"target": "es5", | |||||
"types": [ | |||||
"jasmine", | |||||
"jasminewd2", | |||||
"node" | |||||
] | |||||
} | |||||
} |
@@ -0,0 +1,5 @@ | |||||
{ | |||||
"name": "kxip-app", | |||||
"integrations": {}, | |||||
"type": "angular" | |||||
} |
@@ -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', 'text-summary'], | |||||
fixWebpackSourcePaths: true | |||||
}, | |||||
reporters: ['progress', 'kjhtml'], | |||||
port: 9876, | |||||
colors: true, | |||||
logLevel: config.LOG_INFO, | |||||
autoWatch: true, | |||||
browsers: ['Chrome'], | |||||
singleRun: false | |||||
}); | |||||
}; |
@@ -0,0 +1,54 @@ | |||||
{ | |||||
"name": "kxip-app", | |||||
"version": "0.0.1", | |||||
"author": "Ionic Framework", | |||||
"homepage": "https://ionicframework.com/", | |||||
"scripts": { | |||||
"ng": "ng", | |||||
"start": "ng serve", | |||||
"build": "ng build", | |||||
"test": "ng test", | |||||
"lint": "ng lint", | |||||
"e2e": "ng e2e" | |||||
}, | |||||
"private": true, | |||||
"dependencies": { | |||||
"@angular/common": "~10.0.0", | |||||
"@angular/core": "~10.0.0", | |||||
"@angular/forms": "~10.0.0", | |||||
"@angular/platform-browser": "~10.0.0", | |||||
"@angular/platform-browser-dynamic": "~10.0.0", | |||||
"@angular/router": "~10.0.0", | |||||
"@ionic-native/core": "^5.0.0", | |||||
"@ionic-native/splash-screen": "^5.0.0", | |||||
"@ionic-native/status-bar": "^5.0.0", | |||||
"@ionic/angular": "^5.0.0", | |||||
"rxjs": "~6.5.5", | |||||
"tslib": "^2.0.0", | |||||
"zone.js": "~0.10.3" | |||||
}, | |||||
"devDependencies": { | |||||
"@angular-devkit/build-angular": "~0.1000.0", | |||||
"@angular/cli": "~10.0.5", | |||||
"@angular/compiler": "~10.0.0", | |||||
"@angular/compiler-cli": "~10.0.0", | |||||
"@angular/language-service": "~10.0.0", | |||||
"@ionic/angular-toolkit": "^2.3.0", | |||||
"@types/node": "^12.11.1", | |||||
"@types/jasmine": "~3.5.0", | |||||
"@types/jasminewd2": "~2.0.3", | |||||
"codelyzer": "^6.0.0", | |||||
"jasmine-core": "~3.5.0", | |||||
"jasmine-spec-reporter": "~5.0.0", | |||||
"karma": "~5.0.0", | |||||
"karma-chrome-launcher": "~3.1.0", | |||||
"karma-coverage-istanbul-reporter": "~3.0.2", | |||||
"karma-jasmine": "~3.3.0", | |||||
"karma-jasmine-html-reporter": "^1.5.0", | |||||
"protractor": "~7.0.0", | |||||
"ts-node": "~8.3.0", | |||||
"tslint": "~6.1.0", | |||||
"typescript": "~3.9.5" | |||||
}, | |||||
"description": "An Ionic project" | |||||
} |
@@ -0,0 +1,16 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule) | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [ | |||||
RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) | |||||
], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class AppRoutingModule {} |
@@ -0,0 +1,3 @@ | |||||
<ion-app> | |||||
<ion-router-outlet></ion-router-outlet> | |||||
</ion-app> |
@@ -0,0 +1,50 @@ | |||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; | |||||
import { TestBed, async } from '@angular/core/testing'; | |||||
import { Platform } from '@ionic/angular'; | |||||
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; | |||||
import { StatusBar } from '@ionic-native/status-bar/ngx'; | |||||
import { AppComponent } from './app.component'; | |||||
describe('AppComponent', () => { | |||||
let statusBarSpy; | |||||
let splashScreenSpy; | |||||
let platformReadySpy; | |||||
let platformSpy; | |||||
beforeEach(async(() => { | |||||
statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']); | |||||
splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']); | |||||
platformReadySpy = Promise.resolve(); | |||||
platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy }); | |||||
TestBed.configureTestingModule({ | |||||
declarations: [AppComponent], | |||||
schemas: [CUSTOM_ELEMENTS_SCHEMA], | |||||
providers: [ | |||||
{ provide: StatusBar, useValue: statusBarSpy }, | |||||
{ provide: SplashScreen, useValue: splashScreenSpy }, | |||||
{ provide: Platform, useValue: platformSpy }, | |||||
], | |||||
}).compileComponents(); | |||||
})); | |||||
it('should create the app', () => { | |||||
const fixture = TestBed.createComponent(AppComponent); | |||||
const app = fixture.debugElement.componentInstance; | |||||
expect(app).toBeTruthy(); | |||||
}); | |||||
it('should initialize the app', async () => { | |||||
TestBed.createComponent(AppComponent); | |||||
expect(platformSpy.ready).toHaveBeenCalled(); | |||||
await platformReadySpy; | |||||
expect(statusBarSpy.styleDefault).toHaveBeenCalled(); | |||||
expect(splashScreenSpy.hide).toHaveBeenCalled(); | |||||
}); | |||||
// TODO: add more tests! | |||||
}); |
@@ -0,0 +1,27 @@ | |||||
import { Component } from '@angular/core'; | |||||
import { Platform } from '@ionic/angular'; | |||||
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; | |||||
import { StatusBar } from '@ionic-native/status-bar/ngx'; | |||||
@Component({ | |||||
selector: 'app-root', | |||||
templateUrl: 'app.component.html', | |||||
styleUrls: ['app.component.scss'] | |||||
}) | |||||
export class AppComponent { | |||||
constructor( | |||||
private platform: Platform, | |||||
private splashScreen: SplashScreen, | |||||
private statusBar: StatusBar | |||||
) { | |||||
this.initializeApp(); | |||||
} | |||||
initializeApp() { | |||||
this.platform.ready().then(() => { | |||||
this.statusBar.styleDefault(); | |||||
this.splashScreen.hide(); | |||||
}); | |||||
} | |||||
} |
@@ -0,0 +1,23 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { BrowserModule } from '@angular/platform-browser'; | |||||
import { RouteReuseStrategy } from '@angular/router'; | |||||
import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; | |||||
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; | |||||
import { StatusBar } from '@ionic-native/status-bar/ngx'; | |||||
import { AppRoutingModule } from './app-routing.module'; | |||||
import { AppComponent } from './app.component'; | |||||
@NgModule({ | |||||
declarations: [AppComponent], | |||||
entryComponents: [], | |||||
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule], | |||||
providers: [ | |||||
StatusBar, | |||||
SplashScreen, | |||||
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy } | |||||
], | |||||
bootstrap: [AppComponent] | |||||
}) | |||||
export class AppModule {} |
@@ -0,0 +1,4 @@ | |||||
<div id="container"> | |||||
<strong>{{ name }}</strong> | |||||
<p>Explore <a target="_blank" rel="noopener noreferrer" href="https://ionicframework.com/docs/components">UI Components</a></p> | |||||
</div> |
@@ -0,0 +1,27 @@ | |||||
#container { | |||||
text-align: center; | |||||
position: absolute; | |||||
left: 0; | |||||
right: 0; | |||||
top: 50%; | |||||
transform: translateY(-50%); | |||||
} | |||||
#container strong { | |||||
font-size: 20px; | |||||
line-height: 26px; | |||||
} | |||||
#container p { | |||||
font-size: 16px; | |||||
line-height: 22px; | |||||
color: #8c8c8c; | |||||
margin: 0; | |||||
} | |||||
#container a { | |||||
text-decoration: none; | |||||
} |
@@ -0,0 +1,24 @@ | |||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { ExploreContainerComponent } from './explore-container.component'; | |||||
describe('ExploreContainerComponent', () => { | |||||
let component: ExploreContainerComponent; | |||||
let fixture: ComponentFixture<ExploreContainerComponent>; | |||||
beforeEach(async(() => { | |||||
TestBed.configureTestingModule({ | |||||
declarations: [ ExploreContainerComponent ], | |||||
imports: [IonicModule.forRoot()] | |||||
}).compileComponents(); | |||||
fixture = TestBed.createComponent(ExploreContainerComponent); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
})); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,15 @@ | |||||
import { Component, OnInit, Input } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-explore-container', | |||||
templateUrl: './explore-container.component.html', | |||||
styleUrls: ['./explore-container.component.scss'], | |||||
}) | |||||
export class ExploreContainerComponent implements OnInit { | |||||
@Input() name: string; | |||||
constructor() { } | |||||
ngOnInit() {} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { FormsModule } from '@angular/forms'; | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { ExploreContainerComponent } from './explore-container.component'; | |||||
@NgModule({ | |||||
imports: [ CommonModule, FormsModule, IonicModule], | |||||
declarations: [ExploreContainerComponent], | |||||
exports: [ExploreContainerComponent] | |||||
}) | |||||
export class ExploreContainerComponentModule {} |
@@ -0,0 +1,16 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { Tab1Page } from './tab1.page'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: Tab1Page, | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class Tab1PageRoutingModule {} |
@@ -0,0 +1,20 @@ | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { FormsModule } from '@angular/forms'; | |||||
import { Tab1Page } from './tab1.page'; | |||||
import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; | |||||
import { Tab1PageRoutingModule } from './tab1-routing.module'; | |||||
@NgModule({ | |||||
imports: [ | |||||
IonicModule, | |||||
CommonModule, | |||||
FormsModule, | |||||
ExploreContainerComponentModule, | |||||
Tab1PageRoutingModule | |||||
], | |||||
declarations: [Tab1Page] | |||||
}) | |||||
export class Tab1PageModule {} |
@@ -0,0 +1,17 @@ | |||||
<ion-header [translucent]="true"> | |||||
<ion-toolbar> | |||||
<ion-title> | |||||
Tab 1 | |||||
</ion-title> | |||||
</ion-toolbar> | |||||
</ion-header> | |||||
<ion-content [fullscreen]="true"> | |||||
<ion-header collapse="condense"> | |||||
<ion-toolbar> | |||||
<ion-title size="large">Tab 1</ion-title> | |||||
</ion-toolbar> | |||||
</ion-header> | |||||
<app-explore-container name="Tab 1 page"></app-explore-container> | |||||
</ion-content> |
@@ -0,0 +1,25 @@ | |||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; | |||||
import { Tab1Page } from './tab1.page'; | |||||
describe('Tab1Page', () => { | |||||
let component: Tab1Page; | |||||
let fixture: ComponentFixture<Tab1Page>; | |||||
beforeEach(async(() => { | |||||
TestBed.configureTestingModule({ | |||||
declarations: [Tab1Page], | |||||
imports: [IonicModule.forRoot(), ExploreContainerComponentModule] | |||||
}).compileComponents(); | |||||
fixture = TestBed.createComponent(Tab1Page); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
})); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,12 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-tab1', | |||||
templateUrl: 'tab1.page.html', | |||||
styleUrls: ['tab1.page.scss'] | |||||
}) | |||||
export class Tab1Page { | |||||
constructor() {} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { Tab2Page } from './tab2.page'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: Tab2Page, | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class Tab2PageRoutingModule {} |
@@ -0,0 +1,21 @@ | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { RouterModule } from '@angular/router'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { FormsModule } from '@angular/forms'; | |||||
import { Tab2Page } from './tab2.page'; | |||||
import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; | |||||
import { Tab2PageRoutingModule } from './tab2-routing.module'; | |||||
@NgModule({ | |||||
imports: [ | |||||
IonicModule, | |||||
CommonModule, | |||||
FormsModule, | |||||
ExploreContainerComponentModule, | |||||
Tab2PageRoutingModule | |||||
], | |||||
declarations: [Tab2Page] | |||||
}) | |||||
export class Tab2PageModule {} |
@@ -0,0 +1,17 @@ | |||||
<ion-header [translucent]="true"> | |||||
<ion-toolbar> | |||||
<ion-title> | |||||
Tab 2 | |||||
</ion-title> | |||||
</ion-toolbar> | |||||
</ion-header> | |||||
<ion-content [fullscreen]="true"> | |||||
<ion-header collapse="condense"> | |||||
<ion-toolbar> | |||||
<ion-title size="large">Tab 2</ion-title> | |||||
</ion-toolbar> | |||||
</ion-header> | |||||
<app-explore-container name="Tab 2 page"></app-explore-container> | |||||
</ion-content> |
@@ -0,0 +1,25 @@ | |||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; | |||||
import { Tab2Page } from './tab2.page'; | |||||
describe('Tab2Page', () => { | |||||
let component: Tab2Page; | |||||
let fixture: ComponentFixture<Tab2Page>; | |||||
beforeEach(async(() => { | |||||
TestBed.configureTestingModule({ | |||||
declarations: [Tab2Page], | |||||
imports: [IonicModule.forRoot(), ExploreContainerComponentModule] | |||||
}).compileComponents(); | |||||
fixture = TestBed.createComponent(Tab2Page); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
})); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,12 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-tab2', | |||||
templateUrl: 'tab2.page.html', | |||||
styleUrls: ['tab2.page.scss'] | |||||
}) | |||||
export class Tab2Page { | |||||
constructor() {} | |||||
} |
@@ -0,0 +1,16 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { Tab3Page } from './tab3.page'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: '', | |||||
component: Tab3Page, | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class Tab3PageRoutingModule {} |
@@ -0,0 +1,22 @@ | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { RouterModule } from '@angular/router'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { FormsModule } from '@angular/forms'; | |||||
import { Tab3Page } from './tab3.page'; | |||||
import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; | |||||
import { Tab3PageRoutingModule } from './tab3-routing.module'; | |||||
@NgModule({ | |||||
imports: [ | |||||
IonicModule, | |||||
CommonModule, | |||||
FormsModule, | |||||
ExploreContainerComponentModule, | |||||
RouterModule.forChild([{ path: '', component: Tab3Page }]), | |||||
Tab3PageRoutingModule, | |||||
], | |||||
declarations: [Tab3Page] | |||||
}) | |||||
export class Tab3PageModule {} |
@@ -0,0 +1,17 @@ | |||||
<ion-header [translucent]="true"> | |||||
<ion-toolbar> | |||||
<ion-title> | |||||
Tab 3 | |||||
</ion-title> | |||||
</ion-toolbar> | |||||
</ion-header> | |||||
<ion-content [fullscreen]="true"> | |||||
<ion-header collapse="condense"> | |||||
<ion-toolbar> | |||||
<ion-title size="large">Tab 3</ion-title> | |||||
</ion-toolbar> | |||||
</ion-header> | |||||
<app-explore-container name="Tab 3 page"></app-explore-container> | |||||
</ion-content> |
@@ -0,0 +1,25 @@ | |||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { ExploreContainerComponentModule } from '../explore-container/explore-container.module'; | |||||
import { Tab3Page } from './tab3.page'; | |||||
describe('Tab3Page', () => { | |||||
let component: Tab3Page; | |||||
let fixture: ComponentFixture<Tab3Page>; | |||||
beforeEach(async(() => { | |||||
TestBed.configureTestingModule({ | |||||
declarations: [Tab3Page], | |||||
imports: [IonicModule.forRoot(), ExploreContainerComponentModule] | |||||
}).compileComponents(); | |||||
fixture = TestBed.createComponent(Tab3Page); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
})); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,12 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-tab3', | |||||
templateUrl: 'tab3.page.html', | |||||
styleUrls: ['tab3.page.scss'] | |||||
}) | |||||
export class Tab3Page { | |||||
constructor() {} | |||||
} |
@@ -0,0 +1,40 @@ | |||||
import { NgModule } from '@angular/core'; | |||||
import { RouterModule, Routes } from '@angular/router'; | |||||
import { TabsPage } from './tabs.page'; | |||||
const routes: Routes = [ | |||||
{ | |||||
path: 'tabs', | |||||
component: TabsPage, | |||||
children: [ | |||||
{ | |||||
path: 'tab1', | |||||
loadChildren: () => import('../tab1/tab1.module').then(m => m.Tab1PageModule) | |||||
}, | |||||
{ | |||||
path: 'tab2', | |||||
loadChildren: () => import('../tab2/tab2.module').then(m => m.Tab2PageModule) | |||||
}, | |||||
{ | |||||
path: 'tab3', | |||||
loadChildren: () => import('../tab3/tab3.module').then(m => m.Tab3PageModule) | |||||
}, | |||||
{ | |||||
path: '', | |||||
redirectTo: '/tabs/tab1', | |||||
pathMatch: 'full' | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
path: '', | |||||
redirectTo: '/tabs/tab1', | |||||
pathMatch: 'full' | |||||
} | |||||
]; | |||||
@NgModule({ | |||||
imports: [RouterModule.forChild(routes)], | |||||
exports: [RouterModule] | |||||
}) | |||||
export class TabsPageRoutingModule {} |
@@ -0,0 +1,19 @@ | |||||
import { IonicModule } from '@ionic/angular'; | |||||
import { NgModule } from '@angular/core'; | |||||
import { CommonModule } from '@angular/common'; | |||||
import { FormsModule } from '@angular/forms'; | |||||
import { TabsPageRoutingModule } from './tabs-routing.module'; | |||||
import { TabsPage } from './tabs.page'; | |||||
@NgModule({ | |||||
imports: [ | |||||
IonicModule, | |||||
CommonModule, | |||||
FormsModule, | |||||
TabsPageRoutingModule | |||||
], | |||||
declarations: [TabsPage] | |||||
}) | |||||
export class TabsPageModule {} |
@@ -0,0 +1,20 @@ | |||||
<ion-tabs> | |||||
<ion-tab-bar slot="bottom"> | |||||
<ion-tab-button tab="tab1"> | |||||
<ion-icon name="triangle"></ion-icon> | |||||
<ion-label>Tab 1</ion-label> | |||||
</ion-tab-button> | |||||
<ion-tab-button tab="tab2"> | |||||
<ion-icon name="ellipse"></ion-icon> | |||||
<ion-label>Tab 2</ion-label> | |||||
</ion-tab-button> | |||||
<ion-tab-button tab="tab3"> | |||||
<ion-icon name="square"></ion-icon> | |||||
<ion-label>Tab 3</ion-label> | |||||
</ion-tab-button> | |||||
</ion-tab-bar> | |||||
</ion-tabs> |
@@ -0,0 +1 @@ | |||||
@@ -0,0 +1,26 @@ | |||||
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; | |||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
import { TabsPage } from './tabs.page'; | |||||
describe('TabsPage', () => { | |||||
let component: TabsPage; | |||||
let fixture: ComponentFixture<TabsPage>; | |||||
beforeEach(async(() => { | |||||
TestBed.configureTestingModule({ | |||||
declarations: [TabsPage], | |||||
schemas: [CUSTOM_ELEMENTS_SCHEMA], | |||||
}).compileComponents(); | |||||
})); | |||||
beforeEach(() => { | |||||
fixture = TestBed.createComponent(TabsPage); | |||||
component = fixture.componentInstance; | |||||
fixture.detectChanges(); | |||||
}); | |||||
it('should create', () => { | |||||
expect(component).toBeTruthy(); | |||||
}); | |||||
}); |
@@ -0,0 +1,12 @@ | |||||
import { Component } from '@angular/core'; | |||||
@Component({ | |||||
selector: 'app-tabs', | |||||
templateUrl: 'tabs.page.html', | |||||
styleUrls: ['tabs.page.scss'] | |||||
}) | |||||
export class TabsPage { | |||||
constructor() {} | |||||
} |
@@ -0,0 +1 @@ | |||||
<svg width="350" height="140" xmlns="http://www.w3.org/2000/svg" style="background:#f6f7f9"><g fill="none" fill-rule="evenodd"><path fill="#F04141" style="mix-blend-mode:multiply" d="M61.905-34.23l96.194 54.51-66.982 54.512L22 34.887z"/><circle fill="#10DC60" style="mix-blend-mode:multiply" cx="155.5" cy="135.5" r="57.5"/><path fill="#3880FF" style="mix-blend-mode:multiply" d="M208.538 9.513l84.417 15.392L223.93 93.93z"/><path fill="#FFCE00" style="mix-blend-mode:multiply" d="M268.625 106.557l46.332-26.75 46.332 26.75v53.5l-46.332 26.75-46.332-26.75z"/><circle fill="#7044FF" style="mix-blend-mode:multiply" cx="299.5" cy="9.5" r="38.5"/><rect fill="#11D3EA" style="mix-blend-mode:multiply" transform="rotate(-60 148.47 37.886)" x="143.372" y="-7.056" width="10.196" height="89.884" rx="5.098"/><path d="M-25.389 74.253l84.86 8.107c5.498.525 9.53 5.407 9.004 10.905a10 10 0 0 1-.057.477l-12.36 85.671a10.002 10.002 0 0 1-11.634 8.42l-86.351-15.226c-5.44-.959-9.07-6.145-8.112-11.584l13.851-78.551a10 10 0 0 1 10.799-8.219z" fill="#7044FF" style="mix-blend-mode:multiply"/><circle fill="#0CD1E8" style="mix-blend-mode:multiply" cx="273.5" cy="106.5" r="20.5"/></g></svg> |
@@ -0,0 +1,3 @@ | |||||
export const environment = { | |||||
production: true | |||||
}; |
@@ -0,0 +1,16 @@ | |||||
// 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 | |||||
}; | |||||
/* | |||||
* 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,26 @@ | |||||
/* | |||||
* App Global CSS | |||||
* ---------------------------------------------------------------------------- | |||||
* Put style rules here that you want to apply globally. These styles are for | |||||
* the entire app and not just one component. Additionally, this file can be | |||||
* used as an entry point to import other CSS/Sass files to be included in the | |||||
* output CSS. | |||||
* For more information on global stylesheets, visit the documentation: | |||||
* https://ionicframework.com/docs/layout/global-stylesheets | |||||
*/ | |||||
/* Core CSS required for Ionic components to work properly */ | |||||
@import "~@ionic/angular/css/core.css"; | |||||
/* Basic CSS for apps built with Ionic */ | |||||
@import "~@ionic/angular/css/normalize.css"; | |||||
@import "~@ionic/angular/css/structure.css"; | |||||
@import "~@ionic/angular/css/typography.css"; | |||||
@import '~@ionic/angular/css/display.css'; | |||||
/* Optional CSS utils that can be commented out */ | |||||
@import "~@ionic/angular/css/padding.css"; | |||||
@import "~@ionic/angular/css/float-elements.css"; | |||||
@import "~@ionic/angular/css/text-alignment.css"; | |||||
@import "~@ionic/angular/css/text-transformation.css"; | |||||
@import "~@ionic/angular/css/flex-utils.css"; |
@@ -0,0 +1,26 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="utf-8" /> | |||||
<title>Ionic App</title> | |||||
<base href="/" /> | |||||
<meta name="color-scheme" content="light dark" /> | |||||
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> | |||||
<meta name="format-detection" content="telephone=no" /> | |||||
<meta name="msapplication-tap-highlight" content="no" /> | |||||
<link rel="icon" type="image/png" href="assets/icon/favicon.png" /> | |||||
<!-- add to homescreen for ios --> | |||||
<meta name="apple-mobile-web-app-capable" content="yes" /> | |||||
<meta name="apple-mobile-web-app-status-bar-style" content="black" /> | |||||
</head> | |||||
<body> | |||||
<app-root></app-root> | |||||
</body> | |||||
</html> |
@@ -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)); |
@@ -0,0 +1,66 @@ | |||||
/** | |||||
* 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; | |||||
* | |||||
*/ | |||||
import './zone-flags'; | |||||
/*************************************************************************************************** | |||||
* Zone JS is required by default for Angular itself. | |||||
*/ | |||||
import 'zone.js/dist/zone'; // Included with Angular CLI. | |||||
/*************************************************************************************************** | |||||
* APPLICATION IMPORTS | |||||
*/ |
@@ -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); |
@@ -0,0 +1,232 @@ | |||||
// Ionic Variables and Theming. For more info, please see: | |||||
// http://ionicframework.com/docs/theming/ | |||||
/** Ionic CSS Variables **/ | |||||
:root { | |||||
/** primary **/ | |||||
--ion-color-primary: #3880ff; | |||||
--ion-color-primary-rgb: 56, 128, 255; | |||||
--ion-color-primary-contrast: #ffffff; | |||||
--ion-color-primary-contrast-rgb: 255, 255, 255; | |||||
--ion-color-primary-shade: #3171e0; | |||||
--ion-color-primary-tint: #4c8dff; | |||||
/** secondary **/ | |||||
--ion-color-secondary: #3dc2ff; | |||||
--ion-color-secondary-rgb: 61, 194, 255; | |||||
--ion-color-secondary-contrast: #ffffff; | |||||
--ion-color-secondary-contrast-rgb: 255, 255, 255; | |||||
--ion-color-secondary-shade: #36abe0; | |||||
--ion-color-secondary-tint: #50c8ff; | |||||
/** tertiary **/ | |||||
--ion-color-tertiary: #5260ff; | |||||
--ion-color-tertiary-rgb: 82, 96, 255; | |||||
--ion-color-tertiary-contrast: #ffffff; | |||||
--ion-color-tertiary-contrast-rgb: 255, 255, 255; | |||||
--ion-color-tertiary-shade: #4854e0; | |||||
--ion-color-tertiary-tint: #6370ff; | |||||
/** success **/ | |||||
--ion-color-success: #2dd36f; | |||||
--ion-color-success-rgb: 45, 211, 111; | |||||
--ion-color-success-contrast: #ffffff; | |||||
--ion-color-success-contrast-rgb: 255, 255, 255; | |||||
--ion-color-success-shade: #28ba62; | |||||
--ion-color-success-tint: #42d77d; | |||||
/** warning **/ | |||||
--ion-color-warning: #ffc409; | |||||
--ion-color-warning-rgb: 255, 196, 9; | |||||
--ion-color-warning-contrast: #000000; | |||||
--ion-color-warning-contrast-rgb: 0, 0, 0; | |||||
--ion-color-warning-shade: #e0ac08; | |||||
--ion-color-warning-tint: #ffca22; | |||||
/** danger **/ | |||||
--ion-color-danger: #eb445a; | |||||
--ion-color-danger-rgb: 235, 68, 90; | |||||
--ion-color-danger-contrast: #ffffff; | |||||
--ion-color-danger-contrast-rgb: 255, 255, 255; | |||||
--ion-color-danger-shade: #cf3c4f; | |||||
--ion-color-danger-tint: #ed576b; | |||||
/** dark **/ | |||||
--ion-color-dark: #222428; | |||||
--ion-color-dark-rgb: 34, 36, 40; | |||||
--ion-color-dark-contrast: #ffffff; | |||||
--ion-color-dark-contrast-rgb: 255, 255, 255; | |||||
--ion-color-dark-shade: #1e2023; | |||||
--ion-color-dark-tint: #383a3e; | |||||
/** medium **/ | |||||
--ion-color-medium: #92949c; | |||||
--ion-color-medium-rgb: 146, 148, 156; | |||||
--ion-color-medium-contrast: #ffffff; | |||||
--ion-color-medium-contrast-rgb: 255, 255, 255; | |||||
--ion-color-medium-shade: #808289; | |||||
--ion-color-medium-tint: #9d9fa6; | |||||
/** light **/ | |||||
--ion-color-light: #f4f5f8; | |||||
--ion-color-light-rgb: 244, 245, 248; | |||||
--ion-color-light-contrast: #000000; | |||||
--ion-color-light-contrast-rgb: 0, 0, 0; | |||||
--ion-color-light-shade: #d7d8da; | |||||
--ion-color-light-tint: #f5f6f9; | |||||
} | |||||
@media (prefers-color-scheme: dark) { | |||||
/* | |||||
* Dark Colors | |||||
* ------------------------------------------- | |||||
*/ | |||||
body { | |||||
--ion-color-primary: #428cff; | |||||
--ion-color-primary-rgb: 66,140,255; | |||||
--ion-color-primary-contrast: #ffffff; | |||||
--ion-color-primary-contrast-rgb: 255,255,255; | |||||
--ion-color-primary-shade: #3a7be0; | |||||
--ion-color-primary-tint: #5598ff; | |||||
--ion-color-secondary: #50c8ff; | |||||
--ion-color-secondary-rgb: 80,200,255; | |||||
--ion-color-secondary-contrast: #ffffff; | |||||
--ion-color-secondary-contrast-rgb: 255,255,255; | |||||
--ion-color-secondary-shade: #46b0e0; | |||||
--ion-color-secondary-tint: #62ceff; | |||||
--ion-color-tertiary: #6a64ff; | |||||
--ion-color-tertiary-rgb: 106,100,255; | |||||
--ion-color-tertiary-contrast: #ffffff; | |||||
--ion-color-tertiary-contrast-rgb: 255,255,255; | |||||
--ion-color-tertiary-shade: #5d58e0; | |||||
--ion-color-tertiary-tint: #7974ff; | |||||
--ion-color-success: #2fdf75; | |||||
--ion-color-success-rgb: 47,223,117; | |||||
--ion-color-success-contrast: #000000; | |||||
--ion-color-success-contrast-rgb: 0,0,0; | |||||
--ion-color-success-shade: #29c467; | |||||
--ion-color-success-tint: #44e283; | |||||
--ion-color-warning: #ffd534; | |||||
--ion-color-warning-rgb: 255,213,52; | |||||
--ion-color-warning-contrast: #000000; | |||||
--ion-color-warning-contrast-rgb: 0,0,0; | |||||
--ion-color-warning-shade: #e0bb2e; | |||||
--ion-color-warning-tint: #ffd948; | |||||
--ion-color-danger: #ff4961; | |||||
--ion-color-danger-rgb: 255,73,97; | |||||
--ion-color-danger-contrast: #ffffff; | |||||
--ion-color-danger-contrast-rgb: 255,255,255; | |||||
--ion-color-danger-shade: #e04055; | |||||
--ion-color-danger-tint: #ff5b71; | |||||
--ion-color-dark: #f4f5f8; | |||||
--ion-color-dark-rgb: 244,245,248; | |||||
--ion-color-dark-contrast: #000000; | |||||
--ion-color-dark-contrast-rgb: 0,0,0; | |||||
--ion-color-dark-shade: #d7d8da; | |||||
--ion-color-dark-tint: #f5f6f9; | |||||
--ion-color-medium: #989aa2; | |||||
--ion-color-medium-rgb: 152,154,162; | |||||
--ion-color-medium-contrast: #000000; | |||||
--ion-color-medium-contrast-rgb: 0,0,0; | |||||
--ion-color-medium-shade: #86888f; | |||||
--ion-color-medium-tint: #a2a4ab; | |||||
--ion-color-light: #222428; | |||||
--ion-color-light-rgb: 34,36,40; | |||||
--ion-color-light-contrast: #ffffff; | |||||
--ion-color-light-contrast-rgb: 255,255,255; | |||||
--ion-color-light-shade: #1e2023; | |||||
--ion-color-light-tint: #383a3e; | |||||
} | |||||
/* | |||||
* iOS Dark Theme | |||||
* ------------------------------------------- | |||||
*/ | |||||
.ios body { | |||||
--ion-background-color: #000000; | |||||
--ion-background-color-rgb: 0,0,0; | |||||
--ion-text-color: #ffffff; | |||||
--ion-text-color-rgb: 255,255,255; | |||||
--ion-color-step-50: #0d0d0d; | |||||
--ion-color-step-100: #1a1a1a; | |||||
--ion-color-step-150: #262626; | |||||
--ion-color-step-200: #333333; | |||||
--ion-color-step-250: #404040; | |||||
--ion-color-step-300: #4d4d4d; | |||||
--ion-color-step-350: #595959; | |||||
--ion-color-step-400: #666666; | |||||
--ion-color-step-450: #737373; | |||||
--ion-color-step-500: #808080; | |||||
--ion-color-step-550: #8c8c8c; | |||||
--ion-color-step-600: #999999; | |||||
--ion-color-step-650: #a6a6a6; | |||||
--ion-color-step-700: #b3b3b3; | |||||
--ion-color-step-750: #bfbfbf; | |||||
--ion-color-step-800: #cccccc; | |||||
--ion-color-step-850: #d9d9d9; | |||||
--ion-color-step-900: #e6e6e6; | |||||
--ion-color-step-950: #f2f2f2; | |||||
--ion-toolbar-background: #0d0d0d; | |||||
--ion-item-background: #000000; | |||||
--ion-card-background: #1c1c1d; | |||||
} | |||||
/* | |||||
* Material Design Dark Theme | |||||
* ------------------------------------------- | |||||
*/ | |||||
.md body { | |||||
--ion-background-color: #121212; | |||||
--ion-background-color-rgb: 18,18,18; | |||||
--ion-text-color: #ffffff; | |||||
--ion-text-color-rgb: 255,255,255; | |||||
--ion-border-color: #222222; | |||||
--ion-color-step-50: #1e1e1e; | |||||
--ion-color-step-100: #2a2a2a; | |||||
--ion-color-step-150: #363636; | |||||
--ion-color-step-200: #414141; | |||||
--ion-color-step-250: #4d4d4d; | |||||
--ion-color-step-300: #595959; | |||||
--ion-color-step-350: #656565; | |||||
--ion-color-step-400: #717171; | |||||
--ion-color-step-450: #7d7d7d; | |||||
--ion-color-step-500: #898989; | |||||
--ion-color-step-550: #949494; | |||||
--ion-color-step-600: #a0a0a0; | |||||
--ion-color-step-650: #acacac; | |||||
--ion-color-step-700: #b8b8b8; | |||||
--ion-color-step-750: #c4c4c4; | |||||
--ion-color-step-800: #d0d0d0; | |||||
--ion-color-step-850: #dbdbdb; | |||||
--ion-color-step-900: #e7e7e7; | |||||
--ion-color-step-950: #f3f3f3; | |||||
--ion-item-background: #1e1e1e; | |||||
--ion-toolbar-background: #1f1f1f; | |||||
--ion-tab-bar-background: #1f1f1f; | |||||
--ion-card-background: #1e1e1e; | |||||
} | |||||
} |
@@ -0,0 +1,5 @@ | |||||
/** | |||||
* Prevents Angular change detection from | |||||
* running with certain Web Component callbacks | |||||
*/ | |||||
(window as any).__Zone_disable_customElements = true; |
@@ -0,0 +1,18 @@ | |||||
{ | |||||
"extends": "./tsconfig.json", | |||||
"compilerOptions": { | |||||
"outDir": "./out-tsc/app", | |||||
"types": [] | |||||
}, | |||||
"files": [ | |||||
"src/main.ts", | |||||
"src/polyfills.ts" | |||||
], | |||||
"include": [ | |||||
"src/**/*.ts", | |||||
"src/**/*.d.ts" | |||||
], | |||||
"exclude": [ | |||||
"src/**/*.spec.ts" | |||||
] | |||||
} |
@@ -0,0 +1,23 @@ | |||||
{ | |||||
"compileOnSave": false, | |||||
"compilerOptions": { | |||||
"baseUrl": "./", | |||||
"outDir": "./dist/out-tsc", | |||||
"sourceMap": true, | |||||
"declaration": false, | |||||
"downlevelIteration": true, | |||||
"experimentalDecorators": true, | |||||
"module": "esnext", | |||||
"moduleResolution": "node", | |||||
"importHelpers": true, | |||||
"target": "es2015", | |||||
"lib": [ | |||||
"es2018", | |||||
"dom" | |||||
] | |||||
}, | |||||
"angularCompilerOptions": { | |||||
"fullTemplateTypeCheck": true, | |||||
"strictInjectionParameters": true | |||||
} | |||||
} |
@@ -0,0 +1,18 @@ | |||||
{ | |||||
"extends": "./tsconfig.json", | |||||
"compilerOptions": { | |||||
"outDir": "./out-tsc/spec", | |||||
"types": [ | |||||
"jasmine", | |||||
"node" | |||||
] | |||||
}, | |||||
"files": [ | |||||
"src/test.ts", | |||||
"src/polyfills.ts" | |||||
], | |||||
"include": [ | |||||
"src/**/*.spec.ts", | |||||
"src/**/*.d.ts" | |||||
] | |||||
} |
@@ -0,0 +1,149 @@ | |||||
{ | |||||
"extends": "tslint:recommended", | |||||
"rules": { | |||||
"align": { | |||||
"options": [ | |||||
"parameters", | |||||
"statements" | |||||
] | |||||
}, | |||||
"array-type": false, | |||||
"arrow-return-shorthand": true, | |||||
"curly": true, | |||||
"deprecation": { | |||||
"severity": "warning" | |||||
}, | |||||
"component-class-suffix": [true, "Page", "Component"], | |||||
"contextual-lifecycle": true, | |||||
"directive-class-suffix": true, | |||||
"directive-selector": [ | |||||
true, | |||||
"attribute", | |||||
"app", | |||||
"camelCase" | |||||
], | |||||
"component-selector": [ | |||||
true, | |||||
"element", | |||||
"app", | |||||
"kebab-case" | |||||
], | |||||
"eofline": true, | |||||
"import-blacklist": [ | |||||
true, | |||||
"rxjs/Rx" | |||||
], | |||||
"import-spacing": true, | |||||
"indent": { | |||||
"options": [ | |||||
"spaces" | |||||
] | |||||
}, | |||||
"max-classes-per-file": false, | |||||
"max-line-length": [ | |||||
true, | |||||
140 | |||||
], | |||||
"member-ordering": [ | |||||
true, | |||||
{ | |||||
"order": [ | |||||
"static-field", | |||||
"instance-field", | |||||
"static-method", | |||||
"instance-method" | |||||
] | |||||
} | |||||
], | |||||
"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-var-requires": false, | |||||
"object-literal-key-quotes": [ | |||||
true, | |||||
"as-needed" | |||||
], | |||||
"quotemark": [ | |||||
true, | |||||
"single" | |||||
], | |||||
"semicolon": { | |||||
"options": [ | |||||
"always" | |||||
] | |||||
}, | |||||
"space-before-function-paren": { | |||||
"options": { | |||||
"anonymous": "never", | |||||
"asyncArrow": "always", | |||||
"constructor": "never", | |||||
"method": "never", | |||||
"named": "never" | |||||
} | |||||
}, | |||||
"typedef-whitespace": { | |||||
"options": [ | |||||
{ | |||||
"call-signature": "nospace", | |||||
"index-signature": "nospace", | |||||
"parameter": "nospace", | |||||
"property-declaration": "nospace", | |||||
"variable-declaration": "nospace" | |||||
}, | |||||
{ | |||||
"call-signature": "onespace", | |||||
"index-signature": "onespace", | |||||
"parameter": "onespace", | |||||
"property-declaration": "onespace", | |||||
"variable-declaration": "onespace" | |||||
} | |||||
] | |||||
}, | |||||
"variable-name": { | |||||
"options": [ | |||||
"ban-keywords", | |||||
"check-format", | |||||
"allow-pascal-case" | |||||
] | |||||
}, | |||||
"whitespace": { | |||||
"options": [ | |||||
"check-branch", | |||||
"check-decl", | |||||
"check-operator", | |||||
"check-separator", | |||||
"check-type", | |||||
"check-typecast" | |||||
] | |||||
}, | |||||
"no-conflicting-lifecycle": true, | |||||
"no-host-metadata-property": true, | |||||
"no-input-rename": true, | |||||
"no-inputs-metadata-property": true, | |||||
"no-output-native": true, | |||||
"no-output-on-prefix": true, | |||||
"no-output-rename": true, | |||||
"no-outputs-metadata-property": true, | |||||
"template-banana-in-box": true, | |||||
"template-no-negated-async": true, | |||||
"use-lifecycle-interface": true, | |||||
"use-pipe-transform-interface": true, | |||||
"object-literal-sort-keys": false | |||||
}, | |||||
"rulesDirectory": [ | |||||
"codelyzer" | |||||
] | |||||
} |