@ionic/core 8.8.13 → 8.8.14-dev.11783455203.1cbca643

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 (65) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-action-sheet.js +1 -1
  3. package/components/ion-alert.js +1 -1
  4. package/components/ion-datetime.js +1 -1
  5. package/components/ion-loading.js +1 -1
  6. package/components/ion-menu.js +1 -1
  7. package/components/ion-modal.js +1 -1
  8. package/components/ion-picker-legacy.js +1 -1
  9. package/components/ion-popover.js +1 -1
  10. package/components/ion-select-modal.js +1 -1
  11. package/components/ion-select-popover.js +1 -1
  12. package/components/ion-select.js +1 -1
  13. package/components/ion-toast.js +1 -1
  14. package/components/{p-nQi4oKcG.js → p-BI99_O7M.js} +1 -1
  15. package/components/{p-DS4Hk6R2.js → p-BeaZQGdD.js} +1 -1
  16. package/components/p-BhiHTRHr.js +4 -0
  17. package/components/{p-Bth-EzJ0.js → p-Cg0yUncF.js} +1 -1
  18. package/components/{p-dhLYXa7A.js → p-CiZjmDRO.js} +1 -1
  19. package/components/{p-0NRupjzW.js → p-CoDFQCkp.js} +1 -1
  20. package/components/{p-uVRyUM3z.js → p-DfAYowgb.js} +1 -1
  21. package/dist/cjs/index.cjs.js +1 -1
  22. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  23. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  24. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  25. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  26. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  27. package/dist/cjs/ion-modal.cjs.entry.js +16 -4
  28. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  29. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  30. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  32. package/dist/cjs/{overlays-TbKsuC-K.js → overlays-B9WEMRRo.js} +26 -1
  33. package/dist/collection/components/modal/modal.js +15 -3
  34. package/dist/collection/utils/overlays.js +26 -1
  35. package/dist/docs.json +1 -1
  36. package/dist/esm/index.js +1 -1
  37. package/dist/esm/ion-action-sheet.entry.js +1 -1
  38. package/dist/esm/ion-alert.entry.js +1 -1
  39. package/dist/esm/ion-datetime_3.entry.js +1 -1
  40. package/dist/esm/ion-loading.entry.js +1 -1
  41. package/dist/esm/ion-menu_3.entry.js +1 -1
  42. package/dist/esm/ion-modal.entry.js +16 -4
  43. package/dist/esm/ion-popover.entry.js +1 -1
  44. package/dist/esm/ion-select-modal.entry.js +1 -1
  45. package/dist/esm/ion-select_3.entry.js +1 -1
  46. package/dist/esm/ion-toast.entry.js +1 -1
  47. package/dist/esm/{overlays-TbiM4mdr.js → overlays--4JLDr6C.js} +27 -2
  48. package/dist/ionic/index.esm.js +1 -1
  49. package/dist/ionic/ionic.esm.js +1 -1
  50. package/dist/ionic/{p-3a541154.entry.js → p-28df2088.entry.js} +1 -1
  51. package/dist/ionic/{p-b1c6fdcf.entry.js → p-57e31cc8.entry.js} +1 -1
  52. package/dist/ionic/{p-e847a888.entry.js → p-766bbdff.entry.js} +1 -1
  53. package/dist/ionic/{p-00dbb17e.entry.js → p-8b4e6e7f.entry.js} +1 -1
  54. package/dist/ionic/p-Dzyqeklk.js +4 -0
  55. package/dist/ionic/{p-94f2a736.entry.js → p-a6ad9c29.entry.js} +1 -1
  56. package/dist/ionic/{p-5fc7e542.entry.js → p-aa56131f.entry.js} +1 -1
  57. package/dist/ionic/{p-aa5d6b8f.entry.js → p-b580c366.entry.js} +1 -1
  58. package/dist/ionic/{p-30bf9737.entry.js → p-badb48f9.entry.js} +1 -1
  59. package/dist/ionic/{p-2f55dc1a.entry.js → p-c8739c33.entry.js} +1 -1
  60. package/dist/ionic/{p-4dc1c33c.entry.js → p-e930122a.entry.js} +1 -1
  61. package/hydrate/index.js +41 -4
  62. package/hydrate/index.mjs +41 -4
  63. package/package.json +1 -1
  64. package/components/p-W9CZ2mWX.js +0 -4
  65. package/dist/ionic/p-xOfi7-Zn.js +0 -4
