@ionic/react 8.8.4-dev.11775078622.1402ffa2 → 8.8.4-dev.11775666666.132201b7

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.
Files changed (67) hide show
  1. package/css/core.css +1 -1
  2. package/css/core.css.map +1 -1
  3. package/css/display.css +1 -1
  4. package/css/display.css.map +1 -1
  5. package/css/flex-utils.css +1 -1
  6. package/css/flex-utils.css.map +1 -1
  7. package/css/float-elements.css.map +1 -1
  8. package/css/global.bundle.css.map +1 -1
  9. package/css/ionic/bundle.ionic.css +1 -0
  10. package/css/ionic/bundle.ionic.css.map +1 -0
  11. package/css/ionic/core.ionic.css +1 -0
  12. package/css/ionic/core.ionic.css.map +1 -0
  13. package/css/ionic/global.bundle.ionic.css +1 -0
  14. package/css/ionic/global.bundle.ionic.css.map +1 -0
  15. package/css/ionic/ionic-swiper.ionic.css +1 -0
  16. package/css/ionic/ionic-swiper.ionic.css.map +1 -0
  17. package/css/ionic/link.ionic.css +1 -0
  18. package/css/ionic/link.ionic.css.map +1 -0
  19. package/css/ionic/structure.ionic.css +1 -0
  20. package/css/ionic/structure.ionic.css.map +1 -0
  21. package/css/ionic/typography.ionic.css +1 -0
  22. package/css/ionic/typography.ionic.css.map +1 -0
  23. package/css/ionic/utils.bundle.ionic.css +1 -0
  24. package/css/ionic/utils.bundle.ionic.css.map +1 -0
  25. package/css/ionic-swiper.css +1 -1
  26. package/css/ionic-swiper.css.map +1 -1
  27. package/css/ionic.bundle.css +1 -1
  28. package/css/ionic.bundle.css.map +1 -1
  29. package/css/normalize.css.map +1 -1
  30. package/css/padding.css.map +1 -1
  31. package/css/palettes/dark.always.css +1 -1
  32. package/css/palettes/dark.always.css.map +1 -1
  33. package/css/palettes/dark.class.css +1 -1
  34. package/css/palettes/dark.class.css.map +1 -1
  35. package/css/palettes/dark.system.css +1 -1
  36. package/css/palettes/dark.system.css.map +1 -1
  37. package/css/palettes/high-contrast-dark.always.css +1 -1
  38. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  39. package/css/palettes/high-contrast-dark.class.css +1 -1
  40. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  41. package/css/palettes/high-contrast-dark.system.css +1 -1
  42. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  43. package/css/palettes/high-contrast.always.css.map +1 -1
  44. package/css/palettes/high-contrast.class.css.map +1 -1
  45. package/css/palettes/high-contrast.system.css.map +1 -1
  46. package/css/structure.css.map +1 -1
  47. package/css/text-alignment.css.map +1 -1
  48. package/css/text-transformation.css.map +1 -1
  49. package/css/typography.css.map +1 -1
  50. package/css/utils.bundle.css +1 -1
  51. package/css/utils.bundle.css.map +1 -1
  52. package/dist/index.js +189 -254
  53. package/dist/index.js.map +1 -1
  54. package/dist/types/components/IonRedirect.d.ts +16 -0
  55. package/dist/types/components/IonRoute.d.ts +2 -3
  56. package/dist/types/components/IonRouterContext.d.ts +0 -8
  57. package/dist/types/components/IonRouterOutlet.d.ts +0 -1
  58. package/dist/types/components/index.d.ts +1 -0
  59. package/dist/types/components/proxies.d.ts +1 -0
  60. package/dist/types/contexts/NavContext.d.ts +2 -0
  61. package/dist/types/routing/LocationHistory.d.ts +0 -7
  62. package/dist/types/routing/NavManager.d.ts +4 -1
  63. package/dist/types/routing/OutletPageManager.d.ts +0 -1
  64. package/dist/types/routing/PageManager.d.ts +0 -7
  65. package/dist/types/routing/RouteManagerContext.d.ts +1 -6
  66. package/dist/types/routing/ViewStacks.d.ts +2 -2
  67. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -20,61 +20,62 @@ import { defineCustomElement as defineCustomElement$e } from '@ionic/core/compon
20
20
  import { defineCustomElement as defineCustomElement$f } from '@ionic/core/components/ion-content.js';
21
21
  import { defineCustomElement as defineCustomElement$g } from '@ionic/core/components/ion-datetime.js';
22
22
  import { defineCustomElement as defineCustomElement$h } from '@ionic/core/components/ion-datetime-button.js';
