@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.
Files changed (84) hide show
  1. package/components/action-sheet.js +9 -8
  2. package/components/alert.js +8 -7
  3. package/components/ion-app.js +1 -3
  4. package/components/ion-datetime.js +2 -8
  5. package/components/ion-loading.js +8 -7
  6. package/components/ion-menu.js +5 -27
  7. package/components/ion-reorder-group.js +2 -1
  8. package/components/ion-router.js +0 -1
  9. package/components/ion-searchbar.js +6 -4
  10. package/components/ion-toast.js +7 -6
  11. package/components/modal.js +14 -242
  12. package/components/popover.js +7 -8
  13. package/dist/cjs/ion-action-sheet.cjs.entry.js +9 -8
  14. package/dist/cjs/ion-alert.cjs.entry.js +8 -7
  15. package/dist/cjs/ion-app_8.cjs.entry.js +1 -3
  16. package/dist/cjs/ion-datetime_3.cjs.entry.js +2 -8
  17. package/dist/cjs/ion-loading.cjs.entry.js +8 -7
  18. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -27
  19. package/dist/cjs/ion-modal.cjs.entry.js +14 -242
  20. package/dist/cjs/ion-popover.cjs.entry.js +7 -8
  21. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -1
  22. package/dist/cjs/ion-route_4.cjs.entry.js +0 -1
  23. package/dist/cjs/ion-searchbar.cjs.entry.js +6 -4
  24. package/dist/cjs/ion-toast.cjs.entry.js +7 -6
  25. package/dist/collection/components/action-sheet/action-sheet.js +12 -11
  26. package/dist/collection/components/alert/alert.js +11 -10
  27. package/dist/collection/components/app/app.js +3 -8
  28. package/dist/collection/components/datetime/datetime.js +8 -23
  29. package/dist/collection/components/loading/loading.js +11 -10
  30. package/dist/collection/components/menu/menu.js +19 -62
  31. package/dist/collection/components/modal/animations/ios.enter.js +2 -2
  32. package/dist/collection/components/modal/animations/ios.leave.js +2 -2
  33. package/dist/collection/components/modal/modal.js +16 -118
  34. package/dist/collection/components/popover/popover.js +14 -18
  35. package/dist/collection/components/reorder-group/reorder-group.js +3 -2
  36. package/dist/collection/components/router/router.js +1 -5
  37. package/dist/collection/components/searchbar/searchbar.js +7 -5
  38. package/dist/collection/components/toast/toast.js +10 -9
  39. package/dist/docs.json +72 -138
  40. package/dist/esm/ion-action-sheet.entry.js +9 -8
  41. package/dist/esm/ion-alert.entry.js +8 -7
  42. package/dist/esm/ion-app_8.entry.js +1 -3
  43. package/dist/esm/ion-datetime_3.entry.js +2 -8
  44. package/dist/esm/ion-loading.entry.js +8 -7
  45. package/dist/esm/ion-menu_3.entry.js +5 -27
  46. package/dist/esm/ion-modal.entry.js +14 -242
  47. package/dist/esm/ion-popover.entry.js +7 -8
  48. package/dist/esm/ion-reorder_2.entry.js +2 -1
  49. package/dist/esm/ion-route_4.entry.js +0 -1
  50. package/dist/esm/ion-searchbar.entry.js +6 -4
  51. package/dist/esm/ion-toast.entry.js +7 -6
  52. package/dist/ionic/ionic.esm.js +1 -1
  53. package/dist/ionic/{p-b758a177.entry.js → p-2020aa51.entry.js} +1 -1
  54. package/dist/ionic/p-29759454.entry.js +4 -0
  55. package/dist/ionic/{p-e37d6c67.entry.js → p-3a4feac2.entry.js} +1 -1
  56. package/dist/ionic/{p-2d0eccfb.entry.js → p-6b666996.entry.js} +1 -1
  57. package/dist/ionic/p-7149db7e.entry.js +4 -0
  58. package/dist/ionic/{p-01123ecf.entry.js → p-96389029.entry.js} +1 -1
  59. package/dist/ionic/{p-0d131a02.entry.js → p-9e699d4a.entry.js} +1 -1
  60. package/dist/ionic/p-bec79123.entry.js +4 -0
  61. package/dist/ionic/{p-03d21728.entry.js → p-cb787a4b.entry.js} +1 -1
  62. package/dist/ionic/{p-d8429eb4.entry.js → p-cd12ed1c.entry.js} +1 -1
  63. package/dist/ionic/{p-5f671887.entry.js → p-ead42a37.entry.js} +1 -1
  64. package/dist/types/components/action-sheet/action-sheet.d.ts +6 -5
  65. package/dist/types/components/alert/alert.d.ts +6 -5
  66. package/dist/types/components/app/app.d.ts +0 -2
  67. package/dist/types/components/datetime/datetime.d.ts +0 -6
  68. package/dist/types/components/loading/loading.d.ts +6 -5
  69. package/dist/types/components/menu/menu.d.ts +3 -25
  70. package/dist/types/components/modal/modal.d.ts +6 -20
  71. package/dist/types/components/popover/popover.d.ts +5 -6
  72. package/dist/types/components/reorder-group/reorder-group.d.ts +1 -0
  73. package/dist/types/components/router/router.d.ts +0 -1
  74. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  75. package/dist/types/components/toast/toast.d.ts +5 -4
  76. package/dist/types/components.d.ts +18 -32
  77. package/hydrate/index.js +69 -322
  78. package/hydrate/index.mjs +69 -322
  79. package/package.json +3 -3
  80. package/dist/collection/components/modal/animations/ios.transition.js +0 -143
  81. package/dist/ionic/p-69f91268.entry.js +0 -4
  82. package/dist/ionic/p-6f74a187.entry.js +0 -4
  83. package/dist/ionic/p-b9ba04ca.entry.js +0 -4
  84. 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. Some examples include:
