@ionic/react 8.8.1-dev.11773929121.1aabdf46 → 8.8.1-dev.11774029927.130994f5

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 (60) 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-swiper.css +1 -1
  10. package/css/ionic-swiper.css.map +1 -1
  11. package/css/ionic.bundle.css +1 -1
  12. package/css/ionic.bundle.css.map +1 -1
  13. package/css/normalize.css.map +1 -1
  14. package/css/padding.css.map +1 -1
  15. package/css/palettes/dark.always.css.map +1 -1
  16. package/css/palettes/dark.class.css.map +1 -1
  17. package/css/palettes/dark.system.css.map +1 -1
  18. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  19. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  20. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  21. package/css/palettes/high-contrast.always.css.map +1 -1
  22. package/css/palettes/high-contrast.class.css.map +1 -1
  23. package/css/palettes/high-contrast.system.css.map +1 -1
  24. package/css/structure.css.map +1 -1
  25. package/css/text-alignment.css.map +1 -1
  26. package/css/text-transformation.css.map +1 -1
  27. package/css/typography.css.map +1 -1
  28. package/css/utils.bundle.css +1 -1
  29. package/css/utils.bundle.css.map +1 -1
  30. package/dist/index.js +241 -188
  31. package/dist/index.js.map +1 -1
  32. package/dist/types/components/IonRoute.d.ts +3 -2
  33. package/dist/types/components/IonRouterOutlet.d.ts +1 -0
  34. package/dist/types/components/index.d.ts +0 -1
  35. package/dist/types/components/proxies.d.ts +0 -1
  36. package/dist/types/contexts/NavContext.d.ts +0 -2
  37. package/dist/types/routing/LocationHistory.d.ts +7 -0
  38. package/dist/types/routing/NavManager.d.ts +0 -4
  39. package/dist/types/routing/OutletPageManager.d.ts +1 -0
  40. package/dist/types/routing/PageManager.d.ts +7 -0
  41. package/dist/types/routing/RouteManagerContext.d.ts +6 -1
  42. package/dist/types/routing/ViewStacks.d.ts +2 -2
  43. package/package.json +2 -2
  44. package/css/ionic/bundle.ionic.css +0 -1
  45. package/css/ionic/bundle.ionic.css.map +0 -1
  46. package/css/ionic/core.ionic.css +0 -1
  47. package/css/ionic/core.ionic.css.map +0 -1
  48. package/css/ionic/global.bundle.ionic.css +0 -1
  49. package/css/ionic/global.bundle.ionic.css.map +0 -1
  50. package/css/ionic/ionic-swiper.ionic.css +0 -1
  51. package/css/ionic/ionic-swiper.ionic.css.map +0 -1
  52. package/css/ionic/link.ionic.css +0 -1
  53. package/css/ionic/link.ionic.css.map +0 -1
  54. package/css/ionic/structure.ionic.css +0 -1
  55. package/css/ionic/structure.ionic.css.map +0 -1
  56. package/css/ionic/typography.ionic.css +0 -1
  57. package/css/ionic/typography.ionic.css.map +0 -1
  58. package/css/ionic/utils.bundle.ionic.css +0 -1
  59. package/css/ionic/utils.bundle.ionic.css.map +0 -1
  60. package/dist/types/components/IonRedirect.d.ts +0 -16
package/dist/index.js CHANGED
@@ -20,62 +20,61 @@ 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-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';
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';
79
78
  import { IonBreadcrumb as IonBreadcrumb$1 } from '@ionic/core/components/ion-breadcrumb.js';
80
79
  import { IonButton as IonButton$1 } from '@ionic/core/components/ion-button.js';
81
80
  import { IonCard as IonCard$1 } from '@ionic/core/components/ion-card.js';
@@ -83,20 +82,20 @@ import { IonFabButton as IonFabButton$1 } from '@ionic/core/components/ion-fab-b
83
82
  import { IonItemOption as IonItemOption$1 } from '@ionic/core/components/ion-item-option.js';
84
83
  import { IonItem as IonItem$1 } from '@ionic/core/components/ion-item.js';
