@ -0,0 +1,45 @@ | |||
# 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 | |||
# 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,17 @@ | |||
# 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 | |||
# For the full list of supported browsers by the Angular framework, please see: | |||
# https://angular.io/guide/browser-support | |||
# You can see what browsers were selected by your queries by running: | |||
# npx browserslist | |||
last 1 Chrome version | |||
last 1 Firefox version | |||
last 2 Edge major versions | |||
last 2 Safari major versions | |||
last 2 iOS major versions | |||
Firefox ESR | |||
not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. |
@ -0,0 +1,16 @@ | |||
# 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 | |||
[*.ts] | |||
quote_type = single | |||
[*.md] | |||
max_line_length = off | |||
trim_trailing_whitespace = false |
@ -0,0 +1,45 @@ | |||
# 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 | |||
# 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,27 @@ | |||
# Remote | |||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.8. | |||
## Development server | |||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. | |||
## Code scaffolding | |||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. | |||
## Build | |||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. | |||
## Running unit tests | |||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). | |||
## Running end-to-end tests | |||
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. | |||
## Further help | |||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. |
@ -0,0 +1,124 @@ | |||
{ | |||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||
"cli": { | |||
"analytics": false | |||
}, | |||
"version": 1, | |||
"newProjectRoot": "projects", | |||
"projects": { | |||
"remote": { | |||
"projectType": "application", | |||
"schematics": { | |||
"@schematics/angular:component": { | |||
"style": "scss" | |||
}, | |||
"@schematics/angular:application": { | |||
"strict": true | |||
} | |||
}, | |||
"root": "", | |||
"sourceRoot": "src", | |||
"prefix": "remote", | |||
"architect": { | |||
"build": { | |||
"builder": "ngx-build-plus:browser", | |||
"options": { | |||
"outputPath": "dist/remote", | |||
"index": "src/index.html", | |||
"main": "src/main.ts", | |||
"polyfills": "src/polyfills.ts", | |||
"tsConfig": "tsconfig.app.json", | |||
"inlineStyleLanguage": "scss", | |||
"assets": [ | |||
"src/favicon.ico", | |||
"src/assets" | |||
], | |||
"styles": [ | |||
"src/styles.scss" | |||
], | |||
"scripts": [], | |||
"extraWebpackConfig": "webpack.config.js", | |||
"commonChunk": false | |||
}, | |||
"configurations": { | |||
"production": { | |||
"budgets": [ | |||
{ | |||
"type": "initial", | |||
"maximumWarning": "500kb", | |||
"maximumError": "1mb" | |||
}, | |||
{ | |||
"type": "anyComponentStyle", | |||
"maximumWarning": "2kb", | |||
"maximumError": "4kb" | |||
} | |||
], | |||
"fileReplacements": [ | |||
{ | |||
"replace": "src/environments/environment.ts", | |||
"with": "src/environments/environment.prod.ts" | |||
} | |||
], | |||
"outputHashing": "all", | |||
"extraWebpackConfig": "webpack.prod.config.js" | |||
}, | |||
"development": { | |||
"buildOptimizer": false, | |||
"optimization": false, | |||
"vendorChunk": true, | |||
"extractLicenses": false, | |||
"sourceMap": true, | |||
"namedChunks": true | |||
} | |||
}, | |||
"defaultConfiguration": "production" | |||
}, | |||
"serve": { | |||
"builder": "ngx-build-plus:dev-server", | |||
"configurations": { | |||
"production": { | |||
"browserTarget": "remote:build:production", | |||
"extraWebpackConfig": "webpack.prod.config.js" | |||
}, | |||
"development": { | |||
"browserTarget": "remote:build:development" | |||
} | |||
}, | |||
"defaultConfiguration": "development", | |||
"options": { | |||
"port": 3000, | |||
"extraWebpackConfig": "webpack.config.js" | |||
} | |||
}, | |||
"extract-i18n": { | |||
"builder": "ngx-build-plus:extract-i18n", | |||
"options": { | |||
"browserTarget": "remote:build", | |||
"extraWebpackConfig": "webpack.config.js" | |||
} | |||
}, | |||
"test": { | |||
"builder": "@angular-devkit/build-angular:karma", | |||
"options": { | |||
"main": "src/test.ts", | |||
"polyfills": "src/polyfills.ts", | |||
"tsConfig": "tsconfig.spec.json", | |||
"karmaConfig": "karma.conf.js", | |||
"inlineStyleLanguage": "scss", | |||
"assets": [ | |||
"src/favicon.ico", | |||
"src/assets" | |||
], | |||
"styles": [ | |||
"src/styles.scss", | |||
"node_modules/ng-zorro-antd/ng-zorro-antd.min.css" | |||
], | |||
"scripts": [] | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
"defaultProject": "remote" | |||
} |
@ -0,0 +1,44 @@ | |||
// 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'), | |||
require('@angular-devkit/build-angular/plugins/karma') | |||
], | |||
client: { | |||
jasmine: { | |||
// you can add configuration options for Jasmine here | |||
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html | |||
// for example, you can disable the random execution with `random: false` | |||
// or set a specific seed with `seed: 4321` | |||
}, | |||
clearContext: false // leave Jasmine Spec Runner output visible in browser | |||
}, | |||
jasmineHtmlReporter: { | |||
suppressAll: true // removes the duplicated traces | |||
}, | |||
coverageReporter: { | |||
dir: require('path').join(__dirname, './coverage/remote'), | |||
subdir: '.', | |||
reporters: [ | |||
{ type: 'html' }, | |||
{ type: 'text-summary' } | |||
] | |||
}, | |||
reporters: ['progress', 'kjhtml'], | |||
port: 9876, | |||
colors: true, | |||
logLevel: config.LOG_INFO, | |||
autoWatch: true, | |||
browsers: ['Chrome'], | |||
singleRun: false, | |||
restartOnFileChange: true | |||
}); | |||
}; |
@ -0,0 +1,46 @@ | |||
{ | |||
"name": "remote", | |||
"version": "0.0.0", | |||
"scripts": { | |||
"ng": "ng", | |||
"start": "ng serve --port 3001 --open", | |||
"build": "ng build", | |||
"watch": "ng build --watch --configuration development", | |||
"test": "ng test", | |||
"run:all": "node node_modules/@angular-architects/module-federation/src/server/mf-dev-server.js" | |||
}, | |||
"private": true, | |||
"dependencies": { | |||
"@angular-architects/module-federation": "^12.5.3", | |||
"@angular/animations": "~12.2.0", | |||
"@angular/common": "~12.2.0", | |||
"@angular/compiler": "~12.2.0", | |||
"@angular/core": "~12.2.0", | |||
"@angular/forms": "~12.2.0", | |||
"@angular/platform-browser": "~12.2.0", | |||
"@angular/platform-browser-dynamic": "~12.2.0", | |||
"@angular/router": "~12.2.0", | |||
"my-shared": "file:../shell/dist/my-shared", | |||
"less": "^4.2.0", | |||
"less-loader": "^12.2.0", | |||
"ng-zorro-antd": "^12.1.1", | |||
"rxjs": "~6.6.0", | |||
"tslib": "^2.3.0", | |||
"zone.js": "~0.11.4" | |||
}, | |||
"devDependencies": { | |||
"@angular-devkit/build-angular": "~12.2.8", | |||
"@angular/cli": "~12.2.8", | |||
"@angular/compiler-cli": "~12.2.0", | |||
"@types/jasmine": "~3.8.0", | |||
"@types/node": "^12.11.1", | |||
"jasmine-core": "~3.8.0", | |||
"karma": "~6.3.0", | |||
"karma-chrome-launcher": "~3.1.0", | |||
"karma-coverage": "~2.0.3", | |||
"karma-jasmine": "~4.0.0", | |||
"karma-jasmine-html-reporter": "~1.7.0", | |||
"typescript": "~4.3.5", | |||
"url-loader": "^4.1.1" | |||
} | |||
} |
@ -0,0 +1,19 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { RouterModule, Routes } from '@angular/router'; | |||
const routes: Routes = [ | |||
{ | |||
path: '', | |||
loadChildren: () => | |||
import('./microfrontend/microfrontend.module').then( | |||
(m) => m.MicrofrontendModule | |||
), | |||
pathMatch: 'prefix', | |||
}, | |||
]; | |||
@NgModule({ | |||
imports: [RouterModule.forRoot(routes)], | |||
exports: [RouterModule], | |||
}) | |||
export class AppRoutingModule { } |
@ -0,0 +1 @@ | |||
<router-outlet></router-outlet> |
@ -0,0 +1,13 @@ | |||
:host { | |||
display: block; | |||
padding: 16px; | |||
font-size: 14px; | |||
.button{ | |||
height: 32px; | |||
background-color: #b60816; | |||
border: none; | |||
font-weight: 700; | |||
color: aliceblue; | |||
} | |||
} |
@ -0,0 +1,35 @@ | |||
import { TestBed } from '@angular/core/testing'; | |||
import { RouterTestingModule } from '@angular/router/testing'; | |||
import { AppComponent } from './app.component'; | |||
describe('AppComponent', () => { | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
imports: [ | |||
RouterTestingModule | |||
], | |||
declarations: [ | |||
AppComponent | |||
], | |||
}).compileComponents(); | |||
}); | |||
it('should create the app', () => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
const app = fixture.componentInstance; | |||
expect(app).toBeTruthy(); | |||
}); | |||
it(`should have as title 'remote'`, () => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
const app = fixture.componentInstance; | |||
expect(app.title).toEqual('remote'); | |||
}); | |||
it('should render title', () => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
fixture.detectChanges(); | |||
const compiled = fixture.nativeElement as HTMLElement; | |||
expect(compiled.querySelector('.content span')?.textContent).toContain('remote app is running!'); | |||
}); | |||
}); |
@ -0,0 +1,24 @@ | |||
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-root', | |||
templateUrl: './app.component.html', | |||
styleUrls: ['./app.component.scss'], | |||
}) | |||
export class AppComponent implements OnInit,OnDestroy { | |||
ngOnInit(): void { | |||
//Called after the constructor, initializing input properties, and the first call to ngOnChanges. | |||
//Add 'implements OnInit' to the class. | |||
console.log('remote AppComponent ngOnInit'); | |||
} | |||
ngOnDestroy(): void { | |||
console.log('remote AppComponent ngOnDestroy'); | |||
} | |||
title = 'remote'; | |||
goToRemote1():void { | |||
} | |||
} |
@ -0,0 +1,23 @@ | |||
import { MicrofrontendModule } from './microfrontend/microfrontend.module'; | |||
import { NgModule } from '@angular/core'; | |||
import { BrowserModule } from '@angular/platform-browser'; | |||
// import { NzTableModule } from 'ng-zorro-antd/table'; | |||
// import { NzButtonModule } from 'ng-zorro-antd/button'; | |||
import { NzListModule } from 'ng-zorro-antd/list'; | |||
import { AppRoutingModule } from './app-routing.module'; | |||
import { AppComponent } from './app.component'; | |||
@NgModule({ | |||
declarations: [AppComponent], | |||
imports: [ | |||
// NzTableModule, | |||
// NzButtonModule, | |||
NzListModule, | |||
BrowserModule, | |||
AppRoutingModule, | |||
MicrofrontendModule, | |||
], | |||
providers: [], | |||
bootstrap: [AppComponent], | |||
}) | |||
export class AppModule {} |
@ -0,0 +1,55 @@ | |||
import { | |||
Directive, | |||
ElementRef, | |||
Input, | |||
OnChanges, | |||
Renderer2, | |||
SimpleChanges, | |||
} from '@angular/core'; | |||
import { assetUrl } from '../util/asset-url'; | |||
@Directive({ | |||
// eslint-disable-next-line @angular-eslint/directive-selector | |||
selector: | |||
'img[src],audio[src],embed[src],iframe[src],input[src],script[src],source[src],track[src],video[src]', | |||
}) | |||
export class MfaElementSrcDirective implements OnChanges { | |||
private _src: string = ''; | |||
@Input() src: string = ''; | |||
constructor(private element: ElementRef, private renderer2: Renderer2) {} | |||
setSrc(src: string): void { | |||
//debugger; | |||
// 非微前端環境不轉換 判断是否是微前端环境 | |||
if (!(window as any).__DW_MFA_ENV__) { | |||
this.renderer2.setAttribute(this.element.nativeElement, 'src', src); | |||
return; | |||
} | |||
// 絕對路徑,不轉換 | |||
if ( | |||
src.startsWith('http://') || | |||
src.startsWith('https://') || | |||
src.startsWith('//') || | |||
src.startsWith('data:') | |||
) { | |||
this.renderer2.setAttribute(this.element.nativeElement, 'src', src); | |||
return; | |||
} | |||
if (src && src.startsWith('./')) { | |||
src = assetUrl(src.substring(1)); | |||
} else { | |||
src = assetUrl(src); | |||
} | |||
this.renderer2.setAttribute(this.element.nativeElement, 'src', src); | |||
} | |||
ngOnChanges(changes: SimpleChanges): void { | |||
if (this._src !== changes.src.currentValue) { | |||
this._src = changes.src.currentValue; | |||
this.setSrc(this._src); | |||
} | |||
} | |||
} |
@ -0,0 +1,13 @@ | |||
<div class="container"> | |||
<header> | |||
<h1>用户信息</h1> | |||
</header> | |||
<main> | |||
<div class="card" *ngFor="let item of cards"> | |||
{{item}} | |||
</div> | |||
</main> | |||
<footer> | |||
底部内容 | |||
</footer> | |||
</div> |
@ -0,0 +1,35 @@ | |||
.container { | |||
display: flex; | |||
flex-direction: column; | |||
min-height: 100vh; | |||
} | |||
header { | |||
background-color: #1a81e8; | |||
padding: 20px; | |||
text-align: center; | |||
} | |||
main { | |||
flex: 1; | |||
display: flex; | |||
flex-wrap: wrap; | |||
justify-content: space-around; | |||
background-color: #9f9b9b; | |||
} | |||
.card { | |||
width: 320px; | |||
height: 180px; | |||
padding: 16px; | |||
background-image: linear-gradient(180deg, #f3f6f8 0%, #fefefe 100%); | |||
box-shadow: 0 6px 16px 0 #00194a1a; | |||
border-radius: 2px; | |||
} | |||
footer { | |||
background-color: #151618; | |||
padding: 20px; | |||
text-align: center; | |||
} |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { HomeComponent } from './home.component'; | |||
describe('HomeComponent', () => { | |||
let component: HomeComponent; | |||
let fixture: ComponentFixture<HomeComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ HomeComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(HomeComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,16 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-home', | |||
templateUrl: './home.component.html', | |||
styleUrls: ['./home.component.scss'] | |||
}) | |||
export class HomeComponent implements OnInit { | |||
cards = ['卡片1', '卡片2', '卡片3', '卡片4', '卡片5']; | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@ -0,0 +1,26 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { RouterModule, Routes } from '@angular/router'; | |||
import { LayoutComponent } from './layout.component'; | |||
const routes: Routes = [ | |||
{ | |||
path: '', | |||
component: LayoutComponent, | |||
children: [ | |||
{ | |||
path: '', | |||
loadChildren: () => | |||
import('../task/task.module').then( | |||
(m) => m.TaskModule | |||
), | |||
pathMatch: 'prefix', | |||
} | |||
] | |||
}, | |||
]; | |||
@NgModule({ | |||
imports: [RouterModule.forChild(routes)], | |||
exports: [RouterModule] | |||
}) | |||
export class LayoutRoutingModule { } |
@ -0,0 +1,5 @@ | |||
<h3>到款认领系统</h3> | |||
<!-- <img style="width:20px;height:20px" src="assets/img/logo.png" alt="" srcset=""> --> | |||
<button class="button" (click)="goToRemote1()" style="margin-bottom: 20px;">goToShell</button> | |||
<router-outlet></router-outlet> | |||
@ -0,0 +1 @@ | |||
// @import '../../../../src/styles.scss'; |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { LayoutComponent } from './layout.component'; | |||
describe('LayoutComponent', () => { | |||
let component: LayoutComponent; | |||
let fixture: ComponentFixture<LayoutComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ LayoutComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(LayoutComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,27 @@ | |||
import { Component, OnDestroy, OnInit } from '@angular/core'; | |||
import { Router } from '@angular/router'; | |||
import { MySharedService } from 'my-shared'; | |||
@Component({ | |||
selector: 'remote-layout', | |||
templateUrl: './layout.component.html', | |||
styleUrls: ['./layout.component.scss'], | |||
}) | |||
export class LayoutComponent implements OnInit, OnDestroy { | |||
constructor( | |||
private router: Router, | |||
private mySharedService: MySharedService | |||
) {} | |||
ngOnInit(): void { | |||
console.log(this); | |||
console.log('Remote LayoutComponent Init'); | |||
} | |||
ngOnDestroy(): void { | |||
console.log('Remote LayoutComponent Destroy'); | |||
} | |||
goToRemote1(): void { | |||
this.mySharedService.setData('我是到款认领系统发送过来的数据'); | |||
// this.router.navigate(['']); | |||
} | |||
} |
@ -0,0 +1,9 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { LayoutRoutingModule } from './layout-routing.module'; | |||
import { SharedModule } from '../shared/shared.module'; | |||
@NgModule({ | |||
declarations: [], | |||
imports: [CommonModule, LayoutRoutingModule, SharedModule], | |||
}) | |||
export class LayoutModule {} |
@ -0,0 +1,26 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { RouterModule, Routes } from '@angular/router'; | |||
import { PageNotFoundComponent } from './page-not-found/page-not-found.component'; | |||
import { HomeComponent } from './layout/home/home.component'; | |||
const routes: Routes = [ | |||
{ | |||
path: '', | |||
loadChildren: () => | |||
import('./layout/layout.module').then( | |||
(m) => m.LayoutModule | |||
), | |||
pathMatch: 'prefix', | |||
}, | |||
{ | |||
path: 'home', | |||
component: HomeComponent, | |||
}, | |||
{ path: '**', component: PageNotFoundComponent } | |||
]; | |||
@NgModule({ | |||
imports: [RouterModule.forChild(routes)], | |||
exports: [RouterModule], | |||
}) | |||
export class MicrofrontendRoutingModule { } |
@ -0,0 +1,18 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { MicrofrontendRoutingModule } from './microfrontend-routing.module'; | |||
import { PageNotFoundComponent } from './page-not-found/page-not-found.component'; | |||
import { HomeComponent } from './layout/home/home.component'; | |||
import { MicrofrontendComponent } from './microfrontend/microfrontend.component'; | |||
import { LayoutComponent } from './layout/layout.component'; | |||
import { TaskModule } from './task/task.module'; | |||
@NgModule({ | |||
declarations: [ | |||
PageNotFoundComponent, | |||
HomeComponent, | |||
MicrofrontendComponent, | |||
LayoutComponent, | |||
], | |||
imports: [CommonModule, MicrofrontendRoutingModule, TaskModule], | |||
}) | |||
export class MicrofrontendModule {} |
@ -0,0 +1 @@ | |||
<p>microfrontend works!</p> |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { MicrofrontendComponent } from './microfrontend.component'; | |||
describe('MicrofrontendComponent', () => { | |||
let component: MicrofrontendComponent; | |||
let fixture: ComponentFixture<MicrofrontendComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ MicrofrontendComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(MicrofrontendComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'remote-microfrontend', | |||
templateUrl: './microfrontend.component.html', | |||
styleUrls: ['./microfrontend.component.scss'] | |||
}) | |||
export class MicrofrontendComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@ -0,0 +1 @@ | |||
<p>page-not-found works!</p> |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { PageNotFoundComponent } from './page-not-found.component'; | |||
describe('PageNotFoundComponent', () => { | |||
let component: PageNotFoundComponent; | |||
let fixture: ComponentFixture<PageNotFoundComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ PageNotFoundComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(PageNotFoundComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'remote-page-not-found', | |||
templateUrl: './page-not-found.component.html', | |||
styleUrls: ['./page-not-found.component.scss'] | |||
}) | |||
export class PageNotFoundComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@ -0,0 +1,10 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { MfaElementSrcDirective } from '../directives/element-src.directive'; | |||
@NgModule({ | |||
declarations: [MfaElementSrcDirective], | |||
imports: [CommonModule], | |||
exports: [MfaElementSrcDirective], | |||
}) | |||
export class SharedModule {} |
@ -0,0 +1,10 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { RouterModule, Routes } from '@angular/router'; | |||
const routes: Routes = []; | |||
@NgModule({ | |||
imports: [RouterModule.forChild(routes)], | |||
exports: [RouterModule] | |||
}) | |||
export class DetailRoutingModule { } |
@ -0,0 +1 @@ | |||
<p>detail works!</p> |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { DetailComponent } from './detail.component'; | |||
describe('DetailComponent', () => { | |||
let component: DetailComponent; | |||
let fixture: ComponentFixture<DetailComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ DetailComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(DetailComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'remote-detail', | |||
templateUrl: './detail.component.html', | |||
styleUrls: ['./detail.component.scss'] | |||
}) | |||
export class DetailComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@ -0,0 +1,17 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { DetailRoutingModule } from './detail-routing.module'; | |||
import { DetailComponent } from './detail.component'; | |||
@NgModule({ | |||
declarations: [ | |||
DetailComponent | |||
], | |||
imports: [ | |||
CommonModule, | |||
DetailRoutingModule | |||
] | |||
}) | |||
export class DetailModule { } |
@ -0,0 +1 @@ | |||
<ng-container #componentViewContainer></ng-container> |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { DynamicComponentComponent } from './dynamic-component.component'; | |||
describe('DynamicComponentComponent', () => { | |||
let component: DynamicComponentComponent; | |||
let fixture: ComponentFixture<DynamicComponentComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ DynamicComponentComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(DynamicComponentComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'shell-dynamic-component,div[dynamic-component]', | |||
templateUrl: './dynamic-component.component.html', | |||
styleUrls: ['./dynamic-component.component.scss'] | |||
}) | |||
export class DynamicComponentComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@ -0,0 +1,10 @@ | |||
<div class="task-card-list"> | |||
<div *ngFor="let task of tasks" class="task-card" (click)="goToDetail(task.id)"> | |||
<h3>{{ task.title }}</h3> | |||
<div> | |||
<img src="assets/img/appealed.png" alt="" srcset=""> | |||
</div> | |||
<p>{{ task.description }}</p> | |||
</div> | |||
</div> |
@ -0,0 +1,35 @@ | |||
.task-card-list { | |||
display: flex; | |||
flex-wrap: wrap; | |||
gap: 16px; | |||
} | |||
.task-card { | |||
background-color: #fdf3f4; | |||
border-radius: 8px; | |||
padding: 16px; | |||
width: 300px; | |||
} | |||
.circle { | |||
width: 200px; | |||
height: 200px; | |||
position: relative; | |||
overflow: hidden; | |||
} | |||
.circle img { | |||
position: absolute; | |||
top: 50%; | |||
left: 50%; | |||
transform: translate(-50%, -50%); | |||
animation: rotate 10s linear infinite; | |||
} | |||
@keyframes rotate { | |||
from { | |||
transform: translate(-50%, -50%) rotate(0deg); | |||
} | |||
to { | |||
transform: translate(-50%, -50%) rotate(360deg); | |||
} | |||
} |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { ListComponent } from './list.component'; | |||
describe('ListComponent', () => { | |||
let component: ListComponent; | |||
let fixture: ComponentFixture<ListComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ ListComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(ListComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,20 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
import { ActivatedRoute, Router } from '@angular/router'; | |||
@Component({ | |||
selector: 'remote-list', | |||
templateUrl: './list.component.html', | |||
styleUrls: ['./list.component.scss'], | |||
}) | |||
export class ListComponent implements OnInit { | |||
tasks = [ | |||
{ title: 'Task 1', description: 'Description for Task 1', id: '1' }, | |||
{ title: 'Task 2', description: 'Description for Task 2', id: '2' }, | |||
]; | |||
constructor(private route: ActivatedRoute, private router: Router) {} | |||
ngOnInit(): void {} | |||
goToDetail(id: string): void { | |||
this.router.navigate(['./detail'], { relativeTo: this.route }); | |||
} | |||
} |
@ -0,0 +1,4 @@ | |||
<h3>task-content works!</h3> | |||
<div #contentArea> | |||
<div dynamic-ant-form-control></div> | |||
</div> |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { TaskContentComponent } from './task-content.component'; | |||
describe('TaskContentComponent', () => { | |||
let component: TaskContentComponent; | |||
let fixture: ComponentFixture<TaskContentComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ TaskContentComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(TaskContentComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,17 @@ | |||
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; | |||
@Component({ | |||
selector: 'remote-task-content', | |||
templateUrl: './task-content.component.html', | |||
styleUrls: ['./task-content.component.scss'] | |||
}) | |||
export class TaskContentComponent implements OnInit { | |||
// @ViewChild('contentArea') | |||
// contentAreaContainer: ElementRef; | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@ -0,0 +1,27 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { RouterModule, Routes } from '@angular/router'; | |||
import { TaskComponent } from './task.component'; | |||
import { ListComponent } from './list/list.component'; | |||
import { TaskContentComponent } from './task-content/task-content.component'; | |||
const routes: Routes = [ | |||
{ | |||
path: '', | |||
component: TaskComponent, | |||
children:[{ | |||
path:'', | |||
component: ListComponent, | |||
}, | |||
{ | |||
path:'detail', | |||
component: TaskContentComponent, | |||
} | |||
] | |||
}, | |||
]; | |||
@NgModule({ | |||
imports: [RouterModule.forChild(routes)], | |||
exports: [RouterModule] | |||
}) | |||
export class TaskRoutingModule { } |
@ -0,0 +1,2 @@ | |||
<router-outlet></router-outlet> |
@ -0,0 +1,25 @@ | |||
import { ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { TaskComponent } from './task.component'; | |||
describe('TaskComponent', () => { | |||
let component: TaskComponent; | |||
let fixture: ComponentFixture<TaskComponent>; | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
declarations: [ TaskComponent ] | |||
}) | |||
.compileComponents(); | |||
}); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(TaskComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@ -0,0 +1,16 @@ | |||
import { Component, OnDestroy, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'remote-task', | |||
templateUrl: './task.component.html', | |||
styleUrls: ['./task.component.scss'] | |||
}) | |||
export class TaskComponent implements OnInit, OnDestroy { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
ngOnDestroy(): void { | |||
} | |||
} |
@ -0,0 +1,20 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { TaskRoutingModule } from './task-routing.module'; | |||
import { TaskComponent } from './task.component'; | |||
import { ListComponent } from './list/list.component'; | |||
import { TaskContentComponent } from './task-content/task-content.component'; | |||
import { DynamicComponentComponent } from './dynamic-component/dynamic-component.component'; | |||
import { SharedModule } from '../shared/shared.module'; | |||
@NgModule({ | |||
declarations: [ | |||
TaskComponent, | |||
ListComponent, | |||
TaskContentComponent, | |||
DynamicComponentComponent, | |||
TaskContentComponent, | |||
], | |||
imports: [CommonModule, TaskRoutingModule, SharedModule], | |||
}) | |||
export class TaskModule {} |
@ -0,0 +1,22 @@ | |||
export function assetUrl(url: string): string { | |||
//debugger | |||
if (!(window as any).__DW_MFA_ENV__) { | |||
return url; | |||
} | |||
// @ts-ignore | |||
const publicPath = __webpack_public_path__; | |||
console.log('没法儿', publicPath); | |||
const urlPrefix = publicPath.endsWith('/') | |||
? '' | |||
: url.startsWith('/') | |||
? '' | |||
: '/'; | |||
if (publicPath.endsWith('/') && url.startsWith('/')) { | |||
url = url.substring(1); | |||
} | |||
return `${publicPath}${urlPrefix}${url}`; | |||
} |
@ -0,0 +1,281 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> | |||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | |||
viewBox="141 248 278 64" enable-background="new 141 248 278 64" xml:space="preserve"> | |||
<g id="Layer_4" display="none"> | |||
<rect x="-20.1" y="194.4" display="inline" fill="#404040" stroke="#FFFFFF" stroke-width="3" stroke-linejoin="round" stroke-miterlimit="10" width="596.3" height="174.2"/> | |||
</g> | |||
<g> | |||
<g> | |||
<path fill="#FFFFFF" d="M210.5,253.4C210.5,253.4,210.5,253.4,210.5,253.4C210.5,253.4,210.5,253.4,210.5,253.4z"/> | |||
<path fill="#FFFFFF" d="M210.5,253.4C210.5,253.4,210.5,253.4,210.5,253.4C210.5,253.4,210.5,253.4,210.5,253.4 M210.5,253.4 | |||
C210.5,253.4,210.5,253.5,210.5,253.4C210.5,253.5,210.5,253.4,210.5,253.4 M210.1,253.2L210.1,253.2L210.1,253.2l0.2,0.1l0.7,0.3 | |||
l0,0l0,0l-0.3-0.1L210.1,253.2L210.1,253.2z"/> | |||
</g> | |||
<g> | |||
<path fill="#FFFFFF" d="M184.8,308.9c-0.3,0-0.6-0.1-0.8-0.3l-0.1,0c-0.6,0-1.1-0.4-1.3-0.9l-3.7-8.1l-5.5,8 | |||
c-0.1,0.1-0.1,0.1-0.2,0.2l-0.3,0.3c-0.1,0.1-0.2,0.2-0.4,0.3c-0.2,0.1-0.8,0.4-1.4,0.4c-0.4,0-0.7-0.1-1-0.3 | |||
c-0.3-0.2-0.8-0.6-0.9-1.4L149,264.4c-0.3-0.6-0.2-1.3,0.3-1.7l0.3-0.3c0.3-0.3,0.7-0.4,1.1-0.4h0.3c0.3,0,0.5,0.1,0.7,0.2 | |||
c6.6,3.8,13.5,5.7,20.5,5.7c4.5,0,9.1-0.8,13.8-2.4c7.4-2.6,14.9-7.2,22.1-13.6c0.2-0.2,0.4-0.3,0.6-0.3c0,0,0.1,0,0.1-0.1 | |||
c0.2-0.1,0.4-0.1,0.6-0.1c0.5,0,0.9,0.2,1.3,0.6c0.3,0.3,0.4,0.7,0.4,1.1v0.4h-0.6v-0.1l0,0v0.1l0.2,0.1c0,0,0,0,0,0.1l0.4,0.3 | |||
l-17.9,25.7c4.8-1.5,9.8-4.4,14.7-8.6c0.1-0.4,0.4-0.7,0.8-0.9c0.2-0.1,0.4-0.2,0.7-0.2c0.3,0,0.6,0.1,0.9,0.3l0.4,0.3 | |||
c0.6,0.5,0.8,1.4,0.3,2.1L186.4,308c-0.1,0.1-0.1,0.1-0.2,0.2l-0.3,0.3C185.6,308.8,185.2,308.9,184.8,308.9z"/> | |||
<path fill="#FFFFFF" d="M209.5,251.6c0.3,0,0.7,0.1,1.1,0.5c0.2,0.2,0.4,0.6,0.4,0.9v0.2h-0.3c0,0,0,0.1,0,0.1c0,0,0-0.1,0-0.1 | |||
h-0.8l0.6,0.4c0.1-0.1,0.1-0.1,0.1-0.2c0,0.1,0,0.2-0.1,0.2l0.4,0.2l-18.2,26.1c5.1-1.5,10.3-4.4,15.6-8.9 | |||
c0.1-0.3,0.3-0.6,0.6-0.8c0.2-0.1,0.4-0.1,0.6-0.1c0.3,0,0.5,0.1,0.7,0.2l0.4,0.3c0.5,0.4,0.7,1.2,0.3,1.7l-24.6,35.3 | |||
c0,0.1-0.1,0.1-0.1,0.2l-0.3,0.3c-0.2,0.2-0.6,0.4-0.9,0.4c-0.2,0-0.5-0.1-0.7-0.2l-0.1-0.1c0,0,0,0-0.1,0c-0.5,0-0.9-0.3-1.1-0.7 | |||
l-3.9-8.5l-5.8,8.4c0,0.1-0.1,0.1-0.1,0.2l-0.3,0.3c-0.1,0.1-0.2,0.2-0.3,0.2c-0.2,0.1-0.7,0.4-1.3,0.4c-0.3,0-0.6-0.1-0.9-0.2 | |||
c-0.3-0.2-0.7-0.5-0.8-1.2l-20.2-42.8c-0.2-0.5-0.1-1,0.2-1.4l0.3-0.3c0.2-0.2,0.6-0.4,0.9-0.4h0.3c0.2,0,0.4,0.1,0.6,0.2 | |||
c6.7,3.8,13.6,5.8,20.6,5.8c4.6,0,9.2-0.8,13.8-2.4c7.5-2.6,14.9-7.2,22.2-13.6c0.2-0.1,0.3-0.2,0.5-0.3c0.1,0,0.1-0.1,0.2-0.1 | |||
C209.1,251.7,209.2,251.6,209.5,251.6 M210.6,253.4C210.6,253.4,210.5,253.4,210.6,253.4C210.5,253.4,210.6,253.4,210.6,253.4 | |||
M209.5,251.1c-0.2,0-0.5,0-0.7,0.1c-0.1,0-0.1,0-0.2,0.1c-0.2,0.1-0.5,0.2-0.7,0.4c-7.2,6.4-14.6,10.9-22,13.5 | |||
c-4.6,1.6-9.2,2.4-13.7,2.4c-7,0-13.8-1.9-20.4-5.7c-0.3-0.2-0.6-0.2-0.9-0.2h-0.3c-0.5,0-0.9,0.2-1.2,0.5l-0.3,0.3 | |||
c-0.5,0.5-0.7,1.3-0.3,2l20.2,42.7c0.1,0.8,0.7,1.3,1,1.5c0.3,0.2,0.7,0.3,1.1,0.3c0.7,0,1.3-0.3,1.5-0.4c0.2-0.1,0.3-0.2,0.5-0.3 | |||
l0.3-0.3c0.1-0.1,0.1-0.2,0.2-0.2l5.3-7.6l3.5,7.7c0.3,0.6,0.9,1,1.5,1c0.3,0.2,0.6,0.3,1,0.3c0.5,0,0.9-0.2,1.2-0.5l0.3-0.3 | |||
c0.1-0.1,0.1-0.2,0.2-0.2l24.6-35.3c0.5-0.8,0.4-1.8-0.4-2.4l-0.4-0.3c-0.3-0.2-0.7-0.3-1-0.3c-0.3,0-0.5,0.1-0.8,0.2 | |||
c-0.4,0.2-0.7,0.5-0.9,0.9c-4.7,3.9-9.4,6.7-13.9,8.2l17.4-24.9l0.3-0.4l-0.1-0.1h0.1v-0.5V253c0-0.5-0.2-0.9-0.5-1.2 | |||
C210.4,251.3,209.8,251.1,209.5,251.1L209.5,251.1z"/> | |||
</g> | |||
<g> | |||
<path fill="#FFFFFF" d="M236.7,308.7c-0.4,0-0.8-0.2-1.1-0.5c-0.5-0.5-0.5-1.3-0.1-1.9c1-1.5,2.1-4.2,2.1-7.2v-0.4 | |||
c-0.2,0-0.8,0-0.8,0c-0.1,0-0.2,0-0.4,0c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.3,0c-0.4,0-0.8-0.2-1.1-0.4c-0.3-0.3-0.5-0.8-0.4-1.3 | |||
c0-0.1,0-0.2-0.2-0.7c-0.3-0.5-0.2-1.1,0.1-1.6c0.3-0.4,0.7-0.6,1.2-0.6c0.1,0,0.2,0,0.2,0c0.2,0,0.4,0.1,0.6,0.1 | |||
c-0.3-0.3-0.4-0.7-0.4-1.1c0,0,0.3-4.5,0.3-6.3v-2.3c0-1.2-0.1-5.3-0.2-7l0-0.1c0-0.5,0.2-0.9,0.5-1.2c0.3-0.2,0.6-0.4,1-0.4 | |||
c0.1,0,0.2,0,0.3,0l3.6,0.7c0.1-0.8,0.7-1.4,1.5-1.4h14.4c0.5,0,1.1,0.3,1.4,0.7c0.1,0,0.3,0,0.4,0l0.1,0l4.8,0.4 | |||
c0.6,0,1.1,0.5,1.3,1.1c0.2,0.6,0,1.2-0.5,1.6c0,0-0.6,0.5-0.7,1.5l0,12.8c0,0.4-0.2,0.8-0.5,1.1h1.2c0.8,0,1.4,0.6,1.5,1.4 | |||
c0,0.5-0.1,0.9-0.5,1.2c0,0.1,0,0.1,0,0.3c0,0.8-0.7,1.5-1.5,1.5h-1.1v7c0,0.7-0.4,1.2-1.1,1.4l-3.4,1.1c-0.1,0-0.3,0.1-0.4,0.1 | |||
c-0.3,0-0.6-0.1-0.9-0.3c-0.4-0.3-0.6-0.7-0.6-1.2v-8h-0.4v7c0,0.7-0.4,1.2-1,1.4l-3.4,1.1c-0.1,0-0.3,0.1-0.5,0.1 | |||
c-0.3,0-0.6-0.1-0.9-0.3c-0.4-0.3-0.6-0.7-0.6-1.1c-0.1,0.1-0.2,0.1-0.4,0.2l-3.4,1.1c-0.1,0-0.3,0.1-0.4,0.1 | |||
c-0.3,0-0.6-0.1-0.9-0.3c-0.4-0.3-0.6-0.7-0.6-1.2v-8h-0.3v0.7c0,3.3-1.5,5.9-4.4,7.8c-1,0.6-2.2,1.4-2.2,1.4 | |||
C237.3,308.6,237,308.7,236.7,308.7z"/> | |||
<path fill="#FFFFFF" d="M257.4,275.5c0.5,0,1,0.3,1.2,0.8c0.2-0.1,0.3-0.1,0.5-0.1c0,0,0.1,0,0.1,0l4.8,0.4c0.5,0,1,0.4,1.1,0.9 | |||
c0.1,0.5,0,1-0.5,1.3c0,0-0.7,0.6-0.8,1.7v12.8c0,0.7-0.6,1.3-1.3,1.3h-6.4v0.1h8.6c0.6,0,1.2,0.5,1.2,1.1c0,0.4-0.1,0.8-0.4,1.1 | |||
c0,0.1,0,0.2,0,0.4c0,0.7-0.6,1.3-1.3,1.3H263v7.2c0,0.5-0.4,1-0.9,1.2l-3.4,1.1c-0.1,0-0.2,0.1-0.4,0.1c-0.3,0-0.5-0.1-0.7-0.2 | |||
c-0.3-0.2-0.5-0.6-0.5-1v-8.3h-0.9v7.2c0,0.5-0.4,1-0.9,1.2l-3.4,1.1c-0.1,0-0.2,0.1-0.4,0.1c-0.3,0-0.5-0.1-0.7-0.2 | |||
c-0.3-0.2-0.5-0.6-0.5-1v-0.5c-0.2,0.2-0.4,0.4-0.7,0.5l-3.4,1.1c-0.1,0-0.2,0.1-0.4,0.1c-0.3,0-0.5-0.1-0.7-0.2 | |||
c-0.3-0.2-0.5-0.6-0.5-1v-8.3h-0.8v1c0,3.2-1.5,5.7-4.3,7.6c-1,0.6-2.2,1.4-2.2,1.4c-0.2,0.1-0.4,0.2-0.7,0.2 | |||
c-0.3,0-0.7-0.1-0.9-0.4c-0.4-0.4-0.5-1.1-0.1-1.6c1.1-1.5,2.2-4.3,2.2-7.4v-0.7c-0.3,0-0.6,0-0.9,0c-0.2,0-0.3,0-0.5,0 | |||
c-0.1,0-0.2,0-0.4,0c-0.1,0-0.1,0-0.2,0c-0.3,0-0.6-0.1-0.9-0.4c-0.3-0.3-0.4-0.7-0.3-1.1c0-0.2,0-0.3-0.3-0.9 | |||
c-0.2-0.4-0.2-0.9,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5c0.1,0,0.1,0,0.2,0c1.1,0.2,1.7,0.2,3.1,0.2h5.8v-0.1h-7.1 | |||
c-0.3,0-0.7-0.1-0.9-0.4s-0.4-0.6-0.3-0.9c0,0,0.3-4.5,0.3-6.3v-2.3c0-1.5-0.2-7-0.2-7.1c0-0.4,0.1-0.7,0.4-1 | |||
c0.2-0.2,0.5-0.3,0.8-0.3c0.1,0,0.1,0,0.2,0l3.7,0.7c0.1,0,0.2,0,0.3,0.1v-0.2c0-0.7,0.6-1.3,1.3-1.3H257.4 M247.6,279.5h5.2v-0.3 | |||
h-5.2V279.5 M247.6,283.6h5.2v-0.3h-5.2V283.6 M247.6,287.7h5.2v-0.3h-5.2V287.7 M257.4,275H243c-0.8,0-1.5,0.6-1.7,1.3l-3.4-0.6 | |||
c-0.1,0-0.2,0-0.3,0c-0.4,0-0.8,0.2-1.1,0.4c-0.4,0.3-0.6,0.9-0.6,1.4l0,0.1c0.1,1.7,0.2,5.7,0.2,6.9v2.3c0,1.7-0.3,6.2-0.3,6.2 | |||
c0,0.3,0,0.5,0.1,0.8c0,0,0,0,0,0c-0.1,0-0.2,0-0.3,0c-0.6,0-1.1,0.3-1.4,0.7c-0.4,0.5-0.5,1.2-0.2,1.8c0.2,0.4,0.2,0.5,0.2,0.6 | |||
c-0.1,0.6,0.1,1.1,0.5,1.5c0.3,0.3,0.8,0.5,1.2,0.5c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0l0.1,0 | |||
c0.1,0,0.2,0,0.4,0v0.2c0,3-1.1,5.6-2.1,7.1c-0.5,0.7-0.4,1.6,0.2,2.2c0.3,0.3,0.8,0.5,1.3,0.5c0.3,0,0.6-0.1,0.9-0.3 | |||
c0,0,1.2-0.8,2.2-1.4c2.4-1.5,3.8-3.5,4.3-5.9v5.2c0,0.6,0.3,1.1,0.7,1.4c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1l3.4-1.1 | |||
c0,0,0.1,0,0.1,0c0.1,0.4,0.3,0.7,0.6,0.9c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1l3.4-1.1c0.5-0.2,0.9-0.5,1.1-1v0.4 | |||
c0,0.6,0.3,1.1,0.7,1.4c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1l3.4-1.1c0.7-0.2,1.2-0.9,1.2-1.7V299h0.8c1,0,1.8-0.8,1.8-1.8 | |||
c0-0.1,0-0.1,0-0.1c0.3-0.4,0.5-0.9,0.5-1.4c-0.1-0.9-0.8-1.6-1.7-1.6h-0.7c0.1-0.3,0.2-0.5,0.2-0.8v-12.8 | |||
c0.1-0.9,0.7-1.3,0.7-1.3c0.6-0.4,0.8-1.2,0.6-1.9c-0.2-0.7-0.8-1.2-1.5-1.3l-4.8-0.4c0,0-0.1,0-0.1,0c-0.1,0-0.2,0-0.3,0 | |||
C258.5,275.2,258,275,257.4,275L257.4,275z"/> | |||
</g> | |||
<g> | |||
<path fill="#FFFFFF" d="M280.9,308.7c-0.5,0-0.9-0.2-1.2-0.5c-0.9-0.9-0.4-1.8,0.4-3.4c0,0,0-0.1,0.1-0.1 | |||
c-0.3-0.1-0.8-0.3-1.1-0.9c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1v2.5c0,0.7-0.4,1.2-1.1,1.4l-3.4,1.1c-0.1,0-0.3,0.1-0.4,0.1 | |||
c-0.3,0-0.6-0.1-0.9-0.3c-0.4-0.3-0.6-0.7-0.6-1.2v-2.4c-0.8,0.7-1.6,1.3-2.6,1.8c-1.1,0.5-2.5,1.2-2.5,1.2 | |||
c-0.2,0.1-0.4,0.1-0.6,0.1c-0.5,0-0.9-0.2-1.2-0.6c-0.4-0.6-0.4-1.3,0-1.9c2.5-3,4-5.7,4.6-8.4c0-0.1,0-0.2,0.1-0.3H269 | |||
c-0.8,0-1.5-0.7-1.5-1.5c0-0.2,0-0.3-0.2-0.8c-0.3-0.5-0.2-1.1,0.2-1.6c0.3-0.4,0.7-0.6,1.2-0.6c0.1,0,0.2,0,0.3,0 | |||
c0.2,0,1.8,0.1,3.5,0.2v-1.5c-4.3,0-4.9,0-4.9-1.6c0-0.2,0-0.3-0.2-0.8c-0.3-0.5-0.2-1.2,0.2-1.6c0.3-0.4,0.7-0.6,1.2-0.6 | |||
c0.1,0,0.2,0,0.4,0c0.2,0,1.4,0.1,2.4,0.1c-0.6-1.2-1.1-2.3-1.3-2.7c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.4,0.2-0.8,0.4-1.1h-1.2 | |||
c-0.8,0-1.4-0.6-1.5-1.4c0-0.3-0.1-0.8-0.2-1c-0.3-0.5-0.2-1.1,0.1-1.5c0.3-0.4,0.7-0.6,1.2-0.6c0.1,0,0.1,0,0.2,0 | |||
c0.4,0.1,2.3,0.1,3.9,0.2v-1.8c0-0.5,0.2-0.9,0.6-1.2c0.3-0.2,0.6-0.3,0.9-0.3c0.1,0,0.2,0,0.3,0l4.3,1c0.6,0.1,1,0.6,1.1,1.1 | |||
c0.1,0.5,0,1-0.3,1.3h3c0.4-0.7,1-0.9,1.5-0.9c0.2,0,0.5,0.1,0.7,0.2c0.5,0.2,1.3,0.6,2.5,1.1c1.4-0.7,5.6-2.6,6.4-3l0.2-0.1 | |||
c0.4-0.2,0.8-0.4,1.3-0.4c1,0,1.5,0.7,1.8,0.9c0.1,0.1,2.8,3.2,3,4.2c0.2,0.7-0.2,1.5-0.9,1.8c-0.3,0.1-0.6,0.2-0.9,0.2 | |||
c-0.1,0-0.2,0-0.3,0l-0.2,0c-0.3,0-0.9,0-1.7,0.2c-3.4,0.5-4.7,0.7-7.1,1l0,3.1c1.1,0,5-0.2,6.3-0.2c0.4,0,2.6-0.3,3.1-0.4 | |||
c0.1,0,0.2,0,0.4,0c0.8,0,1.4,0.6,1.5,1.3c0.1,0.5-0.1,1-0.5,1.3c-0.1,0.2-0.2,0.5-0.3,1.1c-0.1,0.7-0.7,1.3-1.5,1.3h-2.1v15.5 | |||
c0,0.7-0.4,1.2-1,1.4l-3.4,1.1c-0.1,0-0.3,0.1-0.5,0.1c-0.3,0-0.6-0.1-0.9-0.3c-0.4-0.3-0.6-0.7-0.6-1.2v-16.6h-0.7 | |||
c-0.1,1.7-0.3,4-0.5,5.8c-0.8,5.7-2.9,9.7-6.1,12.2c-0.1,0.1-0.3,0.2-0.4,0.2C281.4,308.6,281.2,308.7,280.9,308.7z M281.2,296.6 | |||
c0.2,0.1,0.4,0.3,0.6,0.4c0-0.1,0-0.3,0.1-0.4H281.2z M282.3,292.2c0-0.5,0.1-1.1,0.1-1.6c-0.2,0.1-0.3,0.1-0.5,0.1h-2.1 | |||
c0,0.1,0,0.1,0,0.2c0,0.5-0.2,1-0.6,1.3H282.3z M282.5,286.4v-3.7c-0.8,1-1.9,2.4-3,3.7C279.5,286.4,282.5,286.4,282.5,286.4z | |||
M273.2,282c0.5,0.1,1.1,0.2,1.7,0.2c0.6,0,1.2-0.1,1.8-0.2H273.2z"/> | |||
<path fill="#FFFFFF" d="M274.3,274.5c0.1,0,0.2,0,0.3,0l4.3,1c0.5,0.1,0.8,0.5,0.9,0.9c0.1,0.5-0.1,1-0.4,1.3c0,0-0.1,0.1-0.2,0.3 | |||
h3.7c0.4-0.7,0.9-0.9,1.4-0.9c0.2,0,0.4,0,0.6,0.1c0.6,0.3,1.9,0.9,2.6,1.2c1.5-0.7,5.7-2.7,6.5-3c0.1,0,0.2-0.1,0.2-0.1 | |||
c0.3-0.2,0.7-0.4,1.2-0.4c0.8,0,1.4,0.6,1.6,0.8c0,0,2.7,3.2,3,4.1c0.2,0.6-0.2,1.2-0.7,1.5c-0.3,0.1-0.5,0.1-0.8,0.1 | |||
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.1,0-0.2,0c-0.4,0-1,0-1.8,0.2c-3.4,0.5-4.8,0.7-7.3,1l0,3.6c0.2,0,5.1-0.2,6.5-0.2 | |||
c0.4,0,2.7-0.3,3.2-0.4c0.1,0,0.2,0,0.3,0c0.6,0,1.2,0.5,1.2,1.1c0.1,0.5-0.1,0.9-0.5,1.2c-0.1,0.2-0.3,0.6-0.4,1.2 | |||
c-0.1,0.6-0.6,1-1.2,1h-2.3v15.8c0,0.5-0.4,1-0.9,1.2l-3.4,1.1c-0.1,0-0.2,0.1-0.4,0.1c-0.3,0-0.5-0.1-0.7-0.2 | |||
c-0.3-0.2-0.5-0.6-0.5-1V290h-1.2c-0.1,1.6-0.3,4.1-0.5,6c-0.8,5.6-2.8,9.6-6.1,12.1c-0.1,0.1-0.2,0.2-0.4,0.2 | |||
c-0.2,0.1-0.4,0.1-0.7,0.1c-0.4,0-0.8-0.2-1.1-0.4c-0.7-0.7-0.4-1.5,0.4-3.1c0.1-0.1,0.1-0.3,0.2-0.5c-0.3,0-0.9-0.1-1.2-0.8 | |||
c0-0.1-0.1-0.2-0.1-0.3c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.2-0.2-0.4-0.2-0.6c-0.1-0.1-0.1-0.3-0.2-0.4v4c0,0.5-0.4,1-0.9,1.2l-3.4,1.1 | |||
c-0.1,0-0.2,0.1-0.4,0.1c-0.3,0-0.5-0.1-0.7-0.2c-0.3-0.2-0.5-0.6-0.5-1v-3c-0.8,0.9-1.8,1.6-3,2.2c-1.1,0.5-2.5,1.2-2.5,1.2 | |||
c-0.2,0.1-0.4,0.1-0.5,0.1c-0.4,0-0.7-0.2-1-0.5c-0.4-0.5-0.3-1.1,0-1.6c2.5-3,4-5.8,4.7-8.5c0-0.2,0.1-0.4,0.1-0.6H269 | |||
c-0.7,0-1.3-0.6-1.3-1.3c0-0.3,0-0.5-0.3-0.9c-0.2-0.4-0.2-0.9,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5c0.1,0,0.2,0,0.2,0 | |||
c0.3,0,2.2,0.1,3.7,0.2h0.1v-2c-4.6,0-4.9,0-4.9-1.3c0-0.3,0-0.5-0.3-0.9c-0.2-0.4-0.2-1,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5 | |||
c0.1,0,0.2,0,0.3,0c0.3,0,1.9,0.1,2.9,0.1c-0.7-1.4-1.3-2.6-1.5-3c-0.1-0.2-0.1-0.3-0.1-0.5c0-0.7,0.6-1.3,1.3-1.3 | |||
c0.2,0,0.5,0,0.6,0.1c0.9,0.4,1.8,0.6,2.8,0.6c1.2,0,2.3-0.3,3.3-0.7h-9c-0.6,0-1.2-0.5-1.2-1.1c0-0.3-0.1-0.9-0.3-1.1 | |||
c-0.2-0.4-0.2-0.9,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5c0.1,0,0.1,0,0.2,0c0.4,0.1,2.5,0.1,4.2,0.2v-2.1c0-0.4,0.2-0.7,0.5-1 | |||
C273.8,274.6,274.1,274.5,274.3,274.5 M279,286.6h3.5c0.1,0,0.2,0,0.3,0v-4.7C281.9,283,280.4,284.9,279,286.6 M278.7,292.5h3.9 | |||
c0.1-0.8,0.1-1.5,0.1-2.3c-0.2,0.2-0.5,0.2-0.7,0.2h-2.5c0.1,0.1,0.1,0.3,0.1,0.5c0,0.5-0.3,1-0.7,1.2 | |||
C278.9,292.2,278.8,292.3,278.7,292.5 M282,297.4c0.1-0.4,0.1-0.7,0.2-1.1h-1.9C280.9,296.7,281.5,297,282,297.4 M274.3,274 | |||
C274.3,274,274.3,274,274.3,274c-0.4,0-0.8,0.1-1.1,0.4c-0.4,0.3-0.7,0.8-0.7,1.4v1.6c-1.6,0-3.3-0.1-3.6-0.1c-0.1,0-0.2,0-0.3,0 | |||
c-0.6,0-1.1,0.3-1.4,0.7c-0.4,0.5-0.4,1.2-0.1,1.8c0.1,0.2,0.2,0.6,0.2,0.9c0.1,0.9,0.8,1.6,1.7,1.6h0.8c-0.1,0.3-0.2,0.5-0.2,0.8 | |||
c0,0.2,0.1,0.5,0.2,0.7c0.2,0.3,0.6,1.3,1.1,2.3c-0.9,0-1.8-0.1-2-0.1c-0.1,0-0.2,0-0.4,0c-0.5,0-1,0.2-1.4,0.7 | |||
c-0.4,0.5-0.5,1.3-0.2,1.9c0.2,0.4,0.2,0.5,0.2,0.7c0,1.8,0.8,1.8,4.9,1.8v1c-1.5,0-3-0.1-3.2-0.1c-0.1,0-0.2,0-0.3,0 | |||
c-0.5,0-1.1,0.3-1.4,0.7c-0.4,0.5-0.5,1.2-0.2,1.8c0.2,0.4,0.2,0.5,0.2,0.7c0,1,0.8,1.8,1.8,1.8h0.9c-0.6,2.6-2.1,5.4-4.5,8.3 | |||
c-0.5,0.6-0.5,1.5,0,2.2c0.3,0.4,0.8,0.7,1.4,0.7c0.3,0,0.5-0.1,0.7-0.2l0.1,0l0,0c0.3-0.1,1.5-0.7,2.4-1.1 | |||
c0.9-0.4,1.6-0.9,2.3-1.5v1.8c0,0.6,0.3,1.1,0.7,1.4c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1l3.4-1.1c0.7-0.2,1.2-0.9,1.2-1.7 | |||
v-1.5c0.2,0.2,0.4,0.4,0.7,0.5c-0.8,1.6-1.3,2.6-0.3,3.5c0.4,0.4,0.9,0.6,1.4,0.6c0.3,0,0.6-0.1,0.9-0.2c0.2-0.1,0.4-0.2,0.5-0.3 | |||
c3.3-2.6,5.4-6.6,6.2-12.4c0.3-1.8,0.4-3.9,0.5-5.6h0.2v16.3c0,0.6,0.3,1.1,0.7,1.4c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1 | |||
l3.4-1.1c0.7-0.2,1.2-0.9,1.2-1.7v-15.3h1.8c0.9,0,1.6-0.6,1.7-1.5c0.1-0.5,0.2-0.8,0.3-1c0.4-0.4,0.7-1,0.6-1.5 | |||
c-0.1-0.9-0.9-1.5-1.7-1.5c-0.1,0-0.3,0-0.4,0.1c-0.5,0.1-2.7,0.4-3,0.4c-1.2,0-4.7,0.1-6,0.2l0-2.6c2.3-0.2,3.8-0.4,6.9-0.9 | |||
c0.9-0.2,1.4-0.2,1.7-0.2c0.1,0,0.1,0,0.2,0c0.1,0,0.2,0,0.3,0c0.4,0,0.7-0.1,1-0.2c0.8-0.3,1.3-1.2,1-2.1c-0.3-1-2.8-3.9-3.1-4.3 | |||
c-0.2-0.2-0.9-1-1.9-1c-0.6,0-1.1,0.2-1.4,0.4c-0.1,0-0.1,0.1-0.2,0.1c-0.8,0.3-4.8,2.2-6.3,2.9c-1.1-0.5-1.9-0.9-2.4-1.1 | |||
c-0.2-0.1-0.5-0.2-0.8-0.2c-0.7,0-1.3,0.3-1.6,0.9h-2.4c0.2-0.4,0.2-0.8,0.1-1.1c-0.2-0.7-0.7-1.2-1.3-1.3l-4.3-1 | |||
C274.6,274,274.5,274,274.3,274L274.3,274L274.3,274z M280,286.1c0.8-1,1.6-2,2.2-2.8v2.8H280L280,286.1z M280.1,291h1.8 | |||
c0.1,0,0.1,0,0.2,0c0,0.3,0,0.7-0.1,1h-2.2C280,291.7,280.1,291.3,280.1,291L280.1,291z"/> | |||
</g> | |||
<g> | |||
<path fill="#FFFFFF" d="M332.1,308.9c-0.4,0-0.8-0.2-1.1-0.5c-0.5-0.5-0.5-1.3-0.1-1.9c0.5-0.7,2.1-3.4,2.1-7v-0.4 | |||
c-0.2,0-0.7,0-0.7,0c-0.1,0-0.2,0-0.4,0c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.2,0c-0.4,0-0.8-0.2-1.1-0.4c-0.3-0.3-0.5-0.8-0.4-1.3 | |||
c0-0.1,0-0.1-0.2-0.6c-0.3-0.5-0.2-1.1,0.1-1.6c0.3-0.4,0.7-0.6,1.2-0.6c0.1,0,0.2,0,0.3,0c0.2,0,0.3,0.1,0.4,0.1 | |||
c-0.3-0.3-0.4-0.7-0.4-1.1c0,0,0.3-4.4,0.3-6.2v-2.3c0-1.4-0.2-6.8-0.2-6.9c0-0.4,0.2-0.9,0.5-1.2c0.3-0.2,0.6-0.4,1-0.4 | |||
c0.1,0,0.2,0,0.2,0c0,0,3.6,0.6,3.6,0.6c0.1-0.8,0.7-1.3,1.5-1.3h14.2c0.5,0,1.1,0.3,1.3,0.8c0,0,0.1,0,0.1,0l4.9,0.3 | |||
c0.6,0,1.2,0.5,1.4,1.1c0.2,0.6-0.1,1.3-0.6,1.6c0,0-0.6,0.5-0.7,1.4l0,12.4c0,0.5-0.2,0.9-0.6,1.2h1.3c0.7,0,1.3,0.5,1.5,1.2 | |||
c0.1,0.5-0.1,1-0.4,1.4c0,0.1,0,0.1,0,0.3c0,0.8-0.7,1.5-1.5,1.5h-1.1v6.8c0,0.7-0.4,1.2-1,1.4l-3.4,1.1c-0.1,0-0.3,0.1-0.5,0.1 | |||
c-0.3,0-0.6-0.1-0.9-0.3c-0.4-0.3-0.6-0.7-0.6-1.2v-7.8h-0.4v6.8c0,0.7-0.4,1.2-1,1.4l-3.3,1.1c-0.1,0-0.3,0.1-0.5,0.1 | |||
c-0.3,0-0.6-0.1-0.9-0.3c-0.3-0.2-0.5-0.5-0.6-0.9c0,0-0.1,0-0.1,0l-3.3,1.1c-0.1,0-0.3,0.1-0.5,0.1c-0.3,0-0.6-0.1-0.9-0.3 | |||
c-0.4-0.3-0.6-0.7-0.6-1.2v-7.8h-0.3v0.7c0,3.2-1.5,5.8-4.4,7.6c-0.9,0.5-2,1.2-2.1,1.3C332.6,308.8,332.4,308.9,332.1,308.9z"/> | |||
<path fill="#FFFFFF" d="M352.4,276.2c0.5,0,1,0.3,1.2,0.8c0.1,0,0.2,0,0.3,0c0,0,0,0,0.1,0l4.8,0.3c0.5,0,1,0.4,1.1,0.9 | |||
c0.1,0.5-0.1,1.1-0.5,1.4c0,0-0.7,0.5-0.8,1.5v12.4c0,0.7-0.6,1.3-1.3,1.3h-6.2v0.2h8.4c0.6,0,1.1,0.4,1.2,1 | |||
c0.1,0.5-0.1,0.9-0.4,1.2c0,0.1,0,0.2,0,0.4c0,0.7-0.6,1.3-1.3,1.3h-1.3v7c0,0.5-0.4,1-0.9,1.2l-3.4,1.1c-0.1,0-0.2,0.1-0.4,0.1 | |||
c-0.3,0-0.5-0.1-0.7-0.2c-0.3-0.2-0.5-0.6-0.5-1v-8.1h-0.9v7c0,0.5-0.3,1-0.9,1.2l-3.3,1.1c-0.1,0-0.3,0.1-0.4,0.1 | |||
c-0.3,0-0.5-0.1-0.7-0.2c-0.3-0.2-0.5-0.6-0.5-1v-0.1c-0.1,0.1-0.2,0.2-0.4,0.2l-3.3,1.1c-0.1,0-0.3,0.1-0.4,0.1 | |||
c-0.3,0-0.5-0.1-0.7-0.2c-0.3-0.2-0.5-0.6-0.5-1v-8.1h-0.8v1c0,3.1-1.4,5.6-4.2,7.4c-0.9,0.5-2.1,1.3-2.1,1.3 | |||
c-0.2,0.1-0.4,0.2-0.7,0.2c-0.3,0-0.7-0.1-0.9-0.4c-0.4-0.4-0.5-1.1-0.1-1.6c0.5-0.7,2.2-3.5,2.2-7.2v-0.7c-0.3,0-0.6,0-0.9,0 | |||
c-0.2,0-0.3,0-0.5,0c-0.1,0-0.2,0-0.4,0c-0.1,0-0.1,0-0.2,0c-0.3,0-0.7-0.1-0.9-0.4c-0.3-0.3-0.4-0.7-0.3-1.1c0-0.1,0-0.2-0.3-0.8 | |||
c-0.2-0.4-0.2-0.9,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5c0.1,0,0.1,0,0.2,0c0.9,0.2,1.6,0.2,3,0.2h5.7v-0.1h-7c-0.3,0-0.7-0.1-0.9-0.4 | |||
s-0.4-0.6-0.3-0.9c0,0,0.3-4.4,0.3-6.2v-2.3c0-1.4-0.2-6.8-0.2-6.9c0-0.4,0.1-0.7,0.4-1c0.2-0.2,0.5-0.3,0.8-0.3 | |||
c0.1,0,0.1,0,0.2,0l3.6,0.6c0.1,0,0.2,0,0.3,0.1v-0.1c0-0.7,0.6-1.3,1.3-1.3H352.4 M342.7,280.2h5.1V280h-5.1V280.2 M342.7,284.2 | |||
h5.1V284h-5.1V284.2 M342.7,288.2h5.1V288h-5.1V288.2 M352.4,275.7h-14.2c-0.8,0-1.5,0.5-1.7,1.2l-3.3-0.5c-0.1,0-0.2,0-0.3,0 | |||
c-0.4,0-0.8,0.2-1.2,0.4c-0.4,0.3-0.6,0.9-0.6,1.4c0,0.1,0.2,5.5,0.2,6.9v2.3c0,1.7-0.3,6.1-0.3,6.1c0,0.3,0,0.5,0.1,0.8 | |||
c-0.1,0-0.1,0-0.2,0c-0.5,0-1.1,0.3-1.4,0.7c-0.4,0.5-0.5,1.2-0.2,1.8c0.1,0.1,0.2,0.4,0.2,0.5c-0.1,0.5,0.1,1.1,0.5,1.5 | |||
c0.3,0.3,0.8,0.5,1.2,0.5c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0l0.1,0c0.1,0,0.2,0,0.4,0v0.2 | |||
c0,3.6-1.6,6.2-2.1,6.9c-0.5,0.7-0.4,1.6,0.2,2.2c0.3,0.3,0.8,0.5,1.3,0.5c0.3,0,0.6-0.1,0.9-0.3c0.2-0.1,1.3-0.8,2.1-1.3 | |||
c2.3-1.5,3.7-3.4,4.3-5.7v5c0,0.6,0.3,1.1,0.7,1.4c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1l3.1-1c0.1,0.3,0.3,0.6,0.6,0.8 | |||
c0.3,0.2,0.7,0.3,1,0.3c0.2,0,0.4,0,0.5-0.1l3.3-1.1c0.5-0.2,0.9-0.5,1.1-1v0.4c0,0.6,0.3,1.1,0.7,1.4c0.3,0.2,0.7,0.3,1,0.3 | |||
c0.2,0,0.4,0,0.5-0.1l3.4-1.1c0.7-0.2,1.2-0.9,1.2-1.7v-6.5h0.8c1,0,1.8-0.8,1.8-1.8c0-0.1,0-0.1,0-0.1c0.4-0.4,0.6-1,0.4-1.5 | |||
c-0.2-0.8-0.9-1.4-1.7-1.4h-0.7c0.2-0.3,0.3-0.6,0.3-0.9v-12.4c0.1-0.8,0.6-1.2,0.6-1.2c0.6-0.4,0.9-1.2,0.7-1.9 | |||
c-0.2-0.7-0.8-1.2-1.6-1.3l-4.8-0.3l-0.1,0C353.5,276,353,275.7,352.4,275.7L352.4,275.7z"/> | |||
</g> | |||
<g> | |||
<path fill="#FFFFFF" d="M391.4,308.6c-4.2,0-7.5-0.7-10-2c-1.2-0.7-2.2-1.6-3.1-2.6c-0.6,0.8-1.2,1.5-2,2.1 | |||
c-0.9,0.7-2.5,1.5-2.7,1.5c-0.2,0.1-0.4,0.1-0.6,0.1c-0.5,0-0.9-0.2-1.2-0.5c-0.2-0.2-0.3-0.5-0.3-0.8c-1,0.7-2.1,1-3.2,1 | |||
c-0.7,0-1.7-0.4-2-2c0-0.4-0.5-1.1-1.7-1.7c-0.5-0.3-0.8-0.8-0.8-1.3v-0.4c0-0.4,0.2-0.9,0.5-1.1c0.2-0.1,0.3-0.2,0.5-0.3 | |||
c-0.7-1.7-3.8-8.6-4.5-10.8c0,0,0-0.1-0.1-0.2c-0.2-0.6-0.1-1.3,0.4-1.7c0.3-0.3,0.7-0.4,1.1-0.4c0.3,0,0.6,0.1,0.9,0.2 | |||
c1.4,0.8,2.7,1.3,4.1,1.3c0.2,0,0.4,0,0.5,0v-2.7c-0.6,0-1.3,0-2,0c-1.5,0-1.8,0-2.3-0.5c-0.3-0.3-0.5-0.8-0.4-1.3 | |||
c0,0-0.1-0.2-0.2-0.3l-0.1-0.2c-0.3-0.5-0.2-1.1,0.1-1.6c0.3-0.4,0.7-0.6,1.2-0.6c0.1,0,0.2,0,0.2,0c0.3,0,1.8,0.1,3.3,0.2v-4.8 | |||
c0-0.5,0.2-0.9,0.6-1.2c0.3-0.2,0.6-0.3,0.9-0.3c0.1,0,0.2,0,0.3,0l4.2,1c0.5,0.1,0.9,0.5,1.1,1c0.1,0.4,0.1,0.9-0.2,1.3 | |||
c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0.1-0.2,0.3c0.2-0.1,0.4-0.2,0.7-0.2c0.1,0,0.1,0,0.2,0c0.6,0.1,4.1,0.2,5.2,0.2 | |||
c0-0.9-0.1-1.8-0.2-2.8c-0.1-0.5,0.1-0.9,0.4-1.2c0.3-0.3,0.7-0.5,1.1-0.5c0.1,0,0.1,0,0.2,0c1,0.1,5,0.5,5,0.5 | |||
c0.7,0.1,1.2,0.5,1.3,1.2c0.1,0.6-0.2,1.3-0.7,1.6c-0.1,0.1-0.4,0.4-0.5,1.2l5.7,0c0.8,0,1.5,0.7,1.5,1.5c0,0.4-0.2,0.8-0.5,1.1 | |||
c0,0,0,0.1,0,0.2c0,0.8-0.7,1.5-1.5,1.5h-5.2v0.3h5.3c0.7,0,1.3,0.5,1.4,1.1c0.2,0.6-0.1,1.3-0.6,1.7c-0.1,0.1-0.3,0.4-0.4,1v0 | |||
h1.6c0.8,0,1.5,0.7,1.5,1.5c0,0.4-0.2,0.8-0.5,1.1c0,0,0,0.1,0,0.2c0,0.8-0.7,1.5-1.5,1.5h-1v2.3c0,0.8-0.7,1.5-1.5,1.5h-4.4v0.6 | |||
h5.2c0.8,0,1.5,0.7,1.5,1.5c0,0.4-0.2,0.8-0.5,1.1c0,0,0,0.1,0,0.2c0,0.4-0.2,0.8-0.5,1.1c0.3-0.1,0.7-0.3,1.1-0.5 | |||
c0.2-0.1,0.4-0.1,0.6-0.1c0.5,0,1,0.3,1.3,0.7c0.4,0.7,0.2,1.5-0.4,2c-1.2,0.9-1.9,2.4-1.8,4.1l0,0.5 | |||
C392.9,307.9,392.2,308.6,391.4,308.6z M372.9,293.1c0.3,0.3,0.4,0.6,0.4,1v8c0.1-0.3,0.2-0.7,0.4-1c0.6-1.6,1-3.6,1.3-5.9 | |||
c-0.2-0.3-0.3-0.7-0.3-1.1c0-0.1,0-0.1-0.2-0.6c-0.2-0.5-0.2-1,0.1-1.4c-0.2-0.1-0.5-0.2-0.7-0.3L372.9,293.1z M386.3,301.8l0.7,0 | |||
c1.2-0.1,2-0.2,4.1-1c0,0-4.8,0-4.8,0V301.8z M377.5,284c0.8,0,1.9,0.1,2.5,0.1v-0.3l-2.5,0C377.5,283.9,377.5,283.9,377.5,284z" | |||
/> | |||
<path fill="#FFFFFF" d="M381.1,275.3c0,0,0.1,0,0.1,0c1,0.1,5,0.5,5,0.5c0.5,0.1,1,0.5,1.1,1c0.1,0.5-0.1,1.1-0.6,1.3 | |||
c0,0-0.6,0.4-0.6,1.7v0h6c0.7,0,1.3,0.6,1.3,1.3c0,0.4-0.2,0.7-0.5,1c0,0.1,0,0.2,0,0.3c0,0.7-0.6,1.3-1.3,1.3h-5.5v0.8h5.6 | |||
c0.6,0,1.1,0.4,1.2,0.9c0.1,0.5-0.1,1.1-0.6,1.4c0,0-0.4,0.3-0.5,1.2v0.3h1.8c0.7,0,1.3,0.6,1.3,1.3c0,0.4-0.2,0.7-0.5,1 | |||
c0,0.1,0,0.2,0,0.3c0,0.7-0.6,1.3-1.3,1.3h-1.3v2.5c0,0.7-0.6,1.3-1.3,1.3h-4.6v1.1h5.5c0.7,0,1.3,0.6,1.3,1.3 | |||
c0,0.4-0.2,0.7-0.5,1c0,0.1,0,0.2,0,0.3c0,0.7-0.6,1.3-1.3,1.3h-5v1.5l1,0c1.5-0.2,2.4-0.2,6.2-1.9c0.2-0.1,0.3-0.1,0.5-0.1 | |||
c0.4,0,0.9,0.2,1.1,0.6c0.3,0.5,0.2,1.2-0.3,1.6c-1.3,1-2,2.5-1.9,4.3l0,0.5c0,0.7-0.6,1.3-1.3,1.3c-4.1,0-7.4-0.7-9.9-2 | |||
c-1.5-0.9-2.5-1.9-3.2-2.8c-0.5,0.8-1.2,1.6-2.1,2.4c-0.9,0.7-2.5,1.4-2.7,1.5c-0.2,0.1-0.4,0.1-0.5,0.1c-0.4,0-0.7-0.2-1-0.5 | |||
c-0.3-0.3-0.3-0.8-0.2-1.1c-0.1,0.1-0.2,0.2-0.3,0.2c-1,0.7-2.1,1.1-3.2,1.1c-0.9,0-1.5-0.6-1.7-1.8c0-0.4-0.5-1.2-1.9-1.9 | |||
c-0.4-0.2-0.7-0.6-0.7-1.1v-0.4c0-0.4,0.2-0.7,0.4-1c0.2-0.2,0.5-0.3,0.8-0.3c-0.1-0.1-0.1-0.2-0.2-0.3c-0.6-1.4-3.8-8.6-4.5-10.8 | |||
c0-0.1-0.1-0.1-0.1-0.2c-0.2-0.5,0-1.1,0.3-1.4c0.2-0.2,0.6-0.4,0.9-0.4c0.2,0,0.6,0.1,0.8,0.2c1.4,0.9,2.8,1.3,4.2,1.3 | |||
c0.3,0,0.5,0,0.8,0v-3.2c-0.7,0-1.5,0-2.2,0c-1.4,0-1.7,0-2.2-0.4c-0.3-0.3-0.4-0.7-0.3-1.1c0-0.1,0-0.1-0.2-0.5l-0.1-0.2 | |||
c-0.2-0.4-0.2-0.9,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5c0.1,0,0.1,0,0.2,0c0.3,0.1,2.1,0.1,3.5,0.2v-5.1c0-0.4,0.2-0.7,0.5-1 | |||
c0.2-0.2,0.5-0.3,0.8-0.3c0.1,0,0.2,0,0.3,0l4.2,1c0.4,0.1,0.8,0.4,0.9,0.8c0.1,0.4,0.1,0.9-0.2,1.2c0,0-0.7,0.9-0.7,2v1.4h0.5 | |||
c0-0.1,0-0.2,0-0.3c0-0.1,0-0.2-0.3-0.8c-0.2-0.4-0.2-0.9,0.1-1.3c0.2-0.3,0.6-0.5,1-0.5c0,0,0.1,0,0.1,0c0.7,0.1,4.7,0.2,5.4,0.2 | |||
h0.1c0-1.1-0.1-2-0.3-3.1c0-0.4,0.1-0.8,0.3-1C380.4,275.4,380.7,275.3,381.1,275.3 M380.2,284.3v-0.8H380c0,0-1.4,0-2.8,0.1 | |||
c0,0.2,0,0.4-0.1,0.6C378.1,284.3,379.6,284.3,380.2,284.3 M373.1,286.9c0.3-0.2,0.6-0.5,0.8-0.7h-0.8V286.9 M373,303.7 | |||
c0.4-0.8,0.6-1.6,0.9-2.5c0.6-1.6,1-3.7,1.3-6c0,0,0,0,0,0c-0.2-0.3-0.3-0.6-0.3-1c0-0.1,0-0.2-0.3-0.8c-0.2-0.4-0.2-0.9,0.1-1.3 | |||
c0.1-0.1,0.1-0.2,0.2-0.2c0,0-0.1,0-0.1,0c-0.3,0-0.7-0.1-0.9-0.4c-0.1-0.1-0.1-0.1-0.1-0.2c-0.4,0.6-0.8,1.2-1.2,1.8 | |||
c0.3,0.2,0.5,0.6,0.5,1v8.4C373.1,302.9,373,303.3,373,303.7 M380,291.8l0.2,0L380,291.8c-0.1,0-0.2,0-0.3,0 | |||
C379.8,291.8,379.9,291.8,380,291.8 M380.3,296v-0.4h-0.2c-0.2,0-0.3,0-0.5,0C379.9,295.7,380.1,295.9,380.3,296 M380.3,300v-0.7 | |||
c-0.1,0.2-0.1,0.3-0.2,0.5C380.2,299.9,380.2,299.9,380.3,300 M381.1,274.8L381.1,274.8c-0.5,0-0.9,0.2-1.3,0.5 | |||
c-0.4,0.4-0.5,0.9-0.5,1.4c0.1,0.9,0.2,1.7,0.2,2.5c-1.3,0-4.4-0.1-4.9-0.2c-0.1,0-0.1,0-0.2,0c0,0-0.1,0-0.1,0l0,0 | |||
c0.2-0.4,0.3-0.9,0.1-1.4c-0.2-0.6-0.7-1-1.3-1.1l-4.2-1c-0.1,0-0.3,0-0.4,0c-0.4,0-0.8,0.1-1.1,0.4c-0.4,0.3-0.7,0.8-0.7,1.4v4.6 | |||
c-1.5,0-2.7-0.1-3-0.1c-0.1,0-0.2,0-0.3,0c-0.6,0-1.1,0.3-1.4,0.7c-0.4,0.5-0.5,1.2-0.2,1.8l0.1,0.2c0.1,0.1,0.1,0.2,0.1,0.2 | |||
c-0.1,0.5,0.1,1.1,0.5,1.5c0.6,0.6,1,0.6,2.5,0.6c0.5,0,1.1,0,1.7,0v2.2c-0.1,0-0.2,0-0.3,0c-1.3,0-2.6-0.4-4-1.2 | |||
c-0.3-0.2-0.7-0.3-1-0.3c-0.5,0-0.9,0.2-1.2,0.5c-0.5,0.5-0.7,1.3-0.4,2c0,0.1,0.1,0.1,0.1,0.2c0.7,2.1,3.5,8.5,4.4,10.5 | |||
c-0.1,0.1-0.3,0.1-0.4,0.2c-0.4,0.3-0.6,0.8-0.6,1.3v0.4c0,0.6,0.4,1.2,0.9,1.5c1.2,0.6,1.6,1.3,1.6,1.5c0.3,2,1.5,2.3,2.2,2.3 | |||
c1.1,0,2.1-0.3,3.1-0.9c0.1,0.2,0.2,0.4,0.3,0.5c0.3,0.4,0.8,0.6,1.4,0.6c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,1.8-0.9,2.7-1.6 | |||
c0.7-0.6,1.3-1.2,1.9-2c0.8,0.9,1.8,1.7,2.9,2.4c2.6,1.4,6,2,10.2,2c1,0,1.8-0.8,1.8-1.8l0-0.5c-0.1-1.6,0.6-3.1,1.7-3.9 | |||
c0.7-0.5,0.9-1.5,0.5-2.3c-0.3-0.5-0.9-0.9-1.5-0.9c-0.2,0-0.5,0-0.7,0.1c-0.1,0.1-0.2,0.1-0.3,0.1c0.1-0.2,0.1-0.4,0.1-0.6 | |||
c0,0,0,0,0,0c0.3-0.3,0.5-0.8,0.5-1.2c0-1-0.8-1.8-1.8-1.8h-5v-0.1h4.1c1,0,1.8-0.8,1.8-1.8v-2h0.8c1,0,1.8-0.8,1.8-1.8 | |||
c0,0,0,0,0,0c0.3-0.3,0.5-0.8,0.5-1.2c0-1-0.8-1.8-1.8-1.8h-1.3c0.1-0.4,0.2-0.6,0.3-0.6c0.6-0.4,0.9-1.2,0.7-1.9 | |||
c-0.2-0.6-0.6-1-1.1-1.2c0.6-0.3,1.1-0.9,1.1-1.6c0,0,0,0,0,0c0.3-0.3,0.5-0.8,0.5-1.2c0-1-0.8-1.8-1.8-1.8h-5.4 | |||
c0.1-0.5,0.3-0.7,0.3-0.8c0.6-0.4,1-1.1,0.8-1.9c-0.2-0.8-0.8-1.3-1.6-1.4c0,0-4-0.4-5-0.5C381.2,274.8,381.1,274.8,381.1,274.8 | |||
L381.1,274.8L381.1,274.8z M373.2,293.1l0.4-0.6l0.2-0.4c0.1,0.1,0.2,0.1,0.3,0.1c-0.2,0.4-0.1,1,0.1,1.4c0.1,0.1,0.2,0.4,0.2,0.5 | |||
c-0.1,0.4,0,0.8,0.3,1.2c-0.2,2-0.6,3.8-1.1,5.3v-6.5C373.6,293.8,373.5,293.4,373.2,293.1L373.2,293.1z M386.6,301h3.1 | |||
c-1.1,0.4-1.8,0.4-2.7,0.5l-0.4,0V301L386.6,301z"/> | |||
</g> | |||
<g> | |||
<path fill="#FFFFFF" d="M314.8,298.1c-2.6,0-4.7-2.1-4.7-4.7s2.1-4.7,4.7-4.7s4.7,2.1,4.7,4.7S317.3,298.1,314.8,298.1z"/> | |||
<path fill="#FFFFFF" d="M314.8,289c2.4,0,4.4,2,4.4,4.4s-2,4.4-4.4,4.4s-4.4-2-4.4-4.4S312.3,289,314.8,289 M314.8,288.5 | |||
c-2.7,0-4.9,2.2-4.9,4.9s2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9S317.5,288.5,314.8,288.5L314.8,288.5z"/> | |||
</g> | |||
</g> | |||
<g id="Layer_1_copy"> | |||
<g> | |||
<path fill="#DF0012" d="M209.8,253.2l-18.6,26.7l-6.1,0.5c-4.6,0-8.9-1.3-13-3.8l-1.2-0.3c-1.3-0.2-2,0.5-2,2l0.3,1.2l8.7,18.9 | |||
l-5.8,8.4l-0.3,0.3c-0.8,0.4-1.2,0.3-1.2-0.3l-20.3-43l0.3-0.3h0.3c11.4,6.5,23.2,7.7,35.5,3.5c7.7-2.7,15.2-7.3,22.6-13.9h0.3 | |||
c0-0.2,0.1-0.2,0.3,0L209.8,253.2"/> | |||
<path fill="#DF0012" d="M209.8,271.8l-24.6,35.3l-0.3,0.3l-0.9-0.6v0.3l-13-28.4v-0.3h0.3c12.1,6.9,24.8,4.7,38.1-6.6v-0.3 | |||
L209.8,271.8"/> | |||
</g> | |||
<g> | |||
<path fill="#3E3A39" d="M255,295.9v-2.6h7.6v-12.9c0.2-1.7,1.3-2.6,1.3-2.6l-4.8-0.4v14.5h-7.5v14.8l3.4-1.1v-8.5h3.4l0,0v9.5 | |||
l3.4-1.1v-8.5h2.5h0.1c0-1.3,0.5-1.3,0.5-1.3S255,295.9,255,295.9z M257.4,276.7H243v13.5h14.5L257.4,276.7L257.4,276.7z | |||
M254,288.9h-7.7v-2.8h7.7V288.9z M254,284.9h-7.7v-2.8h7.7V284.9z M254,280.8h-7.7V278h7.7V280.8z M241.2,291.9v-13.9l-3.7-0.7 | |||
c0,0,0.2,5.6,0.2,7.1v2.3c0,1.8-0.3,6.4-0.3,6.4h8.4v2.6c0,0-6.8,0-7,0c-1.3,0-2.1,0-3.3-0.2c0.3,0.6,0.5,1.1,0.4,1.6 | |||
c0.6-0.1,1.1,0,2.1,0h1.1c0,0,0,1.1,0,1.9c0,3.6-1.3,6.5-2.4,8.1c0,0,1.3-0.8,2.2-1.3c3.3-2.1,3.8-4.8,3.8-6.5c0-0.6,0-2.2,0-2.2 | |||
h3.3v9.5l3.4-1.1v-13.7H241.2z"/> | |||
<path fill="#DF0012" d="M282.4,299.6c-0.9-1.3-3.6-2.7-5.1-3.2v-1.3c2.7,0,5,0,5,0c0.1-0.8,0.5-1.3,0.5-1.3h-5.6v-0.3 | |||
c0.1-2,1.2-2.4,1.2-2.4l-4.5-1v2.8v0.9h-1.3c0,0-3.5-0.1-3.9-0.2c0.3,0.6,0.4,1,0.4,1.4c0,0,1.3,0,3,0c-0.1,0.6-0.2,1.3-0.4,2.1 | |||
c-1,4-3.6,7.4-4.9,9c0,0,1.4-0.7,2.5-1.2c3.1-1.5,4.2-3.8,4.8-5.8v7.7l3.4-1.1v-8.3c1,1.1,1.9,2.5,2.6,4.3 | |||
c0.1,0.4,0.3,0.8,0.4,1.2c0.1,0.2,0.2,0.2,0.4-0.1c0.5-1,1.1-1.8,1.9-2.8C282.6,300,282.5,299.8,282.4,299.6z M295.3,287.2 | |||
c-1.4,0-6.5,0.2-6.5,0.2s-0.6,0-1.3,0c0-0.8,0-1.3,0-1.8c0,0,0-4,0-4.1c3.4-0.3,4.6-0.5,8.3-1.1c2.2-0.5,2.4-0.1,2.9-0.3 | |||
c-0.1-0.4-2-2.8-2.7-3.6c-0.6-0.7-0.8-0.4-1.5,0c-0.8,0.3-7,3.3-7,3.3s-2.2-1-3.2-1.4c-0.2,0-0.2,0.1-0.3,0.3c0,0.7,0,1,0,2v4.9 | |||
v3.2c0,4.7-1,12.7-2.6,16.7c-0.5,1-0.8,1.5-0.7,1.6c0.1,0.1,0.2,0.1,0.5,0c3-2.3,4.8-6.1,5.6-11.3c0.3-2,0.5-4.9,0.6-7.1 | |||
c1.1,0,2.3,0,3.7,0v18.1l3.4-1.1v-17c2.4,0,3.6,0,3.6,0c0.2-1.2,0.7-2,0.9-2C298.4,286.8,295.8,287.2,295.3,287.2z M282.4,287.9 | |||
h-4.2c-0.4,0.5-0.8,1-1.1,1.3c2.6,0,4.8,0,4.8,0C282,288.5,282.4,287.9,282.4,287.9z M272.9,289.2c-0.2-0.4-0.4-0.9-0.7-1.3 | |||
c-0.8,0-3.3-0.1-3.7-0.2c0.3,0.6,0.4,1,0.4,1.4C269,289.2,270.7,289.2,272.9,289.2z M283.1,280.6c0.1-0.8,0.5-1.3,0.5-1.3h-5.9 | |||
c0-0.1,0,0.2,0-0.1c0-1.6,1-2.4,1-2.4l-4.3-1v3.4c-1.3,0-4.9-0.1-5.6-0.2c0.3,0.6,0.4,1.5,0.4,1.5L283.1,280.6L283.1,280.6z | |||
M274.6,289.7L274.6,289.7L274.6,289.7L274.6,289.7z M274.8,289.7C274.9,289.7,274.9,289.6,274.8,289.7c1.1-1.3,5.9-7.2,7.2-8.9 | |||
l0,0l0,0l0,0l0,0l0,0c-1.7,1.4-6,4.3-10.5,2.2l0,0h-0.1c0,0,0,0,0,0.1l0,0c0.4,0.9,2.7,5.6,3.2,6.6 | |||
C274.7,289.7,274.8,289.8,274.8,289.7z"/> | |||
</g> | |||
<g> | |||
<path fill="#3E3A39" d="M349.9,296.2v-2.6h7.4V281c0.2-1.7,1.3-2.5,1.3-2.5l-4.8-0.3v14.1h-7.4v14.5l3.3-1.1v-8.3h3.4l0,0v9.3 | |||
l3.4-1.1v-8.3h2.5h0.1c0-1.2,0.5-1.3,0.5-1.3L349.9,296.2L349.9,296.2z M352.4,277.5h-14.2v13.2h14.2V277.5z M349,289.4h-7.6v-2.7 | |||
h7.6V289.4z M349,285.5h-7.6v-2.7h7.6V285.5z M349,281.4h-7.6v-2.7h7.6V281.4z M336.4,292.3v-13.6l-3.6-0.6c0,0,0.2,5.5,0.2,6.9 | |||
v2.3c0,1.8-0.3,6.3-0.3,6.3h8.3v2.6c0,0-6.7,0-6.9,0c-1.3,0-2.1,0-3.2-0.2c0.3,0.6,0.5,1,0.4,1.5c0.6-0.1,1.1,0,2.1,0h1.1 | |||
c0,0,0,1.1,0,1.9c0,3.5-1.3,6.4-2.4,7.9c0,0,1.3-0.8,2.1-1.3c3.2-2,3.7-4.6,3.7-6.4c0-0.6,0-2.2,0-2.2h3.3v9.3l3.3-1.1v-13.5 | |||
L336.4,292.3L336.4,292.3z"/> | |||
<path fill="#DF0012" d="M366.2,300.1c0.1,0.1,0.2,0.2,0.3,0.1c0.1,0,0.1-0.1,0.1-0.1c1.2-1.7,7-10.7,8.8-13.3l0,0c0,0,0,0,0-0.1 | |||
h-0.1l0,0l0,0c-0.8,0.8-1.9,1.7-3.4,2.5V285h3.7c0.1-0.8,0.5-1.3,0.5-1.3h-4.1c0,0,0-1.6,0-2.7c0-1.6,1-2.8,1-2.8l-4.2-1v6.4 | |||
c-1.3,0-4.4-0.1-5-0.2c0.3,0.6,0.5,0.9,0.4,1.4c0.1,0.1,4.7,0,4.7,0v5.5c-2.1,0.5-4.4,0.3-6.9-1.3l0,0c0,0,0,0-0.1,0 | |||
c0,0-0.1,0.1,0,0.1l0,0C362.1,290.9,365.4,298.4,366.2,300.1L366.2,300.1z M368.6,301.9c0,0.3-0.3,0.5-0.8,0.5 | |||
c-0.5,0-1.4-0.1-2.6-0.3v0.4c1.6,0.9,2.4,1.9,2.5,2.8c0.1,0.6,0.2,0.8,0.5,0.8c0.9,0,1.7-0.3,2.5-0.9c0.8-0.5,1.2-1.3,1.2-2.7 | |||
v-8.4l-3.3,4.8V301.9L368.6,301.9z M393.8,301.3c-4.2,1.8-5.1,1.8-6.9,2h-2v-4h6.3c0-1.3,0.5-1.3,0.5-1.3h-6.7v-3.6h5.9v-3.8h2.5 | |||
c0-1.3,0.5-1.3,0.5-1.3h-3.1v-1.6c0.1-1.6,1.1-2.2,1.1-2.2h-6.8v-3.3h6.7c0-1.3,0.5-1.3,0.5-1.3h-7.2c0-0.4,0-1.2,0-1.3 | |||
c0-2.1,1.3-2.8,1.3-2.8s-4-0.4-5-0.5c0.2,1.4,0.3,2.8,0.3,4.5H380l0,0c-0.7,0-4.8-0.1-5.6-0.2c0.3,0.6,0.5,1,0.4,1.5 | |||
c0.1,0,5.2-0.1,5.2-0.1h1.4v3.3h-1.1l0,0l0,0l0,0c-0.7,0-3.6-0.1-4.3-0.2c0.3,0.6,0.5,1,0.4,1.5c0.5-0.1,3.9-0.1,3.9-0.1h1.1v2.5 | |||
H380l0,0c-0.6,0-5.5-0.2-5.6-0.2c0.3,0.6,0.5,1,0.4,1.5c0.5-0.1,5.2-0.1,5.2-0.1h1.4v2.5H380l0,0c-0.7,0-3.6-0.1-4.2-0.2 | |||
c0.3,0.6,0.5,1,0.4,1.5c0.5-0.1,3.9-0.1,3.9-0.1c0.1,0,1.4,0,1.4,0v8.3c-0.5-0.2-2-1.3-2.8-2.6c0.1-0.5,0.3-1,0.5-1.4 | |||
c0-0.2,0.7-1.3,0.7-1.3s-2.4-1.4-3.5-1.8c-0.3,2.5-0.8,4.6-1.3,6.3c-0.6,1.6-1.2,3.3-2.2,4.7c0,0,1.6-0.8,2.4-1.3 | |||
c2-1.6,2.8-3.8,2.8-3.8s1,2.3,3.9,4.1c3.3,1.7,7.5,1.8,9.3,1.8c0-0.2,0-0.3,0-0.5C391.3,304.3,392.2,302.4,393.8,301.3z | |||
M384.8,286.8h2.4v2.5h-2.4V286.8z M384.8,290.6h2.4v2.5h-2.4V290.6z"/> | |||
</g> | |||
<circle fill="#3E3A39" cx="314.8" cy="293.5" r="3.2"/> | |||
</g> | |||
</svg> |
@ -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.error(err)); |
@ -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` 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/plugins/zone-error'; // Included with Angular CLI. |
@ -0,0 +1,13 @@ | |||
<!doctype html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="utf-8"> | |||
<title>Remote</title> | |||
<base href="/"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
<link rel="icon" type="image/x-icon" href="favicon.ico"> | |||
</head> | |||
<body> | |||
<app-root></app-root> | |||
</body> | |||
</html> |
@ -0,0 +1,2 @@ | |||
import('./bootstrap') | |||
.catch(err => console.error(err)); |
@ -0,0 +1,65 @@ | |||
/** | |||
* 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 | |||
*/ | |||
/** | |||
* 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'; | |||
* | |||
* 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__UNPATCHED_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'; // Included with Angular CLI. | |||
/*************************************************************************************************** | |||
* APPLICATION IMPORTS | |||
*/ |
@ -0,0 +1,15 @@ | |||
/* You can add global styles to this file, and also import other style files */ | |||
@import "~ng-zorro-antd/style/index.min.css"; /* 引入基本样式 */ | |||
@import "~ng-zorro-antd/button/style/index.min.css"; /* 引入组件样式 */ | |||
html { | |||
overflow: hidden; | |||
background-color: #f4dcea; | |||
} | |||
.button{ | |||
height: 32px; | |||
background-color: #b60816; | |||
border: none; | |||
font-weight: 700; | |||
color: aliceblue; | |||
} |
@ -0,0 +1,27 @@ | |||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files | |||
import 'zone.js/testing'; | |||
import { getTestBed } from '@angular/core/testing'; | |||
import { | |||
BrowserDynamicTestingModule, | |||
platformBrowserDynamicTesting | |||
} from '@angular/platform-browser-dynamic/testing'; | |||
declare const require: { | |||
context(path: string, deep?: boolean, filter?: RegExp): { | |||
keys(): string[]; | |||
<T>(id: string): T; | |||
}; | |||
}; | |||
// First, initialize the Angular testing environment. | |||
getTestBed().initTestEnvironment( | |||
BrowserDynamicTestingModule, | |||
platformBrowserDynamicTesting(), | |||
{ teardown: { destroyAfterEach: true }}, | |||
); | |||
// Then we find all the tests. | |||
const context = require.context('./', true, /\.spec\.ts$/); | |||
// And load the modules. | |||
context.keys().map(context); |
@ -0,0 +1,15 @@ | |||
/* To learn more about this file see: https://angular.io/config/tsconfig. */ | |||
{ | |||
"extends": "./tsconfig.json", | |||
"compilerOptions": { | |||
"outDir": "./out-tsc/app", | |||
"types": [] | |||
}, | |||
"files": [ | |||
"src/main.ts", | |||
"src/polyfills.ts" | |||
], | |||
"include": [ | |||
"src/**/*.d.ts" | |||
] | |||
} |
@ -0,0 +1,38 @@ | |||
/* To learn more about this file see: https://angular.io/config/tsconfig. */ | |||
{ | |||
"compileOnSave": false, | |||
"compilerOptions": { | |||
"baseUrl": "./", | |||
"outDir": "./dist/out-tsc", | |||
"forceConsistentCasingInFileNames": true, | |||
"strict": true, | |||
"noImplicitReturns": true, | |||
"noFallthroughCasesInSwitch": true, | |||
"sourceMap": true, | |||
"declaration": false, | |||
"downlevelIteration": true, | |||
"experimentalDecorators": true, | |||
"moduleResolution": "node", | |||
"importHelpers": true, | |||
"target": "es2017", | |||
"module": "es2020", | |||
"paths": { | |||
"my-shared": [ | |||
"../shell/dist/my-shared" | |||
], | |||
"my-shared/*": [ | |||
"../shell/dist/my-shared/*" | |||
] | |||
}, | |||
"lib": [ | |||
"es2018", | |||
"dom" | |||
] | |||
}, | |||
"angularCompilerOptions": { | |||
"enableI18nLegacyMessageIdFormat": false, | |||
"strictInjectionParameters": true, | |||
"strictInputAccessModifiers": true, | |||
"strictTemplates": true | |||
} | |||
} |
@ -0,0 +1,18 @@ | |||
/* To learn more about this file see: https://angular.io/config/tsconfig. */ | |||
{ | |||
"extends": "./tsconfig.json", | |||
"compilerOptions": { | |||
"outDir": "./out-tsc/spec", | |||
"types": [ | |||
"jasmine" | |||
] | |||
}, | |||
"files": [ | |||
"src/test.ts", | |||
"src/polyfills.ts" | |||
], | |||
"include": [ | |||
"src/**/*.spec.ts", | |||
"src/**/*.d.ts" | |||
] | |||
} |
@ -0,0 +1,77 @@ | |||
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); | |||
const mf = require("@angular-architects/module-federation/webpack"); | |||
const path = require("path"); | |||
const share = mf.share; | |||
const sharedMappings = new mf.SharedMappings(); | |||
sharedMappings.register(path.join(__dirname, "tsconfig.json"), []); | |||
module.exports = { | |||
output: { | |||
uniqueName: "mfe1", | |||
publicPath: "http://localhost:3001/", | |||
}, | |||
optimization: { | |||
runtimeChunk: false, | |||
}, | |||
resolve: { | |||
alias: { | |||
...sharedMappings.getAliases(), | |||
}, | |||
}, | |||
plugins: [ | |||
new ModuleFederationPlugin({ | |||
name: "mfe1", | |||
filename: "remoteEntry.js", | |||
exposes: { | |||
"./Module": "./src/app/microfrontend/microfrontend.module.ts", | |||
}, | |||
shared: share({ | |||
"assets/img": { eager: true }, | |||
"@angular/core": { | |||
singleton: true, | |||
strictVersion: true, | |||
requiredVersion: "auto", | |||
}, | |||
"@angular/common": { | |||
singleton: true, | |||
strictVersion: true, | |||
requiredVersion: "auto", | |||
}, | |||
"@angular/common/http": { | |||
singleton: true, | |||
strictVersion: true, | |||
requiredVersion: "auto", | |||
}, | |||
"@angular/router": { | |||
singleton: true, | |||
strictVersion: true, | |||
requiredVersion: "auto", | |||
}, | |||
"my-shared": { | |||
singleton: true, | |||
strictVersion: true, | |||
import: "my-shared", // 对应库的npm包名或本地路径 | |||
requiredVersion: "*", // 或者具体的版本号,如"0.0.1" | |||
}, | |||
...sharedMappings.getDescriptors(), | |||
}), | |||
}), | |||
sharedMappings.getPlugin(), | |||
], | |||
module: { | |||
rules: [ | |||
{ | |||
test: /\.(png|jpg|gif)$/, | |||
use: [ | |||
{ | |||
loader: "url-loader", | |||
options: { | |||
limit: 8192, // 将小于 8kb 的图片转为 base64 | |||
}, | |||
}, | |||
], | |||
}, | |||
], | |||
}, | |||
}; |
@ -0,0 +1 @@ | |||
module.exports = require('./webpack.config'); |
@ -0,0 +1,17 @@ | |||
# 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 | |||
# For the full list of supported browsers by the Angular framework, please see: | |||
# https://angular.io/guide/browser-support | |||
# You can see what browsers were selected by your queries by running: | |||
# npx browserslist | |||
last 1 Chrome version | |||
last 1 Firefox version | |||
last 2 Edge major versions | |||
last 2 Safari major versions | |||
last 2 iOS major versions | |||
Firefox ESR | |||
not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. |
@ -0,0 +1,16 @@ | |||
# 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 | |||
[*.ts] | |||
quote_type = single | |||
[*.md] | |||
max_line_length = off | |||
trim_trailing_whitespace = false |
@ -0,0 +1,45 @@ | |||
# 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 | |||
# 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,27 @@ | |||
# Remote1 | |||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.8. | |||
## Development server | |||
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. | |||
## Code scaffolding | |||
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. | |||
## Build | |||
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. | |||
## Running unit tests | |||
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). | |||
## Running end-to-end tests | |||
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. | |||
## Further help | |||
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. |
@ -0,0 +1,123 @@ | |||
{ | |||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||
"cli": { | |||
"analytics": false | |||
}, | |||
"version": 1, | |||
"newProjectRoot": "projects", | |||
"projects": { | |||
"remote1": { | |||
"projectType": "application", | |||
"schematics": { | |||
"@schematics/angular:component": { | |||
"style": "scss" | |||
}, | |||
"@schematics/angular:application": { | |||
"strict": true | |||
} | |||
}, | |||
"root": "", | |||
"sourceRoot": "src", | |||
"prefix": "remote1", | |||
"architect": { | |||
"build": { | |||
"builder": "ngx-build-plus:browser", | |||
"options": { | |||
"outputPath": "dist/remote1", | |||
"index": "src/index.html", | |||
"main": "src/main.ts", | |||
"polyfills": "src/polyfills.ts", | |||
"tsConfig": "tsconfig.app.json", | |||
"inlineStyleLanguage": "scss", | |||
"assets": [ | |||
"src/favicon.ico", | |||
"src/assets" | |||
], | |||
"styles": [ | |||
"src/styles.scss" | |||
], | |||
"scripts": [], | |||
"extraWebpackConfig": "webpack.config.js", | |||
"commonChunk": false | |||
}, | |||
"configurations": { | |||
"production": { | |||
"budgets": [ | |||
{ | |||
"type": "initial", | |||
"maximumWarning": "500kb", | |||
"maximumError": "1mb" | |||
}, | |||
{ | |||
"type": "anyComponentStyle", | |||
"maximumWarning": "2kb", | |||
"maximumError": "4kb" | |||
} | |||
], | |||
"fileReplacements": [ | |||
{ | |||
"replace": "src/environments/environment.ts", | |||
"with": "src/environments/environment.prod.ts" | |||
} | |||
], | |||
"outputHashing": "all", | |||
"extraWebpackConfig": "webpack.prod.config.js" | |||
}, | |||
"development": { | |||
"buildOptimizer": false, | |||
"optimization": false, | |||
"vendorChunk": true, | |||
"extractLicenses": false, | |||
"sourceMap": true, | |||
"namedChunks": true | |||
} | |||
}, | |||
"defaultConfiguration": "production" | |||
}, | |||
"serve": { | |||
"builder": "ngx-build-plus:dev-server", | |||
"configurations": { | |||
"production": { | |||
"browserTarget": "remote1:build:production", | |||
"extraWebpackConfig": "webpack.prod.config.js" | |||
}, | |||
"development": { | |||
"browserTarget": "remote1:build:development" | |||
} | |||
}, | |||
"defaultConfiguration": "development", | |||
"options": { | |||
"port": 7000, | |||
"extraWebpackConfig": "webpack.config.js" | |||
} | |||
}, | |||
"extract-i18n": { | |||
"builder": "ngx-build-plus:extract-i18n", | |||
"options": { | |||
"browserTarget": "remote1:build", | |||
"extraWebpackConfig": "webpack.config.js" | |||
} | |||
}, | |||
"test": { | |||
"builder": "@angular-devkit/build-angular:karma", | |||
"options": { | |||
"main": "src/test.ts", | |||
"polyfills": "src/polyfills.ts", | |||
"tsConfig": "tsconfig.spec.json", | |||
"karmaConfig": "karma.conf.js", | |||
"inlineStyleLanguage": "scss", | |||
"assets": [ | |||
"src/favicon.ico", | |||
"src/assets" | |||
], | |||
"styles": [ | |||
"src/styles.scss" | |||
], | |||
"scripts": [] | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
"defaultProject": "remote1" | |||
} |
@ -0,0 +1,44 @@ | |||
// 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'), | |||
require('@angular-devkit/build-angular/plugins/karma') | |||
], | |||
client: { | |||
jasmine: { | |||
// you can add configuration options for Jasmine here | |||
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html | |||
// for example, you can disable the random execution with `random: false` | |||
// or set a specific seed with `seed: 4321` | |||
}, | |||
clearContext: false // leave Jasmine Spec Runner output visible in browser | |||
}, | |||
jasmineHtmlReporter: { | |||
suppressAll: true // removes the duplicated traces | |||
}, | |||
coverageReporter: { | |||
dir: require('path').join(__dirname, './coverage/remote1'), | |||
subdir: '.', | |||
reporters: [ | |||
{ type: 'html' }, | |||
{ type: 'text-summary' } | |||
] | |||
}, | |||
reporters: ['progress', 'kjhtml'], | |||
port: 9876, | |||
colors: true, | |||
logLevel: config.LOG_INFO, | |||
autoWatch: true, | |||
browsers: ['Chrome'], | |||
singleRun: false, | |||
restartOnFileChange: true | |||
}); | |||
}; |
@ -0,0 +1,43 @@ | |||
{ | |||
"name": "remote1", | |||
"version": "0.0.0", | |||
"scripts": { | |||
"ng": "ng", | |||
"start": "ng serve --port 3002 --open", | |||
"build": "ng build", | |||
"watch": "ng build --watch --configuration development", | |||
"test": "ng test", | |||
"run:all": "node node_modules/@angular-architects/module-federation/src/server/mf-dev-server.js" | |||
}, | |||
"private": true, | |||
"dependencies": { | |||
"@angular-architects/module-federation": "^12.5.3", | |||
"@angular/animations": "~12.2.0", | |||
"@angular/common": "~12.2.0", | |||
"@angular/compiler": "~12.2.0", | |||
"@angular/core": "~12.2.0", | |||
"@angular/forms": "~12.2.0", | |||
"@angular/platform-browser": "~12.2.0", | |||
"@angular/platform-browser-dynamic": "~12.2.0", | |||
"@angular/router": "~12.2.0", | |||
"my-shared": "file:../shell/dist/my-shared", | |||
"ng-zorro-antd": "^17.3.0", | |||
"rxjs": "~6.6.0", | |||
"tslib": "^2.3.0", | |||
"zone.js": "~0.11.4" | |||
}, | |||
"devDependencies": { | |||
"@angular-devkit/build-angular": "~12.2.8", | |||
"@angular/cli": "~12.2.8", | |||
"@angular/compiler-cli": "~12.2.0", | |||
"@types/jasmine": "~3.8.0", | |||
"@types/node": "^12.11.1", | |||
"jasmine-core": "~3.8.0", | |||
"karma": "~6.3.0", | |||
"karma-chrome-launcher": "~3.1.0", | |||
"karma-coverage": "~2.0.3", | |||
"karma-jasmine": "~4.0.0", | |||
"karma-jasmine-html-reporter": "~1.7.0", | |||
"typescript": "~4.3.5" | |||
} | |||
} |
@ -0,0 +1,19 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { RouterModule, Routes } from '@angular/router'; | |||
const routes: Routes = [ | |||
{ | |||
path: '', | |||
loadChildren: () => | |||
import('./microfrontend1/microfrontend1.module').then( | |||
(m) => m.Microfrontend1Module | |||
), | |||
pathMatch: 'full', | |||
}, | |||
]; | |||
@NgModule({ | |||
imports: [RouterModule.forRoot(routes)], | |||
exports: [RouterModule], | |||
}) | |||
export class AppRoutingModule {} |
@ -0,0 +1,2 @@ | |||
<router-outlet></router-outlet> |
@ -0,0 +1,35 @@ | |||
import { TestBed } from '@angular/core/testing'; | |||
import { RouterTestingModule } from '@angular/router/testing'; | |||
import { AppComponent } from './app.component'; | |||
describe('AppComponent', () => { | |||
beforeEach(async () => { | |||
await TestBed.configureTestingModule({ | |||
imports: [ | |||
RouterTestingModule | |||
], | |||
declarations: [ | |||
AppComponent | |||
], | |||
}).compileComponents(); | |||
}); | |||
it('should create the app', () => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
const app = fixture.componentInstance; | |||
expect(app).toBeTruthy(); | |||
}); | |||
it(`should have as title 'remote1'`, () => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
const app = fixture.componentInstance; | |||
expect(app.title).toEqual('remote1'); | |||
}); | |||
it('should render title', () => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
fixture.detectChanges(); | |||
const compiled = fixture.nativeElement as HTMLElement; | |||
expect(compiled.querySelector('.content span')?.textContent).toContain('remote1 app is running!'); | |||
}); | |||
}); |