23
- import { defineCustomElement as defineCustomElement$i } from '@ionic/core/components/ion-fab.js';
24
- import { defineCustomElement as defineCustomElement$j } from '@ionic/core/components/ion-fab-list.js';
25
- import { defineCustomElement as defineCustomElement$k } from '@ionic/core/components/ion-footer.js';
26
- import { defineCustomElement as defineCustomElement$l } from '@ionic/core/components/ion-grid.js';
27
- import { defineCustomElement as defineCustomElement$m } from '@ionic/core/components/ion-header.js';
28
- import { defineCustomElement as defineCustomElement$n } from '@ionic/core/components/ion-img.js';
29
- import { defineCustomElement as defineCustomElement$o } from '@ionic/core/components/ion-infinite-scroll.js';
30
- import { defineCustomElement as defineCustomElement$p } from '@ionic/core/components/ion-infinite-scroll-content.js';
31
- import { defineCustomElement as defineCustomElement$q } from '@ionic/core/components/ion-input.js';
32
- import { defineCustomElement as defineCustomElement$r } from '@ionic/core/components/ion-input-otp.js';
33
- import { defineCustomElement as defineCustomElement$s } from '@ionic/core/components/ion-input-password-toggle.js';
34
- import { defineCustomElement as defineCustomElement$t } from '@ionic/core/components/ion-item-divider.js';
35
- import { defineCustomElement as defineCustomElement$u } from '@ionic/core/components/ion-item-group.js';
36
- import { defineCustomElement as defineCustomElement$v } from '@ionic/core/components/ion-item-options.js';
37
- import { defineCustomElement as defineCustomElement$w } from '@ionic/core/components/ion-item-sliding.js';
38
- import { defineCustomElement as defineCustomElement$x } from '@ionic/core/components/ion-label.js';
39
- import { defineCustomElement as defineCustomElement$y } from '@ionic/core/components/ion-list.js';
40
- import { defineCustomElement as defineCustomElement$z } from '@ionic/core/components/ion-list-header.js';
41
- import { defineCustomElement as defineCustomElement$A } from '@ionic/core/components/ion-menu.js';
42
- import { defineCustomElement as defineCustomElement$B } from '@ionic/core/components/ion-menu-button.js';
43
- import { defineCustomElement as defineCustomElement$C } from '@ionic/core/components/ion-menu-toggle.js';
44
- import { defineCustomElement as defineCustomElement$1m } from '@ionic/core/components/ion-nav.js';
45
- import { defineCustomElement as defineCustomElement$D } from '@ionic/core/components/ion-nav-link.js';
46
- import { defineCustomElement as defineCustomElement$E } from '@ionic/core/components/ion-note.js';
47
- import { defineCustomElement as defineCustomElement$F } from '@ionic/core/components/ion-picker.js';
48
- import { defineCustomElement as defineCustomElement$G } from '@ionic/core/components/ion-picker-column.js';
49
- import { defineCustomElement as defineCustomElement$H } from '@ionic/core/components/ion-picker-column-option.js';
50
- import { defineCustomElement as defineCustomElement$I } from '@ionic/core/components/ion-progress-bar.js';
51
- import { defineCustomElement as defineCustomElement$J } from '@ionic/core/components/ion-radio.js';
52
- import { defineCustomElement as defineCustomElement$K } from '@ionic/core/components/ion-radio-group.js';
53
- import { defineCustomElement as defineCustomElement$L } from '@ionic/core/components/ion-range.js';
54
- import { defineCustomElement as defineCustomElement$M } from '@ionic/core/components/ion-refresher.js';
55
- import { defineCustomElement as defineCustomElement$N } from '@ionic/core/components/ion-refresher-content.js';
56
- import { defineCustomElement as defineCustomElement$O } from '@ionic/core/components/ion-reorder.js';
57
- import { defineCustomElement as defineCustomElement$P } from '@ionic/core/components/ion-reorder-group.js';
58
- import { defineCustomElement as defineCustomElement$Q } from '@ionic/core/components/ion-ripple-effect.js';
59
- import { defineCustomElement as defineCustomElement$R } from '@ionic/core/components/ion-row.js';
60
- import { defineCustomElement as defineCustomElement$S } from '@ionic/core/components/ion-searchbar.js';
61
- import { defineCustomElement as defineCustomElement$T } from '@ionic/core/components/ion-segment.js';
62
- import { defineCustomElement as defineCustomElement$U } from '@ionic/core/components/ion-segment-button.js';
63
- import { defineCustomElement as defineCustomElement$V } from '@ionic/core/components/ion-segment-content.js';
64
- import { defineCustomElement as defineCustomElement$W } from '@ionic/core/components/ion-segment-view.js';
65
- import { defineCustomElement as defineCustomElement$X } from '@ionic/core/components/ion-select.js';
66
- import { defineCustomElement as defineCustomElement$Y } from '@ionic/core/components/ion-select-modal.js';
67
- import { defineCustomElement as defineCustomElement$Z } from '@ionic/core/components/ion-select-option.js';
68
- import { defineCustomElement as defineCustomElement$_ } from '@ionic/core/components/ion-skeleton-text.js';
69
- import { defineCustomElement as defineCustomElement$$ } from '@ionic/core/components/ion-spinner.js';
70
- import { defineCustomElement as defineCustomElement$10 } from '@ionic/core/components/ion-split-pane.js';
71
- import { defineCustomElement as defineCustomElement$11 } from '@ionic/core/components/ion-tab.js';
72
- import { defineCustomElement as defineCustomElement$12 } from '@ionic/core/components/ion-text.js';
73
- import { defineCustomElement as defineCustomElement$13 } from '@ionic/core/components/ion-textarea.js';
74
- import { defineCustomElement as defineCustomElement$14 } from '@ionic/core/components/ion-thumbnail.js';
75
- import { defineCustomElement as defineCustomElement$15 } from '@ionic/core/components/ion-title.js';
76
- import { defineCustomElement as defineCustomElement$16 } from '@ionic/core/components/ion-toggle.js';
77
- import { defineCustomElement as defineCustomElement$17 } from '@ionic/core/components/ion-toolbar.js';
23
+ import { defineCustomElement as defineCustomElement$i } from '@ionic/core/components/ion-divider.js';
24
+ import { defineCustomElement as defineCustomElement$j } from '@ionic/core/components/ion-fab.js';
25
+ import { defineCustomElement as defineCustomElement$k } from '@ionic/core/components/ion-fab-list.js';
26
+ import { defineCustomElement as defineCustomElement$l } from '@ionic/core/components/ion-footer.js';
27
+ import { defineCustomElement as defineCustomElement$m } from '@ionic/core/components/ion-grid.js';
28
+ import { defineCustomElement as defineCustomElement$n } from '@ionic/core/components/ion-header.js';
29
+ import { defineCustomElement as defineCustomElement$o } from '@ionic/core/components/ion-img.js';
30
+ import { defineCustomElement as defineCustomElement$p } from '@ionic/core/components/ion-infinite-scroll.js';
31
+ import { defineCustomElement as defineCustomElement$q } from '@ionic/core/components/ion-infinite-scroll-content.js';
32
+ import { defineCustomElement as defineCustomElement$r } from '@ionic/core/components/ion-input.js';
33
+ import { defineCustomElement as defineCustomElement$s } from '@ionic/core/components/ion-input-otp.js';
34
+ import { defineCustomElement as defineCustomElement$t } from '@ionic/core/components/ion-input-password-toggle.js';
35
+ import { defineCustomElement as defineCustomElement$u } from '@ionic/core/components/ion-item-divider.js';
36
+ import { defineCustomElement as defineCustomElement$v } from '@ionic/core/components/ion-item-group.js';
37
+ import { defineCustomElement as defineCustomElement$w } from '@ionic/core/components/ion-item-options.js';
38
+ import { defineCustomElement as defineCustomElement$x } from '@ionic/core/components/ion-item-sliding.js';
39
+ import { defineCustomElement as defineCustomElement$y } from '@ionic/core/components/ion-label.js';
40
+ import { defineCustomElement as defineCustomElement$z } from '@ionic/core/components/ion-list.js';
41
+ import { defineCustomElement as defineCustomElement$A } from '@ionic/core/components/ion-list-header.js';
42
+ import { defineCustomElement as defineCustomElement$B } from '@ionic/core/components/ion-menu.js';
43
+ import { defineCustomElement as defineCustomElement$C } from '@ionic/core/components/ion-menu-button.js';
44
+ import { defineCustomElement as defineCustomElement$D } from '@ionic/core/components/ion-menu-toggle.js';
45
+ import { defineCustomElement as defineCustomElement$1n } from '@ionic/core/components/ion-nav.js';
46
+ import { defineCustomElement as defineCustomElement$E } from '@ionic/core/components/ion-nav-link.js';
47
+ import { defineCustomElement as defineCustomElement$F } from '@ionic/core/components/ion-note.js';
48
+ import { defineCustomElement as defineCustomElement$G } from '@ionic/core/components/ion-picker.js';
49
+ import { defineCustomElement as defineCustomElement$H } from '@ionic/core/components/ion-picker-column.js';
50
+ import { defineCustomElement as defineCustomElement$I } from '@ionic/core/components/ion-picker-column-option.js';
51
+ import { defineCustomElement as defineCustomElement$J } from '@ionic/core/components/ion-progress-bar.js';
52
+ import { defineCustomElement as defineCustomElement$K } from '@ionic/core/components/ion-radio.js';
53
+ import { defineCustomElement as defineCustomElement$L } from '@ionic/core/components/ion-radio-group.js';
54
+ import { defineCustomElement as defineCustomElement$M } from '@ionic/core/components/ion-range.js';
55
+ import { defineCustomElement as defineCustomElement$N } from '@ionic/core/components/ion-refresher.js';
56
+ import { defineCustomElement as defineCustomElement$O } from '@ionic/core/components/ion-refresher-content.js';
57
+ import { defineCustomElement as defineCustomElement$P } from '@ionic/core/components/ion-reorder.js';
58
+ import { defineCustomElement as defineCustomElement$Q } from '@ionic/core/components/ion-reorder-group.js';
59
+ import { defineCustomElement as defineCustomElement$R } from '@ionic/core/components/ion-ripple-effect.js';
60
+ import { defineCustomElement as defineCustomElement$S } from '@ionic/core/components/ion-row.js';
61
+ import { defineCustomElement as defineCustomElement$T } from '@ionic/core/components/ion-searchbar.js';
62
+ import { defineCustomElement as defineCustomElement$U } from '@ionic/core/components/ion-segment.js';
63
+ import { defineCustomElement as defineCustomElement$V } from '@ionic/core/components/ion-segment-button.js';
64
+ import { defineCustomElement as defineCustomElement$W } from '@ionic/core/components/ion-segment-content.js';
65
+ import { defineCustomElement as defineCustomElement$X } from '@ionic/core/components/ion-segment-view.js';
66
+ import { defineCustomElement as defineCustomElement$Y } from '@ionic/core/components/ion-select.js';
67
+ import { defineCustomElement as defineCustomElement$Z } from '@ionic/core/components/ion-select-modal.js';
68
+ import { defineCustomElement as defineCustomElement$_ } from '@ionic/core/components/ion-select-option.js';
69
+ import { defineCustomElement as defineCustomElement$$ } from '@ionic/core/components/ion-skeleton-text.js';
70
+ import { defineCustomElement as defineCustomElement$10 } from '@ionic/core/components/ion-spinner.js';
71
+ import { defineCustomElement as defineCustomElement$11 } from '@ionic/core/components/ion-split-pane.js';
72
+ import { defineCustomElement as defineCustomElement$12 } from '@ionic/core/components/ion-tab.js';
73
+ import { defineCustomElement as defineCustomElement$13 } from '@ionic/core/components/ion-text.js';
74
+ import { defineCustomElement as defineCustomElement$14 } from '@ionic/core/components/ion-textarea.js';
75
+ import { defineCustomElement as defineCustomElement$15 } from '@ionic/core/components/ion-thumbnail.js';
76
+ import { defineCustomElement as defineCustomElement$16 } from '@ionic/core/components/ion-title.js';
77
+ import { defineCustomElement as defineCustomElement$17 } from '@ionic/core/components/ion-toggle.js';
78
+ import { defineCustomElement as defineCustomElement$18 } from '@ionic/core/components/ion-toolbar.js';
78
79
  import { IonBreadcrumb as IonBreadcrumb$1 } from '@ionic/core/components/ion-breadcrumb.js';
79
80
  import { IonButton as IonButton$1 } from '@ionic/core/components/ion-button.js';
80
81
  import { IonCard as IonCard$1 } from '@ionic/core/components/ion-card.js';
