@ionic/core 8.3.4-nightly.20241024 → 8.3.4-nightly.20241025

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 (66) hide show
  1. package/components/overlays.js +36 -2
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  4. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  5. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  6. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  7. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  8. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  9. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  10. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  11. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  12. package/dist/cjs/{overlays-0123d7d4.js → overlays-99f0578e.js} +36 -2
  13. package/dist/collection/utils/overlays.js +36 -2
  14. package/dist/docs.json +1 -1
  15. package/dist/esm/index.js +1 -1
  16. package/dist/esm/ion-action-sheet.entry.js +1 -1
  17. package/dist/esm/ion-alert.entry.js +1 -1
  18. package/dist/esm/ion-datetime_3.entry.js +1 -1
  19. package/dist/esm/ion-loading.entry.js +1 -1
  20. package/dist/esm/ion-menu_3.entry.js +1 -1
  21. package/dist/esm/ion-modal.entry.js +1 -1
  22. package/dist/esm/ion-popover.entry.js +1 -1
  23. package/dist/esm/ion-select_3.entry.js +1 -1
  24. package/dist/esm/ion-toast.entry.js +1 -1
  25. package/dist/esm/{overlays-9c75ec54.js → overlays-d597fdaf.js} +36 -2
  26. package/dist/esm-es5/index.js +1 -1
  27. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  28. package/dist/esm-es5/ion-alert.entry.js +1 -1
  29. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  30. package/dist/esm-es5/ion-loading.entry.js +1 -1
  31. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  32. package/dist/esm-es5/ion-modal.entry.js +1 -1
  33. package/dist/esm-es5/ion-popover.entry.js +1 -1
  34. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  35. package/dist/esm-es5/ion-toast.entry.js +1 -1
  36. package/dist/esm-es5/overlays-d597fdaf.js +4 -0
  37. package/dist/ionic/index.esm.js +1 -1
  38. package/dist/ionic/ionic.esm.js +1 -1
  39. package/dist/ionic/{p-a4d51b8d.system.js → p-038ea840.system.js} +1 -1
  40. package/dist/ionic/{p-ecb57d24.system.entry.js → p-09b2a941.system.entry.js} +1 -1
  41. package/dist/ionic/{p-22c020db.system.entry.js → p-17c10d59.system.entry.js} +1 -1
  42. package/dist/ionic/{p-f50ae0d5.system.entry.js → p-27c6b6b7.system.entry.js} +1 -1
  43. package/dist/ionic/{p-2b7c93b4.entry.js → p-2e7be929.entry.js} +1 -1
  44. package/dist/ionic/p-322c5fb4.system.js +1 -1
  45. package/dist/ionic/{p-b0568945.system.entry.js → p-3f2d6260.system.entry.js} +1 -1
  46. package/dist/ionic/{p-9c23044d.entry.js → p-41bce8cd.entry.js} +1 -1
  47. package/dist/ionic/{p-a72fb8a1.system.entry.js → p-49c0907c.system.entry.js} +1 -1
  48. package/dist/ionic/p-61c3ffe5.system.js +4 -0
  49. package/dist/ionic/p-7d1ef246.js +4 -0
  50. package/dist/ionic/{p-100b83fd.system.entry.js → p-c7283303.system.entry.js} +1 -1
  51. package/dist/ionic/{p-8ed31163.system.entry.js → p-cdbced33.system.entry.js} +1 -1
  52. package/dist/ionic/{p-a41699db.entry.js → p-d2637ca0.entry.js} +1 -1
  53. package/dist/ionic/{p-cff5585e.system.entry.js → p-d4995eda.system.entry.js} +1 -1
  54. package/dist/ionic/{p-9cc3bcc5.system.entry.js → p-df4085d5.system.entry.js} +1 -1
  55. package/dist/ionic/{p-7c50965e.entry.js → p-dfac744b.entry.js} +1 -1
  56. package/dist/ionic/{p-d77e12ca.entry.js → p-e2dca49f.entry.js} +1 -1
  57. package/dist/ionic/{p-0fa0c92b.entry.js → p-ecadbe91.entry.js} +1 -1
  58. package/dist/ionic/{p-5e66bcf2.entry.js → p-efce3337.entry.js} +1 -1
  59. package/dist/ionic/{p-9fef1364.entry.js → p-f01b6d5d.entry.js} +1 -1
  60. package/dist/ionic/{p-b4c950f8.entry.js → p-fcf0c818.entry.js} +1 -1
  61. package/hydrate/index.js +36 -2
  62. package/hydrate/index.mjs +36 -2
  63. package/package.json +1 -1
  64. package/dist/esm-es5/overlays-9c75ec54.js +0 -4
  65. package/dist/ionic/p-98871496.system.js +0 -4
  66. package/dist/ionic/p-a440397c.js +0 -4
