@ionic/core 8.6.3-dev.11751478001.1cb7436f → 8.6.3-nightly.20250620

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
@@ -185,15 +185,16 @@ const ActionSheet = /*@__PURE__*/ proxyCustomElement(class ActionSheet extends H
185
185
  }
186
186
  /**
187
187
  * Dismiss the action sheet overlay after it has been presented.
188
- * This is a no-op if the overlay has not been presented yet. If you want
189
- * to remove an overlay from the DOM that was never presented, use the
190
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
191
188
  *
192
189
  * @param data Any data to emit in the dismiss events.
193
190
  * @param role The role of the element that is dismissing the action sheet.
194
191
  * This can be useful in a button handler for determining which button was
195
- * clicked to dismiss the action sheet. Some examples include:
196
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
192
+ * clicked to dismiss the action sheet.
193
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
194
+ *
195
+ * This is a no-op if the overlay has not been presented yet. If you want
196
+ * to remove an overlay from the DOM that was never presented, use the
197
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
197
198
  */
198
199
  async dismiss(data, role) {
199
200
  const unlock = await this.lockController.lock();
@@ -305,12 +306,12 @@ const ActionSheet = /*@__PURE__*/ proxyCustomElement(class ActionSheet extends H
305
306
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
306
307
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
307
308
  const headerID = `action-sheet-${overlayIndex}-header`;
308
- return (h(Host, Object.assign({ key: '9fef156b2a1f09ca4a6c1fe1f37c374139bde03c', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
309
+ return (h(Host, Object.assign({ key: '7bbd202ca9e19727e7514abbe073687d982f80c3', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
309
310
  zIndex: `${20000 + this.overlayIndex}`,
310
- }, 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: {
311
+ }, 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: {
311
312
  'action-sheet-title': true,
312
313
  'action-sheet-has-sub-title': this.subHeader !== undefined,
313
- } }, 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" })));
314
+ } }, 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" })));
314
315
  }
315
316
  get el() { return this; }
316
317
  static get watchers() { return {
@@ -355,15 +355,16 @@ const Alert = /*@__PURE__*/ proxyCustomElement(class Alert extends HTMLElement {
355
355
  }
356
356
  /**
357
357
  * Dismiss the alert overlay after it has been presented.
358
- * This is a no-op if the overlay has not been presented yet. If you want
359
- * to remove an overlay from the DOM that was never presented, use the
360
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
361
358
  *
362
359
  * @param data Any data to emit in the dismiss events.
363
360
  * @param role The role of the element that is dismissing the alert.
364
361
  * This can be useful in a button handler for determining which button was
365
- * clicked to dismiss the alert. Some examples include:
366
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
362
+ * clicked to dismiss the alert.
363
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
364
+ *
365
+ * This is a no-op if the overlay has not been presented yet. If you want
366
+ * to remove an overlay from the DOM that was never presented, use the
367
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
367
368
  */
368
369
  async dismiss(data, role) {
369
370
  const unlock = await this.lockController.lock();
@@ -533,9 +534,9 @@ const Alert = /*@__PURE__*/ proxyCustomElement(class Alert extends HTMLElement {
533
534
  * If neither are defined, do not set aria-labelledby.
534
535
  */
535
536
  const ariaLabelledBy = header && subHeader ? `${hdrId} ${subHdrId}` : header ? hdrId : subHeader ? subHdrId : null;
536
- return (h(Host, { key: '6025440b9cd369d4fac89e7e4296c84a10a0b8e0', tabindex: "-1", style: {
537
+ return (h(Host, { key: 'f8ee04fe6a97a2585b302c8e1a9eea3b122e3479', tabindex: "-1", style: {
537
538
  zIndex: `${20000 + overlayIndex}`,
538
- }, 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" })));
539
+ }, 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" })));
539
540
  }
540
541
  get el() { return this; }
541
542
  static get watchers() { return {
@@ -19,44 +19,33 @@ const FOCUS_KEYS = [
19
19
  ];
20
20
  const startFocusVisible = (rootEl) => {
21
21
  let currentFocus = [];
22
- // Tracks if the last interaction was a pointer event (mouse, touch, pen)
23
- // Used to distinguish between pointer and keyboard navigation for focus styling
24
- let hadPointerEvent = false;
22
+ let keyboardMode = true;
25
23
  const ref = rootEl ? rootEl.shadowRoot : document;
26
24
  const root = rootEl ? rootEl : document.body;
27
- // Adds or removes the focused class for styling
28
25
  const setFocus = (elements) => {
29
26
  currentFocus.forEach((el) => el.classList.remove(ION_FOCUSED));
30
27
  elements.forEach((el) => el.classList.add(ION_FOCUSED));
31
28
  currentFocus = elements;
32
29
  };
33
- // Do not set focus on pointer interactions
34
- const pointerDown = (ev) => {
35
- if (ev instanceof PointerEvent && ev.pointerType !== '') {
36
- hadPointerEvent = true;
37
- // Reset after the event loop so only the immediate focusin is suppressed
38
- setTimeout(() => {
39
- hadPointerEvent = false;
40
- }, 0);
41
- }
30
+ const pointerDown = () => {
31
+ keyboardMode = false;
32
+ setFocus([]);
42
33
  };
43
- // Clear hadPointerEvent so keyboard navigation shows focus
44
- // Also, clear focus if the key is not a navigation key
45
34
  const onKeydown = (ev) => {
46
- hadPointerEvent = false;
47
- const keyboardEvent = ev;
48
- if (!FOCUS_KEYS.includes(keyboardEvent.key)) {
35
+ keyboardMode = FOCUS_KEYS.includes(ev.key);
36
+ if (!keyboardMode) {
49
37
  setFocus([]);
50
38
  }
51
39
  };
52
- // Set focus if the last interaction was NOT a pointer event
53
- // This works around iOS/Safari bugs where keydown is not fired for Tab
54
40
  const onFocusin = (ev) => {
55
- const target = ev.target;
56
- if (target.classList.contains(ION_FOCUSABLE) && !hadPointerEvent) {
57
- const toFocus = ev
58
- .composedPath()
59
- .filter((el) => el instanceof HTMLElement && el.classList.contains(ION_FOCUSABLE));
41
+ if (keyboardMode && ev.composedPath !== undefined) {
42
+ const toFocus = ev.composedPath().filter((el) => {
43
+ // TODO(FW-2832): type
44
+ if (el.classList) {
45
+ return el.classList.contains(ION_FOCUSABLE);
46
+ }
47
+ return false;
48
+ });
60
49
  setFocus(toFocus);
61
50
  }
62
51
  };
@@ -68,12 +57,14 @@ const startFocusVisible = (rootEl) => {
68
57
  ref.addEventListener('keydown', onKeydown);
69
58
  ref.addEventListener('focusin', onFocusin);
70
59
  ref.addEventListener('focusout', onFocusout);
71
- ref.addEventListener('pointerdown', pointerDown, { passive: true });
60
+ ref.addEventListener('touchstart', pointerDown, { passive: true });
61
+ ref.addEventListener('mousedown', pointerDown);
72
62
  const destroy = () => {
73
63
  ref.removeEventListener('keydown', onKeydown);
74
64
  ref.removeEventListener('focusin', onFocusin);
75
65
  ref.removeEventListener('focusout', onFocusout);
76
- ref.removeEventListener('pointerdown', pointerDown);
66
+ ref.removeEventListener('touchstart', pointerDown);
67
+ ref.removeEventListener('mousedown', pointerDown);
77
68
  };
78
69
  return {
79
70
  destroy,
@@ -61,8 +61,6 @@ const App = /*@__PURE__*/ proxyCustomElement(class App extends HTMLElement {
61
61
  * a result of another user action. (Ex: We focus the first element
62
62
  * inside of a popover when the user presents it, but the popover is not always
63
63
  * presented as a result of keyboard action.)
64
- *
65
- * @param elements An array of HTML elements to set focus on.
66
64
  */
67
65
  async setFocus(elements) {
68
66
  if (this.focusVisible) {
@@ -71,7 +69,7 @@ const App = /*@__PURE__*/ proxyCustomElement(class App extends HTMLElement {
71
69
  }
72
70
  render() {
73
71
  const mode = getIonMode(this);
74
- return (h(Host, { key: '9be440c65819e4fa67c2c3c6477ab40b3ad3eed3', class: {
72
+ return (h(Host, { key: '03aa892f986330078d112b1e8b010df98fa7e39e', class: {
75
73
  [mode]: true,
76
74
  'ion-page': true,
77
75
  'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),
@@ -996,8 +996,6 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
996
996
  * Confirms the selected datetime value, updates the
997
997
  * `value` property, and optionally closes the popover
998
998
  * or modal that the datetime was presented in.
999
- *
1000
- * @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
1001
999
  */
1002
1000
  async confirm(closeOverlay = false) {
1003
1001
  const { isCalendarPicker, activeParts, preferWheel, workingParts } = this;
@@ -1031,8 +1029,6 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1031
1029
  * Resets the internal state of the datetime but does not update the value.
1032
1030
  * Passing a valid ISO-8601 string will reset the state of the component to the provided date.
1033
1031
  * If no value is provided, the internal state will be reset to the clamped value of the min, max and today.
1034
- *
1035
- * @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.
1036
1032
  */
1037
1033
  async reset(startDate) {
1038
1034
  this.processValue(startDate);
@@ -1042,8 +1038,6 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1042
1038
  * optionally closes the popover
1043
1039
  * or modal that the datetime was
1044
1040
  * presented in.
1045
- *
1046
- * @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
1047
1041
  */
1048
1042
  async cancel(closeOverlay = false) {
1049
1043
  this.ionCancel.emit();
@@ -1857,7 +1851,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1857
1851
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1858
1852
  const hasWheelVariant = hasDatePresentation && preferWheel;
1859
1853
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1860
- return (h(Host, { key: '79677f5bc0fb32fb68569636bd76e68238e62eb8', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1854
+ return (h(Host, { key: '7ea46c27aa5fb01b748dd4d6eb2340ad13f65175', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1861
1855
  [mode]: true,
1862
1856
  ['datetime-readonly']: readonly,
1863
1857
  ['datetime-disabled']: disabled,
@@ -1867,7 +1861,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1867
1861
  [`datetime-size-${size}`]: true,
1868
1862
  [`datetime-prefer-wheel`]: hasWheelVariant,
1869
1863
  [`datetime-grid`]: isGridStyle,
1870
- })) }, h("div", { key: 'bf07b1e3c64af6e837663ff470bea93787a6e86f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1864
+ })) }, h("div", { key: '6964378424c58b053e23279d08eaedf28dfcc315', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1871
1865
  }
1872
1866
  get el() { return this; }
1873
1867
  static get watchers() { return {
@@ -226,15 +226,16 @@ const Loading = /*@__PURE__*/ proxyCustomElement(class Loading extends HTMLEleme
226
226
  }
227
227
  /**
228
228
  * Dismiss the loading overlay after it has been presented.
229
- * This is a no-op if the overlay has not been presented yet. If you want
230
- * to remove an overlay from the DOM that was never presented, use the
231
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
232
229
  *
233
230
  * @param data Any data to emit in the dismiss events.
234
231
  * @param role The role of the element that is dismissing the loading.
235
232
  * This can be useful in a button handler for determining which button was
236
- * clicked to dismiss the loading. Some examples include:
237
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
233
+ * clicked to dismiss the loading.
234
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
235
+ *
236
+ * This is a no-op if the overlay has not been presented yet. If you want
237
+ * to remove an overlay from the DOM that was never presented, use the
238
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
238
239
  */
239
240
  async dismiss(data, role) {
240
241
  const unlock = await this.lockController.lock();
@@ -276,9 +277,9 @@ const Loading = /*@__PURE__*/ proxyCustomElement(class Loading extends HTMLEleme
276
277
  * Otherwise, don't set aria-labelledby.
277
278
  */
278
279
  const ariaLabelledBy = message !== undefined ? msgId : null;
279
- return (h(Host, Object.assign({ key: '4497183ce220242abe19ae15f328f9a92ccafbbc', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
280
+ return (h(Host, Object.assign({ key: '6369ed244c06c39aa338141bffacf7a861d7da1a', role: "dialog", "aria-modal": "true", "aria-labelledby": ariaLabelledBy, tabindex: "-1" }, htmlAttributes, { style: {
280
281
  zIndex: `${40000 + this.overlayIndex}`,
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: '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" })));
282
+ }, 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" })));
282
283
  }
283
284
  get el() { return this; }
284
285
  static get watchers() { return {
@@ -244,7 +244,7 @@ const Menu = /*@__PURE__*/ proxyCustomElement(class Menu extends HTMLElement {
244
244
  return Promise.resolve(this._isOpen);
245
245
  }
246
246
  /**
247
- * Returns `true` if the menu is active.
247
+ * Returns `true` is the menu is active.
248
248
  *
249
249
  * A menu is active when it can be opened or closed, meaning it's enabled
250
250
  * and it's not part of a `ion-split-pane`.
@@ -255,10 +255,6 @@ const Menu = /*@__PURE__*/ proxyCustomElement(class Menu extends HTMLElement {
255
255
  /**
256
256
  * Opens the menu. If the menu is already open or it can't be opened,
257
257
  * it returns `false`.
258
- *
259
- * @param animated If `true`, the menu will animate when opening.
260
- * If `false`, the menu will open instantly without animation.
261
- * Defaults to `true`.
262
258
  */
263
259
  open(animated = true) {
264
260
  return this.setOpen(true, animated);
@@ -266,38 +262,20 @@ const Menu = /*@__PURE__*/ proxyCustomElement(class Menu extends HTMLElement {
266
262
  /**
267
263
  * Closes the menu. If the menu is already closed or it can't be closed,
268
264
  * it returns `false`.
269
- *
270
- * @param animated If `true`, the menu will animate when closing. If `false`,
271
- * the menu will close instantly without animation. Defaults to `true`.
272
- * @param role The role of the element that is closing the menu.
273
- * This can be useful in a button handler for determining which button was
274
- * clicked to close the menu. Some examples include:
275
- * `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
276
265
  */
277
266
  close(animated = true, role) {
278
267
  return this.setOpen(false, animated, role);
279
268
  }
280
269
  /**
281
- * Toggles the menu. If the menu is already open, it will try to close,
282
- * otherwise it will try to open it.
270
+ * Toggles the menu. If the menu is already open, it will try to close, otherwise it will try to open it.
283
271
  * If the operation can't be completed successfully, it returns `false`.
284
- *
285
- * @param animated If `true`, the menu will animate when opening/closing.
286
- * If `false`, the menu will open/close instantly without animation.
287
- * Defaults to `true`.
288
272
  */
289
273
  toggle(animated = true) {
290
274
  return this.setOpen(!this._isOpen, animated);
291
275
  }
292
276
  /**
293
- * Opens or closes the menu.
277
+ * Opens or closes the button.
294
278
  * If the operation can't be completed successfully, it returns `false`.
295
- *
296
- * @param shouldOpen If `true`, the menu will open. If `false`, the menu
297
- * will close.
298
- * @param animated If `true`, the menu will animate when opening/closing.
299
- * If `false`, the menu will open/close instantly without animation.
300
- * @param role The role of the element that is closing the menu.
301
279
  */
302
280
  setOpen(shouldOpen, animated = true, role) {
303
281
  return menuController._setOpen(this, shouldOpen, animated, role);
@@ -662,14 +640,14 @@ const Menu = /*@__PURE__*/ proxyCustomElement(class Menu extends HTMLElement {
662
640
  * the ionBackButton listener in the menu controller
663
641
  * will handle closing the menu when Escape is pressed.
664
642
  */
665
- return (h(Host, { key: 'a5c75aa40a34530b56ee3b98d706a5ac5ae300de', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
643
+ return (h(Host, { key: '9e4ae9476a76781f1d228395c9af9e1c39ec82bb', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
666
644
  [mode]: true,
667
645
  [`menu-type-${type}`]: true,
668
646
  'menu-enabled': !disabled,
669
647
  [`menu-side-${side}`]: true,
670
648
  'menu-pane-visible': isPaneVisible,
671
649
  'split-pane-side': hostContext('ion-split-pane', el),
672
- } }, 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" })));
650
+ } }, 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" })));
673
651
  }
674
652
  get el() { return this; }
675
653
  static get watchers() { return {
@@ -60,6 +60,7 @@ const ReorderGroup = /*@__PURE__*/ proxyCustomElement(class ReorderGroup extends
60
60
  }
61
61
  /**
62
62
  * Completes the reorder operation. Must be called by the `ionItemReorder` event.
63
+ *
63
64
  * If a list of items is passed, the list will be reordered and returned in the
64
65
  * proper order.
65
66
  *
@@ -246,7 +247,7 @@ const ReorderGroup = /*@__PURE__*/ proxyCustomElement(class ReorderGroup extends
246
247
  }
247
248
  render() {
248
249
  const mode = getIonMode(this);
249
- return (h(Host, { key: 'dfcdc3a6aa1b2fba15f861ec868d6a11e667c9de', class: {
250
+ return (h(Host, { key: 'f30613b361c5c3095b7928a92fb4b1e8d6eff600', class: {
250
251
  [mode]: true,
251
252
  'reorder-enabled': !this.disabled,
252
253
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
@@ -616,7 +616,6 @@ const Router = /*@__PURE__*/ proxyCustomElement(class Router extends HTMLElement
616
616
  *
617
617
  * @param path The path to navigate to.
618
618
  * @param direction The direction of the animation. Defaults to `"forward"`.
619
- * @param animation A custom animation to use for the transition.
620
619
  */
621
620
  async push(path, direction = 'forward', animation) {
622
621
  var _a;
@@ -259,8 +259,10 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
259
259
  /**
260
260
  * Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global
261
261
  * `input.focus()`.
262
+ *
262
263
  * Developers who wish to focus an input when a page enters
263
264
  * should call `setFocus()` in the `ionViewDidEnter()` lifecycle method.
265
+ *
264
266
  * Developers who wish to focus an input when an overlay is presented
265
267
  * should call `setFocus` after `didPresent` has resolved.
266
268
  *
@@ -439,8 +441,8 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
439
441
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
440
442
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
441
443
  const shouldShowCancelButton = this.shouldShowCancelButton();
442
- const cancelButton = this.showCancelButton !== 'never' && (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" }, h("div", { key: 'b3bbdcc033f3bd3441d619e4a252cef0dad4d07e', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
443
- return (h(Host, { key: '074aa60e051bfb3225e87d44bbb6346c59c73574', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
444
+ const cancelButton = this.showCancelButton !== 'never' && (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" }, h("div", { key: '85df41676bed611467bd4df0002b08baee4f539c', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
445
+ return (h(Host, { key: 'e1e30cdd79f9f54d5f2d27501012358bc46880e5', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
444
446
  [mode]: true,
445
447
  'searchbar-animated': animated,
446
448
  'searchbar-disabled': this.disabled,
@@ -450,14 +452,14 @@ const Searchbar = /*@__PURE__*/ proxyCustomElement(class Searchbar extends HTMLE
450
452
  'searchbar-has-focus': this.focused,
451
453
  'searchbar-should-show-clear': this.shouldShowClearButton(),
452
454
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
453
- }) }, h("div", { key: '54f58a79fe36e85d9295157303f1be89c98bbdaf', class: "searchbar-input-container" }, 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, h("ion-icon", { key: '8b44dd90a3292c5cf872ef16a8520675f5673494', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '79d9cfed8f01268044f82811a35d323a12dca749', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
455
+ }) }, h("div", { key: '7e9db147282a35bb1e3c9c6125b9a044e81ddde5', class: "searchbar-input-container" }, 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, h("ion-icon", { key: '048b00348456bd827ae734491c46a67bfb146227', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '71f64339bbfd54ebd26a0946c8ee9d726cd89c04', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
454
456
  /**
455
457
  * This prevents mobile browsers from
456
458
  * blurring the input when the clear
457
459
  * button is activated.
458
460
  */
459
461
  ev.preventDefault();
460
- }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: 'aa3b9fa8a61f853236783ac7bcd0b113ea65ece2', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
462
+ }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '9b1a177b21951c1c95897a468b34bb7bbd63d137', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
461
463
  }
462
464
  get el() { return this; }
463
465
  static get watchers() { return {
@@ -235,7 +235,7 @@ const Select = /*@__PURE__*/ proxyCustomElement(class Select extends HTMLElement
235
235
  const scrollSelectedIntoView = () => {
236
236
  const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
237
237
  if (indexOfSelected > -1) {
238
- const selectedItem = overlay.querySelector(`.select-interface-option:nth-of-type(${indexOfSelected + 1})`);
238
+ const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
239
239
  if (selectedItem) {
240
240
  /**
241
241
  * Browsers such as Firefox do not
@@ -755,7 +755,7 @@ const Select = /*@__PURE__*/ proxyCustomElement(class Select extends HTMLElement
755
755
  * TODO(FW-5592): Remove hasStartEndSlots condition
756
756
  */
757
757
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
758
- return (h(Host, { key: 'c03fb65e8fc9f9aab295e07b282377d57d910519', onClick: this.onClick, class: createColorClasses(this.color, {
758
+ return (h(Host, { key: 'e33253af9b9daa14460c7c259fb138b4d2b875ae', onClick: this.onClick, class: createColorClasses(this.color, {
759
759
  [mode]: true,
760
760
  'in-item': inItem,
761
761
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -773,7 +773,7 @@ const Select = /*@__PURE__*/ proxyCustomElement(class Select extends HTMLElement
773
773
  [`select-justify-${justify}`]: justifyEnabled,
774
774
  [`select-shape-${shape}`]: shape !== undefined,
775
775
  [`select-label-placement-${labelPlacement}`]: true,
776
- }) }, h("label", { key: '0d0c8ec55269adcac625f2899a547f4e7f3e3741', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: 'f6dfc93c0e23cbe75a2947abde67d842db2dad78', class: "select-wrapper-inner" }, h("slot", { key: '957bfadf9f101f519091419a362d3abdc2be66f6', name: "start" }), h("div", { key: 'ca349202a484e7f2e884533fd330f0b136754f7d', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: 'f0e62a6533ff1c8f62bd2d27f60b23385c4fa9ed', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: 'fb840d46bafafb09898ebeebbe8c181906a3d8a2', class: "select-highlight" })), this.renderBottomContent()));
776
+ }) }, h("label", { key: '03303b7131c77a78a933e8e496e7251b6b5c485b', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: '9037674db6a0adc189e887c9048f817d5afdf635', class: "select-wrapper-inner" }, h("slot", { key: '7c9226c838ba4bcf5bc0b234fa1613ce335cf73d', name: "start" }), h("div", { key: 'a7432c3efb5c65f88a5e4b0d35c5a433fa4e949d', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '028e683df26a8f573d7670da76e0ad26d21c83e0', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '20341bcae3753048ce905d2aceffa5351a0db125', class: "select-highlight" })), this.renderBottomContent()));
777
777
  }
778
778
  get el() { return this; }
779
779
  static get watchers() { return {
@@ -677,15 +677,16 @@ const Toast = /*@__PURE__*/ proxyCustomElement(class Toast extends HTMLElement {
677
677
  }
678
678
  /**
679
679
  * Dismiss the toast overlay after it has been presented.
680
- * This is a no-op if the overlay has not been presented yet. If you want
681
- * to remove an overlay from the DOM that was never presented, use the
682
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
683
680
  *
684
681
  * @param data Any data to emit in the dismiss events.
685
682
  * @param role The role of the element that is dismissing the toast.
686
683
  * This can be useful in a button handler for determining which button was
687
684
  * clicked to dismiss the toast.
688
- * Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
685
+ * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
686
+ *
687
+ * This is a no-op if the overlay has not been presented yet. If you want
688
+ * to remove an overlay from the DOM that was never presented, use the
689
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
689
690
  */
690
691
  async dismiss(data, role) {
691
692
  var _a, _b;
@@ -853,9 +854,9 @@ const Toast = /*@__PURE__*/ proxyCustomElement(class Toast extends HTMLElement {
853
854
  if (layout === 'stacked' && startButtons.length > 0 && endButtons.length > 0) {
854
855
  printIonWarning('[ion-toast] - This toast is using start and end buttons with the stacked toast layout. We recommend following the best practice of using either start or end buttons with the stacked toast layout.', el);
855
856
  }
856
- return (h(Host, Object.assign({ key: 'd1ecd90c87700aad4685e230cdd430aa286b8791', tabindex: "-1" }, this.htmlAttributes, { style: {
857
+ return (h(Host, Object.assign({ key: '425be734aee0eeef281ab1609a9f982ce8b5e852', tabindex: "-1" }, this.htmlAttributes, { style: {
857
858
  zIndex: `${60000 + this.overlayIndex}`,
858
- }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '4bfc863417324de69e222054d5cf9c452038b41e', class: wrapperClass }, h("div", { key: '3417940afec0392e81b7d54c7cb00f3ab6c30d47', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '6bf878fbc85c01e1e5faa9d97d46255a6511a952', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '54b500348a9c37660c3aff37436d9188e4374947', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
859
+ }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '7c3ad1a8df9e21fc30fc179c7edebeabcf3c6874', class: wrapperClass }, h("div", { key: 'f950c21e8d7bf92653e0bd52e820ed6b84fa8cf5', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '0266241927dbe16799adb57f9fc11bd5372877b2', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '9ef4b87bad672af6a5b693af61375564daf1eeeb', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
859
860
  }
860
861
  get el() { return this; }
861
862
  static get watchers() { return {
@@ -1484,17 +1484,6 @@ const Modal = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
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 = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
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 = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
1904
1893
  return 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 = /*@__PURE__*/ proxyCustomElement(class Modal extends HTMLElement {
1966
1953
  const mode = getIonMode(this);
1967
1954
  const isCardModal = presentingElement !== undefined && mode === 'ios';
1968
1955
  const isHandleCycle = handleBehavior === 'cycle';
1969
- const isSheetModalWithHandle = isSheetModal && showHandle;
1970
- return (h(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 (h(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, [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: '90a6605a9564a699d6f66cf71cf6b506796a2963', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'a97d071395333bf803c0a9347bda000cf7500d8d', class: "modal-shadow" }), 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, [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',
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 && (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 && (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) })), 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" })), h("slot", { key: 'c32698350193c450327e97049daf8b8d1fda0d0e' }))));
1984
1968
  }
1985
1969
  get el() { return this; }
1986
1970
  static get watchers() { return {