@@ -6,7 +6,7 @@
6
6
  var index = require('./index-Ct7gcRif.js');
7
7
  var focusVisible = require('./focus-visible-CCvKiLh3.js');
8
8
  var helpers = require('./helpers-Cv23MFHM.js');
9
- var overlays = require('./overlays-TbKsuC-K.js');
9
+ var overlays = require('./overlays-B9WEMRRo.js');
10
10
  var dir = require('./dir-Cn0z1rJH.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var index$1 = require('./index-DqmRDbxg.js');
@@ -7,7 +7,7 @@ var index = require('./index-Ct7gcRif.js');
7
7
  var config = require('./config-xninhj0J.js');
8
8
  var helpers = require('./helpers-Cv23MFHM.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-TbKsuC-K.js');
10
+ var overlays = require('./overlays-B9WEMRRo.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-B-cA6LkY.js');
13
13
  var animation = require('./animation-BJq0kcy2.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-Ct7gcRif.js');
7
7
  var cubicBezier = require('./cubic-bezier-DAjy1V-e.js');
8
- var overlays = require('./overlays-TbKsuC-K.js');
8
+ var overlays = require('./overlays-B9WEMRRo.js');
9
9
  var gestureController = require('./gesture-controller-dtqlP_q4.js');
10
10
  var hardwareBackButton = require('./hardware-back-button-iUuF_76h.js');
11
11
  var helpers = require('./helpers-Cv23MFHM.js');
@@ -9,7 +9,7 @@ var frameworkDelegate = require('./framework-delegate-BtICZDHr.js');
9
9
  var helpers = require('./helpers-Cv23MFHM.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
11
11
  var capacitor = require('./capacitor-DmA66EwP.js');
12
- var overlays = require('./overlays-TbKsuC-K.js');
12
+ var overlays = require('./overlays-B9WEMRRo.js');
13
13
  var theme = require('./theme-CeDs6Hcv.js');
14
14
  var index$4 = require('./index-BERfRao3.js');
15
15
  var ionicGlobal = require('./ionic-global-B-cA6LkY.js');
@@ -2964,16 +2964,28 @@ const Modal = class {
2964
2964
  // Allow the modal to be navigable when the handle is focusable
2965
2965
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
2966
2966
  zIndex: `${20000 + this.overlayIndex}`,
2967
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$3.h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), index$3.h("div", Object.assign({ key: '3f6c61ba60b063592784d76a9594073b3bf210a9',
2967
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$3.h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), index$3.h("div", Object.assign({ key: '472beb0ea2c77ef91087e66f1c8af2be5eff04a7',
2968
2968
  /*
2969
2969
  role and aria-modal must be used on the
2970
2970
  same element. They must also be set inside the
2971
2971
  shadow DOM otherwise ion-button will not be highlighted
2972
2972
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
2973
+
2974
+ tabIndex={-1} makes this element (rather than the role-less
2975
+ host) the thing that `present()` in overlays.ts focuses when
2976
+ the modal opens, so assistive technologies get a focus target
2977
+ that actually carries the dialog's role/label. It is not part
2978
+ of the Tab order since -1 is never Tab-reachable.
2979
+
2980
+ This is only applied to default modals. For sheet and iOS card
2981
+ modals the wrapper doubles as the drag-gesture surface, and
2982
+ leaving focus on that surface interferes with the pointer
2983
+ gesture (most visibly on Firefox). Those modals keep focusing
2984
+ the host as before.
2973
2985
  */
2974
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$3.h("button", { key: '7f66b4fdb3dec61a2b9aec4e9dbacf5d013d637c', class: "modal-handle",
2986
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", tabIndex: !isCardModal && !isSheetModal ? -1 : undefined, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$3.h("button", { key: 'd5e46503ae98e86b9110ce5835fa326d2f762731', class: "modal-handle",
2975
2987
  // Prevents the handle from receiving keyboard focus when it does not cycle
2976
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: '2dfaaebe3d0b2a46be1224c25f9ab89bf1744332', onSlotchange: this.onSlotChange }))));
2988
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: '8ec7c7c8bd214b3d1818cdaed3e5fc52a5b34bde', onSlotchange: this.onSlotChange }))));
2977
2989
  }