@@ -502,7 +502,8 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
502
502
  }
503
503
  setRootAriaHidden(true);
504
504
  document.body.classList.add(BACKDROP_NO_SCROLL);
505
- hideOverlaysFromScreenReaders(overlay.el);
505
+ hideUnderlyingOverlaysFromScreenReaders(overlay.el);
506
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
506
507
  overlay.presented = true;
507
508
  overlay.willPresent.emit();
508
509
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -542,6 +543,11 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
542
543
  * it would still have aria-hidden on being presented again.
543
544
  * Removing it here ensures the overlay is visible to screen
544
545
  * readers.
546
+ *
547
+ * If this overlay was being presented, then it was hidden
548
+ * from screen readers during the animation. Now that the
549
+ * animation is complete, we can reveal the overlay to
550
+ * screen readers.
545
551
  */
546
552
  overlay.el.removeAttribute('aria-hidden');
547
553
  };
@@ -610,6 +616,12 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
610
616
  }
611
617
  overlay.presented = false;
612
618
  try {
619
+ /**
620
+ * There is no need to show the overlay to screen readers during
621
+ * the dismiss animation. This is because the overlay will be removed
622
+ * from the DOM after the animation is complete.
623
+ */
624
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
613
625
  // Overlay contents should not be clickable during dismiss
614
626
  overlay.el.style.setProperty('pointer-events', 'none');
615
627
  overlay.willDismiss.emit({ data, role });
@@ -844,6 +856,28 @@ const createTriggerController = () => {
844
856
  removeClickListener,
845
857
  };
846
858
  };
859
+ /**
860
+ * The overlay that is being animated also needs to hide from screen
861
+ * readers during its animation. This ensures that assistive technologies
862
+ * like TalkBack do not announce or interact with the content until the
863
+ * animation is complete, avoiding confusion for users.
864
+ *
865
+ * If the overlay is being presented, it prevents focus rings from appearing
866
+ * in incorrect positions due to the transition (specifically `transform`
867
+ * styles), ensuring that when aria-hidden is removed, the focus rings are
868
+ * correctly displayed in the final location of the elements.
869
+ *
870
+ * @param overlay - The overlay that is being animated.
871
+ */
872
+ const hideAnimatingOverlayFromScreenReaders = (overlay) => {
873
+ if (doc === undefined)
874
+ return;
875
+ /**
876
+ * Once the animation is complete, this attribute will be removed.
877
+ * This is done at the end of the `present` method.
878
+ */
879
+ overlay.setAttribute('aria-hidden', 'true');
880
+ };
847
881
  /**
848
882
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
849
883
  * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
@@ -854,7 +888,7 @@ const createTriggerController = () => {
854
888
  * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
855
889
  * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
856
890
  */
