@ionic/core 8.4.1-dev.11732219984.1b9a256c → 8.4.1-dev.11732305980.19d90e1c

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 (112) hide show
  1. package/components/header.js +21 -2
  2. package/components/index4.js +1 -1
  3. package/components/ion-menu.js +32 -5
  4. package/components/overlays.js +27 -12
  5. package/components/radio-group.js +8 -2
  6. package/dist/cjs/{index-dfb3f752.js → index-8e789962.js} +1 -1
  7. package/dist/cjs/index.cjs.js +2 -2
  8. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  9. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  10. package/dist/cjs/ion-app_8.cjs.entry.js +21 -2
  11. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  12. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  13. package/dist/cjs/ion-menu_3.cjs.entry.js +34 -7
  14. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  15. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  16. package/dist/cjs/ion-radio_2.cjs.entry.js +6 -1
  17. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  18. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  19. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  20. package/dist/cjs/ionic.cjs.js +1 -1
  21. package/dist/cjs/loader.cjs.js +1 -1
  22. package/dist/cjs/{overlays-ba0f6986.js → overlays-aa669eb8.js} +26 -11
  23. package/dist/collection/components/header/header.utils.js +21 -2
  24. package/dist/collection/components/menu/menu.ios.css +1 -4
  25. package/dist/collection/components/menu/menu.js +30 -2
  26. package/dist/collection/components/menu/menu.md.css +1 -4
  27. package/dist/collection/components/radio-group/radio-group.js +30 -1
  28. package/dist/collection/utils/focus-trap.js +8 -2
  29. package/dist/collection/utils/menu-controller/animations/overlay.js +1 -1
  30. package/dist/collection/utils/overlays.js +19 -9
  31. package/dist/docs.json +1 -1
  32. package/dist/esm/{index-49472991.js → index-24b48b06.js} +1 -1
  33. package/dist/esm/index.js +2 -2
  34. package/dist/esm/ion-action-sheet.entry.js +1 -1
  35. package/dist/esm/ion-alert.entry.js +1 -1
  36. package/dist/esm/ion-app_8.entry.js +21 -2
  37. package/dist/esm/ion-datetime_3.entry.js +1 -1
  38. package/dist/esm/ion-loading.entry.js +1 -1
  39. package/dist/esm/ion-menu_3.entry.js +34 -7
  40. package/dist/esm/ion-modal.entry.js +1 -1
  41. package/dist/esm/ion-popover.entry.js +1 -1
  42. package/dist/esm/ion-radio_2.entry.js +6 -1
  43. package/dist/esm/ion-select-modal.entry.js +1 -1
  44. package/dist/esm/ion-select_3.entry.js +1 -1
  45. package/dist/esm/ion-toast.entry.js +1 -1
  46. package/dist/esm/ionic.js +1 -1
  47. package/dist/esm/loader.js +1 -1
  48. package/dist/esm/{overlays-ae10d43d.js → overlays-e7b9d6d9.js} +27 -12
  49. package/dist/esm-es5/index-24b48b06.js +4 -0
  50. package/dist/esm-es5/index.js +1 -1
  51. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  52. package/dist/esm-es5/ion-alert.entry.js +1 -1
  53. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  54. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  55. package/dist/esm-es5/ion-loading.entry.js +1 -1
  56. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  57. package/dist/esm-es5/ion-modal.entry.js +1 -1
  58. package/dist/esm-es5/ion-popover.entry.js +1 -1
  59. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  60. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  61. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  62. package/dist/esm-es5/ion-toast.entry.js +1 -1
  63. package/dist/esm-es5/ionic.js +1 -1
  64. package/dist/esm-es5/loader.js +1 -1
  65. package/dist/esm-es5/overlays-e7b9d6d9.js +4 -0
  66. package/dist/ionic/index.esm.js +1 -1
  67. package/dist/ionic/ionic.esm.js +1 -1
  68. package/dist/ionic/p-0aa833fb.system.js +4 -0
  69. package/dist/ionic/{p-5393e8bb.system.entry.js → p-1046866e.system.entry.js} +1 -1
  70. package/dist/ionic/p-12a722b8.system.entry.js +4 -0
  71. package/dist/ionic/{p-5b5c1505.system.entry.js → p-14e159ea.system.entry.js} +1 -1
  72. package/dist/ionic/p-19a5be0a.entry.js +4 -0
  73. package/dist/ionic/{p-0161caf9.system.entry.js → p-1fe02220.system.entry.js} +1 -1
  74. package/dist/ionic/{p-f10b70a1.entry.js → p-2b9b78c7.entry.js} +1 -1
  75. package/dist/ionic/{p-2ae283ce.system.entry.js → p-2bd0ae94.system.entry.js} +2 -2
  76. package/dist/ionic/p-322c5fb4.system.js +1 -1
  77. package/dist/ionic/p-508d024a.entry.js +4 -0
  78. package/dist/ionic/{p-6734db42.system.entry.js → p-626fd66d.system.entry.js} +1 -1
  79. package/dist/ionic/{p-857ca696.system.entry.js → p-6499df44.system.entry.js} +1 -1
  80. package/dist/ionic/{p-a1dee17f.entry.js → p-6b280620.entry.js} +1 -1
  81. package/dist/ionic/{p-1c1b8e1f.entry.js → p-6d6cedc5.entry.js} +1 -1
  82. package/dist/ionic/{p-1ebd1e27.system.entry.js → p-7ddc46c3.system.entry.js} +1 -1
  83. package/dist/ionic/{p-ee7ba749.entry.js → p-8b8be2fd.entry.js} +1 -1
  84. package/dist/ionic/{p-a34b4d94.entry.js → p-942b5e13.entry.js} +1 -1
  85. package/dist/ionic/{p-a1b9a163.entry.js → p-982315a6.entry.js} +1 -1
  86. package/dist/ionic/{p-a1051806.entry.js → p-9e33104d.entry.js} +1 -1
  87. package/dist/ionic/{p-9910f786.entry.js → p-a43467d8.entry.js} +1 -1
  88. package/dist/ionic/{p-1b7605a7.system.entry.js → p-b2272f51.system.entry.js} +1 -1
  89. package/dist/ionic/{p-4a274c89.entry.js → p-b79ba17c.entry.js} +1 -1
  90. package/dist/ionic/p-b82d4cab.js +4 -0
  91. package/dist/ionic/{p-73d19329.system.js → p-c449820c.system.js} +1 -1
  92. package/dist/ionic/{p-5972efea.system.entry.js → p-ddaa748a.system.entry.js} +1 -1
  93. package/dist/ionic/{p-1e41f2aa.system.entry.js → p-e4f69534.system.entry.js} +1 -1
  94. package/dist/ionic/p-e6635685.js +4 -0
  95. package/dist/ionic/p-e7ed4a7f.system.js +4 -0
  96. package/dist/ionic/{p-d7e982e7.system.entry.js → p-e85d901b.system.entry.js} +1 -1
  97. package/dist/ionic/{p-e2252ad6.entry.js → p-fec61c32.entry.js} +1 -1
  98. package/dist/types/components/radio-group/radio-group.d.ts +2 -0
  99. package/dist/types/components.d.ts +1 -0
  100. package/dist/types/utils/focus-trap.d.ts +1 -1
  101. package/hydrate/index.js +87 -20
  102. package/hydrate/index.mjs +87 -20
  103. package/package.json +1 -1
  104. package/dist/esm-es5/index-49472991.js +0 -4
  105. package/dist/esm-es5/overlays-ae10d43d.js +0 -4
  106. package/dist/ionic/p-04fc24ee.system.js +0 -4
  107. package/dist/ionic/p-5c831f49.js +0 -4
  108. package/dist/ionic/p-7ed7d641.system.entry.js +0 -4
  109. package/dist/ionic/p-d174ceca.entry.js +0 -4
  110. package/dist/ionic/p-dec16890.system.js +0 -4
  111. package/dist/ionic/p-e43c2e19.js +0 -4
  112. package/dist/ionic/p-e9a173ed.entry.js +0 -4
