diff --git a/.all-contributorsrc b/.all-contributorsrc
index f82debe..41b441c 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -26,9 +26,9 @@
"symbol": "🇵🇹",
"description": "Translate in Portuguese"
},
- "translation-pt-BR": {
- "symbol": "🇧🇷",
- "description": "Translate in Brazilian Portuguese"
+ "translation-ru": {
+ "symbol": "🇷🇺",
+ "description": "Translate in Russian"
}
},
"contributors": [
@@ -47,6 +47,38 @@
"translation-fr"
]
},
+ {
+ "login": "jdegand",
+ "name": "J. Degand",
+ "avatar_url": "https://avatars.githubusercontent.com/u/70610011?v=4",
+ "profile": "https://github.com/jdegand",
+ "contributions": [
+ "doc",
+ "content",
+ "code"
+ ]
+ },
+ {
+ "login": "DeveshChau",
+ "name": "Devesh Chaudhari",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9509673?v=4",
+ "profile": "https://github.com/DeveshChau",
+ "contributions": [
+ "code",
+ "bug",
+ "challenge"
+ ]
+ },
+ {
+ "login": "stillst",
+ "name": "stillst",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1463098?v=4",
+ "profile": "https://github.com/stillst",
+ "contributions": [
+ "challenge",
+ "translation-ru"
+ ]
+ },
{
"login": "alan-bio",
"name": "Alan Dragicevich",
@@ -94,26 +126,6 @@
"code"
]
},
- {
- "login": "jdegand",
- "name": "J. Degand",
- "avatar_url": "https://avatars.githubusercontent.com/u/70610011?v=4",
- "profile": "https://github.com/jdegand",
- "contributions": [
- "doc"
- ]
- },
- {
- "login": "DeveshChau",
- "name": "Devesh Chaudhari",
- "avatar_url": "https://avatars.githubusercontent.com/u/9509673?v=4",
- "profile": "https://github.com/DeveshChau",
- "contributions": [
- "code",
- "bug",
- "challenge"
- ]
- },
{
"login": "dmmishchenko",
"name": "Dmitriy Mishchenko",
@@ -157,13 +169,32 @@
"avatar_url": "https://avatars.githubusercontent.com/u/142346548?v=4",
"profile": "https://github.com/kabrunko-dev/",
"contributions": [
- "translation-pt-BR",
+ "code",
+ "translation-pt",
+ "doc"
+ ]
+ },
+ {
+ "login": "ErickRodrCodes",
+ "name": "Erick Rodriguez",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1978642?v=4",
+ "profile": "http://www.streamoverlaypro.com",
+ "contributions": [
+ "translation-es"
+ ]
+ },
+ {
+ "login": "eduardoRoth",
+ "name": "Eduardo Roth",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5419161?v=4",
+ "profile": "https://eduardoroth.dev",
+ "contributions": [
"doc",
- "code"
+ "translation-es"
]
}
],
"contributorsPerLine": 7,
"linkToUsage": true,
"commitType": "docs"
-}
+}
\ No newline at end of file
diff --git a/.github/workflows/close-inactive-pr.yml b/.github/workflows/close-inactive-pr.yml
index 19a62db..d92c25c 100644
--- a/.github/workflows/close-inactive-pr.yml
+++ b/.github/workflows/close-inactive-pr.yml
@@ -16,10 +16,12 @@ jobs:
days-before-issue-close: -1
stale-issue-label: 'stale'
stale-issue-message: 'This issue is stale because it has been open for 20 days with no activity.'
+ exempt-issue-labels: 'long-term'
days-before-pr-stale: 20
days-before-pr-close: 7
stale-pr-label: 'stale'
stale-pr-message: 'This pull request is stale because it has been open for 20 days with no activity.'
close-pr-message: 'This pull request was closed because it has been inactive for 7 days since being marked as stale.'
only-pr-labels: 'answer'
+ exempt-pr-labels: 'challenge-creation, long-term'
repo-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index b0decd9..5472d6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,7 +19,6 @@ node_modules
# IDE - VSCode
.vscode/*
-!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
@@ -41,4 +40,4 @@ Thumbs.db
.angular
TODO.md
-.nx/cache
\ No newline at end of file
+.nx/cache
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 1471fb9..e0a1291 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,6 @@
{
- "eslint.validate": ["json"]
+ "eslint.validate": [
+ "json"
+ ],
+ "cSpell.language": "en,es-ES"
}
diff --git a/README.md b/README.md
index 25713df..af4d668 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ If you would like to propose a challenge, this project is open source, so feel f
## Challenges
-Check [all 40 challenges](https://angular-challenges.vercel.app/)
+Check [all 43 challenges](https://angular-challenges.vercel.app/)
## Contributors ✨
@@ -35,20 +35,25 @@ Check [all 40 challenges](https://angular-challenges.vercel.app/)
 Laforge Thomas 🧩 💻 📖 🖋 🤔 🎨 🇫🇷 |
+  J. Degand 📖 🖋 💻 |
+  Devesh Chaudhari 💻 🐛 🧩 |
+  stillst 🧩 🇷🇺 |
 Alan Dragicevich 📖 |
 Michel EDIGHOFFER 📖 |
 Gerardo Sebastian Gonzalez 📖 |
-  Evseev Yuriy 🐛 |
-  Tomer953 🐛 📖 💻 |
-  J. Degand 📖 |
-  Devesh Chaudhari 💻 🐛 🧩 |
+  Evseev Yuriy 🐛 |
+  Tomer953 🐛 📖 💻 |
 Dmitriy Mishchenko 📖 |
 Sagar Devkota 📖 💻 |
 Nelson Gutierrez 🇪🇸 |
 Hossain K. M. 📖 |
-  Diogo Nishikawa 🇧🇷 📖 💻 |
+  Diogo Nishikawa 🇵🇹 📖 💻 |
+
+
+  Erick Rodriguez 🇪🇸 |
+  Eduardo Roth 📖 🇪🇸 |
diff --git a/apps/angular/anchor-scrolling/jest.config.ts b/apps/angular/anchor-scrolling/jest.config.ts
index 6915111..1665728 100644
--- a/apps/angular/anchor-scrolling/jest.config.ts
+++ b/apps/angular/anchor-scrolling/jest.config.ts
@@ -2,7 +2,7 @@
export default {
displayName: 'angular-anchor-scrolling',
preset: '../../../jest.preset.js',
- setupFilesAfterEnv: ['/src/test-setup.ts'],
+ setupFilesAfterEnv: ['/src/subscription-setup.ts'],
coverageDirectory: '../../../coverage/apps/angular/anchor-scrolling',
transform: {
'^.+\\.(ts|mjs|js|html)$': [
diff --git a/apps/angular/anchor-scrolling/src/app/app.component.ts b/apps/angular/anchor-scrolling/src/app/app.component.ts
index 5a930fb..3fb7c5d 100644
--- a/apps/angular/anchor-scrolling/src/app/app.component.ts
+++ b/apps/angular/anchor-scrolling/src/app/app.component.ts
@@ -5,6 +5,8 @@ import { RouterOutlet } from '@angular/router';
standalone: true,
imports: [RouterOutlet],
selector: 'app-root',
- template: ` `,
+ template: `
+
+ `,
})
export class AppComponent {}
diff --git a/apps/angular/anchor-scrolling/src/app/foo.component.ts b/apps/angular/anchor-scrolling/src/app/foo.component.ts
index a5109a8..87f9b59 100644
--- a/apps/angular/anchor-scrolling/src/app/foo.component.ts
+++ b/apps/angular/anchor-scrolling/src/app/foo.component.ts
@@ -7,7 +7,7 @@ import { NavButtonComponent } from './nav-button.component';
selector: 'app-foo',
template: `
Welcome to foo page
- Home Page
+ Home Page
section 1
section 2
`,
diff --git a/apps/angular/anchor-scrolling/src/app/home.component.ts b/apps/angular/anchor-scrolling/src/app/home.component.ts
index 836a198..0f24ff6 100644
--- a/apps/angular/anchor-scrolling/src/app/home.component.ts
+++ b/apps/angular/anchor-scrolling/src/app/home.component.ts
@@ -6,7 +6,7 @@ import { NavButtonComponent } from './nav-button.component';
imports: [NavButtonComponent],
selector: 'app-home',
template: `
- Foo Page
+ Foo Page
Empty
Scroll Bottom
diff --git a/apps/angular/anchor-scrolling/src/index.html b/apps/angular/anchor-scrolling/src/index.html
index 9a98ab3..7a2a4b3 100644
--- a/apps/angular/anchor-scrolling/src/index.html
+++ b/apps/angular/anchor-scrolling/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/angular/anchor-scrolling/src/main.ts b/apps/angular/anchor-scrolling/src/main.ts
index 4ecc5cf..7961924 100644
--- a/apps/angular/anchor-scrolling/src/main.ts
+++ b/apps/angular/anchor-scrolling/src/main.ts
@@ -1,8 +1,8 @@
-import { appConfig } from './app/app.config';
import { bootstrapApplication } from '@angular/platform-browser';
+import { appConfig } from './app/app.config';
import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent, appConfig).catch((err) =>
- console.error(err)
+ console.error(err),
);
diff --git a/apps/angular/bug-cd/jest.config.ts b/apps/angular/bug-cd/jest.config.ts
index 1f24a7c..ded316d 100644
--- a/apps/angular/bug-cd/jest.config.ts
+++ b/apps/angular/bug-cd/jest.config.ts
@@ -2,7 +2,7 @@
export default {
displayName: 'angular-bug-cd',
preset: '../../../jest.preset.js',
- setupFilesAfterEnv: ['
/src/test-setup.ts'],
+ setupFilesAfterEnv: ['/src/subscription-setup.ts'],
coverageDirectory: '../../../coverage/apps/angular/bug-cd',
transform: {
'^.+\\.(ts|mjs|js|html)$': [
diff --git a/apps/angular/bug-cd/src/app/app.component.ts b/apps/angular/bug-cd/src/app/app.component.ts
index 3b45baa..046492f 100644
--- a/apps/angular/bug-cd/src/app/app.component.ts
+++ b/apps/angular/bug-cd/src/app/app.component.ts
@@ -6,7 +6,7 @@ import { RouterOutlet } from '@angular/router';
imports: [RouterOutlet],
selector: 'app-root',
template: `
- My Application
+ My Application
diff --git a/apps/angular/bug-cd/src/app/bar.component.ts b/apps/angular/bug-cd/src/app/bar.component.ts
index 26eef1e..b7a5392 100644
--- a/apps/angular/bug-cd/src/app/bar.component.ts
+++ b/apps/angular/bug-cd/src/app/bar.component.ts
@@ -2,6 +2,8 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-bar',
standalone: true,
- template: ` BarComponent `,
+ template: `
+ BarComponent
+ `,
})
export class BarComponent {}
diff --git a/apps/angular/bug-cd/src/app/foo.component.ts b/apps/angular/bug-cd/src/app/foo.component.ts
index 8006ecb..a5b1207 100644
--- a/apps/angular/bug-cd/src/app/foo.component.ts
+++ b/apps/angular/bug-cd/src/app/foo.component.ts
@@ -2,6 +2,8 @@ import { Component } from '@angular/core';
@Component({
selector: 'app-foo',
standalone: true,
- template: `Foo Component `,
+ template: `
+ Foo Component
+ `,
})
export class FooComponent {}
diff --git a/apps/angular/bug-cd/src/app/main-navigation.component.ts b/apps/angular/bug-cd/src/app/main-navigation.component.ts
index c30281a..c8a6f6d 100644
--- a/apps/angular/bug-cd/src/app/main-navigation.component.ts
+++ b/apps/angular/bug-cd/src/app/main-navigation.component.ts
@@ -15,7 +15,7 @@ interface MenuItem {
template: `
{{ menu.name }}
diff --git a/apps/angular/bug-cd/src/index.html b/apps/angular/bug-cd/src/index.html
index c05f415..ab925a7 100644
--- a/apps/angular/bug-cd/src/index.html
+++ b/apps/angular/bug-cd/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/angular/bug-cd/src/main.ts b/apps/angular/bug-cd/src/main.ts
index 514c89a..f3a7223 100644
--- a/apps/angular/bug-cd/src/main.ts
+++ b/apps/angular/bug-cd/src/main.ts
@@ -1,7 +1,7 @@
import { bootstrapApplication } from '@angular/platform-browser';
-import { appConfig } from './app/app.config';
import { AppComponent } from './app/app.component';
+import { appConfig } from './app/app.config';
bootstrapApplication(AppComponent, appConfig).catch((err) =>
- console.error(err)
+ console.error(err),
);
diff --git a/apps/angular/context-outlet-type/src/app/list.component.ts b/apps/angular/context-outlet-type/src/app/list.component.ts
index 4c58a1c..5212a42 100644
--- a/apps/angular/context-outlet-type/src/app/list.component.ts
+++ b/apps/angular/context-outlet-type/src/app/list.component.ts
@@ -17,11 +17,10 @@ import {
*ngTemplateOutlet="
listTemplateRef || emptyRef;
context: { $implicit: item, appList: item, index: i }
- ">
-
+ ">
- No Template
+ No Template
`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
diff --git a/apps/angular/context-outlet-type/src/app/person.component.ts b/apps/angular/context-outlet-type/src/app/person.component.ts
index 4c33ae3..1550cf2 100644
--- a/apps/angular/context-outlet-type/src/app/person.component.ts
+++ b/apps/angular/context-outlet-type/src/app/person.component.ts
@@ -17,7 +17,7 @@ interface Person {
context: { $implicit: person.name, age: person.age }
">
- No Template
+ No Template
`,
})
export class PersonComponent {
diff --git a/apps/angular/context-outlet-type/src/index.html b/apps/angular/context-outlet-type/src/index.html
index 0f087d3..b3ee6c6 100644
--- a/apps/angular/context-outlet-type/src/index.html
+++ b/apps/angular/context-outlet-type/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/angular/crud/jest.config.ts b/apps/angular/crud/jest.config.ts
index 74a17f1..4850991 100644
--- a/apps/angular/crud/jest.config.ts
+++ b/apps/angular/crud/jest.config.ts
@@ -2,7 +2,7 @@
export default {
displayName: 'angular-crud',
preset: '../../../jest.preset.js',
- setupFilesAfterEnv: ['/src/test-setup.ts'],
+ setupFilesAfterEnv: ['/src/subscription-setup.ts'],
globals: {},
coverageDirectory: '../../../coverage/apps/angular/crud',
transform: {
diff --git a/apps/angular/crud/src/app/app.component.ts b/apps/angular/crud/src/app/app.component.ts
index 400d403..8c3d1b8 100644
--- a/apps/angular/crud/src/app/app.component.ts
+++ b/apps/angular/crud/src/app/app.component.ts
@@ -42,7 +42,7 @@ export class AppComponent implements OnInit {
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
- }
+ },
)
.subscribe((todoUpdated: any) => {
this.todos[todoUpdated.id - 1] = todoUpdated;
diff --git a/apps/angular/crud/src/app/app.config.ts b/apps/angular/crud/src/app/app.config.ts
index cf4075b..de0a3cc 100644
--- a/apps/angular/crud/src/app/app.config.ts
+++ b/apps/angular/crud/src/app/app.config.ts
@@ -1,6 +1,5 @@
-import { ApplicationConfig } from '@angular/core';
-import { enableProdMode, importProvidersFrom } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
+import { ApplicationConfig, importProvidersFrom } from '@angular/core';
export const appConfig: ApplicationConfig = {
providers: [importProvidersFrom(HttpClientModule)],
};
diff --git a/apps/angular/crud/src/index.html b/apps/angular/crud/src/index.html
index 601c359..c556437 100644
--- a/apps/angular/crud/src/index.html
+++ b/apps/angular/crud/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/angular/crud/src/main.ts b/apps/angular/crud/src/main.ts
index ea9f26c..9bb5c30 100644
--- a/apps/angular/crud/src/main.ts
+++ b/apps/angular/crud/src/main.ts
@@ -4,5 +4,5 @@ import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent, appConfig).catch((err) =>
- console.error(err)
+ console.error(err),
);
diff --git a/apps/angular/decoupling/src/app/app.component.ts b/apps/angular/decoupling/src/app/app.component.ts
index e595318..34082c3 100644
--- a/apps/angular/decoupling/src/app/app.component.ts
+++ b/apps/angular/decoupling/src/app/app.component.ts
@@ -6,6 +6,8 @@ import { Component } from '@angular/core';
standalone: true,
imports: [BtnDisabledDirective, BtnHelmetDirective],
selector: 'app-root',
- template: ` `,
+ template: `
+
+ `,
})
export class AppComponent {}
diff --git a/apps/angular/decoupling/src/index.html b/apps/angular/decoupling/src/index.html
index c1bf2b7..25b5ea1 100644
--- a/apps/angular/decoupling/src/index.html
+++ b/apps/angular/decoupling/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/angular/di/src/app/app.component.ts b/apps/angular/di/src/app/app.component.ts
index bacff72..e57a5a5 100644
--- a/apps/angular/di/src/app/app.component.ts
+++ b/apps/angular/di/src/app/app.component.ts
@@ -16,7 +16,7 @@ interface ProductContext {
export class ProductDirective {
static ngTemplateContextGuard(
dir: ProductDirective,
- ctx: unknown
+ ctx: unknown,
): ctx is ProductContext {
return true;
}
diff --git a/apps/angular/di/src/app/currency.pipe.ts b/apps/angular/di/src/app/currency.pipe.ts
index 1c8fcc0..9d90e52 100644
--- a/apps/angular/di/src/app/currency.pipe.ts
+++ b/apps/angular/di/src/app/currency.pipe.ts
@@ -11,7 +11,7 @@ export class CurrencyPipe implements PipeTransform {
transform(price: number) {
return this.currencyService.symbol$.pipe(
- map((s) => `${String(price)}${s}`)
+ map((s) => `${String(price)}${s}`),
);
}
}
diff --git a/apps/angular/di/src/app/currency.service.ts b/apps/angular/di/src/app/currency.service.ts
index 076ffa1..38b403e 100644
--- a/apps/angular/di/src/app/currency.service.ts
+++ b/apps/angular/di/src/app/currency.service.ts
@@ -20,7 +20,7 @@ export const currency: Currency[] = [
export class CurrencyService extends ComponentStore<{ code: string }> {
readonly code$ = this.select((state) => state.code);
readonly symbol$ = this.code$.pipe(
- map((code) => currency.find((c) => c.code === code)?.symbol ?? code)
+ map((code) => currency.find((c) => c.code === code)?.symbol ?? code),
);
constructor() {
diff --git a/apps/angular/di/src/index.html b/apps/angular/di/src/index.html
index 98e94c0..c120f5b 100644
--- a/apps/angular/di/src/index.html
+++ b/apps/angular/di/src/index.html
@@ -1,4 +1,4 @@
-
+
diff --git a/apps/angular/injection-token/jest.config.ts b/apps/angular/injection-token/jest.config.ts
index d7105f8..c48bb49 100644
--- a/apps/angular/injection-token/jest.config.ts
+++ b/apps/angular/injection-token/jest.config.ts
@@ -2,7 +2,7 @@
export default {
displayName: 'angular-injection-token',
preset: '../../../jest.preset.js',
- setupFilesAfterEnv: ['/src/test-setup.ts'],
+ setupFilesAfterEnv: ['/src/subscription-setup.ts'],
coverageDirectory: '../../../coverage/apps/angular/injection-token',
transform: {
'^.+\\.(ts|mjs|js|html)$': [
diff --git a/apps/angular/injection-token/src/app/app.component.ts b/apps/angular/injection-token/src/app/app.component.ts
index 51cf42e..5ac8087 100644
--- a/apps/angular/injection-token/src/app/app.component.ts
+++ b/apps/angular/injection-token/src/app/app.component.ts
@@ -5,15 +5,17 @@ import { RouterLink, RouterOutlet } from '@angular/router';
standalone: true,
imports: [RouterOutlet, RouterLink],
selector: 'app-root',
- template: `
-