@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.
- package/components/index.js +1 -1
- package/components/ion-action-sheet.js +1 -1
- package/components/ion-alert.js +1 -1
- package/components/ion-datetime.js +1 -1
- package/components/ion-loading.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +1 -1
- package/components/ion-picker-legacy.js +1 -1
- package/components/ion-popover.js +1 -1
- package/components/ion-select-modal.js +1 -1
- package/components/ion-select-popover.js +1 -1
- package/components/ion-select.js +1 -1
- package/components/ion-toast.js +1 -1
- package/components/{p-nQi4oKcG.js → p-BI99_O7M.js} +1 -1
- package/components/{p-DS4Hk6R2.js → p-BeaZQGdD.js} +1 -1
- package/components/p-BhiHTRHr.js +4 -0
- package/components/{p-Bth-EzJ0.js → p-Cg0yUncF.js} +1 -1
- package/components/{p-dhLYXa7A.js → p-CiZjmDRO.js} +1 -1
- package/components/{p-0NRupjzW.js → p-CoDFQCkp.js} +1 -1
- package/components/{p-uVRyUM3z.js → p-DfAYowgb.js} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-loading.cjs.entry.js +1 -1
- package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-modal.cjs.entry.js +16 -4
- package/dist/cjs/ion-popover.cjs.entry.js +1 -1
- package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-toast.cjs.entry.js +1 -1
- package/dist/cjs/{overlays-TbKsuC-K.js → overlays-B9WEMRRo.js} +26 -1
- package/dist/collection/components/modal/modal.js +15 -3
- package/dist/collection/utils/overlays.js +26 -1
- package/dist/docs.json +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/ion-action-sheet.entry.js +1 -1
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +1 -1
- package/dist/esm/ion-loading.entry.js +1 -1
- package/dist/esm/ion-menu_3.entry.js +1 -1
- package/dist/esm/ion-modal.entry.js +16 -4
- package/dist/esm/ion-popover.entry.js +1 -1
- package/dist/esm/ion-select-modal.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +1 -1
- package/dist/esm/ion-toast.entry.js +1 -1
- package/dist/esm/{overlays-TbiM4mdr.js → overlays--4JLDr6C.js} +27 -2
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-3a541154.entry.js → p-28df2088.entry.js} +1 -1
- package/dist/ionic/{p-b1c6fdcf.entry.js → p-57e31cc8.entry.js} +1 -1
- package/dist/ionic/{p-e847a888.entry.js → p-766bbdff.entry.js} +1 -1
- package/dist/ionic/{p-00dbb17e.entry.js → p-8b4e6e7f.entry.js} +1 -1
- package/dist/ionic/p-Dzyqeklk.js +4 -0
- package/dist/ionic/{p-94f2a736.entry.js → p-a6ad9c29.entry.js} +1 -1
- package/dist/ionic/{p-5fc7e542.entry.js → p-aa56131f.entry.js} +1 -1
- package/dist/ionic/{p-aa5d6b8f.entry.js → p-b580c366.entry.js} +1 -1
- package/dist/ionic/{p-30bf9737.entry.js → p-badb48f9.entry.js} +1 -1
- package/dist/ionic/{p-2f55dc1a.entry.js → p-c8739c33.entry.js} +1 -1
- package/dist/ionic/{p-4dc1c33c.entry.js → p-e930122a.entry.js} +1 -1
- package/hydrate/index.js +41 -4
- package/hydrate/index.mjs +41 -4
- package/package.json +1 -1
- package/components/p-W9CZ2mWX.js +0 -4
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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
|
-
|
|
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
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
package/dist/ionic/index.esm.js
CHANGED
|
@@ -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-
|
|
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}
|