@@ -151,11 +151,16 @@ export class RadioGroup {
151
151
  }
152
152
  }
153
153
  }
154
+ /** @internal */
155
+ async setFocus() {
156
+ const radioToFocus = this.getRadios().find((r) => r.tabIndex !== -1);
157
+ radioToFocus === null || radioToFocus === void 0 ? void 0 : radioToFocus.setFocus();
158
+ }
154
159
  render() {
155
160
  const { label, labelId, el, name, value } = this;
156
161
  const mode = getIonMode(this);
157
162
  renderHiddenInput(true, el, name, value, false);
158
- return h(Host, { key: '99f543b9caa8e2d30a80e7ea7ecf6b6fdacc76eb', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
163
+ return h(Host, { key: 'a853e38901f0f4ba17bbf21ebb5da5b5c20b327e', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
159
164
  }
160
165
  static get is() { return "ion-radio-group"; }
161
166
  static get properties() {
@@ -286,6 +291,30 @@ export class RadioGroup {
286
291
  }
287
292
  }];
288
293
  }
294
+ static get methods() {
295
+ return {
296
+ "setFocus": {
297
+ "complexType": {
298
+ "signature": "() => Promise<void>",
299
+ "parameters": [],
300
+ "references": {
301
+ "Promise": {
302
+ "location": "global",
303
+ "id": "global::Promise"
304
+ }
305
+ },
306
+ "return": "Promise<void>"
307
+ },
308
+ "docs": {
309
+ "text": "",
310
+ "tags": [{
311
+ "name": "internal",
312
+ "text": undefined
313
+ }]
314
+ }
315
+ }
316
+ };
317
+ }
289
318
  static get elementRef() { return "el"; }
290
319
  static get watchers() {
291
320
  return [{
@@ -14,7 +14,7 @@ import { focusVisibleElement } from "./helpers";
14
14
  * Note: We need this distinction because `disabled="false"` is
15
15
  * valid usage for the disabled property on ion-button.
16
16
  */
17
- export const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
17
+ export const focusableQueryString = '[tabindex]:not([tabindex^="-"]):not([hidden]):not([disabled]), input:not([type=hidden]):not([tabindex^="-"]):not([hidden]):not([disabled]), textarea:not([tabindex^="-"]):not([hidden]):not([disabled]), button:not([tabindex^="-"]):not([hidden]):not([disabled]), select:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-checkbox:not([tabindex^="-"]):not([hidden]):not([disabled]), ion-radio:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable:not([tabindex^="-"]):not([hidden]):not([disabled]), .ion-focusable[disabled="false"]:not([tabindex^="-"]):not([hidden])';
18
18
  /**
19
19
  * Focuses the first descendant in a context
20
20
  * that can receive focus. If none exists,
@@ -69,7 +69,13 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
69
69
  elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
70
70
  }
71
71
  if (elementToFocus) {
72
- focusVisibleElement(elementToFocus);
72
+ const radioGroup = elementToFocus.closest('ion-radio-group');
73
+ if (radioGroup) {
74
+ radioGroup.setFocus();
75
+ }
76
+ else {
77
+ focusVisibleElement(elementToFocus);
78
+ }
73
79
  }
74
80
  else {
75
81
  // Focus fallback element instead of letting focus escape
@@ -25,7 +25,7 @@ export const menuOverlayAnimation = (menu) => {
25
25
  closedX = -width + 'px';
26
26
  openedX = '0px';
27
27
  }
28
- menuAnimation.addElement(menu.menuInnerEl).fromTo('left', `${closedX}`, `${openedX}`);
28
+ menuAnimation.addElement(menu.menuInnerEl).fromTo('transform', `translateX(${closedX})`, `translateX(${openedX})`);
29
29
  const mode = getIonMode(menu);
30
30
  const isIos = mode === 'ios';
31
31
  const opacity = isIos ? 0.2 : 0.25;
@@ -11,6 +11,7 @@ import { BACKDROP_NO_SCROLL } from "./gesture/gesture-controller";
11
11
  import { OVERLAY_BACK_BUTTON_PRIORITY } from "./hardware-back-button";
12
12
  import { addEventListener, componentOnReady, focusVisibleElement, getElementRoot, removeEventListener, } from "./helpers";
13
13
  import { printIonWarning } from "./logging";
14
+ import { isPlatform } from "./platform";
14
15
  let lastOverlayIndex = 0;
15
16
  let lastId = 0;
16
17
  export const activeAnimations = new WeakMap();
@@ -810,21 +811,30 @@ export const createTriggerController = () => {
810
811
  * like TalkBack do not announce or interact with the content until the
811
812
  * animation is complete, avoiding confusion for users.
812
813
  *
813
- * If the overlay is being presented, it prevents focus rings from appearing
814
- * in incorrect positions due to the transition (specifically `transform`
815
- * styles), ensuring that when aria-hidden is removed, the focus rings are
816
- * correctly displayed in the final location of the elements.
814
+ * When the overlay is presented on an Android device, TalkBack's focus rings
815
+ * may appear in the wrong position due to the transition (specifically
816
+ * `transform` styles). This occurs because the focus rings are initially
817
+ * displayed at the starting position of the elements before the transition
818
+ * begins. This workaround ensures the focus rings do not appear in the
819
+ * incorrect location.
820
+ *
821
+ * If this solution is applied to iOS devices, then it leads to a bug where
822
+ * the overlays cannot be accessed by screen readers. This is due to
823
+ * VoiceOver not being able to update the accessibility tree when the
824
+ * `aria-hidden` is removed.
817
825
  *
818
826
  * @param overlay - The overlay that is being animated.
819
827
  */
820
828
  const hideAnimatingOverlayFromScreenReaders = (overlay) => {
821
829
  if (doc === undefined)
822
830
  return;
823
- /**
824
- * Once the animation is complete, this attribute will be removed.
825
- * This is done at the end of the `present` method.
826
- */
827
- overlay.setAttribute('aria-hidden', 'true');
831
+ if (isPlatform('android')) {
832
+ /**
833
+ * Once the animation is complete, this attribute will be removed.
834
+ * This is done at the end of the `present` method.
835
+ */
836
+ overlay.setAttribute('aria-hidden', 'true');
837
+ }
828
838
  };
829
839
  /**
830
840
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2024-11-21T20:15:14",
2
+ "timestamp": "2024-11-22T20:08:22",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.20.0",
@@ -46,7 +46,7 @@ const menuOverlayAnimation = (menu) => {
46
46
  closedX = -width + 'px';
47
47
  openedX = '0px';
48
48
  }
49
- menuAnimation.addElement(menu.menuInnerEl).fromTo('left', `${closedX}`, `${openedX}`);
49
+ menuAnimation.addElement(menu.menuInnerEl).fromTo('transform', `translateX(${closedX})`, `translateX(${openedX})`);
50
50
  const mode = getIonMode(menu);
51
51
  const isIos = mode === 'ios';
52
52
  const opacity = isIos ? 0.2 : 0.25;
package/dist/esm/index.js CHANGED
@@ -11,8 +11,8 @@ export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-glo
11
11
  export { c as componentOnReady } from './helpers-da915de8.js';
12
12
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-49c88215.js';
13
13
  export { o as openURL } from './theme-01f3f29c.js';
14
- export { m as menuController } from './index-49472991.js';
15
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-ae10d43d.js';
14
+ export { m as menuController } from './index-24b48b06.js';
15
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-e7b9d6d9.js';
16
16
  import './index-a5d50daf.js';
17
17
  import './index-28849c61.js';
18
18
  import './index-9b0d46f4.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, e as readTask, h, f as Host, i
5
5
  import { c as createButtonActiveGesture } from './button-active-f6503382.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-ae10d43d.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-e7b9d6d9.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { c as createButtonActiveGesture } from './button-active-f6503382.js';
7
7
  import { r as raf } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-ae10d43d.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-e7b9d6d9.js';
10
10
  import { g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -797,13 +797,32 @@ mainHeaderIndex, scrollHeaderIndex, scrollEl) => {
797
797
  };
798
798
  const setHeaderActive = (headerIndex, active = true) => {
799
799
  const headerEl = headerIndex.el;
800
+ const toolbars = headerIndex.toolbars;
801
+ const ionTitles = toolbars.map((toolbar) => toolbar.ionTitleEl);
800
802
  if (active) {
801
803
  headerEl.classList.remove('header-collapse-condense-inactive');
802
- headerEl.removeAttribute('aria-hidden');
804
+ ionTitles.forEach((ionTitle) => {
805
+ if (ionTitle) {
806
+ ionTitle.removeAttribute('aria-hidden');
807
+ }
808
+ });
803
809
  }
804
810
  else {
805
811
  headerEl.classList.add('header-collapse-condense-inactive');
806
- headerEl.setAttribute('aria-hidden', 'true');
812
+ /**
813
+ * The small title should only be accessed by screen readers
814
+ * when the large title collapses into the small title due
815
+ * to scrolling.
816
+ *
817
+ * Originally, the header was given `aria-hidden="true"`
818
+ * but this caused issues with screen readers not being
819
+ * able to access any focusable elements within the header.
820
+ */
821
+ ionTitles.forEach((ionTitle) => {
822
+ if (ionTitle) {
823
+ ionTitle.setAttribute('aria-hidden', 'true');
824
+ }
825
+ });
807
826
  }
808
827
  };
809
828
  const scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => {
@@ -11,7 +11,7 @@ import { c as chevronBack, o as chevronForward, l as chevronDown, p as caretUpSh
11
11
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { g as generateDayAriaLabel, a as getDay, i as isBefore, b as isAfter, c as isSameDay, d as getPreviousMonth, e as getNextMonth, v as validateParts, f as getPartsFromCalendarDay, h as getNextYear, j as getPreviousYear, k as getEndOfWeek, l as getStartOfWeek, m as getPreviousDay, n as getNextDay, o as getPreviousWeek, p as getNextWeek, q as parseMinParts, r as parseMaxParts, s as parseDate, w as warnIfValueOutOfBounds, t as convertToArrayOfNumbers, u as convertDataToISO, x as getToday, y as getClosestValidDate, z as generateMonths, A as getNumDaysInMonth, B as getCombinedDateColumnData, C as getMonthColumnData, D as getDayColumnData, E as getYearColumnData, F as isMonthFirstLocale, G as getTimeColumnsData, H as isLocaleDayPeriodRTL, I as getDaysOfWeek, J as getMonthAndYear, K as getDaysOfMonth, L as getHourCycle, M as getLocalizedTime, N as getLocalizedDateTime, O as formatValue, P as clampDate, Q as parseAmPm, R as calculateHourFromAMPM } from './data-ae11fd43.js';
13
13
  import { c as createLockController } from './lock-controller-316928be.js';
14
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-ae10d43d.js';
14
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-e7b9d6d9.js';
15
15
  import { c as createAnimation } from './animation-eab5a4ca.js';
16
16
  import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-ac164e4c.js';
17
17
  import './index-a5d50daf.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, f as Host, i as getElement
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-49c88215.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-ae10d43d.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-e7b9d6d9.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -3,23 +3,23 @@
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, f as Host, i as getElement } from './index-28849c61.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
6
- import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-ae10d43d.js';
6
+ import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-e7b9d6d9.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-314a54f6.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-06ef3c3e.js';
9
9
  import { n as isEndSide, i as inheritAriaAttributes, m as assert, j as clamp } from './helpers-da915de8.js';
10
- import { m as menuController } from './index-49472991.js';
10
+ import { m as menuController } from './index-24b48b06.js';
11
+ import { c as config, b as getIonMode, a as isPlatform } from './ionic-global-c81d82ab.js';
11
12
  import { h as hostContext, c as createColorClasses } from './theme-01f3f29c.js';
12
- import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
13
13
  import { u as menuOutline, v as menuSharp } from './index-e2cf2ceb.js';
14
14
  import './index-a5d50daf.js';
15
15
  import './framework-delegate-63d1a679.js';
16
16
  import './index-9b0d46f4.js';
17
17
  import './animation-eab5a4ca.js';
18
18
 
19
- const menuIosCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{display:-ms-flexbox;display:flex;position:absolute;right:unset;left:-100%;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);-webkit-transform:none;transform:none;background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-push){z-index:1000}:host(.menu-type-push) .show-backdrop{display:block}";
19
+ const menuIosCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-push){z-index:1000}:host(.menu-type-push) .show-backdrop{display:block}";
20
20
  const IonMenuIosStyle0 = menuIosCss;
21
21
 
22
- const menuMdCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{display:-ms-flexbox;display:flex;position:absolute;right:unset;left:-100%;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);-webkit-transform:none;transform:none;background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-overlay) .menu-inner{-webkit-box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18);box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18)}";
22
+ const menuMdCss = ":host{--width:304px;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--background:var(--ion-background-color, #fff);left:0;right:0;top:0;bottom:0;display:none;position:absolute;contain:strict}:host(.show-menu){display:block}.menu-inner{-webkit-transform:translateX(-9999px);transform:translateX(-9999px);display:-ms-flexbox;display:flex;position:absolute;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:justify;justify-content:space-between;width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);background:var(--background);contain:strict}:host(.menu-side-start) .menu-inner{--ion-safe-area-right:0px;top:0;bottom:0}:host(.menu-side-start) .menu-inner{inset-inline-start:0;inset-inline-end:auto}:host-context([dir=rtl]):host(.menu-side-start) .menu-inner,:host-context([dir=rtl]).menu-side-start .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}@supports selector(:dir(rtl)){:host(.menu-side-start:dir(rtl)) .menu-inner{--ion-safe-area-right:unset;--ion-safe-area-left:0px}}:host(.menu-side-end) .menu-inner{--ion-safe-area-left:0px;top:0;bottom:0}:host(.menu-side-end) .menu-inner{inset-inline-start:auto;inset-inline-end:0}:host-context([dir=rtl]):host(.menu-side-end) .menu-inner,:host-context([dir=rtl]).menu-side-end .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}@supports selector(:dir(rtl)){:host(.menu-side-end:dir(rtl)) .menu-inner{--ion-safe-area-left:unset;--ion-safe-area-right:0px}}ion-backdrop{display:none;opacity:0.01;z-index:-1}@media (max-width: 340px){.menu-inner{--width:264px}}:host(.menu-type-reveal){z-index:0}:host(.menu-type-reveal.show-menu) .menu-inner{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}:host(.menu-type-overlay){z-index:1000}:host(.menu-type-overlay) .show-backdrop{display:block;cursor:pointer}:host(.menu-pane-visible){-ms-flex:0 1 auto;flex:0 1 auto;width:var(--side-width, var(--width));min-width:var(--side-min-width, var(--min-width));max-width:var(--side-max-width, var(--max-width))}:host(.menu-pane-visible.split-pane-side){left:0;right:0;top:0;bottom:0;position:relative;-webkit-box-shadow:none;box-shadow:none;z-index:0}:host(.menu-pane-visible.split-pane-side.menu-enabled){display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0}:host(.menu-pane-visible.split-pane-side){-ms-flex-order:-1;order:-1}:host(.menu-pane-visible.split-pane-side[side=end]){-ms-flex-order:1;order:1}:host(.menu-pane-visible) .menu-inner{left:0;right:0;width:auto;-webkit-transform:none;transform:none;-webkit-box-shadow:none;box-shadow:none}:host(.menu-pane-visible) ion-backdrop{display:hidden !important}:host(.menu-pane-visible.split-pane-side){-webkit-border-start:0;border-inline-start:0;-webkit-border-end:var(--border);border-inline-end:var(--border);border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-pane-visible.split-pane-side[side=end]){-webkit-border-start:var(--border);border-inline-start:var(--border);-webkit-border-end:0;border-inline-end:0;border-top:0;border-bottom:0;min-width:var(--side-min-width);max-width:var(--side-max-width)}:host(.menu-type-overlay) .menu-inner{-webkit-box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18);box-shadow:4px 0px 16px rgba(0, 0, 0, 0.18)}";
23
23
  const IonMenuMdStyle0 = menuMdCss;