@@ -82,20 +83,20 @@ import { IonFabButton as IonFabButton$1 } from '@ionic/core/components/ion-fab-b
82
83
  import { IonItemOption as IonItemOption$1 } from '@ionic/core/components/ion-item-option.js';
83
84
  import { IonItem as IonItem$1 } from '@ionic/core/components/ion-item.js';
84
85
  import { IonRouterLink as IonRouterLink$1 } from '@ionic/core/components/ion-router-link.js';
85
- import { defineCustomElement as defineCustomElement$18 } from '@ionic/core/components/ion-alert.js';
86
- import { defineCustomElement as defineCustomElement$19 } from '@ionic/core/components/ion-loading.js';
87
- import { defineCustomElement as defineCustomElement$1a } from '@ionic/core/components/ion-toast.js';
88
- import { defineCustomElement as defineCustomElement$1b } from '@ionic/core/components/ion-picker-legacy.js';
89
- import { defineCustomElement as defineCustomElement$1c } from '@ionic/core/components/ion-action-sheet.js';
90
- import { defineCustomElement as defineCustomElement$1d } from '@ionic/core/components/ion-modal.js';
91
- import { defineCustomElement as defineCustomElement$1e } from '@ionic/core/components/ion-popover.js';
92
- import { defineCustomElement as defineCustomElement$1k } from '@ionic/core/components/ion-app.js';
93
- import { defineCustomElement as defineCustomElement$1i } from '@ionic/core/components/ion-back-button.js';
94
- import { defineCustomElement as defineCustomElement$1j } from '@ionic/core/components/ion-router-outlet.js';
95
- import { defineCustomElement as defineCustomElement$1g } from '@ionic/core/components/ion-tab-bar.js';
96
- import { defineCustomElement as defineCustomElement$1f } from '@ionic/core/components/ion-tab-button.js';
97
- import { defineCustomElement as defineCustomElement$1h } from '@ionic/core/components/ion-tabs.js';
98
- import { defineCustomElement as defineCustomElement$1l } from 'ionicons/components/ion-icon.js';
86
+ import { defineCustomElement as defineCustomElement$19 } from '@ionic/core/components/ion-alert.js';
87
+ import { defineCustomElement as defineCustomElement$1a } from '@ionic/core/components/ion-loading.js';
88
+ import { defineCustomElement as defineCustomElement$1b } from '@ionic/core/components/ion-toast.js';
89
+ import { defineCustomElement as defineCustomElement$1c } from '@ionic/core/components/ion-picker-legacy.js';
90
+ import { defineCustomElement as defineCustomElement$1d } from '@ionic/core/components/ion-action-sheet.js';
91
+ import { defineCustomElement as defineCustomElement$1e } from '@ionic/core/components/ion-modal.js';
92
+ import { defineCustomElement as defineCustomElement$1f } from '@ionic/core/components/ion-popover.js';
93
+ import { defineCustomElement as defineCustomElement$1l } from '@ionic/core/components/ion-app.js';
94
+ import { defineCustomElement as defineCustomElement$1j } from '@ionic/core/components/ion-back-button.js';
95
+ import { defineCustomElement as defineCustomElement$1k } from '@ionic/core/components/ion-router-outlet.js';
96
+ import { defineCustomElement as defineCustomElement$1h } from '@ionic/core/components/ion-tab-bar.js';
97
+ import { defineCustomElement as defineCustomElement$1g } from '@ionic/core/components/ion-tab-button.js';
98
+ import { defineCustomElement as defineCustomElement$1i } from '@ionic/core/components/ion-tabs.js';
99
+ import { defineCustomElement as defineCustomElement$1m } from 'ionicons/components/ion-icon.js';
99
100
 
