@ionic/angular 9.0.2-nightly.20260901 → 9.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -114,3 +114,7 @@ Ionic developers can access this by importing from `@ionic/angular/lazy`.
114
114
 
115
115
  > [!CAUTION]
116
116
  > The lazy loaded build, including `IonicModule`, is deprecated and will be removed in a future major version. New code should use the standalone components and `provideIonicAngular()` imported from `@ionic/angular`.
117
+
118
+ ## Change Detection Strategy
119
+
120
+ Every `@Component` in `src` must declare `changeDetection` explicitly, and the build enforces it. See the [Change Detection guide](https://github.com/ionic-team/ionic-framework/blob/main/docs/angular/change-detection.md).
@@ -15,6 +15,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
15
15
  standalone: false,
16
16
  selector: 'ion-nav',
17
17
  template: '<ng-content></ng-content>',
18
+ // Unlike ion-router-outlet, the delegate attaches pages here as root views and
19
+ // IonNavBase detaches this one, so a tick never descends through it.
18
20
  changeDetection: ChangeDetectionStrategy.OnPush,
19
21
  }]
20
22
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.EnvironmentInjector }, { type: i0.Injector }, { type: i1.AngularDelegate }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }] });
@@ -1 +1 @@
1
- {"version":3,"file":"ion-nav.js","sourceRoot":"","sources":["../../../../src/lazy/directives/navigation/ion-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACT,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAmB,MAAM,uBAAuB,CAAC;;;AAQ9E,MAAM,OAAO,MAAO,SAAQ,UAAU;IACpC,YACE,GAAe,EACf,mBAAwC,EACxC,QAAkB,EAClB,eAAgC,EAChC,CAAS,EACT,CAAoB;QAEpB,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;0HAVU,MAAM;8GAAN,MAAM,2FAHP,2BAA2B;;2FAG1B,MAAM;kBANlB,SAAS;mBAAC;oBACT,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,2BAA2B;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD","sourcesContent":["import {\n ElementRef,\n Injector,\n EnvironmentInjector,\n NgZone,\n ChangeDetectorRef,\n Component,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { IonNav as IonNavBase, AngularDelegate } from '@ionic/angular/common';\n\n@Component({\n standalone: false,\n selector: 'ion-nav',\n template: '<ng-content></ng-content>',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IonNav extends IonNavBase {\n constructor(\n ref: ElementRef,\n environmentInjector: EnvironmentInjector,\n injector: Injector,\n angularDelegate: AngularDelegate,\n z: NgZone,\n c: ChangeDetectorRef\n ) {\n super(ref, environmentInjector, injector, angularDelegate, z, c);\n }\n}\n"]}
1
+ {"version":3,"file":"ion-nav.js","sourceRoot":"","sources":["../../../../src/lazy/directives/navigation/ion-nav.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACT,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAmB,MAAM,uBAAuB,CAAC;;;AAU9E,MAAM,OAAO,MAAO,SAAQ,UAAU;IACpC,YACE,GAAe,EACf,mBAAwC,EACxC,QAAkB,EAClB,eAAgC,EAChC,CAAS,EACT,CAAoB;QAEpB,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;0HAVU,MAAM;8GAAN,MAAM,2FALP,2BAA2B;;2FAK1B,MAAM;kBARlB,SAAS;mBAAC;oBACT,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,2BAA2B;oBACrC,+EAA+E;oBAC/E,qEAAqE;oBACrE,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD","sourcesContent":["import {\n ElementRef,\n Injector,\n EnvironmentInjector,\n NgZone,\n ChangeDetectorRef,\n Component,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { IonNav as IonNavBase, AngularDelegate } from '@ionic/angular/common';\n\n@Component({\n standalone: false,\n selector: 'ion-nav',\n template: '<ng-content></ng-content>',\n // Unlike ion-router-outlet, the delegate attaches pages here as root views and\n // IonNavBase detaches this one, so a tick never descends through it.\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IonNav extends IonNavBase {\n constructor(\n ref: ElementRef,\n environmentInjector: EnvironmentInjector,\n injector: Injector,\n angularDelegate: AngularDelegate,\n z: NgZone,\n c: ChangeDetectorRef\n ) {\n super(ref, environmentInjector, injector, angularDelegate, z, c);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ViewChild, ViewContainerRef, Component, Attribute, Optional, SkipSelf, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ViewChild, ViewContainerRef, Component, Attribute, Optional, SkipSelf, } from '@angular/core';
2
2
  import { IonRouterOutlet as IonRouterOutletBase } from '@ionic/angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
@@ -24,13 +24,17 @@ export class IonRouterOutlet extends IonRouterOutletBase {
24
24
  this.parentOutlet = parentOutlet;
25
25
  }
26
26
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IonRouterOutlet, deps: [{ token: 'name', attribute: true }, { token: 'tabs', attribute: true, optional: true }, { token: i1.Location }, { token: i0.ElementRef }, { token: i2.Router }, { token: i0.NgZone }, { token: i2.ActivatedRoute }, { token: IonRouterOutlet, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
27
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: IonRouterOutlet, isStandalone: false, selector: "ion-router-outlet", viewQueries: [{ propertyName: "outletContent", first: true, predicate: ["outletContent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-container #outletContent><ng-content></ng-content></ng-container>', isInline: true });
27
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: IonRouterOutlet, isStandalone: false, selector: "ion-router-outlet", viewQueries: [{ propertyName: "outletContent", first: true, predicate: ["outletContent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-container #outletContent><ng-content></ng-content></ng-container>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.Default });
28
28
  }
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IonRouterOutlet, decorators: [{
30
30
  type: Component,
31
31
  args: [{
32
32
  standalone: false,
33
33
  selector: 'ion-router-outlet',
34
+ // Routed pages are created inside this component's own view, so an OnPush
35
+ // outlet would leave them unreachable from a tick under Zone.js.
36
+ // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
37
+ changeDetection: ChangeDetectionStrategy.Default,
34
38
  template: '<ng-container #outletContent><ng-content></ng-content></ng-container>',
35
39
  }]
36
40
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ion-router-outlet.js","sourceRoot":"","sources":["../../../../src/lazy/directives/navigation/ion-router-outlet.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,GAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;;;;AAO/E,MAAM,OAAO,eAAgB,SAAQ,mBAAmB;IAwBnB;IAvBnC;;;;;;OAMG;IACmE,aAAa,CAAmB;IAEtG;;;;;OAKG;IACH,YACqB,IAAY,EACA,IAAY,EAC3C,cAAwB,EACxB,UAAsB,EACtB,MAAc,EACd,IAAY,EACZ,cAA8B,EACG,YAA8B;QAE/D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAFzD,iBAAY,GAAZ,YAAY,CAAkB;IAGjE,CAAC;0HA3BU,eAAe,kBAiBb,MAAM,8BACM,MAAM;8GAlBpB,eAAe,yKAQU,gBAAgB,kEAV1C,uEAAuE;;2FAEtE,eAAe;kBAL3B,SAAS;mBAAC;oBACT,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,mBAAmB;oBAC7B,QAAQ,EAAE,uEAAuE;iBAClF;;0BAkBI,SAAS;2BAAC,MAAM;;0BAChB,QAAQ;;0BAAI,SAAS;2BAAC,MAAM;;0BAM5B,QAAQ;;0BAAI,QAAQ;;sBAhBtB,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE","sourcesContent":["import { Location } from '@angular/common';\nimport {\n ViewChild,\n ViewContainerRef,\n Component,\n Attribute,\n Optional,\n SkipSelf,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { IonRouterOutlet as IonRouterOutletBase } from '@ionic/angular/common';\n\n@Component({\n standalone: false,\n selector: 'ion-router-outlet',\n template: '<ng-container #outletContent><ng-content></ng-content></ng-container>',\n})\nexport class IonRouterOutlet extends IonRouterOutletBase {\n /**\n * `static: true` must be set so the query results are resolved\n * before change detection runs. Otherwise, the view container\n * ref will be ion-router-outlet instead of ng-container, and\n * the first view will be added as a sibling of ion-router-outlet\n * instead of a child.\n */\n @ViewChild('outletContent', { read: ViewContainerRef, static: true }) outletContent: ViewContainerRef;\n\n /**\n * We need to pass in the correct instance of IonRouterOutlet\n * otherwise parentOutlet will be null in a nested outlet context.\n * This results in APIs such as NavController.pop not working\n * in nested outlets because the parent outlet cannot be found.\n */\n constructor(\n @Attribute('name') name: string,\n @Optional() @Attribute('tabs') tabs: string,\n commonLocation: Location,\n elementRef: ElementRef,\n router: Router,\n zone: NgZone,\n activatedRoute: ActivatedRoute,\n @SkipSelf() @Optional() readonly parentOutlet?: IonRouterOutlet\n ) {\n super(name, tabs, commonLocation, elementRef, router, zone, activatedRoute, parentOutlet);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/lazy/directives/navigation/ion-router-outlet.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,GAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;;;;AAW/E,MAAM,OAAO,eAAgB,SAAQ,mBAAmB;IAwBnB;IAvBnC;;;;;;OAMG;IACmE,aAAa,CAAmB;IAEtG;;;;;OAKG;IACH,YACqB,IAAY,EACA,IAAY,EAC3C,cAAwB,EACxB,UAAsB,EACtB,MAAc,EACd,IAAY,EACZ,cAA8B,EACG,YAA8B;QAE/D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAFzD,iBAAY,GAAZ,YAAY,CAAkB;IAGjE,CAAC;0HA3BU,eAAe,kBAiBb,MAAM,8BACM,MAAM;8GAlBpB,eAAe,yKAQU,gBAAgB,kEAV1C,uEAAuE;;2FAEtE,eAAe;kBAT3B,SAAS;mBAAC;oBACT,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,mBAAmB;oBAC7B,0EAA0E;oBAC1E,iEAAiE;oBACjE,qFAAqF;oBACrF,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,QAAQ,EAAE,uEAAuE;iBAClF;;0BAkBI,SAAS;2BAAC,MAAM;;0BAChB,QAAQ;;0BAAI,SAAS;2BAAC,MAAM;;0BAM5B,QAAQ;;0BAAI,QAAQ;;sBAhBtB,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE","file":"ion-router-outlet.js","sourceRoot":"","sourcesContent":["import { Location } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ViewChild,\n ViewContainerRef,\n Component,\n Attribute,\n Optional,\n SkipSelf,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { IonRouterOutlet as IonRouterOutletBase } from '@ionic/angular/common';\n\n@Component({\n standalone: false,\n selector: 'ion-router-outlet',\n // Routed pages are created inside this component's own view, so an OnPush\n // outlet would leave them unreachable from a tick under Zone.js.\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n template: '<ng-container #outletContent><ng-content></ng-content></ng-container>',\n})\nexport class IonRouterOutlet extends IonRouterOutletBase {\n /**\n * `static: true` must be set so the query results are resolved\n * before change detection runs. Otherwise, the view container\n * ref will be ion-router-outlet instead of ng-container, and\n * the first view will be added as a sibling of ion-router-outlet\n * instead of a child.\n */\n @ViewChild('outletContent', { read: ViewContainerRef, static: true }) outletContent: ViewContainerRef;\n\n /**\n * We need to pass in the correct instance of IonRouterOutlet\n * otherwise parentOutlet will be null in a nested outlet context.\n * This results in APIs such as NavController.pop not working\n * in nested outlets because the parent outlet cannot be found.\n */\n constructor(\n @Attribute('name') name: string,\n @Optional() @Attribute('tabs') tabs: string,\n commonLocation: Location,\n elementRef: ElementRef,\n router: Router,\n zone: NgZone,\n activatedRoute: ActivatedRoute,\n @SkipSelf() @Optional() readonly parentOutlet?: IonRouterOutlet\n ) {\n super(name, tabs, commonLocation, elementRef, router, zone, activatedRoute, parentOutlet);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Component, ContentChild, ContentChildren, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ViewChild } from '@angular/core';
2
2
  import { IonTabs as IonTabsBase } from '@ionic/angular/common';
3
3
  import { IonTabBar, IonTab } from '../proxies';
4
4
  import { IonRouterOutlet } from './ion-router-outlet';
@@ -24,11 +24,11 @@ export class IonTabs extends IonTabsBase {
24
24
  <ng-content *ngIf="tabs.length > 0" select="ion-tab"></ng-content>
25
25
  </div>
26
26
  <ng-content></ng-content>
27
- `, isInline: true, styles: ["\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n "], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonRouterOutlet, selector: "ion-router-outlet" }] });
27
+ `, isInline: true, styles: ["\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n "], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonRouterOutlet, selector: "ion-router-outlet" }], changeDetection: i0.ChangeDetectionStrategy.Default });
28
28
  }
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IonTabs, decorators: [{
30
30
  type: Component,
31
- args: [{ standalone: false, selector: 'ion-tabs', template: `
31
+ args: [{ standalone: false, selector: 'ion-tabs', changeDetection: ChangeDetectionStrategy.Default, template: `
32
32
  <ng-content select="[slot=top]"></ng-content>
33
33
  <div class="tabs-inner" #tabsInner>
34
34
  <ion-router-outlet
@@ -1 +1 @@
1
- {"version":3,"file":"ion-tabs.js","sourceRoot":"","sources":["../../../../src/lazy/directives/navigation/ion-tabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;;;;AA8CtD,MAAM,OAAO,OAAQ,SAAQ,WAAW;IACyB,MAAM,CAAkB;IAE3C,MAAM,CAAwB;IAC9C,OAAO,CAAuB;IACjC,IAAI,CAAoB;0HALtC,OAAO;8GAAP,OAAO,yGAGJ,SAAS,6DACN,SAAS,uCACT,MAAM,0GAJM,eAAe,oDA1ClC;;;;;;;;;;;;;GAaT;;2FA4BU,OAAO;kBA5CnB,SAAS;iCACI,KAAK,YACP,UAAU,YACV;;;;;;;;;;;;;GAaT;;sBA6BA,SAAS;uBAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAE5D,YAAY;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBACzC,eAAe;uBAAC,SAAS;;sBACzB,eAAe;uBAAC,MAAM","sourcesContent":["import { Component, ContentChild, ContentChildren, ViewChild, QueryList } from '@angular/core';\nimport { IonTabs as IonTabsBase } from '@ionic/angular/common';\n\nimport { IonTabBar, IonTab } from '../proxies';\n\nimport { IonRouterOutlet } from './ion-router-outlet';\n\n@Component({\n standalone: false,\n selector: 'ion-tabs',\n template: `\n <ng-content select=\"[slot=top]\"></ng-content>\n <div class=\"tabs-inner\" #tabsInner>\n <ion-router-outlet\n *ngIf=\"tabs.length === 0\"\n #outlet\n tabs=\"true\"\n (stackWillChange)=\"onStackWillChange($event)\"\n (stackDidChange)=\"onStackDidChange($event)\"\n ></ion-router-outlet>\n <ng-content *ngIf=\"tabs.length > 0\" select=\"ion-tab\"></ng-content>\n </div>\n <ng-content></ng-content>\n `,\n styles: [\n `\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n `,\n ],\n})\nexport class IonTabs extends IonTabsBase {\n @ViewChild('outlet', { read: IonRouterOutlet, static: false }) outlet: IonRouterOutlet;\n\n @ContentChild(IonTabBar, { static: false }) tabBar: IonTabBar | undefined;\n @ContentChildren(IonTabBar) tabBars: QueryList<IonTabBar>;\n @ContentChildren(IonTab) tabs: QueryList<IonTab>;\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/lazy/directives/navigation/ion-tabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;;;;AAkDtD,MAAM,OAAO,OAAQ,SAAQ,WAAW;IACyB,MAAM,CAAkB;IAE3C,MAAM,CAAwB;IAC9C,OAAO,CAAuB;IACjC,IAAI,CAAoB;0HALtC,OAAO;8GAAP,OAAO,yGAGJ,SAAS,6DACN,SAAS,uCACT,MAAM,0GAJM,eAAe,oDA1ClC;;;;;;;;;;;;;GAaT;;2FA4BU,OAAO;kBAhDnB,SAAS;iCACI,KAAK,YACP,UAAU,mBAIH,uBAAuB,CAAC,OAAO,YACtC;;;;;;;;;;;;;GAaT;;sBA6BA,SAAS;uBAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAE5D,YAAY;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBACzC,eAAe;uBAAC,SAAS;;sBACzB,eAAe;uBAAC,MAAM","file":"ion-tabs.js","sourceRoot":"","sourcesContent":["import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ViewChild, QueryList } from '@angular/core';\nimport { IonTabs as IonTabsBase } from '@ionic/angular/common';\n\nimport { IonTabBar, IonTab } from '../proxies';\n\nimport { IonRouterOutlet } from './ion-router-outlet';\n\n@Component({\n standalone: false,\n selector: 'ion-tabs',\n // Renders the ion-router-outlet its tab pages are created into, so an OnPush\n // strategy here would stop change detection reaching them.\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n template: `\n <ng-content select=\"[slot=top]\"></ng-content>\n <div class=\"tabs-inner\" #tabsInner>\n <ion-router-outlet\n *ngIf=\"tabs.length === 0\"\n #outlet\n tabs=\"true\"\n (stackWillChange)=\"onStackWillChange($event)\"\n (stackDidChange)=\"onStackDidChange($event)\"\n ></ion-router-outlet>\n <ng-content *ngIf=\"tabs.length > 0\" select=\"ion-tab\"></ng-content>\n </div>\n <ng-content></ng-content>\n `,\n styles: [\n `\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n `,\n ],\n})\nexport class IonTabs extends IonTabsBase {\n @ViewChild('outlet', { read: IonRouterOutlet, static: false }) outlet: IonRouterOutlet;\n\n @ContentChild(IonTabBar, { static: false }) tabBar: IonTabBar | undefined;\n @ContentChildren(IonTabBar) tabBars: QueryList<IonTabBar>;\n @ContentChildren(IonTab) tabs: QueryList<IonTab>;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { Component } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, } from '@angular/core';
3
3
  import { IonNav as IonNavBase, ProxyCmp } from '@ionic/angular/common';
4
4
  import { defineCustomElement } from '@ionic/core/components/ion-nav.js';
5
5
  import * as i0 from "@angular/core";
@@ -9,7 +9,7 @@ let IonNav = class IonNav extends IonNavBase {
9
9
  super(ref, environmentInjector, injector, angularDelegate, z, c);
10
10
  }
11
11
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IonNav, deps: [{ token: i0.ElementRef }, { token: i0.EnvironmentInjector }, { token: i0.Injector }, { token: i1.AngularDelegate }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: IonNav, isStandalone: true, selector: "ion-nav", usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
12
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: IonNav, isStandalone: true, selector: "ion-nav", usesInheritance: true, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
13
13
  };
14
14
  IonNav = __decorate([
15
15
  ProxyCmp({
@@ -21,6 +21,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
21
21
  type: Component,
22
22
  args: [{
23
23
  selector: 'ion-nav',
24
+ // Unlike ion-router-outlet, the delegate attaches pages here as root views and
25
+ // IonNavBase detaches this one, so a tick never descends through it.
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
24
27
  template: '<ng-content></ng-content>',
25
28
  standalone: true,
26
29
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../../src/standalone/navigation/nav.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAwE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,QAAQ,EAAmB,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;;;AAUjE,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,UAAU;IACpC,YACE,GAAe,EACf,mBAAwC,EACxC,QAAkB,EAClB,eAAgC,EAChC,CAAS,EACT,CAAoB;QAEpB,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;0HAVU,MAAM;8GAAN,MAAM,0FAHP,2BAA2B;;AAG1B,MAAM;IARlB,QAAQ,CAAC;QACR,qBAAqB,EAAE,mBAAmB;KAC3C,CAAC;GAMW,MAAM,CAWlB;;2FAXY,MAAM;kBALlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,SAAS;oBACnB,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,IAAI;iBACjB","sourcesContent":["import { Component, ElementRef, Injector, EnvironmentInjector, NgZone, ChangeDetectorRef } from '@angular/core';\nimport { IonNav as IonNavBase, ProxyCmp, AngularDelegate } from '@ionic/angular/common';\nimport { defineCustomElement } from '@ionic/core/components/ion-nav.js';\n\n@ProxyCmp({\n defineCustomElementFn: defineCustomElement,\n})\n@Component({\n selector: 'ion-nav',\n template: '<ng-content></ng-content>',\n standalone: true,\n})\nexport class IonNav extends IonNavBase {\n constructor(\n ref: ElementRef,\n environmentInjector: EnvironmentInjector,\n injector: Injector,\n angularDelegate: AngularDelegate,\n z: NgZone,\n c: ChangeDetectorRef\n ) {\n super(ref, environmentInjector, injector, angularDelegate, z, c);\n }\n}\n"]}
1
+ {"version":3,"file":"nav.js","sourceRoot":"","sources":["../../../src/standalone/navigation/nav.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,GAMV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,QAAQ,EAAmB,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;;;AAajE,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,UAAU;IACpC,YACE,GAAe,EACf,mBAAwC,EACxC,QAAkB,EAClB,eAAgC,EAChC,CAAS,EACT,CAAoB;QAEpB,KAAK,CAAC,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;0HAVU,MAAM;8GAAN,MAAM,0FAHP,2BAA2B;;AAG1B,MAAM;IAXlB,QAAQ,CAAC;QACR,qBAAqB,EAAE,mBAAmB;KAC3C,CAAC;GASW,MAAM,CAWlB;;2FAXY,MAAM;kBARlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,SAAS;oBACnB,+EAA+E;oBAC/E,qEAAqE;oBACrE,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,QAAQ,EAAE,2BAA2B;oBACrC,UAAU,EAAE,IAAI;iBACjB","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n EnvironmentInjector,\n NgZone,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { IonNav as IonNavBase, ProxyCmp, AngularDelegate } from '@ionic/angular/common';\nimport { defineCustomElement } from '@ionic/core/components/ion-nav.js';\n\n@ProxyCmp({\n defineCustomElementFn: defineCustomElement,\n})\n@Component({\n selector: 'ion-nav',\n // Unlike ion-router-outlet, the delegate attaches pages here as root views and\n // IonNavBase detaches this one, so a tick never descends through it.\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content></ng-content>',\n standalone: true,\n})\nexport class IonNav extends IonNavBase {\n constructor(\n ref: ElementRef,\n environmentInjector: EnvironmentInjector,\n injector: Injector,\n angularDelegate: AngularDelegate,\n z: NgZone,\n c: ChangeDetectorRef\n ) {\n super(ref, environmentInjector, injector, angularDelegate, z, c);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { ViewChild, ViewContainerRef, Component, Attribute, Optional, SkipSelf, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ViewChild, ViewContainerRef, Component, Attribute, Optional, SkipSelf, } from '@angular/core';
3
3
  import { IonRouterOutlet as IonRouterOutletBase, ProxyCmp } from '@ionic/angular/common';
4
4
  import { defineCustomElement } from '@ionic/core/components/ion-router-outlet.js';
5
5
  import * as i0 from "@angular/core";
@@ -26,7 +26,7 @@ let IonRouterOutlet = class IonRouterOutlet extends IonRouterOutletBase {
26
26
  this.parentOutlet = parentOutlet;
27
27
  }
28
28
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IonRouterOutlet, deps: [{ token: 'name', attribute: true }, { token: 'tabs', attribute: true, optional: true }, { token: i1.Location }, { token: i0.ElementRef }, { token: i2.Router }, { token: i0.NgZone }, { token: i2.ActivatedRoute }, { token: IonRouterOutlet, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
29
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: IonRouterOutlet, isStandalone: true, selector: "ion-router-outlet", viewQueries: [{ propertyName: "outletContent", first: true, predicate: ["outletContent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-container #outletContent><ng-content></ng-content></ng-container>', isInline: true });
29
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: IonRouterOutlet, isStandalone: true, selector: "ion-router-outlet", viewQueries: [{ propertyName: "outletContent", first: true, predicate: ["outletContent"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-container #outletContent><ng-content></ng-content></ng-container>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.Default });
30
30
  };
31
31
  IonRouterOutlet = __decorate([
32
32
  ProxyCmp({
@@ -39,6 +39,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
39
39
  args: [{
40
40
  selector: 'ion-router-outlet',
41
41
  standalone: true,
42
+ // Routed pages are created inside this component's own view, so an OnPush
43
+ // outlet would leave them unreachable from a tick under Zone.js.
44
+ // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
45
+ changeDetection: ChangeDetectionStrategy.Default,
42
46
  template: '<ng-container #outletContent><ng-content></ng-content></ng-container>',
43
47
  }]
44
48
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -1 +1 @@
1
- {"version":3,"file":"router-outlet.js","sourceRoot":"","sources":["../../../src/standalone/navigation/router-outlet.ts"],"names":[],"mappings":";AACA,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,GAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;;;;AAU3E,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,mBAAmB;IAwBnB;IAvBnC;;;;;;OAMG;IACmE,aAAa,CAAmB;IAEtG;;;;;OAKG;IACH,YACqB,IAAY,EACA,IAAY,EAC3C,cAAwB,EACxB,UAAsB,EACtB,MAAc,EACd,IAAY,EACZ,cAA8B,EACG,YAA8B;QAE/D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAFzD,iBAAY,GAAZ,YAAY,CAAkB;IAGjE,CAAC;0HA3BU,eAAe,kBAiBb,MAAM,8BACM,MAAM;8GAlBpB,eAAe,wKAQU,gBAAgB,kEAV1C,uEAAuE;;AAEtE,eAAe;IAR3B,QAAQ,CAAC;QACR,qBAAqB,EAAE,mBAAmB;KAC3C,CAAC;GAMW,eAAe,CA4B3B;;2FA5BY,eAAe;kBAL3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE,uEAAuE;iBAClF;;0BAkBI,SAAS;2BAAC,MAAM;;0BAChB,QAAQ;;0BAAI,SAAS;2BAAC,MAAM;;0BAM5B,QAAQ;;0BAAI,QAAQ;;sBAhBtB,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE","sourcesContent":["import { Location } from '@angular/common';\nimport {\n ViewChild,\n ViewContainerRef,\n Component,\n Attribute,\n Optional,\n SkipSelf,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { IonRouterOutlet as IonRouterOutletBase, ProxyCmp } from '@ionic/angular/common';\nimport { defineCustomElement } from '@ionic/core/components/ion-router-outlet.js';\n\n@ProxyCmp({\n defineCustomElementFn: defineCustomElement,\n})\n@Component({\n selector: 'ion-router-outlet',\n standalone: true,\n template: '<ng-container #outletContent><ng-content></ng-content></ng-container>',\n})\nexport class IonRouterOutlet extends IonRouterOutletBase {\n /**\n * `static: true` must be set so the query results are resolved\n * before change detection runs. Otherwise, the view container\n * ref will be ion-router-outlet instead of ng-container, and\n * the first view will be added as a sibling of ion-router-outlet\n * instead of a child.\n */\n @ViewChild('outletContent', { read: ViewContainerRef, static: true }) outletContent: ViewContainerRef;\n\n /**\n * We need to pass in the correct instance of IonRouterOutlet\n * otherwise parentOutlet will be null in a nested outlet context.\n * This results in APIs such as NavController.pop not working\n * in nested outlets because the parent outlet cannot be found.\n */\n constructor(\n @Attribute('name') name: string,\n @Optional() @Attribute('tabs') tabs: string,\n commonLocation: Location,\n elementRef: ElementRef,\n router: Router,\n zone: NgZone,\n activatedRoute: ActivatedRoute,\n @SkipSelf() @Optional() readonly parentOutlet?: IonRouterOutlet\n ) {\n super(name, tabs, commonLocation, elementRef, router, zone, activatedRoute, parentOutlet);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/standalone/navigation/router-outlet.ts"],"names":[],"mappings":";AACA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,GAGT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,IAAI,mBAAmB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;;;;AAc3E,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,mBAAmB;IAwBnB;IAvBnC;;;;;;OAMG;IACmE,aAAa,CAAmB;IAEtG;;;;;OAKG;IACH,YACqB,IAAY,EACA,IAAY,EAC3C,cAAwB,EACxB,UAAsB,EACtB,MAAc,EACd,IAAY,EACZ,cAA8B,EACG,YAA8B;QAE/D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAFzD,iBAAY,GAAZ,YAAY,CAAkB;IAGjE,CAAC;0HA3BU,eAAe,kBAiBb,MAAM,8BACM,MAAM;8GAlBpB,eAAe,wKAQU,gBAAgB,kEAV1C,uEAAuE;;AAEtE,eAAe;IAZ3B,QAAQ,CAAC;QACR,qBAAqB,EAAE,mBAAmB;KAC3C,CAAC;GAUW,eAAe,CA4B3B;;2FA5BY,eAAe;kBAT3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,UAAU,EAAE,IAAI;oBAChB,0EAA0E;oBAC1E,iEAAiE;oBACjE,qFAAqF;oBACrF,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,QAAQ,EAAE,uEAAuE;iBAClF;;0BAkBI,SAAS;2BAAC,MAAM;;0BAChB,QAAQ;;0BAAI,SAAS;2BAAC,MAAM;;0BAM5B,QAAQ;;0BAAI,QAAQ;;sBAhBtB,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE","file":"router-outlet.js","sourceRoot":"","sourcesContent":["import { Location } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ViewChild,\n ViewContainerRef,\n Component,\n Attribute,\n Optional,\n SkipSelf,\n ElementRef,\n NgZone,\n} from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { IonRouterOutlet as IonRouterOutletBase, ProxyCmp } from '@ionic/angular/common';\nimport { defineCustomElement } from '@ionic/core/components/ion-router-outlet.js';\n\n@ProxyCmp({\n defineCustomElementFn: defineCustomElement,\n})\n@Component({\n selector: 'ion-router-outlet',\n standalone: true,\n // Routed pages are created inside this component's own view, so an OnPush\n // outlet would leave them unreachable from a tick under Zone.js.\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n template: '<ng-container #outletContent><ng-content></ng-content></ng-container>',\n})\nexport class IonRouterOutlet extends IonRouterOutletBase {\n /**\n * `static: true` must be set so the query results are resolved\n * before change detection runs. Otherwise, the view container\n * ref will be ion-router-outlet instead of ng-container, and\n * the first view will be added as a sibling of ion-router-outlet\n * instead of a child.\n */\n @ViewChild('outletContent', { read: ViewContainerRef, static: true }) outletContent: ViewContainerRef;\n\n /**\n * We need to pass in the correct instance of IonRouterOutlet\n * otherwise parentOutlet will be null in a nested outlet context.\n * This results in APIs such as NavController.pop not working\n * in nested outlets because the parent outlet cannot be found.\n */\n constructor(\n @Attribute('name') name: string,\n @Optional() @Attribute('tabs') tabs: string,\n commonLocation: Location,\n elementRef: ElementRef,\n router: Router,\n zone: NgZone,\n activatedRoute: ActivatedRoute,\n @SkipSelf() @Optional() readonly parentOutlet?: IonRouterOutlet\n ) {\n super(name, tabs, commonLocation, elementRef, router, zone, activatedRoute, parentOutlet);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { NgIf } from '@angular/common';
2
- import { Component, ContentChild, ContentChildren, ViewChild } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ViewChild } from '@angular/core';
3
3
  import { IonTabs as IonTabsBase } from '@ionic/angular/common';
4
4
  import { IonTabBar, IonTab } from '../directives/proxies';
5
5
  import { IonRouterOutlet } from './router-outlet';
@@ -23,11 +23,11 @@ export class IonTabs extends IonTabsBase {
23
23
  <ng-content *ngIf="tabs.length > 0" select="ion-tab"></ng-content>
24
24
  </div>
25
25
  <ng-content></ng-content>
26
- `, isInline: true, styles: ["\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n "], dependencies: [{ kind: "component", type: IonRouterOutlet, selector: "ion-router-outlet" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
26
+ `, isInline: true, styles: ["\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n "], dependencies: [{ kind: "component", type: IonRouterOutlet, selector: "ion-router-outlet" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.Default });
27
27
  }
28
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: IonTabs, decorators: [{
29
29
  type: Component,
30
- args: [{ selector: 'ion-tabs', template: `
30
+ args: [{ selector: 'ion-tabs', changeDetection: ChangeDetectionStrategy.Default, template: `
31
31
  <ng-content select="[slot=top]"></ng-content>
32
32
  <div class="tabs-inner" #tabsInner>
33
33
  <ion-router-outlet
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/standalone/navigation/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;;AA+ClD,MAAM,OAAO,OAAQ,SAAQ,WAAW;IACyB,MAAM,CAAkB;IAE3C,MAAM,CAAwB;IAC9C,OAAO,CAAuB;IACjC,IAAI,CAAoB;0HALtC,OAAO;8GAAP,OAAO,wGAGJ,SAAS,6DACN,SAAS,uCACT,MAAM,0GAJM,eAAe,oDA5ClC;;;;;;;;;;;;;GAaT,sdA4BS,eAAe,8DAAE,IAAI;;2FAEpB,OAAO;kBA7CnB,SAAS;+BACE,UAAU,YACV;;;;;;;;;;;;;GAaT,cACW,IAAI,WA2BP,CAAC,eAAe,EAAE,IAAI,CAAC;;sBAG/B,SAAS;uBAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAE5D,YAAY;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBACzC,eAAe;uBAAC,SAAS;;sBACzB,eAAe;uBAAC,MAAM","sourcesContent":["import { NgIf } from '@angular/common';\nimport { Component, ContentChild, ContentChildren, ViewChild, QueryList } from '@angular/core';\nimport { IonTabs as IonTabsBase } from '@ionic/angular/common';\n\nimport { IonTabBar, IonTab } from '../directives/proxies';\n\nimport { IonRouterOutlet } from './router-outlet';\n\n@Component({\n selector: 'ion-tabs',\n template: `\n <ng-content select=\"[slot=top]\"></ng-content>\n <div class=\"tabs-inner\" #tabsInner>\n <ion-router-outlet\n *ngIf=\"tabs.length === 0\"\n #outlet\n tabs=\"true\"\n (stackWillChange)=\"onStackWillChange($event)\"\n (stackDidChange)=\"onStackDidChange($event)\"\n ></ion-router-outlet>\n <ng-content *ngIf=\"tabs.length > 0\" select=\"ion-tab\"></ng-content>\n </div>\n <ng-content></ng-content>\n `,\n standalone: true,\n styles: [\n `\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n `,\n ],\n imports: [IonRouterOutlet, NgIf],\n})\nexport class IonTabs extends IonTabsBase {\n @ViewChild('outlet', { read: IonRouterOutlet, static: false }) outlet: IonRouterOutlet;\n\n @ContentChild(IonTabBar, { static: false }) tabBar: IonTabBar | undefined;\n @ContentChildren(IonTabBar) tabBars: QueryList<IonTabBar>;\n @ContentChildren(IonTab) tabs: QueryList<IonTab>;\n}\n"]}
1
+ {"version":3,"sources":["../../../src/standalone/navigation/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;;AAmDlD,MAAM,OAAO,OAAQ,SAAQ,WAAW;IACyB,MAAM,CAAkB;IAE3C,MAAM,CAAwB;IAC9C,OAAO,CAAuB;IACjC,IAAI,CAAoB;0HALtC,OAAO;8GAAP,OAAO,wGAGJ,SAAS,6DACN,SAAS,uCACT,MAAM,0GAJM,eAAe,oDA5ClC;;;;;;;;;;;;;GAaT,sdA4BS,eAAe,8DAAE,IAAI;;2FAEpB,OAAO;kBAjDnB,SAAS;+BACE,UAAU,mBAIH,uBAAuB,CAAC,OAAO,YACtC;;;;;;;;;;;;;GAaT,cACW,IAAI,WA2BP,CAAC,eAAe,EAAE,IAAI,CAAC;;sBAG/B,SAAS;uBAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAE5D,YAAY;uBAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;sBACzC,eAAe;uBAAC,SAAS;;sBACzB,eAAe;uBAAC,MAAM","file":"tabs.js","sourceRoot":"","sourcesContent":["import { NgIf } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ViewChild, QueryList } from '@angular/core';\nimport { IonTabs as IonTabsBase } from '@ionic/angular/common';\n\nimport { IonTabBar, IonTab } from '../directives/proxies';\n\nimport { IonRouterOutlet } from './router-outlet';\n\n@Component({\n selector: 'ion-tabs',\n // Renders the ion-router-outlet its tab pages are created into, so an OnPush\n // strategy here would stop change detection reaching them.\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n template: `\n <ng-content select=\"[slot=top]\"></ng-content>\n <div class=\"tabs-inner\" #tabsInner>\n <ion-router-outlet\n *ngIf=\"tabs.length === 0\"\n #outlet\n tabs=\"true\"\n (stackWillChange)=\"onStackWillChange($event)\"\n (stackDidChange)=\"onStackDidChange($event)\"\n ></ion-router-outlet>\n <ng-content *ngIf=\"tabs.length > 0\" select=\"ion-tab\"></ng-content>\n </div>\n <ng-content></ng-content>\n `,\n standalone: true,\n styles: [\n `\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }\n `,\n ],\n imports: [IonRouterOutlet, NgIf],\n})\nexport class IonTabs extends IonTabsBase {\n @ViewChild('outlet', { read: IonRouterOutlet, static: false }) outlet: IonRouterOutlet;\n\n @ContentChild(IonTabBar, { static: false }) tabBar: IonTabBar | undefined;\n @ContentChildren(IonTabBar) tabBars: QueryList<IonTabBar>;\n @ContentChildren(IonTab) tabs: QueryList<IonTab>;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ionic/angular",
3
- "version": "9.0.2-nightly.20260901",
3
+ "version": "9.0.2",
4
4
  "description": "Angular specific wrappers for @ionic/core",
5
5
  "keywords": [
6
6
  "ionic",
@@ -24,10 +24,11 @@
24
24
  },
25
25
  "homepage": "https://ionicframework.com/",
26
26
  "scripts": {
27
- "build": "npm run clean && npm run build.ng && npm run build.css && npm run build.schematics && npm run validate.package",
27
+ "build": "npm run clean && npm run build.ng && npm run build.change-detection && npm run build.css && npm run build.schematics && npm run validate.package && npm run validate.change-detection",
28
28
  "build.css": "node scripts/build-css.js",
29
29
  "build.schematics": "node scripts/build-schematics.js",
30
30
  "build.ng": "ngc",
31
+ "build.change-detection": "node scripts/normalize-change-detection.js",
31
32
  "clean": "node scripts/clean.js",
32
33
  "lint": "npm run eslint && npm run prettier -- --write --cache",
33
34
  "lint.fix": "npm run eslint -- --fix",
@@ -39,7 +40,8 @@
39
40
  "local.sync.and.pack": "./scripts/sync-and-pack.sh",
40
41
  "test": "echo 'angular no tests yet'",
41
42
  "validate": "npm i && npm run lint && npm run test && npm run build",
42
- "validate.package": "node scripts/verify-exports.js"
43
+ "validate.package": "node scripts/verify-exports.js",
44
+ "validate.change-detection": "node scripts/verify-change-detection.js"
43
45
  },
44
46
  "exports": {
45
47
  "./package.json": "./package.json",
@@ -157,7 +159,7 @@
157
159
  "css/"
158
160
  ],
159
161
  "dependencies": {
160
- "@ionic/core": "9.0.2-nightly.20260901",
162
+ "@ionic/core": "9.0.2",
161
163
  "ionicons": "^8.0.13",
162
164
  "jsonc-parser": "^3.0.0",
163
165
  "tslib": "^2.3.0"
@@ -200,6 +202,7 @@
200
202
  "fs-extra": "^7.0.0",
201
203
  "prettier": "^2.4.1",
202
204
  "rxjs": "~7.5.0",
205
+ "source-map": "^0.7.6",
203
206
  "typescript": "~6.0.0",
204
207
  "typescript-eslint-language-service": "^5.0.0",
205
208
  "zone.js": "~0.16.0"