@ionic/core 8.6.3-dev.11751478001.1cb7436f → 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 (92) hide show
  1. package/components/action-sheet.js +9 -8
  2. package/components/alert.js +8 -7
  3. package/components/focus-visible.js +18 -27
  4. package/components/ion-app.js +1 -3
  5. package/components/ion-datetime.js +2 -8
  6. package/components/ion-loading.js +8 -7
  7. package/components/ion-menu.js +5 -27
  8. package/components/ion-reorder-group.js +2 -1
  9. package/components/ion-router.js +0 -1
  10. package/components/ion-searchbar.js +6 -4
  11. package/components/ion-select.js +3 -3
  12. package/components/ion-toast.js +7 -6
  13. package/components/modal.js +10 -26
  14. package/components/popover.js +7 -8
  15. package/dist/cjs/{focus-visible-ZV7jHMPt.js → focus-visible-CCvKiLh3.js} +18 -27
  16. package/dist/cjs/ion-action-sheet.cjs.entry.js +9 -8
  17. package/dist/cjs/ion-alert.cjs.entry.js +8 -7
  18. package/dist/cjs/ion-app_8.cjs.entry.js +2 -4
  19. package/dist/cjs/ion-datetime_3.cjs.entry.js +3 -9
  20. package/dist/cjs/ion-loading.cjs.entry.js +8 -7
  21. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -27
  22. package/dist/cjs/ion-modal.cjs.entry.js +10 -26
  23. package/dist/cjs/ion-popover.cjs.entry.js +7 -8
  24. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -1
  25. package/dist/cjs/ion-route_4.cjs.entry.js +0 -1
  26. package/dist/cjs/ion-searchbar.cjs.entry.js +6 -4
  27. package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
  28. package/dist/cjs/ion-toast.cjs.entry.js +7 -6
  29. package/dist/collection/components/action-sheet/action-sheet.js +12 -11
  30. package/dist/collection/components/alert/alert.js +11 -10
  31. package/dist/collection/components/app/app.js +3 -8
  32. package/dist/collection/components/datetime/datetime.js +8 -23
  33. package/dist/collection/components/loading/loading.js +11 -10
  34. package/dist/collection/components/menu/menu.js +19 -62
  35. package/dist/collection/components/modal/modal.js +16 -35
  36. package/dist/collection/components/popover/popover.js +14 -18
  37. package/dist/collection/components/reorder-group/reorder-group.js +3 -2
  38. package/dist/collection/components/router/router.js +1 -5
  39. package/dist/collection/components/searchbar/searchbar.js +7 -5
  40. package/dist/collection/components/select/select.js +3 -3
  41. package/dist/collection/components/toast/toast.js +10 -9
  42. package/dist/collection/utils/focus-visible.js +18 -27
  43. package/dist/docs.json +72 -138
  44. package/dist/esm/{focus-visible-DZ2gZBzK.js → focus-visible-BmVRXR1y.js} +18 -27
  45. package/dist/esm/ion-action-sheet.entry.js +9 -8
  46. package/dist/esm/ion-alert.entry.js +8 -7
  47. package/dist/esm/ion-app_8.entry.js +2 -4
  48. package/dist/esm/ion-datetime_3.entry.js +3 -9
  49. package/dist/esm/ion-loading.entry.js +8 -7
  50. package/dist/esm/ion-menu_3.entry.js +5 -27
  51. package/dist/esm/ion-modal.entry.js +10 -26
  52. package/dist/esm/ion-popover.entry.js +7 -8
  53. package/dist/esm/ion-reorder_2.entry.js +2 -1
  54. package/dist/esm/ion-route_4.entry.js +0 -1
  55. package/dist/esm/ion-searchbar.entry.js +6 -4
  56. package/dist/esm/ion-select_3.entry.js +3 -3
  57. package/dist/esm/ion-toast.entry.js +7 -6
  58. package/dist/ionic/ionic.esm.js +1 -1
  59. package/dist/ionic/{p-b758a177.entry.js → p-2020aa51.entry.js} +1 -1
  60. package/dist/ionic/p-29759454.entry.js +4 -0
  61. package/dist/ionic/{p-e37d6c67.entry.js → p-3a4feac2.entry.js} +1 -1
  62. package/dist/ionic/p-4ddc10ef.entry.js +4 -0
  63. package/dist/ionic/{p-2d0eccfb.entry.js → p-6b666996.entry.js} +1 -1
  64. package/dist/ionic/p-7149db7e.entry.js +4 -0
  65. package/dist/ionic/{p-2d46fbe7.entry.js → p-96389029.entry.js} +1 -1
  66. package/dist/ionic/{p-0d131a02.entry.js → p-9e699d4a.entry.js} +1 -1
  67. package/dist/ionic/p-BmVRXR1y.js +4 -0
  68. package/dist/ionic/p-bec79123.entry.js +4 -0
  69. package/dist/ionic/{p-03d21728.entry.js → p-cb787a4b.entry.js} +1 -1
  70. package/dist/ionic/{p-d8429eb4.entry.js → p-cd12ed1c.entry.js} +1 -1
  71. package/dist/ionic/{p-78a61b3f.entry.js → p-ead42a37.entry.js} +1 -1
  72. package/dist/types/components/action-sheet/action-sheet.d.ts +6 -5
  73. package/dist/types/components/alert/alert.d.ts +6 -5
  74. package/dist/types/components/app/app.d.ts +0 -2
  75. package/dist/types/components/datetime/datetime.d.ts +0 -6
  76. package/dist/types/components/loading/loading.d.ts +6 -5
  77. package/dist/types/components/menu/menu.d.ts +3 -25
  78. package/dist/types/components/modal/modal.d.ts +6 -14
  79. package/dist/types/components/popover/popover.d.ts +5 -6
  80. package/dist/types/components/reorder-group/reorder-group.d.ts +1 -0
  81. package/dist/types/components/router/router.d.ts +0 -1
  82. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  83. package/dist/types/components/toast/toast.d.ts +5 -4
  84. package/dist/types/components.d.ts +18 -32
  85. package/hydrate/index.js +86 -136
  86. package/hydrate/index.mjs +86 -136
  87. package/package.json +3 -3
  88. package/dist/ionic/p-69f91268.entry.js +0 -4
  89. package/dist/ionic/p-7d5cf8c1.entry.js +0 -4
  90. package/dist/ionic/p-9e32212d.entry.js +0 -4
  91. package/dist/ionic/p-DZ2gZBzK.js +0 -4
  92. package/dist/ionic/p-b9ba04ca.entry.js +0 -4
