├── apps ├── .gitkeep ├── this-is-learning │ ├── src │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ ├── scully-routes.json │ │ │ └── images │ │ │ │ ├── lars.jpg │ │ │ │ ├── ngrx.jpg │ │ │ │ ├── ngrx.png │ │ │ │ ├── santosh.jpg │ │ │ │ ├── rainbow-nebula.jpg │ │ │ │ └── rxjs-logo-DD3DF87EEF-seeklogo.com.png │ │ ├── app │ │ │ ├── app.component.scss │ │ │ ├── app.component.html │ │ │ ├── home │ │ │ │ ├── home.component.ts │ │ │ │ ├── home.component.spec.ts │ │ │ │ ├── home.component.scss │ │ │ │ └── home.component.html │ │ │ ├── app.component.ts │ │ │ ├── app-routing.module.ts │ │ │ └── app.module.ts │ │ ├── test-setup.ts │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── styles.scss │ │ ├── main.ts │ │ └── polyfills.ts │ ├── tsconfig.editor.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tsconfig.json │ ├── .browserslistrc │ ├── jest.config.js │ └── .eslintrc.json └── this-is-learning-e2e │ ├── src │ ├── support │ │ ├── app.po.ts │ │ ├── index.ts │ │ └── commands.ts │ ├── fixtures │ │ └── example.json │ ├── integration │ │ └── app.spec.ts │ └── plugins │ │ └── index.js │ ├── tsconfig.json │ ├── cypress.json │ ├── cypress.ci.json │ ├── .eslintrc.json │ └── tsconfig.e2e.json ├── libs ├── .gitkeep └── navbar │ ├── src │ ├── test-setup.ts │ ├── index.ts │ └── lib │ │ └── navbar │ │ ├── navbar.module.ts │ │ ├── navbar.component.ts │ │ ├── navbar.component.spec.ts │ │ ├── navbar.component.html │ │ └── navbar.component.scss │ ├── README.md │ ├── tsconfig.spec.json │ ├── tsconfig.lib.json │ ├── tsconfig.json │ ├── jest.config.js │ └── .eslintrc.json ├── tools ├── generators │ └── .gitkeep └── tsconfig.tools.json ├── .prettierignore ├── jest.preset.js ├── jest.config.js ├── .prettierrc ├── .vscode └── extensions.json ├── scully.this-is-learning.config.ts ├── .editorconfig ├── scully ├── plugins │ └── plugin.ts └── tsconfig.json ├── tsconfig.base.json ├── .gitignore ├── .eslintrc.json ├── nx.json ├── decorate-angular-cli.js ├── package.json ├── README.md ├── .github └── workflows │ └── ci.yml └── angular.json /apps/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/generators/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/scully-routes.json: -------------------------------------------------------------------------------- 1 | [{ "route": "/" }] 2 | -------------------------------------------------------------------------------- /libs/navbar/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import 'jest-preset-angular/setup-jest'; 2 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import 'jest-preset-angular/setup-jest'; 2 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | 3 | /dist 4 | /coverage 5 | -------------------------------------------------------------------------------- /jest.preset.js: -------------------------------------------------------------------------------- 1 | const nxPreset = require('@nrwl/jest/preset'); 2 | 3 | module.exports = { ...nxPreset }; 4 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | projects: ['/apps/this-is-learning', '/libs/navbar'], 3 | }; 4 | -------------------------------------------------------------------------------- /libs/navbar/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/navbar/navbar.module'; 2 | export * from './lib/navbar/navbar.component'; 3 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io" 4 | } 5 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/favicon.ico -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "printWidth": 120, 4 | "semi": true, 5 | "trailingComma": "all", 6 | "arrowParens": "always" 7 | } 8 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/images/lars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/assets/images/lars.jpg -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/images/ngrx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/assets/images/ngrx.jpg -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/images/ngrx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/assets/images/ngrx.png -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/images/santosh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/assets/images/santosh.jpg -------------------------------------------------------------------------------- /libs/navbar/README.md: -------------------------------------------------------------------------------- 1 | # navbar 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test navbar` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/images/rainbow-nebula.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/assets/images/rainbow-nebula.jpg -------------------------------------------------------------------------------- /apps/this-is-learning/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["jest", "node"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/assets/images/rxjs-logo-DD3DF87EEF-seeklogo.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/this-is-learning/this-is-learning-website/HEAD/apps/this-is-learning/src/assets/images/rxjs-logo-DD3DF87EEF-seeklogo.com.png -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.e2e.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "angular.ng-template", 4 | "nrwl.angular-console", 5 | "esbenp.prettier-vscode", 6 | "firsttris.vscode-jest-runner", 7 | "dbaeumer.vscode-eslint" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'til-home', 5 | templateUrl: './home.component.html', 6 | styleUrls: ['./home.component.scss'], 7 | }) 8 | export class HomeComponent {} 9 | -------------------------------------------------------------------------------- /apps/this-is-learning/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "files": ["src/main.ts", "src/polyfills.ts"], 8 | "include": ["src/**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /scully.this-is-learning.config.ts: -------------------------------------------------------------------------------- 1 | import { ScullyConfig } from '@scullyio/scully'; 2 | 3 | export const config: ScullyConfig = { 4 | projectRoot: './apps/this-is-learning/src', 5 | projectName: 'this-is-learning', 6 | outDir: './dist/static/this-is-learning', 7 | routes: {}, 8 | }; 9 | -------------------------------------------------------------------------------- /libs/navbar/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["**/*.spec.ts", "**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /apps/this-is-learning/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["**/*.spec.ts", "**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /tools/tsconfig.tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "../dist/out-tsc/tools", 5 | "rootDir": ".", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": ["node"], 9 | "importHelpers": false 10 | }, 11 | "include": ["**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /libs/navbar/src/lib/navbar/navbar.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { NavbarComponent } from './navbar.component'; 4 | 5 | @NgModule({ 6 | imports: [CommonModule], 7 | declarations: [NavbarComponent], 8 | exports: [NavbarComponent], 9 | }) 10 | export class NavbarModule {} 11 | -------------------------------------------------------------------------------- /scully/plugins/plugin.ts: -------------------------------------------------------------------------------- 1 | import { registerPlugin, getPluginConfig } from '@scullyio/scully'; 2 | 3 | export const myPlugin = 'myPlugin'; 4 | 5 | const myFunctionPlugin = async (html: string): Promise => { 6 | return html; 7 | }; 8 | 9 | const validator = async () => []; 10 | 11 | registerPlugin('postProcessByHtml', myPlugin, myFunctionPlugin, validator); 12 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; 2 | 3 | @Component({ 4 | changeDetection: ChangeDetectionStrategy.OnPush, 5 | encapsulation: ViewEncapsulation.None, 6 | selector: 'til-app', 7 | templateUrl: './app.component.html', 8 | styleUrls: ['./app.component.scss'], 9 | }) 10 | export class AppComponent {} 11 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ThisIsLearning 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /libs/navbar/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "target": "es2015", 6 | "declaration": true, 7 | "declarationMap": true, 8 | "inlineSources": true, 9 | "types": [], 10 | "lib": ["dom", "es2018"] 11 | }, 12 | "exclude": ["src/test-setup.ts", "**/*.spec.ts"], 13 | "include": ["**/*.ts"] 14 | } 15 | -------------------------------------------------------------------------------- /libs/navbar/src/lib/navbar/navbar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'til-navbar', 5 | templateUrl: './navbar.component.html', 6 | styleUrls: ['./navbar.component.scss'], 7 | encapsulation: ViewEncapsulation.None, 8 | changeDetection: ChangeDetectionStrategy.OnPush, 9 | }) 10 | export class NavbarComponent {} 11 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/styles.scss: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @import url("https://fonts.googleapis.com/css2?family=Lato:wght@300&family=Open+Sans:wght@300&display=swap"); 3 | 4 | * { 5 | box-sizing: border-box; 6 | padding: 0; 7 | margin: 0; 8 | } 9 | 10 | body { 11 | font-family: sans-serif; 12 | 13 | } 14 | 15 | 16 | a{ 17 | text-decoration: none; 18 | } 19 | -------------------------------------------------------------------------------- /apps/this-is-learning/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() 12 | .bootstrapModule(AppModule) 13 | .catch((err) => console.error(err)); 14 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule, Routes } from '@angular/router'; 3 | import { HomeComponent } from './home/home.component'; 4 | 5 | const routes: Routes = [ 6 | { 7 | path: '', 8 | component: HomeComponent, 9 | }, 10 | ]; 11 | 12 | @NgModule({ 13 | imports: [RouterModule.forRoot(routes)], 14 | exports: [RouterModule], 15 | }) 16 | export class AppRoutingModule {} 17 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileServerFolder": ".", 3 | "fixturesFolder": "./src/fixtures", 4 | "integrationFolder": "./src/integration", 5 | "modifyObstructiveCode": false, 6 | "pluginsFile": "./src/plugins/index", 7 | "supportFile": "./src/support/index.ts", 8 | "video": true, 9 | "videosFolder": "../../dist/cypress/apps/this-is-learning-e2e/videos", 10 | "screenshotsFolder": "../../dist/cypress/apps/this-is-learning-e2e/screenshots", 11 | "chromeWebSecurity": false 12 | } 13 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/src/integration/app.spec.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('this-is-learning', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | // Example: cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains('Lars Gyrup Brink Nielsen'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /scully/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "esModuleInterop": true, 5 | "importHelpers": false, 6 | "lib": ["ES2019", "dom"], 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "sourceMap": true, 10 | "target": "es2018", 11 | "types": ["node"], 12 | "skipLibCheck": true, 13 | "skipDefaultLibCheck": true, 14 | "typeRoots": ["../node_modules/@types"], 15 | "allowSyntheticDefaultImports": true 16 | }, 17 | "exclude": ["./**/*spec.ts"] 18 | } 19 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/cypress.ci.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultCommandTimeout": 10000, 3 | "fileServerFolder": ".", 4 | "fixturesFolder": "./src/fixtures", 5 | "integrationFolder": "./src/integration", 6 | "modifyObstructiveCode": false, 7 | "pluginsFile": "./src/plugins/index", 8 | "supportFile": "./src/support/index.ts", 9 | "video": false, 10 | "videosFolder": "../../dist/cypress/apps/this-is-learning-e2e/videos", 11 | "screenshotsFolder": "../../dist/cypress/apps/this-is-learning-e2e/screenshots", 12 | "chromeWebSecurity": false 13 | } 14 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "parserOptions": { 8 | "project": "apps/this-is-learning-e2e/tsconfig.*?.json" 9 | }, 10 | "rules": {} 11 | }, 12 | { 13 | "files": ["src/plugins/index.js"], 14 | "rules": { 15 | "@typescript-eslint/no-var-requires": "off", 16 | "no-undef": "off" 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"], 8 | "forceConsistentCasingInFileNames": true, 9 | "strict": true, 10 | "noImplicitReturns": true, 11 | "noFallthroughCasesInSwitch": true 12 | }, 13 | "include": ["src/**/*.ts", "src/**/*.js"], 14 | "angularCompilerOptions": { 15 | "strictInjectionParameters": true, 16 | "strictInputAccessModifiers": true, 17 | "strictTemplates": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /libs/navbar/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.lib.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "forceConsistentCasingInFileNames": true, 15 | "strict": true, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": true 18 | }, 19 | "angularCompilerOptions": { 20 | "strictInjectionParameters": true, 21 | "strictInputAccessModifiers": true, 22 | "strictTemplates": true 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "rootDir": ".", 5 | "sourceMap": true, 6 | "declaration": false, 7 | "moduleResolution": "node", 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "importHelpers": true, 11 | "target": "es2015", 12 | "module": "esnext", 13 | "lib": ["es2017", "dom"], 14 | "skipLibCheck": true, 15 | "skipDefaultLibCheck": true, 16 | "baseUrl": ".", 17 | "paths": { 18 | "@this-is-learning/navbar": ["libs/navbar/src/index.ts"] 19 | } 20 | }, 21 | "exclude": ["node_modules", "tmp"] 22 | } 23 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { ScullyLibModule } from '@scullyio/ng-lib'; 4 | import { NavbarModule } from '@this-is-learning/navbar'; 5 | import { AppRoutingModule } from './app-routing.module'; 6 | import { AppComponent } from './app.component'; 7 | import { HomeComponent } from './home/home.component'; 8 | 9 | @NgModule({ 10 | bootstrap: [AppComponent], 11 | imports: [BrowserModule, AppRoutingModule, ScullyLibModule, NavbarModule], 12 | declarations: [AppComponent, HomeComponent], 13 | }) 14 | export class AppModule {} 15 | -------------------------------------------------------------------------------- /apps/this-is-learning/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | }, 12 | { 13 | "path": "./tsconfig.editor.json" 14 | } 15 | ], 16 | "compilerOptions": { 17 | "forceConsistentCasingInFileNames": true, 18 | "strict": true, 19 | "noImplicitReturns": true, 20 | "noFallthroughCasesInSwitch": true 21 | }, 22 | "angularCompilerOptions": { 23 | "strictInjectionParameters": true, 24 | "strictInputAccessModifiers": true, 25 | "strictTemplates": true 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/src/support/index.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [HomeComponent], 12 | }).compileComponents(); 13 | }); 14 | 15 | beforeEach(() => { 16 | fixture = TestBed.createComponent(HomeComponent); 17 | component = fixture.componentInstance; 18 | fixture.detectChanges(); 19 | }); 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /apps/this-is-learning/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 | -------------------------------------------------------------------------------- /libs/navbar/src/lib/navbar/navbar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NavbarComponent } from './navbar.component'; 4 | 5 | describe('NavbarComponent', () => { 6 | let component: NavbarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [NavbarComponent], 12 | }).compileComponents(); 13 | }); 14 | 15 | beforeEach(() => { 16 | fixture = TestBed.createComponent(NavbarComponent); 17 | component = fixture.componentInstance; 18 | fixture.detectChanges(); 19 | }); 20 | 21 | it('should create', () => { 22 | expect(component).toBeTruthy(); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /apps/this-is-learning/.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 | -------------------------------------------------------------------------------- /.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 | 41 | # Scully 42 | /scully.log 43 | /scully/plugins/**/*.js 44 | /scully/plugins/**/*.js.map 45 | /scully.*.config.js 46 | -------------------------------------------------------------------------------- /libs/navbar/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | displayName: 'navbar', 3 | preset: '../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | globals: { 6 | 'ts-jest': { 7 | tsconfig: '/tsconfig.spec.json', 8 | stringifyContentPathRegex: '\\.(html|svg)$', 9 | astTransformers: { 10 | before: [ 11 | 'jest-preset-angular/build/InlineFilesTransformer', 12 | 'jest-preset-angular/build/StripStylesTransformer', 13 | ], 14 | }, 15 | }, 16 | }, 17 | coverageDirectory: '../../coverage/libs/navbar', 18 | snapshotSerializers: [ 19 | 'jest-preset-angular/build/serializers/no-ng-attributes', 20 | 'jest-preset-angular/build/serializers/ng-snapshot', 21 | 'jest-preset-angular/build/serializers/html-comment', 22 | ], 23 | }; 24 | -------------------------------------------------------------------------------- /apps/this-is-learning/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | displayName: 'this-is-learning', 3 | preset: '../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | globals: { 6 | 'ts-jest': { 7 | tsconfig: '/tsconfig.spec.json', 8 | stringifyContentPathRegex: '\\.(html|svg)$', 9 | astTransformers: { 10 | before: [ 11 | 'jest-preset-angular/build/InlineFilesTransformer', 12 | 'jest-preset-angular/build/StripStylesTransformer', 13 | ], 14 | }, 15 | }, 16 | }, 17 | coverageDirectory: '../../coverage/apps/this-is-learning', 18 | snapshotSerializers: [ 19 | 'jest-preset-angular/build/serializers/no-ng-attributes', 20 | 'jest-preset-angular/build/serializers/ng-snapshot', 21 | 'jest-preset-angular/build/serializers/html-comment', 22 | ], 23 | }; 24 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "ignorePatterns": ["**/*"], 4 | "plugins": ["@nrwl/nx"], 5 | "overrides": [ 6 | { 7 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 8 | "rules": { 9 | "@nrwl/nx/enforce-module-boundaries": [ 10 | "error", 11 | { 12 | "enforceBuildableLibDependency": true, 13 | "allow": [], 14 | "depConstraints": [ 15 | { 16 | "sourceTag": "*", 17 | "onlyDependOnLibsWithTags": ["*"] 18 | } 19 | ] 20 | } 21 | ] 22 | } 23 | }, 24 | { 25 | "files": ["*.ts", "*.tsx"], 26 | "extends": ["plugin:@nrwl/nx/typescript"], 27 | "rules": {} 28 | }, 29 | { 30 | "files": ["*.js", "*.jsx"], 31 | "extends": ["plugin:@nrwl/nx/javascript"], 32 | "rules": {} 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /libs/navbar/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts"], 7 | "extends": ["plugin:@nrwl/nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], 8 | "rules": { 9 | "@angular-eslint/directive-selector": [ 10 | "error", 11 | { 12 | "type": "attribute", 13 | "prefix": "til", 14 | "style": "camelCase" 15 | } 16 | ], 17 | "@angular-eslint/component-selector": [ 18 | "error", 19 | { 20 | "type": "element", 21 | "prefix": "til", 22 | "style": "kebab-case" 23 | } 24 | ] 25 | } 26 | }, 27 | { 28 | "files": ["*.html"], 29 | "extends": ["plugin:@nrwl/nx/angular-template"], 30 | "rules": {} 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/src/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); 15 | 16 | module.exports = (on, config) => { 17 | // `on` is used to hook into various events Cypress emits 18 | // `config` is the resolved Cypress config 19 | 20 | // Preprocess Typescript file using Nx helper 21 | on('file:preprocessor', preprocessTypescript(config)); 22 | }; 23 | -------------------------------------------------------------------------------- /nx.json: -------------------------------------------------------------------------------- 1 | { 2 | "implicitDependencies": { 3 | "package.json": { 4 | "dependencies": "*", 5 | "devDependencies": "*" 6 | }, 7 | ".eslintrc.json": "*" 8 | }, 9 | "affected": { 10 | "defaultBase": "main" 11 | }, 12 | "npmScope": "this-is-learning", 13 | "tasksRunnerOptions": { 14 | "default": { 15 | "runner": "@nrwl/nx-cloud", 16 | "options": { 17 | "accessToken": "Njc1NTMzMWEtYzhhYy00OTg2LWFkMmYtMjEzZmMwZWYwMTQ2fHJlYWQtd3JpdGU=", 18 | "canTrackAnalytics": false, 19 | "cacheableOperations": ["build", "lint", "test", "e2e"], 20 | "maxParallel": 6, 21 | "parallel": true, 22 | "showUsageWarnings": true 23 | } 24 | } 25 | }, 26 | "projects": { 27 | "this-is-learning": { 28 | "tags": [] 29 | }, 30 | "this-is-learning-e2e": { 31 | "tags": [], 32 | "implicitDependencies": ["this-is-learning"] 33 | }, 34 | "navbar": { 35 | "tags": [] 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /apps/this-is-learning/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts"], 7 | "extends": ["plugin:@nrwl/nx/angular", "plugin:@angular-eslint/template/process-inline-templates"], 8 | "parserOptions": { 9 | "project": ["apps/this-is-learning/tsconfig.*?.json"] 10 | }, 11 | "rules": { 12 | "@angular-eslint/directive-selector": [ 13 | "error", 14 | { 15 | "type": "attribute", 16 | "prefix": "til", 17 | "style": "camelCase" 18 | } 19 | ], 20 | "@angular-eslint/component-selector": [ 21 | "error", 22 | { 23 | "type": "element", 24 | "prefix": "til", 25 | "style": "kebab-case" 26 | } 27 | ] 28 | } 29 | }, 30 | { 31 | "files": ["*.html"], 32 | "extends": ["plugin:@nrwl/nx/angular-template"], 33 | "rules": {} 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /apps/this-is-learning-e2e/src/support/commands.ts: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | 11 | // eslint-disable-next-line @typescript-eslint/no-namespace 12 | declare namespace Cypress { 13 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 14 | interface Chainable { 15 | login(email: string, password: string): void; 16 | } 17 | } 18 | // 19 | // -- This is a parent command -- 20 | Cypress.Commands.add('login', (email, password) => { 21 | console.log('Custom command example: Login', email, password); 22 | }); 23 | // 24 | // -- This is a child command -- 25 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 26 | // 27 | // 28 | // -- This is a dual command -- 29 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 30 | // 31 | // 32 | // -- This will overwrite an existing command -- 33 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 34 | -------------------------------------------------------------------------------- /libs/navbar/src/lib/navbar/navbar.component.html: -------------------------------------------------------------------------------- 1 |
2 | 61 |
62 | -------------------------------------------------------------------------------- /decorate-angular-cli.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file decorates the Angular CLI with the Nx CLI to enable features such as computation caching 3 | * and faster execution of tasks. 4 | * 5 | * It does this by: 6 | * 7 | * - Patching the Angular CLI to warn you in case you accidentally use the undecorated ng command. 8 | * - Symlinking the ng to nx command, so all commands run through the Nx CLI 9 | * - Updating the package.json postinstall script to give you control over this script 10 | * 11 | * The Nx CLI decorates the Angular CLI, so the Nx CLI is fully compatible with it. 12 | * Every command you run should work the same when using the Nx CLI, except faster. 13 | * 14 | * Because of symlinking you can still type `ng build/test/lint` in the terminal. The ng command, in this case, 15 | * will point to nx, which will perform optimizations before invoking ng. So the Angular CLI is always invoked. 16 | * The Nx CLI simply does some optimizations before invoking the Angular CLI. 17 | * 18 | * To opt out of this patch: 19 | * - Replace occurrences of nx with ng in your package.json 20 | * - Remove the script from your postinstall script in your package.json 21 | * - Delete and reinstall your node_modules 22 | */ 23 | 24 | const fs = require('fs'); 25 | const os = require('os'); 26 | const cp = require('child_process'); 27 | const isWindows = os.platform() === 'win32'; 28 | let output; 29 | try { 30 | output = require('@nrwl/workspace').output; 31 | } catch (e) { 32 | console.warn( 33 | 'Angular CLI could not be decorated to enable computation caching. Please ensure @nrwl/workspace is installed.', 34 | ); 35 | process.exit(0); 36 | } 37 | 38 | /** 39 | * Symlink of ng to nx, so you can keep using `ng build/test/lint` and still 40 | * invoke the Nx CLI and get the benefits of computation caching. 41 | */ 42 | function symlinkNgCLItoNxCLI() { 43 | try { 44 | const ngPath = './node_modules/.bin/ng'; 45 | const nxPath = './node_modules/.bin/nx'; 46 | if (isWindows) { 47 | /** 48 | * This is the most reliable way to create symlink-like behavior on Windows. 49 | * Such that it works in all shells and works with npx. 50 | */ 51 | ['', '.cmd', '.ps1'].forEach((ext) => { 52 | if (fs.existsSync(nxPath + ext)) fs.writeFileSync(ngPath + ext, fs.readFileSync(nxPath + ext)); 53 | }); 54 | } else { 55 | // If unix-based, symlink 56 | cp.execSync(`ln -sf ./nx ${ngPath}`); 57 | } 58 | } catch (e) { 59 | output.error({ title: 'Unable to create a symlink from the Angular CLI to the Nx CLI:' + e.message }); 60 | throw e; 61 | } 62 | } 63 | 64 | try { 65 | symlinkNgCLItoNxCLI(); 66 | require('@nrwl/cli/lib/decorate-cli').decorateCli(); 67 | output.log({ title: 'Angular CLI has been decorated to enable computation caching.' }); 68 | } catch (e) { 69 | output.error({ title: 'Decoration of the Angular CLI did not complete successfully' }); 70 | } 71 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/polyfills.ts: -------------------------------------------------------------------------------- 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/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** 22 | * IE11 requires the following for NgClass support on SVG elements 23 | */ 24 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 25 | 26 | /** 27 | * Web Animations `@angular/platform-browser/animations` 28 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 29 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 30 | */ 31 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 32 | 33 | /** 34 | * By default, zone.js will patch all possible macroTask and DomEvents 35 | * user can disable parts of macroTask/DomEvents patch by setting following flags 36 | * because those flags need to be set before `zone.js` being loaded, and webpack 37 | * will put import in the top of bundle, so user need to create a separate file 38 | * in this directory (for example: zone-flags.ts), and put the following flags 39 | * into that file, and then add the following code before importing zone.js. 40 | * import './zone-flags'; 41 | * 42 | * The flags allowed in zone-flags.ts are listed here. 43 | * 44 | * The following flags will work for all browsers. 45 | * 46 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 47 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 48 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 49 | * 50 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 51 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 52 | * 53 | * (window as any).__Zone_enable_cross_context_check = true; 54 | * 55 | */ 56 | 57 | /*************************************************************************************************** 58 | * Zone JS is required by default for Angular itself. 59 | */ 60 | import 'zone.js'; // Included with Angular CLI. 61 | 62 | /*************************************************************************************************** 63 | * APPLICATION IMPORTS 64 | */ 65 | 66 | /*************************************************************************************************** 67 | * SCULLY IMPORTS 68 | */ 69 | import 'zone.js/dist/task-tracking'; 70 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "this-is-learning", 3 | "description": "The This is Learning website.", 4 | "private": true, 5 | "version": "0.0.0", 6 | "license": "MIT", 7 | "scripts": { 8 | "postinstall": "node ./decorate-angular-cli.js && ngcc --properties es2015 browser module main", 9 | "ngcc": "ngcc --first-only --properties es2015 module fesm2015 esm2015 browser main --create-ivy-entry-points", 10 | "ng": "nx", 11 | "nx": "nx", 12 | "start": "nx serve", 13 | "build": "nx build", 14 | "test": "nx test", 15 | "lint": "nx workspace-lint && nx run-many --target=lint --all", 16 | "e2e": "nx e2e this-is-learning-e2e", 17 | "affected:apps": "nx affected:apps", 18 | "affected:libs": "nx affected:libs", 19 | "affected:build": "nx affected:build", 20 | "affected:e2e": "nx affected:e2e", 21 | "affected:test": "nx affected:test", 22 | "affected:lint": "nx workspace-lint && nx affected:lint", 23 | "affected:dep-graph": "nx affected:dep-graph", 24 | "affected": "nx affected", 25 | "format": "nx format:write", 26 | "format:write": "nx format:write", 27 | "format:check": "nx format:check", 28 | "update": "nx migrate latest", 29 | "workspace-generator": "nx workspace-generator", 30 | "dep-graph": "nx dep-graph", 31 | "help": "nx help", 32 | "scully": "scully --noPrompt true", 33 | "scully:serve": "scully serve --noPrompt true" 34 | }, 35 | "dependencies": { 36 | "@angular/animations": "^12.0.0", 37 | "@angular/common": "~12.0.0", 38 | "@angular/compiler": "~12.0.0", 39 | "@angular/core": "~12.0.0", 40 | "@angular/forms": "^12.0.0", 41 | "@angular/platform-browser": "~12.0.0", 42 | "@angular/platform-browser-dynamic": "~12.0.0", 43 | "@angular/router": "~12.0.0", 44 | "@fortawesome/fontawesome-free": "^5.15.4", 45 | "@nrwl/angular": "~12.3.5", 46 | "@scullyio/ng-lib": "^1.1.1", 47 | "@scullyio/scully": "^1.1.1", 48 | "i": "^0.3.6", 49 | "rxjs": "~6.6.0", 50 | "tslib": "^2.1.0", 51 | "zone.js": "~0.11.4" 52 | }, 53 | "devDependencies": { 54 | "@angular-devkit/build-angular": "~12.0.0", 55 | "@angular-eslint/eslint-plugin": "~12.0.0", 56 | "@angular-eslint/eslint-plugin-template": "~12.0.0", 57 | "@angular-eslint/template-parser": "~12.0.0", 58 | "@angular/cli": "~12.0.0", 59 | "@angular/compiler-cli": "~12.0.0", 60 | "@angular/language-service": "~12.0.0", 61 | "@nrwl/cli": "~12.3.5", 62 | "@nrwl/cypress": "~12.3.5", 63 | "@nrwl/eslint-plugin-nx": "~12.3.5", 64 | "@nrwl/jest": "~12.3.5", 65 | "@nrwl/linter": "~12.3.5", 66 | "@nrwl/nx-cloud": "^12.1.3", 67 | "@nrwl/tao": "~12.3.5", 68 | "@nrwl/workspace": "~12.3.5", 69 | "@schematics/angular": "~12.0.0", 70 | "@types/jest": "~26.0.8", 71 | "@types/node": "^14.14.33", 72 | "@typescript-eslint/eslint-plugin": "~4.19.0", 73 | "@typescript-eslint/parser": "~4.19.0", 74 | "cypress": "^7.3.0", 75 | "dotenv": "~8.2.0", 76 | "eslint": "~7.22.0", 77 | "eslint-config-prettier": "~8.1.0", 78 | "eslint-plugin-cypress": "^2.10.3", 79 | "jest": "~26.2.2", 80 | "jest-preset-angular": "~8.4.0", 81 | "prettier": "~2.2.1", 82 | "ts-jest": "~26.5.5", 83 | "ts-node": "~9.1.1", 84 | "typescript": "~4.2.4" 85 | }, 86 | "volta": { 87 | "node": "14.17.0" 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ThisIsLearning 2 | 3 | This project was generated using [Nx](https://nx.dev). 4 | 5 |

6 | 7 | 🔎 **Smart, Extensible Build Framework** 8 | 9 | ## Quick Start & Documentation 10 | 11 | [Nx Documentation](https://nx.dev/angular) 12 | 13 | [10-minute video showing all Nx features](https://nx.dev/angular/getting-started/what-is-nx) 14 | 15 | [Interactive Tutorial](https://nx.dev/angular/tutorial/01-create-application) 16 | 17 | ## Adding capabilities to your workspace 18 | 19 | Nx supports many plugins which add capabilities for developing different types of applications and different tools. 20 | 21 | These capabilities include generating applications, libraries, etc as well as the devtools to test, and build projects as well. 22 | 23 | Below are our core plugins: 24 | 25 | - [Angular](https://angular.io) 26 | - `ng add @nrwl/angular` 27 | - [React](https://reactjs.org) 28 | - `ng add @nrwl/react` 29 | - Web (no framework frontends) 30 | - `ng add @nrwl/web` 31 | - [Nest](https://nestjs.com) 32 | - `ng add @nrwl/nest` 33 | - [Express](https://expressjs.com) 34 | - `ng add @nrwl/express` 35 | - [Node](https://nodejs.org) 36 | - `ng add @nrwl/node` 37 | 38 | There are also many [community plugins](https://nx.dev/nx-community) you could add. 39 | 40 | ## Generate an application 41 | 42 | Run `ng g @nrwl/angular:app my-app` to generate an application. 43 | 44 | > You can use any of the plugins above to generate applications as well. 45 | 46 | When using Nx, you can create multiple applications and libraries in the same workspace. 47 | 48 | ## Generate a library 49 | 50 | Run `ng g @nrwl/angular:lib my-lib` to generate a library. 51 | 52 | > You can also use any of the plugins above to generate libraries as well. 53 | 54 | Libraries are shareable across libraries and applications. They can be imported from `@this-is-learning/mylib`. 55 | 56 | ## Development server 57 | 58 | Run `ng serve my-app` for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files. 59 | 60 | ## Code scaffolding 61 | 62 | Run `ng g component my-component --project=my-app` to generate a new component. 63 | 64 | ## Build 65 | 66 | Run `ng build my-app` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. 67 | 68 | ## Running unit tests 69 | 70 | Run `ng test my-app` to execute the unit tests via [Jest](https://jestjs.io). 71 | 72 | Run `nx affected:test` to execute the unit tests affected by a change. 73 | 74 | ## Running end-to-end tests 75 | 76 | Run `ng e2e my-app` to execute the end-to-end tests via [Cypress](https://www.cypress.io). 77 | 78 | Run `nx affected:e2e` to execute the end-to-end tests affected by a change. 79 | 80 | ## Understand your workspace 81 | 82 | Run `nx dep-graph` to see a diagram of the dependencies of your projects. 83 | 84 | ## Further help 85 | 86 | Visit the [Nx Documentation](https://nx.dev/angular) to learn more. 87 | 88 | ## ☁ Nx Cloud 89 | 90 | ### Distributed Computation Caching & Distributed Task Execution 91 | 92 |

93 | 94 | Nx Cloud pairs with Nx in order to enable you to build and test code more rapidly, by up to 10 times. Even teams that are new to Nx can connect to Nx Cloud and start saving time instantly. 95 | 96 | Teams using Nx gain the advantage of building full-stack applications with their preferred framework alongside Nx’s advanced code generation and project dependency graph, plus a unified experience for both frontend and backend developers. 97 | 98 | Visit [Nx Cloud](https://nx.app/) to learn more. 99 | -------------------------------------------------------------------------------- /libs/navbar/src/lib/navbar/navbar.component.scss: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 100%; 3 | margin: 0 auto; 4 | overflow: auto; 5 | padding: 0 40px; 6 | } 7 | .navbar { 8 | background-color: transparent; 9 | height: 70px; 10 | } 11 | 12 | .header-fixed { 13 | position: fixed; 14 | top: 0; 15 | z-index: 1; 16 | width: 100%; 17 | background: #020c29; 18 | border-bottom: 1px solid gold; 19 | } 20 | 21 | .navbar { 22 | display: flex; 23 | justify-content: space-between; 24 | align-items: center; 25 | color: #fff; 26 | line-height: 50px; 27 | } 28 | 29 | .navbar .logo a:hover { 30 | color: #777777; 31 | } 32 | 33 | .navbar nav { 34 | flex: 8; 35 | } 36 | 37 | .navbar label { 38 | -webkit-user-select: none; 39 | user-select: none; 40 | cursor: pointer; 41 | position: relative; 42 | z-index: 3; 43 | /* margin-left: 75px; */ 44 | /* float: right; */ 45 | } 46 | 47 | .navbar label i { 48 | height: 2px; 49 | position: relative; 50 | transition: background 0.2s ease-out; 51 | width: 18px; 52 | font-style: normal; 53 | font-weight: normal; 54 | } 55 | .navbar label i:before, 56 | .navbar label i:after { 57 | content: ''; 58 | height: 100%; 59 | position: absolute; 60 | transition: all 0.2s ease-out; 61 | width: 100%; 62 | } 63 | .navbar label i, 64 | .navbar label i:before { 65 | display: block; 66 | background: #eee; 67 | } 68 | .navbar label i:after { 69 | display: block; 70 | background: white; 71 | } 72 | .navbar label i:before { 73 | top: 5px; 74 | } 75 | .navbar label i:after { 76 | top: -5px; 77 | } 78 | 79 | .navbar #navbar-toggle { 80 | display: none; 81 | } 82 | 83 | .header #navbar-toggle:checked ~ .menu { 84 | visibility: visible; 85 | opacity: 0.99; 86 | overflow-y: auto; 87 | padding: 0px 0px; 88 | } 89 | .header #navbar-toggle:checked ~ label { 90 | background: #212121; 91 | border-radius: 50%; 92 | } 93 | // .header #navbar-toggle:checked ~ label i { 94 | // background: transparent; 95 | // } 96 | .header #navbar-toggle:checked ~ label i:before { 97 | transform: rotate(-45deg); 98 | } 99 | .header #navbar-toggle:checked ~ label i:after { 100 | transform: rotate(45deg); 101 | } 102 | .header #navbar-toggle:checked ~ label:not(.steps) i:before, 103 | .header #navbar-toggle:checked ~ label:not(.steps) i:after { 104 | top: 0; 105 | } 106 | 107 | .navbar nav a:hover { 108 | border-bottom: 2px green solid; 109 | } 110 | 111 | @media (max-width: 768px) { 112 | .navbar nav { 113 | visibility: hidden; 114 | opacity: 0; 115 | z-index: 2; 116 | position: fixed; 117 | top: 0px; 118 | left: 0px; 119 | height: 100%; 120 | transition: all 0.3s ease-out; 121 | display: block; 122 | background: #ddd; 123 | background-color: #4fa04f; 124 | } 125 | .navbar nav a:hover { 126 | border-bottom: 2px rgb(128, 0, 53) solid; 127 | } 128 | .navbar nav ul { 129 | margin: 0; 130 | padding: 60px 0; 131 | display: table-cell; 132 | vertical-align: middle; 133 | } 134 | .navbar nav li { 135 | display: block; 136 | text-align: center; 137 | text-align: center; 138 | min-height: 50px; 139 | font-weight: bold; 140 | cursor: pointer; 141 | transition: all 0.3s ease-out; 142 | } 143 | .navbar nav li a { 144 | color: #212121; 145 | } 146 | } 147 | 148 | @media (min-width: 768px) { 149 | .navbar nav ul { 150 | margin: 0; 151 | padding: 0; 152 | display: flex; 153 | justify-content: space-around; 154 | text-align: center; 155 | list-style: none; 156 | } 157 | 158 | .navbar nav li a { 159 | padding: 5px 8px; 160 | font-size: 16px; 161 | color: #fff; 162 | text-decoration: none; 163 | } 164 | 165 | .navbar label { 166 | display: none; 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: This is Learning CI 2 | 3 | env: 4 | NODE_OPTIONS: --max-old-space-size=6144 5 | NX_BRANCH: ${{ github.event.number }} 6 | NX_MAX_PARALLEL: 2 7 | NX_RUN_GROUP: ${{ github.run_id }} 8 | node-version: 14.x 9 | package-name: this-is-learning-package 10 | 11 | on: 12 | push: 13 | branches: 14 | - main 15 | pull_request: {} 16 | workflow_dispatch: {} 17 | 18 | jobs: 19 | lint: 20 | name: Lint and check 21 | runs-on: ubuntu-latest 22 | 23 | steps: 24 | - uses: actions/checkout@v2 25 | 26 | - name: Use Node.js ${{ env.node-version }} 27 | uses: actions/setup-node@v2 28 | with: 29 | node-version: ${{ env.node-version }} 30 | 31 | - name: Variable-Yarn cache directory path 32 | id: yarn-cache-dir-path 33 | run: echo "::set-output name=dir::$(yarn cache dir)" 34 | - name: Cache Yarn cache directory 35 | uses: actions/cache@v2 36 | with: 37 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 38 | key: ${{ runner.os }}-node-${{ env.node-version }}-yarn-${{ hashFiles('yarn.lock') }} 39 | restore-keys: | 40 | ${{ runner.os }}-node-${{ env.node-version }}- 41 | ${{ runner.os }}- 42 | - name: Install dependencies 43 | run: yarn install 44 | 45 | - run: yarn lint --max-parallel=$NX_MAX_PARALLEL 46 | 47 | test: 48 | name: Unit and integration test 49 | runs-on: ubuntu-latest 50 | 51 | steps: 52 | - uses: actions/checkout@v2 53 | 54 | - name: Use Node.js ${{ env.node-version }} 55 | uses: actions/setup-node@v2 56 | with: 57 | node-version: ${{ env.node-version }} 58 | 59 | - name: Variable-Yarn cache directory path 60 | id: yarn-cache-dir-path 61 | run: echo "::set-output name=dir::$(yarn cache dir)" 62 | - name: Cache Yarn cache directory 63 | uses: actions/cache@v2 64 | with: 65 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 66 | key: ${{ runner.os }}-node-${{ env.node-version }}-yarn-${{ hashFiles('yarn.lock') }} 67 | restore-keys: | 68 | ${{ runner.os }}-node-${{ env.node-version }}- 69 | ${{ runner.os }}- 70 | - name: Install dependencies 71 | run: yarn install 72 | - name: Run Angular Compatibility Compiler 73 | run: yarn ngcc 74 | 75 | - run: yarn test --max-parallel=$NX_MAX_PARALLEL 76 | 77 | build: 78 | name: Build 79 | runs-on: ubuntu-latest 80 | 81 | steps: 82 | - uses: actions/checkout@v2 83 | 84 | - name: Use Node.js ${{ env.node-version }} 85 | uses: actions/setup-node@v2 86 | with: 87 | node-version: ${{ env.node-version }} 88 | 89 | - name: Variable-Yarn cache directory path 90 | id: yarn-cache-dir-path 91 | run: echo "::set-output name=dir::$(yarn cache dir)" 92 | - name: Cache Yarn cache directory 93 | uses: actions/cache@v2 94 | with: 95 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 96 | key: ${{ runner.os }}-node-${{ env.node-version }}-yarn-${{ hashFiles('yarn.lock') }} 97 | restore-keys: | 98 | ${{ runner.os }}-node-${{ env.node-version }}- 99 | ${{ runner.os }}- 100 | - name: Install dependencies 101 | run: yarn install 102 | - name: Run Angular Compatibility Compiler 103 | run: yarn ngcc 104 | 105 | - run: yarn build --max-parallel=$NX_MAX_PARALLEL 106 | - run: yarn scully 107 | 108 | - name: Upload static website package 109 | uses: actions/upload-artifact@v2 110 | with: 111 | name: ${{ env.package-name }} 112 | path: dist/static/this-is-learning 113 | if-no-files-found: error 114 | 115 | deploy: 116 | name: Deploy 117 | if: > 118 | github.ref == 'refs/heads/main' && 119 | (github.event_name == 'workflow_dispatch' || github.event_name == 'push') 120 | needs: 121 | - build 122 | - e2e 123 | - test 124 | runs-on: ubuntu-latest 125 | 126 | env: 127 | package-path: ./this-is-learning 128 | 129 | steps: 130 | - uses: actions/checkout@v2 131 | 132 | - uses: actions/download-artifact@v2 133 | with: 134 | name: ${{ env.package-name }} 135 | path: ${{ env.package-path }} 136 | 137 | - name: Disable Jekyll on GitHub Pages 138 | run: touch ${{ env.package-path }}/.nojekyll 139 | 140 | - name: Deploy to GitHub Pages 141 | uses: JamesIves/github-pages-deploy-action@4.1.3 142 | with: 143 | branch: gh-pages 144 | folder: ${{ env.package-path }} 145 | 146 | e2e: 147 | name: End-to-end test 148 | runs-on: ubuntu-latest 149 | 150 | steps: 151 | - uses: actions/checkout@v2 152 | 153 | - name: Use Node.js ${{ env.node-version }} 154 | uses: actions/setup-node@v2 155 | with: 156 | node-version: ${{ env.node-version }} 157 | 158 | - name: Variable-Yarn cache directory path 159 | id: yarn-cache-dir-path 160 | run: echo "::set-output name=dir::$(yarn cache dir)" 161 | - name: Cache Yarn cache directory 162 | uses: actions/cache@v2 163 | with: 164 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 165 | key: ${{ runner.os }}-node-${{ env.node-version }}-yarn-${{ hashFiles('yarn.lock') }} 166 | restore-keys: | 167 | ${{ runner.os }}-node-${{ env.node-version }}- 168 | ${{ runner.os }}- 169 | - name: Install dependencies 170 | run: yarn install 171 | - name: Run Angular Compatibility Compiler 172 | run: yarn ngcc 173 | 174 | - run: yarn e2e --configuration=ci --max-parallel=$NX_MAX_PARALLEL 175 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/home/home.component.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .container { 4 | max-width: 100%; 5 | margin: 0 auto; 6 | overflow: auto; 7 | padding: 0 40px; 8 | } 9 | 10 | .card { 11 | color: #333; 12 | border-radius: 10px; 13 | box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); 14 | padding: 20px; 15 | margin: 10px; 16 | } 17 | 18 | .text-center { 19 | text-align: center; 20 | } 21 | 22 | .grid { 23 | display: grid; 24 | grid-template-columns: repeat(2, 1fr); 25 | gap: 20px; 26 | justify-content: center; 27 | align-items: center; 28 | height: 100%; 29 | } 30 | 31 | .grid-3 { 32 | grid-template-columns: repeat(3, 1fr); 33 | color: brown; 34 | } 35 | 36 | .grid-resource { 37 | grid-template-columns: repeat(3, 1fr); 38 | } 39 | 40 | .my-2 { 41 | margin: 1.5rem 0; 42 | } 43 | 44 | .my-4 { 45 | margin: 3rem 0; 46 | } 47 | 48 | .py-5 { 49 | padding: 3rem; 50 | } 51 | 52 | h1, 53 | h2 { 54 | line-height: 1; 55 | margin: 10px 0; 56 | } 57 | 58 | p { 59 | margin: 10px 0; 60 | } 61 | 62 | img { 63 | width: 100%; 64 | } 65 | 66 | /* Showcase */ 67 | .showcase { 68 | height: 650px; 69 | background-color: #020c29; 70 | color: #fff; 71 | position: relative; 72 | z-index: 0; 73 | } 74 | 75 | .showcase h1 { 76 | font-size: 40px; 77 | text-align: center; 78 | } 79 | 80 | .showcase p { 81 | margin: 20px 0; 82 | } 83 | 84 | .showcase .grid { 85 | overflow: visible; 86 | grid-template-columns: repeat(3, 1fr); 87 | gap: 30px; 88 | margin-top: 70px; 89 | } 90 | 91 | .showcase-text { 92 | animation: slideInFromLeft 1s ease-in; 93 | top: -115px; 94 | position: relative; 95 | } 96 | 97 | .showcase-text p { 98 | font-size: x-large; 99 | } 100 | 101 | .showcase-form { 102 | position: relative; 103 | bottom: 170px; 104 | height: 200px; 105 | width: 300px; 106 | padding: 40px; 107 | z-index: 100; 108 | justify-self: center; 109 | animation: slideInFromRight 1s ease-in; 110 | } 111 | 112 | .showcase::before, 113 | .showcase::after { 114 | content: ''; 115 | position: absolute; 116 | height: 1px; 117 | bottom: -2px; 118 | right: 0; 119 | left: 0; 120 | border-bottom: 1px solid gold; 121 | background: linear-gradient(250deg, #0f0125 10%, #020c29 86%); 122 | transform: skewY(-3deg); 123 | /* -webkit-transform: skewY(-3deg); */ 124 | -moz-transform: skewY(-3deg); 125 | -ms-transform: skewY(-3deg); 126 | } 127 | 128 | /* Stats */ 129 | .stats { 130 | padding-top: 250px; 131 | background-color: #020c29; 132 | } 133 | .stats .card { 134 | height: 300px; 135 | transition: transform 0.2s ease-in; 136 | cursor: pointer; 137 | } 138 | .stats .card h2 a { 139 | text-align: start; 140 | color: #f4f4f4; 141 | font-size: 26px; 142 | } 143 | .stats .card h2 a:hover { 144 | border-bottom: 2px green solid; 145 | } 146 | .title { 147 | font-weight: 100; 148 | color: transparent; 149 | font-size: 65px; 150 | background: url('../../assets/images/rainbow-nebula.jpg') repeat; 151 | background-position: 40% 50%; 152 | -webkit-background-clip: text; 153 | position: relative; 154 | text-align: center; 155 | } 156 | 157 | .stats .card h4:nth-child(3) { 158 | text-align: start; 159 | color: #f4f4f4; 160 | font-size: 16px; 161 | } 162 | .stats-heading { 163 | max-width: 500px; 164 | margin: auto; 165 | } 166 | 167 | .stats .grid h3 { 168 | font-size: 35px; 169 | } 170 | 171 | .stats .grid p { 172 | font-size: 20px; 173 | font-weight: bold; 174 | } 175 | 176 | .footer { 177 | border-top: 0.1px solid gold; 178 | background-color: #020c29; 179 | } 180 | .footer h1 { 181 | padding-bottom: 0px; 182 | font-size: larger; 183 | } 184 | .footer .social a { 185 | margin: 0 10px; 186 | } 187 | .fa-2x{ 188 | color:white; 189 | } 190 | .fa-2x:hover{ 191 | border:1px solid white; 192 | border-radius: 5px; 193 | } 194 | .fa-brands:hover { 195 | color: #5cb85c; 196 | } 197 | 198 | .fa-github:hover { 199 | cursor: pointer; 200 | } 201 | 202 | .fa-facebook:hover { 203 | color: #1773ea; 204 | } 205 | 206 | .fa-instagram:hover { 207 | color: #b32e87; 208 | } 209 | 210 | .fa-twitter:hover { 211 | color: #1c9cea; 212 | } 213 | 214 | /* Animations */ 215 | @keyframes slideInFromLeft { 216 | 0% { 217 | transform: translateX(-100%); 218 | } 219 | 220 | 100% { 221 | transform: translateX(0); 222 | } 223 | } 224 | 225 | @keyframes slideInFromRight { 226 | 0% { 227 | transform: translateX(100%); 228 | } 229 | 230 | 100% { 231 | transform: translateX(0); 232 | } 233 | } 234 | 235 | @keyframes slideInFromTop { 236 | 0% { 237 | transform: translateY(-100%); 238 | } 239 | 240 | 100% { 241 | transform: translateX(0); 242 | } 243 | } 244 | 245 | @keyframes slideInFromBottom { 246 | 0% { 247 | transform: translateY(100%); 248 | } 249 | 250 | 100% { 251 | transform: translateX(0); 252 | } 253 | } 254 | 255 | /* Tablets and under */ 256 | @media (max-width: 768px) { 257 | .grid, 258 | .showcase .grid, 259 | .stats .grid { 260 | grid-template-columns: 1fr; 261 | grid-template-rows: 1fr; 262 | } 263 | 264 | .showcase { 265 | height: auto; 266 | } 267 | 268 | .showcase-text { 269 | text-align: center; 270 | margin-top: 40px; 271 | animation: slideInFromTop 1s ease-in; 272 | margin-top: -90px; 273 | padding-top: 0px !important; 274 | } 275 | 276 | .showcase-form { 277 | justify-self: center; 278 | margin: auto; 279 | animation: slideInFromBottom 1s ease-in; 280 | 281 | width: 300px; 282 | bottom: -415px; 283 | height: 200px; 284 | margin-top: 10px; 285 | } 286 | 287 | .stats { 288 | padding-top: 750px; 289 | } 290 | 291 | .santosh { 292 | bottom: -450px; 293 | } 294 | } 295 | 296 | /* Mobile */ 297 | @media (max-width: 500px) { 298 | .showcase-form { 299 | width: 300px; 300 | bottom: -530px; 301 | height: 200px; 302 | } 303 | .santosh { 304 | bottom: -455px; 305 | } 306 | } 307 | 308 | @media (max-width: 1450px) { 309 | .showcase-text { 310 | padding-top: 120px; 311 | } 312 | } 313 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 1, 3 | "cli": { 4 | "defaultCollection": "@nrwl/angular" 5 | }, 6 | "defaultProject": "this-is-learning", 7 | "schematics": { 8 | "@nrwl/angular:application": { 9 | "style": "scss", 10 | "linter": "eslint", 11 | "unitTestRunner": "jest", 12 | "e2eTestRunner": "cypress", 13 | "tags": "type:app", 14 | "viewEncapsulation": "None" 15 | }, 16 | "@nrwl/angular:library": { 17 | "style": "scss", 18 | "linter": "eslint", 19 | "unitTestRunner": "jest" 20 | }, 21 | "@nrwl/angular:storybook-configuration": { 22 | "linter": "eslint" 23 | }, 24 | "@schematics/angular:component": { 25 | "changeDetection": "OnPush", 26 | "displayBlock": true, 27 | "export": true, 28 | "style": "scss", 29 | "viewEncapsulation": "None" 30 | }, 31 | "@nrwl/angular:component": { 32 | "style": "scss" 33 | } 34 | }, 35 | "projects": { 36 | "this-is-learning": { 37 | "projectType": "application", 38 | "root": "apps/this-is-learning", 39 | "sourceRoot": "apps/this-is-learning/src", 40 | "prefix": "til", 41 | "architect": { 42 | "build": { 43 | "builder": "@angular-devkit/build-angular:browser", 44 | "options": { 45 | "outputPath": "dist/apps/this-is-learning/browser", 46 | "index": "apps/this-is-learning/src/index.html", 47 | "main": "apps/this-is-learning/src/main.ts", 48 | "polyfills": "apps/this-is-learning/src/polyfills.ts", 49 | "tsConfig": "apps/this-is-learning/tsconfig.app.json", 50 | "inlineStyleLanguage": "scss", 51 | "assets": ["apps/this-is-learning/src/favicon.ico", "apps/this-is-learning/src/assets"], 52 | "styles": [ 53 | "apps/this-is-learning/src/styles.scss", 54 | "node_modules/@fortawesome/fontawesome-free/css/all.min.css" 55 | ], 56 | "scripts": [] 57 | }, 58 | "configurations": { 59 | "production": { 60 | "budgets": [ 61 | { 62 | "type": "initial", 63 | "maximumWarning": "500kb", 64 | "maximumError": "1mb" 65 | }, 66 | { 67 | "type": "anyComponentStyle", 68 | "maximumWarning": "2kb", 69 | "maximumError": "4kb" 70 | } 71 | ], 72 | "fileReplacements": [ 73 | { 74 | "replace": "apps/this-is-learning/src/environments/environment.ts", 75 | "with": "apps/this-is-learning/src/environments/environment.prod.ts" 76 | } 77 | ], 78 | "outputHashing": "all", 79 | "optimization": { 80 | "scripts": true, 81 | "styles": { 82 | "inlineCritical": false, 83 | "minify": true 84 | }, 85 | "fonts": { 86 | "inline": false 87 | } 88 | } 89 | }, 90 | "development": { 91 | "buildOptimizer": false, 92 | "optimization": false, 93 | "vendorChunk": true, 94 | "extractLicenses": false, 95 | "sourceMap": true, 96 | "namedChunks": true 97 | } 98 | }, 99 | "defaultConfiguration": "production" 100 | }, 101 | "serve": { 102 | "builder": "@angular-devkit/build-angular:dev-server", 103 | "configurations": { 104 | "production": { 105 | "browserTarget": "this-is-learning:build:production" 106 | }, 107 | "development": { 108 | "browserTarget": "this-is-learning:build:development" 109 | } 110 | }, 111 | "defaultConfiguration": "development" 112 | }, 113 | "extract-i18n": { 114 | "builder": "@angular-devkit/build-angular:extract-i18n", 115 | "options": { 116 | "browserTarget": "this-is-learning:build" 117 | } 118 | }, 119 | "lint": { 120 | "builder": "@nrwl/linter:eslint", 121 | "options": { 122 | "lintFilePatterns": ["apps/this-is-learning/src/**/*.ts", "apps/this-is-learning/src/**/*.html"] 123 | } 124 | }, 125 | "test": { 126 | "builder": "@nrwl/jest:jest", 127 | "outputs": ["coverage/apps/this-is-learning"], 128 | "options": { 129 | "jestConfig": "apps/this-is-learning/jest.config.js", 130 | "passWithNoTests": true 131 | } 132 | } 133 | } 134 | }, 135 | "this-is-learning-e2e": { 136 | "root": "apps/this-is-learning-e2e", 137 | "sourceRoot": "apps/this-is-learning-e2e/src", 138 | "projectType": "application", 139 | "architect": { 140 | "e2e": { 141 | "builder": "@nrwl/cypress:cypress", 142 | "options": { 143 | "cypressConfig": "apps/this-is-learning-e2e/cypress.json", 144 | "tsConfig": "apps/this-is-learning-e2e/tsconfig.e2e.json", 145 | "devServerTarget": "this-is-learning:serve:development", 146 | "browser": "chrome" 147 | }, 148 | "configurations": { 149 | "ci": { 150 | "cypressConfig": "apps/this-is-learning-e2e/cypress.ci.json", 151 | "headless": true 152 | }, 153 | "production": { 154 | "devServerTarget": "this-is-learning:serve:production" 155 | } 156 | } 157 | }, 158 | "lint": { 159 | "builder": "@nrwl/linter:eslint", 160 | "options": { 161 | "lintFilePatterns": ["apps/this-is-learning-e2e/**/*.{js,ts}"] 162 | } 163 | } 164 | } 165 | }, 166 | 167 | "navbar": { 168 | "projectType": "library", 169 | "root": "libs/navbar", 170 | "sourceRoot": "libs/navbar/src", 171 | "prefix": "til", 172 | "architect": { 173 | "test": { 174 | "builder": "@nrwl/jest:jest", 175 | "outputs": ["coverage/libs/navbar"], 176 | "options": { 177 | "jestConfig": "libs/navbar/jest.config.js", 178 | "passWithNoTests": true 179 | } 180 | }, 181 | "lint": { 182 | "builder": "@nrwl/linter:eslint", 183 | "options": { 184 | "lintFilePatterns": ["libs/navbar/src/**/*.ts", "libs/navbar/src/**/*.html"] 185 | } 186 | } 187 | } 188 | } 189 | } 190 | } 191 | -------------------------------------------------------------------------------- /apps/this-is-learning/src/app/home/home.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 |
7 | 8 |
9 | 10 |
11 |

Lars Gyrup Brink Nielsen

12 |

13 | Co-Founder @Thisis_Learning @aarhusjs ✍️ Writer, Speaker, FOSS Maintainer 🏆 Microsoft MVP 🌟 GitHub Star 📗 14 | Author of Accelerating Angular Development with Ivy 15 |

16 |
17 |
18 |

This is Learning

19 |

Free, open and honest software education.

20 |

21 | Inclusive software development publication free from conflict of interest. This publication is all about sharing 22 | software development knowledge for free and not at all about money or KPIs. Cross-posts are welcome. 23 |

24 |
25 |
26 | 27 |
28 | 29 |
30 |

Santosh Yadav

31 |

GoogleDevExpert,github 🌟, OSS Advocate 🥑 @Auth0 Ambassador Co-Founder @Thisis_Learning

32 |
33 |
34 |
35 | 36 | 37 |
38 |
39 |

40 |
Free Resources
41 |

42 |
43 |
44 |

This is Learning on dev.to

45 | 46 |

47 | An open community for content creators in the tech space. Anyone can join, anyone can publish. Join to 48 | cross-post your content for better discoverability or publish unique pieces with our community of writers and 49 | readers. 50 |

51 |
52 | 53 |
54 |

This is Learning Twitter

55 | 56 |

57 | Follow on twitter for Free, open and honest software education. Inclusive software development publication 58 | free from conflict of interest 59 |

60 |
61 |
62 |

63 | 64 | This is Learning Newsletter 66 |

67 | 68 |

69 | Subscribe to our newsletter , A newsletter that helps you discover useful content from our catalogue of free, 70 | open, and honest software education. 71 |

72 |
73 |
74 |

This is Learning Angular(Twitter)

75 | 76 |

77 | Follow on twitter for Free, open and honest Angular education. Inclusive Angular publication free from 78 | conflict of interest. 79 |

80 |
81 |
82 |

This is Learning Angular(DEV)

83 | 84 |

85 | An open community for content creators in the Angular () ecosystem. Anyone 86 | can join, anyone can publish. Join to cross-post your content for better discoverability or publish unique 87 | pieces with our community of writers and readers. 88 |

89 |
90 |
91 |

92 | 93 | 94 | Fundamentals 95 | 96 |

97 | 98 |

99 | RxJS is a library for reactive programming using Observables, to make it easier to compose asynchronous or 100 | callback-based code. This project is a rewrite of Reactive-Extensions/RxJS with better performance, better 101 | modularity, better debuggable call stacks, while staying mostly backwards compatible, with some breaking 102 | changes that reduce the API surface 103 |

104 |
105 | 106 |
107 |

108 | 109 | NgRx 110 | Essentials 111 | 112 |

113 | 114 |

115 | NgRx Store provides reactive state management for Angular apps inspired by Redux. Unify the events in your 116 | application and derive state using RxJS. 117 |

118 |
119 |
120 |

This is Tech Talks

121 | 122 |

123 | In this talk show, we will have some awesome developers, talking/sharing some great content from the 124 | programming language they work on. We will discuss new features/tools/changes to the technology you love and 125 | follow. 126 |

127 |
128 |
129 |

This is Learning

130 | 131 |

132 | Any kind of contribution welcomes ,We appreciate your time and effort to help others to provide free, open and 133 | honest software education. 134 |

135 |
136 |
137 |

This is Learning-Discord

138 | 139 |

Join Our Discord server for sharing some great content from the programming language.

140 |
141 |
142 |

This is Learning Conference

143 | 144 |

145 | Explore our extensive library of recorded content from the May 2024 This is Learning online conference, covering topics such as web and mobile development, cloud and backend services, software engineering, AI/ML, and CI/CD. 146 |

147 |
148 |
149 |
150 |
151 | 152 | 153 | 168 | --------------------------------------------------------------------------------