2978
2990
  get el() { return index$3.getElement(this); }
2979
2991
  static get watchers() { return {
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-Ct7gcRif.js');
7
- var overlays = require('./overlays-TbKsuC-K.js');
7
+ var overlays = require('./overlays-B9WEMRRo.js');
8
8
  var frameworkDelegate = require('./framework-delegate-BtICZDHr.js');
9
9
  var helpers = require('./helpers-Cv23MFHM.js');
10
10
  var lockController = require('./lock-controller-aDB9wrEf.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-Ct7gcRif.js');
7
7
  var ionicGlobal = require('./ionic-global-B-cA6LkY.js');
8
- var overlays = require('./overlays-TbKsuC-K.js');
8
+ var overlays = require('./overlays-B9WEMRRo.js');
9
9
  var theme = require('./theme-CeDs6Hcv.js');
10
10
  require('./index-DkNv4J_i.js');
11
11
  require('./helpers-Cv23MFHM.js');
@@ -8,7 +8,7 @@ var notchController = require('./notch-controller-18PzRGXd.js');
8
8
  var compareWithUtils = require('./compare-with-utils-DSicavqM.js');
9
9
  var validity = require('./validity-BpS37YFM.js');
10
10
  var helpers = require('./helpers-Cv23MFHM.js');
11
- var overlays = require('./overlays-TbKsuC-K.js');
11
+ var overlays = require('./overlays-B9WEMRRo.js');
12
12
  var dir = require('./dir-Cn0z1rJH.js');
13
13
  var theme = require('./theme-CeDs6Hcv.js');
14
14
  var watchOptions = require('./watch-options-CviOsrTS.js');
@@ -7,7 +7,7 @@ var index$1 = require('./index-Ct7gcRif.js');
7
7
  var config = require('./config-xninhj0J.js');
8
8
  var helpers = require('./helpers-Cv23MFHM.js');
9
9
  var lockController = require('./lock-controller-aDB9wrEf.js');
10
- var overlays = require('./overlays-TbKsuC-K.js');
10
+ var overlays = require('./overlays-B9WEMRRo.js');
11
11
  var theme = require('./theme-CeDs6Hcv.js');
12
12
  var ionicGlobal = require('./ionic-global-B-cA6LkY.js');
13
13
  var animation = require('./animation-BJq0kcy2.js');
@@ -578,7 +578,32 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
578
578
  * to the overlay container.
579
579
  */
580
580
  if (overlay.keyboardClose && (document.activeElement === null || !overlay.el.contains(document.activeElement))) {
581
- overlay.el.focus();
581
+ /**
582
+ * Some overlays (modal, alert) declare `role="dialog"`/`alertdialog`,
583
+ * `aria-modal`, and the accessible label on the `.ion-overlay-wrapper`
584
+ * element inside the overlay rather than on the host itself. Focusing
585
+ * `overlay.el` (the host) in that case hands assistive technologies a
586
+ * focus target with no accessible role or name -- screen readers that
587
+ * rely on the focus/accessibility-focus event to know a dialog opened
588
+ * (e.g. Android TalkBack, which does not treat `aria-modal` alone as a
589
+ * navigation boundary) get no usable landing point, so their linear
590
+ * navigation cursor never actually enters the overlay's content.
591
+ *
592
+ * Other overlays (action-sheet, loading, popover) keep those
593
+ * attributes on the host and leave `.ion-overlay-wrapper` without a
594
+ * `tabindex`, in which case it is not focusable and the host remains
595
+ * the correct target. Only redirect to the wrapper when it actually
596
+ * declares a `tabindex` (i.e. the component authored it to be
597
+ * focusable) so overlays that already focus the host correctly are
598
+ * left untouched.
599
+ *
600
+ * `preventScroll` keeps this purely an accessibility-focus move: we
601
+ * do not want focusing the wrapper to scroll it into view, since the
602
+ * host was already the scroll-neutral, full-viewport container.
603
+ */
604
+ const overlayWrapper = helpers.getElementRoot(overlay.el).querySelector('.ion-overlay-wrapper');
605
+ const focusTarget = (overlayWrapper === null || overlayWrapper === void 0 ? void 0 : overlayWrapper.hasAttribute('tabindex')) ? overlayWrapper : overlay.el;
606
+ focusTarget.focus({ preventScroll: true });
582
607
  }
583
608
  /**
584
609
  * If this overlay was previously dismissed without being
@@ -1166,16 +1166,28 @@ export class Modal {
1166
1166
  // Allow the modal to be navigable when the handle is focusable
1167
1167
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
1168
1168
  zIndex: `${20000 + this.overlayIndex}`,
1169
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), h("div", Object.assign({ key: '3f6c61ba60b063592784d76a9594073b3bf210a9',
1169
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), h("div", Object.assign({ key: '472beb0ea2c77ef91087e66f1c8af2be5eff04a7',
1170
1170
  /*
1171
1171
  role and aria-modal must be used on the
1172
1172
  same element. They must also be set inside the
1173
1173
  shadow DOM otherwise ion-button will not be highlighted
1174
1174
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1175
+
1176
+ tabIndex={-1} makes this element (rather than the role-less
1177
+ host) the thing that `present()` in overlays.ts focuses when
1178
+ the modal opens, so assistive technologies get a focus target
1179
+ that actually carries the dialog's role/label. It is not part
1180
+ of the Tab order since -1 is never Tab-reachable.
1181
+
1182
+ This is only applied to default modals. For sheet and iOS card
1183
+ modals the wrapper doubles as the drag-gesture surface, and
1184
+ leaving focus on that surface interferes with the pointer
1185
+ gesture (most visibly on Firefox). Those modals keep focusing
1186
+ the host as before.
1175
1187
  */
1176
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '7f66b4fdb3dec61a2b9aec4e9dbacf5d013d637c', class: "modal-handle",
1188
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", tabIndex: !isCardModal && !isSheetModal ? -1 : undefined, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'd5e46503ae98e86b9110ce5835fa326d2f762731', class: "modal-handle",
1177
1189
  // Prevents the handle from receiving keyboard focus when it does not cycle
1178
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '2dfaaebe3d0b2a46be1224c25f9ab89bf1744332', onSlotchange: this.onSlotChange }))));
1190
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '8ec7c7c8bd214b3d1818cdaed3e5fc52a5b34bde', onSlotchange: this.onSlotChange }))));
1179
1191
  }