@@ -1263,8 +1263,6 @@ const Popover = /*@__PURE__*/ proxyCustomElement(class Popover extends HTMLEleme
1263
1263
  * Developers can pass a mouse, touch, or pointer event
1264
1264
  * to position the popover relative to where that event
1265
1265
  * was dispatched.
1266
- *
1267
- * @param event The event to position the popover relative to.
1268
1266
  */
1269
1267
  async present(event) {
1270
1268
  const unlock = await this.lockController.lock();
@@ -1328,14 +1326,15 @@ const Popover = /*@__PURE__*/ proxyCustomElement(class Popover extends HTMLEleme
1328
1326
  }
1329
1327
  /**
1330
1328
  * Dismiss the popover overlay after it has been presented.
1331
- * This is a no-op if the overlay has not been presented yet. If you want
1332
- * to remove an overlay from the DOM that was never presented, use the
1333
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
1334
1329
  *
1335
1330
  * @param data Any data to emit in the dismiss events.
1336
- * @param role The role of the element that is dismissing the popover. For example, `cancel` or `backdrop`.
1331
+ * @param role The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'.
1337
1332
  * @param dismissParentPopover If `true`, dismissing this popover will also dismiss
1338
1333
  * a parent popover if this popover is nested. Defaults to `true`.
1334
+ *
1335
+ * This is a no-op if the overlay has not been presented yet. If you want
1336
+ * to remove an overlay from the DOM that was never presented, use the
1337
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
1339
1338
  */
1340
1339
  async dismiss(data, role, dismissParentPopover = true) {
1341
1340
  const unlock = await this.lockController.lock();
@@ -1387,9 +1386,9 @@ const Popover = /*@__PURE__*/ proxyCustomElement(class Popover extends HTMLEleme
1387
1386
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
1388
1387
  const desktop = isPlatform('desktop');
1389
1388
  const enableArrow = arrow && !parentPopover;
1390
- return (h(Host, Object.assign({ key: '16866c02534968c982cf4730d2936d03a5107c8b', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1389
+ return (h(Host, Object.assign({ key: '1de4862099cfcb5035e78008e6dc7c1371846f9a', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1391
1390
  zIndex: `${20000 + this.overlayIndex}`,
1392
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '0df258601a4d30df3c27aa8234a7d5e056c3ecbb', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'f94e80ed996b957b5cd09b826472b4f60e8fcc78', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '185ce22f6386e8444a9cc7b8818dbfc16c463c99', class: "popover-arrow", part: "arrow" }), h("div", { key: '206202b299404e110de5397b229678cca18568d3', class: "popover-content", part: "content" }, h("slot", { key: 'ee543a0b92d6e35a837c0a0e4617c7b0fc4ad0b0' })))));
1391
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '981aa4e0102cb93312ffbd8243cdf2a0cdc60469', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: '1a28ed55e9d34ef78cf0eb0178643301fd2dd75d', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '1c206ea5eb3c0b5883a3d45c34cd22dd5ffe4b65', class: "popover-arrow", part: "arrow" }), h("div", { key: '5ba561486a328c0c7ab825995fdbfb7a196429a4', class: "popover-content", part: "content" }, h("slot", { key: '00fc244ce9dcc2dfc677e6c34b7c8e7a330b2b03' })))));
1393
1392
  }
1394
1393
  get el() { return this; }
1395
1394
  static get watchers() { return {
@@ -21,44 +21,33 @@ const FOCUS_KEYS = [
21
21
  ];
22
22
  const startFocusVisible = (rootEl) => {
23
23
  let currentFocus = [];
24
- // Tracks if the last interaction was a pointer event (mouse, touch, pen)
25
- // Used to distinguish between pointer and keyboard navigation for focus styling
26
- let hadPointerEvent = false;
24
+ let keyboardMode = true;
27
25
  const ref = rootEl ? rootEl.shadowRoot : document;
28
26
  const root = rootEl ? rootEl : document.body;
29
- // Adds or removes the focused class for styling
30
27
  const setFocus = (elements) => {
31
28
  currentFocus.forEach((el) => el.classList.remove(ION_FOCUSED));
32
29
  elements.forEach((el) => el.classList.add(ION_FOCUSED));
33
30
  currentFocus = elements;
34
31
  };
35
- // Do not set focus on pointer interactions
36
- const pointerDown = (ev) => {
37
- if (ev instanceof PointerEvent && ev.pointerType !== '') {
38
- hadPointerEvent = true;
39
- // Reset after the event loop so only the immediate focusin is suppressed
40
- setTimeout(() => {
41
- hadPointerEvent = false;
42
- }, 0);
43
- }
32
+ const pointerDown = () => {
33
+ keyboardMode = false;
34
+ setFocus([]);
44
35
  };
45
- // Clear hadPointerEvent so keyboard navigation shows focus
46
- // Also, clear focus if the key is not a navigation key
47
36
  const onKeydown = (ev) => {
48
- hadPointerEvent = false;
49
- const keyboardEvent = ev;
50
- if (!FOCUS_KEYS.includes(keyboardEvent.key)) {
37
+ keyboardMode = FOCUS_KEYS.includes(ev.key);
38
+ if (!keyboardMode) {
51
39
  setFocus([]);
52
40
  }
53
41
  };
54
- // Set focus if the last interaction was NOT a pointer event
55
- // This works around iOS/Safari bugs where keydown is not fired for Tab
56
42
  const onFocusin = (ev) => {
57
- const target = ev.target;
58
- if (target.classList.contains(ION_FOCUSABLE) && !hadPointerEvent) {
59
- const toFocus = ev
60
- .composedPath()
61
- .filter((el) => el instanceof HTMLElement && el.classList.contains(ION_FOCUSABLE));
43
+ if (keyboardMode && ev.composedPath !== undefined) {
44
+ const toFocus = ev.composedPath().filter((el) => {
45
+ // TODO(FW-2832): type
46
+ if (el.classList) {
47
+ return el.classList.contains(ION_FOCUSABLE);
48
+ }
49
+ return false;
50
+ });
62
51
  setFocus(toFocus);
63
52
  }
64
53
  };
@@ -70,12 +59,14 @@ const startFocusVisible = (rootEl) => {
70
59
  ref.addEventListener('keydown', onKeydown);
71
60
  ref.addEventListener('focusin', onFocusin);
72
61
  ref.addEventListener('focusout', onFocusout);
73
- ref.addEventListener('pointerdown', pointerDown, { passive: true });
62
+ ref.addEventListener('touchstart', pointerDown, { passive: true });
63
+ ref.addEventListener('mousedown', pointerDown);
74
64
  const destroy = () => {
75
65
  ref.removeEventListener('keydown', onKeydown);
76
66
  ref.removeEventListener('focusin', onFocusin);
77
67
  ref.removeEventListener('focusout', onFocusout);
78
- ref.removeEventListener('pointerdown', pointerDown);
68
+ ref.removeEventListener('touchstart', pointerDown);
69
+ ref.removeEventListener('mousedown', pointerDown);
79
70
  };
80
71
  return {
81
72
  destroy,
@@ -189,15 +189,16 @@ const ActionSheet = class {
189
189
  }
190
190
  /**
191
191
  * Dismiss the action sheet overlay after it has been presented.
192
- * This is a no-op if the overlay has not been presented yet. If you want
193
- * to remove an overlay from the DOM that was never presented, use the
194
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
195
192
  *
196
193
  * @param data Any data to emit in the dismiss events.
197
194
  * @param role The role of the element that is dismissing the action sheet.
198
195
  * This can be useful in a button handler for determining which button was
199
- * clicked to dismiss the action sheet. Some examples include:
200
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
196
+ * clicked to dismiss the action sheet.
197
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
198
+ *
199
+ * This is a no-op if the overlay has not been presented yet. If you want
200
+ * to remove an overlay from the DOM that was never presented, use the
201
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
201
202
  */
202
203
  async dismiss(data, role) {
203
204
  const unlock = await this.lockController.lock();
@@ -309,12 +310,12 @@ const ActionSheet = class {
309
310
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
310
311
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
311
312
  const headerID = `action-sheet-${overlayIndex}-header`;
312
- return (index.h(index.Host, Object.assign({ key: '9fef156b2a1f09ca4a6c1fe1f37c374139bde03c', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
313
+ return (index.h(index.Host, Object.assign({ key: '7bbd202ca9e19727e7514abbe073687d982f80c3', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
313
314
  zIndex: `${20000 + this.overlayIndex}`,
314
- }, class: Object.assign(Object.assign({ [mode]: true }, theme.getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), index.h("ion-backdrop", { key: '81cf3f7d19864e041813987b46d2d115b8466819', tappable: this.backdropDismiss }), index.h("div", { key: '791c6a976683646fc306a42c15c5078b6f06a45f', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: 'a350b489ef7852eab9dc2227ce6d92da27dd9bf9', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, index.h("div", { key: '69ba51ee13510c1a411d87cb4845b11b7302a36f', class: "action-sheet-container" }, index.h("div", { key: 'bded15b8306c36591e526f0f99e1eeabcbab3915', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (index.h("div", { key: '06b5147c0f6d9180fe8f12e75c9b4a0310226adc', id: headerID, class: {
315
+ }, class: Object.assign(Object.assign({ [mode]: true }, theme.getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), index.h("ion-backdrop", { key: '23344a9221a2e6720d7b9de5249dc37256cafa7b', tappable: this.backdropDismiss }), index.h("div", { key: 'fbc2ba15549c2ab04e759e82df6e177fd80cc0a6', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: '748ee5235d0b4cb26d6f1b7589f77af2e37ad28a', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, index.h("div", { key: '7ce5fa236cf75e9b1e49c4725c9a811078706554', class: "action-sheet-container" }, index.h("div", { key: 'dc2251f3bcee4a93e3449f09621cbd2b65d329e9', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (index.h("div", { key: '48d325c8a852f56ed57a9ada1a6709d05ba32ee2', id: headerID, class: {
315
316
  'action-sheet-title': true,
316
317
  'action-sheet-has-sub-title': this.subHeader !== undefined,
317
- } }, header, this.subHeader && index.h("div", { key: '54874362a75c679aba803bf4f8768f5404d2dd28', class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (index.h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), index.h("span", { class: "action-sheet-button-inner" }, b.icon && index.h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && index.h("ion-ripple-effect", null))))), cancelButton && (index.h("div", { key: '67b0de298eb424f3dea846a841b7a06d70e3930d', class: "action-sheet-group action-sheet-group-cancel" }, index.h("button", Object.assign({ key: 'e7e3f9a5495eea9b97dbf885ef36944f2e420eff' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), index.h("span", { key: 'f889d29ed6c3d14bbc1d805888351d87f5122377', class: "action-sheet-button-inner" }, cancelButton.icon && (index.h("ion-icon", { key: '7c05cf424b38c37fd40aaeb42a494387291571fb', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && index.h("ion-ripple-effect", { key: 'bed927b477dc2708a5123ef560274fca9819b3d6' })))))), index.h("div", { key: 'c5df1b11dc15a93892d57065d3dd5fbe02e43b39', tabindex: "0", "aria-hidden": "true" })));
318
+ } }, header, this.subHeader && index.h("div", { key: '66093728052eb67f37a35f3232761ce4a08896f3', class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (index.h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), index.h("span", { class: "action-sheet-button-inner" }, b.icon && index.h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && index.h("ion-ripple-effect", null))))), cancelButton && (index.h("div", { key: 'f4eb8e3e2885b85af5080df18d0de0bdd1d719de', class: "action-sheet-group action-sheet-group-cancel" }, index.h("button", Object.assign({ key: '169f4eb09255aba85062baad49ceb151239fbfb7' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), index.h("span", { key: '25fb8a466dd67ea94c79cfb4f9965527e1ce6d42', class: "action-sheet-button-inner" }, cancelButton.icon && (index.h("ion-icon", { key: 'eb5b071e120a2c86afdf967af6a763a43044d1ca', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && index.h("ion-ripple-effect", { key: '452ad7e1052b2c681e2d98de8193949755ad4d54' })))))), index.h("div", { key: 'e1cecf280c987c050d9445e2c458b903f153089b', tabindex: "0", "aria-hidden": "true" })));
318
319
  }
319
320
  get el() { return index.getElement(this); }
320
321
  static get watchers() { return {
@@ -359,15 +359,16 @@ const Alert = class {
359
359
  }
360
360
  /**
361
361
  * Dismiss the alert overlay after it has been presented.
362
- * This is a no-op if the overlay has not been presented yet. If you want
363
- * to remove an overlay from the DOM that was never presented, use the
364
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
365
362
  *
366
363
  * @param data Any data to emit in the dismiss events.
367
364
  * @param role The role of the element that is dismissing the alert.
368
365
  * This can be useful in a button handler for determining which button was
369
- * clicked to dismiss the alert. Some examples include:
370
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
366
+ * clicked to dismiss the alert.
367
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
368
+ *
369
+ * This is a no-op if the overlay has not been presented yet. If you want
370
+ * to remove an overlay from the DOM that was never presented, use the
371
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
371
372
  */
372
373
  async dismiss(data, role) {
373
374
  const unlock = await this.lockController.lock();
@@ -537,9 +538,9 @@ const Alert = class {
537
538
  * If neither are defined, do not set aria-labelledby.
538
539
  */
539
540
  const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
540
- return (index.h(index.Host, { key: '6025440b9cd369d4fac89e7e4296c84a10a0b8e0', tabindex: "-1", style: {
541
+ return (index.h(index.Host, { key: 'f8ee04fe6a97a2585b302c8e1a9eea3b122e3479', tabindex: "-1", style: {
541
542
  zIndex: `${20000 + overlayIndex}`,
542
- }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, index.h("ion-backdrop", { key: '3cd5ca8b99cb95b11dd22ab41a820d841142896f', tappable: this.backdropDismiss }), index.h("div", { key: '4cc62ae6e21424057d22aeef1e8fc77011e77cd5', tabindex: "0", "aria-hidden": "true" }), index.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), index.h("div", { key: '78694e3c0db2d408df3899fb1a90859bcc8d14cc', class: "alert-head" }, header && (index.h("h2", { key: 'ec88ff3e4e1ea871b5975133fdcf4cac38b05e0f', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (index.h("h2", { key: '9b09bc8bb68af255ef8b7d22587acc946148e544', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (index.h("h3", { key: '99abe815f75d2df7f1b77c0df9f3436724fea76f', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), index.h("div", { key: 'a43d0c22c0e46b1ef911f92ffeb253d7911b85f7', tabindex: "0", "aria-hidden": "true" })));
543
+ }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'alert-translucent': this.translucent }), onIonAlertWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }, index.h("ion-backdrop", { key: 'e9592e879f51c27ef20016beec12c986be632cf3', tappable: this.backdropDismiss }), index.h("div", { key: '5e9425c3c8acdea6f8006389689c73220e2ce423', tabindex: "0", "aria-hidden": "true" }), index.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), index.h("div", { key: '934eba3759456cd4660e10f274edc7859f908461', class: "alert-head" }, header && (index.h("h2", { key: '7d5d98d71f81f59a2cba227121b6fa01e6cc53b6', id: hdrId, class: "alert-title" }, header)), subHeader && !header && (index.h("h2", { key: 'e5f5d35748c58a98ee933eb15cb1dcaf8113e9a7', id: subHdrId, class: "alert-sub-title" }, subHeader)), subHeader && header && (index.h("h3", { key: 'a5cb89ca02bfa9c4828e694cb0835493a9088b05', id: subHdrId, class: "alert-sub-title" }, subHeader))), this.renderAlertMessage(msgId), this.renderAlertInputs(), this.renderAlertButtons()), index.h("div", { key: 'cacffc31c911882df73e6845d15c8bb2d4acab56', tabindex: "0", "aria-hidden": "true" })));
543
544
  }
544
545
  get el() { return index.getElement(this); }
545
546
  static get watchers() { return {
@@ -60,7 +60,7 @@ const App = class {
60
60
  if (typeof window !== 'undefined') {
61
61
  Promise.resolve().then(function () { return require('./keyboard-hHzlEQpk.js'); }).then((module) => module.startKeyboardAssist(window));
62
62
  }
63
- Promise.resolve().then(function () { return require('./focus-visible-ZV7jHMPt.js'); }).then((module) => (this.focusVisible = module.startFocusVisible()));
63
+ Promise.resolve().then(function () { return require('./focus-visible-CCvKiLh3.js'); }).then((module) => (this.focusVisible = module.startFocusVisible()));
64
64
  });
65
65
  }
66
66
  }
@@ -72,8 +72,6 @@ const App = class {
72
72
  * a result of another user action. (Ex: We focus the first element
73
73
  * inside of a popover when the user presents it, but the popover is not always
74
74
  * presented as a result of keyboard action.)
75
- *
76
- * @param elements An array of HTML elements to set focus on.
77
75
  */
78
76
  async setFocus(elements) {
79
77
  if (this.focusVisible) {
@@ -82,7 +80,7 @@ const App = class {
82
80
  }
83
81
  render() {
84
82
  const mode = index.getIonMode(this);
85
- return (index.h(index.Host, { key: '9be440c65819e4fa67c2c3c6477ab40b3ad3eed3', class: {
83
+ return (index.h(index.Host, { key: '03aa892f986330078d112b1e8b010df98fa7e39e', class: {
86
84
  [mode]: true,
87
85
  'ion-page': true,
88
86
  'force-statusbar-padding': index.config.getBoolean('_forceStatusbarPadding'),
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var index = require('./index-DODXXb_r.js');
7
- var focusVisible = require('./focus-visible-ZV7jHMPt.js');
7
+ var focusVisible = require('./focus-visible-CCvKiLh3.js');
8
8
  var helpers = require('./helpers-BITAzJfi.js');
9
9
  var dir = require('./dir-Cn0z1rJH.js');
10
10
  var theme = require('./theme-CeDs6Hcv.js');
@@ -994,8 +994,6 @@ const Datetime = class {
994
994
  * Confirms the selected datetime value, updates the
995
995
  * `value` property, and optionally closes the popover
996
996
  * or modal that the datetime was presented in.
997
- *
998
- * @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
999
997
  */
1000
998
  async confirm(closeOverlay = false) {
1001
999
  const { isCalendarPicker, activeParts, preferWheel, workingParts } = this;
@@ -1029,8 +1027,6 @@ const Datetime = class {
1029
1027
  * Resets the internal state of the datetime but does not update the value.
1030
1028
  * Passing a valid ISO-8601 string will reset the state of the component to the provided date.
1031
1029
  * If no value is provided, the internal state will be reset to the clamped value of the min, max and today.
1032
- *
1033
- * @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.
1034
1030
  */
1035
1031
  async reset(startDate) {
1036
1032
  this.processValue(startDate);
@@ -1040,8 +1036,6 @@ const Datetime = class {
1040
1036
  * optionally closes the popover
1041
1037
  * or modal that the datetime was
1042
1038
  * presented in.
1043
- *
1044
- * @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
1045
1039
  */
1046
1040
  async cancel(closeOverlay = false) {
1047
1041
  this.ionCancel.emit();
@@ -1855,7 +1849,7 @@ const Datetime = class {
1855
1849
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1856
1850
  const hasWheelVariant = hasDatePresentation && preferWheel;
1857
1851
  helpers.renderHiddenInput(true, el, name, data.formatValue(value), disabled);
1858
- return (index.h(index.Host, { key: '79677f5bc0fb32fb68569636bd76e68238e62eb8', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, theme.createColorClasses(color, {
1852
+ return (index.h(index.Host, { key: '7ea46c27aa5fb01b748dd4d6eb2340ad13f65175', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, theme.createColorClasses(color, {
1859
1853
  [mode]: true,
1860
1854
  ['datetime-readonly']: readonly,
1861
1855
  ['datetime-disabled']: disabled,
@@ -1865,7 +1859,7 @@ const Datetime = class {
1865
1859
  [`datetime-size-${size}`]: true,
1866
1860
  [`datetime-prefer-wheel`]: hasWheelVariant,
1867
1861
  [`datetime-grid`]: isGridStyle,
1868
- })) }, index.h("div", { key: 'bf07b1e3c64af6e837663ff470bea93787a6e86f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1862
+ })) }, index.h("div", { key: '6964378424c58b053e23279d08eaedf28dfcc315', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1869
1863
  }
1870
1864
  get el() { return index.getElement(this); }
1871
1865
  static get watchers() { return {
@@ -227,15 +227,16 @@ const Loading = class {
227
227
  }
228
228
  /**
229
229
  * Dismiss the loading overlay after it has been presented.
230
- * This is a no-op if the overlay has not been presented yet. If you want
231
- * to remove an overlay from the DOM that was never presented, use the
232
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
233
230
  *
234
231
  * @param data Any data to emit in the dismiss events.
235
232
  * @param role The role of the element that is dismissing the loading.
236
233
  * This can be useful in a button handler for determining which button was
237
- * clicked to dismiss the loading. Some examples include:
238
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
234
+ * clicked to dismiss the loading.
235
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
236
+ *
237
+ * This is a no-op if the overlay has not been presented yet. If you want
238
+ * to remove an overlay from the DOM that was never presented, use the
239
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
239
240
  */
240
241
  async dismiss(data, role) {
241
242
  const unlock = await this.lockController.lock();
@@ -277,9 +278,9 @@ const Loading = class {
277
278
  * Otherwise, don't set aria-labelledby.
278
279
  */
279
280
  const ariaLabelledBy = message !== undefined ? msgId : null;
280
- return (index.h(index.Host, Object.assign({ key: '4497183ce220242abe19ae15f328f9a92ccafbbc', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
281
+ return (index.h(index.Host, Object.assign({ key: '6369ed244c06c39aa338141bffacf7a861d7da1a', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
281
282
  zIndex: `${40000 + this.overlayIndex}`,
282
- }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), index.h("ion-backdrop", { key: '231dec84e424a2dc358ce95b84d6035cf43e4dea', visible: this.showBackdrop, tappable: this.backdropDismiss }), index.h("div", { key: 'c9af29b6e6bb49a217396a5c874bbfb8835a926c', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: 'a8659863743cdeccbe1ba810eaabfd3ebfcb86f3', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (index.h("div", { key: '3b346f39bc71691bd8686556a1e142198a7b12fa', class: "loading-spinner" }, index.h("ion-spinner", { key: '8dc2bf1556e5138e262827f1516c59ecd09f3520', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), index.h("div", { key: '054164c0dbae9a0e0973dd3c8e28f5b771820310', tabindex: "0", "aria-hidden": "true" })));
283
+ }, onIonBackdropTap: this.onBackdropTap, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'overlay-hidden': true, 'loading-translucent': this.translucent }) }), index.h("ion-backdrop", { key: '1fd5fd8581d59eec321e534f9116f3ec0501010a', visible: this.showBackdrop, tappable: this.backdropDismiss }), index.h("div", { key: 'b4028045b0c8fbb9946136d85d939d55120b867c', tabindex: "0", "aria-hidden": "true" }), index.h("div", { key: 'b045fb0e61cc28e8163d45be18b431918dc27c80', class: "loading-wrapper ion-overlay-wrapper" }, spinner && (index.h("div", { key: '2cf9df796f987d1251b3599d10a48ed87a1d0eb9', class: "loading-spinner" }, index.h("ion-spinner", { key: '371cd41655402326adcb1e2fe1481009a83243b2', name: spinner, "aria-hidden": "true" }))), message !== undefined && this.renderLoadingMessage(msgId)), index.h("div", { key: '2a5e5e66d22ee4c1cef0c93815ef023d47e7a8eb', tabindex: "0", "aria-hidden": "true" })));
283
284
  }
284
285
  get el() { return index.getElement(this); }
285
286
  static get watchers() { return {
@@ -242,7 +242,7 @@ const Menu = class {
242
242
  return Promise.resolve(this._isOpen);
243
243
  }
244
244
  /**
245
- * Returns `true` if the menu is active.
245
+ * Returns `true` is the menu is active.
246
246
  *
247
247
  * A menu is active when it can be opened or closed, meaning it's enabled
248
248
  * and it's not part of a `ion-split-pane`.
@@ -253,10 +253,6 @@ const Menu = class {
253
253
  /**
254
254
  * Opens the menu. If the menu is already open or it can't be opened,
255
255
  * it returns `false`.
256
- *
257
- * @param animated If `true`, the menu will animate when opening.
258
- * If `false`, the menu will open instantly without animation.
259
- * Defaults to `true`.
260
256
  */
261
257
  open(animated = true) {
262
258
  return this.setOpen(true, animated);
@@ -264,38 +260,20 @@ const Menu = class {
264
260
  /**
265
261
  * Closes the menu. If the menu is already closed or it can't be closed,
266
262
  * it returns `false`.
267
- *
268
- * @param animated If `true`, the menu will animate when closing. If `false`,
269
- * the menu will close instantly without animation. Defaults to `true`.
270
- * @param role The role of the element that is closing the menu.
271
- * This can be useful in a button handler for determining which button was
272
- * clicked to close the menu. Some examples include:
273
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
274
263
  */
275
264
  close(animated = true, role) {
276
265
  return this.setOpen(false, animated, role);
277
266
  }
278
267
  /**
279
- * Toggles the menu. If the menu is already open, it will try to close,
280
- * otherwise it will try to open it.
268
+ * Toggles the menu. If the menu is already open, it will try to close, otherwise it will try to open it.
281
269
  * If the operation can't be completed successfully, it returns `false`.
282
- *
283
- * @param animated If `true`, the menu will animate when opening/closing.
284
- * If `false`, the menu will open/close instantly without animation.
285
- * Defaults to `true`.
286
270
  */
287
271
  toggle(animated = true) {
288
272
  return this.setOpen(!this._isOpen, animated);
289
273
  }
290
274
  /**
291
- * Opens or closes the menu.
275
+ * Opens or closes the button.
292
276
  * If the operation can't be completed successfully, it returns `false`.
293
- *
294
- * @param shouldOpen If `true`, the menu will open. If `false`, the menu
295
- * will close.
296
- * @param animated If `true`, the menu will animate when opening/closing.
297
- * If `false`, the menu will open/close instantly without animation.
298
- * @param role The role of the element that is closing the menu.
299
277
  */
300
278
  setOpen(shouldOpen, animated = true, role) {
301
279
  return index$1.menuController._setOpen(this, shouldOpen, animated, role);
@@ -660,14 +638,14 @@ const Menu = class {
660
638
  * the ionBackButton listener in the menu controller
661
639
  * will handle closing the menu when Escape is pressed.
662
640
  */
663
- return (index.h(index.Host, { key: 'a5c75aa40a34530b56ee3b98d706a5ac5ae300de', onKeyDown: hardwareBackButton.shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
641
+ return (index.h(index.Host, { key: '9e4ae9476a76781f1d228395c9af9e1c39ec82bb', onKeyDown: hardwareBackButton.shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
664
642
  [mode]: true,
665
643
  [`menu-type-${type}`]: true,
666
644
  'menu-enabled': !disabled,
667
645
  [`menu-side-${side}`]: true,
668
646
  'menu-pane-visible': isPaneVisible,
669
647
  'split-pane-side': theme.hostContext('ion-split-pane', el),
670
- } }, index.h("div", { key: '3f5f70acd4d3ed6bb445122f4f01d73db738a75f', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, index.h("slot", { key: '3161326c9330e7f7441299c428b87a91b31a83e9' })), index.h("ion-backdrop", { key: '917b50f38489bdf03d0c642af8b4e4e172c7dc4c', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
648
+ } }, index.h("div", { key: 'c6153589d872ac7e3fdf5eedfdb858eb64ccd713', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, index.h("slot", { key: '9994aac4b22f17db34c9b8b2aa56b8710b9df645' })), index.h("ion-backdrop", { key: 'f09ac30cc4dd2dcb10628965e659dae5a23baf98', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
671
649
  }
672
650
  get el() { return index.getElement(this); }
673
651
  static get watchers() { return {
@@ -1484,17 +1484,6 @@ const Modal = class {
1484
1484
  el.dispatchEvent(ev);
1485
1485
  }
1486
1486
  };
1487
- /**
1488
- * When the modal receives focus directly, pass focus to the handle
1489
- * if it exists and is focusable, otherwise let the focus trap handle it.
1490
- */
1491
- this.onModalFocus = (ev) => {
1492
- const { dragHandleEl, el } = this;
1493
- // Only handle focus if the modal itself was focused (not a child element)
1494
- if (ev.target === el && dragHandleEl && dragHandleEl.tabIndex !== -1) {
1495
- dragHandleEl.focus();
1496
- }
1497
- };
1498
1487
  }
1499
1488
  onIsOpenChange(newValue, oldValue) {
1500
1489
  if (newValue === true && oldValue === false) {
@@ -1826,13 +1815,13 @@ const Modal = class {
1826
1815
  }
1827
1816
  /**
1828
1817
  * Dismiss the modal overlay after it has been presented.
1818
+ *
1819
+ * @param data Any data to emit in the dismiss events.
1820
+ * @param role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.
1821
+ *
1829
1822
  * This is a no-op if the overlay has not been presented yet. If you want
1830
1823
  * to remove an overlay from the DOM that was never presented, use the
1831
1824
  * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
1832
- *
1833
- * @param data Any data to emit in the dismiss events.
1834
- * @param role The role of the element that is dismissing the modal.
1835
- * For example, `cancel` or `backdrop`.
1836
1825
  */
1837
1826
  async dismiss(data, role) {
1838
1827
  var _a;
@@ -1904,10 +1893,8 @@ const Modal = class {
1904
1893
  return overlays.eventMethod(this.el, 'ionModalWillDismiss');
1905
1894
  }
1906
1895
  /**
1907
- * Move a sheet style modal to a specific breakpoint.
1908
- *
1909
- * @param breakpoint The breakpoint value to move the sheet modal to.
1910
- * Must be a value defined in your `breakpoints` array.
1896
+ * Move a sheet style modal to a specific breakpoint. The breakpoint value must
1897
+ * be a value defined in your `breakpoints` array.
1911
1898
  */
1912
1899
  async setCurrentBreakpoint(breakpoint) {
1913
1900
  if (!this.isSheetModal) {
@@ -1966,21 +1953,18 @@ const Modal = class {
1966
1953
  const mode = index$3.getIonMode(this);
1967
1954
  const isCardModal = presentingElement !== undefined && mode === 'ios';
1968
1955
  const isHandleCycle = handleBehavior === 'cycle';
1969
- const isSheetModalWithHandle = isSheetModal && showHandle;
1970
- return (index$3.h(index$3.Host, Object.assign({ key: '8add05bb43a2cdb5e3cf180147d31eb85a018fe0', "no-router": true,
1971
- // Allow the modal to be navigable when the handle is focusable
1972
- tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
1956
+ return (index$3.h(index$3.Host, Object.assign({ key: '0bcbdcfcd7d890eb599da3f97f21c317d34f8e0e', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1973
1957
  zIndex: `${20000 + this.overlayIndex}`,
1974
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), index$3.h("ion-backdrop", { key: '90a6605a9564a699d6f66cf71cf6b506796a2963', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: 'a97d071395333bf803c0a9347bda000cf7500d8d', class: "modal-shadow" }), index$3.h("div", Object.assign({ key: 'e7b7985c7414a13e3ba8dcecf497b76e92edf53e',
1958
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, theme.getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), index$3.h("ion-backdrop", { key: 'd72159e73daa5af7349aa9e8f695aa435eb43069', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$3.h("div", { key: 'fd2d9b13676ae72473881649a397b6eacde03a03', class: "modal-shadow" }), index$3.h("div", Object.assign({ key: '908eccb1ad982dcde2dbcff0cbb18b6e60f8ba74',
1975
1959
  /*
1976
1960
  role and aria-modal must be used on the
1977
1961
  same element. They must also be set inside the
1978
1962
  shadow DOM otherwise ion-button will not be highlighted
1979
1963
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
1980
1964
  */
1981
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$3.h("button", { key: '8258b65570b11a8ee9c9df2537d6419cd2e34536', class: "modal-handle",
1965
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (index$3.h("button", { key: '332dc0b40363a77c7be62331d9f26def91c790e9', class: "modal-handle",
1982
1966
  // Prevents the handle from receiving keyboard focus when it does not cycle
1983
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), index$3.h("slot", { key: '394370d0ed03ee03152f8f8abae7ff7664ca5c13' }))));
1967
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), index$3.h("slot", { key: 'c32698350193c450327e97049daf8b8d1fda0d0e' }))));
1984
1968
  }
1985
1969
  get el() { return index$3.getElement(this); }
1986
1970
  static get watchers() { return {
@@ -1263,8 +1263,6 @@ const Popover = class {
1263
1263
  * Developers can pass a mouse, touch, or pointer event
1264
1264
  * to position the popover relative to where that event
1265
1265
  * was dispatched.
1266
- *
1267
- * @param event The event to position the popover relative to.
1268
1266
  */
1269
1267
  async present(event) {
1270
1268
  const unlock = await this.lockController.lock();
@@ -1328,14 +1326,15 @@ const Popover = class {
1328
1326
  }
1329
1327
  /**
1330
1328
  * Dismiss the popover overlay after it has been presented.
1331
- * This is a no-op if the overlay has not been presented yet. If you want
1332
- * to remove an overlay from the DOM that was never presented, use the
1333
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
1334
1329
  *
1335
1330
  * @param data Any data to emit in the dismiss events.
1336
- * @param role The role of the element that is dismissing the popover. For example, `cancel` or `backdrop`.
1331
+ * @param role The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'.
1337
1332
  * @param dismissParentPopover If `true`, dismissing this popover will also dismiss
1338
1333
  * a parent popover if this popover is nested. Defaults to `true`.
1334
+ *
1335
+ * This is a no-op if the overlay has not been presented yet. If you want
1336
+ * to remove an overlay from the DOM that was never presented, use the
1337
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
1339
1338
  */
1340
1339
  async dismiss(data, role, dismissParentPopover = true) {
1341
1340
  const unlock = await this.lockController.lock();
@@ -1387,9 +1386,9 @@ const Popover = class {
1387
1386
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
1388
1387
  const desktop = index.isPlatform('desktop');
1389
1388
  const enableArrow = arrow && !parentPopover;
1390
- return (index.h(index.Host, Object.assign({ key: '16866c02534968c982cf4730d2936d03a5107c8b', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1389
+ return (index.h(index.Host, Object.assign({ key: '1de4862099cfcb5035e78008e6dc7c1371846f9a', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
1391
1390
  zIndex: `${20000 + this.overlayIndex}`,
1392
- }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && index.h("ion-backdrop", { key: '0df258601a4d30df3c27aa8234a7d5e056c3ecbb', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), index.h("div", { key: 'f94e80ed996b957b5cd09b826472b4f60e8fcc78', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && index.h("div", { key: '185ce22f6386e8444a9cc7b8818dbfc16c463c99', class: "popover-arrow", part: "arrow" }), index.h("div", { key: '206202b299404e110de5397b229678cca18568d3', class: "popover-content", part: "content" }, index.h("slot", { key: 'ee543a0b92d6e35a837c0a0e4617c7b0fc4ad0b0' })))));
1391
+ }, class: Object.assign(Object.assign({}, theme.getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [overlays.FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && index.h("ion-backdrop", { key: '981aa4e0102cb93312ffbd8243cdf2a0cdc60469', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), index.h("div", { key: '1a28ed55e9d34ef78cf0eb0178643301fd2dd75d', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && index.h("div", { key: '1c206ea5eb3c0b5883a3d45c34cd22dd5ffe4b65', class: "popover-arrow", part: "arrow" }), index.h("div", { key: '5ba561486a328c0c7ab825995fdbfb7a196429a4', class: "popover-content", part: "content" }, index.h("slot", { key: '00fc244ce9dcc2dfc677e6c34b7c8e7a330b2b03' })))));
1393
1392
  }
1394
1393
  get el() { return index.getElement(this); }
1395
1394
  static get watchers() { return {
@@ -92,6 +92,7 @@ const ReorderGroup = class {
92
92
  }
93
93
  /**
94
94
  * Completes the reorder operation. Must be called by the `ionItemReorder` event.
95
+ *
95
96
  * If a list of items is passed, the list will be reordered and returned in the
96
97
  * proper order.
97
98
  *
@@ -278,7 +279,7 @@ const ReorderGroup = class {
278
279
  }
279
280
  render() {
280
281
  const mode = index.getIonMode(this);
281
- return (index.h(index.Host, { key: 'dfcdc3a6aa1b2fba15f861ec868d6a11e667c9de', class: {
282
+ return (index.h(index.Host, { key: 'f30613b361c5c3095b7928a92fb4b1e8d6eff600', class: {
282
283
  [mode]: true,
283
284
  'reorder-enabled': !this.disabled,
284
285
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
@@ -676,7 +676,6 @@ const Router = class {
676
676
  *
677
677
  * @param path The path to navigate to.
678
678
  * @param direction The direction of the animation. Defaults to `"forward"`.
679
- * @param animation A custom animation to use for the transition.
680
679
  */
681
680
  async push(path, direction = 'forward', animation) {
682
681
  var _a;
@@ -257,8 +257,10 @@ const Searchbar = class {
257
257
  /**
258
258
  * Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global
259
259
  * `input.focus()`.
260
+ *
260
261
  * Developers who wish to focus an input when a page enters
261
262
  * should call `setFocus()` in the `ionViewDidEnter()` lifecycle method.
263
+ *
262
264
  * Developers who wish to focus an input when an overlay is presented
263
265
  * should call `setFocus` after `didPresent` has resolved.
264
266
  *
@@ -437,8 +439,8 @@ const Searchbar = class {
437
439
  const clearIcon = this.clearIcon || (mode === 'ios' ? index$1.closeCircle : index$1.closeSharp);
438
440
  const searchIcon = this.searchIcon || (mode === 'ios' ? index$1.searchOutline : index$1.searchSharp);
439
441
  const shouldShowCancelButton = this.shouldShowCancelButton();
440
- const cancelButton = this.showCancelButton !== 'never' && (index.h("button", { key: '19e18775856db87daeb4b9e3d7bca0461915a0df', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, index.h("div", { key: 'b3bbdcc033f3bd3441d619e4a252cef0dad4d07e', "aria-hidden": "true" }, mode === 'md' ? (index.h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
441
- return (index.h(index.Host, { key: '074aa60e051bfb3225e87d44bbb6346c59c73574', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: theme.createColorClasses(this.color, {
442
+ const cancelButton = this.showCancelButton !== 'never' && (index.h("button", { key: '5835c36fcb0b52aec956538202a783f6c194d853', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, index.h("div", { key: '85df41676bed611467bd4df0002b08baee4f539c', "aria-hidden": "true" }, mode === 'md' ? (index.h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
443
+ return (index.h(index.Host, { key: 'e1e30cdd79f9f54d5f2d27501012358bc46880e5', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: theme.createColorClasses(this.color, {
442
444
  [mode]: true,
443
445
  'searchbar-animated': animated,
444
446
  'searchbar-disabled': this.disabled,
@@ -448,14 +450,14 @@ const Searchbar = class {
448
450
  'searchbar-has-focus': this.focused,
449
451
  'searchbar-should-show-clear': this.shouldShowClearButton(),
450
452
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
451
- }) }, index.h("div", { key: '54f58a79fe36e85d9295157303f1be89c98bbdaf', class: "searchbar-input-container" }, index.h("input", Object.assign({ key: 'f991a37fcf54d26b7ad10d89084764e03d97b9de', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, index.h("ion-icon", { key: '8b44dd90a3292c5cf872ef16a8520675f5673494', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), index.h("button", { key: '79d9cfed8f01268044f82811a35d323a12dca749', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
453
+ }) }, index.h("div", { key: '7e9db147282a35bb1e3c9c6125b9a044e81ddde5', class: "searchbar-input-container" }, index.h("input", Object.assign({ key: '02f08da21326b78d6cd249d54deab96fd8472ba8', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, index.h("ion-icon", { key: '048b00348456bd827ae734491c46a67bfb146227', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), index.h("button", { key: '71f64339bbfd54ebd26a0946c8ee9d726cd89c04', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
452
454
  /**
453
455
  * This prevents mobile browsers from
454
456
  * blurring the input when the clear
455
457
  * button is activated.
456
458
  */
457
459
  ev.preventDefault();
458
- }, onClick: () => this.onClearInput(true) }, index.h("ion-icon", { key: 'aa3b9fa8a61f853236783ac7bcd0b113ea65ece2', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
460
+ }, onClick: () => this.onClearInput(true) }, index.h("ion-icon", { key: '9b1a177b21951c1c95897a468b34bb7bbd63d137', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
459
461
  }
460
462
  get el() { return index.getElement(this); }
461
463
  static get watchers() { return {