100
101
  const IonLifeCycleContext = /*@__PURE__*/ React.createContext({
101
102
  onIonViewWillEnter: () => {
@@ -380,7 +381,9 @@ const useIonViewDidLeave = (callback, deps = []) => {
380
381
  };
381
382
 
382
383
  const NavContext = /*@__PURE__*/ React.createContext({
384
+ getIonRedirect: () => undefined,
383
385
  getIonRoute: () => undefined,
386
+ getPageManager: () => undefined,
384
387
  getStackManager: () => undefined,
385
388
  goBack: (route) => {
386
389
  if (typeof window !== 'undefined') {
@@ -641,60 +644,61 @@ const IonCol = /*@__PURE__*/ createReactComponent('ion-col', undefined, undefine
641
644
  const IonContent = /*@__PURE__*/ createReactComponent('ion-content', undefined, undefined, defineCustomElement$f);
642
645
  const IonDatetime = /*@__PURE__*/ createReactComponent('ion-datetime', undefined, undefined, defineCustomElement$g);
643
646
  const IonDatetimeButton = /*@__PURE__*/ createReactComponent('ion-datetime-button', undefined, undefined, defineCustomElement$h);
644
- const IonFab = /*@__PURE__*/ createReactComponent('ion-fab', undefined, undefined, defineCustomElement$i);
645
- const IonFabList = /*@__PURE__*/ createReactComponent('ion-fab-list', undefined, undefined, defineCustomElement$j);
646
- const IonFooter = /*@__PURE__*/ createReactComponent('ion-footer', undefined, undefined, defineCustomElement$k);
647
- const IonGrid = /*@__PURE__*/ createReactComponent('ion-grid', undefined, undefined, defineCustomElement$l);
648
- const IonHeader = /*@__PURE__*/ createReactComponent('ion-header', undefined, undefined, defineCustomElement$m);
649
- const IonImg = /*@__PURE__*/ createReactComponent('ion-img', undefined, undefined, defineCustomElement$n);
650
- const IonInfiniteScroll = /*@__PURE__*/ createReactComponent('ion-infinite-scroll', undefined, undefined, defineCustomElement$o);
651
- const IonInfiniteScrollContent = /*@__PURE__*/ createReactComponent('ion-infinite-scroll-content', undefined, undefined, defineCustomElement$p);
652
- const IonInput = /*@__PURE__*/ createReactComponent('ion-input', undefined, undefined, defineCustomElement$q);
653
- const IonInputOtp = /*@__PURE__*/ createReactComponent('ion-input-otp', undefined, undefined, defineCustomElement$r);
654
- const IonInputPasswordToggle = /*@__PURE__*/ createReactComponent('ion-input-password-toggle', undefined, undefined, defineCustomElement$s);
655
- const IonItemDivider = /*@__PURE__*/ createReactComponent('ion-item-divider', undefined, undefined, defineCustomElement$t);
656
- const IonItemGroup = /*@__PURE__*/ createReactComponent('ion-item-group', undefined, undefined, defineCustomElement$u);
657
- const IonItemOptions = /*@__PURE__*/ createReactComponent('ion-item-options', undefined, undefined, defineCustomElement$v);
658
- const IonItemSliding = /*@__PURE__*/ createReactComponent('ion-item-sliding', undefined, undefined, defineCustomElement$w);
659
- const IonLabel = /*@__PURE__*/ createReactComponent('ion-label', undefined, undefined, defineCustomElement$x);
660
- const IonList = /*@__PURE__*/ createReactComponent('ion-list', undefined, undefined, defineCustomElement$y);
661
- const IonListHeader = /*@__PURE__*/ createReactComponent('ion-list-header', undefined, undefined, defineCustomElement$z);
662
- const IonMenu = /*@__PURE__*/ createReactComponent('ion-menu', undefined, undefined, defineCustomElement$A);
663
- const IonMenuButton = /*@__PURE__*/ createReactComponent('ion-menu-button', undefined, undefined, defineCustomElement$B);
664
- const IonMenuToggle = /*@__PURE__*/ createReactComponent('ion-menu-toggle', undefined, undefined, defineCustomElement$C);
665
- const IonNavLink = /*@__PURE__*/ createReactComponent('ion-nav-link', undefined, undefined, defineCustomElement$D);
666
- const IonNote = /*@__PURE__*/ createReactComponent('ion-note', undefined, undefined, defineCustomElement$E);
667
- const IonPicker = /*@__PURE__*/ createReactComponent('ion-picker', undefined, undefined, defineCustomElement$F);
668
- const IonPickerColumn = /*@__PURE__*/ createReactComponent('ion-picker-column', undefined, undefined, defineCustomElement$G);
669
- const IonPickerColumnOption = /*@__PURE__*/ createReactComponent('ion-picker-column-option', undefined, undefined, defineCustomElement$H);
670
- const IonProgressBar = /*@__PURE__*/ createReactComponent('ion-progress-bar', undefined, undefined, defineCustomElement$I);
671
- const IonRadio = /*@__PURE__*/ createReactComponent('ion-radio', undefined, undefined, defineCustomElement$J);
672
- const IonRadioGroup = /*@__PURE__*/ createReactComponent('ion-radio-group', undefined, undefined, defineCustomElement$K);
673
- const IonRange = /*@__PURE__*/ createReactComponent('ion-range', undefined, undefined, defineCustomElement$L);
674
- const IonRefresher = /*@__PURE__*/ createReactComponent('ion-refresher', undefined, undefined, defineCustomElement$M);
675
- const IonRefresherContent = /*@__PURE__*/ createReactComponent('ion-refresher-content', undefined, undefined, defineCustomElement$N);
676
- const IonReorder = /*@__PURE__*/ createReactComponent('ion-reorder', undefined, undefined, defineCustomElement$O);
677
- const IonReorderGroup = /*@__PURE__*/ createReactComponent('ion-reorder-group', undefined, undefined, defineCustomElement$P);
678
- const IonRippleEffect = /*@__PURE__*/ createReactComponent('ion-ripple-effect', undefined, undefined, defineCustomElement$Q);
679
- const IonRow = /*@__PURE__*/ createReactComponent('ion-row', undefined, undefined, defineCustomElement$R);
680
- const IonSearchbar = /*@__PURE__*/ createReactComponent('ion-searchbar', undefined, undefined, defineCustomElement$S);
681
- const IonSegment = /*@__PURE__*/ createReactComponent('ion-segment', undefined, undefined, defineCustomElement$T);
682
- const IonSegmentButton = /*@__PURE__*/ createReactComponent('ion-segment-button', undefined, undefined, defineCustomElement$U);
683
- const IonSegmentContent = /*@__PURE__*/ createReactComponent('ion-segment-content', undefined, undefined, defineCustomElement$V);
684
- const IonSegmentView = /*@__PURE__*/ createReactComponent('ion-segment-view', undefined, undefined, defineCustomElement$W);
685
- const IonSelect = /*@__PURE__*/ createReactComponent('ion-select', undefined, undefined, defineCustomElement$X);
686
- const IonSelectModal = /*@__PURE__*/ createReactComponent('ion-select-modal', undefined, undefined, defineCustomElement$Y);
687
- const IonSelectOption = /*@__PURE__*/ createReactComponent('ion-select-option', undefined, undefined, defineCustomElement$Z);
688
- const IonSkeletonText = /*@__PURE__*/ createReactComponent('ion-skeleton-text', undefined, undefined, defineCustomElement$_);
689
- const IonSpinner = /*@__PURE__*/ createReactComponent('ion-spinner', undefined, undefined, defineCustomElement$$);
690
- const IonSplitPane = /*@__PURE__*/ createReactComponent('ion-split-pane', undefined, undefined, defineCustomElement$10);
691
- const IonTab = /*@__PURE__*/ createReactComponent('ion-tab', undefined, undefined, defineCustomElement$11);
692
- const IonText = /*@__PURE__*/ createReactComponent('ion-text', undefined, undefined, defineCustomElement$12);
693
- const IonTextarea = /*@__PURE__*/ createReactComponent('ion-textarea', undefined, undefined, defineCustomElement$13);
694
- const IonThumbnail = /*@__PURE__*/ createReactComponent('ion-thumbnail', undefined, undefined, defineCustomElement$14);
695
- const IonTitle = /*@__PURE__*/ createReactComponent('ion-title', undefined, undefined, defineCustomElement$15);
696
- const IonToggle = /*@__PURE__*/ createReactComponent('ion-toggle', undefined, undefined, defineCustomElement$16);
697
- const IonToolbar = /*@__PURE__*/ createReactComponent('ion-toolbar', undefined, undefined, defineCustomElement$17);
647
+ const IonDivider = /*@__PURE__*/ createReactComponent('ion-divider', undefined, undefined, defineCustomElement$i);
648
+ const IonFab = /*@__PURE__*/ createReactComponent('ion-fab', undefined, undefined, defineCustomElement$j);
649
+ const IonFabList = /*@__PURE__*/ createReactComponent('ion-fab-list', undefined, undefined, defineCustomElement$k);
650
+ const IonFooter = /*@__PURE__*/ createReactComponent('ion-footer', undefined, undefined, defineCustomElement$l);
651
+ const IonGrid = /*@__PURE__*/ createReactComponent('ion-grid', undefined, undefined, defineCustomElement$m);
652
+ const IonHeader = /*@__PURE__*/ createReactComponent('ion-header', undefined, undefined, defineCustomElement$n);
653
+ const IonImg = /*@__PURE__*/ createReactComponent('ion-img', undefined, undefined, defineCustomElement$o);
654
+ const IonInfiniteScroll = /*@__PURE__*/ createReactComponent('ion-infinite-scroll', undefined, undefined, defineCustomElement$p);
655
+ const IonInfiniteScrollContent = /*@__PURE__*/ createReactComponent('ion-infinite-scroll-content', undefined, undefined, defineCustomElement$q);
656
+ const IonInput = /*@__PURE__*/ createReactComponent('ion-input', undefined, undefined, defineCustomElement$r);
657
+ const IonInputOtp = /*@__PURE__*/ createReactComponent('ion-input-otp', undefined, undefined, defineCustomElement$s);
658
+ const IonInputPasswordToggle = /*@__PURE__*/ createReactComponent('ion-input-password-toggle', undefined, undefined, defineCustomElement$t);
659
+ const IonItemDivider = /*@__PURE__*/ createReactComponent('ion-item-divider', undefined, undefined, defineCustomElement$u);
660
+ const IonItemGroup = /*@__PURE__*/ createReactComponent('ion-item-group', undefined, undefined, defineCustomElement$v);
661
+ const IonItemOptions = /*@__PURE__*/ createReactComponent('ion-item-options', undefined, undefined, defineCustomElement$w);
662
+ const IonItemSliding = /*@__PURE__*/ createReactComponent('ion-item-sliding', undefined, undefined, defineCustomElement$x);
663
+ const IonLabel = /*@__PURE__*/ createReactComponent('ion-label', undefined, undefined, defineCustomElement$y);
664
+ const IonList = /*@__PURE__*/ createReactComponent('ion-list', undefined, undefined, defineCustomElement$z);
665
+ const IonListHeader = /*@__PURE__*/ createReactComponent('ion-list-header', undefined, undefined, defineCustomElement$A);
666
+ const IonMenu = /*@__PURE__*/ createReactComponent('ion-menu', undefined, undefined, defineCustomElement$B);
667
+ const IonMenuButton = /*@__PURE__*/ createReactComponent('ion-menu-button', undefined, undefined, defineCustomElement$C);
668
+ const IonMenuToggle = /*@__PURE__*/ createReactComponent('ion-menu-toggle', undefined, undefined, defineCustomElement$D);
669
+ const IonNavLink = /*@__PURE__*/ createReactComponent('ion-nav-link', undefined, undefined, defineCustomElement$E);
670
+ const IonNote = /*@__PURE__*/ createReactComponent('ion-note', undefined, undefined, defineCustomElement$F);
671
+ const IonPicker = /*@__PURE__*/ createReactComponent('ion-picker', undefined, undefined, defineCustomElement$G);
672
+ const IonPickerColumn = /*@__PURE__*/ createReactComponent('ion-picker-column', undefined, undefined, defineCustomElement$H);
673
+ const IonPickerColumnOption = /*@__PURE__*/ createReactComponent('ion-picker-column-option', undefined, undefined, defineCustomElement$I);
674
+ const IonProgressBar = /*@__PURE__*/ createReactComponent('ion-progress-bar', undefined, undefined, defineCustomElement$J);
675
+ const IonRadio = /*@__PURE__*/ createReactComponent('ion-radio', undefined, undefined, defineCustomElement$K);
676
+ const IonRadioGroup = /*@__PURE__*/ createReactComponent('ion-radio-group', undefined, undefined, defineCustomElement$L);
677
+ const IonRange = /*@__PURE__*/ createReactComponent('ion-range', undefined, undefined, defineCustomElement$M);
678
+ const IonRefresher = /*@__PURE__*/ createReactComponent('ion-refresher', undefined, undefined, defineCustomElement$N);
679
+ const IonRefresherContent = /*@__PURE__*/ createReactComponent('ion-refresher-content', undefined, undefined, defineCustomElement$O);
680
+ const IonReorder = /*@__PURE__*/ createReactComponent('ion-reorder', undefined, undefined, defineCustomElement$P);
681
+ const IonReorderGroup = /*@__PURE__*/ createReactComponent('ion-reorder-group', undefined, undefined, defineCustomElement$Q);
682
+ const IonRippleEffect = /*@__PURE__*/ createReactComponent('ion-ripple-effect', undefined, undefined, defineCustomElement$R);
683
+ const IonRow = /*@__PURE__*/ createReactComponent('ion-row', undefined, undefined, defineCustomElement$S);
684
+ const IonSearchbar = /*@__PURE__*/ createReactComponent('ion-searchbar', undefined, undefined, defineCustomElement$T);
685
+ const IonSegment = /*@__PURE__*/ createReactComponent('ion-segment', undefined, undefined, defineCustomElement$U);
686
+ const IonSegmentButton = /*@__PURE__*/ createReactComponent('ion-segment-button', undefined, undefined, defineCustomElement$V);
687
+ const IonSegmentContent = /*@__PURE__*/ createReactComponent('ion-segment-content', undefined, undefined, defineCustomElement$W);
688
+ const IonSegmentView = /*@__PURE__*/ createReactComponent('ion-segment-view', undefined, undefined, defineCustomElement$X);
689
+ const IonSelect = /*@__PURE__*/ createReactComponent('ion-select', undefined, undefined, defineCustomElement$Y);
690
+ const IonSelectModal = /*@__PURE__*/ createReactComponent('ion-select-modal', undefined, undefined, defineCustomElement$Z);
691
+ const IonSelectOption = /*@__PURE__*/ createReactComponent('ion-select-option', undefined, undefined, defineCustomElement$_);
692
+ const IonSkeletonText = /*@__PURE__*/ createReactComponent('ion-skeleton-text', undefined, undefined, defineCustomElement$$);
693
+ const IonSpinner = /*@__PURE__*/ createReactComponent('ion-spinner', undefined, undefined, defineCustomElement$10);
694
+ const IonSplitPane = /*@__PURE__*/ createReactComponent('ion-split-pane', undefined, undefined, defineCustomElement$11);
695
+ const IonTab = /*@__PURE__*/ createReactComponent('ion-tab', undefined, undefined, defineCustomElement$12);
696
+ const IonText = /*@__PURE__*/ createReactComponent('ion-text', undefined, undefined, defineCustomElement$13);
697
+ const IonTextarea = /*@__PURE__*/ createReactComponent('ion-textarea', undefined, undefined, defineCustomElement$14);
698
+ const IonThumbnail = /*@__PURE__*/ createReactComponent('ion-thumbnail', undefined, undefined, defineCustomElement$15);
699
+ const IonTitle = /*@__PURE__*/ createReactComponent('ion-title', undefined, undefined, defineCustomElement$16);
700
+ const IonToggle = /*@__PURE__*/ createReactComponent('ion-toggle', undefined, undefined, defineCustomElement$17);
701
+ const IonToolbar = /*@__PURE__*/ createReactComponent('ion-toolbar', undefined, undefined, defineCustomElement$18);
698
702
 
699
703
  const createForwardRef = (ReactComponent, // TODO(FW-2959): type
700
704
  displayName) => {
@@ -729,11 +733,6 @@ const createRoutingComponent = (tagName, customElement) => {
729
733
  this.handleClick = (e) => {
730
734
  const { routerLink, routerDirection, routerOptions, routerAnimation } = this.props;
731
735
  if (routerLink !== undefined) {
732
- // Allow modifier key clicks (ctrl/cmd/shift) to open the link in a new tab/window
733
- // without triggering SPA navigation on the current page.
734
- if (e.metaKey || e.ctrlKey || e.shiftKey) {
735
- return;
736
- }
737
736
  e.preventDefault();
738
737
  this.context.navigate(routerLink, routerDirection, undefined, routerAnimation, routerOptions);
739
738
  }
@@ -991,19 +990,19 @@ const createInlineOverlayComponent = (tagName, defineCustomElement, hasDelegateH
991
990
  };
992
991
  const DELEGATE_HOST = 'ion-delegate-host';
993
992
 
994
- const IonAlert = /*@__PURE__*/ createInlineOverlayComponent('ion-alert', defineCustomElement$18);
993
+ const IonAlert = /*@__PURE__*/ createInlineOverlayComponent('ion-alert', defineCustomElement$19);
995
994
 
996
- const IonLoading = /*@__PURE__*/ createInlineOverlayComponent('ion-loading', defineCustomElement$19);
995
+ const IonLoading = /*@__PURE__*/ createInlineOverlayComponent('ion-loading', defineCustomElement$1a);
997
996
 
998
- const IonToast = /*@__PURE__*/ createInlineOverlayComponent('ion-toast', defineCustomElement$1a);
997
+ const IonToast = /*@__PURE__*/ createInlineOverlayComponent('ion-toast', defineCustomElement$1b);
999
998
 
1000
- const IonPickerLegacy = /*@__PURE__*/ createInlineOverlayComponent('ion-picker-legacy', defineCustomElement$1b);
999
+ const IonPickerLegacy = /*@__PURE__*/ createInlineOverlayComponent('ion-picker-legacy', defineCustomElement$1c);
1001
1000
 
1002
- const IonActionSheet = /*@__PURE__*/ createInlineOverlayComponent('ion-action-sheet', defineCustomElement$1c);
1001
+ const IonActionSheet = /*@__PURE__*/ createInlineOverlayComponent('ion-action-sheet', defineCustomElement$1d);
1003
1002
 
1004
- const IonModal = /*@__PURE__*/ createInlineOverlayComponent('ion-modal', defineCustomElement$1d, true);
1003
+ const IonModal = /*@__PURE__*/ createInlineOverlayComponent('ion-modal', defineCustomElement$1e, true);
1005
1004
 
1006
- const IonPopover = /*@__PURE__*/ createInlineOverlayComponent('ion-popover', defineCustomElement$1e);
1005
+ const IonPopover = /*@__PURE__*/ createInlineOverlayComponent('ion-popover', defineCustomElement$1f);
1007
1006
 
1008
1007
  const IonContext = React.createContext({
1009
1008
  addOverlay: () => {
@@ -1095,14 +1094,14 @@ const IonOverlayManager = ({ onAddOverlay, onRemoveOverlay }) => {
1095
1094
  }) }));
1096
1095
  };
1097
1096
 
1098
- const IonTabButtonInner = /*@__PURE__*/ createReactComponent('ion-tab-button', undefined, undefined, defineCustomElement$1f);
1099
- const IonTabBarInner = /*@__PURE__*/ createReactComponent('ion-tab-bar', undefined, undefined, defineCustomElement$1g);
1100
- const IonTabsInner = /*@__PURE__*/ createReactComponent('ion-tabs', undefined, undefined, defineCustomElement$1h);
1101
- const IonBackButtonInner = /*@__PURE__*/ createReactComponent('ion-back-button', undefined, undefined, defineCustomElement$1i);
1102
- const IonRouterOutletInner = /*@__PURE__*/ createReactComponent('ion-router-outlet', undefined, undefined, defineCustomElement$1j);
1103
- const IonAppInner = /*@__PURE__*/ createReactComponent('ion-app', undefined, undefined, defineCustomElement$1k);
1097
+ const IonTabButtonInner = /*@__PURE__*/ createReactComponent('ion-tab-button', undefined, undefined, defineCustomElement$1g);
1098
+ const IonTabBarInner = /*@__PURE__*/ createReactComponent('ion-tab-bar', undefined, undefined, defineCustomElement$1h);
1099
+ const IonTabsInner = /*@__PURE__*/ createReactComponent('ion-tabs', undefined, undefined, defineCustomElement$1i);
1100
+ const IonBackButtonInner = /*@__PURE__*/ createReactComponent('ion-back-button', undefined, undefined, defineCustomElement$1j);
1101
+ const IonRouterOutletInner = /*@__PURE__*/ createReactComponent('ion-router-outlet', undefined, undefined, defineCustomElement$1k);
1102
+ const IonAppInner = /*@__PURE__*/ createReactComponent('ion-app', undefined, undefined, defineCustomElement$1l);
1104
1103
  // ionicons
1105
- const IonIconInner = /*@__PURE__*/ createReactComponent('ion-icon', undefined, undefined, defineCustomElement$1l);
1104
+ const IonIconInner = /*@__PURE__*/ createReactComponent('ion-icon', undefined, undefined, defineCustomElement$1m);
1106
1105
 
1107
1106
  class IonApp extends React.Component {
1108
1107
  constructor(props) {
@@ -1140,18 +1139,7 @@ class PageManager extends React.PureComponent {
1140
1139
  super(props);
1141
1140
  this.ionPageElementRef = React.createRef();
1142
1141
  // React refs must be stable (not created inline).
1143
- // Wrap merged refs to add ion-page-invisible synchronously when element is created
1144
- const baseMergedRefs = mergeRefs(this.ionPageElementRef, this.props.forwardedRef);
1145
- this.stableMergedRefs = (node) => {
1146
- if (node && !node.classList.contains('ion-page-invisible') && !node.classList.contains('ion-page-hidden')) {
1147
- // Add ion-page-invisible synchronously before first paint (if in an outlet)
1148
- // This prevents the flash that occurs when componentDidMount runs after paint
1149
- if (this.context?.isInOutlet?.()) {
1150
- node.classList.add('ion-page-invisible');
1151
- }
1152
- }
1153
- baseMergedRefs(node);
1154
- };
1142
+ this.stableMergedRefs = mergeRefs(this.ionPageElementRef, this.props.forwardedRef);
1155
1143
  /**
1156
1144
  * This binds the scope of the following methods to the class scope.
1157
1145
  * The `.bind` method returns a new function, so we need to assign it
@@ -1163,38 +1151,11 @@ class PageManager extends React.PureComponent {
1163
1151
  this.ionViewWillLeaveHandler = this.ionViewWillLeaveHandler.bind(this);
1164
1152
  this.ionViewDidLeaveHandler = this.ionViewDidLeaveHandler.bind(this);
1165
1153
  }
1166
- parseClasses(className) {
1167
- if (!className)
1168
- return new Set();
1169
- return new Set(className.split(/\s+/).filter(Boolean));
1170
- }
1171
- /**
1172
- * Updates classList by diffing old/new className props.
1173
- * Preserves framework-added classes (can-go-back, ion-page-invisible, etc.).
1174
- */
1175
- updateUserClasses(oldClassName, newClassName) {
1176
- if (!this.ionPageElementRef.current)
1177
- return;
1178
- const oldClasses = this.parseClasses(oldClassName);
1179
- const newClasses = this.parseClasses(newClassName);
1180
- oldClasses.forEach((cls) => {
1181
- if (!newClasses.has(cls)) {
1182
- this.ionPageElementRef.current.classList.remove(cls);
1183
- }
1184
- });
1185
- newClasses.forEach((cls) => {
1186
- if (!oldClasses.has(cls)) {
1187
- this.ionPageElementRef.current.classList.add(cls);
1188
- }
1189
- });
1190
- }
1191
1154
  componentDidMount() {
1192
1155
  if (this.ionPageElementRef.current) {
1193
- // Add user classes via DOM manipulation to preserve framework-added classes.
1194
- // We only set "ion-page" in JSX; user classes are added here.
1195
- // Note: ion-page-invisible is added in the ref callback (stableMergedRefs) to prevent flash.
1196
- // The ref callback runs synchronously when the element is created, before the browser paints.
1197
- this.updateUserClasses(undefined, this.props.className);
1156
+ if (this.context.isInOutlet()) {
1157
+ this.ionPageElementRef.current.classList.add('ion-page-invisible');
1158
+ }
1198
1159
  this.context.registerIonPage(this.ionPageElementRef.current, this.props.routeInfo);
1199
1160
  this.ionPageElementRef.current.addEventListener('ionViewWillEnter', this.ionViewWillEnterHandler);
1200
1161
  this.ionPageElementRef.current.addEventListener('ionViewDidEnter', this.ionViewDidEnterHandler);
@@ -1202,11 +1163,6 @@ class PageManager extends React.PureComponent {
1202
1163
  this.ionPageElementRef.current.addEventListener('ionViewDidLeave', this.ionViewDidLeaveHandler);
1203
1164
  }
1204
1165
  }
1205
- componentDidUpdate(prevProps) {
1206
- if (prevProps.className !== this.props.className) {
1207
- this.updateUserClasses(prevProps.className, this.props.className);
1208
- }
1209
- }
1210
1166
  componentWillUnmount() {
1211
1167
  if (this.ionPageElementRef.current) {
1212
1168
  this.ionPageElementRef.current.removeEventListener('ionViewWillEnter', this.ionViewWillEnterHandler);
@@ -1236,11 +1192,9 @@ class PageManager extends React.PureComponent {
1236
1192
  render() {
1237
1193
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1238
1194
  const { className, children, routeInfo, forwardedRef, ...props } = this.props;
1239
- // Only set "ion-page" in JSX. User classes are managed via DOM in componentDidMount/componentDidUpdate
1240
- // to preserve framework-added classes (can-go-back, ion-page-invisible, etc.) when className prop changes.
1241
1195
  return (jsx(IonLifeCycleContext.Consumer, { children: (context) => {
1242
1196
  this.ionLifeCycleContext = context;
1243
- return (jsx("div", { className: "ion-page", ref: this.stableMergedRefs, ...props, children: children }));
1197
+ return (jsx("div", { className: className ? `${className} ion-page` : `ion-page`, ref: this.stableMergedRefs, ...props, children: children }));
1244
1198
  } }));
1245
1199
  }
1246
1200
  static get contextType() {
@@ -1300,7 +1254,7 @@ const ReactDelegate = (addView, removeView) => {
1300
1254
  };
1301
1255
  };
1302
1256
 
1303
- const IonNavInner = createReactComponent('ion-nav', undefined, undefined, defineCustomElement$1m);
1257
+ const IonNavInner = createReactComponent('ion-nav', undefined, undefined, defineCustomElement$1n);
1304
1258
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1305
1259
  const IonNavInternal = ({ children, forwardedRef, ...restOfProps }) => {
1306
1260
  const [views, setViews] = useState([]);
@@ -1379,10 +1333,10 @@ class OutletPageManager extends React.Component {
1379
1333
  this.ionLifeCycleContext.ionViewDidLeave();
1380
1334
  }
1381
1335
  render() {
1382
- const { StackManager, children, routeInfo, id, ...props } = this.props;
1336
+ const { StackManager, children, routeInfo, ...props } = this.props;
1383
1337
  return (jsx(IonLifeCycleContext.Consumer, { children: (context) => {
1384
1338
  this.ionLifeCycleContext = context;
1385
- return (jsx(StackManager, { id: id, routeInfo: routeInfo, children: jsx(IonRouterOutletInner, { id: id, setRef: (val) => (this.ionRouterOutlet = val), ...props, children: children }) }));
1339
+ return (jsx(StackManager, { routeInfo: routeInfo, children: jsx(IonRouterOutletInner, { setRef: (val) => (this.ionRouterOutlet = val), ...props, children: children }) }));
1386
1340
  } }));
1387
1341
  }
1388
1342
  static get contextType() {
@@ -1393,13 +1347,11 @@ class OutletPageManager extends React.Component {
1393
1347
  class IonRouterOutletContainer extends React.Component {
1394
1348
  constructor(props) {
1395
1349
  super(props);
1396
- this.outletId = props.id ?? `routerOutlet-${generateId('routerOutlet')}`;
1397
1350
  }
1398
1351
  render() {
1399
1352
  const StackManager = this.context.getStackManager();
1400
1353
  const { children, forwardedRef, ...props } = this.props;
1401
- const outletId = props.id ?? this.outletId;
1402
- return this.context.hasIonicRouter() ? (props.ionPage ? (jsx(OutletPageManager, { StackManager: StackManager, routeInfo: this.context.routeInfo, ...props, children: children })) : (jsx(StackManager, { routeInfo: this.context.routeInfo, id: outletId, children: jsx(IonRouterOutletInner, { ...props, id: outletId, forwardedRef: forwardedRef, children: children }) }))) : (jsx(IonRouterOutletInner, { ref: forwardedRef, ...this.props, children: this.props.children }));
1354
+ return this.context.hasIonicRouter() ? (props.ionPage ? (jsx(OutletPageManager, { StackManager: StackManager, routeInfo: this.context.routeInfo, ...props, children: children })) : (jsx(StackManager, { routeInfo: this.context.routeInfo, children: jsx(IonRouterOutletInner, { ...props, forwardedRef: forwardedRef, children: children }) }))) : (jsx(IonRouterOutletInner, { ref: forwardedRef, ...this.props, children: this.props.children }));
1403
1355
  }
1404
1356
  static get contextType() {
1405
1357
  return NavContext;
@@ -1596,9 +1548,7 @@ const matchesTab = (pathname, href) => {
1596
1548
  if (href === undefined) {
1597
1549
  return false;
1598
1550
  }
1599
- // Strip query string before comparing — href may contain search params (e.g., "/tabs/home?foo=bar")
1600
- const hrefPathname = href.split('?')[0];
1601
- const normalizedHref = hrefPathname.endsWith('/') && hrefPathname !== '/' ? hrefPathname.slice(0, -1) : hrefPathname;
1551
+ const normalizedHref = href.endsWith('/') && href !== '/' ? href.slice(0, -1) : href;
1602
1552
  return pathname === normalizedHref || pathname.startsWith(normalizedHref + '/');
1603
1553
  };
1604
1554
  class IonTabBarUnwrapped extends React.PureComponent {
@@ -1690,7 +1640,7 @@ class IonTabBarUnwrapped extends React.PureComponent {
1690
1640
  const prevHref = state.tabs[prevActiveTab].currentHref;
1691
1641
  const prevRouteOptions = state.tabs[prevActiveTab].currentRouteOptions;
1692
1642
  if (activeTab !== prevActiveTab ||
1693
- prevHref !== (props.routeInfo?.pathname || '') + (props.routeInfo?.search || '') ||
1643
+ prevHref !== props.routeInfo?.pathname ||
1694
1644
  prevRouteOptions !== props.routeInfo?.routeOptions) {
1695
1645
  tabs[activeTab] = {
1696
1646
  originalHref: tabs[activeTab].originalHref,
@@ -1757,7 +1707,7 @@ class IonTabBarUnwrapped extends React.PureComponent {
1757
1707
  return (child) => {
1758
1708
  if (child != null && child.props && (child.type === IonTabButton || child.type.isTabButton)) {
1759
1709
  const href = child.props.tab === activeTab
1760
- ? (this.props.routeInfo?.pathname || '') + (this.props.routeInfo?.search || '')
1710
+ ? this.props.routeInfo?.pathname
1761
1711
  : this.state.tabs[child.props.tab].currentHref;
1762
1712
  const routeOptions = child.props.tab === activeTab
1763
1713
  ? this.props.routeInfo?.routeOptions
@@ -1882,6 +1832,20 @@ class IonRoute extends React.PureComponent {
1882
1832
  }
1883
1833
  }
1884
1834
 
1835
+ class IonRedirect extends React.PureComponent {
1836
+ render() {
1837
+ const IonRedirectInner = this.context.getIonRedirect();
1838
+ if (!this.context.hasIonicRouter() || !IonRedirect) {
1839
+ console.error('You either do not have an Ionic Router package, or your router does not support using <IonRedirect>');
1840
+ return null;
1841
+ }
1842
+ return jsx(IonRedirectInner, { ...this.props });
1843
+ }
1844
+ static get contextType() {
1845
+ return NavContext;
1846
+ }
1847
+ }
1848
+
1885
1849
  const IonRouterContext = React.createContext({
1886
1850
  routeInfo: undefined, // TODO(FW-2959): type
1887
1851
  push: () => {
@@ -1890,9 +1854,6 @@ const IonRouterContext = React.createContext({
1890
1854
  back: () => {
1891
1855
  throw new Error('An Ionic Router is required for IonRouterContext');
1892
1856
  },
1893
- navigateRoot: () => {
1894
- throw new Error('An Ionic Router is required for IonRouterContext');
1895
- },
1896
1857
  canGoBack: () => {
1897
1858
  throw new Error('An Ionic Router is required for IonRouterContext');
1898
1859
  },
@@ -1909,10 +1870,9 @@ function useIonRouter() {
1909
1870
  back: context.back,
1910
1871
  push: context.push,
1911
1872
  goBack: context.back,
1912
- navigateRoot: context.navigateRoot,
1913
1873
  canGoBack: context.canGoBack,
1914
1874
  routeInfo: context.routeInfo,
1915
- }), [context.back, context.push, context.navigateRoot, context.canGoBack, context.routeInfo]);
1875
+ }), [context.back, context.push, context.canGoBack, context.routeInfo]);
1916
1876
  }
1917
1877
 
1918
1878
  class CreateAnimation extends React.PureComponent {
@@ -2066,7 +2026,7 @@ function useController(displayName, controller, defineCustomElement) {
2066
2026
  * @returns Returns the present and dismiss methods in an array
2067
2027
  */
2068
2028
  function useIonActionSheet() {
2069
- const controller = useController('IonActionSheet', actionSheetController, defineCustomElement$1c);
2029
+ const controller = useController('IonActionSheet', actionSheetController, defineCustomElement$1d);
2070
2030
  const present = useCallback((buttonsOrOptions, header) => {
2071
2031
  if (Array.isArray(buttonsOrOptions)) {
2072
2032
  return controller.present({
@@ -2086,7 +2046,7 @@ function useIonActionSheet() {
2086
2046
  * @returns Returns the present and dismiss methods in an array
2087
2047
  */
2088
2048
  function useIonAlert() {
2089
- const controller = useController('IonAlert', alertController, defineCustomElement$18);
2049
+ const controller = useController('IonAlert', alertController, defineCustomElement$19);
2090
2050
  const present = useCallback((messageOrOptions, buttons) => {
2091
2051
  if (typeof messageOrOptions === 'string') {
2092
2052
  return controller.present({
@@ -2106,7 +2066,7 @@ function useIonAlert() {
2106
2066
  * @returns Returns the present and dismiss methods in an array
2107
2067
  */
2108
2068
  function useIonToast() {
2109
- const controller = useController('IonToast', toastController, defineCustomElement$1a);
2069
+ const controller = useController('IonToast', toastController, defineCustomElement$1b);
2110
2070
  const present = useCallback((messageOrOptions, duration) => {
2111
2071
  if (typeof messageOrOptions === 'string') {
2112
2072
  return controller.present({
@@ -2192,7 +2152,7 @@ function useOverlay(displayName, controller, defineCustomElement, component, com
2192
2152
  * @returns Returns the present and dismiss methods in an array
2193
2153
  */
2194
2154
  function useIonModal(component, componentProps) {
2195
- const controller = useOverlay('IonModal', modalController, defineCustomElement$1d, component, componentProps);
2155
+ const controller = useOverlay('IonModal', modalController, defineCustomElement$1e, component, componentProps);
2196
2156
  const present = useCallback((options = {}) => {
2197
2157
  controller.present(options);
2198
2158
  }, [controller.present]);
@@ -2207,7 +2167,7 @@ function useIonModal(component, componentProps) {
2207
2167
  * @returns Returns the present and dismiss methods in an array
2208
2168
  */
2209
2169
  function useIonPopover(component, componentProps) {
2210
- const controller = useOverlay('IonPopover', popoverController, defineCustomElement$1e, component, componentProps);
2170
+ const controller = useOverlay('IonPopover', popoverController, defineCustomElement$1f, component, componentProps);
2211
2171
  const present = useCallback((options = {}) => {
2212
2172
  controller.present(options);
2213
2173
  }, [controller.present]);
@@ -2220,7 +2180,7 @@ function useIonPopover(component, componentProps) {
2220
2180
  * @deprecated Use the inline ion-picker component instead.
2221
2181
  */
2222
2182
  function useIonPicker() {
2223
- const controller = useController('IonPicker', pickerController, defineCustomElement$1b);
2183
+ const controller = useController('IonPicker', pickerController, defineCustomElement$1c);
2224
2184
  const present = useCallback((columnsOrOptions, buttons) => {
2225
2185
  if (Array.isArray(columnsOrOptions)) {
2226
2186
  return controller.present({
@@ -2240,7 +2200,7 @@ function useIonPicker() {
2240
2200
  * @returns Returns the present and dismiss methods in an array
2241
2201
  */
2242
2202
  function useIonLoading() {
2243
- const controller = useController('IonLoading', loadingController, defineCustomElement$19);
2203
+ const controller = useController('IonLoading', loadingController, defineCustomElement$1a);
2244
2204
  const present = useCallback((messageOrOptions = {}, duration, spinner) => {
2245
2205
  if (typeof messageOrOptions === 'string') {
2246
2206
  return controller.present({
@@ -2282,7 +2242,6 @@ const RouteManagerContext = /*@__PURE__*/ React.createContext({
2282
2242
  findLeavingViewItemByRouteInfo: () => undefined,
2283
2243
  findViewItemByRouteInfo: () => undefined,
2284
2244
  getChildrenToRender: () => undefined,
2285
- getViewItemsForOutlet: () => [],
2286
2245
  goBack: () => undefined,
2287
2246
  unMountViewItem: () => undefined,
2288
2247
  });
@@ -2401,14 +2360,7 @@ class LocationHistory {
2401
2360
  _replace(routeInfo) {
2402
2361
  const routeInfos = this._getRouteInfosByKey(routeInfo.tab);
2403
2362
  routeInfos && routeInfos.pop();
2404
- // Get the current route that's being replaced
2405
- const currentRoute = this.locationHistory[this.locationHistory.length - 1];
2406
- // Only pop from global history if we're replacing in the same outlet context.
2407
- // Don't pop if we're entering a nested outlet (current route has no tab, new route has a tab)
2408
- const isEnteringNestedOutlet = currentRoute && !currentRoute.tab && !!routeInfo.tab;
2409
- if (!isEnteringNestedOutlet) {
2410
- this.locationHistory.pop();
2411
- }
2363
+ this.locationHistory.pop();
2412
2364
  this._add(routeInfo);
2413
2365
  }
2414
2366
  _clear() {
@@ -2440,20 +2392,6 @@ class LocationHistory {
2440
2392
  }
2441
2393
  return undefined;
2442
2394
  }
2443
- /**
2444
- * Returns the most recent RouteInfo in global history (excluding the current
2445
- * entry) whose pathname matches the given value. Unlike findLastLocation,
2446
- * this search is tab-agnostic. Used by the multi-step back detection.
2447
- */
2448
- findLastLocationByPathname(pathname) {
2449
- for (let i = this.locationHistory.length - 2; i >= 0; i--) {
2450
- const ri = this.locationHistory[i];
2451
- if (ri && ri.pathname === pathname) {
2452
- return ri;
2453
- }
2454
- }
2455
- return undefined;
2456
- }
2457
2395
  findLastLocation(routeInfo) {
2458
2396
  const routeInfos = this._getRouteInfosByKey(routeInfo.tab);
2459
2397
  if (routeInfos) {
@@ -2485,17 +2423,6 @@ class LocationHistory {
2485
2423
  canGoBack() {
2486
2424
  return this.locationHistory.length > 1;
2487
2425
  }
2488
- findTabForPathname(pathname) {
2489
- for (const tab of Object.keys(this.tabHistory)) {
2490
- const routeInfos = this.tabHistory[tab];
2491
- for (let i = routeInfos.length - 1; i >= 0; i--) {
2492
- if (routeInfos[i].pathname === pathname) {
2493
- return tab;
2494
- }
2495
- }
2496
- }
2497
- return undefined;
2498
- }
2499
2426
  }
2500
2427
 
2501
2428
  class NavManager extends React.PureComponent {
@@ -2508,9 +2435,6 @@ class NavManager extends React.PureComponent {
2508
2435
  back: (animationBuilder) => {
2509
2436
  this.goBack(undefined, animationBuilder);
2510
2437
  },
2511
- navigateRoot: (pathname, animationBuilder) => {
2512
- this.props.onNavigateRoot(pathname, animationBuilder);
2513
- },
2514
2438
  canGoBack: () => this.props.locationHistory.canGoBack(),
2515
2439
  nativeBack: () => this.props.onNativeBack(),
2516
2440
  routeInfo: this.props.routeInfo,
@@ -2519,8 +2443,10 @@ class NavManager extends React.PureComponent {
2519
2443
  goBack: this.goBack.bind(this),
2520
2444
  hasIonicRouter: () => true,
2521
2445
  navigate: this.navigate.bind(this),
2446
+ getIonRedirect: this.getIonRedirect.bind(this),
2522
2447
  getIonRoute: this.getIonRoute.bind(this),
2523
2448
  getStackManager: this.getStackManager.bind(this),
2449
+ getPageManager: this.getPageManager.bind(this),
2524
2450
  routeInfo: this.props.routeInfo,
2525
2451
  setCurrentTab: this.props.onSetCurrentTab,
2526
2452
  changeTab: this.props.onChangeTab,
@@ -2553,6 +2479,12 @@ class NavManager extends React.PureComponent {
2553
2479
  navigate(path, direction = 'forward', action = 'push', animationBuilder, options, tab) {
2554
2480
  this.props.onNavigate(path, action, direction, animationBuilder, options, tab);
2555
2481
  }
2482
+ getPageManager() {
2483
+ return PageManager;
2484
+ }
2485
+ getIonRedirect() {
2486
+ return this.props.ionRedirect;
2487
+ }
2556
2488
  getIonRoute() {
2557
2489
  return this.props.ionRoute;
2558
2490
  }
@@ -2582,7 +2514,10 @@ class ViewStacks {
2582
2514
  }
2583
2515
  }
2584
2516
  clear(outletId) {
2585
- delete this.viewStacks[outletId];
2517
+ // Give some time for the leaving views to transition before removing
2518
+ return setTimeout(() => {
2519
+ delete this.viewStacks[outletId];
2520
+ }, 500);
2586
2521
  }
2587
2522
  getViewItemsForOutlet(outletId) {
2588
2523
  return this.viewStacks[outletId] || [];
@@ -2611,5 +2546,5 @@ class ViewStacks {
2611
2546
  }
2612
2547
  }
2613
2548
 
2614
- export { CreateAnimation, DefaultIonLifeCycleContext, IonAccordion, IonAccordionGroup, IonActionSheet, IonAlert, IonApp, IonAvatar, IonBackButton, IonBackdrop, IonBadge, IonBreadcrumb, IonBreadcrumbs, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCheckbox, IonChip, IonCol, IonContent, IonDatetime, IonDatetimeButton, IonFab, IonFabButton, IonFabList, IonFooter, IonGrid, IonHeader, IonIcon, IonImg, IonInfiniteScroll, IonInfiniteScrollContent, IonInput, IonInputOtp, IonInputPasswordToggle, IonItem, IonItemDivider, IonItemGroup, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonLifeCycleContext, IonList, IonListHeader, IonLoading, IonMenu, IonMenuButton, IonMenuToggle, IonModal, IonNav, IonNavLink, IonNote, IonPage, IonPicker, IonPickerColumn, IonPickerColumnOption, IonPickerLegacy, IonPopover, IonProgressBar, IonRadio, IonRadioGroup, IonRange, IonRefresher, IonRefresherContent, IonReorder, IonReorderGroup, IonRippleEffect, IonRoute, IonRouterContext, IonRouterLink, IonRouterOutlet, IonRow, IonSearchbar, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonSelect, IonSelectModal, IonSelectOption, IonSkeletonText, IonSpinner, IonSplitPane, IonTab, IonTabBar, IonTabButton, IonTabs, IonTabsContext, IonText, IonTextarea, IonThumbnail, IonTitle, IonToast, IonToggle, IonToolbar, LocationHistory, NavContext, NavManager, RouteManagerContext, StackContext, ViewLifeCycleManager, ViewStacks, generateId, getConfig, getPlatforms, isPlatform, setupIonicReact, useIonActionSheet, useIonAlert, useIonLoading, useIonModal, useIonPicker, useIonPopover, useIonRouter, useIonToast, useIonViewDidEnter, useIonViewDidLeave, useIonViewWillEnter, useIonViewWillLeave, withIonLifeCycle };
2549
+ export { CreateAnimation, DefaultIonLifeCycleContext, IonAccordion, IonAccordionGroup, IonActionSheet, IonAlert, IonApp, IonAvatar, IonBackButton, IonBackdrop, IonBadge, IonBreadcrumb, IonBreadcrumbs, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCheckbox, IonChip, IonCol, IonContent, IonDatetime, IonDatetimeButton, IonDivider, IonFab, IonFabButton, IonFabList, IonFooter, IonGrid, IonHeader, IonIcon, IonImg, IonInfiniteScroll, IonInfiniteScrollContent, IonInput, IonInputOtp, IonInputPasswordToggle, IonItem, IonItemDivider, IonItemGroup, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonLifeCycleContext, IonList, IonListHeader, IonLoading, IonMenu, IonMenuButton, IonMenuToggle, IonModal, IonNav, IonNavLink, IonNote, IonPage, IonPicker, IonPickerColumn, IonPickerColumnOption, IonPickerLegacy, IonPopover, IonProgressBar, IonRadio, IonRadioGroup, IonRange, IonRedirect, IonRefresher, IonRefresherContent, IonReorder, IonReorderGroup, IonRippleEffect, IonRoute, IonRouterContext, IonRouterLink, IonRouterOutlet, IonRow, IonSearchbar, IonSegment, IonSegmentButton, IonSegmentContent, IonSegmentView, IonSelect, IonSelectModal, IonSelectOption, IonSkeletonText, IonSpinner, IonSplitPane, IonTab, IonTabBar, IonTabButton, IonTabs, IonTabsContext, IonText, IonTextarea, IonThumbnail, IonTitle, IonToast, IonToggle, IonToolbar, LocationHistory, NavContext, NavManager, RouteManagerContext, StackContext, ViewLifeCycleManager, ViewStacks, generateId, getConfig, getPlatforms, isPlatform, setupIonicReact, useIonActionSheet, useIonAlert, useIonLoading, useIonModal, useIonPicker, useIonPopover, useIonRouter, useIonToast, useIonViewDidEnter, useIonViewDidLeave, useIonViewWillEnter, useIonViewWillLeave, withIonLifeCycle };
2615
2550
  //# sourceMappingURL=index.js.map