857
- const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
891
+ const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay) => {
858
892
  var _a;
859
893
  if (doc === undefined)
860
894
  return;
@@ -16,7 +16,7 @@ const helpers = require('./helpers-afaa9001.js');
16
16
  const config = require('./config-4f60b98a.js');
17
17
  const theme = require('./theme-d1c573d2.js');
18
18
  const index$2 = require('./index-9cd00dc3.js');
19
- const overlays = require('./overlays-0123d7d4.js');
19
+ const overlays = require('./overlays-99f0578e.js');
20
20
  require('./index-c8d52405.js');
21
21
  require('./index-73f75efb.js');
22
22
  require('./index-5915f9b3.js');
@@ -9,7 +9,7 @@ const index = require('./index-73f75efb.js');
9
9
  const buttonActive = require('./button-active-3f2f60b4.js');
10
10
  const helpers = require('./helpers-afaa9001.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
- const overlays = require('./overlays-0123d7d4.js');
12
+ const overlays = require('./overlays-99f0578e.js');
13
13
  const theme = require('./theme-d1c573d2.js');
14
14
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
15
15
  const animation = require('./animation-b4fdf128.js');
@@ -10,7 +10,7 @@ const config = require('./config-4f60b98a.js');
10
10
  const buttonActive = require('./button-active-3f2f60b4.js');
11
11
  const helpers = require('./helpers-afaa9001.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
13
- const overlays = require('./overlays-0123d7d4.js');
13
+ const overlays = require('./overlays-99f0578e.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
15
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
16
16
  const animation = require('./animation-b4fdf128.js');
@@ -15,7 +15,7 @@ const index$2 = require('./index-073c7cdc.js');
15
15
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
16
16
  const data = require('./data-21dc0f81.js');
17
17
  const lockController = require('./lock-controller-6585a42a.js');
18
- const overlays = require('./overlays-0123d7d4.js');
18
+ const overlays = require('./overlays-99f0578e.js');
19
19
  const animation = require('./animation-b4fdf128.js');
20
20
  const haptic = require('./haptic-f6b37aa3.js');
21
21
  require('./index-c8d52405.js');
@@ -9,7 +9,7 @@ const index = require('./index-73f75efb.js');
9
9
  const config = require('./config-4f60b98a.js');
10
10
  const helpers = require('./helpers-afaa9001.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
- const overlays = require('./overlays-0123d7d4.js');
12
+ const overlays = require('./overlays-99f0578e.js');
13
13
  const theme = require('./theme-d1c573d2.js');
14
14
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
15
15
  const animation = require('./animation-b4fdf128.js');
@@ -7,7 +7,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-73f75efb.js');
9
9
  const cubicBezier = require('./cubic-bezier-f2dccc53.js');
10
- const overlays = require('./overlays-0123d7d4.js');
10
+ const overlays = require('./overlays-99f0578e.js');
11
11
  const gestureController = require('./gesture-controller-9436f482.js');
12
12
  const hardwareBackButton = require('./hardware-back-button-9e8a2c4f.js');
13
13
  const helpers = require('./helpers-afaa9001.js');
@@ -12,7 +12,7 @@ const helpers = require('./helpers-afaa9001.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
13
13
  const index$4 = require('./index-5915f9b3.js');
14
14
  const capacitor = require('./capacitor-c04564bf.js');
15
- const overlays = require('./overlays-0123d7d4.js');
15
+ const overlays = require('./overlays-99f0578e.js');
16
16
  const theme = require('./theme-d1c573d2.js');
17
17
  const index$5 = require('./index-f05acd21.js');
18
18
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-73f75efb.js');
9
- const overlays = require('./overlays-0123d7d4.js');
9
+ const overlays = require('./overlays-99f0578e.js');
10
10
  const frameworkDelegate = require('./framework-delegate-55f5683a.js');
11
11
  const helpers = require('./helpers-afaa9001.js');
12
12
  const lockController = require('./lock-controller-6585a42a.js');
@@ -9,7 +9,7 @@ const index = require('./index-73f75efb.js');
9
9
  const notchController = require('./notch-controller-d69150f5.js');
10
10
  const compareWithUtils = require('./compare-with-utils-df1001d7.js');
11
11
  const helpers = require('./helpers-afaa9001.js');
12
- const overlays = require('./overlays-0123d7d4.js');
12
+ const overlays = require('./overlays-99f0578e.js');
13
13
  const dir = require('./dir-94c21456.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
15
  const watchOptions = require('./watch-options-f5f3e158.js');
@@ -10,7 +10,7 @@ const config = require('./config-4f60b98a.js');
10
10
  const helpers = require('./helpers-afaa9001.js');
11
11
  const lockController = require('./lock-controller-6585a42a.js');
12
12
  const index$1 = require('./index-5915f9b3.js');
13
- const overlays = require('./overlays-0123d7d4.js');
13
+ const overlays = require('./overlays-99f0578e.js');
14
14
  const theme = require('./theme-d1c573d2.js');
15
15
  const ionicGlobal = require('./ionic-global-d9a8bb5b.js');
16
16
  const animation = require('./animation-b4fdf128.js');
@@ -504,7 +504,8 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
504
504
  }
505
505
  setRootAriaHidden(true);
506
506
  document.body.classList.add(gestureController.BACKDROP_NO_SCROLL);
507
- hideOverlaysFromScreenReaders(overlay.el);
507
+ hideUnderlyingOverlaysFromScreenReaders(overlay.el);
508
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
508
509
  overlay.presented = true;
509
510
  overlay.willPresent.emit();
510
511
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -544,6 +545,11 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
544
545
  * it would still have aria-hidden on being presented again.
545
546
  * Removing it here ensures the overlay is visible to screen
546
547
  * readers.
548
+ *
549
+ * If this overlay was being presented, then it was hidden
550
+ * from screen readers during the animation. Now that the
551
+ * animation is complete, we can reveal the overlay to
552
+ * screen readers.
547
553
  */
548
554
  overlay.el.removeAttribute('aria-hidden');
549
555
  };
@@ -612,6 +618,12 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
612
618
  }
613
619
  overlay.presented = false;
614
620
  try {
621
+ /**
622
+ * There is no need to show the overlay to screen readers during
623
+ * the dismiss animation. This is because the overlay will be removed
624
+ * from the DOM after the animation is complete.
625
+ */
626
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
615
627
  // Overlay contents should not be clickable during dismiss
616
628
  overlay.el.style.setProperty('pointer-events', 'none');
617
629
  overlay.willDismiss.emit({ data, role });
@@ -846,6 +858,28 @@ const createTriggerController = () => {
846
858
  removeClickListener,
847
859
  };
848
860
  };
861
+ /**
862
+ * The overlay that is being animated also needs to hide from screen
863
+ * readers during its animation. This ensures that assistive technologies
864
+ * like TalkBack do not announce or interact with the content until the
865
+ * animation is complete, avoiding confusion for users.
866
+ *
867
+ * If the overlay is being presented, it prevents focus rings from appearing
868
+ * in incorrect positions due to the transition (specifically `transform`
869
+ * styles), ensuring that when aria-hidden is removed, the focus rings are
870
+ * correctly displayed in the final location of the elements.
871
+ *
872
+ * @param overlay - The overlay that is being animated.
873
+ */
874
+ const hideAnimatingOverlayFromScreenReaders = (overlay) => {
875
+ if (index.doc === undefined)
876
+ return;
877
+ /**
878
+ * Once the animation is complete, this attribute will be removed.
879
+ * This is done at the end of the `present` method.
880
+ */
881
+ overlay.setAttribute('aria-hidden', 'true');
882
+ };
849
883
  /**
850
884
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
851
885
  * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
@@ -856,7 +890,7 @@ const createTriggerController = () => {
856
890
  * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
857
891
  * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
858
892
  */
859
- const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
893
+ const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay) => {
860
894
  var _a;
861
895
  if (index.doc === undefined)
862
896
  return;
@@ -429,7 +429,8 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
429
429
  }
430
430
  setRootAriaHidden(true);
431
431
  document.body.classList.add(BACKDROP_NO_SCROLL);
432
- hideOverlaysFromScreenReaders(overlay.el);
432
+ hideUnderlyingOverlaysFromScreenReaders(overlay.el);
433
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
433
434
  overlay.presented = true;
434
435
  overlay.willPresent.emit();
435
436
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -469,6 +470,11 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
469
470
  * it would still have aria-hidden on being presented again.
470
471
  * Removing it here ensures the overlay is visible to screen
471
472
  * readers.
473
+ *
474
+ * If this overlay was being presented, then it was hidden
475
+ * from screen readers during the animation. Now that the
476
+ * animation is complete, we can reveal the overlay to
477
+ * screen readers.
472
478
  */
473
479
  overlay.el.removeAttribute('aria-hidden');
474
480
  };
@@ -537,6 +543,12 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
537
543
  }
538
544
  overlay.presented = false;
539
545
  try {
546
+ /**
547
+ * There is no need to show the overlay to screen readers during
548
+ * the dismiss animation. This is because the overlay will be removed
549
+ * from the DOM after the animation is complete.
550
+ */
551
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
540
552
  // Overlay contents should not be clickable during dismiss
541
553
  overlay.el.style.setProperty('pointer-events', 'none');
542
554
  overlay.willDismiss.emit({ data, role });
@@ -771,6 +783,28 @@ export const createTriggerController = () => {
771
783
  removeClickListener,
772
784
  };
773
785
  };
786
+ /**
787
+ * The overlay that is being animated also needs to hide from screen
788
+ * readers during its animation. This ensures that assistive technologies
789
+ * like TalkBack do not announce or interact with the content until the
790
+ * animation is complete, avoiding confusion for users.
791
+ *
792
+ * If the overlay is being presented, it prevents focus rings from appearing
793
+ * in incorrect positions due to the transition (specifically `transform`
794
+ * styles), ensuring that when aria-hidden is removed, the focus rings are
795
+ * correctly displayed in the final location of the elements.
796
+ *
797
+ * @param overlay - The overlay that is being animated.
798
+ */
799
+ const hideAnimatingOverlayFromScreenReaders = (overlay) => {
800
+ if (doc === undefined)
801
+ return;
802
+ /**
803
+ * Once the animation is complete, this attribute will be removed.
804
+ * This is done at the end of the `present` method.
805
+ */
806
+ overlay.setAttribute('aria-hidden', 'true');
807
+ };
774
808
  /**
775
809
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
776
810
  * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
@@ -781,7 +815,7 @@ export const createTriggerController = () => {
781
815
  * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
782
816
  * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
783
817
  */
784
- const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
818
+ const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay) => {
785
819
  var _a;
786
820
  if (doc === undefined)
787
821
  return;
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2024-10-24T06:09:22",
2
+ "timestamp": "2024-10-25T06:09:16",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.20.0",
package/dist/esm/index.js CHANGED
@@ -12,7 +12,7 @@ export { c as componentOnReady } from './helpers-da915de8.js';
12
12
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-49c88215.js';
13
13
  export { o as openURL } from './theme-01f3f29c.js';
14
14
  export { m as menuController } from './index-fe1782b1.js';
15
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-9c75ec54.js';
15
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-d597fdaf.js';
16
16
  import './index-a5d50daf.js';
17
17
  import './index-28849c61.js';
18
18
  import './index-9b0d46f4.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, e as readTask, h, f as Host, i
5
5
  import { c as createButtonActiveGesture } from './button-active-f6503382.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-9c75ec54.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-d597fdaf.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { c as createButtonActiveGesture } from './button-active-f6503382.js';
7
7
  import { r as raf } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-9c75ec54.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-d597fdaf.js';
10
10
  import { g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -11,7 +11,7 @@ import { c as chevronBack, o as chevronForward, l as chevronDown, p as caretUpSh
11
11
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { g as generateDayAriaLabel, a as getDay, i as isBefore, b as isAfter, c as isSameDay, d as getPreviousMonth, e as getNextMonth, v as validateParts, f as getPartsFromCalendarDay, h as getNextYear, j as getPreviousYear, k as getEndOfWeek, l as getStartOfWeek, m as getPreviousDay, n as getNextDay, o as getPreviousWeek, p as getNextWeek, q as parseMinParts, r as parseMaxParts, s as parseDate, w as warnIfValueOutOfBounds, t as convertToArrayOfNumbers, u as convertDataToISO, x as getToday, y as getClosestValidDate, z as generateMonths, A as getNumDaysInMonth, B as getCombinedDateColumnData, C as getMonthColumnData, D as getDayColumnData, E as getYearColumnData, F as isMonthFirstLocale, G as getTimeColumnsData, H as isLocaleDayPeriodRTL, I as getDaysOfWeek, J as getMonthAndYear, K as getDaysOfMonth, L as getHourCycle, M as getLocalizedTime, N as getLocalizedDateTime, O as formatValue, P as clampDate, Q as parseAmPm, R as calculateHourFromAMPM } from './data-ae11fd43.js';
13
13
  import { c as createLockController } from './lock-controller-316928be.js';
14
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-9c75ec54.js';
14
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-d597fdaf.js';
15
15
  import { c as createAnimation } from './animation-eab5a4ca.js';
16
16
  import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-ac164e4c.js';
17
17
  import './index-a5d50daf.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, f as Host, i as getElement
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-49c88215.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-9c75ec54.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-d597fdaf.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, f as Host, i as getElement } from './index-28849c61.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
6
- import { o as getPresentedOverlay, n as focusFirstDescendant, q as focusLastDescendant } from './overlays-9c75ec54.js';
6
+ import { o as getPresentedOverlay, n as focusFirstDescendant, q as focusLastDescendant } from './overlays-d597fdaf.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-314a54f6.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-06ef3c3e.js';
9
9
  import { n as isEndSide, i as inheritAriaAttributes, m as assert, j as clamp } from './helpers-da915de8.js';
@@ -8,7 +8,7 @@ import { g as getElementRoot, j as clamp, r as raf, h as inheritAttributes, k as
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
9
  import { p as printIonWarning } from './index-9b0d46f4.js';
10
10
  import { g as getCapacitor } from './capacitor-59395cbd.js';
11
- import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-9c75ec54.js';
11
+ import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-d597fdaf.js';
12
12
  import { g as getClassMap } from './theme-01f3f29c.js';
13
13
  import { e as deepReady, w as waitForMount } from './index-3ad7f18b.js';
14
14
  import { b as getIonMode, c as config } from './ionic-global-c81d82ab.js';
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, f as Host, i as getElement } from './index-28849c61.js';
5
- import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-9c75ec54.js';
5
+ import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-d597fdaf.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-63d1a679.js';
7
7
  import { r as raf, g as getElementRoot, a as addEventListener, k as hasLazyBuild } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, f as Host, i as getElement,
5
5
  import { c as createNotchController } from './notch-controller-55b09e11.js';
6
6
  import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-a96ff2ea.js';
7
7
  import { h as inheritAttributes, f as focusVisibleElement, d as renderHiddenInput } from './helpers-da915de8.js';
8
- import { c as popoverController, b as actionSheetController, a as alertController, s as safeCall } from './overlays-9c75ec54.js';
8
+ import { c as popoverController, b as actionSheetController, a as alertController, s as safeCall } from './overlays-d597fdaf.js';
9
9
  import { i as isRTL } from './dir-babeabeb.js';
10
10
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { w as watchForOptions } from './watch-options-c2911ace.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { g as getElementRoot, r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
8
  import { p as printIonWarning } from './index-9b0d46f4.js';
9
- import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-9c75ec54.js';
9
+ import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-d597fdaf.js';
10
10
  import { c as createColorClasses, g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -502,7 +502,8 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
502
502
  }
503
503
  setRootAriaHidden(true);
504
504
  document.body.classList.add(BACKDROP_NO_SCROLL);
505
- hideOverlaysFromScreenReaders(overlay.el);
505
+ hideUnderlyingOverlaysFromScreenReaders(overlay.el);
506
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
506
507
  overlay.presented = true;
507
508
  overlay.willPresent.emit();
508
509
  (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
@@ -542,6 +543,11 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
542
543
  * it would still have aria-hidden on being presented again.
543
544
  * Removing it here ensures the overlay is visible to screen
544
545
  * readers.
546
+ *
547
+ * If this overlay was being presented, then it was hidden
548
+ * from screen readers during the animation. Now that the
549
+ * animation is complete, we can reveal the overlay to
550
+ * screen readers.
545
551
  */
546
552
  overlay.el.removeAttribute('aria-hidden');
547
553
  };
@@ -610,6 +616,12 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
610
616
  }
611
617
  overlay.presented = false;
612
618
  try {
619
+ /**
620
+ * There is no need to show the overlay to screen readers during
621
+ * the dismiss animation. This is because the overlay will be removed
622
+ * from the DOM after the animation is complete.
623
+ */
624
+ hideAnimatingOverlayFromScreenReaders(overlay.el);
613
625
  // Overlay contents should not be clickable during dismiss
614
626
  overlay.el.style.setProperty('pointer-events', 'none');
615
627
  overlay.willDismiss.emit({ data, role });
@@ -844,6 +856,28 @@ const createTriggerController = () => {
844
856
  removeClickListener,
845
857
  };
846
858
  };
859
+ /**
860
+ * The overlay that is being animated also needs to hide from screen
861
+ * readers during its animation. This ensures that assistive technologies
862
+ * like TalkBack do not announce or interact with the content until the
863
+ * animation is complete, avoiding confusion for users.
864
+ *
865
+ * If the overlay is being presented, it prevents focus rings from appearing
866
+ * in incorrect positions due to the transition (specifically `transform`
867
+ * styles), ensuring that when aria-hidden is removed, the focus rings are
868
+ * correctly displayed in the final location of the elements.
869
+ *
870
+ * @param overlay - The overlay that is being animated.
871
+ */
872
+ const hideAnimatingOverlayFromScreenReaders = (overlay) => {
873
+ if (doc === undefined)
874
+ return;
875
+ /**
876
+ * Once the animation is complete, this attribute will be removed.
877
+ * This is done at the end of the `present` method.
878
+ */
879
+ overlay.setAttribute('aria-hidden', 'true');
880
+ };
847
881
  /**
848
882
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
849
883
  * cannot move focus to these elements. Note that we cannot rely on focus/focusin/focusout
@@ -854,7 +888,7 @@ const createTriggerController = () => {
854
888
  * @param newTopMostOverlay - The overlay that is being presented. Since the overlay has not been
855
889
  * fully presented yet at the time this function is called it will not be included in the getPresentedOverlays result.
856
890
  */
857
- const hideOverlaysFromScreenReaders = (newTopMostOverlay) => {
891
+ const hideUnderlyingOverlaysFromScreenReaders = (newTopMostOverlay) => {
858
892
  var _a;
859
893
  if (doc === undefined)
860
894
  return;
@@ -1,4 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- export{c as createAnimation}from"./animation-eab5a4ca.js";export{a as LIFECYCLE_DID_ENTER,c as LIFECYCLE_DID_LEAVE,L as LIFECYCLE_WILL_ENTER,b as LIFECYCLE_WILL_LEAVE,d as LIFECYCLE_WILL_UNLOAD,g as getIonPageElement}from"./index-3ad7f18b.js";export{iosTransitionAnimation}from"./ios.transition-4ee1a3af.js";export{mdTransitionAnimation}from"./md.transition-5106a0d2.js";export{g as getTimeGivenProgression}from"./cubic-bezier-fe2083dc.js";export{createGesture}from"./index-39782642.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./ionic-global-c81d82ab.js";export{c as componentOnReady}from"./helpers-da915de8.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./config-49c88215.js";export{o as openURL}from"./theme-01f3f29c.js";export{m as menuController}from"./index-fe1782b1.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./overlays-9c75ec54.js";import"./index-a5d50daf.js";import"./index-28849c61.js";import"./index-9b0d46f4.js";import"./gesture-controller-314a54f6.js";import"./hardware-back-button-06ef3c3e.js";import"./framework-delegate-63d1a679.js";var IonicSlides=function(e){var o=e.swiper,t=e.extendParams;var s={effect:undefined,direction:"horizontal",initialSlide:0,loop:false,parallax:false,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:false,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:false,freeModeMomentum:true,freeModeMomentumRatio:1,freeModeMomentumBounce:true,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:false,freeModeMinimumVelocity:.02,autoHeight:false,setWrapperSize:false,zoom:{maxRatio:3,minRatio:1,toggle:false},touchRatio:1,touchAngle:45,simulateTouch:true,touchStartPreventDefault:false,shortSwipes:true,longSwipes:true,longSwipesRatio:.5,longSwipesMs:300,followFinger:true,threshold:0,touchMoveStopPropagation:true,touchReleaseOnEdges:false,iOSEdgeSwipeDetection:false,iOSEdgeSwipeThreshold:20,resistance:true,resistanceRatio:.85,watchSlidesProgress:false,watchSlidesVisibility:false,preventClicks:true,preventClicksPropagation:true,slideToClickedSlide:false,loopAdditionalSlides:0,noSwiping:true,runCallbacksOnInit:true,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:true},flipEffect:{slideShadows:true,limitRotation:true},cubeEffect:{slideShadows:true,shadow:true,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:false},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};if(o.pagination){s.pagination={type:"bullets",clickable:false,hideOnClick:false}}if(o.scrollbar){s.scrollbar={hide:true}}t(s)};export{IonicSlides};
4
+ export{c as createAnimation}from"./animation-eab5a4ca.js";export{a as LIFECYCLE_DID_ENTER,c as LIFECYCLE_DID_LEAVE,L as LIFECYCLE_WILL_ENTER,b as LIFECYCLE_WILL_LEAVE,d as LIFECYCLE_WILL_UNLOAD,g as getIonPageElement}from"./index-3ad7f18b.js";export{iosTransitionAnimation}from"./ios.transition-4ee1a3af.js";export{mdTransitionAnimation}from"./md.transition-5106a0d2.js";export{g as getTimeGivenProgression}from"./cubic-bezier-fe2083dc.js";export{createGesture}from"./index-39782642.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./ionic-global-c81d82ab.js";export{c as componentOnReady}from"./helpers-da915de8.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./config-49c88215.js";export{o as openURL}from"./theme-01f3f29c.js";export{m as menuController}from"./index-fe1782b1.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./overlays-d597fdaf.js";import"./index-a5d50daf.js";import"./index-28849c61.js";import"./index-9b0d46f4.js";import"./gesture-controller-314a54f6.js";import"./hardware-back-button-06ef3c3e.js";import"./framework-delegate-63d1a679.js";var IonicSlides=function(e){var o=e.swiper,t=e.extendParams;var s={effect:undefined,direction:"horizontal",initialSlide:0,loop:false,parallax:false,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:false,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:false,freeModeMomentum:true,freeModeMomentumRatio:1,freeModeMomentumBounce:true,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:false,freeModeMinimumVelocity:.02,autoHeight:false,setWrapperSize:false,zoom:{maxRatio:3,minRatio:1,toggle:false},touchRatio:1,touchAngle:45,simulateTouch:true,touchStartPreventDefault:false,shortSwipes:true,longSwipes:true,longSwipesRatio:.5,longSwipesMs:300,followFinger:true,threshold:0,touchMoveStopPropagation:true,touchReleaseOnEdges:false,iOSEdgeSwipeDetection:false,iOSEdgeSwipeThreshold:20,resistance:true,resistanceRatio:.85,watchSlidesProgress:false,watchSlidesVisibility:false,preventClicks:true,preventClicksPropagation:true,slideToClickedSlide:false,loopAdditionalSlides:0,noSwiping:true,runCallbacksOnInit:true,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:true},flipEffect:{slideShadows:true,limitRotation:true},cubeEffect:{slideShadows:true,shadow:true,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:false},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};if(o.pagination){s.pagination={type:"bullets",clickable:false,hideOnClick:false}}if(o.scrollbar){s.scrollbar={hide:true}}t(s)};export{IonicSlides};