198
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
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: '9fef156b2a1f09ca4a6c1fe1f37c374139bde03c', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
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: '81cf3f7d19864e041813987b46d2d115b8466819', tappable: this.backdropDismiss }), h("div", { key: '791c6a976683646fc306a42c15c5078b6f06a45f', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'a350b489ef7852eab9dc2227ce6d92da27dd9bf9', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '69ba51ee13510c1a411d87cb4845b11b7302a36f', class: "action-sheet-container" }, h("div", { key: 'bded15b8306c36591e526f0f99e1eeabcbab3915', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (h("div", { key: '06b5147c0f6d9180fe8f12e75c9b4a0310226adc', id: headerID, class: {
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: '54874362a75c679aba803bf4f8768f5404d2dd28', 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: '67b0de298eb424f3dea846a841b7a06d70e3930d', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: 'e7e3f9a5495eea9b97dbf885ef36944f2e420eff' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: 'f889d29ed6c3d14bbc1d805888351d87f5122377', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '7c05cf424b38c37fd40aaeb42a494387291571fb', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: 'bed927b477dc2708a5123ef560274fca9819b3d6' })))))), h("div", { key: 'c5df1b11dc15a93892d57065d3dd5fbe02e43b39', tabindex: "0", "aria-hidden": "true" })));
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. Some examples include:
368
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
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: '6025440b9cd369d4fac89e7e4296c84a10a0b8e0', tabindex: "-1", style: {
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: '3cd5ca8b99cb95b11dd22ab41a820d841142896f', tappable: this.backdropDismiss }), h("div", { key: '4cc62ae6e21424057d22aeef1e8fc77011e77cd5', tabindex: "0", "aria-hidden": "true" }), h("div", Object.assign({ key: '364057a69f25aa88904df17bdcf7e5bf714e7830', 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: '78694e3c0db2d408df3899fb1a90859bcc8d14cc', class: "alert-head" }, header && (h("h2", { key: 'ec88ff3e4e1ea871b5975133fdcf4cac38b05e0f', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (h("h2", { key: '9b09bc8bb68af255ef8b7d22587acc946148e544', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (h("h3", { key: '99abe815f75d2df7f1b77c0df9f3436724fea76f', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), h("div", { key: 'a43d0c22c0e46b1ef911f92ffeb253d7911b85f7', tabindex: "0", "aria-hidden": "true" })));
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: '9be440c65819e4fa67c2c3c6477ab40b3ad3eed3', class: {
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: '79677f5bc0fb32fb68569636bd76e68238e62eb8', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
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: 'bf07b1e3c64af6e837663ff470bea93787a6e86f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
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. Some examples include:
236
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
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: '4497183ce220242abe19ae15f328f9a92ccafbbc', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
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: '231dec84e424a2dc358ce95b84d6035cf43e4dea', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: 'c9af29b6e6bb49a217396a5c874bbfb8835a926c', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'a8659863743cdeccbe1ba810eaabfd3ebfcb86f3', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (h("div", { key: '3b346f39bc71691bd8686556a1e142198a7b12fa', class: "loading-spinner" }, h("ion-spinner", { key: '8dc2bf1556e5138e262827f1516c59ecd09f3520', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), h("div", { key: '054164c0dbae9a0e0973dd3c8e28f5b771820310', tabindex: "0", "aria-hidden": "true" })));
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` if the menu is active.
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 menu.
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: 'a5c75aa40a34530b56ee3b98d706a5ac5ae300de', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
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: '3f5f70acd4d3ed6bb445122f4f01d73db738a75f', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: '3161326c9330e7f7441299c428b87a91b31a83e9' })), h("ion-backdrop", { key: '917b50f38489bdf03d0c642af8b4e4e172c7dc4c', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
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 isPortrait = window.innerWidth < 768;
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 (isPortrait) {
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 isPortrait = window.innerWidth < 768;
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 (isPortrait) {
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
- const isSheetModalWithHandle = isSheetModal && showHandle;
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, onFocus: this.onModalFocus }), h("ion-backdrop", { key: '07b6143d368748194e4b209b48c7d9efbeed12e0', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '14eaf25ad683ca5c7369e69908ea93401dd5536b', class: "modal-shadow" }), h("div", Object.assign({ key: '9b996da27066c8dfdce8fcf3abdff65948010b5e',
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: 'd3b429aa40e094548a5eeaa295f4cb1b1f921339', class: "modal-handle",
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", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '86160fcdf92d6ca2a9afe5c801efb89c32ce2cc1' }))));
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 {