85
84
  import { IonRouterLink as IonRouterLink$1 } from '@ionic/core/components/ion-router-link.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';
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';
100
99
 
101
100
  const IonLifeCycleContext = /*@__PURE__*/ React.createContext({
102
101
  onIonViewWillEnter: () => {
@@ -381,9 +380,7 @@ const useIonViewDidLeave = (callback, deps = []) => {
381
380
  };
382
381
 
383
382
  const NavContext = /*@__PURE__*/ React.createContext({
384
- getIonRedirect: () => undefined,
385
383
  getIonRoute: () => undefined,
386
- getPageManager: () => undefined,
387
384
  getStackManager: () => undefined,
388
385
  goBack: (route) => {
389
386
  if (typeof window !== 'undefined') {
@@ -644,61 +641,60 @@ const IonCol = /*@__PURE__*/ createReactComponent('ion-col', undefined, undefine
644
641
  const IonContent = /*@__PURE__*/ createReactComponent('ion-content', undefined, undefined, defineCustomElement$f);
645
642
  const IonDatetime = /*@__PURE__*/ createReactComponent('ion-datetime', undefined, undefined, defineCustomElement$g);
646
643
  const IonDatetimeButton = /*@__PURE__*/ createReactComponent('ion-datetime-button', undefined, undefined, defineCustomElement$h);
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);
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);
702
698
 
703
699
  const createForwardRef = (ReactComponent, // TODO(FW-2959): type
704
700
  displayName) => {
@@ -990,19 +986,19 @@ const createInlineOverlayComponent = (tagName, defineCustomElement, hasDelegateH
990
986
  };
991
987
  const DELEGATE_HOST = 'ion-delegate-host';
992
988
 
993
- const IonAlert = /*@__PURE__*/ createInlineOverlayComponent('ion-alert', defineCustomElement$19);
989
+ const IonAlert = /*@__PURE__*/ createInlineOverlayComponent('ion-alert', defineCustomElement$18);
994
990
 
995
- const IonLoading = /*@__PURE__*/ createInlineOverlayComponent('ion-loading', defineCustomElement$1a);
991
+ const IonLoading = /*@__PURE__*/ createInlineOverlayComponent('ion-loading', defineCustomElement$19);
996
992
 
997
- const IonToast = /*@__PURE__*/ createInlineOverlayComponent('ion-toast', defineCustomElement$1b);
993
+ const IonToast = /*@__PURE__*/ createInlineOverlayComponent('ion-toast', defineCustomElement$1a);
998
994
 
999
- const IonPickerLegacy = /*@__PURE__*/ createInlineOverlayComponent('ion-picker-legacy', defineCustomElement$1c);
995
+ const IonPickerLegacy = /*@__PURE__*/ createInlineOverlayComponent('ion-picker-legacy', defineCustomElement$1b);
1000
996
 
1001
- const IonActionSheet = /*@__PURE__*/ createInlineOverlayComponent('ion-action-sheet', defineCustomElement$1d);
997
+ const IonActionSheet = /*@__PURE__*/ createInlineOverlayComponent('ion-action-sheet', defineCustomElement$1c);
1002
998
 
1003
- const IonModal = /*@__PURE__*/ createInlineOverlayComponent('ion-modal', defineCustomElement$1e, true);
999
+ const IonModal = /*@__PURE__*/ createInlineOverlayComponent('ion-modal', defineCustomElement$1d, true);
1004
1000
 
1005
- const IonPopover = /*@__PURE__*/ createInlineOverlayComponent('ion-popover', defineCustomElement$1f);
1001
+ const IonPopover = /*@__PURE__*/ createInlineOverlayComponent('ion-popover', defineCustomElement$1e);
1006
1002
 
1007
1003
  const IonContext = React.createContext({
1008
1004
  addOverlay: () => {
@@ -1094,14 +1090,14 @@ const IonOverlayManager = ({ onAddOverlay, onRemoveOverlay }) => {
1094
1090
  }) }));
1095
1091
  };
1096
1092
 
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);
1093
+ const IonTabButtonInner = /*@__PURE__*/ createReactComponent('ion-tab-button', undefined, undefined, defineCustomElement$1f);
1094
+ const IonTabBarInner = /*@__PURE__*/ createReactComponent('ion-tab-bar', undefined, undefined, defineCustomElement$1g);
1095
+ const IonTabsInner = /*@__PURE__*/ createReactComponent('ion-tabs', undefined, undefined, defineCustomElement$1h);
1096
+ const IonBackButtonInner = /*@__PURE__*/ createReactComponent('ion-back-button', undefined, undefined, defineCustomElement$1i);
1097
+ const IonRouterOutletInner = /*@__PURE__*/ createReactComponent('ion-router-outlet', undefined, undefined, defineCustomElement$1j);
1098
+ const IonAppInner = /*@__PURE__*/ createReactComponent('ion-app', undefined, undefined, defineCustomElement$1k);
1103
1099
  // ionicons
1104
- const IonIconInner = /*@__PURE__*/ createReactComponent('ion-icon', undefined, undefined, defineCustomElement$1m);
1100
+ const IonIconInner = /*@__PURE__*/ createReactComponent('ion-icon', undefined, undefined, defineCustomElement$1l);
1105
1101
 
1106
1102
  class IonApp extends React.Component {
1107
1103
  constructor(props) {
@@ -1139,7 +1135,18 @@ class PageManager extends React.PureComponent {
1139
1135
  super(props);
1140
1136
  this.ionPageElementRef = React.createRef();
1141
1137
  // React refs must be stable (not created inline).
1142
- this.stableMergedRefs = mergeRefs(this.ionPageElementRef, this.props.forwardedRef);
1138
+ // Wrap merged refs to add ion-page-invisible synchronously when element is created
1139
+ const baseMergedRefs = mergeRefs(this.ionPageElementRef, this.props.forwardedRef);
1140
+ this.stableMergedRefs = (node) => {
1141
+ if (node && !node.classList.contains('ion-page-invisible') && !node.classList.contains('ion-page-hidden')) {
1142
+ // Add ion-page-invisible synchronously before first paint (if in an outlet)
1143
+ // This prevents the flash that occurs when componentDidMount runs after paint
1144
+ if (this.context?.isInOutlet?.()) {
1145
+ node.classList.add('ion-page-invisible');
1146
+ }
1147
+ }
1148
+ baseMergedRefs(node);
1149
+ };
1143
1150
  /**
1144
1151
  * This binds the scope of the following methods to the class scope.
1145
1152
  * The `.bind` method returns a new function, so we need to assign it
@@ -1151,11 +1158,38 @@ class PageManager extends React.PureComponent {
1151
1158
  this.ionViewWillLeaveHandler = this.ionViewWillLeaveHandler.bind(this);
1152
1159
  this.ionViewDidLeaveHandler = this.ionViewDidLeaveHandler.bind(this);
1153
1160
  }
1161
+ parseClasses(className) {
1162
+ if (!className)
1163
+ return new Set();
1164
+ return new Set(className.split(/\s+/).filter(Boolean));
1165
+ }
1166
+ /**
1167
+ * Updates classList by diffing old/new className props.
1168
+ * Preserves framework-added classes (can-go-back, ion-page-invisible, etc.).
1169
+ */
1170
+ updateUserClasses(oldClassName, newClassName) {
1171
+ if (!this.ionPageElementRef.current)
1172
+ return;
1173
+ const oldClasses = this.parseClasses(oldClassName);
1174
+ const newClasses = this.parseClasses(newClassName);
1175
+ oldClasses.forEach((cls) => {
1176
+ if (!newClasses.has(cls)) {
1177
+ this.ionPageElementRef.current.classList.remove(cls);
1178
+ }
1179
+ });
1180
+ newClasses.forEach((cls) => {
1181
+ if (!oldClasses.has(cls)) {
1182
+ this.ionPageElementRef.current.classList.add(cls);
1183
+ }
1184
+ });
1185
+ }
1154
1186
  componentDidMount() {
1155
1187
  if (this.ionPageElementRef.current) {
1156
- if (this.context.isInOutlet()) {
1157
- this.ionPageElementRef.current.classList.add('ion-page-invisible');
1158
- }
1188
+ // Add user classes via DOM manipulation to preserve framework-added classes.
1189
+ // We only set "ion-page" in JSX; user classes are added here.
1190
+ // Note: ion-page-invisible is added in the ref callback (stableMergedRefs) to prevent flash.
1191
+ // The ref callback runs synchronously when the element is created, before the browser paints.
1192
+ this.updateUserClasses(undefined, this.props.className);
1159
1193
  this.context.registerIonPage(this.ionPageElementRef.current, this.props.routeInfo);
1160
1194
  this.ionPageElementRef.current.addEventListener('ionViewWillEnter', this.ionViewWillEnterHandler);
1161
1195
  this.ionPageElementRef.current.addEventListener('ionViewDidEnter', this.ionViewDidEnterHandler);
@@ -1163,6 +1197,11 @@ class PageManager extends React.PureComponent {
1163
1197
  this.ionPageElementRef.current.addEventListener('ionViewDidLeave', this.ionViewDidLeaveHandler);
1164
1198
  }
1165
1199
  }
1200
+ componentDidUpdate(prevProps) {
1201
+ if (prevProps.className !== this.props.className) {
1202
+ this.updateUserClasses(prevProps.className, this.props.className);
1203
+ }
1204
+ }
1166
1205
  componentWillUnmount() {
1167
1206
  if (this.ionPageElementRef.current) {
1168
1207
  this.ionPageElementRef.current.removeEventListener('ionViewWillEnter', this.ionViewWillEnterHandler);
@@ -1192,9 +1231,11 @@ class PageManager extends React.PureComponent {
1192
1231
  render() {
1193
1232
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1194
1233
  const { className, children, routeInfo, forwardedRef, ...props } = this.props;
1234
+ // Only set "ion-page" in JSX. User classes are managed via DOM in componentDidMount/componentDidUpdate
1235
+ // to preserve framework-added classes (can-go-back, ion-page-invisible, etc.) when className prop changes.
1195
1236
  return (jsx(IonLifeCycleContext.Consumer, { children: (context) => {
1196
1237
  this.ionLifeCycleContext = context;
1197
- return (jsx("div", { className: className ? `${className} ion-page` : `ion-page`, ref: this.stableMergedRefs, ...props, children: children }));
1238
+ return (jsx("div", { className: "ion-page", ref: this.stableMergedRefs, ...props, children: children }));
1198
1239
  } }));
1199
1240
  }
1200
1241
  static get contextType() {
@@ -1254,7 +1295,7 @@ const ReactDelegate = (addView, removeView) => {
1254
1295
  };
1255
1296
  };
1256
1297
 
1257
- const IonNavInner = createReactComponent('ion-nav', undefined, undefined, defineCustomElement$1n);
1298
+ const IonNavInner = createReactComponent('ion-nav', undefined, undefined, defineCustomElement$1m);
1258
1299
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1259
1300
  const IonNavInternal = ({ children, forwardedRef, ...restOfProps }) => {
1260
1301
  const [views, setViews] = useState([]);
@@ -1333,10 +1374,10 @@ class OutletPageManager extends React.Component {
1333
1374
  this.ionLifeCycleContext.ionViewDidLeave();
1334
1375
  }
1335
1376
  render() {
1336
- const { StackManager, children, routeInfo, ...props } = this.props;
1377
+ const { StackManager, children, routeInfo, id, ...props } = this.props;
1337
1378
  return (jsx(IonLifeCycleContext.Consumer, { children: (context) => {
1338
1379
  this.ionLifeCycleContext = context;
1339
- return (jsx(StackManager, { routeInfo: routeInfo, children: jsx(IonRouterOutletInner, { setRef: (val) => (this.ionRouterOutlet = val), ...props, children: children }) }));
1380
+ return (jsx(StackManager, { id: id, routeInfo: routeInfo, children: jsx(IonRouterOutletInner, { id: id, setRef: (val) => (this.ionRouterOutlet = val), ...props, children: children }) }));
1340
1381
  } }));
1341
1382
  }
1342
1383
  static get contextType() {
@@ -1347,11 +1388,13 @@ class OutletPageManager extends React.Component {
1347
1388
  class IonRouterOutletContainer extends React.Component {
1348
1389
  constructor(props) {
1349
1390
  super(props);
1391
+ this.outletId = props.id ?? `routerOutlet-${generateId('routerOutlet')}`;
1350
1392
  }
1351
1393
  render() {
1352
1394
  const StackManager = this.context.getStackManager();
1353
1395
  const { children, forwardedRef, ...props } = this.props;
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 }));
1396
+ const outletId = props.id ?? this.outletId;
1397
+ 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 }));
1355
1398
  }
1356
1399
  static get contextType() {
1357
1400
  return NavContext;
@@ -1548,7 +1591,9 @@ const matchesTab = (pathname, href) => {
1548
1591
  if (href === undefined) {
1549
1592
  return false;
1550
1593
  }
1551
- const normalizedHref = href.endsWith('/') && href !== '/' ? href.slice(0, -1) : href;
1594
+ // Strip query string before comparing — href may contain search params (e.g., "/tabs/home?foo=bar")
1595
+ const hrefPathname = href.split('?')[0];
1596
+ const normalizedHref = hrefPathname.endsWith('/') && hrefPathname !== '/' ? hrefPathname.slice(0, -1) : hrefPathname;
1552
1597
  return pathname === normalizedHref || pathname.startsWith(normalizedHref + '/');
1553
1598
  };
1554
1599
  class IonTabBarUnwrapped extends React.PureComponent {
@@ -1640,7 +1685,7 @@ class IonTabBarUnwrapped extends React.PureComponent {
1640
1685
  const prevHref = state.tabs[prevActiveTab].currentHref;
1641
1686
  const prevRouteOptions = state.tabs[prevActiveTab].currentRouteOptions;
1642
1687
  if (activeTab !== prevActiveTab ||
1643
- prevHref !== props.routeInfo?.pathname ||
1688
+ prevHref !== (props.routeInfo?.pathname || '') + (props.routeInfo?.search || '') ||
1644
1689
  prevRouteOptions !== props.routeInfo?.routeOptions) {
1645
1690
  tabs[activeTab] = {
1646
1691
  originalHref: tabs[activeTab].originalHref,
@@ -1707,7 +1752,7 @@ class IonTabBarUnwrapped extends React.PureComponent {
1707
1752
  return (child) => {
1708
1753
  if (child != null && child.props && (child.type === IonTabButton || child.type.isTabButton)) {
1709
1754
  const href = child.props.tab === activeTab
1710
- ? this.props.routeInfo?.pathname
1755
+ ? (this.props.routeInfo?.pathname || '') + (this.props.routeInfo?.search || '')
1711
1756
  : this.state.tabs[child.props.tab].currentHref;
1712
1757
  const routeOptions = child.props.tab === activeTab
1713
1758
  ? this.props.routeInfo?.routeOptions
@@ -1832,20 +1877,6 @@ class IonRoute extends React.PureComponent {
1832
1877
  }
1833
1878
  }
1834
1879
 
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
-
1849
1880
  const IonRouterContext = React.createContext({
1850
1881
  routeInfo: undefined, // TODO(FW-2959): type
1851
1882
  push: () => {
@@ -2026,7 +2057,7 @@ function useController(displayName, controller, defineCustomElement) {
2026
2057
  * @returns Returns the present and dismiss methods in an array
2027
2058
  */
2028
2059
  function useIonActionSheet() {
2029
- const controller = useController('IonActionSheet', actionSheetController, defineCustomElement$1d);
2060
+ const controller = useController('IonActionSheet', actionSheetController, defineCustomElement$1c);
2030
2061
  const present = useCallback((buttonsOrOptions, header) => {
2031
2062
  if (Array.isArray(buttonsOrOptions)) {
2032
2063
  return controller.present({
@@ -2046,7 +2077,7 @@ function useIonActionSheet() {
2046
2077
  * @returns Returns the present and dismiss methods in an array
2047
2078
  */
2048
2079
  function useIonAlert() {
2049
- const controller = useController('IonAlert', alertController, defineCustomElement$19);
2080
+ const controller = useController('IonAlert', alertController, defineCustomElement$18);
2050
2081
  const present = useCallback((messageOrOptions, buttons) => {
2051
2082
  if (typeof messageOrOptions === 'string') {
2052
2083
  return controller.present({
@@ -2066,7 +2097,7 @@ function useIonAlert() {
2066
2097
  * @returns Returns the present and dismiss methods in an array
2067
2098
  */
2068
2099
  function useIonToast() {
2069
- const controller = useController('IonToast', toastController, defineCustomElement$1b);
2100
+ const controller = useController('IonToast', toastController, defineCustomElement$1a);
2070
2101
  const present = useCallback((messageOrOptions, duration) => {
2071
2102
  if (typeof messageOrOptions === 'string') {
2072
2103
  return controller.present({
@@ -2152,7 +2183,7 @@ function useOverlay(displayName, controller, defineCustomElement, component, com
2152
2183
  * @returns Returns the present and dismiss methods in an array
2153
2184
  */
2154
2185
  function useIonModal(component, componentProps) {
2155
- const controller = useOverlay('IonModal', modalController, defineCustomElement$1e, component, componentProps);
2186
+ const controller = useOverlay('IonModal', modalController, defineCustomElement$1d, component, componentProps);
2156
2187
  const present = useCallback((options = {}) => {
2157
2188
  controller.present(options);
2158
2189
  }, [controller.present]);
@@ -2167,7 +2198,7 @@ function useIonModal(component, componentProps) {
2167
2198
  * @returns Returns the present and dismiss methods in an array
2168
2199
  */
2169
2200
  function useIonPopover(component, componentProps) {
2170
- const controller = useOverlay('IonPopover', popoverController, defineCustomElement$1f, component, componentProps);
2201
+ const controller = useOverlay('IonPopover', popoverController, defineCustomElement$1e, component, componentProps);
2171
2202
  const present = useCallback((options = {}) => {
2172
2203
  controller.present(options);
2173
2204
  }, [controller.present]);
@@ -2180,7 +2211,7 @@ function useIonPopover(component, componentProps) {
2180
2211
  * @deprecated Use the inline ion-picker component instead.
2181
2212
  */
2182
2213
  function useIonPicker() {
2183
- const controller = useController('IonPicker', pickerController, defineCustomElement$1c);
2214
+ const controller = useController('IonPicker', pickerController, defineCustomElement$1b);
2184
2215
  const present = useCallback((columnsOrOptions, buttons) => {
2185
2216
  if (Array.isArray(columnsOrOptions)) {
2186
2217
  return controller.present({
@@ -2200,7 +2231,7 @@ function useIonPicker() {
2200
2231
  * @returns Returns the present and dismiss methods in an array
2201
2232
  */
2202
2233
  function useIonLoading() {
2203
- const controller = useController('IonLoading', loadingController, defineCustomElement$1a);
2234
+ const controller = useController('IonLoading', loadingController, defineCustomElement$19);
2204
2235
  const present = useCallback((messageOrOptions = {}, duration, spinner) => {
2205
2236
  if (typeof messageOrOptions === 'string') {
2206
2237
  return controller.present({
@@ -2242,6 +2273,7 @@ const RouteManagerContext = /*@__PURE__*/ React.createContext({
2242
2273
  findLeavingViewItemByRouteInfo: () => undefined,
2243
2274
  findViewItemByRouteInfo: () => undefined,
2244
2275
  getChildrenToRender: () => undefined,
2276
+ getViewItemsForOutlet: () => [],
2245
2277
  goBack: () => undefined,
2246
2278
  unMountViewItem: () => undefined,
2247
2279
  });
@@ -2360,7 +2392,14 @@ class LocationHistory {
2360
2392
  _replace(routeInfo) {
2361
2393
  const routeInfos = this._getRouteInfosByKey(routeInfo.tab);
2362
2394
  routeInfos && routeInfos.pop();
2363
- this.locationHistory.pop();
2395
+ // Get the current route that's being replaced
2396
+ const currentRoute = this.locationHistory[this.locationHistory.length - 1];
2397
+ // Only pop from global history if we're replacing in the same outlet context.
2398
+ // Don't pop if we're entering a nested outlet (current route has no tab, new route has a tab)
2399
+ const isEnteringNestedOutlet = currentRoute && !currentRoute.tab && !!routeInfo.tab;
2400
+ if (!isEnteringNestedOutlet) {
2401
+ this.locationHistory.pop();
2402
+ }
2364
2403
  this._add(routeInfo);
2365
2404
  }
2366
2405
  _clear() {
@@ -2392,6 +2431,20 @@ class LocationHistory {
2392
2431
  }
2393
2432
  return undefined;
2394
2433
  }
2434
+ /**
2435
+ * Returns the most recent RouteInfo in global history (excluding the current
2436
+ * entry) whose pathname matches the given value. Unlike findLastLocation,
2437
+ * this search is tab-agnostic. Used by the multi-step back detection.
2438
+ */
2439
+ findLastLocationByPathname(pathname) {
2440
+ for (let i = this.locationHistory.length - 2; i >= 0; i--) {
2441
+ const ri = this.locationHistory[i];
2442
+ if (ri && ri.pathname === pathname) {
2443
+ return ri;
2444
+ }
2445
+ }
2446
+ return undefined;
2447
+ }
2395
2448
  findLastLocation(routeInfo) {
2396
2449
  const routeInfos = this._getRouteInfosByKey(routeInfo.tab);
2397
2450
  if (routeInfos) {
@@ -2423,6 +2476,17 @@ class LocationHistory {
2423
2476
  canGoBack() {
2424
2477
  return this.locationHistory.length > 1;
2425
2478
  }
2479
+ findTabForPathname(pathname) {
2480
+ for (const tab of Object.keys(this.tabHistory)) {
2481
+ const routeInfos = this.tabHistory[tab];
2482
+ for (let i = routeInfos.length - 1; i >= 0; i--) {
2483
+ if (routeInfos[i].pathname === pathname) {
2484
+ return tab;
2485
+ }
2486
+ }
2487
+ }
2488
+ return undefined;
2489
+ }
2426
2490
  }
2427
2491
 
2428
2492
  class NavManager extends React.PureComponent {
@@ -2443,10 +2507,8 @@ class NavManager extends React.PureComponent {
2443
2507
  goBack: this.goBack.bind(this),
2444
2508
  hasIonicRouter: () => true,
2445
2509
  navigate: this.navigate.bind(this),
2446
- getIonRedirect: this.getIonRedirect.bind(this),
2447
2510
  getIonRoute: this.getIonRoute.bind(this),
2448
2511
  getStackManager: this.getStackManager.bind(this),
2449
- getPageManager: this.getPageManager.bind(this),
2450
2512
  routeInfo: this.props.routeInfo,
2451
2513
  setCurrentTab: this.props.onSetCurrentTab,
2452
2514
  changeTab: this.props.onChangeTab,
@@ -2479,12 +2541,6 @@ class NavManager extends React.PureComponent {
2479
2541
  navigate(path, direction = 'forward', action = 'push', animationBuilder, options, tab) {
2480
2542
  this.props.onNavigate(path, action, direction, animationBuilder, options, tab);
2481
2543
  }
2482
- getPageManager() {
2483
- return PageManager;
2484
- }
2485
- getIonRedirect() {
2486
- return this.props.ionRedirect;
2487
- }
2488
2544
  getIonRoute() {
2489
2545
  return this.props.ionRoute;
2490
2546
  }
@@ -2514,10 +2570,7 @@ class ViewStacks {
2514
2570
  }
2515
2571
  }
2516
2572
  clear(outletId) {
2517
- // Give some time for the leaving views to transition before removing
2518
- return setTimeout(() => {
2519
- delete this.viewStacks[outletId];
2520
- }, 500);
2573
+ delete this.viewStacks[outletId];
2521
2574
  }
2522
2575
  getViewItemsForOutlet(outletId) {
2523
2576
  return this.viewStacks[outletId] || [];
@@ -2546,5 +2599,5 @@ class ViewStacks {
2546
2599
  }
2547
2600
  }
2548
2601
 
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 };
2602
+ 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 };
2550
2603
  //# sourceMappingURL=index.js.map