24
24
 
25
25
  const iosEasing = 'cubic-bezier(0.32,0.72,0,1)';
@@ -462,6 +462,22 @@ const Menu = class {
462
462
  }
463
463
  beforeAnimation(shouldOpen, role) {
464
464
  assert(!this.isAnimating, '_before() should not be called while animating');
465
+ /**
466
+ * When the menu is presented on an Android device, TalkBack's focus rings
467
+ * may appear in the wrong position due to the transition (specifically
468
+ * `transform` styles). This occurs because the focus rings are initially
469
+ * displayed at the starting position of the elements before the transition
470
+ * begins. This workaround ensures the focus rings do not appear in the
471
+ * incorrect location.
472
+ *
473
+ * If this solution is applied to iOS devices, then it leads to a bug where
474
+ * the overlays cannot be accessed by screen readers. This is due to
475
+ * VoiceOver not being able to update the accessibility tree when the
476
+ * `aria-hidden` is removed.
477
+ */
478
+ if (isPlatform('android')) {
479
+ this.el.setAttribute('aria-hidden', 'true');
480
+ }
465
481
  // this places the menu into the correct location before it animates in
466
482
  // this css class doesn't actually kick off any animations
467
483
  this.el.classList.add(SHOW_MENU);
@@ -514,6 +530,16 @@ const Menu = class {
514
530
  this.blocker.unblock();
515
531
  }
516
532
  if (isOpen) {
533
+ /**
534
+ * When the menu is presented on an Android device, TalkBack's focus rings
535
+ * may appear in the wrong position due to the transition (specifically
536
+ * `transform` styles). The menu is hidden from screen readers during the
537
+ * transition to prevent this. Once the transition is complete, the menu
538
+ * is shown again.
539
+ */
540
+ if (isPlatform('android')) {
541
+ this.el.removeAttribute('aria-hidden');
542
+ }
517
543
  // emit open event
518
544
  this.ionDidOpen.emit();
519
545
  /**
@@ -529,6 +555,7 @@ const Menu = class {
529
555
  document.addEventListener('focus', this.handleFocus, true);
530
556
  }
531
557
  else {
558
+ this.el.removeAttribute('aria-hidden');
532
559
  // remove css classes and unhide content from screen readers
533
560
  this.el.classList.remove(SHOW_MENU);
534
561
  /**
@@ -595,14 +622,14 @@ const Menu = class {
595
622
  * the ionBackButton listener in the menu controller
596
623
  * will handle closing the menu when Escape is pressed.
597
624
  */
598
- return (h(Host, { key: '5aaea91873d0885b97304372223b2a6ed16ca28b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
625
+ return (h(Host, { key: 'da96fdb4c5ddf60e615cc4cdda7ccdb3fd7e089b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
599
626
  [mode]: true,
600
627
  [`menu-type-${type}`]: true,
601
628
  'menu-enabled': !disabled,
602
629
  [`menu-side-${side}`]: true,
603
630
  'menu-pane-visible': isPaneVisible,
604
631
  'split-pane-side': hostContext('ion-split-pane', el),
605
- } }, h("div", { key: '3ba822411ad11eff52c518fecf1b2a5b47e0b678', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: 'd28a78e98493b21d43ea8b19e96b21547adf1916' })), h("ion-backdrop", { key: '0468c15d111737f5cb646918dcfacedadf907a8f', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
632
+ } }, h("div", { key: '894e680fe227534711128c7aca980964ddb5a08a', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, h("slot", { key: 'e9f5934518dc0cceaeadf1f2820614595fec6bc9' })), h("ion-backdrop", { key: '7282077817657b1bb6c155f1404c0a519fece993', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
606
633
  }
607
634
  get el() { return getElement(this); }
608
635
  static get watchers() { return {
@@ -8,7 +8,7 @@ import { g as getElementRoot, j as clamp, r as raf, h as inheritAttributes, k as
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
9
  import { p as printIonWarning } from './index-9b0d46f4.js';
10
10
  import { g as getCapacitor } from './capacitor-59395cbd.js';
11
- import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-ae10d43d.js';
11
+ import { G as GESTURE, O as OVERLAY_GESTURE_PRIORITY, F as FOCUS_TRAP_DISABLE_CLASS, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-e7b9d6d9.js';
12
12
  import { g as getClassMap } from './theme-01f3f29c.js';
13
13
  import { e as deepReady, w as waitForMount } from './index-3ad7f18b.js';
14
14
  import { b as getIonMode, c as config } from './ionic-global-c81d82ab.js';
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { r as registerInstance, d as createEvent, h, f as Host, i as getElement } from './index-28849c61.js';
5
- import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-ae10d43d.js';
5
+ import { B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, n as focusFirstDescendant, g as dismiss, h as eventMethod, F as FOCUS_TRAP_DISABLE_CLASS } from './overlays-e7b9d6d9.js';
6
6
  import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-63d1a679.js';
7
7
  import { r as raf, g as getElementRoot, a as addEventListener, k as hasLazyBuild } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
@@ -298,11 +298,16 @@ const RadioGroup = class {
298
298
  }
299
299
  }
300
300
  }
301
+ /** @internal */
302
+ async setFocus() {
303
+ const radioToFocus = this.getRadios().find((r) => r.tabIndex !== -1);
304
+ radioToFocus === null || radioToFocus === void 0 ? void 0 : radioToFocus.setFocus();
305
+ }
301
306
  render() {
302
307
  const { label, labelId, el, name, value } = this;
303
308
  const mode = getIonMode(this);
304
309
  renderHiddenInput(true, el, name, value, false);
305
- return h(Host, { key: '99f543b9caa8e2d30a80e7ea7ecf6b6fdacc76eb', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
310
+ return h(Host, { key: 'a853e38901f0f4ba17bbf21ebb5da5b5c20b327e', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
306
311
  }
307
312
  get el() { return getElement(this); }
308
313
  static get watchers() { return {
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, h, j as forceUpdate, f as Host, i as getElement } from './index-28849c61.js';
5
5
  import { b as getIonMode } from './ionic-global-c81d82ab.js';
6
- import { s as safeCall } from './overlays-ae10d43d.js';
6
+ import { s as safeCall } from './overlays-e7b9d6d9.js';
7
7
  import { g as getClassMap } from './theme-01f3f29c.js';
8
8
  import './index-a5d50daf.js';
9
9
  import './helpers-da915de8.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, h, f as Host, i as getElement,
5
5
  import { c as createNotchController } from './notch-controller-55b09e11.js';
6
6
  import { i as isOptionSelected, c as compareOptions } from './compare-with-utils-a96ff2ea.js';
7
7
  import { h as inheritAttributes, f as focusVisibleElement, d as renderHiddenInput } from './helpers-da915de8.js';
8
- import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-ae10d43d.js';
8
+ import { c as popoverController, b as actionSheetController, a as alertController, m as modalController, s as safeCall } from './overlays-e7b9d6d9.js';
9
9
  import { i as isRTL } from './dir-babeabeb.js';
10
10
  import { h as hostContext, c as createColorClasses, g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { w as watchForOptions } from './watch-options-c2911ace.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { g as getElementRoot, r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
8
  import { p as printIonWarning } from './index-9b0d46f4.js';
9
- import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-ae10d43d.js';
9
+ import { O as OVERLAY_GESTURE_PRIORITY, d as createDelegateController, e as createTriggerController, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall, G as GESTURE } from './overlays-e7b9d6d9.js';
10
10
  import { c as createColorClasses, g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-c81d82ab.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';