1180
1192
  static get is() { return "ion-modal"; }
1181
1193
  static get encapsulation() { return "shadow"; }
@@ -497,7 +497,32 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
497
497
  * to the overlay container.
498
498
  */
499
499
  if (overlay.keyboardClose && (document.activeElement === null || !overlay.el.contains(document.activeElement))) {
500
- overlay.el.focus();
500
+ /**
501
+ * Some overlays (modal, alert) declare `role="dialog"`/`alertdialog`,
502
+ * `aria-modal`, and the accessible label on the `.ion-overlay-wrapper`
503
+ * element inside the overlay rather than on the host itself. Focusing
504
+ * `overlay.el` (the host) in that case hands assistive technologies a
505
+ * focus target with no accessible role or name -- screen readers that
506
+ * rely on the focus/accessibility-focus event to know a dialog opened
507
+ * (e.g. Android TalkBack, which does not treat `aria-modal` alone as a
508
+ * navigation boundary) get no usable landing point, so their linear
509
+ * navigation cursor never actually enters the overlay's content.
510
+ *
511
+ * Other overlays (action-sheet, loading, popover) keep those
512
+ * attributes on the host and leave `.ion-overlay-wrapper` without a
513
+ * `tabindex`, in which case it is not focusable and the host remains
514
+ * the correct target. Only redirect to the wrapper when it actually
515
+ * declares a `tabindex` (i.e. the component authored it to be
516
+ * focusable) so overlays that already focus the host correctly are
517
+ * left untouched.
518
+ *
519
+ * `preventScroll` keeps this purely an accessibility-focus move: we
520
+ * do not want focusing the wrapper to scroll it into view, since the
521
+ * host was already the scroll-neutral, full-viewport container.
522
+ */
523
+ const overlayWrapper = getElementRoot(overlay.el).querySelector('.ion-overlay-wrapper');
524
+ const focusTarget = (overlayWrapper === null || overlayWrapper === void 0 ? void 0 : overlayWrapper.hasAttribute('tabindex')) ? overlayWrapper : overlay.el;
525
+ focusTarget.focus({ preventScroll: true });
501
526
  }
