├── .vscode └── extensions.json ├── Chapter01 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── src │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ └── app.module.ts │ ├── assets │ │ └── .gitkeep │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json ├── Chapter02 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── karma.conf.js ├── mdfiles │ ├── 2021-05-20-posts.md │ └── angular-and-scully.md ├── package-lock.json ├── package.json ├── scully.my-blog.config.ts ├── scully │ ├── plugins │ │ └── plugin.ts │ └── tsconfig.json ├── src │ ├── app │ │ ├── app-routing.module.ts │ │ ├── app.component.html │ │ ├── app.component.scss │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── articles │ │ │ ├── articles-routing.module.ts │ │ │ ├── articles.component.html │ │ │ ├── articles.component.scss │ │ │ ├── articles.component.spec.ts │ │ │ ├── articles.component.ts │ │ │ └── articles.module.ts │ │ ├── contact │ │ │ ├── contact.component.html │ │ │ ├── contact.component.scss │ │ │ ├── contact.component.spec.ts │ │ │ ├── contact.component.ts │ │ │ └── contact.module.ts │ │ ├── core │ │ │ ├── core.module.ts │ │ │ └── header │ │ │ │ ├── header.component.html │ │ │ │ ├── header.component.scss │ │ │ │ ├── header.component.spec.ts │ │ │ │ └── header.component.ts │ │ ├── posts │ │ │ ├── posts-routing.module.ts │ │ │ ├── posts.component.html │ │ │ ├── posts.component.scss │ │ │ ├── posts.component.spec.ts │ │ │ ├── posts.component.ts │ │ │ └── posts.module.ts │ │ └── shared │ │ │ ├── footer │ │ │ ├── footer.component.html │ │ │ ├── footer.component.scss │ │ │ ├── footer.component.spec.ts │ │ │ └── footer.component.ts │ │ │ └── shared.module.ts │ ├── assets │ │ ├── .gitkeep │ │ ├── angular.png │ │ └── scully-routes.json │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.scss │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json ├── Chapter03 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── src │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── confirm-dialog │ │ │ ├── confirm-dialog.component.css │ │ │ ├── confirm-dialog.component.html │ │ │ ├── confirm-dialog.component.spec.ts │ │ │ └── confirm-dialog.component.ts │ │ ├── issue-list │ │ │ ├── issue-list.component.css │ │ │ ├── issue-list.component.html │ │ │ ├── issue-list.component.spec.ts │ │ │ └── issue-list.component.ts │ │ ├── issue-report │ │ │ ├── issue-report.component.css │ │ │ ├── issue-report.component.html │ │ │ ├── issue-report.component.spec.ts │ │ │ └── issue-report.component.ts │ │ ├── issue.ts │ │ ├── issues.service.spec.ts │ │ └── issues.service.ts │ ├── assets │ │ ├── .gitkeep │ │ └── mock-issues.ts │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json ├── Chapter04 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── firebase.json ├── karma.conf.js ├── ngsw-config.json ├── package-lock.json ├── package.json ├── src │ ├── app │ │ ├── app.component.html │ │ ├── app.component.scss │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── header │ │ │ ├── header.component.html │ │ │ ├── header.component.scss │ │ │ ├── header.component.spec.ts │ │ │ └── header.component.ts │ │ ├── weather.service.spec.ts │ │ ├── weather.service.ts │ │ ├── weather.ts │ │ └── weather │ │ │ ├── weather.component.html │ │ │ ├── weather.component.scss │ │ │ ├── weather.component.spec.ts │ │ │ └── weather.component.ts │ ├── assets │ │ ├── .gitkeep │ │ └── icons │ │ │ ├── icon-128x128.png │ │ │ ├── icon-144x144.png │ │ │ ├── icon-152x152.png │ │ │ ├── icon-192x192.png │ │ │ ├── icon-384x384.png │ │ │ ├── icon-512x512.png │ │ │ ├── icon-72x72.png │ │ │ └── icon-96x96.png │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── manifest.webmanifest │ ├── polyfills.ts │ ├── styles.scss │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json ├── Chapter05 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── .vscode │ └── launch.json ├── README.md ├── angular.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── src │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── editor.service.spec.ts │ │ ├── editor.service.ts │ │ ├── editor │ │ │ ├── editor.component.css │ │ │ ├── editor.component.html │ │ │ ├── editor.component.spec.ts │ │ │ └── editor.component.ts │ │ └── window.ts │ ├── assets │ │ └── .gitkeep │ ├── electron │ │ ├── main.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.spec.json ├── webpack.config.js ├── webpack.dev.config.js └── webpack.prod.config.js ├── Chapter06 ├── .browserslistrc ├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── android │ ├── .gitignore │ ├── .idea │ │ ├── .gitignore │ │ ├── compiler.xml │ │ ├── jarRepositories.xml │ │ ├── misc.xml │ │ └── runConfigurations.xml │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── capacitor.build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── getcapacitor │ │ │ │ └── myapp │ │ │ │ └── ExampleInstrumentedTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ ├── capacitor.config.json │ │ │ │ └── capacitor.plugins.json │ │ │ ├── java │ │ │ │ └── io │ │ │ │ │ └── ionic │ │ │ │ │ └── starter │ │ │ │ │ └── MainActivity.java │ │ │ └── res │ │ │ │ ├── drawable-land-hdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-land-mdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-land-xhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-land-xxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-land-xxxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-hdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-mdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-xhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-xxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-port-xxxhdpi │ │ │ │ └── splash.png │ │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ │ ├── drawable │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ └── splash.png │ │ │ │ ├── layout │ │ │ │ └── activity_main.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── values │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ │ └── xml │ │ │ │ ├── config.xml │ │ │ │ └── file_paths.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── getcapacitor │ │ │ └── myapp │ │ │ └── ExampleUnitTest.java │ ├── build.gradle │ ├── capacitor.settings.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle │ └── variables.gradle ├── angular.json ├── capacitor.config.json ├── e2e │ ├── protractor.conf.js │ ├── src │ │ ├── app.e2e-spec.ts │ │ └── app.po.ts │ └── tsconfig.json ├── extra-webpack.config.js ├── firebase.json ├── ionic.config.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── resources │ ├── icon.png │ └── splash.png ├── src │ ├── app │ │ ├── app-routing.module.ts │ │ ├── app.component.html │ │ ├── app.component.scss │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── capture │ │ │ ├── capture-routing.module.ts │ │ │ ├── capture.module.ts │ │ │ ├── capture.page.html │ │ │ ├── capture.page.scss │ │ │ ├── capture.page.spec.ts │ │ │ └── capture.page.ts │ │ ├── cesium.service.spec.ts │ │ ├── cesium.service.ts │ │ ├── photo.service.spec.ts │ │ ├── photo.service.ts │ │ ├── photo.ts │ │ └── view │ │ │ ├── view-routing.module.ts │ │ │ ├── view.module.ts │ │ │ ├── view.page.html │ │ │ ├── view.page.scss │ │ │ ├── view.page.spec.ts │ │ │ └── view.page.ts │ ├── assets │ │ ├── icon │ │ │ └── favicon.png │ │ └── shapes.svg │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── global.scss │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── test.ts │ ├── theme │ │ └── variables.scss │ └── zone-flags.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json ├── Chapter07 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── server.ts ├── src │ ├── app │ │ ├── app.component.html │ │ ├── app.component.scss │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── app.server.module.ts │ │ ├── github.service.spec.ts │ │ ├── github.service.ts │ │ ├── organization.ts │ │ ├── organizations │ │ │ ├── organizations.component.html │ │ │ ├── organizations.component.scss │ │ │ ├── organizations.component.spec.ts │ │ │ └── organizations.component.ts │ │ ├── panel │ │ │ ├── panel.component.html │ │ │ ├── panel.component.scss │ │ │ ├── panel.component.spec.ts │ │ │ └── panel.component.ts │ │ ├── personal-info │ │ │ ├── personal-info.component.html │ │ │ ├── personal-info.component.scss │ │ │ ├── personal-info.component.spec.ts │ │ │ └── personal-info.component.ts │ │ ├── repositories │ │ │ ├── repositories.component.html │ │ │ ├── repositories.component.scss │ │ │ ├── repositories.component.spec.ts │ │ │ └── repositories.component.ts │ │ ├── repository.ts │ │ └── user.ts │ ├── assets │ │ ├── .gitkeep │ │ └── angular.png │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.server.ts │ ├── main.ts │ ├── polyfills.ts │ ├── styles.scss │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.server.json └── tsconfig.spec.json ├── Chapter08 ├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── .prettierignore ├── .prettierrc ├── .vscode │ └── extensions.json ├── README.md ├── angular.json ├── apps │ ├── .gitkeep │ ├── tour-e2e │ │ ├── .eslintrc.json │ │ ├── cypress.json │ │ ├── src │ │ │ ├── fixtures │ │ │ │ └── example.json │ │ │ ├── integration │ │ │ │ └── app.spec.ts │ │ │ ├── plugins │ │ │ │ └── index.js │ │ │ └── support │ │ │ │ ├── app.po.ts │ │ │ │ ├── commands.ts │ │ │ │ └── index.ts │ │ ├── tsconfig.e2e.json │ │ └── tsconfig.json │ └── tour │ │ ├── .browserslistrc │ │ ├── .eslintrc.json │ │ ├── jest.config.js │ │ ├── src │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── app.component.html │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ └── app.module.ts │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ └── poi.json │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── styles.css │ │ └── test-setup.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.editor.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json ├── decorate-angular-cli.js ├── jest.config.js ├── jest.preset.js ├── libs │ ├── .gitkeep │ ├── admin │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── src │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── admin.component.css │ │ │ │ ├── admin.component.html │ │ │ │ ├── admin.component.spec.ts │ │ │ │ ├── admin.component.ts │ │ │ │ ├── admin.module.ts │ │ │ │ ├── admin.service.spec.ts │ │ │ │ └── admin.service.ts │ │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── poi │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── src │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── +state │ │ │ │ │ ├── poi.actions.ts │ │ │ │ │ ├── poi.effects.spec.ts │ │ │ │ │ ├── poi.effects.ts │ │ │ │ │ ├── poi.models.ts │ │ │ │ │ ├── poi.reducer.spec.ts │ │ │ │ │ ├── poi.reducer.ts │ │ │ │ │ ├── poi.selectors.spec.ts │ │ │ │ │ └── poi.selectors.ts │ │ │ │ ├── poi.module.ts │ │ │ │ ├── poi.service.spec.ts │ │ │ │ └── poi.service.ts │ │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ └── visitor │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.js │ │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── map │ │ │ │ ├── map.component.css │ │ │ │ ├── map.component.html │ │ │ │ ├── map.component.spec.ts │ │ │ │ └── map.component.ts │ │ │ ├── poi-list │ │ │ │ ├── poi-list.component.css │ │ │ │ ├── poi-list.component.html │ │ │ │ ├── poi-list.component.spec.ts │ │ │ │ └── poi-list.component.ts │ │ │ ├── visitor.component.css │ │ │ ├── visitor.component.html │ │ │ ├── visitor.component.spec.ts │ │ │ ├── visitor.component.ts │ │ │ └── visitor.module.ts │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json ├── nx.json ├── package-lock.json ├── package.json ├── tools │ ├── generators │ │ └── .gitkeep │ └── tsconfig.tools.json └── tsconfig.base.json ├── Chapter09 ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── README.md ├── angular.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── projects │ ├── ui-controls │ │ ├── README.md │ │ ├── karma.conf.js │ │ ├── ng-package.json │ │ ├── package.json │ │ ├── src │ │ │ ├── lib │ │ │ │ ├── card-list │ │ │ │ │ ├── card-list.component.css │ │ │ │ │ ├── card-list.component.html │ │ │ │ │ ├── card-list.component.spec.ts │ │ │ │ │ └── card-list.component.ts │ │ │ │ ├── card.ts │ │ │ │ ├── copy-button │ │ │ │ │ ├── copy-button.component.css │ │ │ │ │ ├── copy-button.component.html │ │ │ │ │ ├── copy-button.component.spec.ts │ │ │ │ │ └── copy-button.component.ts │ │ │ │ ├── ui-controls.component.spec.ts │ │ │ │ ├── ui-controls.component.ts │ │ │ │ ├── ui-controls.module.ts │ │ │ │ ├── ui-controls.service.spec.ts │ │ │ │ └── ui-controls.service.ts │ │ │ ├── public-api.ts │ │ │ └── test.ts │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.lib.prod.json │ │ └── tsconfig.spec.json │ └── ui-elements │ │ ├── .browserslistrc │ │ ├── karma.conf.js │ │ ├── src │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── app.component.html │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ └── app.module.ts │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── styles.css │ │ └── test.ts │ │ ├── tsconfig.app.json │ │ └── tsconfig.spec.json ├── src │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ └── assassins.ts │ ├── assets │ │ └── .gitkeep │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json ├── Chapter10 ├── .gitignore ├── .npmignore ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── collection.json │ ├── crud-service │ │ ├── files │ │ │ ├── __name@dasherize__.service.spec.ts.template │ │ │ └── __name@dasherize__.service.ts.template │ │ ├── index.ts │ │ └── index_spec.ts │ ├── my-schematics │ │ ├── index.ts │ │ └── index_spec.ts │ └── tailwind-container │ │ ├── files │ │ ├── __name@dasherize__.component.html.template │ │ └── __name@dasherize__.component.ts.template │ │ ├── index.ts │ │ ├── index_spec.ts │ │ ├── schema.json │ │ └── schema.ts └── tsconfig.json ├── LICENSE └── README.md /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "johnpapa.angular-essentials", 4 | "christian-kohler.path-intellisense" 5 | ] 6 | } -------------------------------------------------------------------------------- /Chapter01/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. 18 | -------------------------------------------------------------------------------- /Chapter01/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://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 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /Chapter01/.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 | # Only exists if Bazel was run 8 | /bazel-out 9 | 10 | # dependencies 11 | /node_modules 12 | 13 | # profiling files 14 | chrome-profiler-events*.json 15 | 16 | # IDEs and editors 17 | /.idea 18 | .project 19 | .classpath 20 | .c9/ 21 | *.launch 22 | .settings/ 23 | *.sublime-workspace 24 | 25 | # IDE - VSCode 26 | .vscode/* 27 | !.vscode/settings.json 28 | !.vscode/tasks.json 29 | !.vscode/launch.json 30 | !.vscode/extensions.json 31 | .history/* 32 | 33 | # misc 34 | /.sass-cache 35 | /connect.lock 36 | /coverage 37 | /libpeerconnection.log 38 | npm-debug.log 39 | yarn-error.log 40 | testem.log 41 | /typings 42 | 43 | # System Files 44 | .DS_Store 45 | Thumbs.db 46 | -------------------------------------------------------------------------------- /Chapter01/src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Angular-Projects-Second-Edition/04cf0562c97e7b7d4d86d8b74993aa19952a884d/Chapter01/src/app/app.component.css -------------------------------------------------------------------------------- /Chapter01/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.css'] 7 | }) 8 | export class AppComponent { 9 | title = 'Angular Projects'; 10 | } 11 | -------------------------------------------------------------------------------- /Chapter01/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app.component'; 5 | 6 | @NgModule({ 7 | declarations: [ 8 | AppComponent 9 | ], 10 | imports: [ 11 | BrowserModule 12 | ], 13 | providers: [], 14 | bootstrap: [AppComponent] 15 | }) 16 | export class AppModule { } 17 | -------------------------------------------------------------------------------- /Chapter01/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Angular-Projects-Second-Edition/04cf0562c97e7b7d4d86d8b74993aa19952a884d/Chapter01/src/assets/.gitkeep -------------------------------------------------------------------------------- /Chapter01/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /Chapter01/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /Chapter01/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Angular-Projects-Second-Edition/04cf0562c97e7b7d4d86d8b74993aa19952a884d/Chapter01/src/favicon.ico -------------------------------------------------------------------------------- /Chapter01/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |Are you sure you want to close the issue?
8 |{{user.bio}}
6 |{{poi.description}}
11 |{{card.title}}
5 |7 | ui-controls works! 8 |
9 | `, 10 | styles: [ 11 | ] 12 | }) 13 | export class UiControlsComponent implements OnInit { 14 | 15 | constructor() { } 16 | 17 | ngOnInit(): void { 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-controls/src/lib/ui-controls.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { UiControlsService } from './ui-controls.service'; 4 | 5 | describe('UiControlsService', () => { 6 | let service: UiControlsService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(UiControlsService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-controls/src/lib/ui-controls.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable({ 4 | providedIn: 'root' 5 | }) 6 | export class UiControlsService { 7 | 8 | constructor() { } 9 | } 10 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-controls/src/public-api.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of ui-controls 3 | */ 4 | 5 | export * from './lib/ui-controls.service'; 6 | export * from './lib/ui-controls.component'; 7 | export * from './lib/ui-controls.module'; 8 | export * from './lib/card-list/card-list.component'; 9 | export * from './lib/card'; 10 | export * from './lib/copy-button/copy-button.component'; 11 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-controls/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/lib", 6 | "target": "es2015", 7 | "declaration": true, 8 | "declarationMap": true, 9 | "inlineSources": true, 10 | "types": [], 11 | "lib": [ 12 | "dom", 13 | "es2018" 14 | ] 15 | }, 16 | "exclude": [ 17 | "src/test.ts", 18 | "**/*.spec.ts" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-controls/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.lib.json", 4 | "compilerOptions": { 5 | "declarationMap": false 6 | }, 7 | "angularCompilerOptions": { 8 | "compilationMode": "partial" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-controls/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts" 12 | ], 13 | "include": [ 14 | "**/*.spec.ts", 15 | "**/*.d.ts" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. 18 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Angular-Projects-Second-Edition/04cf0562c97e7b7d4d86d8b74993aa19952a884d/Chapter09/projects/ui-elements/src/app/app.component.css -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.css'] 7 | }) 8 | export class AppComponent { 9 | title = 'ui-elements'; 10 | } 11 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Injector, NgModule } from '@angular/core'; 2 | import { createCustomElement } from '@angular/elements'; 3 | import { BrowserModule } from '@angular/platform-browser'; 4 | import { UiControlsModule, CopyButtonComponent } from 'ui-controls'; 5 | 6 | @NgModule({ 7 | declarations: [], 8 | imports: [ 9 | BrowserModule, 10 | UiControlsModule 11 | ], 12 | providers: [], 13 | bootstrap: [] 14 | }) 15 | export class AppModule { 16 | 17 | constructor(private injector: Injector) {} 18 | 19 | ngDoBootstrap() { 20 | const el = createCustomElement(CopyButtonComponent, { injector: this.injector }); 21 | customElements.define('copy-button', el); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Angular-Projects-Second-Edition/04cf0562c97e7b7d4d86d8b74993aa19952a884d/Chapter09/projects/ui-elements/src/assets/.gitkeep -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PacktPublishing/Angular-Projects-Second-Edition/04cf0562c97e7b7d4d86d8b74993aa19952a884d/Chapter09/projects/ui-elements/src/favicon.ico -------------------------------------------------------------------------------- /Chapter09/projects/ui-elements/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |