├── .editorconfig ├── .gitignore ├── .vscode └── settings.json ├── README.md ├── angular.json ├── browserslist ├── deploy.js ├── e2e ├── protractor.conf.js ├── src │ ├── app.e2e-spec.ts │ └── app.po.ts └── tsconfig.e2e.json ├── package-lock.json ├── package.json ├── projects ├── client-a │ ├── browserslist │ ├── karma.conf.js │ ├── src │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── client-a-widget │ │ │ │ └── client-a-widget.component.ts │ │ │ ├── error │ │ │ │ ├── error.component.css │ │ │ │ ├── error.component.html │ │ │ │ ├── error.component.spec.ts │ │ │ │ └── error.component.ts │ │ │ ├── page1 │ │ │ │ └── page1.component.ts │ │ │ ├── page2 │ │ │ │ └── page2.component.ts │ │ │ └── sys-event.ts │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── polyfills.ts.bak │ │ ├── styles.css │ │ └── test.ts │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tslint.json │ └── webpack.externals.js └── client-b │ ├── browserslist │ ├── karma.conf.js │ ├── src │ ├── app │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── empty │ │ │ └── empty.component.ts │ │ ├── page1 │ │ │ └── page1.component.ts │ │ ├── page2 │ │ │ └── page2.component.ts │ │ └── sys-event.ts │ ├── environments │ │ ├── environment.prod.ts │ │ ├── environment.standalone.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── polyfills.ts.bak │ ├── styles.css │ └── test.ts │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tslint.json │ └── webpack.externals.js ├── src ├── app │ ├── app.component.css │ ├── app.component.html │ ├── app.component.ts │ ├── app.module.ts │ ├── empty │ │ ├── empty.component.css │ │ ├── empty.component.html │ │ ├── empty.component.spec.ts │ │ └── empty.component.ts │ ├── navbar │ │ ├── navbar.component.html │ │ └── navbar.component.ts │ ├── shell │ │ ├── advanced.shell.service.ts │ │ ├── config.ts │ │ ├── simple.shell.service.ts │ │ └── sys-event.ts │ ├── sidebar │ │ ├── sidebar.component.html │ │ └── sidebar.component.ts │ └── state.service.ts ├── assets │ ├── css │ │ ├── bootstrap.min.css │ │ ├── demo.css │ │ ├── paper-dashboard.css │ │ ├── paper-dashboard.css.map │ │ └── themify-icons.css │ ├── fonts │ │ ├── themify.eot │ │ ├── themify.svg │ │ ├── themify.ttf │ │ └── themify.woff │ ├── img │ │ ├── angular.png │ │ ├── angular2-logo-white.png │ │ ├── angular2-logo.png │ │ ├── angularjs.png │ │ ├── apple-icon.png │ │ ├── background.jpg │ │ ├── faces │ │ │ ├── face-0.jpg │ │ │ ├── face-1.jpg │ │ │ ├── face-2.jpg │ │ │ └── face-3.jpg │ │ ├── favicon.png │ │ ├── new_logo.png │ │ └── tim_80x80.png │ └── micro-frontends │ │ ├── client-a │ │ └── main.js │ │ └── client-b │ │ └── main.js ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── img │ └── logo.82b9c7a5.png ├── index.html ├── karma.conf.js ├── main.ts ├── polyfills.ts ├── styles.css ├── test.ts ├── tsconfig.app.json ├── tsconfig.spec.json └── tslint.json ├── tsconfig.json ├── tslint.json └── webpack.externals.js /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | yarn-error.log 34 | testem.log 35 | /typings 36 | 37 | # System Files 38 | .DS_Store 39 | Thumbs.db 40 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "spellright.language": "en", 3 | "spellright.documentTypes": [ 4 | "markdown", 5 | "latex", 6 | "plaintext" 7 | ] 8 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Micro Apps with Web Components and Angular Elements 2 | 3 | This example consists of three Angular projects that demonstrate how to use Web Components/ Angular Elements to implement a shell that loads micro apps: 4 | 5 | - **shell (/src):** Shell loading micro apps 6 | - **client-a (/projects/client-a)**: Demo micro app 7 | - **client-b (/projects/client-b)**: Another demo micro app 8 | 9 | ## Install Dependencies 10 | 11 | ``` 12 | npm install 13 | ``` 14 | 15 | ## Standalone 16 | 17 | For debugging and testing, you can start each of those projects individually. Please note that the shell will throw some exceptions when doing so because it does not find the micro apps that are expected in an sub folder for the sake of simplicity. 18 | 19 | Use one of the following commands for this: 20 | 21 | ``` 22 | ng serve --project shell --open 23 | ng serve --project client-a --open 24 | ng serve --project client-b --open 25 | ``` 26 | 27 | ## Everything together 28 | 29 | For using everything together, you have to build the example and run it: 30 | 31 | ``` 32 | npm run build 33 | npm start 34 | ``` 35 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular-devkit/core/src/workspace/workspace-schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "shell": { 7 | "root": "", 8 | "projectType": "application", 9 | "prefix": "app", 10 | "architect": { 11 | "build": { 12 | "builder": "ngx-build-plus:browser", 13 | "options": { 14 | "outputPath": "dist/shell", 15 | "index": "src/index.html", 16 | "main": "src/main.ts", 17 | "polyfills": "src/polyfills.ts", 18 | "tsConfig": "src/tsconfig.app.json", 19 | "assets": [ 20 | { 21 | "glob": "favicon.ico", 22 | "input": "src", 23 | "output": "/" 24 | }, 25 | { 26 | "glob": "**/*", 27 | "input": "src/assets", 28 | "output": "/assets" 29 | }, 30 | { 31 | "glob": "**/*", 32 | "input": "src/img", 33 | "output": "/img" 34 | } 35 | ], 36 | "styles": [ 37 | "src/styles.css", 38 | "src/assets/css/bootstrap.min.css", 39 | "src/assets/css/paper-dashboard.css", 40 | "src/assets/css/demo.css", 41 | "src/assets/css/themify-icons.css" 42 | ], 43 | "scripts": [ 44 | { 45 | "bundleName": "polyfill-webcomp-es5", 46 | "input": "node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js" 47 | }, 48 | { 49 | "bundleName": "polyfill-webcomp", 50 | "input": "node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js" 51 | }, 52 | "node_modules/rxjs/bundles/rxjs.umd.js", 53 | "node_modules/@angular/core/bundles/core.umd.js", 54 | "node_modules/@angular/common/bundles/common.umd.js", 55 | "node_modules/@angular/common/bundles/common-http.umd.js", 56 | "node_modules/@angular/compiler/bundles/compiler.umd.js", 57 | "node_modules/@angular/elements/bundles/elements.umd.js", 58 | "node_modules/@angular/platform-browser/bundles/platform-browser.umd.js", 59 | "node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js" 60 | ] 61 | }, 62 | "configurations": { 63 | "production": { 64 | "fileReplacements": [ 65 | { 66 | "replace": "src/environments/environment.ts", 67 | "with": "src/environments/environment.prod.ts" 68 | } 69 | ], 70 | "optimization": true, 71 | "outputHashing": "all", 72 | "sourceMap": false, 73 | "extractCss": true, 74 | "namedChunks": false, 75 | "aot": true, 76 | "extractLicenses": true, 77 | "vendorChunk": false, 78 | "buildOptimizer": true 79 | } 80 | } 81 | }, 82 | "serve": { 83 | "builder": "ngx-build-plus:dev-server", 84 | "options": { 85 | "browserTarget": "shell:build" 86 | }, 87 | "configurations": { 88 | "production": { 89 | "browserTarget": "shell:build:production" 90 | } 91 | } 92 | }, 93 | "extract-i18n": { 94 | "builder": "@angular-devkit/build-angular:extract-i18n", 95 | "options": { 96 | "browserTarget": "shell:build" 97 | } 98 | }, 99 | "test": { 100 | "builder": "ngx-build-plus:karma", 101 | "options": { 102 | "main": "src/test.ts", 103 | "polyfills": "src/polyfills.ts", 104 | "tsConfig": "src/tsconfig.spec.json", 105 | "karmaConfig": "src/karma.conf.js", 106 | "styles": [ 107 | { 108 | "input": "styles.css" 109 | } 110 | ], 111 | "scripts": [], 112 | "assets": [ 113 | { 114 | "glob": "favicon.ico", 115 | "input": "src/", 116 | "output": "/" 117 | }, 118 | { 119 | "glob": "**/*", 120 | "input": "src/assets", 121 | "output": "/assets" 122 | } 123 | ] 124 | } 125 | }, 126 | "lint": { 127 | "builder": "@angular-devkit/build-angular:tslint", 128 | "options": { 129 | "tsConfig": [ 130 | "src/tsconfig.app.json", 131 | "src/tsconfig.spec.json" 132 | ], 133 | "exclude": [ 134 | "**/node_modules/**" 135 | ] 136 | } 137 | } 138 | } 139 | }, 140 | "shell-e2e": { 141 | "root": "e2e/", 142 | "projectType": "application", 143 | "architect": { 144 | "e2e": { 145 | "builder": "@angular-devkit/build-angular:protractor", 146 | "options": { 147 | "protractorConfig": "e2e/protractor.conf.js", 148 | "devServerTarget": "shell:serve" 149 | } 150 | }, 151 | "lint": { 152 | "builder": "@angular-devkit/build-angular:tslint", 153 | "options": { 154 | "tsConfig": "e2e/tsconfig.e2e.json", 155 | "exclude": [ 156 | "**/node_modules/**" 157 | ] 158 | } 159 | } 160 | } 161 | }, 162 | "client-a": { 163 | "root": "projects/client-a/", 164 | "projectType": "application", 165 | "prefix": "app", 166 | "architect": { 167 | "build": { 168 | "builder": "ngx-build-plus:build", 169 | "options": { 170 | "outputPath": "dist/client-a", 171 | "index": "projects/client-a/src/index.html", 172 | "main": "projects/client-a/src/main.ts", 173 | "polyfills": "projects/client-a/src/polyfills.ts", 174 | "tsConfig": "projects/client-a/tsconfig.app.json", 175 | "assets": [ 176 | { 177 | "glob": "favicon.ico", 178 | "input": "projects/client-a/src", 179 | "output": "/" 180 | }, 181 | { 182 | "glob": "**/*", 183 | "input": "projects/client-a/src/assets", 184 | "output": "/assets" 185 | } 186 | ], 187 | "styles": [ 188 | "projects/client-a/src/styles.css" 189 | ], 190 | "scripts": [ 191 | "node_modules/rxjs/bundles/rxjs.umd.js", 192 | "node_modules/@angular/core/bundles/core.umd.js", 193 | "node_modules/@angular/common/bundles/common.umd.js", 194 | "node_modules/@angular/common/bundles/common-http.umd.js", 195 | "node_modules/@angular/compiler/bundles/compiler.umd.js", 196 | "node_modules/@angular/elements/bundles/elements.umd.js", 197 | "node_modules/@angular/platform-browser/bundles/platform-browser.umd.js", 198 | "node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js" 199 | ] 200 | }, 201 | "configurations": { 202 | "debug": { 203 | "fileReplacements": [ 204 | { 205 | "replace": "projects/client-a/src/environments/environment.ts", 206 | "with": "projects/client-a/src/environments/environment.standalone.ts" 207 | } 208 | ] 209 | }, 210 | "production": { 211 | "fileReplacements": [ 212 | { 213 | "replace": "projects/client-a/src/environments/environment.ts", 214 | "with": "projects/client-a/src/environments/environment.prod.ts" 215 | } 216 | ], 217 | "optimization": true, 218 | "outputHashing": "all", 219 | "sourceMap": false, 220 | "extractCss": true, 221 | "namedChunks": false, 222 | "aot": true, 223 | "extractLicenses": true, 224 | "vendorChunk": false, 225 | "buildOptimizer": true 226 | } 227 | } 228 | }, 229 | "serve": { 230 | "builder": "ngx-build-plus:dev-server", 231 | "options": { 232 | "browserTarget": "client-a:build" 233 | }, 234 | "configurations": { 235 | "production": { 236 | "browserTarget": "client-a:build:production" 237 | } 238 | } 239 | }, 240 | "extract-i18n": { 241 | "builder": "@angular-devkit/build-angular:extract-i18n", 242 | "options": { 243 | "browserTarget": "client-a:build" 244 | } 245 | }, 246 | "test": { 247 | "builder": "@angular-devkit/build-angular:karma", 248 | "options": { 249 | "main": "projects/client-a/src/test.ts", 250 | "polyfills": "projects/client-a/src/polyfills.ts", 251 | "tsConfig": "projects/client-a/tsconfig.spec.json", 252 | "karmaConfig": "projects/client-a/karma.conf.js", 253 | "styles": [ 254 | { 255 | "input": "projects/client-a/styles.css" 256 | } 257 | ], 258 | "scripts": [], 259 | "assets": [ 260 | { 261 | "glob": "favicon.ico", 262 | "input": "projects/client-a/src/", 263 | "output": "/" 264 | }, 265 | { 266 | "glob": "**/*", 267 | "input": "projects/client-a/src/assets", 268 | "output": "/assets" 269 | } 270 | ] 271 | } 272 | }, 273 | "lint": { 274 | "builder": "@angular-devkit/build-angular:tslint", 275 | "options": { 276 | "tsConfig": [ 277 | "projects/client-a/tsconfig.app.json", 278 | "projects/client-a/tsconfig.spec.json" 279 | ], 280 | "exclude": [ 281 | "**/node_modules/**" 282 | ] 283 | } 284 | } 285 | } 286 | }, 287 | "client-b": { 288 | "root": "projects/client-b/", 289 | "projectType": "application", 290 | "prefix": "app", 291 | "architect": { 292 | "build": { 293 | "builder": "ngx-build-plus:build", 294 | "options": { 295 | "outputPath": "dist/client-b", 296 | "index": "projects/client-b/src/index.html", 297 | "main": "projects/client-b/src/main.ts", 298 | "polyfills": "projects/client-b/src/polyfills.ts", 299 | "tsConfig": "projects/client-b/tsconfig.app.json", 300 | "assets": [ 301 | { 302 | "glob": "favicon.ico", 303 | "input": "projects/client-b/src", 304 | "output": "/" 305 | }, 306 | { 307 | "glob": "**/*", 308 | "input": "projects/client-b/src/assets", 309 | "output": "/assets" 310 | } 311 | ], 312 | "styles": [ 313 | "projects/client-b/src/styles.css" 314 | ], 315 | "scripts": [ 316 | "node_modules/rxjs/bundles/rxjs.umd.js", 317 | "node_modules/@angular/core/bundles/core.umd.js", 318 | "node_modules/@angular/common/bundles/common.umd.js", 319 | "node_modules/@angular/common/bundles/common-http.umd.js", 320 | "node_modules/@angular/compiler/bundles/compiler.umd.js", 321 | "node_modules/@angular/elements/bundles/elements.umd.js", 322 | "node_modules/@angular/platform-browser/bundles/platform-browser.umd.js", 323 | "node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js" 324 | ] 325 | }, 326 | "configurations": { 327 | "production": { 328 | "fileReplacements": [ 329 | { 330 | "replace": "projects/client-b/src/environments/environment.ts", 331 | "with": "projects/client-b/src/environments/environment.prod.ts" 332 | } 333 | ], 334 | "optimization": true, 335 | "outputHashing": "all", 336 | "sourceMap": false, 337 | "extractCss": true, 338 | "namedChunks": false, 339 | "aot": true, 340 | "extractLicenses": true, 341 | "vendorChunk": false, 342 | "buildOptimizer": true 343 | } 344 | } 345 | }, 346 | "serve": { 347 | "builder": "ngx-build-plus:dev-server", 348 | "options": { 349 | "browserTarget": "client-b:build" 350 | }, 351 | "configurations": { 352 | "production": { 353 | "browserTarget": "client-b:build:production" 354 | } 355 | } 356 | }, 357 | "extract-i18n": { 358 | "builder": "@angular-devkit/build-angular:extract-i18n", 359 | "options": { 360 | "browserTarget": "client-b:build" 361 | } 362 | }, 363 | "test": { 364 | "builder": "@angular-devkit/build-angular:karma", 365 | "options": { 366 | "main": "projects/client-b/src/test.ts", 367 | "polyfills": "projects/client-b/src/polyfills.ts", 368 | "tsConfig": "projects/client-b/tsconfig.spec.json", 369 | "karmaConfig": "projects/client-b/karma.conf.js", 370 | "styles": [ 371 | { 372 | "input": "projects/client-b/styles.css" 373 | } 374 | ], 375 | "scripts": [], 376 | "assets": [ 377 | { 378 | "glob": "favicon.ico", 379 | "input": "projects/client-b/src/", 380 | "output": "/" 381 | }, 382 | { 383 | "glob": "**/*", 384 | "input": "projects/client-b/src/assets", 385 | "output": "/assets" 386 | } 387 | ] 388 | } 389 | }, 390 | "lint": { 391 | "builder": "@angular-devkit/build-angular:tslint", 392 | "options": { 393 | "tsConfig": [ 394 | "projects/client-b/tsconfig.app.json", 395 | "projects/client-b/tsconfig.spec.json" 396 | ], 397 | "exclude": [ 398 | "**/node_modules/**" 399 | ] 400 | } 401 | } 402 | } 403 | }, 404 | "client-a-e2e": { 405 | "root": "projects/client-a-e2e/", 406 | "projectType": "application", 407 | "architect": { 408 | "e2e": { 409 | "builder": "@angular-devkit/build-angular:protractor", 410 | "options": { 411 | "protractorConfig": "projects/client-a-e2e/protractor.conf.js", 412 | "devServerTarget": "client-a:serve" 413 | } 414 | }, 415 | "lint": { 416 | "builder": "@angular-devkit/build-angular:tslint", 417 | "options": { 418 | "tsConfig": "projects/client-a-e2e/tsconfig.e2e.json", 419 | "exclude": [ 420 | "**/node_modules/**" 421 | ] 422 | } 423 | } 424 | } 425 | } 426 | }, 427 | "defaultProject": "shell", 428 | "schematics": { 429 | "@schematics/angular:component": { 430 | "style": "css" 431 | } 432 | } 433 | } -------------------------------------------------------------------------------- /browserslist: -------------------------------------------------------------------------------- 1 | > 0.5% 2 | last 2 versions 3 | Firefox ESR 4 | not dead 5 | IE 9-11 -------------------------------------------------------------------------------- /deploy.js: -------------------------------------------------------------------------------- 1 | const cpr = require('cpr'); 2 | 3 | cpr('dist/client-a/main.js', 'src/assets/micro-frontends/client-a/main.js', { overwrite: true }); 4 | cpr('dist/client-b/main.js', 'src/assets/micro-frontends/client-b/main.js', { overwrite: true }); 5 | 6 | -------------------------------------------------------------------------------- /e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './src/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | onPrepare() { 23 | require('ts-node').register({ 24 | project: require('path').join(__dirname, './tsconfig.e2e.json') 25 | }); 26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 27 | } 28 | }; -------------------------------------------------------------------------------- /e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('workspace-project App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('Welcome to app!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types": [ 8 | "jasmine", 9 | "jasminewd2", 10 | "node" 11 | ] 12 | } 13 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shell", 3 | "version": "0.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "ng": "ng", 7 | "start": "ng serve -o", 8 | "postinstall:bak": "ngcc", 9 | "postinstall": "ngcc", 10 | "build:client-a:externals": "ng build --extra-webpack-config projects/client-a//webpack.externals.js --prod --project client-a --single-bundle", 11 | "build:client-b:externals": "ng build --extra-webpack-config projects/client-b//webpack.externals.js --prod --project client-b --single-bundle", 12 | "build:externals": "ng build --extra-webpack-config webpack.externals.js --prod --single-bundle", 13 | "build:shell:externals": "ng build --extra-webpack-config webpack.externals.js --prod --project shell --single-bundle", 14 | "build:all": "npm run build:client-a:externals -- --output-hashing none && npm run build:client-b:externals -- --output-hashing none && node deploy.js" 15 | }, 16 | "private": true, 17 | "dependencies": { 18 | "@angular/animations": "~9.0.1", 19 | "@angular/common": "~9.0.1", 20 | "@angular/compiler": "~9.0.1", 21 | "@angular/core": "~9.0.1", 22 | "@angular/elements": "~9.0.1", 23 | "@angular/forms": "~9.0.1", 24 | "@angular/platform-browser": "~9.0.1", 25 | "@angular/platform-browser-dynamic": "~9.0.1", 26 | "@angular/router": "~9.0.1", 27 | "@webcomponents/custom-elements": "^1.1.0", 28 | "@webcomponents/webcomponentsjs": "^2.2.10", 29 | "bootstrap": "^3.3.7", 30 | "copy": "^0.3.2", 31 | "core-js": "^2.5.4", 32 | "ngx-build-plus": "^9.0.6", 33 | "rxjs": "6.5.4", 34 | "tslib": "^1.10.0", 35 | "zone.js": "~0.10.2" 36 | }, 37 | "devDependencies": { 38 | "@angular-devkit/architect": "^0.900.2", 39 | "@angular-devkit/build-angular": "~0.900.2", 40 | "@angular/cli": "^9.0.2", 41 | "@angular/compiler-cli": "~9.0.1", 42 | "@angular/language-service": "~9.0.1", 43 | "@types/jasmine": "~2.8.6", 44 | "@types/jasminewd2": "~2.0.3", 45 | "@types/node": "^12.11.1", 46 | "codelyzer": "^5.1.2", 47 | "cpr": "^3.0.1", 48 | "css-loader": "^0.28.11", 49 | "html-loader": "^0.5.5", 50 | "jasmine-core": "~2.99.1", 51 | "jasmine-spec-reporter": "~4.2.1", 52 | "karma": "~1.7.1", 53 | "karma-chrome-launcher": "~2.2.0", 54 | "karma-coverage-istanbul-reporter": "~1.4.2", 55 | "karma-jasmine": "~1.1.1", 56 | "karma-jasmine-html-reporter": "^0.2.2", 57 | "live-server": "^1.2.0", 58 | "protractor": "~5.3.0", 59 | "ts-node": "~5.0.1", 60 | "tslint": "~5.9.1", 61 | "typescript": "~3.7.5", 62 | "webpack-cli": "^2.0.14" 63 | } 64 | } -------------------------------------------------------------------------------- /projects/client-a/browserslist: -------------------------------------------------------------------------------- 1 | > 0.5% 2 | last 2 versions 3 | Firefox ESR 4 | not dead 5 | IE 9-11 -------------------------------------------------------------------------------- /projects/client-a/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, 'coverage'), 20 | reports: ['html', 'lcovonly'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false 30 | }); 31 | }; -------------------------------------------------------------------------------- /projects/client-a/src/app/app.component.css: -------------------------------------------------------------------------------- 1 | body { font-size: 14px; } -------------------------------------------------------------------------------- /projects/client-a/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, } from '@angular/core'; 2 | import { Subject } from 'rxjs'; 3 | import { SysEvent } from 'src/app/shell/sys-event'; 4 | 5 | @Component({ 6 | selector: 'client-a', 7 | template: ` 8 |
9 |
10 |
11 | Flight Search | Advanced 12 |
13 |
14 | 15 |
16 | `, 17 | styles: [`#client-a { border: darkred dashed 5px; padding: 10px }`] 18 | }) 19 | export class AppComponent implements OnInit { 20 | ngOnInit() { 21 | 22 | const serviceBus = window['_serviceBus'] as Subject; 23 | serviceBus.next({ 24 | type: 'init', 25 | args: 'client-a' 26 | }); 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /projects/client-a/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule, Injector, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import { createCustomElement } from '@angular/elements'; 6 | import { Page1Component } from './page1/page1.component'; 7 | import { Page2Component } from './page2/page2.component'; 8 | 9 | import { RouterModule } from '@angular/router'; 10 | import { ClientAWidgetComponent } from './client-a-widget/client-a-widget.component'; 11 | import { ReactiveFormsModule } from '@angular/forms'; 12 | import { ErrorComponent } from './error/error.component'; 13 | 14 | @NgModule({ 15 | imports: [ 16 | BrowserModule, 17 | RouterModule.forRoot([ 18 | { path: '', pathMatch: 'full', redirectTo: 'client-a/page1'}, 19 | { 20 | path: 'client-a', children: [ 21 | { path: 'page1', component: Page1Component }, 22 | { path: 'page2', component: Page2Component }, 23 | ] 24 | }, 25 | { path: '**', component: ErrorComponent } 26 | ], { useHash: true }), 27 | ReactiveFormsModule 28 | ], 29 | declarations: [ 30 | AppComponent, 31 | Page1Component, 32 | Page2Component, 33 | ErrorComponent, 34 | ClientAWidgetComponent 35 | ], 36 | providers: [], 37 | bootstrap: [AppComponent], 38 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 39 | entryComponents: [ 40 | ClientAWidgetComponent 41 | ] 42 | }) 43 | export class AppModule { 44 | 45 | constructor(private injector: Injector) { 46 | const widgetElement = createCustomElement(ClientAWidgetComponent, { injector: this.injector}) 47 | customElements.define('client-a-widget', widgetElement); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /projects/client-a/src/app/client-a-widget/client-a-widget.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ViewEncapsulation, OnInit } from '@angular/core'; 3 | import { FormControl } from '@angular/forms'; 4 | import { Observable } from 'rxjs'; 5 | 6 | @Component({ 7 | //selector: 'client-a-widget', 8 | template: ` 9 |
10 |
11 |
12 |