502
527
  /**
503
528
  * If this overlay was previously dismissed without being
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-07-01T18:56:09",
2
+ "timestamp": "2026-07-07T20:15:20",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.5",
package/dist/esm/index.js CHANGED
@@ -13,7 +13,7 @@ export { L as LogLevel } from './index-tcQvqkiX.js';
13
13
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-DQCONYYp.js';
14
14
  export { o as openURL } from './theme-DiVJyqlX.js';
15
15
  export { m as menuController } from './index-Q6UPU0Ay.js';
16
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-TbiM4mdr.js';
16
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays--4JLDr6C.js';
17
17
  import './index-ZjP4CjeZ.js';
18
18
  import './gesture-controller-BTEOs1at.js';
19
19
  import './hardware-back-button-B93Gru0Y.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, a as readTask, h, d as Host, g
5
5
  import { c as createButtonActiveGesture } from './button-active-BSpTQmS9.js';
6
6
  import { r as raf } from './helpers-HEqiOzXb.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.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-TbiM4mdr.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--4JLDr6C.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
11
11
  import { c as createAnimation } from './animation-DLJpuoEz.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-BSpTQmS9.js';
7
7
  import { r as raf } from './helpers-HEqiOzXb.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.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-TbiM4mdr.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--4JLDr6C.js';
10
10
  import { g as getClassMap } from './theme-DiVJyqlX.js';
11
11
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
12
12
  import { c as createAnimation } from './animation-DLJpuoEz.js';
@@ -4,7 +4,7 @@
4
4
  import { j as printIonError, f as printIonWarning, r as registerInstance, c as createEvent, w as writeTask, e as config, h, d as Host, g as getElement } from './index-tcQvqkiX.js';
5
5
  import { startFocusVisible } from './focus-visible-BmVRXR1y.js';
6
6
  import { r as raf, g as getElementRoot, a as renderHiddenInput, e as clamp } from './helpers-HEqiOzXb.js';
7
- import { F as FOCUS_TRAP_DISABLE_CLASS, 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-TbiM4mdr.js';
7
+ import { F as FOCUS_TRAP_DISABLE_CLASS, 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--4JLDr6C.js';
8
8
  import { i as isRTL } from './dir-C53feagD.js';
9
9
  import { c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { l as chevronDown, o as caretUpSharp, p as chevronForward, q as caretDownSharp, c as chevronBack } from './index-DV3sJJW8.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, e as config, h, d as Host, g a
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-DQCONYYp.js';
6
6
  import { r as raf } from './helpers-HEqiOzXb.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.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-TbiM4mdr.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--4JLDr6C.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
11
11
  import { c as createAnimation } from './animation-DLJpuoEz.js';
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, c as createEvent, e as config, j as printIonError, h, d as Host, g as getElement } from './index-tcQvqkiX.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
6
- import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-TbiM4mdr.js';
6
+ import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays--4JLDr6C.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-BTEOs1at.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-B93Gru0Y.js';
9
9
  import { o as isEndSide, i as inheritAriaAttributes, l as assert, e as clamp } from './helpers-HEqiOzXb.js';
@@ -7,7 +7,7 @@ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from '.
7
7
  import { e as clamp, g as getElementRoot, r as raf, b as inheritAttributes, h as hasLazyBuild } from './helpers-HEqiOzXb.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
9
9
  import { g as getCapacitor } from './capacitor-CFERIeaU.js';
10
- 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-TbiM4mdr.js';
10
+ 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--4JLDr6C.js';
11
11
  import { g as getClassMap } from './theme-DiVJyqlX.js';
12
12
  import { e as deepReady, w as waitForMount } from './index-B_dQk_WE.js';
13
13
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
@@ -2962,16 +2962,28 @@ const Modal = class {
2962
2962
  // Allow the modal to be navigable when the handle is focusable
2963
2963
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
2964
2964
  zIndex: `${20000 + this.overlayIndex}`,
2965
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), h("div", Object.assign({ key: '3f6c61ba60b063592784d76a9594073b3bf210a9',
2965
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '5ba6315c7c8c64fa04c62f85fd493da5275b2cbd', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'a76c48d41c67f86c18a7481e980e6925e614f85d', class: "modal-shadow" }), h("div", Object.assign({ key: '472beb0ea2c77ef91087e66f1c8af2be5eff04a7',
2966
2966
  /*
2967
2967
  role and aria-modal must be used on the
2968
2968
  same element. They must also be set inside the
2969
2969
  shadow DOM otherwise ion-button will not be highlighted
2970
2970
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
2971
+
2972
+ tabIndex={-1} makes this element (rather than the role-less
2973
+ host) the thing that `present()` in overlays.ts focuses when
2974
+ the modal opens, so assistive technologies get a focus target
2975
+ that actually carries the dialog's role/label. It is not part
2976
+ of the Tab order since -1 is never Tab-reachable.
2977
+
2978
+ This is only applied to default modals. For sheet and iOS card
2979
+ modals the wrapper doubles as the drag-gesture surface, and
2980
+ leaving focus on that surface interferes with the pointer
2981
+ gesture (most visibly on Firefox). Those modals keep focusing
2982
+ the host as before.
2971
2983
  */
