From e036e1f277d2d7b6ed5d512c66de399c93ebcc43 Mon Sep 17 00:00:00 2001 From: Brandy Carney Date: Wed, 18 Dec 2024 12:23:13 -0500 Subject: [PATCH] chore(angular): update dependencies for v19, use latest control flow syntax and build (#1858) --- README.md | 19 +++--- angular-standalone/base/angular.json | 16 +++-- angular-standalone/base/package.json | 48 +++++++------- .../base/src/app/app.component.ts | 1 - angular-standalone/base/tsconfig.json | 2 +- .../official/blank/src/app/app.component.ts | 1 - .../official/blank/src/app/home/home.page.ts | 1 - .../official/list/src/app/app.component.ts | 1 - .../official/list/src/app/home/home.page.html | 10 +-- .../official/list/src/app/home/home.page.ts | 5 +- .../src/app/message/message.component.html | 64 ++++++++++--------- .../list/src/app/message/message.component.ts | 5 +- .../app/view-message/view-message.page.html | 63 +++++++++--------- .../src/app/view-message/view-message.page.ts | 5 +- .../sidemenu/src/app/app.component.html | 24 ++++--- .../sidemenu/src/app/app.component.ts | 5 +- .../sidemenu/src/app/folder/folder.page.ts | 1 - .../official/tabs/src/app/app.component.ts | 1 - .../explore-container.component.ts | 1 - .../official/tabs/src/app/tab1/tab1.page.ts | 1 - .../official/tabs/src/app/tab2/tab2.page.ts | 1 - .../official/tabs/src/app/tab3/tab3.page.ts | 1 - .../official/tabs/src/app/tabs/tabs.page.ts | 1 - angular/base/.eslintrc.json | 1 + angular/base/package.json | 46 ++++++------- angular/base/src/app/app.component.ts | 1 + angular/community/ionic-team/enterprise-tabs | 2 +- .../official/blank/src/app/home/home.page.ts | 1 + .../official/list/src/app/home/home.page.html | 10 +-- .../official/list/src/app/home/home.page.ts | 1 + .../src/app/message/message.component.html | 36 ++++++----- .../list/src/app/message/message.component.ts | 1 + .../app/view-message/view-message.page.html | 43 +++++++------ .../src/app/view-message/view-message.page.ts | 3 +- .../sidemenu/src/app/app-routing.module.ts | 2 +- .../sidemenu/src/app/app.component.html | 24 ++++--- .../sidemenu/src/app/app.component.ts | 1 + .../sidemenu/src/app/folder/folder.page.ts | 1 + .../explore-container.component.ts | 1 + .../official/tabs/src/app/tab1/tab1.page.ts | 3 +- .../official/tabs/src/app/tab2/tab2.page.ts | 3 +- .../official/tabs/src/app/tab3/tab3.page.ts | 3 +- .../official/tabs/src/app/tabs/tabs.page.ts | 3 +- vue-vite/base/package.json | 4 +- 44 files changed, 245 insertions(+), 222 deletions(-) diff --git a/README.md b/README.md index afb800461..b20b06766 100644 --- a/README.md +++ b/README.md @@ -12,17 +12,20 @@ feature requests. ### Starters -Project Type | Description | Links ---------------------|-------------------------------------------------------|------- -**`angular`** | Ionic Angular 4+ w/ Angular CLI for Tooling | [base template](https://github.com/ionic-team/starters/tree/main/angular/base) / [starter templates](https://github.com/ionic-team/starters/tree/main/angular/official) -**`ionic-angular`** | Ionic Angular 2/3 w/ `@ionic/app-scripts` for Tooling | [base template](https://github.com/ionic-team/starters/tree/main/ionic-angular/base) / [starter templates](https://github.com/ionic-team/starters/tree/main/ionic-angular/official) -**`ionic1`** | Ionic 1 w/ AngularJS | [base template](https://github.com/ionic-team/starters/tree/main/ionic1/base) / [starter templates](https://github.com/ionic-team/starters/tree/main/ionic1/official) -**`react`** | React 16+ w/ react-scripts for Tooling | [base template](https://github.com/ionic-team/starters/tree/main/react/base) / [starter templates](https://github.com/ionic-team/starters/tree/main/react/official) -**`vue`** | Vue 3+ w/ @vue/cli-service for Tooling | [base template](https://github.com/ionic-team/starters/tree/main/vue/base) / [starter templates](https://github.com/ionic-team/starters/tree/main/vue/official) +Project Type | Ionic Framework Version | Framework Version | Build Tool | Template Links | Notes +-------------------------------------|-------------------------|-------------------|--------------------------|---------------------------------------------------------------------------| ---- +**`ionic1`** | 1 | AngularJS | | [Base](ionic1/base) / [Starters](ionic1/official) | Legacy framework; supports AngularJS only. +**`ionic-angular`** | 2/3 | Angular (2+) | `@ionic/app-scripts` | [Base](ionic-angular/base) / [Starters](ionic-angular/official) | Uses legacy build tool; Angular CLI unsupported. +**`angular`** | 4+ | Angular (4+) | Angular CLI | [Base](angular/base) / [Starters](angular/official) | Modern Angular CLI tooling. +**`angular-standalone`** | 6+ | Angular (8+) | Angular CLI | [Base](angular-standalone/base) / [Starters](angular-standalone/official) | Supports standalone components introduced in Angular 8. +**`react` (Ionic CLI v6 and below)** | 4.11+ | React (16+) | `react-scripts` | [Base](react/base) / [Starters](react/official) | Uses Create React App; supports React Hooks. +**`react` (Ionic CLI v7+)** | 4.11+ | React (17+) | Vite (`vite`) | [Base](react-vite/base) / [Starters](react-vite/official) | Vite-based tooling for modern React development. +**`vue` (Ionic CLI v6 and below)** | 5.4+ | Vue (3+) | `@vue/cli-service` | [Base](vue/base) / [Starters](vue/official) | Uses Vue CLI; supports Vue Composition API. +**`vue` (Ionic CLI v7+)** | 5.4+ | Vue (3+) | Vite (`@vite/cli`) | [Base](vue-vite/base) / [Starters](vue-vite/official) | Vite-based tooling for modern Vue development. ### Integrations -* [Cordova](https://github.com/ionic-team/starters/tree/main/integrations/cordova) +* [Cordova](integrations/cordova) [ionic-support]: https://ionicframework.com/support diff --git a/angular-standalone/base/angular.json b/angular-standalone/base/angular.json index 454190cd3..2d1d1e6b8 100644 --- a/angular-standalone/base/angular.json +++ b/angular-standalone/base/angular.json @@ -16,12 +16,15 @@ "prefix": "app", "architect": { "build": { - "builder": "@angular-devkit/build-angular:browser", + "builder": "@angular-devkit/build-angular:application", "options": { - "outputPath": "www", + "outputPath": { + "base": "www" + }, "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", + "polyfills": [ + "src/polyfills.ts" + ], "tsConfig": "tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": [ @@ -32,7 +35,8 @@ } ], "styles": ["src/global.scss", "src/theme/variables.scss"], - "scripts": [] + "scripts": [], + "browser": "src/main.ts" }, "configurations": { "production": { @@ -57,9 +61,7 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, "sourceMap": true, "namedChunks": true diff --git a/angular-standalone/base/package.json b/angular-standalone/base/package.json index e25f30f54..4d000929c 100644 --- a/angular-standalone/base/package.json +++ b/angular-standalone/base/package.json @@ -13,35 +13,35 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.0.0", - "@angular/common": "^18.0.0", - "@angular/compiler": "^18.0.0", - "@angular/core": "^18.0.0", - "@angular/forms": "^18.0.0", - "@angular/platform-browser": "^18.0.0", - "@angular/platform-browser-dynamic": "^18.0.0", - "@angular/router": "^18.0.0", + "@angular/animations": "^19.0.0", + "@angular/common": "^19.0.0", + "@angular/compiler": "^19.0.0", + "@angular/core": "^19.0.0", + "@angular/forms": "^19.0.0", + "@angular/platform-browser": "^19.0.0", + "@angular/platform-browser-dynamic": "^19.0.0", + "@angular/router": "^19.0.0", "@ionic/angular": "^8.0.0", - "ionicons": "^7.2.1", + "ionicons": "^7.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", - "zone.js": "~0.14.2" + "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.0.0", - "@angular-eslint/builder": "^18.0.0", - "@angular-eslint/eslint-plugin": "^18.0.0", - "@angular-eslint/eslint-plugin-template": "^18.0.0", - "@angular-eslint/schematics": "^18.0.0", - "@angular-eslint/template-parser": "^18.0.0", - "@angular/cli": "^18.0.0", - "@angular/compiler-cli": "^18.0.0", - "@angular/language-service": "^18.0.0", - "@ionic/angular-toolkit": "^11.0.1", + "@angular-devkit/build-angular": "^19.0.0", + "@angular-eslint/builder": "^19.0.0", + "@angular-eslint/eslint-plugin": "^19.0.0", + "@angular-eslint/eslint-plugin-template": "^19.0.0", + "@angular-eslint/schematics": "^19.0.0", + "@angular-eslint/template-parser": "^19.0.0", + "@angular/cli": "^19.0.0", + "@angular/compiler-cli": "^19.0.0", + "@angular/language-service": "^19.0.0", + "@ionic/angular-toolkit": "^12.0.0", "@types/jasmine": "~5.1.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.57.0", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", + "eslint": "^9.16.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsdoc": "^48.2.1", "eslint-plugin-prefer-arrow": "1.2.2", @@ -52,6 +52,6 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.4.0" + "typescript": "~5.6.3" } } diff --git a/angular-standalone/base/src/app/app.component.ts b/angular-standalone/base/src/app/app.component.ts index cc533ddaa..079c763c8 100644 --- a/angular-standalone/base/src/app/app.component.ts +++ b/angular-standalone/base/src/app/app.component.ts @@ -5,7 +5,6 @@ import { IonApp } from '@ionic/angular/standalone'; selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.scss'], - standalone: true, imports: [IonApp], }) export class AppComponent { diff --git a/angular-standalone/base/tsconfig.json b/angular-standalone/base/tsconfig.json index 6d869b48c..893b5bdbc 100644 --- a/angular-standalone/base/tsconfig.json +++ b/angular-standalone/base/tsconfig.json @@ -5,6 +5,7 @@ "baseUrl": "./", "outDir": "./dist/out-tsc", "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, @@ -12,7 +13,6 @@ "noFallthroughCasesInSwitch": true, "sourceMap": true, "declaration": false, - "downlevelIteration": true, "experimentalDecorators": true, "moduleResolution": "node", "importHelpers": true, diff --git a/angular-standalone/official/blank/src/app/app.component.ts b/angular-standalone/official/blank/src/app/app.component.ts index c5ba44f19..1da531b74 100644 --- a/angular-standalone/official/blank/src/app/app.component.ts +++ b/angular-standalone/official/blank/src/app/app.component.ts @@ -4,7 +4,6 @@ import { IonApp, IonRouterOutlet } from '@ionic/angular/standalone'; @Component({ selector: 'app-root', templateUrl: 'app.component.html', - standalone: true, imports: [IonApp, IonRouterOutlet], }) export class AppComponent { diff --git a/angular-standalone/official/blank/src/app/home/home.page.ts b/angular-standalone/official/blank/src/app/home/home.page.ts index bd0b20423..dca8b7705 100644 --- a/angular-standalone/official/blank/src/app/home/home.page.ts +++ b/angular-standalone/official/blank/src/app/home/home.page.ts @@ -5,7 +5,6 @@ import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/stan selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], - standalone: true, imports: [IonHeader, IonToolbar, IonTitle, IonContent], }) export class HomePage { diff --git a/angular-standalone/official/list/src/app/app.component.ts b/angular-standalone/official/list/src/app/app.component.ts index c5ba44f19..1da531b74 100644 --- a/angular-standalone/official/list/src/app/app.component.ts +++ b/angular-standalone/official/list/src/app/app.component.ts @@ -4,7 +4,6 @@ import { IonApp, IonRouterOutlet } from '@ionic/angular/standalone'; @Component({ selector: 'app-root', templateUrl: 'app.component.html', - standalone: true, imports: [IonApp, IonRouterOutlet], }) export class AppComponent { diff --git a/angular-standalone/official/list/src/app/home/home.page.html b/angular-standalone/official/list/src/app/home/home.page.html index 0f7b24956..bbdc656f4 100644 --- a/angular-standalone/official/list/src/app/home/home.page.html +++ b/angular-standalone/official/list/src/app/home/home.page.html @@ -10,7 +10,7 @@ - + @@ -18,8 +18,10 @@ - + - + @for (message of getMessages(); track message) { + + } - \ No newline at end of file + diff --git a/angular-standalone/official/list/src/app/home/home.page.ts b/angular-standalone/official/list/src/app/home/home.page.ts index f427c8c9e..9aa2ddb19 100644 --- a/angular-standalone/official/list/src/app/home/home.page.ts +++ b/angular-standalone/official/list/src/app/home/home.page.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; + import { Component, inject } from '@angular/core'; import { RefresherCustomEvent, IonHeader, IonToolbar, IonTitle, IonContent, IonRefresher, IonRefresherContent, IonList } from '@ionic/angular/standalone'; import { MessageComponent } from '../message/message.component'; @@ -9,8 +9,7 @@ import { DataService, Message } from '../services/data.service'; selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], - standalone: true, - imports: [CommonModule, IonHeader, IonToolbar, IonTitle, IonContent, IonRefresher, IonRefresherContent, IonList, MessageComponent], + imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonRefresher, IonRefresherContent, IonList, MessageComponent], }) export class HomePage { private data = inject(DataService); diff --git a/angular-standalone/official/list/src/app/message/message.component.html b/angular-standalone/official/list/src/app/message/message.component.html index 953a8e139..e5128308d 100644 --- a/angular-standalone/official/list/src/app/message/message.component.html +++ b/angular-standalone/official/list/src/app/message/message.component.html @@ -1,31 +1,33 @@ - -
- -

- {{ message.fromName }} - - {{ message.date }} - - -

-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim - veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea - commodo consequat. Duis aute irure dolor in reprehenderit in voluptate - velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id - est laborum. -

-
-
+@if (message) { + +
+ +

+ {{ message.fromName }} + + {{ message.date }} + @if (isIos()) { + + } + +

+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate + velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+
+
+} diff --git a/angular-standalone/official/list/src/app/message/message.component.ts b/angular-standalone/official/list/src/app/message/message.component.ts index 605c68c36..75a6d09f1 100644 --- a/angular-standalone/official/list/src/app/message/message.component.ts +++ b/angular-standalone/official/list/src/app/message/message.component.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; + import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core'; import { RouterLink } from '@angular/router'; import { Platform, IonItem, IonLabel, IonNote, IonIcon } from '@ionic/angular/standalone'; @@ -11,8 +11,7 @@ import { Message } from '../services/data.service'; templateUrl: './message.component.html', styleUrls: ['./message.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, - standalone: true, - imports: [CommonModule, RouterLink, IonItem, IonLabel, IonNote, IonIcon], + imports: [RouterLink, IonItem, IonLabel, IonNote, IonIcon], }) export class MessageComponent { private platform = inject(Platform); diff --git a/angular-standalone/official/list/src/app/view-message/view-message.page.html b/angular-standalone/official/list/src/app/view-message/view-message.page.html index d2042b64b..c6ae550f6 100644 --- a/angular-standalone/official/list/src/app/view-message/view-message.page.html +++ b/angular-standalone/official/list/src/app/view-message/view-message.page.html @@ -9,34 +9,35 @@ - - - - -

- {{ message.fromName }} - - {{ message.date }} - -

-

To: Me

-
-
- -
-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim - veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea - commodo consequat. Duis aute irure dolor in reprehenderit in voluptate - velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id - est laborum. -

-
-
+@if (message) { + + + + +

+ {{ message.fromName }} + + {{ message.date }} + +

+

To: Me

+
+
+
+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim + veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate + velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat + cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id + est laborum. +

+
+
+} diff --git a/angular-standalone/official/list/src/app/view-message/view-message.page.ts b/angular-standalone/official/list/src/app/view-message/view-message.page.ts index 8864d088e..062b88c94 100644 --- a/angular-standalone/official/list/src/app/view-message/view-message.page.ts +++ b/angular-standalone/official/list/src/app/view-message/view-message.page.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; + import { Component, inject, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Platform, IonHeader, IonToolbar, IonButtons, IonBackButton, IonContent, IonItem, IonIcon, IonLabel, IonNote } from '@ionic/angular/standalone'; @@ -10,8 +10,7 @@ import { DataService, Message } from '../services/data.service'; selector: 'app-view-message', templateUrl: './view-message.page.html', styleUrls: ['./view-message.page.scss'], - standalone: true, - imports: [CommonModule, IonHeader, IonToolbar, IonButtons, IonBackButton, IonContent, IonItem, IonIcon, IonLabel, IonNote], + imports: [IonHeader, IonToolbar, IonButtons, IonBackButton, IonContent, IonItem, IonIcon, IonLabel, IonNote], }) export class ViewMessagePage implements OnInit { public message!: Message; diff --git a/angular-standalone/official/sidemenu/src/app/app.component.html b/angular-standalone/official/sidemenu/src/app/app.component.html index cd12488d5..eaa3ed35a 100644 --- a/angular-standalone/official/sidemenu/src/app/app.component.html +++ b/angular-standalone/official/sidemenu/src/app/app.component.html @@ -6,21 +6,25 @@ Inbox hi@ionicframework.com - - - - {{ p.title }} - - + @for (p of appPages; track p; let i = $index) { + + + + {{ p.title }} + + + } Labels - - - {{ label }} - + @for (label of labels; track label) { + + + {{ label }} + + } diff --git a/angular-standalone/official/sidemenu/src/app/app.component.ts b/angular-standalone/official/sidemenu/src/app/app.component.ts index a373b03e0..8679fa5b6 100644 --- a/angular-standalone/official/sidemenu/src/app/app.component.ts +++ b/angular-standalone/official/sidemenu/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; + import { Component } from '@angular/core'; import { RouterLink, RouterLinkActive } from '@angular/router'; import { IonApp, IonSplitPane, IonMenu, IonContent, IonList, IonListHeader, IonNote, IonMenuToggle, IonItem, IonIcon, IonLabel, IonRouterOutlet, IonRouterLink } from '@ionic/angular/standalone'; @@ -9,8 +9,7 @@ import { mailOutline, mailSharp, paperPlaneOutline, paperPlaneSharp, heartOutlin selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.scss'], - standalone: true, - imports: [RouterLink, RouterLinkActive, CommonModule, IonApp, IonSplitPane, IonMenu, IonContent, IonList, IonListHeader, IonNote, IonMenuToggle, IonItem, IonIcon, IonLabel, IonRouterLink, IonRouterOutlet], + imports: [RouterLink, RouterLinkActive, IonApp, IonSplitPane, IonMenu, IonContent, IonList, IonListHeader, IonNote, IonMenuToggle, IonItem, IonIcon, IonLabel, IonRouterLink, IonRouterOutlet], }) export class AppComponent { public appPages = [ diff --git a/angular-standalone/official/sidemenu/src/app/folder/folder.page.ts b/angular-standalone/official/sidemenu/src/app/folder/folder.page.ts index a33a5e5e8..3c00733fe 100644 --- a/angular-standalone/official/sidemenu/src/app/folder/folder.page.ts +++ b/angular-standalone/official/sidemenu/src/app/folder/folder.page.ts @@ -6,7 +6,6 @@ import { IonHeader, IonToolbar, IonButtons, IonMenuButton, IonTitle, IonContent selector: 'app-folder', templateUrl: './folder.page.html', styleUrls: ['./folder.page.scss'], - standalone: true, imports: [IonHeader, IonToolbar, IonButtons, IonMenuButton, IonTitle, IonContent], }) export class FolderPage implements OnInit { diff --git a/angular-standalone/official/tabs/src/app/app.component.ts b/angular-standalone/official/tabs/src/app/app.component.ts index c5ba44f19..1da531b74 100644 --- a/angular-standalone/official/tabs/src/app/app.component.ts +++ b/angular-standalone/official/tabs/src/app/app.component.ts @@ -4,7 +4,6 @@ import { IonApp, IonRouterOutlet } from '@ionic/angular/standalone'; @Component({ selector: 'app-root', templateUrl: 'app.component.html', - standalone: true, imports: [IonApp, IonRouterOutlet], }) export class AppComponent { diff --git a/angular-standalone/official/tabs/src/app/explore-container/explore-container.component.ts b/angular-standalone/official/tabs/src/app/explore-container/explore-container.component.ts index d2073a628..3f4e8b27f 100644 --- a/angular-standalone/official/tabs/src/app/explore-container/explore-container.component.ts +++ b/angular-standalone/official/tabs/src/app/explore-container/explore-container.component.ts @@ -4,7 +4,6 @@ import { Component, Input } from '@angular/core'; selector: 'app-explore-container', templateUrl: './explore-container.component.html', styleUrls: ['./explore-container.component.scss'], - standalone: true, }) export class ExploreContainerComponent { @Input() name?: string; diff --git a/angular-standalone/official/tabs/src/app/tab1/tab1.page.ts b/angular-standalone/official/tabs/src/app/tab1/tab1.page.ts index 125fdf9be..2c0d1ee60 100644 --- a/angular-standalone/official/tabs/src/app/tab1/tab1.page.ts +++ b/angular-standalone/official/tabs/src/app/tab1/tab1.page.ts @@ -6,7 +6,6 @@ import { ExploreContainerComponent } from '../explore-container/explore-containe selector: 'app-tab1', templateUrl: 'tab1.page.html', styleUrls: ['tab1.page.scss'], - standalone: true, imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent], }) export class Tab1Page { diff --git a/angular-standalone/official/tabs/src/app/tab2/tab2.page.ts b/angular-standalone/official/tabs/src/app/tab2/tab2.page.ts index 6fd1fdda6..559aad5f5 100644 --- a/angular-standalone/official/tabs/src/app/tab2/tab2.page.ts +++ b/angular-standalone/official/tabs/src/app/tab2/tab2.page.ts @@ -6,7 +6,6 @@ import { ExploreContainerComponent } from '../explore-container/explore-containe selector: 'app-tab2', templateUrl: 'tab2.page.html', styleUrls: ['tab2.page.scss'], - standalone: true, imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent] }) export class Tab2Page { diff --git a/angular-standalone/official/tabs/src/app/tab3/tab3.page.ts b/angular-standalone/official/tabs/src/app/tab3/tab3.page.ts index 5e29647d9..5f6b0f1e8 100644 --- a/angular-standalone/official/tabs/src/app/tab3/tab3.page.ts +++ b/angular-standalone/official/tabs/src/app/tab3/tab3.page.ts @@ -6,7 +6,6 @@ import { ExploreContainerComponent } from '../explore-container/explore-containe selector: 'app-tab3', templateUrl: 'tab3.page.html', styleUrls: ['tab3.page.scss'], - standalone: true, imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent], }) export class Tab3Page { diff --git a/angular-standalone/official/tabs/src/app/tabs/tabs.page.ts b/angular-standalone/official/tabs/src/app/tabs/tabs.page.ts index 62fd0c0f4..d057eac1b 100644 --- a/angular-standalone/official/tabs/src/app/tabs/tabs.page.ts +++ b/angular-standalone/official/tabs/src/app/tabs/tabs.page.ts @@ -7,7 +7,6 @@ import { triangle, ellipse, square } from 'ionicons/icons'; selector: 'app-tabs', templateUrl: 'tabs.page.html', styleUrls: ['tabs.page.scss'], - standalone: true, imports: [IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel], }) export class TabsPage { diff --git a/angular/base/.eslintrc.json b/angular/base/.eslintrc.json index 9d48db47b..5215f5548 100644 --- a/angular/base/.eslintrc.json +++ b/angular/base/.eslintrc.json @@ -13,6 +13,7 @@ "plugin:@angular-eslint/template/process-inline-templates" ], "rules": { + "@angular-eslint/prefer-standalone": "off", "@angular-eslint/component-class-suffix": [ "error", { diff --git a/angular/base/package.json b/angular/base/package.json index 3900bd6e1..4d000929c 100644 --- a/angular/base/package.json +++ b/angular/base/package.json @@ -13,35 +13,35 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.0.0", - "@angular/common": "^18.0.0", - "@angular/compiler": "^18.0.0", - "@angular/core": "^18.0.0", - "@angular/forms": "^18.0.0", - "@angular/platform-browser": "^18.0.0", - "@angular/platform-browser-dynamic": "^18.0.0", - "@angular/router": "^18.0.0", + "@angular/animations": "^19.0.0", + "@angular/common": "^19.0.0", + "@angular/compiler": "^19.0.0", + "@angular/core": "^19.0.0", + "@angular/forms": "^19.0.0", + "@angular/platform-browser": "^19.0.0", + "@angular/platform-browser-dynamic": "^19.0.0", + "@angular/router": "^19.0.0", "@ionic/angular": "^8.0.0", "ionicons": "^7.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", - "zone.js": "~0.14.2" + "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.0.0", - "@angular-eslint/builder": "^18.0.0", - "@angular-eslint/eslint-plugin": "^18.0.0", - "@angular-eslint/eslint-plugin-template": "^18.0.0", - "@angular-eslint/schematics": "^18.0.0", - "@angular-eslint/template-parser": "^18.0.0", - "@angular/cli": "^18.0.0", - "@angular/compiler-cli": "^18.0.0", - "@angular/language-service": "^18.0.0", - "@ionic/angular-toolkit": "^11.0.1", + "@angular-devkit/build-angular": "^19.0.0", + "@angular-eslint/builder": "^19.0.0", + "@angular-eslint/eslint-plugin": "^19.0.0", + "@angular-eslint/eslint-plugin-template": "^19.0.0", + "@angular-eslint/schematics": "^19.0.0", + "@angular-eslint/template-parser": "^19.0.0", + "@angular/cli": "^19.0.0", + "@angular/compiler-cli": "^19.0.0", + "@angular/language-service": "^19.0.0", + "@ionic/angular-toolkit": "^12.0.0", "@types/jasmine": "~5.1.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.57.0", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", + "eslint": "^9.16.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsdoc": "^48.2.1", "eslint-plugin-prefer-arrow": "1.2.2", @@ -52,6 +52,6 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.4.0" + "typescript": "~5.6.3" } } diff --git a/angular/base/src/app/app.component.ts b/angular/base/src/app/app.component.ts index 913de3dfe..da2f9aa7d 100644 --- a/angular/base/src/app/app.component.ts +++ b/angular/base/src/app/app.component.ts @@ -4,6 +4,7 @@ import { Component } from '@angular/core'; selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.scss'], + standalone: false, }) export class AppComponent { constructor() {} diff --git a/angular/community/ionic-team/enterprise-tabs b/angular/community/ionic-team/enterprise-tabs index e0231634f..7cdff9ae9 160000 --- a/angular/community/ionic-team/enterprise-tabs +++ b/angular/community/ionic-team/enterprise-tabs @@ -1 +1 @@ -Subproject commit e0231634facef28b200faf51c2e24c61964bc336 +Subproject commit 7cdff9ae9826bf4705a55eea3b6d5ff478670817 diff --git a/angular/official/blank/src/app/home/home.page.ts b/angular/official/blank/src/app/home/home.page.ts index 83522d597..be165aaf8 100644 --- a/angular/official/blank/src/app/home/home.page.ts +++ b/angular/official/blank/src/app/home/home.page.ts @@ -4,6 +4,7 @@ import { Component } from '@angular/core'; selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], + standalone: false, }) export class HomePage { diff --git a/angular/official/list/src/app/home/home.page.html b/angular/official/list/src/app/home/home.page.html index 0f7b24956..bbdc656f4 100644 --- a/angular/official/list/src/app/home/home.page.html +++ b/angular/official/list/src/app/home/home.page.html @@ -10,7 +10,7 @@ - + @@ -18,8 +18,10 @@ - + - + @for (message of getMessages(); track message) { + + } - \ No newline at end of file + diff --git a/angular/official/list/src/app/home/home.page.ts b/angular/official/list/src/app/home/home.page.ts index 4815425d8..c5404229a 100644 --- a/angular/official/list/src/app/home/home.page.ts +++ b/angular/official/list/src/app/home/home.page.ts @@ -8,6 +8,7 @@ import { DataService, Message } from '../services/data.service'; selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], + standalone: false, }) export class HomePage { private data = inject(DataService); diff --git a/angular/official/list/src/app/message/message.component.html b/angular/official/list/src/app/message/message.component.html index cde642f47..c8c822e85 100644 --- a/angular/official/list/src/app/message/message.component.html +++ b/angular/official/list/src/app/message/message.component.html @@ -1,16 +1,20 @@ - -
- -

- {{ message.fromName }} - - {{ message.date }} - - -

-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
\ No newline at end of file +@if (message) { + +
+ +

+ {{ message.fromName }} + + {{ message.date }} + @if (isIos()) { + + } + +

+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+} diff --git a/angular/official/list/src/app/message/message.component.ts b/angular/official/list/src/app/message/message.component.ts index 9fdac3fe4..1d91033f5 100644 --- a/angular/official/list/src/app/message/message.component.ts +++ b/angular/official/list/src/app/message/message.component.ts @@ -6,6 +6,7 @@ import { Message } from '../services/data.service'; selector: 'app-message', templateUrl: './message.component.html', styleUrls: ['./message.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class MessageComponent { diff --git a/angular/official/list/src/app/view-message/view-message.page.html b/angular/official/list/src/app/view-message/view-message.page.html index a35ec27b2..c97a58ea6 100644 --- a/angular/official/list/src/app/view-message/view-message.page.html +++ b/angular/official/list/src/app/view-message/view-message.page.html @@ -6,24 +6,25 @@ - - - - -

- {{ message.fromName }} - - {{ message.date }} - -

-

To: Me

-
-
- -
-

{{ message.subject }}

-

- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -

-
-
+@if (message) { + + + + +

+ {{ message.fromName }} + + {{ message.date }} + +

+

To: Me

+
+
+
+

{{ message.subject }}

+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

+
+
+} diff --git a/angular/official/list/src/app/view-message/view-message.page.ts b/angular/official/list/src/app/view-message/view-message.page.ts index a720c7035..f8d29a418 100644 --- a/angular/official/list/src/app/view-message/view-message.page.ts +++ b/angular/official/list/src/app/view-message/view-message.page.ts @@ -1,4 +1,4 @@ -import { CommonModule } from '@angular/common'; + import { Component, inject, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { IonicModule, Platform } from '@ionic/angular'; @@ -8,6 +8,7 @@ import { DataService, Message } from '../services/data.service'; selector: 'app-view-message', templateUrl: './view-message.page.html', styleUrls: ['./view-message.page.scss'], + standalone: false, }) export class ViewMessagePage implements OnInit { public message!: Message; diff --git a/angular/official/sidemenu/src/app/app-routing.module.ts b/angular/official/sidemenu/src/app/app-routing.module.ts index bf907a727..f142a6e09 100644 --- a/angular/official/sidemenu/src/app/app-routing.module.ts +++ b/angular/official/sidemenu/src/app/app-routing.module.ts @@ -4,7 +4,7 @@ import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: '', - redirectTo: 'folder/Inbox', + redirectTo: 'folder/inbox', pathMatch: 'full' }, { diff --git a/angular/official/sidemenu/src/app/app.component.html b/angular/official/sidemenu/src/app/app.component.html index cd12488d5..eaa3ed35a 100644 --- a/angular/official/sidemenu/src/app/app.component.html +++ b/angular/official/sidemenu/src/app/app.component.html @@ -6,21 +6,25 @@ Inbox hi@ionicframework.com - - - - {{ p.title }} - - + @for (p of appPages; track p; let i = $index) { + + + + {{ p.title }} + + + } Labels - - - {{ label }} - + @for (label of labels; track label) { + + + {{ label }} + + } diff --git a/angular/official/sidemenu/src/app/app.component.ts b/angular/official/sidemenu/src/app/app.component.ts index 724e1d766..71cc5ca6a 100644 --- a/angular/official/sidemenu/src/app/app.component.ts +++ b/angular/official/sidemenu/src/app/app.component.ts @@ -3,6 +3,7 @@ import { Component } from '@angular/core'; selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.scss'], + standalone: false, }) export class AppComponent { public appPages = [ diff --git a/angular/official/sidemenu/src/app/folder/folder.page.ts b/angular/official/sidemenu/src/app/folder/folder.page.ts index 00aee838e..e29f5978b 100644 --- a/angular/official/sidemenu/src/app/folder/folder.page.ts +++ b/angular/official/sidemenu/src/app/folder/folder.page.ts @@ -5,6 +5,7 @@ import { ActivatedRoute } from '@angular/router'; selector: 'app-folder', templateUrl: './folder.page.html', styleUrls: ['./folder.page.scss'], + standalone: false, }) export class FolderPage implements OnInit { public folder!: string; diff --git a/angular/official/tabs/src/app/explore-container/explore-container.component.ts b/angular/official/tabs/src/app/explore-container/explore-container.component.ts index 11beba047..3a5133a5a 100644 --- a/angular/official/tabs/src/app/explore-container/explore-container.component.ts +++ b/angular/official/tabs/src/app/explore-container/explore-container.component.ts @@ -4,6 +4,7 @@ import { Component, Input } from '@angular/core'; selector: 'app-explore-container', templateUrl: './explore-container.component.html', styleUrls: ['./explore-container.component.scss'], + standalone: false, }) export class ExploreContainerComponent { diff --git a/angular/official/tabs/src/app/tab1/tab1.page.ts b/angular/official/tabs/src/app/tab1/tab1.page.ts index 3deefc3b1..e52fddb9d 100644 --- a/angular/official/tabs/src/app/tab1/tab1.page.ts +++ b/angular/official/tabs/src/app/tab1/tab1.page.ts @@ -3,7 +3,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tab1', templateUrl: 'tab1.page.html', - styleUrls: ['tab1.page.scss'] + styleUrls: ['tab1.page.scss'], + standalone: false, }) export class Tab1Page { diff --git a/angular/official/tabs/src/app/tab2/tab2.page.ts b/angular/official/tabs/src/app/tab2/tab2.page.ts index e14cad409..520c45bda 100644 --- a/angular/official/tabs/src/app/tab2/tab2.page.ts +++ b/angular/official/tabs/src/app/tab2/tab2.page.ts @@ -3,7 +3,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tab2', templateUrl: 'tab2.page.html', - styleUrls: ['tab2.page.scss'] + styleUrls: ['tab2.page.scss'], + standalone: false, }) export class Tab2Page { diff --git a/angular/official/tabs/src/app/tab3/tab3.page.ts b/angular/official/tabs/src/app/tab3/tab3.page.ts index 9ed0daed5..8c63559c8 100644 --- a/angular/official/tabs/src/app/tab3/tab3.page.ts +++ b/angular/official/tabs/src/app/tab3/tab3.page.ts @@ -3,7 +3,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tab3', templateUrl: 'tab3.page.html', - styleUrls: ['tab3.page.scss'] + styleUrls: ['tab3.page.scss'], + standalone: false, }) export class Tab3Page { diff --git a/angular/official/tabs/src/app/tabs/tabs.page.ts b/angular/official/tabs/src/app/tabs/tabs.page.ts index 7d64f975d..7ea8134a8 100644 --- a/angular/official/tabs/src/app/tabs/tabs.page.ts +++ b/angular/official/tabs/src/app/tabs/tabs.page.ts @@ -3,7 +3,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tabs', templateUrl: 'tabs.page.html', - styleUrls: ['tabs.page.scss'] + styleUrls: ['tabs.page.scss'], + standalone: false, }) export class TabsPage { diff --git a/vue-vite/base/package.json b/vue-vite/base/package.json index 4a2137044..0bb1c19ba 100644 --- a/vue-vite/base/package.json +++ b/vue-vite/base/package.json @@ -28,9 +28,9 @@ "eslint-plugin-vue": "^9.9.0", "jsdom": "^22.1.0", "terser": "^5.4.0", - "typescript": "^5.1.6", + "typescript": "~5.6.2", "vite": "~5.2.0", "vitest": "^0.34.6", - "vue-tsc": "^2.0.22" + "vue-tsc": "^2.1.10" } }