@ionic/core 8.6.3-dev.11751378808.12cc4a5c → 8.6.3-nightly.20250619
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/action-sheet.js +9 -8
- package/components/alert.js +8 -7
- package/components/ion-app.js +1 -3
- package/components/ion-datetime.js +2 -8
- package/components/ion-loading.js +8 -7
- package/components/ion-menu.js +5 -27
- package/components/ion-reorder-group.js +2 -1
- package/components/ion-router.js +0 -1
- package/components/ion-searchbar.js +6 -4
- package/components/ion-toast.js +7 -6
- package/components/modal.js +14 -242
- package/components/popover.js +7 -8
- package/dist/cjs/ion-action-sheet.cjs.entry.js +9 -8
- package/dist/cjs/ion-alert.cjs.entry.js +8 -7
- package/dist/cjs/ion-app_8.cjs.entry.js +1 -3
- package/dist/cjs/ion-datetime_3.cjs.entry.js +2 -8
- package/dist/cjs/ion-loading.cjs.entry.js +8 -7
- package/dist/cjs/ion-menu_3.cjs.entry.js +5 -27
- package/dist/cjs/ion-modal.cjs.entry.js +14 -242
- package/dist/cjs/ion-popover.cjs.entry.js +7 -8
- package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -1
- package/dist/cjs/ion-route_4.cjs.entry.js +0 -1
- package/dist/cjs/ion-searchbar.cjs.entry.js +6 -4
- package/dist/cjs/ion-toast.cjs.entry.js +7 -6
- package/dist/collection/components/action-sheet/action-sheet.js +12 -11
- package/dist/collection/components/alert/alert.js +11 -10
- package/dist/collection/components/app/app.js +3 -8
- package/dist/collection/components/datetime/datetime.js +8 -23
- package/dist/collection/components/loading/loading.js +11 -10
- package/dist/collection/components/menu/menu.js +19 -62
- package/dist/collection/components/modal/animations/ios.enter.js +2 -2
- package/dist/collection/components/modal/animations/ios.leave.js +2 -2
- package/dist/collection/components/modal/modal.js +16 -118
- package/dist/collection/components/popover/popover.js +14 -18
- package/dist/collection/components/reorder-group/reorder-group.js +3 -2
- package/dist/collection/components/router/router.js +1 -5
- package/dist/collection/components/searchbar/searchbar.js +7 -5
- package/dist/collection/components/toast/toast.js +10 -9
- package/dist/docs.json +72 -138
- package/dist/esm/ion-action-sheet.entry.js +9 -8
- package/dist/esm/ion-alert.entry.js +8 -7
- package/dist/esm/ion-app_8.entry.js +1 -3
- package/dist/esm/ion-datetime_3.entry.js +2 -8
- package/dist/esm/ion-loading.entry.js +8 -7
- package/dist/esm/ion-menu_3.entry.js +5 -27
- package/dist/esm/ion-modal.entry.js +14 -242
- package/dist/esm/ion-popover.entry.js +7 -8
- package/dist/esm/ion-reorder_2.entry.js +2 -1
- package/dist/esm/ion-route_4.entry.js +0 -1
- package/dist/esm/ion-searchbar.entry.js +6 -4
- package/dist/esm/ion-toast.entry.js +7 -6
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-b758a177.entry.js → p-2020aa51.entry.js} +1 -1
- package/dist/ionic/p-29759454.entry.js +4 -0
- package/dist/ionic/{p-e37d6c67.entry.js → p-3a4feac2.entry.js} +1 -1
- package/dist/ionic/{p-2d0eccfb.entry.js → p-6b666996.entry.js} +1 -1
- package/dist/ionic/p-7149db7e.entry.js +4 -0
- package/dist/ionic/{p-01123ecf.entry.js → p-96389029.entry.js} +1 -1
- package/dist/ionic/{p-0d131a02.entry.js → p-9e699d4a.entry.js} +1 -1
- package/dist/ionic/p-bec79123.entry.js +4 -0
- package/dist/ionic/{p-03d21728.entry.js → p-cb787a4b.entry.js} +1 -1
- package/dist/ionic/{p-d8429eb4.entry.js → p-cd12ed1c.entry.js} +1 -1
- package/dist/ionic/{p-5f671887.entry.js → p-ead42a37.entry.js} +1 -1
- package/dist/types/components/action-sheet/action-sheet.d.ts +6 -5
- package/dist/types/components/alert/alert.d.ts +6 -5
- package/dist/types/components/app/app.d.ts +0 -2
- package/dist/types/components/datetime/datetime.d.ts +0 -6
- package/dist/types/components/loading/loading.d.ts +6 -5
- package/dist/types/components/menu/menu.d.ts +3 -25
- package/dist/types/components/modal/modal.d.ts +6 -20
- package/dist/types/components/popover/popover.d.ts +5 -6
- package/dist/types/components/reorder-group/reorder-group.d.ts +1 -0
- package/dist/types/components/router/router.d.ts +0 -1
- package/dist/types/components/searchbar/searchbar.d.ts +2 -0
- package/dist/types/components/toast/toast.d.ts +5 -4
- package/dist/types/components.d.ts +18 -32
- package/hydrate/index.js +69 -322
- package/hydrate/index.mjs +69 -322
- package/package.json +3 -3
- package/dist/collection/components/modal/animations/ios.transition.js +0 -143
- package/dist/ionic/p-69f91268.entry.js +0 -4
- package/dist/ionic/p-6f74a187.entry.js +0 -4
- package/dist/ionic/p-b9ba04ca.entry.js +0 -4
- package/dist/types/components/modal/animations/ios.transition.d.ts +0 -14
|
@@ -187,15 +187,16 @@ const ActionSheet = class {
|
|
|
187
187
|
}
|
|
188
188
|
/**
|
|
189
189
|
* Dismiss the action sheet overlay after it has been presented.
|
|
190
|
-
* This is a no-op if the overlay has not been presented yet. If you want
|
|
191
|
-
* to remove an overlay from the DOM that was never presented, use the
|
|
192
|
-
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
193
190
|
*
|
|
194
191
|
* @param data Any data to emit in the dismiss events.
|
|
195
192
|
* @param role The role of the element that is dismissing the action sheet.
|
|
196
193
|
* This can be useful in a button handler for determining which button was
|
|
197
|
-
* clicked to dismiss the action sheet.
|
|
198
|
-
*
|
|
194
|
+
* clicked to dismiss the action sheet.
|
|
195
|
+
* Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
|
|
196
|
+
*
|
|
197
|
+
* This is a no-op if the overlay has not been presented yet. If you want
|
|
198
|
+
* to remove an overlay from the DOM that was never presented, use the
|
|
199
|
+
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
199
200
|
*/
|
|
200
201
|
async dismiss(data, role) {
|
|
201
202
|
const unlock = await this.lockController.lock();
|
|
@@ -307,12 +308,12 @@ const ActionSheet = class {
|
|
|
307
308
|
const cancelButton = allButtons.find((b) => b.role === 'cancel');
|
|
308
309
|
const buttons = allButtons.filter((b) => b.role !== 'cancel');
|
|
309
310
|
const headerID = `action-sheet-${overlayIndex}-header`;
|
|
310
|
-
return (h(Host, Object.assign({ key: '
|
|
311
|
+
return (h(Host, Object.assign({ key: '7bbd202ca9e19727e7514abbe073687d982f80c3', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
|
|
311
312
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
312
|
-
}, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '
|
|
313
|
+
}, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '23344a9221a2e6720d7b9de5249dc37256cafa7b', tappable: this.backdropDismiss }), h("div", { key: 'fbc2ba15549c2ab04e759e82df6e177fd80cc0a6', tabindex: "0", "aria-hidden": "true" }), h("div", { key: '748ee5235d0b4cb26d6f1b7589f77af2e37ad28a', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '7ce5fa236cf75e9b1e49c4725c9a811078706554', class: "action-sheet-container" }, h("div", { key: 'dc2251f3bcee4a93e3449f09621cbd2b65d329e9', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (h("div", { key: '48d325c8a852f56ed57a9ada1a6709d05ba32ee2', id: headerID, class: {
|
|
313
314
|
'action-sheet-title': true,
|
|
314
315
|
'action-sheet-has-sub-title': this.subHeader !== undefined,
|
|
315
|
-
} }, header, this.subHeader && h("div", { key: '
|
|
316
|
+
} }, header, this.subHeader && h("div", { key: '66093728052eb67f37a35f3232761ce4a08896f3', class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null))))), cancelButton && (h("div", { key: 'f4eb8e3e2885b85af5080df18d0de0bdd1d719de', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: '169f4eb09255aba85062baad49ceb151239fbfb7' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: '25fb8a466dd67ea94c79cfb4f9965527e1ce6d42', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: 'eb5b071e120a2c86afdf967af6a763a43044d1ca', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: '452ad7e1052b2c681e2d98de8193949755ad4d54' })))))), h("div", { key: 'e1cecf280c987c050d9445e2c458b903f153089b', tabindex: "0", "aria-hidden": "true" })));
|
|
316
317
|
}
|
|
317
318
|
get el() { return getElement(this); }
|
|
318
319
|
static get watchers() { return {
|
|
@@ -357,15 +357,16 @@ const Alert = class {
|
|
|
357
357
|
}
|
|
358
358
|
/**
|
|
359
359
|
* Dismiss the alert overlay after it has been presented.
|
|
360
|
-
* This is a no-op if the overlay has not been presented yet. If you want
|
|
361
|
-
* to remove an overlay from the DOM that was never presented, use the
|
|
362
|
-
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
363
360
|
*
|
|
364
361
|
* @param data Any data to emit in the dismiss events.
|
|
365
362
|
* @param role The role of the element that is dismissing the alert.
|
|
366
363
|
* This can be useful in a button handler for determining which button was
|
|
367
|
-
* clicked to dismiss the alert.
|
|
368
|
-
*
|
|
364
|
+
* clicked to dismiss the alert.
|
|
365
|
+
* Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
|
|
366
|
+
*
|
|
367
|
+
* This is a no-op if the overlay has not been presented yet. If you want
|
|
368
|
+
* to remove an overlay from the DOM that was never presented, use the
|
|
369
|
+
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
369
370
|
*/
|
|
370
371
|
async dismiss(data, role) {
|
|
371
372
|
const unlock = await this.lockController.lock();
|
|
@@ -535,9 +536,9 @@ const Alert = class {
|
|
|
535
536
|
* If neither are defined, do not set aria-labelledby.
|
|
536
537
|
*/
|
|
537
538
|
const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
|
|
538
|
-
return (h(Host, { key: '
|
|
539
|
+
return (h(Host, { key: 'f8ee04fe6a97a2585b302c8e1a9eea3b122e3479', tabindex: "-1", style: {
|
|
539
540
|
zIndex: `${20000 + overlayIndex}`,
|
|
540
|
-
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: '
|
|
541
|
+
}, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, h("ion-backdrop", { key: 'e9592e879f51c27ef20016beec12c986be632cf3', tappable: this.backdropDismiss }), h("div", { key: '5e9425c3c8acdea6f8006389689c73220e2ce423', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '615465703e357619681fc36ed7276591a6fe3787', class: "alert-wrapper ion-overlay-wrapper", role: role, "aria-modal": "true", "aria-labelledby": ariaLabelledBy, "aria-describedby": message !== undefined ? msgId : null, tabindex: "0", ref: (el) => (this.wrapperEl = el) }, htmlAttributes), h("div", { key: '934eba3759456cd4660e10f274edc7859f908461', class: "alert-head" }, header && (h("h2", { key: '7d5d98d71f81f59a2cba227121b6fa01e6cc53b6', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: 'e5f5d35748c58a98ee933eb15cb1dcaf8113e9a7', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: 'a5cb89ca02bfa9c4828e694cb0835493a9088b05', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'cacffc31c911882df73e6845d15c8bb2d4acab56', tabindex: "0", "aria-hidden": "true" })));
|
|
541
542
|
}
|
|
542
543
|
get el() { return getElement(this); }
|
|
543
544
|
static get watchers() { return {
|
|
@@ -70,8 +70,6 @@ const App = class {
|
|
|
70
70
|
* a result of another user action. (Ex: We focus the first element
|
|
71
71
|
* inside of a popover when the user presents it, but the popover is not always
|
|
72
72
|
* presented as a result of keyboard action.)
|
|
73
|
-
*
|
|
74
|
-
* @param elements An array of HTML elements to set focus on.
|
|
75
73
|
*/
|
|
76
74
|
async setFocus(elements) {
|
|
77
75
|
if (this.focusVisible) {
|
|
@@ -80,7 +78,7 @@ const App = class {
|
|
|
80
78
|
}
|
|
81
79
|
render() {
|
|
82
80
|
const mode = getIonMode(this);
|
|
83
|
-
return (h(Host, { key: '
|
|
81
|
+
return (h(Host, { key: '03aa892f986330078d112b1e8b010df98fa7e39e', class: {
|
|
84
82
|
[mode]: true,
|
|
85
83
|
'ion-page': true,
|
|
86
84
|
'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
|
|
@@ -992,8 +992,6 @@ const Datetime = class {
|
|
|
992
992
|
* Confirms the selected datetime value, updates the
|
|
993
993
|
* `value` property, and optionally closes the popover
|
|
994
994
|
* or modal that the datetime was presented in.
|
|
995
|
-
*
|
|
996
|
-
* @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
|
|
997
995
|
*/
|
|
998
996
|
async confirm(closeOverlay = false) {
|
|
999
997
|
const { isCalendarPicker, activeParts, preferWheel, workingParts } = this;
|
|
@@ -1027,8 +1025,6 @@ const Datetime = class {
|
|
|
1027
1025
|
* Resets the internal state of the datetime but does not update the value.
|
|
1028
1026
|
* Passing a valid ISO-8601 string will reset the state of the component to the provided date.
|
|
1029
1027
|
* If no value is provided, the internal state will be reset to the clamped value of the min, max and today.
|
|
1030
|
-
*
|
|
1031
|
-
* @param startDate A valid [ISO-8601 string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format) to reset the datetime state to.
|
|
1032
1028
|
*/
|
|
1033
1029
|
async reset(startDate) {
|
|
1034
1030
|
this.processValue(startDate);
|
|
@@ -1038,8 +1034,6 @@ const Datetime = class {
|
|
|
1038
1034
|
* optionally closes the popover
|
|
1039
1035
|
* or modal that the datetime was
|
|
1040
1036
|
* presented in.
|
|
1041
|
-
*
|
|
1042
|
-
* @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
|
|
1043
1037
|
*/
|
|
1044
1038
|
async cancel(closeOverlay = false) {
|
|
1045
1039
|
this.ionCancel.emit();
|
|
@@ -1853,7 +1847,7 @@ const Datetime = class {
|
|
|
1853
1847
|
const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
|
|
1854
1848
|
const hasWheelVariant = hasDatePresentation && preferWheel;
|
|
1855
1849
|
renderHiddenInput(true, el, name, formatValue(value), disabled);
|
|
1856
|
-
return (h(Host, { key: '
|
|
1850
|
+
return (h(Host, { key: '7ea46c27aa5fb01b748dd4d6eb2340ad13f65175', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
|
|
1857
1851
|
[mode]: true,
|
|
1858
1852
|
['datetime-readonly']: readonly,
|
|
1859
1853
|
['datetime-disabled']: disabled,
|
|
@@ -1863,7 +1857,7 @@ const Datetime = class {
|
|
|
1863
1857
|
[`datetime-size-${size}`]: true,
|
|
1864
1858
|
[`datetime-prefer-wheel`]: hasWheelVariant,
|
|
1865
1859
|
[`datetime-grid`]: isGridStyle,
|
|
1866
|
-
})) }, h("div", { key: '
|
|
1860
|
+
})) }, h("div", { key: '6964378424c58b053e23279d08eaedf28dfcc315', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
|
|
1867
1861
|
}
|
|
1868
1862
|
get el() { return getElement(this); }
|
|
1869
1863
|
static get watchers() { return {
|
|
@@ -225,15 +225,16 @@ const Loading = class {
|
|
|
225
225
|
}
|
|
226
226
|
/**
|
|
227
227
|
* Dismiss the loading overlay after it has been presented.
|
|
228
|
-
* This is a no-op if the overlay has not been presented yet. If you want
|
|
229
|
-
* to remove an overlay from the DOM that was never presented, use the
|
|
230
|
-
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
231
228
|
*
|
|
232
229
|
* @param data Any data to emit in the dismiss events.
|
|
233
230
|
* @param role The role of the element that is dismissing the loading.
|
|
234
231
|
* This can be useful in a button handler for determining which button was
|
|
235
|
-
* clicked to dismiss the loading.
|
|
236
|
-
*
|
|
232
|
+
* clicked to dismiss the loading.
|
|
233
|
+
* Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
|
|
234
|
+
*
|
|
235
|
+
* This is a no-op if the overlay has not been presented yet. If you want
|
|
236
|
+
* to remove an overlay from the DOM that was never presented, use the
|
|
237
|
+
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
237
238
|
*/
|
|
238
239
|
async dismiss(data, role) {
|
|
239
240
|
const unlock = await this.lockController.lock();
|
|
@@ -275,9 +276,9 @@ const Loading = class {
|
|
|
275
276
|
* Otherwise, don't set aria-labelledby.
|
|
276
277
|
*/
|
|
277
278
|
const ariaLabelledBy = message !== undefined ? msgId : null;
|
|
278
|
-
return (h(Host, Object.assign({ key: '
|
|
279
|
+
return (h(Host, Object.assign({ key: '6369ed244c06c39aa338141bffacf7a861d7da1a', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
|
|
279
280
|
zIndex: `${40000 + this.overlayIndex}`,
|
|
280
|
-
}, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '
|
|
281
|
+
}, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), h("ion-backdrop", { key: '1fd5fd8581d59eec321e534f9116f3ec0501010a', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'b4028045b0c8fbb9946136d85d939d55120b867c', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'b045fb0e61cc28e8163d45be18b431918dc27c80', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: '2cf9df796f987d1251b3599d10a48ed87a1d0eb9', class: "loading-spinner" }, h("ion-spinner", { key: '371cd41655402326adcb1e2fe1481009a83243b2', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '2a5e5e66d22ee4c1cef0c93815ef023d47e7a8eb', tabindex: "0", "aria-hidden": "true" })));
|
|
281
282
|
}
|
|
282
283
|
get el() { return getElement(this); }
|
|
283
284
|
static get watchers() { return {
|
|
@@ -240,7 +240,7 @@ const Menu = class {
|
|
|
240
240
|
return Promise.resolve(this._isOpen);
|
|
241
241
|
}
|
|
242
242
|
/**
|
|
243
|
-
* Returns `true`
|
|
243
|
+
* Returns `true` is the menu is active.
|
|
244
244
|
*
|
|
245
245
|
* A menu is active when it can be opened or closed, meaning it's enabled
|
|
246
246
|
* and it's not part of a `ion-split-pane`.
|
|
@@ -251,10 +251,6 @@ const Menu = class {
|
|
|
251
251
|
/**
|
|
252
252
|
* Opens the menu. If the menu is already open or it can't be opened,
|
|
253
253
|
* it returns `false`.
|
|
254
|
-
*
|
|
255
|
-
* @param animated If `true`, the menu will animate when opening.
|
|
256
|
-
* If `false`, the menu will open instantly without animation.
|
|
257
|
-
* Defaults to `true`.
|
|
258
254
|
*/
|
|
259
255
|
open(animated = true) {
|
|
260
256
|
return this.setOpen(true, animated);
|
|
@@ -262,38 +258,20 @@ const Menu = class {
|
|
|
262
258
|
/**
|
|
263
259
|
* Closes the menu. If the menu is already closed or it can't be closed,
|
|
264
260
|
* it returns `false`.
|
|
265
|
-
*
|
|
266
|
-
* @param animated If `true`, the menu will animate when closing. If `false`,
|
|
267
|
-
* the menu will close instantly without animation. Defaults to `true`.
|
|
268
|
-
* @param role The role of the element that is closing the menu.
|
|
269
|
-
* This can be useful in a button handler for determining which button was
|
|
270
|
-
* clicked to close the menu. Some examples include:
|
|
271
|
-
* `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
|
|
272
261
|
*/
|
|
273
262
|
close(animated = true, role) {
|
|
274
263
|
return this.setOpen(false, animated, role);
|
|
275
264
|
}
|
|
276
265
|
/**
|
|
277
|
-
* Toggles the menu. If the menu is already open, it will try to close,
|
|
278
|
-
* otherwise it will try to open it.
|
|
266
|
+
* Toggles the menu. If the menu is already open, it will try to close, otherwise it will try to open it.
|
|
279
267
|
* If the operation can't be completed successfully, it returns `false`.
|
|
280
|
-
*
|
|
281
|
-
* @param animated If `true`, the menu will animate when opening/closing.
|
|
282
|
-
* If `false`, the menu will open/close instantly without animation.
|
|
283
|
-
* Defaults to `true`.
|
|
284
268
|
*/
|
|
285
269
|
toggle(animated = true) {
|
|
286
270
|
return this.setOpen(!this._isOpen, animated);
|
|
287
271
|
}
|
|
288
272
|
/**
|
|
289
|
-
* Opens or closes the
|
|
273
|
+
* Opens or closes the button.
|
|
290
274
|
* If the operation can't be completed successfully, it returns `false`.
|
|
291
|
-
*
|
|
292
|
-
* @param shouldOpen If `true`, the menu will open. If `false`, the menu
|
|
293
|
-
* will close.
|
|
294
|
-
* @param animated If `true`, the menu will animate when opening/closing.
|
|
295
|
-
* If `false`, the menu will open/close instantly without animation.
|
|
296
|
-
* @param role The role of the element that is closing the menu.
|
|
297
275
|
*/
|
|
298
276
|
setOpen(shouldOpen, animated = true, role) {
|
|
299
277
|
return menuController._setOpen(this, shouldOpen, animated, role);
|
|
@@ -658,14 +636,14 @@ const Menu = class {
|
|
|
658
636
|
* the ionBackButton listener in the menu controller
|
|
659
637
|
* will handle closing the menu when Escape is pressed.
|
|
660
638
|
*/
|
|
661
|
-
return (h(Host, { key: '
|
|
639
|
+
return (h(Host, { key: '9e4ae9476a76781f1d228395c9af9e1c39ec82bb', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
|
|
662
640
|
[mode]: true,
|
|
663
641
|
[`menu-type-${type}`]: true,
|
|
664
642
|
'menu-enabled': !disabled,
|
|
665
643
|
[`menu-side-${side}`]: true,
|
|
666
644
|
'menu-pane-visible': isPaneVisible,
|
|
667
645
|
'split-pane-side': hostContext('ion-split-pane', el),
|
|
668
|
-
} }, h("div", { key: '
|
|
646
|
+
} }, h("div", { key: 'c6153589d872ac7e3fdf5eedfdb858eb64ccd713', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '9994aac4b22f17db34c9b8b2aa56b8710b9df645' })), h("ion-backdrop", { key: 'f09ac30cc4dd2dcb10628965e659dae5a23baf98', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
|
|
669
647
|
}
|
|
670
648
|
get el() { return getElement(this); }
|
|
671
649
|
static get watchers() { return {
|
|
@@ -587,7 +587,7 @@ const iosEnterAnimation = (baseEl, opts) => {
|
|
|
587
587
|
baseAnimation.addAnimation(contentAnimation);
|
|
588
588
|
}
|
|
589
589
|
if (presentingEl) {
|
|
590
|
-
const
|
|
590
|
+
const isMobile = window.innerWidth < 768;
|
|
591
591
|
const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
|
|
592
592
|
const presentingElRoot = getElementRoot(presentingEl);
|
|
593
593
|
const presentingAnimation = createAnimation().beforeStyles({
|
|
@@ -596,7 +596,7 @@ const iosEnterAnimation = (baseEl, opts) => {
|
|
|
596
596
|
overflow: 'hidden',
|
|
597
597
|
});
|
|
598
598
|
const bodyEl = document.body;
|
|
599
|
-
if (
|
|
599
|
+
if (isMobile) {
|
|
600
600
|
/**
|
|
601
601
|
* Fallback for browsers that does not support `max()` (ex: Firefox)
|
|
602
602
|
* No need to worry about statusbar padding since engines like Gecko
|
|
@@ -674,7 +674,7 @@ const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
|
|
|
674
674
|
.duration(duration)
|
|
675
675
|
.addAnimation(wrapperAnimation);
|
|
676
676
|
if (presentingEl) {
|
|
677
|
-
const
|
|
677
|
+
const isMobile = window.innerWidth < 768;
|
|
678
678
|
const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
|
|
679
679
|
const presentingElRoot = getElementRoot(presentingEl);
|
|
680
680
|
const presentingAnimation = createAnimation()
|
|
@@ -692,7 +692,7 @@ const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
|
|
|
692
692
|
}
|
|
693
693
|
});
|
|
694
694
|
const bodyEl = document.body;
|
|
695
|
-
if (
|
|
695
|
+
if (isMobile) {
|
|
696
696
|
const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
|
|
697
697
|
const modalTransform = hasCardModal ? '-10px' : transformOffset;
|
|
698
698
|
const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
|
|
@@ -739,144 +739,6 @@ const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
|
|
|
739
739
|
return baseAnimation;
|
|
740
740
|
};
|
|
741
741
|
|
|
742
|
-
/**
|
|
743
|
-
* Transition animation from portrait view to landscape view
|
|
744
|
-
* This handles the case where a card modal is open in portrait view
|
|
745
|
-
* and the user switches to landscape view
|
|
746
|
-
*/
|
|
747
|
-
const portraitToLandscapeTransition = (baseEl, opts, duration = 300) => {
|
|
748
|
-
const { presentingEl } = opts;
|
|
749
|
-
if (!presentingEl) {
|
|
750
|
-
// No transition needed for non-card modals
|
|
751
|
-
return createAnimation('portrait-to-landscape-transition');
|
|
752
|
-
}
|
|
753
|
-
const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
|
|
754
|
-
const presentingElRoot = getElementRoot(presentingEl);
|
|
755
|
-
const bodyEl = document.body;
|
|
756
|
-
const baseAnimation = createAnimation('portrait-to-landscape-transition')
|
|
757
|
-
.addElement(baseEl)
|
|
758
|
-
.easing('cubic-bezier(0.32,0.72,0,1)')
|
|
759
|
-
.duration(duration);
|
|
760
|
-
const presentingAnimation = createAnimation().beforeStyles({
|
|
761
|
-
transform: 'translateY(0)',
|
|
762
|
-
'transform-origin': 'top center',
|
|
763
|
-
overflow: 'hidden',
|
|
764
|
-
});
|
|
765
|
-
if (!hasCardModal) {
|
|
766
|
-
// Non-card modal: transition from portrait state to landscape state
|
|
767
|
-
// Portrait: presentingEl has transform and body has black background
|
|
768
|
-
// Landscape: no transform, no body background, modal wrapper opacity changes
|
|
769
|
-
const root = getElementRoot(baseEl);
|
|
770
|
-
const wrapperAnimation = createAnimation()
|
|
771
|
-
.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
|
|
772
|
-
.fromTo('opacity', '1', '1'); // Keep wrapper visible in landscape
|
|
773
|
-
const backdropAnimation = createAnimation()
|
|
774
|
-
.addElement(root.querySelector('ion-backdrop'))
|
|
775
|
-
.fromTo('opacity', 'var(--backdrop-opacity)', 'var(--backdrop-opacity)'); // Keep backdrop visible
|
|
776
|
-
// Animate presentingEl from portrait state back to normal
|
|
777
|
-
const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
|
|
778
|
-
const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
|
|
779
|
-
const fromTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
|
|
780
|
-
presentingAnimation
|
|
781
|
-
.addElement(presentingEl)
|
|
782
|
-
.afterStyles({
|
|
783
|
-
transform: 'translateY(0px) scale(1)',
|
|
784
|
-
'border-radius': '0px',
|
|
785
|
-
})
|
|
786
|
-
.beforeAddWrite(() => bodyEl.style.setProperty('background-color', ''))
|
|
787
|
-
.fromTo('transform', fromTransform, 'translateY(0px) scale(1)')
|
|
788
|
-
.fromTo('filter', 'contrast(0.85)', 'contrast(1)')
|
|
789
|
-
.fromTo('border-radius', '10px 10px 0 0', '0px');
|
|
790
|
-
baseAnimation.addAnimation([presentingAnimation, wrapperAnimation, backdropAnimation]);
|
|
791
|
-
}
|
|
792
|
-
else {
|
|
793
|
-
// Card modal: transition from portrait card state to landscape card state
|
|
794
|
-
const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
|
|
795
|
-
const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
|
|
796
|
-
const fromTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
|
|
797
|
-
const toTransform = `translateY(-10px) scale(${toPresentingScale})`;
|
|
798
|
-
presentingAnimation
|
|
799
|
-
.addElement(presentingElRoot.querySelector('.modal-wrapper'))
|
|
800
|
-
.fromTo('transform', fromTransform, toTransform)
|
|
801
|
-
.fromTo('filter', 'contrast(0.85)', 'contrast(0.85)'); // Keep same contrast for card
|
|
802
|
-
const shadowAnimation = createAnimation()
|
|
803
|
-
.addElement(presentingElRoot.querySelector('.modal-shadow'))
|
|
804
|
-
.fromTo('opacity', '0', '0') // Shadow stays hidden in landscape for card modals
|
|
805
|
-
.fromTo('transform', fromTransform, toTransform);
|
|
806
|
-
baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
|
|
807
|
-
}
|
|
808
|
-
return baseAnimation;
|
|
809
|
-
};
|
|
810
|
-
/**
|
|
811
|
-
* Transition animation from landscape view to portrait view
|
|
812
|
-
* This handles the case where a card modal is open in landscape view
|
|
813
|
-
* and the user switches to portrait view
|
|
814
|
-
*/
|
|
815
|
-
const landscapeToPortraitTransition = (baseEl, opts, duration = 300) => {
|
|
816
|
-
const { presentingEl } = opts;
|
|
817
|
-
if (!presentingEl) {
|
|
818
|
-
// No transition needed for non-card modals
|
|
819
|
-
return createAnimation('landscape-to-portrait-transition');
|
|
820
|
-
}
|
|
821
|
-
const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
|
|
822
|
-
const presentingElRoot = getElementRoot(presentingEl);
|
|
823
|
-
const bodyEl = document.body;
|
|
824
|
-
const baseAnimation = createAnimation('landscape-to-portrait-transition')
|
|
825
|
-
.addElement(baseEl)
|
|
826
|
-
.easing('cubic-bezier(0.32,0.72,0,1)')
|
|
827
|
-
.duration(duration);
|
|
828
|
-
const presentingAnimation = createAnimation().beforeStyles({
|
|
829
|
-
transform: 'translateY(0)',
|
|
830
|
-
'transform-origin': 'top center',
|
|
831
|
-
overflow: 'hidden',
|
|
832
|
-
});
|
|
833
|
-
if (!hasCardModal) {
|
|
834
|
-
// Non-card modal: transition from landscape state to portrait state
|
|
835
|
-
const root = getElementRoot(baseEl);
|
|
836
|
-
const wrapperAnimation = createAnimation()
|
|
837
|
-
.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
|
|
838
|
-
.fromTo('opacity', '1', '1'); // Keep wrapper visible
|
|
839
|
-
const backdropAnimation = createAnimation()
|
|
840
|
-
.addElement(root.querySelector('ion-backdrop'))
|
|
841
|
-
.fromTo('opacity', 'var(--backdrop-opacity)', 'var(--backdrop-opacity)'); // Keep backdrop visible
|
|
842
|
-
// Animate presentingEl from normal state to portrait state
|
|
843
|
-
const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
|
|
844
|
-
const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
|
|
845
|
-
const toTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
|
|
846
|
-
presentingAnimation
|
|
847
|
-
.addElement(presentingEl)
|
|
848
|
-
.afterStyles({
|
|
849
|
-
transform: toTransform,
|
|
850
|
-
'border-radius': '10px 10px 0 0',
|
|
851
|
-
filter: 'contrast(0.85)',
|
|
852
|
-
overflow: 'hidden',
|
|
853
|
-
'transform-origin': 'top center',
|
|
854
|
-
})
|
|
855
|
-
.beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
|
|
856
|
-
.fromTo('transform', 'translateY(0px) scale(1)', toTransform)
|
|
857
|
-
.fromTo('filter', 'contrast(1)', 'contrast(0.85)')
|
|
858
|
-
.fromTo('border-radius', '0px', '10px 10px 0 0');
|
|
859
|
-
baseAnimation.addAnimation([presentingAnimation, wrapperAnimation, backdropAnimation]);
|
|
860
|
-
}
|
|
861
|
-
else {
|
|
862
|
-
// Card modal: transition from landscape card state to portrait card state
|
|
863
|
-
const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
|
|
864
|
-
const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
|
|
865
|
-
const fromTransform = `translateY(-10px) scale(${toPresentingScale})`;
|
|
866
|
-
const toTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
|
|
867
|
-
presentingAnimation
|
|
868
|
-
.addElement(presentingElRoot.querySelector('.modal-wrapper'))
|
|
869
|
-
.fromTo('transform', fromTransform, toTransform)
|
|
870
|
-
.fromTo('filter', 'contrast(0.85)', 'contrast(0.85)'); // Keep same contrast for card
|
|
871
|
-
const shadowAnimation = createAnimation()
|
|
872
|
-
.addElement(presentingElRoot.querySelector('.modal-shadow'))
|
|
873
|
-
.fromTo('opacity', '0', '0') // Shadow stays hidden
|
|
874
|
-
.fromTo('transform', fromTransform, toTransform);
|
|
875
|
-
baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
|
|
876
|
-
}
|
|
877
|
-
return baseAnimation;
|
|
878
|
-
};
|
|
879
|
-
|
|
880
742
|
const createEnterAnimation = () => {
|
|
881
743
|
const backdropAnimation = createAnimation()
|
|
882
744
|
.fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
|
|
@@ -1620,17 +1482,6 @@ const Modal = class {
|
|
|
1620
1482
|
el.dispatchEvent(ev);
|
|
1621
1483
|
}
|
|
1622
1484
|
};
|
|
1623
|
-
/**
|
|
1624
|
-
* When the modal receives focus directly, pass focus to the handle
|
|
1625
|
-
* if it exists and is focusable, otherwise let the focus trap handle it.
|
|
1626
|
-
*/
|
|
1627
|
-
this.onModalFocus = (ev) => {
|
|
1628
|
-
const { dragHandleEl, el } = this;
|
|
1629
|
-
// Only handle focus if the modal itself was focused (not a child element)
|
|
1630
|
-
if (ev.target === el && dragHandleEl && dragHandleEl.tabIndex !== -1) {
|
|
1631
|
-
dragHandleEl.focus();
|
|
1632
|
-
}
|
|
1633
|
-
};
|
|
1634
1485
|
}
|
|
1635
1486
|
onIsOpenChange(newValue, oldValue) {
|
|
1636
1487
|
if (newValue === true && oldValue === false) {
|
|
@@ -1658,7 +1509,6 @@ const Modal = class {
|
|
|
1658
1509
|
}
|
|
1659
1510
|
disconnectedCallback() {
|
|
1660
1511
|
this.triggerController.removeClickListener();
|
|
1661
|
-
this.cleanupViewTransitionListener();
|
|
1662
1512
|
}
|
|
1663
1513
|
componentWillLoad() {
|
|
1664
1514
|
var _a;
|
|
@@ -1869,8 +1719,6 @@ const Modal = class {
|
|
|
1869
1719
|
else if (hasCardModal) {
|
|
1870
1720
|
this.initSwipeToClose();
|
|
1871
1721
|
}
|
|
1872
|
-
// Initialize view transition listener for iOS card modals
|
|
1873
|
-
this.initViewTransitionListener();
|
|
1874
1722
|
unlock();
|
|
1875
1723
|
}
|
|
1876
1724
|
initSwipeToClose() {
|
|
@@ -1965,13 +1813,13 @@ const Modal = class {
|
|
|
1965
1813
|
}
|
|
1966
1814
|
/**
|
|
1967
1815
|
* Dismiss the modal overlay after it has been presented.
|
|
1816
|
+
*
|
|
1817
|
+
* @param data Any data to emit in the dismiss events.
|
|
1818
|
+
* @param role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.
|
|
1819
|
+
*
|
|
1968
1820
|
* This is a no-op if the overlay has not been presented yet. If you want
|
|
1969
1821
|
* to remove an overlay from the DOM that was never presented, use the
|
|
1970
1822
|
* [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
|
|
1971
|
-
*
|
|
1972
|
-
* @param data Any data to emit in the dismiss events.
|
|
1973
|
-
* @param role The role of the element that is dismissing the modal.
|
|
1974
|
-
* For example, `cancel` or `backdrop`.
|
|
1975
1823
|
*/
|
|
1976
1824
|
async dismiss(data, role) {
|
|
1977
1825
|
var _a;
|
|
@@ -2024,7 +1872,6 @@ const Modal = class {
|
|
|
2024
1872
|
if (this.gesture) {
|
|
2025
1873
|
this.gesture.destroy();
|
|
2026
1874
|
}
|
|
2027
|
-
this.cleanupViewTransitionListener();
|
|
2028
1875
|
}
|
|
2029
1876
|
this.currentBreakpoint = undefined;
|
|
2030
1877
|
this.animation = undefined;
|
|
@@ -2044,10 +1891,8 @@ const Modal = class {
|
|
|
2044
1891
|
return eventMethod(this.el, 'ionModalWillDismiss');
|
|
2045
1892
|
}
|
|
2046
1893
|
/**
|
|
2047
|
-
* Move a sheet style modal to a specific breakpoint.
|
|
2048
|
-
*
|
|
2049
|
-
* @param breakpoint The breakpoint value to move the sheet modal to.
|
|
2050
|
-
* Must be a value defined in your `breakpoints` array.
|
|
1894
|
+
* Move a sheet style modal to a specific breakpoint. The breakpoint value must
|
|
1895
|
+
* be a value defined in your `breakpoints` array.
|
|
2051
1896
|
*/
|
|
2052
1897
|
async setCurrentBreakpoint(breakpoint) {
|
|
2053
1898
|
if (!this.isSheetModal) {
|
|
@@ -2100,97 +1945,24 @@ const Modal = class {
|
|
|
2100
1945
|
await this.setCurrentBreakpoint(nextBreakpoint);
|
|
2101
1946
|
return true;
|
|
2102
1947
|
}
|
|
2103
|
-
initViewTransitionListener() {
|
|
2104
|
-
// Only enable for iOS card modals when no custom animations are provided
|
|
2105
|
-
if (getIonMode(this) !== 'ios' || !this.presentingElement || this.enterAnimation || this.leaveAnimation) {
|
|
2106
|
-
return;
|
|
2107
|
-
}
|
|
2108
|
-
// Set initial view state
|
|
2109
|
-
this.currentViewIsPortrait = window.innerWidth < 768;
|
|
2110
|
-
// Create debounced resize handler
|
|
2111
|
-
let resizeTimeout;
|
|
2112
|
-
this.resizeListener = () => {
|
|
2113
|
-
clearTimeout(resizeTimeout);
|
|
2114
|
-
resizeTimeout = setTimeout(() => {
|
|
2115
|
-
this.handleViewTransition();
|
|
2116
|
-
}, 100); // Debounce for 100ms to avoid excessive calls
|
|
2117
|
-
};
|
|
2118
|
-
window.addEventListener('resize', this.resizeListener);
|
|
2119
|
-
}
|
|
2120
|
-
handleViewTransition() {
|
|
2121
|
-
const isPortrait = window.innerWidth < 768;
|
|
2122
|
-
// Only transition if view state actually changed
|
|
2123
|
-
if (this.currentViewIsPortrait === isPortrait) {
|
|
2124
|
-
return;
|
|
2125
|
-
}
|
|
2126
|
-
// Cancel any ongoing transition animation
|
|
2127
|
-
if (this.viewTransitionAnimation) {
|
|
2128
|
-
this.viewTransitionAnimation.destroy();
|
|
2129
|
-
this.viewTransitionAnimation = undefined;
|
|
2130
|
-
}
|
|
2131
|
-
const { presentingElement } = this;
|
|
2132
|
-
if (!presentingElement) {
|
|
2133
|
-
return;
|
|
2134
|
-
}
|
|
2135
|
-
// Create transition animation
|
|
2136
|
-
let transitionAnimation;
|
|
2137
|
-
if (this.currentViewIsPortrait && !isPortrait) {
|
|
2138
|
-
// Portrait to landscape transition
|
|
2139
|
-
transitionAnimation = portraitToLandscapeTransition(this.el, {
|
|
2140
|
-
presentingEl: presentingElement});
|
|
2141
|
-
}
|
|
2142
|
-
else {
|
|
2143
|
-
// Landscape to portrait transition
|
|
2144
|
-
transitionAnimation = landscapeToPortraitTransition(this.el, {
|
|
2145
|
-
presentingEl: presentingElement});
|
|
2146
|
-
}
|
|
2147
|
-
// Update state and play animation
|
|
2148
|
-
this.currentViewIsPortrait = isPortrait;
|
|
2149
|
-
this.viewTransitionAnimation = transitionAnimation;
|
|
2150
|
-
transitionAnimation.play().then(() => {
|
|
2151
|
-
this.viewTransitionAnimation = undefined;
|
|
2152
|
-
});
|
|
2153
|
-
}
|
|
2154
|
-
cleanupViewTransitionListener() {
|
|
2155
|
-
const hasCardView = !!this.resizeListener;
|
|
2156
|
-
if (this.resizeListener) {
|
|
2157
|
-
window.removeEventListener('resize', this.resizeListener);
|
|
2158
|
-
this.resizeListener = undefined;
|
|
2159
|
-
}
|
|
2160
|
-
if (this.viewTransitionAnimation) {
|
|
2161
|
-
this.viewTransitionAnimation.destroy();
|
|
2162
|
-
this.viewTransitionAnimation = undefined;
|
|
2163
|
-
}
|
|
2164
|
-
if (hasCardView) {
|
|
2165
|
-
// If we had a card view, let's trigger the view transition
|
|
2166
|
-
// one last time to make sure we're in the right state.
|
|
2167
|
-
// This will prevent tricky things like resizing the modal causing
|
|
2168
|
-
// it to dismiss programatically too quickly and preventing the view transition
|
|
2169
|
-
// from being applied.
|
|
2170
|
-
this.handleViewTransition();
|
|
2171
|
-
}
|
|
2172
|
-
}
|
|
2173
1948
|
render() {
|
|
2174
1949
|
const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
|
|
2175
1950
|
const showHandle = handle !== false && isSheetModal;
|
|
2176
1951
|
const mode = getIonMode(this);
|
|
2177
1952
|
const isCardModal = presentingElement !== undefined && mode === 'ios';
|
|
2178
1953
|
const isHandleCycle = handleBehavior === 'cycle';
|
|
2179
|
-
|
|
2180
|
-
return (h(Host, Object.assign({ key: '857fbf50b5d0b43c1f1a335d740649cedf1d6e2b', "no-router": true,
|
|
2181
|
-
// Allow the modal to be navigable when the handle is focusable
|
|
2182
|
-
tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
|
|
1954
|
+
return (h(Host, Object.assign({ key: '0bcbdcfcd7d890eb599da3f97f21c317d34f8e0e', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
|
|
2183
1955
|
zIndex: `${20000 + this.overlayIndex}`,
|
|
2184
|
-
}, 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
|
|
1956
|
+
}, 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 }), h("ion-backdrop", { key: 'd72159e73daa5af7349aa9e8f695aa435eb43069', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'fd2d9b13676ae72473881649a397b6eacde03a03', class: "modal-shadow" }), h("div", Object.assign({ key: '908eccb1ad982dcde2dbcff0cbb18b6e60f8ba74',
|
|
2185
1957
|
/*
|
|
2186
1958
|
role and aria-modal must be used on the
|
|
2187
1959
|
same element. They must also be set inside the
|
|
2188
1960
|
shadow DOM otherwise ion-button will not be highlighted
|
|
2189
1961
|
when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
|
|
2190
1962
|
*/
|
|
2191
|
-
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '
|
|
1963
|
+
role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '332dc0b40363a77c7be62331d9f26def91c790e9', class: "modal-handle",
|
|
2192
1964
|
// Prevents the handle from receiving keyboard focus when it does not cycle
|
|
2193
|
-
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle"
|
|
1965
|
+
tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: 'c32698350193c450327e97049daf8b8d1fda0d0e' }))));
|
|
2194
1966
|
}
|
|
2195
1967
|
get el() { return getElement(this); }
|
|
2196
1968
|
static get watchers() { return {
|