2972
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '7f66b4fdb3dec61a2b9aec4e9dbacf5d013d637c', class: "modal-handle",
2984
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", tabIndex: !isCardModal && !isSheetModal ? -1 : undefined, class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'd5e46503ae98e86b9110ce5835fa326d2f762731', class: "modal-handle",
2973
2985
  // Prevents the handle from receiving keyboard focus when it does not cycle
2974
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '2dfaaebe3d0b2a46be1224c25f9ab89bf1744332', onSlotchange: this.onSlotChange }))));
2986
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '8ec7c7c8bd214b3d1818cdaed3e5fc52a5b34bde', onSlotchange: this.onSlotChange }))));
2975
2987
  }
2976
2988
  get el() { return getElement(this); }
2977
2989
  static get watchers() { return {
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, c as createEvent, f as printIonWarning, h, d as Host, g as getElement } from './index-tcQvqkiX.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-TbiM4mdr.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--4JLDr6C.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-FnPGymXL.js';
7
7
  import { g as getElementRoot, r as raf, f as addEventListener, h as hasLazyBuild } from './helpers-HEqiOzXb.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, h, i as forceUpdate, d as Host, g as getElement } from './index-tcQvqkiX.js';
5
5
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
6
- import { s as safeCall } from './overlays-TbiM4mdr.js';
6
+ import { s as safeCall } from './overlays--4JLDr6C.js';
7
7
  import { g as getClassMap } from './theme-DiVJyqlX.js';
8
8
  import './index-ZjP4CjeZ.js';
9
9
  import './helpers-HEqiOzXb.js';
@@ -6,7 +6,7 @@ import { c as createNotchController } from './notch-controller-DKDjU_O7.js';
6
6
  import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-sObYyvOy.js';
7
7
  import { c as checkInvalidState } from './validity-DJztqcrH.js';
8
8
  import { b as inheritAttributes, a as renderHiddenInput, n as focusVisibleElement } from './helpers-HEqiOzXb.js';
9
- import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-TbiM4mdr.js';
9
+ import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays--4JLDr6C.js';
10
10
  import { i as isRTL } from './dir-C53feagD.js';
11
11
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
12
12
  import { w as watchForOptions } from './watch-options-Dtdm8lKC.js';
@@ -5,7 +5,7 @@ import { f as printIonWarning, r as registerInstance, c as createEvent, e as con
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-DQCONYYp.js';
6
6
  import { g as getElementRoot, r as raf } from './helpers-HEqiOzXb.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.js';
8
- 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-TbiM4mdr.js';
8
+ 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--4JLDr6C.js';
9
9
  import { c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
11
11
  import { c as createAnimation } from './animation-DLJpuoEz.js';
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { d as doc } from './index-ZjP4CjeZ.js';
5
- import { n as focusVisibleElement, c as componentOnReady, f as addEventListener, m as removeEventListener, g as getElementRoot } from './helpers-HEqiOzXb.js';
5
+ import { n as focusVisibleElement, c as componentOnReady, g as getElementRoot, f as addEventListener, m as removeEventListener } from './helpers-HEqiOzXb.js';
6
6
  import { OVERLAY_BACK_BUTTON_PRIORITY, shouldUseCloseWatcher } from './hardware-back-button-B93Gru0Y.js';
7
7
  import { e as config, j as printIonError, f as printIonWarning } from './index-tcQvqkiX.js';
8
8
  import { b as getIonMode } from './ionic-global-Cp_eT4sZ.js';
@@ -576,7 +576,32 @@ const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts)
576
576
  * to the overlay container.
577
577
  */
578
578
  if (overlay.keyboardClose && (document.activeElement === null || !overlay.el.contains(document.activeElement))) {
579
- overlay.el.focus();
579
+ /**
580
+ * Some overlays (modal, alert) declare `role="dialog"`/`alertdialog`,
581
+ * `aria-modal`, and the accessible label on the `.ion-overlay-wrapper`
582
+ * element inside the overlay rather than on the host itself. Focusing
583
+ * `overlay.el` (the host) in that case hands assistive technologies a
584
+ * focus target with no accessible role or name -- screen readers that
585
+ * rely on the focus/accessibility-focus event to know a dialog opened
586
+ * (e.g. Android TalkBack, which does not treat `aria-modal` alone as a
587
+ * navigation boundary) get no usable landing point, so their linear
588
+ * navigation cursor never actually enters the overlay's content.
589
+ *
590
+ * Other overlays (action-sheet, loading, popover) keep those
591
+ * attributes on the host and leave `.ion-overlay-wrapper` without a
592
+ * `tabindex`, in which case it is not focusable and the host remains
593
+ * the correct target. Only redirect to the wrapper when it actually
594
+ * declares a `tabindex` (i.e. the component authored it to be
595
+ * focusable) so overlays that already focus the host correctly are
596
+ * left untouched.
597
+ *
598
+ * `preventScroll` keeps this purely an accessibility-focus move: we
599
+ * do not want focusing the wrapper to scroll it into view, since the
600
+ * host was already the scroll-neutral, full-viewport container.
601
+ */
602
+ const overlayWrapper = getElementRoot(overlay.el).querySelector('.ion-overlay-wrapper');
603
+ const focusTarget = (overlayWrapper === null || overlayWrapper === void 0 ? void 0 : overlayWrapper.hasAttribute('tabindex')) ? overlayWrapper : overlay.el;
604
+ focusTarget.focus({ preventScroll: true });
580
605
  }
581
606
  /**
582
607
  * If this overlay was previously dismissed without being
@@ -1,4 +1,4 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- export{c as createAnimation}from"./p-mjKAFv89.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"./p-VAemlbDS.js";export{iosTransitionAnimation}from"./p-BGqMS-oh.js";export{mdTransitionAnimation}from"./p-Cx3IXROA.js";export{g as getTimeGivenProgression}from"./p-hHmYLOfE.js";export{createGesture}from"./p-Cl0B-RWe.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./p-Nqf6uvGh.js";export{c as componentOnReady}from"./p-DIuEbVLu.js";export{L as LogLevel}from"./p-tcQvqkiX.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./p-DzWaWHGc.js";export{o as openURL}from"./p-DiVJyqlX.js";export{m as menuController}from"./p-KjNvRoEp.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./p-xOfi7-Zn.js";import"./p-ZjP4CjeZ.js";import"./p-BTEOs1at.js";import"./p-BUFIpxKM.js";import"./p-CFlfIb2g.js";const e=e=>{const{swiper:o,extendParams:t}=e,s={effect:void 0,direction:"horizontal",initialSlide:0,loop:!1,parallax:!1,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,zoom:{maxRatio:3,minRatio:1,toggle:!1},touchRatio:1,touchAngle:45,simulateTouch:!0,touchStartPreventDefault:!1,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loopAdditionalSlides:0,noSwiping:!0,runCallbacksOnInit:!0,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flipEffect:{slideShadows:!0,limitRotation:!0},cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:!1},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};o.pagination&&(s.pagination={type:"bullets",clickable:!1,hideOnClick:!1}),o.scrollbar&&(s.scrollbar={hide:!0}),t(s)};export{e as IonicSlides}
4
+ export{c as createAnimation}from"./p-mjKAFv89.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"./p-VAemlbDS.js";export{iosTransitionAnimation}from"./p-BGqMS-oh.js";export{mdTransitionAnimation}from"./p-Cx3IXROA.js";export{g as getTimeGivenProgression}from"./p-hHmYLOfE.js";export{createGesture}from"./p-Cl0B-RWe.js";export{g as getPlatforms,i as initialize,a as isPlatform}from"./p-Nqf6uvGh.js";export{c as componentOnReady}from"./p-DIuEbVLu.js";export{L as LogLevel}from"./p-tcQvqkiX.js";export{I as IonicSafeString,g as getMode,s as setupConfig}from"./p-DzWaWHGc.js";export{o as openURL}from"./p-DiVJyqlX.js";export{m as menuController}from"./p-KjNvRoEp.js";export{b as actionSheetController,a as alertController,l as loadingController,m as modalController,p as pickerController,c as popoverController,t as toastController}from"./p-Dzyqeklk.js";import"./p-ZjP4CjeZ.js";import"./p-BTEOs1at.js";import"./p-BUFIpxKM.js";import"./p-CFlfIb2g.js";const e=e=>{const{swiper:o,extendParams:t}=e,s={effect:void 0,direction:"horizontal",initialSlide:0,loop:!1,parallax:!1,slidesPerView:1,spaceBetween:0,speed:300,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,touchEventsTarget:"container",freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,zoom:{maxRatio:3,minRatio:1,toggle:!1},touchRatio:1,touchAngle:45,simulateTouch:!0,touchStartPreventDefault:!1,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,loopAdditionalSlides:0,noSwiping:!0,runCallbacksOnInit:!0,coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flipEffect:{slideShadows:!0,limitRotation:!0},cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fadeEffect:{crossFade:!1},a11y:{prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide"}};o.pagination&&(s.pagination={type:"bullets",clickable:!1,hideOnClick:!1}),o.scrollbar&&(s.scrollbar={hide:!0}),t(s)};export{e as IonicSlides}