Your Flights

13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
IdFromTo
4711GrazFrankfurt
4712FrankfurtGraz
35 |
36 |
37 |
38 | 39 | 40 | `, 41 | styles: [` 42 | #widget { padding:10px; border: 2px darkred dashed } 43 | `], 44 | encapsulation: ViewEncapsulation.Emulated 45 | }) 46 | export class ClientAWidgetComponent implements OnInit { 47 | control = new FormControl(); 48 | value$: Observable; 49 | 50 | ngOnInit(): void { 51 | this.control.valueChanges.subscribe(x => console.debug(x)); 52 | this.value$ = this.control.valueChanges; 53 | } 54 | 55 | clickMe(): void { 56 | console.debug('ouch!'); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /projects/client-a/src/app/error/error.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/projects/client-a/src/app/error/error.component.css -------------------------------------------------------------------------------- /projects/client-a/src/app/error/error.component.html: -------------------------------------------------------------------------------- 1 |

2 | error works! 3 |

4 | -------------------------------------------------------------------------------- /projects/client-a/src/app/error/error.component.spec.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable:no-unused-variable */ 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | import { By } from '@angular/platform-browser'; 4 | import { DebugElement } from '@angular/core'; 5 | 6 | import { ErrorComponent } from './error.component'; 7 | 8 | describe('ErrorComponent', () => { 9 | let component: ErrorComponent; 10 | let fixture: ComponentFixture; 11 | 12 | beforeEach(async(() => { 13 | TestBed.configureTestingModule({ 14 | declarations: [ ErrorComponent ] 15 | }) 16 | .compileComponents(); 17 | })); 18 | 19 | beforeEach(() => { 20 | fixture = TestBed.createComponent(ErrorComponent); 21 | component = fixture.componentInstance; 22 | fixture.detectChanges(); 23 | }); 24 | 25 | it('should create', () => { 26 | expect(component).toBeTruthy(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /projects/client-a/src/app/error/error.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-error', 5 | templateUrl: './error.component.html', 6 | styleUrls: ['./error.component.css'] 7 | }) 8 | export class ErrorComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /projects/client-a/src/app/page1/page1.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { FormControl } from '@angular/forms'; 3 | import { Router } from '@angular/router'; 4 | 5 | @Component({ 6 | template: ` 7 |
8 | 9 |
10 |

Flight Search

11 |
12 |
13 | 14 | 15 |
16 | 17 | 18 |
19 |
20 | 21 | 22 |
23 | 24 |
25 | 27 | 28 |
29 | 30 |
31 |
32 | ` 33 | }) 34 | export class Page1Component { 35 | 36 | constructor(private router: Router) { 37 | } 38 | 39 | control = new FormControl(); 40 | 41 | search() { 42 | this.router.navigate(['.'], { queryParamsHandling: 'merge', queryParams: { id: 17 }}); 43 | } 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /projects/client-a/src/app/page2/page2.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | template: ` 5 |
6 | 7 |
8 |

Advanced Flight Search

9 |
10 |
11 | 12 | 13 |
14 | 15 | 16 |
17 |
18 | 19 | 20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 | 28 |
29 | 30 |
31 | 33 | 34 |
35 | 36 |
37 | 38 |
39 | ` 40 | }) 41 | export class Page2Component { 42 | } 43 | -------------------------------------------------------------------------------- /projects/client-a/src/app/sys-event.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface SysEvent { 3 | type: string; 4 | args: any; 5 | } -------------------------------------------------------------------------------- /projects/client-a/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | standalone: false 4 | }; 5 | -------------------------------------------------------------------------------- /projects/client-a/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false, 8 | standalone: true 9 | }; 10 | 11 | /* 12 | * In development mode, to ignore zone related error stack frames such as 13 | * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can 14 | * import the following file, but please comment it out in production mode 15 | * because it will have performance impact when throw error 16 | */ 17 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 18 | -------------------------------------------------------------------------------- /projects/client-a/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/projects/client-a/src/favicon.ico -------------------------------------------------------------------------------- /projects/client-a/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ClientA 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /projects/client-a/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | // Let the host app decide about prod mode 9 | // enableProdMode(); 10 | } 11 | 12 | platformBrowserDynamic().bootstrapModule(AppModule) 13 | .catch(err => console.log(err)); 14 | -------------------------------------------------------------------------------- /projects/client-a/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************************************** 2 | * Zone JS is required by default for Angular itself. 3 | */ 4 | import 'zone.js/dist/zone'; // Included with Angular CLI. 5 | 6 | -------------------------------------------------------------------------------- /projects/client-a/src/polyfills.ts.bak: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ 22 | import 'core-js/es6/symbol'; 23 | import 'core-js/es6/object'; 24 | import 'core-js/es6/function'; 25 | import 'core-js/es6/parse-int'; 26 | import 'core-js/es6/parse-float'; 27 | import 'core-js/es6/number'; 28 | import 'core-js/es6/math'; 29 | import 'core-js/es6/string'; 30 | import 'core-js/es6/date'; 31 | import 'core-js/es6/array'; 32 | import 'core-js/es6/regexp'; 33 | import 'core-js/es6/map'; 34 | import 'core-js/es6/weak-map'; 35 | import 'core-js/es6/set'; 36 | 37 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 38 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 39 | 40 | /** IE10 and IE11 requires the following for the Reflect API. */ 41 | import 'core-js/es6/reflect'; 42 | 43 | 44 | /** Evergreen browsers require these. **/ 45 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. 46 | import 'core-js/es7/reflect'; 47 | 48 | 49 | /** 50 | * Required to support Web Animations `@angular/platform-browser/animations`. 51 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation 52 | **/ 53 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 54 | 55 | /** 56 | * By default, zone.js will patch all possible macroTask and DomEvents 57 | * user can disable parts of macroTask/DomEvents patch by setting following flags 58 | */ 59 | 60 | // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 61 | // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 62 | // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 63 | 64 | /* 65 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 66 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 67 | */ 68 | // (window as any).__Zone_enable_cross_context_check = true; 69 | 70 | /*************************************************************************************************** 71 | * Zone JS is required by default for Angular itself. 72 | */ 73 | import 'zone.js/dist/zone'; // Included with Angular CLI. 74 | 75 | 76 | 77 | // IE 78 | import '@webcomponents/custom-elements/custom-elements.min'; 79 | 80 | 81 | -------------------------------------------------------------------------------- /projects/client-a/src/styles.css: -------------------------------------------------------------------------------- 1 | @import url('bootstrap/dist/css/bootstrap.css'); 2 | 3 | /* You can add global styles to this file, and also import other style files */ 4 | body { font-size: 14px; } 5 | 6 | -------------------------------------------------------------------------------- /projects/client-a/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: any; 11 | 12 | // First, initialize the Angular testing environment. 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting() 16 | ); 17 | // Then we find all the tests. 18 | const context = require.context('./', true, /\.spec\.ts$/); 19 | // And load the modules. 20 | context.keys().map(context); 21 | -------------------------------------------------------------------------------- /projects/client-a/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../out-tsc/app", 5 | "module": "es2015", 6 | "target": "es5", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "src/test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /projects/client-a/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "**/*.spec.ts", 16 | "**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /projects/client-a/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tslint.json", 3 | "rules": { 4 | "directive-selector": [ 5 | true, 6 | "attribute", 7 | "app", 8 | "camelCase" 9 | ], 10 | "component-selector": [ 11 | true, 12 | "element", 13 | "app", 14 | "kebab-case" 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /projects/client-a/webpack.externals.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | 3 | module.exports = { 4 | "externals": { 5 | "rxjs": "rxjs", 6 | "@angular/core": "ng.core", 7 | "@angular/common": "ng.common", 8 | "@angular/common/http": "ng.common.http", 9 | "@angular/platform-browser": "ng.platformBrowser", 10 | "@angular/platform-browser-dynamic": "ng.platformBrowserDynamic", 11 | "@angular/compiler": "ng.compiler", 12 | "@angular/elements": "ng.elements", 13 | 14 | // Uncomment and add to scripts in angular.json if needed 15 | // "@angular/router": "ng.router", 16 | // "@angular/forms": "ng.forms" 17 | } 18 | } -------------------------------------------------------------------------------- /projects/client-b/browserslist: -------------------------------------------------------------------------------- 1 | > 0.5% 2 | last 2 versions 3 | Firefox ESR 4 | not dead 5 | IE 9-11 -------------------------------------------------------------------------------- /projects/client-b/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, 'coverage'), 20 | reports: ['html', 'lcovonly'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false 30 | }); 31 | }; -------------------------------------------------------------------------------- /projects/client-b/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { ActivatedRoute } from '@angular/router'; 3 | import { Subject } from 'rxjs'; 4 | import { SysEvent } from './sys-event'; 5 | 6 | @Component({ 7 | selector: 'client-b', 8 | template: ` 9 |
10 |
11 | 14 |
15 | 16 |
17 | `, 18 | styles: [` 19 | #client-b { border: navy dashed 5px; padding: 10px } 20 | `], 21 | }) 22 | export class AppComponent { 23 | constructor(private route: ActivatedRoute) { 24 | 25 | route.queryParams.subscribe(params => { 26 | console.debug('params', params); 27 | }); 28 | 29 | const serviceBus = window['_serviceBus'] as Subject; 30 | serviceBus.next({ 31 | type: 'init', 32 | args: 'client-a' 33 | }); 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /projects/client-b/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import { Page1Component } from './page1/page1.component'; 6 | import { Page2Component } from './page2/page2.component'; 7 | 8 | import { RouterModule } from '@angular/router'; 9 | import { EmptyComponent } from './empty/empty.component'; 10 | import { ReactiveFormsModule } from '@angular/forms'; 11 | 12 | @NgModule({ 13 | imports: [ 14 | BrowserModule, 15 | RouterModule.forRoot([ 16 | { path: '', pathMatch: 'full', redirectTo: 'client-b/page1'}, 17 | { path: 'client-b', children: [ 18 | { path: 'page1', component: Page1Component }, 19 | { path: 'page2', component: Page2Component }, 20 | ]}, 21 | { path: '**', component: EmptyComponent } 22 | ], { useHash: true }), 23 | ReactiveFormsModule 24 | ], 25 | declarations: [ 26 | AppComponent, 27 | Page1Component, 28 | Page2Component, 29 | EmptyComponent 30 | ], 31 | schemas: [CUSTOM_ELEMENTS_SCHEMA], 32 | providers: [], 33 | bootstrap: [AppComponent], 34 | entryComponents: [ 35 | ] 36 | }) 37 | export class AppModule { 38 | } 39 | -------------------------------------------------------------------------------- /projects/client-b/src/app/empty/empty.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | template: '' 5 | }) 6 | export class EmptyComponent { 7 | } 8 | -------------------------------------------------------------------------------- /projects/client-b/src/app/page1/page1.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | template: ` 5 |
6 | 7 |
8 |

Passenger Search

9 |
10 |
11 | 12 | 13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 | 21 |
22 |
23 | 24 | 25 |
26 | 27 |
28 | 30 | 31 |
32 | 33 |
34 |
35 | ` 36 | }) 37 | export class Page1Component { 38 | } 39 | -------------------------------------------------------------------------------- /projects/client-b/src/app/page2/page2.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | template: ` 5 |
6 | 7 |
8 |

Details

9 |
10 |
11 | 12 |
13 |
14 | 15 |
16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 |
29 |
30 | 31 | 32 |
33 | 34 |
35 | 36 | 37 |
38 | 39 |
40 | 41 |
42 | 43 |

 

44 | 45 |
46 |
47 |
48 |
49 | ` 50 | }) 51 | export class Page2Component { 52 | } 53 | -------------------------------------------------------------------------------- /projects/client-b/src/app/sys-event.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface SysEvent { 3 | type: string; 4 | args: any; 5 | } -------------------------------------------------------------------------------- /projects/client-b/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | standalone: false 4 | }; 5 | -------------------------------------------------------------------------------- /projects/client-b/src/environments/environment.standalone.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false, 8 | standalone: true 9 | }; 10 | 11 | /* 12 | * In development mode, to ignore zone related error stack frames such as 13 | * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can 14 | * import the following file, but please comment it out in production mode 15 | * because it will have performance impact when throw error 16 | */ 17 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 18 | -------------------------------------------------------------------------------- /projects/client-b/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false, 8 | standalone: true 9 | }; 10 | 11 | /* 12 | * In development mode, to ignore zone related error stack frames such as 13 | * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can 14 | * import the following file, but please comment it out in production mode 15 | * because it will have performance impact when throw error 16 | */ 17 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 18 | -------------------------------------------------------------------------------- /projects/client-b/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/projects/client-b/src/favicon.ico -------------------------------------------------------------------------------- /projects/client-b/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ClientB 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /projects/client-b/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | // Let the host app decide about prod mode 9 | // enableProdMode(); 10 | } 11 | 12 | platformBrowserDynamic().bootstrapModule(AppModule) 13 | .catch(err => console.log(err)); 14 | -------------------------------------------------------------------------------- /projects/client-b/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************************************** 2 | * Zone JS is required by default for Angular itself. 3 | */ 4 | import 'zone.js/dist/zone'; // Included with Angular CLI. 5 | 6 | -------------------------------------------------------------------------------- /projects/client-b/src/polyfills.ts.bak: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ 22 | import 'core-js/es6/symbol'; 23 | import 'core-js/es6/object'; 24 | import 'core-js/es6/function'; 25 | import 'core-js/es6/parse-int'; 26 | import 'core-js/es6/parse-float'; 27 | import 'core-js/es6/number'; 28 | import 'core-js/es6/math'; 29 | import 'core-js/es6/string'; 30 | import 'core-js/es6/date'; 31 | import 'core-js/es6/array'; 32 | import 'core-js/es6/regexp'; 33 | import 'core-js/es6/map'; 34 | import 'core-js/es6/weak-map'; 35 | import 'core-js/es6/set'; 36 | 37 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 38 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 39 | 40 | /** IE10 and IE11 requires the following for the Reflect API. */ 41 | import 'core-js/es6/reflect'; 42 | 43 | 44 | /** Evergreen browsers require these. **/ 45 | // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. 46 | import 'core-js/es7/reflect'; 47 | 48 | 49 | /** 50 | * Required to support Web Animations `@angular/platform-browser/animations`. 51 | * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation 52 | **/ 53 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 54 | 55 | /** 56 | * By default, zone.js will patch all possible macroTask and DomEvents 57 | * user can disable parts of macroTask/DomEvents patch by setting following flags 58 | */ 59 | 60 | // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 61 | // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 62 | // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 63 | 64 | /* 65 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 66 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 67 | */ 68 | // (window as any).__Zone_enable_cross_context_check = true; 69 | 70 | /*************************************************************************************************** 71 | * Zone JS is required by default for Angular itself. 72 | */ 73 | import 'zone.js/dist/zone'; // Included with Angular CLI. 74 | 75 | 76 | 77 | // IE 78 | //import '@webcomponents/custom-elements/custom-elements.min'; 79 | 80 | 81 | -------------------------------------------------------------------------------- /projects/client-b/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @import url('bootstrap/dist/css/bootstrap.css'); -------------------------------------------------------------------------------- /projects/client-b/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: any; 11 | 12 | // First, initialize the Angular testing environment. 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting() 16 | ); 17 | // Then we find all the tests. 18 | const context = require.context('./', true, /\.spec\.ts$/); 19 | // And load the modules. 20 | context.keys().map(context); 21 | -------------------------------------------------------------------------------- /projects/client-b/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../out-tsc/app", 5 | "module": "es2015", 6 | "target": "es5", 7 | "types": [] 8 | }, 9 | "exclude": [ 10 | "src/test.ts", 11 | "**/*.spec.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /projects/client-b/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "**/*.spec.ts", 16 | "**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /projects/client-b/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tslint.json", 3 | "rules": { 4 | "directive-selector": [ 5 | true, 6 | "attribute", 7 | "app", 8 | "camelCase" 9 | ], 10 | "component-selector": [ 11 | true, 12 | "element", 13 | "app", 14 | "kebab-case" 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /projects/client-b/webpack.externals.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | 3 | module.exports = { 4 | "externals": { 5 | "rxjs": "rxjs", 6 | "@angular/core": "ng.core", 7 | "@angular/common": "ng.common", 8 | "@angular/common/http": "ng.common.http", 9 | "@angular/platform-browser": "ng.platformBrowser", 10 | "@angular/platform-browser-dynamic": "ng.platformBrowserDynamic", 11 | "@angular/compiler": "ng.compiler", 12 | "@angular/elements": "ng.elements", 13 | 14 | // Uncomment and add to scripts in angular.json if needed 15 | // "@angular/router": "ng.router", 16 | // "@angular/forms": "ng.forms" 17 | } 18 | } -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- 1 | #nav { 2 | color: black; 3 | font-family: Arial, Helvetica, sans-serif; 4 | border-bottom: 1px black solid; 5 | margin-bottom: 20px; 6 | } 7 | 8 | a, a:visited, a:active { 9 | color: black; 10 | text-decoration: none; 11 | } 12 | 13 | a:hover { 14 | color: black; 15 | text-decoration: underline; 16 | } -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 | 7 |
8 | 9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { SimpleShellService } from './shell/simple.shell.service'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | templateUrl: './app.component.html', 7 | styleUrls: ['./app.component.css'] 8 | }) 9 | export class AppComponent { 10 | 11 | constructor(private shellService: SimpleShellService) { 12 | } 13 | 14 | ngOnInit() { 15 | this.shellService.init(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NavbarComponent } from './navbar/navbar.component'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 4 | 5 | import { AppComponent } from './app.component'; 6 | import { SidebarComponent } from './sidebar/sidebar.component'; 7 | import { RouterModule } from '@angular/router'; 8 | import { EmptyComponent } from './empty/empty.component'; 9 | 10 | @NgModule({ 11 | declarations: [ 12 | AppComponent, 13 | SidebarComponent, 14 | NavbarComponent, 15 | EmptyComponent 16 | ], 17 | imports: [ 18 | BrowserModule, 19 | // RouterModule.forRoot([ 20 | // { path: '', pathMatch: 'full', redirectTo: 'home'}, 21 | // { 22 | // path: '**', 23 | // component: EmptyComponent 24 | // } 25 | // ], { useHash: true }) 26 | ], 27 | schemas: [ 28 | CUSTOM_ELEMENTS_SCHEMA 29 | ], 30 | providers: [], 31 | bootstrap: [ 32 | AppComponent 33 | ] 34 | }) 35 | export class AppModule { } 36 | -------------------------------------------------------------------------------- /src/app/empty/empty.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/app/empty/empty.component.css -------------------------------------------------------------------------------- /src/app/empty/empty.component.html: -------------------------------------------------------------------------------- 1 |

2 | empty works! 3 |

4 | -------------------------------------------------------------------------------- /src/app/empty/empty.component.spec.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable:no-unused-variable */ 2 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 3 | import { By } from '@angular/platform-browser'; 4 | import { DebugElement } from '@angular/core'; 5 | 6 | import { EmptyComponent } from './empty.component'; 7 | 8 | describe('EmptyComponent', () => { 9 | let component: EmptyComponent; 10 | let fixture: ComponentFixture; 11 | 12 | beforeEach(async(() => { 13 | TestBed.configureTestingModule({ 14 | declarations: [ EmptyComponent ] 15 | }) 16 | .compileComponents(); 17 | })); 18 | 19 | beforeEach(() => { 20 | fixture = TestBed.createComponent(EmptyComponent); 21 | component = fixture.componentInstance; 22 | fixture.detectChanges(); 23 | }); 24 | 25 | it('should create', () => { 26 | expect(component).toBeTruthy(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /src/app/empty/empty.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-empty', 5 | templateUrl: './empty.component.html', 6 | styleUrls: ['./empty.component.css'] 7 | }) 8 | export class EmptyComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/navbar/navbar.component.html: -------------------------------------------------------------------------------- 1 | 46 | -------------------------------------------------------------------------------- /src/app/navbar/navbar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ViewChild, ElementRef, Renderer2 } from '@angular/core'; 2 | import { Router, ActivatedRoute } from '@angular/router'; 3 | import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; 4 | 5 | @Component({ 6 | selector: 'navbar-cmp', 7 | templateUrl: 'navbar.component.html' 8 | }) 9 | export class NavbarComponent { 10 | 11 | private sidebarVisible: boolean = false; 12 | 13 | sidebarToggle(){ 14 | var body = document.getElementsByTagName('body')[0]; 15 | 16 | if(this.sidebarVisible == false){ 17 | body.classList.add('nav-open'); 18 | this.sidebarVisible = true; 19 | } else { 20 | this.sidebarVisible = false; 21 | body.classList.remove('nav-open'); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/shell/advanced.shell.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { ClientConfigs, ShellConfig } from './config'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class AdvancedShellService { 8 | 9 | constructor() { } 10 | 11 | private config: ShellConfig; 12 | 13 | init(config: ShellConfig) { 14 | this.config = config; 15 | if (!location.hash && config.initialRoute) { 16 | location.hash = config.initialRoute; 17 | } 18 | window.addEventListener("hashchange", () => this.urlChanged()); 19 | setTimeout(() => this.urlChanged(), 0); 20 | if (config.preload) { 21 | this.preloadClients(); 22 | } 23 | } 24 | 25 | urlChanged() { 26 | 27 | // 28 | // This assumes we are using hash-based routing (e. g. url#/client-a). 29 | // For using path-based routing (e. g. url/client-a) we need another 30 | // Strategy, b/c there is no event called when such an URL changes 31 | // Hence, we need to use cross-frontend-communication (messaging) 32 | // to denote we want to change the URL. 33 | // 34 | 35 | for (const client in this.config.clients) { 36 | const entry = this.config.clients[client]; 37 | const route = '#' + entry.route; 38 | if (location.hash.startsWith(route)) { 39 | // Lazy load module if still not loaded 40 | if (!entry.loaded) { 41 | this.load(client); 42 | } 43 | else { 44 | this.showClient(client); 45 | } 46 | } 47 | else if (entry.loaded) { 48 | this.hideClient(client); 49 | } 50 | } 51 | } 52 | 53 | showClient(clientName: string) { 54 | this.setClientVisibility(clientName, true); 55 | } 56 | 57 | hideClient(clientName: string) { 58 | this.setClientVisibility(clientName, false); 59 | } 60 | 61 | setClientVisibility(clientName: string, show: boolean) { 62 | const entry = this.config.clients[clientName]; 63 | 64 | if (!entry) { 65 | throw new Error(`Client ${clientName} is not configured.`); 66 | } 67 | 68 | const elms = document.getElementsByTagName(entry.element); 69 | 70 | if (elms.length === 0) { 71 | throw new Error(`Client ${clientName} is not loaded.`); 72 | } 73 | 74 | if (elms.length > 1) { 75 | throw new Error(`Client ${clientName} is loaded several times.`); 76 | } 77 | 78 | const elm = elms[0]; 79 | elm['hidden'] = !show; 80 | } 81 | 82 | load(name: string): void { 83 | 84 | const configItem = this.config.clients[name]; 85 | 86 | // Don't load bundle twice 87 | if (configItem.loaded) return; 88 | configItem.loaded = true; 89 | 90 | const content = document.getElementById(this.config.outletId || 'content'); 91 | 92 | // Add tag for micro frontend, e. g. 93 | const element = document.createElement(configItem.element); 94 | element['hidden'] = !location.hash.startsWith('#' + configItem.route); 95 | content.appendChild(element); 96 | 97 | // Add script-tag(s) to load bundle 98 | const files = typeof configItem.src === 'string' ? [configItem.src] : configItem.src; 99 | 100 | files.forEach(src => { 101 | const script = document.createElement('script'); 102 | script.src = src; 103 | content.appendChild(script); 104 | }); 105 | 106 | } 107 | 108 | preloadClients() { 109 | for (const client in this.config.clients) { 110 | this.load(client); 111 | } 112 | } 113 | 114 | navigate(url: string) { 115 | const pos = location.hash.indexOf('?'); 116 | const query = pos !== -1? location.hash.substr(pos): ''; 117 | location.hash = url + query; 118 | } 119 | 120 | 121 | } 122 | -------------------------------------------------------------------------------- /src/app/shell/config.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface ClientConfig { 3 | loaded: boolean; 4 | src: string | string[]; 5 | element: string; 6 | route: string; 7 | } 8 | 9 | export interface ClientConfigs { 10 | [name: string]: ClientConfig 11 | } 12 | 13 | export interface ShellConfig { 14 | outletId?: string; 15 | initialRoute: string; 16 | preload: boolean; 17 | clients: ClientConfigs; 18 | } -------------------------------------------------------------------------------- /src/app/shell/simple.shell.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Subject } from 'rxjs'; 3 | import { SysEvent } from './sys-event'; 4 | 5 | @Injectable({providedIn: 'root'}) 6 | export class SimpleShellService { 7 | 8 | frontends: { [name: string]: HTMLElement } = {}; 9 | 10 | serviceBus = new Subject(); 11 | 12 | init() { 13 | this._navigate(location.hash.substr(1)); 14 | 15 | this.serviceBus.subscribe(msg => { 16 | console.debug('msg', msg); 17 | }) 18 | 19 | window['_serviceBus'] = this.serviceBus; 20 | 21 | this.load('client-a'); 22 | this.load('client-b'); 23 | } 24 | 25 | load(clientName: string) { 26 | if (this.frontends[clientName]) return; 27 | 28 | const outlet = document.getElementById('content'); 29 | const bundle = `assets/micro-frontends/${clientName}/main.js`; 30 | 31 | const script = document.createElement('script') as HTMLScriptElement; 32 | script.src = bundle; 33 | document.body.appendChild(script); 34 | 35 | const rootElm = document.createElement(clientName); 36 | rootElm.hidden = true; 37 | outlet.appendChild(rootElm); 38 | 39 | this.frontends[clientName] = rootElm; 40 | } 41 | 42 | _navigate(path: string) { 43 | const segments = path.split('/'); 44 | const clientName = segments.length >= 2 ? segments[1] : ''; 45 | this.navigate(clientName, path); 46 | } 47 | 48 | navigate(clientName: string, path: string) { 49 | 50 | if (!this.frontends[clientName]) { 51 | this.load(clientName); 52 | } 53 | 54 | for (const fe of Object.getOwnPropertyNames(this.frontends)) { 55 | const rootElm = this.frontends[fe]; 56 | rootElm.hidden = true; 57 | } 58 | 59 | this.frontends[clientName].hidden = false; 60 | 61 | location.hash = path; 62 | 63 | } 64 | 65 | } -------------------------------------------------------------------------------- /src/app/shell/sys-event.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface SysEvent { 3 | type: string; 4 | args: any; 5 | } -------------------------------------------------------------------------------- /src/app/sidebar/sidebar.component.html: -------------------------------------------------------------------------------- 1 | 2 | 64 | -------------------------------------------------------------------------------- /src/app/sidebar/sidebar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { SimpleShellService } from '../shell/simple.shell.service'; 3 | 4 | 5 | @Component({ 6 | selector: 'sidebar-cmp', 7 | templateUrl: 'sidebar.component.html', 8 | }) 9 | export class SidebarComponent { 10 | constructor(private shellService: SimpleShellService) { 11 | } 12 | 13 | navigate(clientName: string, path: string) { 14 | this.shellService.navigate(clientName, path); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/app/state.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { Subject } from 'rxjs'; 3 | 4 | @Injectable({ providedIn: 'root' }) 5 | export class StateService { 6 | 7 | constructor() { } 8 | 9 | private state$ = new Subject(); 10 | private clients: HTMLElement[] = []; 11 | 12 | public registerClient(client: HTMLElement) { 13 | this.clients.push(client); 14 | } 15 | 16 | public setState(state: string) { 17 | for(let client of this.clients) { 18 | client.setAttribute('state', state); 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/assets/css/demo.css: -------------------------------------------------------------------------------- 1 | @media (min-width: 992px){ 2 | .typo-line{ 3 | padding-left: 140px; 4 | margin-bottom: 40px; 5 | position: relative; 6 | } 7 | 8 | .typo-line .category{ 9 | transform: translateY(-50%); 10 | top: 50%; 11 | left: 0px; 12 | position: absolute; 13 | } 14 | } 15 | 16 | .icon-section { 17 | margin: 0 0 3em; 18 | clear: both; 19 | overflow: hidden; 20 | } 21 | .icon-container { 22 | width: 240px; 23 | padding: .7em 0; 24 | float: left; 25 | position: relative; 26 | text-align: left; 27 | } 28 | .icon-container [class^="ti-"], 29 | .icon-container [class*=" ti-"] { 30 | color: #000; 31 | position: absolute; 32 | margin-top: 3px; 33 | transition: .3s; 34 | font-size: 1.2em; 35 | } 36 | .icon-container:hover [class^="ti-"], 37 | .icon-container:hover [class*=" ti-"] { 38 | font-size: 2.2em; 39 | margin-top: -5px; 40 | } 41 | .icon-container:hover .icon-name { 42 | color: #000; 43 | } 44 | .icon-name { 45 | color: #aaa; 46 | margin-left: 35px; 47 | font-size: .8em; 48 | transition: .3s; 49 | } 50 | .icon-container:hover .icon-name { 51 | margin-left: 45px; 52 | } 53 | 54 | .places-buttons .btn{ 55 | margin-bottom: 30px 56 | } 57 | .sidebar .nav > li.active-pro{ 58 | position: absolute; 59 | width: 100%; 60 | bottom: 10px; 61 | } 62 | .sidebar .nav > li.active-pro a{ 63 | background: rgba(255, 255, 255, 0.14); 64 | opacity: 1; 65 | color: #FFFFFF; 66 | } 67 | 68 | .table-upgrade td:nth-child(2), 69 | .table-upgrade td:nth-child(3){ 70 | text-align: center; 71 | } 72 | -------------------------------------------------------------------------------- /src/assets/css/paper-dashboard.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "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", 4 | "sources": ["../sass/paper/mixins/_chartist.scss","../sass/paper/mixins/_fixed-plugin.scss","../sass/paper/_typography.scss","../sass/paper/_variables.scss","../sass/paper/_misc.scss","../sass/paper/mixins/_vendor-prefixes.scss","../sass/paper/_sidebar-and-main-panel.scss","../sass/paper/mixins/_sidebar.scss","../sass/paper/_buttons.scss","../sass/paper/mixins/_buttons.scss","../sass/paper/mixins/_transparency.scss","../sass/paper/_inputs.scss","../sass/paper/mixins/_inputs.scss","../sass/paper/_alerts.scss","../sass/paper/_tables.scss","../sass/paper/_checkbox-radio.scss","../sass/paper/_navbars.scss","../sass/paper/mixins/_navbars.scss","../sass/paper/_footers.scss","../sass/paper/_dropdown.scss","../sass/paper/_cards.scss","../sass/paper/_chartist.scss","../sass/paper/_responsive.scss"], 5 | "names": [], 6 | "file": "paper-dashboard.css" 7 | } 8 | -------------------------------------------------------------------------------- /src/assets/css/themify-icons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'themify'; 3 | src:url('../fonts/themify.eot?-fvbane'); 4 | src:url('../fonts/themify.eot?#iefix-fvbane') format('embedded-opentype'), 5 | url('../fonts/themify.woff?-fvbane') format('woff'), 6 | url('../fonts/themify.ttf?-fvbane') format('truetype'), 7 | url('../fonts/themify.svg?-fvbane#themify') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | [class^="ti-"], [class*=" ti-"] { 13 | font-family: 'themify'; 14 | speak: none; 15 | font-style: normal; 16 | font-weight: bold; 17 | font-variant: normal; 18 | text-transform: none; 19 | line-height: 1.42857; 20 | 21 | /* Better Font Rendering =========== */ 22 | -webkit-font-smoothing: antialiased; 23 | -moz-osx-font-smoothing: grayscale; 24 | } 25 | 26 | .ti-wand:before { 27 | content: "\e600"; 28 | } 29 | .ti-volume:before { 30 | content: "\e601"; 31 | } 32 | .ti-user:before { 33 | content: "\e602"; 34 | } 35 | .ti-unlock:before { 36 | content: "\e603"; 37 | } 38 | .ti-unlink:before { 39 | content: "\e604"; 40 | } 41 | .ti-trash:before { 42 | content: "\e605"; 43 | } 44 | .ti-thought:before { 45 | content: "\e606"; 46 | } 47 | .ti-target:before { 48 | content: "\e607"; 49 | } 50 | .ti-tag:before { 51 | content: "\e608"; 52 | } 53 | .ti-tablet:before { 54 | content: "\e609"; 55 | } 56 | .ti-star:before { 57 | content: "\e60a"; 58 | } 59 | .ti-spray:before { 60 | content: "\e60b"; 61 | } 62 | .ti-signal:before { 63 | content: "\e60c"; 64 | } 65 | .ti-shopping-cart:before { 66 | content: "\e60d"; 67 | } 68 | .ti-shopping-cart-full:before { 69 | content: "\e60e"; 70 | } 71 | .ti-settings:before { 72 | content: "\e60f"; 73 | } 74 | .ti-search:before { 75 | content: "\e610"; 76 | } 77 | .ti-zoom-in:before { 78 | content: "\e611"; 79 | } 80 | .ti-zoom-out:before { 81 | content: "\e612"; 82 | } 83 | .ti-cut:before { 84 | content: "\e613"; 85 | } 86 | .ti-ruler:before { 87 | content: "\e614"; 88 | } 89 | .ti-ruler-pencil:before { 90 | content: "\e615"; 91 | } 92 | .ti-ruler-alt:before { 93 | content: "\e616"; 94 | } 95 | .ti-bookmark:before { 96 | content: "\e617"; 97 | } 98 | .ti-bookmark-alt:before { 99 | content: "\e618"; 100 | } 101 | .ti-reload:before { 102 | content: "\e619"; 103 | } 104 | .ti-plus:before { 105 | content: "\e61a"; 106 | } 107 | .ti-pin:before { 108 | content: "\e61b"; 109 | } 110 | .ti-pencil:before { 111 | content: "\e61c"; 112 | } 113 | .ti-pencil-alt:before { 114 | content: "\e61d"; 115 | } 116 | .ti-paint-roller:before { 117 | content: "\e61e"; 118 | } 119 | .ti-paint-bucket:before { 120 | content: "\e61f"; 121 | } 122 | .ti-na:before { 123 | content: "\e620"; 124 | } 125 | .ti-mobile:before { 126 | content: "\e621"; 127 | } 128 | .ti-minus:before { 129 | content: "\e622"; 130 | } 131 | .ti-medall:before { 132 | content: "\e623"; 133 | } 134 | .ti-medall-alt:before { 135 | content: "\e624"; 136 | } 137 | .ti-marker:before { 138 | content: "\e625"; 139 | } 140 | .ti-marker-alt:before { 141 | content: "\e626"; 142 | } 143 | .ti-arrow-up:before { 144 | content: "\e627"; 145 | } 146 | .ti-arrow-right:before { 147 | content: "\e628"; 148 | } 149 | .ti-arrow-left:before { 150 | content: "\e629"; 151 | } 152 | .ti-arrow-down:before { 153 | content: "\e62a"; 154 | } 155 | .ti-lock:before { 156 | content: "\e62b"; 157 | } 158 | .ti-location-arrow:before { 159 | content: "\e62c"; 160 | } 161 | .ti-link:before { 162 | content: "\e62d"; 163 | } 164 | .ti-layout:before { 165 | content: "\e62e"; 166 | } 167 | .ti-layers:before { 168 | content: "\e62f"; 169 | } 170 | .ti-layers-alt:before { 171 | content: "\e630"; 172 | } 173 | .ti-key:before { 174 | content: "\e631"; 175 | } 176 | .ti-import:before { 177 | content: "\e632"; 178 | } 179 | .ti-image:before { 180 | content: "\e633"; 181 | } 182 | .ti-heart:before { 183 | content: "\e634"; 184 | } 185 | .ti-heart-broken:before { 186 | content: "\e635"; 187 | } 188 | .ti-hand-stop:before { 189 | content: "\e636"; 190 | } 191 | .ti-hand-open:before { 192 | content: "\e637"; 193 | } 194 | .ti-hand-drag:before { 195 | content: "\e638"; 196 | } 197 | .ti-folder:before { 198 | content: "\e639"; 199 | } 200 | .ti-flag:before { 201 | content: "\e63a"; 202 | } 203 | .ti-flag-alt:before { 204 | content: "\e63b"; 205 | } 206 | .ti-flag-alt-2:before { 207 | content: "\e63c"; 208 | } 209 | .ti-eye:before { 210 | content: "\e63d"; 211 | } 212 | .ti-export:before { 213 | content: "\e63e"; 214 | } 215 | .ti-exchange-vertical:before { 216 | content: "\e63f"; 217 | } 218 | .ti-desktop:before { 219 | content: "\e640"; 220 | } 221 | .ti-cup:before { 222 | content: "\e641"; 223 | } 224 | .ti-crown:before { 225 | content: "\e642"; 226 | } 227 | .ti-comments:before { 228 | content: "\e643"; 229 | } 230 | .ti-comment:before { 231 | content: "\e644"; 232 | } 233 | .ti-comment-alt:before { 234 | content: "\e645"; 235 | } 236 | .ti-close:before { 237 | content: "\e646"; 238 | } 239 | .ti-clip:before { 240 | content: "\e647"; 241 | } 242 | .ti-angle-up:before { 243 | content: "\e648"; 244 | } 245 | .ti-angle-right:before { 246 | content: "\e649"; 247 | } 248 | .ti-angle-left:before { 249 | content: "\e64a"; 250 | } 251 | .ti-angle-down:before { 252 | content: "\e64b"; 253 | } 254 | .ti-check:before { 255 | content: "\e64c"; 256 | } 257 | .ti-check-box:before { 258 | content: "\e64d"; 259 | } 260 | .ti-camera:before { 261 | content: "\e64e"; 262 | } 263 | .ti-announcement:before { 264 | content: "\e64f"; 265 | } 266 | .ti-brush:before { 267 | content: "\e650"; 268 | } 269 | .ti-briefcase:before { 270 | content: "\e651"; 271 | } 272 | .ti-bolt:before { 273 | content: "\e652"; 274 | } 275 | .ti-bolt-alt:before { 276 | content: "\e653"; 277 | } 278 | .ti-blackboard:before { 279 | content: "\e654"; 280 | } 281 | .ti-bag:before { 282 | content: "\e655"; 283 | } 284 | .ti-move:before { 285 | content: "\e656"; 286 | } 287 | .ti-arrows-vertical:before { 288 | content: "\e657"; 289 | } 290 | .ti-arrows-horizontal:before { 291 | content: "\e658"; 292 | } 293 | .ti-fullscreen:before { 294 | content: "\e659"; 295 | } 296 | .ti-arrow-top-right:before { 297 | content: "\e65a"; 298 | } 299 | .ti-arrow-top-left:before { 300 | content: "\e65b"; 301 | } 302 | .ti-arrow-circle-up:before { 303 | content: "\e65c"; 304 | } 305 | .ti-arrow-circle-right:before { 306 | content: "\e65d"; 307 | } 308 | .ti-arrow-circle-left:before { 309 | content: "\e65e"; 310 | } 311 | .ti-arrow-circle-down:before { 312 | content: "\e65f"; 313 | } 314 | .ti-angle-double-up:before { 315 | content: "\e660"; 316 | } 317 | .ti-angle-double-right:before { 318 | content: "\e661"; 319 | } 320 | .ti-angle-double-left:before { 321 | content: "\e662"; 322 | } 323 | .ti-angle-double-down:before { 324 | content: "\e663"; 325 | } 326 | .ti-zip:before { 327 | content: "\e664"; 328 | } 329 | .ti-world:before { 330 | content: "\e665"; 331 | } 332 | .ti-wheelchair:before { 333 | content: "\e666"; 334 | } 335 | .ti-view-list:before { 336 | content: "\e667"; 337 | } 338 | .ti-view-list-alt:before { 339 | content: "\e668"; 340 | } 341 | .ti-view-grid:before { 342 | content: "\e669"; 343 | } 344 | .ti-uppercase:before { 345 | content: "\e66a"; 346 | } 347 | .ti-upload:before { 348 | content: "\e66b"; 349 | } 350 | .ti-underline:before { 351 | content: "\e66c"; 352 | } 353 | .ti-truck:before { 354 | content: "\e66d"; 355 | } 356 | .ti-timer:before { 357 | content: "\e66e"; 358 | } 359 | .ti-ticket:before { 360 | content: "\e66f"; 361 | } 362 | .ti-thumb-up:before { 363 | content: "\e670"; 364 | } 365 | .ti-thumb-down:before { 366 | content: "\e671"; 367 | } 368 | .ti-text:before { 369 | content: "\e672"; 370 | } 371 | .ti-stats-up:before { 372 | content: "\e673"; 373 | } 374 | .ti-stats-down:before { 375 | content: "\e674"; 376 | } 377 | .ti-split-v:before { 378 | content: "\e675"; 379 | } 380 | .ti-split-h:before { 381 | content: "\e676"; 382 | } 383 | .ti-smallcap:before { 384 | content: "\e677"; 385 | } 386 | .ti-shine:before { 387 | content: "\e678"; 388 | } 389 | .ti-shift-right:before { 390 | content: "\e679"; 391 | } 392 | .ti-shift-left:before { 393 | content: "\e67a"; 394 | } 395 | .ti-shield:before { 396 | content: "\e67b"; 397 | } 398 | .ti-notepad:before { 399 | content: "\e67c"; 400 | } 401 | .ti-server:before { 402 | content: "\e67d"; 403 | } 404 | .ti-quote-right:before { 405 | content: "\e67e"; 406 | } 407 | .ti-quote-left:before { 408 | content: "\e67f"; 409 | } 410 | .ti-pulse:before { 411 | content: "\e680"; 412 | } 413 | .ti-printer:before { 414 | content: "\e681"; 415 | } 416 | .ti-power-off:before { 417 | content: "\e682"; 418 | } 419 | .ti-plug:before { 420 | content: "\e683"; 421 | } 422 | .ti-pie-chart:before { 423 | content: "\e684"; 424 | } 425 | .ti-paragraph:before { 426 | content: "\e685"; 427 | } 428 | .ti-panel:before { 429 | content: "\e686"; 430 | } 431 | .ti-package:before { 432 | content: "\e687"; 433 | } 434 | .ti-music:before { 435 | content: "\e688"; 436 | } 437 | .ti-music-alt:before { 438 | content: "\e689"; 439 | } 440 | .ti-mouse:before { 441 | content: "\e68a"; 442 | } 443 | .ti-mouse-alt:before { 444 | content: "\e68b"; 445 | } 446 | .ti-money:before { 447 | content: "\e68c"; 448 | } 449 | .ti-microphone:before { 450 | content: "\e68d"; 451 | } 452 | .ti-menu:before { 453 | content: "\e68e"; 454 | } 455 | .ti-menu-alt:before { 456 | content: "\e68f"; 457 | } 458 | .ti-map:before { 459 | content: "\e690"; 460 | } 461 | .ti-map-alt:before { 462 | content: "\e691"; 463 | } 464 | .ti-loop:before { 465 | content: "\e692"; 466 | } 467 | .ti-location-pin:before { 468 | content: "\e693"; 469 | } 470 | .ti-list:before { 471 | content: "\e694"; 472 | } 473 | .ti-light-bulb:before { 474 | content: "\e695"; 475 | } 476 | .ti-Italic:before { 477 | content: "\e696"; 478 | } 479 | .ti-info:before { 480 | content: "\e697"; 481 | } 482 | .ti-infinite:before { 483 | content: "\e698"; 484 | } 485 | .ti-id-badge:before { 486 | content: "\e699"; 487 | } 488 | .ti-hummer:before { 489 | content: "\e69a"; 490 | } 491 | .ti-home:before { 492 | content: "\e69b"; 493 | } 494 | .ti-help:before { 495 | content: "\e69c"; 496 | } 497 | .ti-headphone:before { 498 | content: "\e69d"; 499 | } 500 | .ti-harddrives:before { 501 | content: "\e69e"; 502 | } 503 | .ti-harddrive:before { 504 | content: "\e69f"; 505 | } 506 | .ti-gift:before { 507 | content: "\e6a0"; 508 | } 509 | .ti-game:before { 510 | content: "\e6a1"; 511 | } 512 | .ti-filter:before { 513 | content: "\e6a2"; 514 | } 515 | .ti-files:before { 516 | content: "\e6a3"; 517 | } 518 | .ti-file:before { 519 | content: "\e6a4"; 520 | } 521 | .ti-eraser:before { 522 | content: "\e6a5"; 523 | } 524 | .ti-envelope:before { 525 | content: "\e6a6"; 526 | } 527 | .ti-download:before { 528 | content: "\e6a7"; 529 | } 530 | .ti-direction:before { 531 | content: "\e6a8"; 532 | } 533 | .ti-direction-alt:before { 534 | content: "\e6a9"; 535 | } 536 | .ti-dashboard:before { 537 | content: "\e6aa"; 538 | } 539 | .ti-control-stop:before { 540 | content: "\e6ab"; 541 | } 542 | .ti-control-shuffle:before { 543 | content: "\e6ac"; 544 | } 545 | .ti-control-play:before { 546 | content: "\e6ad"; 547 | } 548 | .ti-control-pause:before { 549 | content: "\e6ae"; 550 | } 551 | .ti-control-forward:before { 552 | content: "\e6af"; 553 | } 554 | .ti-control-backward:before { 555 | content: "\e6b0"; 556 | } 557 | .ti-cloud:before { 558 | content: "\e6b1"; 559 | } 560 | .ti-cloud-up:before { 561 | content: "\e6b2"; 562 | } 563 | .ti-cloud-down:before { 564 | content: "\e6b3"; 565 | } 566 | .ti-clipboard:before { 567 | content: "\e6b4"; 568 | } 569 | .ti-car:before { 570 | content: "\e6b5"; 571 | } 572 | .ti-calendar:before { 573 | content: "\e6b6"; 574 | } 575 | .ti-book:before { 576 | content: "\e6b7"; 577 | } 578 | .ti-bell:before { 579 | content: "\e6b8"; 580 | } 581 | .ti-basketball:before { 582 | content: "\e6b9"; 583 | } 584 | .ti-bar-chart:before { 585 | content: "\e6ba"; 586 | } 587 | .ti-bar-chart-alt:before { 588 | content: "\e6bb"; 589 | } 590 | .ti-back-right:before { 591 | content: "\e6bc"; 592 | } 593 | .ti-back-left:before { 594 | content: "\e6bd"; 595 | } 596 | .ti-arrows-corner:before { 597 | content: "\e6be"; 598 | } 599 | .ti-archive:before { 600 | content: "\e6bf"; 601 | } 602 | .ti-anchor:before { 603 | content: "\e6c0"; 604 | } 605 | .ti-align-right:before { 606 | content: "\e6c1"; 607 | } 608 | .ti-align-left:before { 609 | content: "\e6c2"; 610 | } 611 | .ti-align-justify:before { 612 | content: "\e6c3"; 613 | } 614 | .ti-align-center:before { 615 | content: "\e6c4"; 616 | } 617 | .ti-alert:before { 618 | content: "\e6c5"; 619 | } 620 | .ti-alarm-clock:before { 621 | content: "\e6c6"; 622 | } 623 | .ti-agenda:before { 624 | content: "\e6c7"; 625 | } 626 | .ti-write:before { 627 | content: "\e6c8"; 628 | } 629 | .ti-window:before { 630 | content: "\e6c9"; 631 | } 632 | .ti-widgetized:before { 633 | content: "\e6ca"; 634 | } 635 | .ti-widget:before { 636 | content: "\e6cb"; 637 | } 638 | .ti-widget-alt:before { 639 | content: "\e6cc"; 640 | } 641 | .ti-wallet:before { 642 | content: "\e6cd"; 643 | } 644 | .ti-video-clapper:before { 645 | content: "\e6ce"; 646 | } 647 | .ti-video-camera:before { 648 | content: "\e6cf"; 649 | } 650 | .ti-vector:before { 651 | content: "\e6d0"; 652 | } 653 | .ti-themify-logo:before { 654 | content: "\e6d1"; 655 | } 656 | .ti-themify-favicon:before { 657 | content: "\e6d2"; 658 | } 659 | .ti-themify-favicon-alt:before { 660 | content: "\e6d3"; 661 | } 662 | .ti-support:before { 663 | content: "\e6d4"; 664 | } 665 | .ti-stamp:before { 666 | content: "\e6d5"; 667 | } 668 | .ti-split-v-alt:before { 669 | content: "\e6d6"; 670 | } 671 | .ti-slice:before { 672 | content: "\e6d7"; 673 | } 674 | .ti-shortcode:before { 675 | content: "\e6d8"; 676 | } 677 | .ti-shift-right-alt:before { 678 | content: "\e6d9"; 679 | } 680 | .ti-shift-left-alt:before { 681 | content: "\e6da"; 682 | } 683 | .ti-ruler-alt-2:before { 684 | content: "\e6db"; 685 | } 686 | .ti-receipt:before { 687 | content: "\e6dc"; 688 | } 689 | .ti-pin2:before { 690 | content: "\e6dd"; 691 | } 692 | .ti-pin-alt:before { 693 | content: "\e6de"; 694 | } 695 | .ti-pencil-alt2:before { 696 | content: "\e6df"; 697 | } 698 | .ti-palette:before { 699 | content: "\e6e0"; 700 | } 701 | .ti-more:before { 702 | content: "\e6e1"; 703 | } 704 | .ti-more-alt:before { 705 | content: "\e6e2"; 706 | } 707 | .ti-microphone-alt:before { 708 | content: "\e6e3"; 709 | } 710 | .ti-magnet:before { 711 | content: "\e6e4"; 712 | } 713 | .ti-line-double:before { 714 | content: "\e6e5"; 715 | } 716 | .ti-line-dotted:before { 717 | content: "\e6e6"; 718 | } 719 | .ti-line-dashed:before { 720 | content: "\e6e7"; 721 | } 722 | .ti-layout-width-full:before { 723 | content: "\e6e8"; 724 | } 725 | .ti-layout-width-default:before { 726 | content: "\e6e9"; 727 | } 728 | .ti-layout-width-default-alt:before { 729 | content: "\e6ea"; 730 | } 731 | .ti-layout-tab:before { 732 | content: "\e6eb"; 733 | } 734 | .ti-layout-tab-window:before { 735 | content: "\e6ec"; 736 | } 737 | .ti-layout-tab-v:before { 738 | content: "\e6ed"; 739 | } 740 | .ti-layout-tab-min:before { 741 | content: "\e6ee"; 742 | } 743 | .ti-layout-slider:before { 744 | content: "\e6ef"; 745 | } 746 | .ti-layout-slider-alt:before { 747 | content: "\e6f0"; 748 | } 749 | .ti-layout-sidebar-right:before { 750 | content: "\e6f1"; 751 | } 752 | .ti-layout-sidebar-none:before { 753 | content: "\e6f2"; 754 | } 755 | .ti-layout-sidebar-left:before { 756 | content: "\e6f3"; 757 | } 758 | .ti-layout-placeholder:before { 759 | content: "\e6f4"; 760 | } 761 | .ti-layout-menu:before { 762 | content: "\e6f5"; 763 | } 764 | .ti-layout-menu-v:before { 765 | content: "\e6f6"; 766 | } 767 | .ti-layout-menu-separated:before { 768 | content: "\e6f7"; 769 | } 770 | .ti-layout-menu-full:before { 771 | content: "\e6f8"; 772 | } 773 | .ti-layout-media-right-alt:before { 774 | content: "\e6f9"; 775 | } 776 | .ti-layout-media-right:before { 777 | content: "\e6fa"; 778 | } 779 | .ti-layout-media-overlay:before { 780 | content: "\e6fb"; 781 | } 782 | .ti-layout-media-overlay-alt:before { 783 | content: "\e6fc"; 784 | } 785 | .ti-layout-media-overlay-alt-2:before { 786 | content: "\e6fd"; 787 | } 788 | .ti-layout-media-left-alt:before { 789 | content: "\e6fe"; 790 | } 791 | .ti-layout-media-left:before { 792 | content: "\e6ff"; 793 | } 794 | .ti-layout-media-center-alt:before { 795 | content: "\e700"; 796 | } 797 | .ti-layout-media-center:before { 798 | content: "\e701"; 799 | } 800 | .ti-layout-list-thumb:before { 801 | content: "\e702"; 802 | } 803 | .ti-layout-list-thumb-alt:before { 804 | content: "\e703"; 805 | } 806 | .ti-layout-list-post:before { 807 | content: "\e704"; 808 | } 809 | .ti-layout-list-large-image:before { 810 | content: "\e705"; 811 | } 812 | .ti-layout-line-solid:before { 813 | content: "\e706"; 814 | } 815 | .ti-layout-grid4:before { 816 | content: "\e707"; 817 | } 818 | .ti-layout-grid3:before { 819 | content: "\e708"; 820 | } 821 | .ti-layout-grid2:before { 822 | content: "\e709"; 823 | } 824 | .ti-layout-grid2-thumb:before { 825 | content: "\e70a"; 826 | } 827 | .ti-layout-cta-right:before { 828 | content: "\e70b"; 829 | } 830 | .ti-layout-cta-left:before { 831 | content: "\e70c"; 832 | } 833 | .ti-layout-cta-center:before { 834 | content: "\e70d"; 835 | } 836 | .ti-layout-cta-btn-right:before { 837 | content: "\e70e"; 838 | } 839 | .ti-layout-cta-btn-left:before { 840 | content: "\e70f"; 841 | } 842 | .ti-layout-column4:before { 843 | content: "\e710"; 844 | } 845 | .ti-layout-column3:before { 846 | content: "\e711"; 847 | } 848 | .ti-layout-column2:before { 849 | content: "\e712"; 850 | } 851 | .ti-layout-accordion-separated:before { 852 | content: "\e713"; 853 | } 854 | .ti-layout-accordion-merged:before { 855 | content: "\e714"; 856 | } 857 | .ti-layout-accordion-list:before { 858 | content: "\e715"; 859 | } 860 | .ti-ink-pen:before { 861 | content: "\e716"; 862 | } 863 | .ti-info-alt:before { 864 | content: "\e717"; 865 | } 866 | .ti-help-alt:before { 867 | content: "\e718"; 868 | } 869 | .ti-headphone-alt:before { 870 | content: "\e719"; 871 | } 872 | .ti-hand-point-up:before { 873 | content: "\e71a"; 874 | } 875 | .ti-hand-point-right:before { 876 | content: "\e71b"; 877 | } 878 | .ti-hand-point-left:before { 879 | content: "\e71c"; 880 | } 881 | .ti-hand-point-down:before { 882 | content: "\e71d"; 883 | } 884 | .ti-gallery:before { 885 | content: "\e71e"; 886 | } 887 | .ti-face-smile:before { 888 | content: "\e71f"; 889 | } 890 | .ti-face-sad:before { 891 | content: "\e720"; 892 | } 893 | .ti-credit-card:before { 894 | content: "\e721"; 895 | } 896 | .ti-control-skip-forward:before { 897 | content: "\e722"; 898 | } 899 | .ti-control-skip-backward:before { 900 | content: "\e723"; 901 | } 902 | .ti-control-record:before { 903 | content: "\e724"; 904 | } 905 | .ti-control-eject:before { 906 | content: "\e725"; 907 | } 908 | .ti-comments-smiley:before { 909 | content: "\e726"; 910 | } 911 | .ti-brush-alt:before { 912 | content: "\e727"; 913 | } 914 | .ti-youtube:before { 915 | content: "\e728"; 916 | } 917 | .ti-vimeo:before { 918 | content: "\e729"; 919 | } 920 | .ti-twitter:before { 921 | content: "\e72a"; 922 | } 923 | .ti-time:before { 924 | content: "\e72b"; 925 | } 926 | .ti-tumblr:before { 927 | content: "\e72c"; 928 | } 929 | .ti-skype:before { 930 | content: "\e72d"; 931 | } 932 | .ti-share:before { 933 | content: "\e72e"; 934 | } 935 | .ti-share-alt:before { 936 | content: "\e72f"; 937 | } 938 | .ti-rocket:before { 939 | content: "\e730"; 940 | } 941 | .ti-pinterest:before { 942 | content: "\e731"; 943 | } 944 | .ti-new-window:before { 945 | content: "\e732"; 946 | } 947 | .ti-microsoft:before { 948 | content: "\e733"; 949 | } 950 | .ti-list-ol:before { 951 | content: "\e734"; 952 | } 953 | .ti-linkedin:before { 954 | content: "\e735"; 955 | } 956 | .ti-layout-sidebar-2:before { 957 | content: "\e736"; 958 | } 959 | .ti-layout-grid4-alt:before { 960 | content: "\e737"; 961 | } 962 | .ti-layout-grid3-alt:before { 963 | content: "\e738"; 964 | } 965 | .ti-layout-grid2-alt:before { 966 | content: "\e739"; 967 | } 968 | .ti-layout-column4-alt:before { 969 | content: "\e73a"; 970 | } 971 | .ti-layout-column3-alt:before { 972 | content: "\e73b"; 973 | } 974 | .ti-layout-column2-alt:before { 975 | content: "\e73c"; 976 | } 977 | .ti-instagram:before { 978 | content: "\e73d"; 979 | } 980 | .ti-google:before { 981 | content: "\e73e"; 982 | } 983 | .ti-github:before { 984 | content: "\e73f"; 985 | } 986 | .ti-flickr:before { 987 | content: "\e740"; 988 | } 989 | .ti-facebook:before { 990 | content: "\e741"; 991 | } 992 | .ti-dropbox:before { 993 | content: "\e742"; 994 | } 995 | .ti-dribbble:before { 996 | content: "\e743"; 997 | } 998 | .ti-apple:before { 999 | content: "\e744"; 1000 | } 1001 | .ti-android:before { 1002 | content: "\e745"; 1003 | } 1004 | .ti-save:before { 1005 | content: "\e746"; 1006 | } 1007 | .ti-save-alt:before { 1008 | content: "\e747"; 1009 | } 1010 | .ti-yahoo:before { 1011 | content: "\e748"; 1012 | } 1013 | .ti-wordpress:before { 1014 | content: "\e749"; 1015 | } 1016 | .ti-vimeo-alt:before { 1017 | content: "\e74a"; 1018 | } 1019 | .ti-twitter-alt:before { 1020 | content: "\e74b"; 1021 | } 1022 | .ti-tumblr-alt:before { 1023 | content: "\e74c"; 1024 | } 1025 | .ti-trello:before { 1026 | content: "\e74d"; 1027 | } 1028 | .ti-stack-overflow:before { 1029 | content: "\e74e"; 1030 | } 1031 | .ti-soundcloud:before { 1032 | content: "\e74f"; 1033 | } 1034 | .ti-sharethis:before { 1035 | content: "\e750"; 1036 | } 1037 | .ti-sharethis-alt:before { 1038 | content: "\e751"; 1039 | } 1040 | .ti-reddit:before { 1041 | content: "\e752"; 1042 | } 1043 | .ti-pinterest-alt:before { 1044 | content: "\e753"; 1045 | } 1046 | .ti-microsoft-alt:before { 1047 | content: "\e754"; 1048 | } 1049 | .ti-linux:before { 1050 | content: "\e755"; 1051 | } 1052 | .ti-jsfiddle:before { 1053 | content: "\e756"; 1054 | } 1055 | .ti-joomla:before { 1056 | content: "\e757"; 1057 | } 1058 | .ti-html5:before { 1059 | content: "\e758"; 1060 | } 1061 | .ti-flickr-alt:before { 1062 | content: "\e759"; 1063 | } 1064 | .ti-email:before { 1065 | content: "\e75a"; 1066 | } 1067 | .ti-drupal:before { 1068 | content: "\e75b"; 1069 | } 1070 | .ti-dropbox-alt:before { 1071 | content: "\e75c"; 1072 | } 1073 | .ti-css3:before { 1074 | content: "\e75d"; 1075 | } 1076 | .ti-rss:before { 1077 | content: "\e75e"; 1078 | } 1079 | .ti-rss-alt:before { 1080 | content: "\e75f"; 1081 | } 1082 | -------------------------------------------------------------------------------- /src/assets/fonts/themify.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/fonts/themify.eot -------------------------------------------------------------------------------- /src/assets/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/fonts/themify.ttf -------------------------------------------------------------------------------- /src/assets/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/fonts/themify.woff -------------------------------------------------------------------------------- /src/assets/img/angular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/angular.png -------------------------------------------------------------------------------- /src/assets/img/angular2-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/angular2-logo-white.png -------------------------------------------------------------------------------- /src/assets/img/angular2-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/angular2-logo.png -------------------------------------------------------------------------------- /src/assets/img/angularjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/angularjs.png -------------------------------------------------------------------------------- /src/assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/apple-icon.png -------------------------------------------------------------------------------- /src/assets/img/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/background.jpg -------------------------------------------------------------------------------- /src/assets/img/faces/face-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/faces/face-0.jpg -------------------------------------------------------------------------------- /src/assets/img/faces/face-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/faces/face-1.jpg -------------------------------------------------------------------------------- /src/assets/img/faces/face-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/faces/face-2.jpg -------------------------------------------------------------------------------- /src/assets/img/faces/face-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/faces/face-3.jpg -------------------------------------------------------------------------------- /src/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/favicon.png -------------------------------------------------------------------------------- /src/assets/img/new_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/new_logo.png -------------------------------------------------------------------------------- /src/assets/img/tim_80x80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/assets/img/tim_80x80.png -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false 8 | }; 9 | 10 | /* 11 | * In development mode, to ignore zone related error stack frames such as 12 | * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can 13 | * import the following file, but please comment it out in production mode 14 | * because it will have performance impact when throw error 15 | */ 16 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/favicon.ico -------------------------------------------------------------------------------- /src/img/logo.82b9c7a5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/manfredsteyer/simple-microfrontend-demo/0ed28034f11df156edef445ac02f40566cb73037/src/img/logo.82b9c7a5.png -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Shell 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, 'coverage'), 20 | reports: ['html', 'lcovonly'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false 30 | }); 31 | }; -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.log(err)); 13 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************************************** 2 | * Zone JS is required by default for Angular itself. 3 | */ 4 | import 'zone.js/dist/zone'; // Included with Angular CLI. -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: any; 11 | 12 | // First, initialize the Angular testing environment. 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting() 16 | ); 17 | // Then we find all the tests. 18 | const context = require.context('./', true, /\.spec\.ts$/); 19 | // And load the modules. 20 | context.keys().map(context); 21 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "types": [] 6 | }, 7 | "exclude": [ 8 | "src/test.ts", 9 | "**/*.spec.ts" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "test.ts", 12 | "polyfills.ts" 13 | ], 14 | "include": [ 15 | "**/*.spec.ts", 16 | "**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tslint.json", 3 | "rules": { 4 | "directive-selector": [ 5 | true, 6 | "attribute", 7 | "app", 8 | "camelCase" 9 | ], 10 | "component-selector": [ 11 | true, 12 | "element", 13 | "app", 14 | "kebab-case" 15 | ] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "downlevelIteration": true, 6 | "importHelpers": true, 7 | "outDir": "./dist/out-tsc", 8 | "sourceMap": true, 9 | "declaration": false, 10 | "moduleResolution": "node", 11 | "emitDecoratorMetadata": true, 12 | "experimentalDecorators": true, 13 | "target": "es5", 14 | "module": "esnext", 15 | "typeRoots": [ 16 | "node_modules/@types" 17 | ], 18 | "lib": [ 19 | "es2017", 20 | "dom" 21 | ] 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /webpack.externals.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack'); 2 | 3 | module.exports = { 4 | "externals": { 5 | "rxjs": "rxjs", 6 | "@angular/core": "ng.core", 7 | "@angular/common": "ng.common", 8 | "@angular/common/http": "ng.common.http", 9 | "@angular/platform-browser": "ng.platformBrowser", 10 | "@angular/platform-browser-dynamic": "ng.platformBrowserDynamic", 11 | "@angular/compiler": "ng.compiler", 12 | "@angular/elements": "ng.elements", 13 | 14 | // Uncomment and add to scripts in angular.json if needed 15 | // "@angular/router": "ng.router", 16 | // "@angular/forms": "ng.forms" 17 | } 18 | } --------------------------------------------------------------------------------