voyager-ionic-core 8.4.0 → 8.4.1

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 (110) hide show
  1. package/components/header.js +21 -2
  2. package/components/ion-item-sliding.js +3 -1
  3. package/components/ion-menu.js +30 -3
  4. package/components/ion-toast.js +2 -2
  5. package/components/overlays.js +27 -12
  6. package/components/radio-group.js +8 -2
  7. package/dist/cjs/index.cjs.js +1 -1
  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-item-option_3.cjs.entry.js +3 -1
  13. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  14. package/dist/cjs/ion-menu_3.cjs.entry.js +31 -4
  15. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  16. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  17. package/dist/cjs/ion-radio_2.cjs.entry.js +6 -1
  18. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  19. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  20. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  21. package/dist/cjs/ionic.cjs.js +1 -1
  22. package/dist/cjs/loader.cjs.js +1 -1
  23. package/dist/cjs/{overlays-ba0f6986.js → overlays-aa669eb8.js} +26 -11
  24. package/dist/collection/components/header/header.utils.js +21 -2
  25. package/dist/collection/components/item-sliding/item-sliding.js +3 -1
  26. package/dist/collection/components/menu/menu.js +30 -2
  27. package/dist/collection/components/radio-group/radio-group.js +30 -1
  28. package/dist/collection/components/toast/toast.ios.css +1 -1
  29. package/dist/collection/components/toast/toast.md.css +1 -1
  30. package/dist/collection/utils/focus-trap.js +8 -2
  31. package/dist/collection/utils/overlays.js +19 -9
  32. package/dist/docs.json +1 -1
  33. package/dist/esm/index.js +1 -1
  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-item-option_3.entry.js +3 -1
  39. package/dist/esm/ion-loading.entry.js +1 -1
  40. package/dist/esm/ion-menu_3.entry.js +31 -4
  41. package/dist/esm/ion-modal.entry.js +1 -1
  42. package/dist/esm/ion-popover.entry.js +1 -1
  43. package/dist/esm/ion-radio_2.entry.js +6 -1
  44. package/dist/esm/ion-select-modal.entry.js +1 -1
  45. package/dist/esm/ion-select_3.entry.js +1 -1
  46. package/dist/esm/ion-toast.entry.js +3 -3
  47. package/dist/esm/ionic.js +1 -1
  48. package/dist/esm/loader.js +1 -1
  49. package/dist/esm/{overlays-ae10d43d.js → overlays-e7b9d6d9.js} +27 -12
  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-item-option_3.entry.js +1 -1
  56. package/dist/esm-es5/ion-loading.entry.js +1 -1
  57. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  58. package/dist/esm-es5/ion-modal.entry.js +1 -1
  59. package/dist/esm-es5/ion-popover.entry.js +1 -1
  60. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  61. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  62. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  63. package/dist/esm-es5/ion-toast.entry.js +1 -1
  64. package/dist/esm-es5/ionic.js +1 -1
  65. package/dist/esm-es5/loader.js +1 -1
  66. package/dist/esm-es5/overlays-e7b9d6d9.js +4 -0
  67. package/dist/ionic/index.esm.js +1 -1
  68. package/dist/ionic/ionic.esm.js +1 -1
  69. package/dist/ionic/{p-9ee1e8a6.entry.js → p-04909654.entry.js} +1 -1
  70. package/dist/ionic/p-0aa833fb.system.js +4 -0
  71. package/dist/ionic/{p-5393e8bb.system.entry.js → p-1046866e.system.entry.js} +1 -1
  72. package/dist/ionic/p-12a722b8.system.entry.js +4 -0
  73. package/dist/ionic/{p-4b000207.entry.js → p-12c45a7c.entry.js} +1 -1
  74. package/dist/ionic/{p-5b5c1505.system.entry.js → p-14e159ea.system.entry.js} +1 -1
  75. package/dist/ionic/{p-a49378bb.system.entry.js → p-17a9ca63.system.entry.js} +1 -1
  76. package/dist/ionic/{p-0161caf9.system.entry.js → p-1fe02220.system.entry.js} +1 -1
  77. package/dist/ionic/{p-f10b70a1.entry.js → p-2b9b78c7.entry.js} +1 -1
  78. package/dist/ionic/{p-5bd39e5e.system.entry.js → p-2bd0ae94.system.entry.js} +2 -2
  79. package/dist/ionic/p-322c5fb4.system.js +1 -1
  80. package/dist/ionic/{p-4561cd09.system.entry.js → p-404aede0.system.entry.js} +1 -1
  81. package/dist/ionic/p-508d024a.entry.js +4 -0
  82. package/dist/ionic/{p-6734db42.system.entry.js → p-626fd66d.system.entry.js} +1 -1
  83. package/dist/ionic/{p-3b419d79.system.entry.js → p-6416c34c.system.entry.js} +1 -1
  84. package/dist/ionic/{p-857ca696.system.entry.js → p-6499df44.system.entry.js} +1 -1
  85. package/dist/ionic/{p-db0c8e7d.entry.js → p-6b280620.entry.js} +1 -1
  86. package/dist/ionic/{p-1c1b8e1f.entry.js → p-6d6cedc5.entry.js} +1 -1
  87. package/dist/ionic/{p-1ebd1e27.system.entry.js → p-7ddc46c3.system.entry.js} +1 -1
  88. package/dist/ionic/{p-a34b4d94.entry.js → p-942b5e13.entry.js} +1 -1
  89. package/dist/ionic/{p-a1b9a163.entry.js → p-982315a6.entry.js} +1 -1
  90. package/dist/ionic/{p-a1051806.entry.js → p-9e33104d.entry.js} +1 -1
  91. package/dist/ionic/{p-9910f786.entry.js → p-a43467d8.entry.js} +1 -1
  92. package/dist/ionic/{p-1b7605a7.system.entry.js → p-b2272f51.system.entry.js} +1 -1
  93. package/dist/ionic/{p-4a274c89.entry.js → p-b79ba17c.entry.js} +1 -1
  94. package/dist/ionic/{p-8f05ba3b.system.js → p-c449820c.system.js} +1 -1
  95. package/dist/ionic/{p-1e41f2aa.system.entry.js → p-e4f69534.system.entry.js} +1 -1
  96. package/dist/ionic/p-e6635685.js +4 -0
  97. package/dist/ionic/p-fbf284c7.entry.js +4 -0
  98. package/dist/ionic/{p-e2252ad6.entry.js → p-fec61c32.entry.js} +1 -1
  99. package/dist/types/components/radio-group/radio-group.d.ts +2 -0
  100. package/dist/types/components.d.ts +1 -0
  101. package/dist/types/utils/focus-trap.d.ts +1 -1
  102. package/hydrate/index.js +89 -20
  103. package/hydrate/index.mjs +89 -20
  104. package/package.json +1 -1
  105. package/dist/esm-es5/overlays-ae10d43d.js +0 -4
  106. package/dist/ionic/p-0437ace4.system.entry.js +0 -4
  107. package/dist/ionic/p-04fc24ee.system.js +0 -4
  108. package/dist/ionic/p-09cf2394.entry.js +0 -4
  109. package/dist/ionic/p-5c831f49.js +0 -4
  110. package/dist/ionic/p-5f79d8c5.entry.js +0 -4
@@ -52,5 +52,7 @@ export declare class RadioGroup implements ComponentInterface {
52
52
  private emitValueChange;
53
53
  private onClick;
54
54
  onKeydown(ev: KeyboardEvent): void;
55
+ /** @internal */
56
+ setFocus(): Promise<void>;
55
57
  render(): any;
56
58
  }
@@ -2303,6 +2303,7 @@ export namespace Components {
2303
2303
  * The name of the control, which is submitted with the form data.
2304
2304
  */
2305
2305
  "name": string;
2306
+ "setFocus": () => Promise<void>;
2306
2307
  /**
2307
2308
  * the value of the radio group.
2308
2309
  */
@@ -10,7 +10,7 @@
10
10
  * Note: We need this distinction because `disabled="false"` is
11
11
  * valid usage for the disabled property on ion-button.
12
12
  */
13
- export declare 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])";
13
+ export declare 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])";
14
14
  /**
15
15
  * Focuses the first descendant in a context
16
16
  * that can receive focus. If none exists,
package/hydrate/index.js CHANGED
@@ -4392,7 +4392,7 @@ const createLockController = () => {
4392
4392
  * Note: We need this distinction because `disabled="false"` is
4393
4393
  * valid usage for the disabled property on ion-button.
4394
4394
  */
4395
- 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])';
4395
+ 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])';
4396
4396
  /**
4397
4397
  * Focuses the first descendant in a context
4398
4398
  * that can receive focus. If none exists,
@@ -4447,7 +4447,13 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
4447
4447
  elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
4448
4448
  }
4449
4449
  if (elementToFocus) {
4450
- focusVisibleElement(elementToFocus);
4450
+ const radioGroup = elementToFocus.closest('ion-radio-group');
4451
+ if (radioGroup) {
4452
+ radioGroup.setFocus();
4453
+ }
4454
+ else {
4455
+ focusVisibleElement(elementToFocus);
4456
+ }
4451
4457
  }
4452
4458
  else {
4453
4459
  // Focus fallback element instead of letting focus escape
@@ -5398,21 +5404,30 @@ const createTriggerController = () => {
5398
5404
  * like TalkBack do not announce or interact with the content until the
5399
5405
  * animation is complete, avoiding confusion for users.
5400
5406
  *
5401
- * If the overlay is being presented, it prevents focus rings from appearing
5402
- * in incorrect positions due to the transition (specifically `transform`
5403
- * styles), ensuring that when aria-hidden is removed, the focus rings are
5404
- * correctly displayed in the final location of the elements.
5407
+ * When the overlay is presented on an Android device, TalkBack's focus rings
5408
+ * may appear in the wrong position due to the transition (specifically
5409
+ * `transform` styles). This occurs because the focus rings are initially
5410
+ * displayed at the starting position of the elements before the transition
5411
+ * begins. This workaround ensures the focus rings do not appear in the
5412
+ * incorrect location.
5413
+ *
5414
+ * If this solution is applied to iOS devices, then it leads to a bug where
5415
+ * the overlays cannot be accessed by screen readers. This is due to
5416
+ * VoiceOver not being able to update the accessibility tree when the
5417
+ * `aria-hidden` is removed.
5405
5418
  *
5406
5419
  * @param overlay - The overlay that is being animated.
5407
5420
  */
5408
5421
  const hideAnimatingOverlayFromScreenReaders = (overlay) => {
5409
5422
  if (doc === undefined)
5410
5423
  return;
5411
- /**
5412
- * Once the animation is complete, this attribute will be removed.
5413
- * This is done at the end of the `present` method.
5414
- */
5415
- overlay.setAttribute('aria-hidden', 'true');
5424
+ if (isPlatform('android')) {
5425
+ /**
5426
+ * Once the animation is complete, this attribute will be removed.
5427
+ * This is done at the end of the `present` method.
5428
+ */
5429
+ overlay.setAttribute('aria-hidden', 'true');
5430
+ }
5416
5431
  };
5417
5432
  /**
5418
5433
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
@@ -13914,13 +13929,32 @@ mainHeaderIndex, scrollHeaderIndex, scrollEl) => {
13914
13929
  };
13915
13930
  const setHeaderActive = (headerIndex, active = true) => {
13916
13931
  const headerEl = headerIndex.el;
13932
+ const toolbars = headerIndex.toolbars;
13933
+ const ionTitles = toolbars.map((toolbar) => toolbar.ionTitleEl);
13917
13934
  if (active) {
13918
13935
  headerEl.classList.remove('header-collapse-condense-inactive');
13919
- headerEl.removeAttribute('aria-hidden');
13936
+ ionTitles.forEach((ionTitle) => {
13937
+ if (ionTitle) {
13938
+ ionTitle.removeAttribute('aria-hidden');
13939
+ }
13940
+ });
13920
13941
  }
13921
13942
  else {
13922
13943
  headerEl.classList.add('header-collapse-condense-inactive');
13923
- headerEl.setAttribute('aria-hidden', 'true');
13944
+ /**
13945
+ * The small title should only be accessed by screen readers
13946
+ * when the large title collapses into the small title due
13947
+ * to scrolling.
13948
+ *
13949
+ * Originally, the header was given `aria-hidden="true"`
13950
+ * but this caused issues with screen readers not being
13951
+ * able to access any focusable elements within the header.
13952
+ */
13953
+ ionTitles.forEach((ionTitle) => {
13954
+ if (ionTitle) {
13955
+ ionTitle.setAttribute('aria-hidden', 'true');
13956
+ }
13957
+ });
13924
13958
  }
13925
13959
  };
13926
13960
  const scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => {
@@ -16363,6 +16397,8 @@ class ItemSliding {
16363
16397
  optsWidth = -this.optsWidthLeftSide;
16364
16398
  openAmount = optsWidth + (openAmount - optsWidth) * ELASTIC_FACTOR;
16365
16399
  }
16400
+ if (openAmount === 0)
16401
+ return;
16366
16402
  this.setOpenAmount(openAmount, false);
16367
16403
  }
16368
16404
  onEnd(gesture) {
@@ -16477,7 +16513,7 @@ class ItemSliding {
16477
16513
  }
16478
16514
  render() {
16479
16515
  const mode = getIonMode$1(this);
16480
- return (hAsync(Host, { key: '47a3edd2ef2080ed9cfc2784277dea09785c7dc4', class: {
16516
+ return (hAsync(Host, { key: 'a5216b11d92a1e1afed09d139212e0df81fdab79', class: {
16481
16517
  [mode]: true,
16482
16518
  'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
16483
16519
  'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
@@ -17816,6 +17852,22 @@ class Menu {
17816
17852
  }
17817
17853
  beforeAnimation(shouldOpen, role) {
17818
17854
  assert(!this.isAnimating, '_before() should not be called while animating');
17855
+ /**
17856
+ * When the menu is presented on an Android device, TalkBack's focus rings
17857
+ * may appear in the wrong position due to the transition (specifically
17858
+ * `transform` styles). This occurs because the focus rings are initially
17859
+ * displayed at the starting position of the elements before the transition
17860
+ * begins. This workaround ensures the focus rings do not appear in the
17861
+ * incorrect location.
17862
+ *
17863
+ * If this solution is applied to iOS devices, then it leads to a bug where
17864
+ * the overlays cannot be accessed by screen readers. This is due to
17865
+ * VoiceOver not being able to update the accessibility tree when the
17866
+ * `aria-hidden` is removed.
17867
+ */
17868
+ if (isPlatform('android')) {
17869
+ this.el.setAttribute('aria-hidden', 'true');
17870
+ }
17819
17871
  // this places the menu into the correct location before it animates in
17820
17872
  // this css class doesn't actually kick off any animations
17821
17873
  this.el.classList.add(SHOW_MENU);
@@ -17868,6 +17920,16 @@ class Menu {
17868
17920
  this.blocker.unblock();
17869
17921
  }
17870
17922
  if (isOpen) {
17923
+ /**
17924
+ * When the menu is presented on an Android device, TalkBack's focus rings
17925
+ * may appear in the wrong position due to the transition (specifically
17926
+ * `transform` styles). The menu is hidden from screen readers during the
17927
+ * transition to prevent this. Once the transition is complete, the menu
17928
+ * is shown again.
17929
+ */
17930
+ if (isPlatform('android')) {
17931
+ this.el.removeAttribute('aria-hidden');
17932
+ }
17871
17933
  // emit open event
17872
17934
  this.ionDidOpen.emit();
17873
17935
  /**
@@ -17883,6 +17945,7 @@ class Menu {
17883
17945
  document.addEventListener('focus', this.handleFocus, true);
17884
17946
  }
17885
17947
  else {
17948
+ this.el.removeAttribute('aria-hidden');
17886
17949
  // remove css classes and unhide content from screen readers
17887
17950
  this.el.classList.remove(SHOW_MENU);
17888
17951
  /**
@@ -17949,14 +18012,14 @@ class Menu {
17949
18012
  * the ionBackButton listener in the menu controller
17950
18013
  * will handle closing the menu when Escape is pressed.
17951
18014
  */
17952
- return (hAsync(Host, { key: '5aaea91873d0885b97304372223b2a6ed16ca28b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
18015
+ return (hAsync(Host, { key: 'da96fdb4c5ddf60e615cc4cdda7ccdb3fd7e089b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
17953
18016
  [mode]: true,
17954
18017
  [`menu-type-${type}`]: true,
17955
18018
  'menu-enabled': !disabled,
17956
18019
  [`menu-side-${side}`]: true,
17957
18020
  'menu-pane-visible': isPaneVisible,
17958
18021
  'split-pane-side': hostContext('ion-split-pane', el),
17959
- } }, hAsync("div", { key: '3ba822411ad11eff52c518fecf1b2a5b47e0b678', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, hAsync("slot", { key: 'd28a78e98493b21d43ea8b19e96b21547adf1916' })), hAsync("ion-backdrop", { key: '0468c15d111737f5cb646918dcfacedadf907a8f', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
18022
+ } }, hAsync("div", { key: '894e680fe227534711128c7aca980964ddb5a08a', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, hAsync("slot", { key: 'e9f5934518dc0cceaeadf1f2820614595fec6bc9' })), hAsync("ion-backdrop", { key: '7282077817657b1bb6c155f1404c0a519fece993', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
17960
18023
  }
17961
18024
  get el() { return getElement(this); }
17962
18025
  static get watchers() { return {
@@ -24821,11 +24884,16 @@ class RadioGroup {
24821
24884
  }
24822
24885
  }
24823
24886
  }
24887
+ /** @internal */
24888
+ async setFocus() {
24889
+ const radioToFocus = this.getRadios().find((r) => r.tabIndex !== -1);
24890
+ radioToFocus === null || radioToFocus === void 0 ? void 0 : radioToFocus.setFocus();
24891
+ }
24824
24892
  render() {
24825
24893
  const { label, labelId, el, name, value } = this;
24826
24894
  const mode = getIonMode$1(this);
24827
24895
  renderHiddenInput(true, el, name, value, false);
24828
- return hAsync(Host, { key: '99f543b9caa8e2d30a80e7ea7ecf6b6fdacc76eb', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
24896
+ return hAsync(Host, { key: 'a853e38901f0f4ba17bbf21ebb5da5b5c20b327e', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
24829
24897
  }
24830
24898
  get el() { return getElement(this); }
24831
24899
  static get watchers() { return {
@@ -24838,7 +24906,8 @@ class RadioGroup {
24838
24906
  "allowEmptySelection": [4, "allow-empty-selection"],
24839
24907
  "compareWith": [1, "compare-with"],
24840
24908
  "name": [1],
24841
- "value": [1032]
24909
+ "value": [1032],
24910
+ "setFocus": [64]
24842
24911
  },
24843
24912
  "$listeners$": [[4, "keydown", "onKeydown"]],
24844
24913
  "$lazyBundleId$": "-",
@@ -32033,10 +32102,10 @@ const createSwipeToDismissGesture = (el, toastPosition, onDismiss) => {
32033
32102
  return gesture;
32034
32103
  };
32035
32104
 
32036
- const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-radius:14px;--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
32105
+ const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-radius:14px;--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
32037
32106
  var IonToastIosStyle0 = toastIosCss;
32038
32107
 
32039
- const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, var(--ion-background-color-step-800, #333333));--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-50, var(--ion-text-color-step-950, #f2f2f2));--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, var(--ion-text-color-step-900, #e6e6e6))}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
32108
+ const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, var(--ion-background-color-step-800, #333333));--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-50, var(--ion-text-color-step-950, #f2f2f2));--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, var(--ion-text-color-step-900, #e6e6e6))}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
32040
32109
  var IonToastMdStyle0 = toastMdCss;
32041
32110
 
32042
32111
  // TODO(FW-2832): types
package/hydrate/index.mjs CHANGED
@@ -4388,7 +4388,7 @@ const createLockController = () => {
4388
4388
  * Note: We need this distinction because `disabled="false"` is
4389
4389
  * valid usage for the disabled property on ion-button.
4390
4390
  */
4391
- 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])';
4391
+ 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])';
4392
4392
  /**
4393
4393
  * Focuses the first descendant in a context
4394
4394
  * that can receive focus. If none exists,
@@ -4443,7 +4443,13 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
4443
4443
  elementToFocus = shadowRoot.querySelector(focusableQueryString) || hostToFocus;
4444
4444
  }
4445
4445
  if (elementToFocus) {
4446
- focusVisibleElement(elementToFocus);
4446
+ const radioGroup = elementToFocus.closest('ion-radio-group');
4447
+ if (radioGroup) {
4448
+ radioGroup.setFocus();
4449
+ }
4450
+ else {
4451
+ focusVisibleElement(elementToFocus);
4452
+ }
4447
4453
  }
4448
4454
  else {
4449
4455
  // Focus fallback element instead of letting focus escape
@@ -5394,21 +5400,30 @@ const createTriggerController = () => {
5394
5400
  * like TalkBack do not announce or interact with the content until the
5395
5401
  * animation is complete, avoiding confusion for users.
5396
5402
  *
5397
- * If the overlay is being presented, it prevents focus rings from appearing
5398
- * in incorrect positions due to the transition (specifically `transform`
5399
- * styles), ensuring that when aria-hidden is removed, the focus rings are
5400
- * correctly displayed in the final location of the elements.
5403
+ * When the overlay is presented on an Android device, TalkBack's focus rings
5404
+ * may appear in the wrong position due to the transition (specifically
5405
+ * `transform` styles). This occurs because the focus rings are initially
5406
+ * displayed at the starting position of the elements before the transition
5407
+ * begins. This workaround ensures the focus rings do not appear in the
5408
+ * incorrect location.
5409
+ *
5410
+ * If this solution is applied to iOS devices, then it leads to a bug where
5411
+ * the overlays cannot be accessed by screen readers. This is due to
5412
+ * VoiceOver not being able to update the accessibility tree when the
5413
+ * `aria-hidden` is removed.
5401
5414
  *
5402
5415
  * @param overlay - The overlay that is being animated.
5403
5416
  */
5404
5417
  const hideAnimatingOverlayFromScreenReaders = (overlay) => {
5405
5418
  if (doc === undefined)
5406
5419
  return;
5407
- /**
5408
- * Once the animation is complete, this attribute will be removed.
5409
- * This is done at the end of the `present` method.
5410
- */
5411
- overlay.setAttribute('aria-hidden', 'true');
5420
+ if (isPlatform('android')) {
5421
+ /**
5422
+ * Once the animation is complete, this attribute will be removed.
5423
+ * This is done at the end of the `present` method.
5424
+ */
5425
+ overlay.setAttribute('aria-hidden', 'true');
5426
+ }
5412
5427
  };
5413
5428
  /**
5414
5429
  * Ensure that underlying overlays have aria-hidden if necessary so that screen readers
@@ -13910,13 +13925,32 @@ mainHeaderIndex, scrollHeaderIndex, scrollEl) => {
13910
13925
  };
13911
13926
  const setHeaderActive = (headerIndex, active = true) => {
13912
13927
  const headerEl = headerIndex.el;
13928
+ const toolbars = headerIndex.toolbars;
13929
+ const ionTitles = toolbars.map((toolbar) => toolbar.ionTitleEl);
13913
13930
  if (active) {
13914
13931
  headerEl.classList.remove('header-collapse-condense-inactive');
13915
- headerEl.removeAttribute('aria-hidden');
13932
+ ionTitles.forEach((ionTitle) => {
13933
+ if (ionTitle) {
13934
+ ionTitle.removeAttribute('aria-hidden');
13935
+ }
13936
+ });
13916
13937
  }
13917
13938
  else {
13918
13939
  headerEl.classList.add('header-collapse-condense-inactive');
13919
- headerEl.setAttribute('aria-hidden', 'true');
13940
+ /**
13941
+ * The small title should only be accessed by screen readers
13942
+ * when the large title collapses into the small title due
13943
+ * to scrolling.
13944
+ *
13945
+ * Originally, the header was given `aria-hidden="true"`
13946
+ * but this caused issues with screen readers not being
13947
+ * able to access any focusable elements within the header.
13948
+ */
13949
+ ionTitles.forEach((ionTitle) => {
13950
+ if (ionTitle) {
13951
+ ionTitle.setAttribute('aria-hidden', 'true');
13952
+ }
13953
+ });
13920
13954
  }
13921
13955
  };
13922
13956
  const scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => {
@@ -16359,6 +16393,8 @@ class ItemSliding {
16359
16393
  optsWidth = -this.optsWidthLeftSide;
16360
16394
  openAmount = optsWidth + (openAmount - optsWidth) * ELASTIC_FACTOR;
16361
16395
  }
16396
+ if (openAmount === 0)
16397
+ return;
16362
16398
  this.setOpenAmount(openAmount, false);
16363
16399
  }
16364
16400
  onEnd(gesture) {
@@ -16473,7 +16509,7 @@ class ItemSliding {
16473
16509
  }
16474
16510
  render() {
16475
16511
  const mode = getIonMode$1(this);
16476
- return (hAsync(Host, { key: '47a3edd2ef2080ed9cfc2784277dea09785c7dc4', class: {
16512
+ return (hAsync(Host, { key: 'a5216b11d92a1e1afed09d139212e0df81fdab79', class: {
16477
16513
  [mode]: true,
16478
16514
  'item-sliding-active-slide': this.state !== 2 /* SlidingState.Disabled */,
16479
16515
  'item-sliding-active-options-end': (this.state & 8 /* SlidingState.End */) !== 0,
@@ -17812,6 +17848,22 @@ class Menu {
17812
17848
  }
17813
17849
  beforeAnimation(shouldOpen, role) {
17814
17850
  assert(!this.isAnimating, '_before() should not be called while animating');
17851
+ /**
17852
+ * When the menu is presented on an Android device, TalkBack's focus rings
17853
+ * may appear in the wrong position due to the transition (specifically
17854
+ * `transform` styles). This occurs because the focus rings are initially
17855
+ * displayed at the starting position of the elements before the transition
17856
+ * begins. This workaround ensures the focus rings do not appear in the
17857
+ * incorrect location.
17858
+ *
17859
+ * If this solution is applied to iOS devices, then it leads to a bug where
17860
+ * the overlays cannot be accessed by screen readers. This is due to
17861
+ * VoiceOver not being able to update the accessibility tree when the
17862
+ * `aria-hidden` is removed.
17863
+ */
17864
+ if (isPlatform('android')) {
17865
+ this.el.setAttribute('aria-hidden', 'true');
17866
+ }
17815
17867
  // this places the menu into the correct location before it animates in
17816
17868
  // this css class doesn't actually kick off any animations
17817
17869
  this.el.classList.add(SHOW_MENU);
@@ -17864,6 +17916,16 @@ class Menu {
17864
17916
  this.blocker.unblock();
17865
17917
  }
17866
17918
  if (isOpen) {
17919
+ /**
17920
+ * When the menu is presented on an Android device, TalkBack's focus rings
17921
+ * may appear in the wrong position due to the transition (specifically
17922
+ * `transform` styles). The menu is hidden from screen readers during the
17923
+ * transition to prevent this. Once the transition is complete, the menu
17924
+ * is shown again.
17925
+ */
17926
+ if (isPlatform('android')) {
17927
+ this.el.removeAttribute('aria-hidden');
17928
+ }
17867
17929
  // emit open event
17868
17930
  this.ionDidOpen.emit();
17869
17931
  /**
@@ -17879,6 +17941,7 @@ class Menu {
17879
17941
  document.addEventListener('focus', this.handleFocus, true);
17880
17942
  }
17881
17943
  else {
17944
+ this.el.removeAttribute('aria-hidden');
17882
17945
  // remove css classes and unhide content from screen readers
17883
17946
  this.el.classList.remove(SHOW_MENU);
17884
17947
  /**
@@ -17945,14 +18008,14 @@ class Menu {
17945
18008
  * the ionBackButton listener in the menu controller
17946
18009
  * will handle closing the menu when Escape is pressed.
17947
18010
  */
17948
- return (hAsync(Host, { key: '5aaea91873d0885b97304372223b2a6ed16ca28b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
18011
+ return (hAsync(Host, { key: 'da96fdb4c5ddf60e615cc4cdda7ccdb3fd7e089b', onKeyDown: shouldUseCloseWatcher() ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
17949
18012
  [mode]: true,
17950
18013
  [`menu-type-${type}`]: true,
17951
18014
  'menu-enabled': !disabled,
17952
18015
  [`menu-side-${side}`]: true,
17953
18016
  'menu-pane-visible': isPaneVisible,
17954
18017
  'split-pane-side': hostContext('ion-split-pane', el),
17955
- } }, hAsync("div", { key: '3ba822411ad11eff52c518fecf1b2a5b47e0b678', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, hAsync("slot", { key: 'd28a78e98493b21d43ea8b19e96b21547adf1916' })), hAsync("ion-backdrop", { key: '0468c15d111737f5cb646918dcfacedadf907a8f', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
18018
+ } }, hAsync("div", { key: '894e680fe227534711128c7aca980964ddb5a08a', class: "menu-inner", part: "container", ref: (el) => (this.menuInnerEl = el) }, hAsync("slot", { key: 'e9f5934518dc0cceaeadf1f2820614595fec6bc9' })), hAsync("ion-backdrop", { key: '7282077817657b1bb6c155f1404c0a519fece993', ref: (el) => (this.backdropEl = el), class: "menu-backdrop", tappable: false, stopPropagation: false, part: "backdrop" })));
17956
18019
  }
17957
18020
  get el() { return getElement(this); }
17958
18021
  static get watchers() { return {
@@ -24817,11 +24880,16 @@ class RadioGroup {
24817
24880
  }
24818
24881
  }
24819
24882
  }
24883
+ /** @internal */
24884
+ async setFocus() {
24885
+ const radioToFocus = this.getRadios().find((r) => r.tabIndex !== -1);
24886
+ radioToFocus === null || radioToFocus === void 0 ? void 0 : radioToFocus.setFocus();
24887
+ }
24820
24888
  render() {
24821
24889
  const { label, labelId, el, name, value } = this;
24822
24890
  const mode = getIonMode$1(this);
24823
24891
  renderHiddenInput(true, el, name, value, false);
24824
- return hAsync(Host, { key: '99f543b9caa8e2d30a80e7ea7ecf6b6fdacc76eb', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
24892
+ return hAsync(Host, { key: 'a853e38901f0f4ba17bbf21ebb5da5b5c20b327e', role: "radiogroup", "aria-labelledby": label ? labelId : null, onClick: this.onClick, class: mode });
24825
24893
  }
24826
24894
  get el() { return getElement(this); }
24827
24895
  static get watchers() { return {
@@ -24834,7 +24902,8 @@ class RadioGroup {
24834
24902
  "allowEmptySelection": [4, "allow-empty-selection"],
24835
24903
  "compareWith": [1, "compare-with"],
24836
24904
  "name": [1],
24837
- "value": [1032]
24905
+ "value": [1032],
24906
+ "setFocus": [64]
24838
24907
  },
24839
24908
  "$listeners$": [[4, "keydown", "onKeydown"]],
24840
24909
  "$lazyBundleId$": "-",
@@ -32029,10 +32098,10 @@ const createSwipeToDismissGesture = (el, toastPosition, onDismiss) => {
32029
32098
  return gesture;
32030
32099
  };
32031
32100
 
32032
- const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-radius:14px;--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
32101
+ const toastIosCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-50, var(--ion-background-color-step-50, #f2f2f2));--border-radius:14px;--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-850, var(--ion-text-color-step-150, #262626));--max-width:700px;--max-height:478px;--start:10px;--end:10px;font-size:clamp(14px, 0.875rem, 43.4px)}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;z-index:10}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){:host(.toast-translucent) .toast-wrapper{background:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}:host(.ion-color.toast-translucent) .toast-wrapper{background:rgba(var(--ion-color-base-rgb), 0.8)}}.toast-wrapper.toast-middle{opacity:0.01}.toast-content{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:15px;padding-bottom:15px}.toast-header{margin-bottom:2px;font-weight:500}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;min-height:44px;-webkit-transition:background-color, opacity 100ms linear;transition:background-color, opacity 100ms linear;border:0;background-color:transparent;font-family:var(--ion-font-family);font-size:clamp(17px, 1.0625rem, 21.998px);font-weight:500;overflow:hidden}.toast-button.ion-activated{opacity:0.4}@media (any-hover: hover){.toast-button:hover{opacity:0.6}}";
32033
32102
  var IonToastIosStyle0 = toastIosCss;
32034
32103
 
32035
- const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;pointer-events:auto;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, var(--ion-background-color-step-800, #333333));--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-50, var(--ion-text-color-step-950, #f2f2f2));--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, var(--ion-text-color-step-900, #e6e6e6))}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
32104
+ const toastMdCss = ":host{--border-width:0;--border-style:none;--border-color:initial;--box-shadow:none;--min-width:auto;--width:auto;--min-height:auto;--height:auto;--max-height:auto;--white-space:normal;top:0;display:block;position:absolute;width:100%;height:100%;outline:none;color:var(--color);font-family:var(--ion-font-family, inherit);contain:strict;z-index:1001;pointer-events:none}:host{inset-inline-start:0}:host(.overlay-hidden){display:none}:host(.ion-color){--button-color:inherit;color:var(--ion-color-contrast)}:host(.ion-color) .toast-button-cancel{color:inherit}:host(.ion-color) .toast-wrapper{background:var(--ion-color-base)}.toast-wrapper{border-radius:var(--border-radius);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);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);pointer-events:auto}.toast-wrapper{inset-inline-start:var(--start);inset-inline-end:var(--end)}.toast-wrapper.toast-top{-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0);top:0}.toast-wrapper.toast-bottom{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0);bottom:0}.toast-container{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;height:inherit;min-height:inherit;max-height:inherit;contain:content}.toast-layout-stacked .toast-container{-ms-flex-wrap:wrap;flex-wrap:wrap}.toast-layout-baseline .toast-content{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.toast-icon{-webkit-margin-start:16px;margin-inline-start:16px}.toast-content{min-width:0}.toast-message{-ms-flex:1;flex:1;white-space:var(--white-space)}.toast-button-group{display:-ms-flexbox;display:flex}.toast-layout-stacked .toast-button-group{-ms-flex-pack:end;justify-content:end;width:100%}.toast-button{border:0;outline:none;color:var(--button-color);z-index:0}.toast-icon,.toast-button-icon{font-size:1.4em}.toast-button-inner{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}@media (any-hover: hover){.toast-button:hover{cursor:pointer}}:host{--background:var(--ion-color-step-800, var(--ion-background-color-step-800, #333333));--border-radius:4px;--box-shadow:0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12);--button-color:var(--ion-color-primary, #0054e9);--color:var(--ion-color-step-50, var(--ion-text-color-step-950, #f2f2f2));--max-width:700px;--start:8px;--end:8px;font-size:0.875rem}.toast-wrapper{-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:auto;margin-bottom:auto;display:block;position:absolute;opacity:0.01;z-index:10}.toast-content{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:14px;padding-bottom:14px}.toast-header{margin-bottom:2px;font-weight:500;line-height:1.25rem}.toast-message{line-height:1.25rem}.toast-layout-baseline .toast-button-group-start{-webkit-margin-start:8px;margin-inline-start:8px}.toast-layout-stacked .toast-button-group-start{-webkit-margin-end:8px;margin-inline-end:8px;margin-top:8px}.toast-layout-baseline .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px}.toast-layout-stacked .toast-button-group-end{-webkit-margin-end:8px;margin-inline-end:8px;margin-bottom:8px}.toast-button{-webkit-padding-start:15px;padding-inline-start:15px;-webkit-padding-end:15px;padding-inline-end:15px;padding-top:10px;padding-bottom:10px;position:relative;background-color:transparent;font-family:var(--ion-font-family);font-size:0.875rem;font-weight:500;letter-spacing:0.84px;text-transform:uppercase;overflow:hidden}.toast-button-cancel{color:var(--ion-color-step-100, var(--ion-text-color-step-900, #e6e6e6))}.toast-button-icon-only{border-radius:50%;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px;padding-top:9px;padding-bottom:9px;width:36px;height:36px}@media (any-hover: hover){.toast-button:hover{background-color:rgba(var(--ion-color-primary-rgb, 0, 84, 233), 0.08)}.toast-button-cancel:hover{background-color:rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.08)}}";
32036
32105
  var IonToastMdStyle0 = toastMdCss;
32037
32106
 
32038
32107
  // TODO(FW-2832): types
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "voyager-ionic-core",
3
- "version": "8.4.0",
3
+ "version": "8.4.1",
4
4
  "description": "Base components for Ionic",
5
5
  "keywords": [
6
6
  "ionic",
@@ -1,4 +0,0 @@
1
- import{__awaiter,__generator,__spreadArray}from"tslib";
2
- /*!
3
- * (C) Ionic http://ionicframework.com - MIT License
4
- */import{d as doc}from"./index-a5d50daf.js";import{f as focusVisibleElement,c as componentOnReady,a as addEventListener,b as removeEventListener,g as getElementRoot}from"./helpers-da915de8.js";import{OVERLAY_BACK_BUTTON_PRIORITY,shouldUseCloseWatcher}from"./hardware-back-button-06ef3c3e.js";import{b as getIonMode,c as config}from"./ionic-global-c81d82ab.js";import{C as CoreDelegate}from"./framework-delegate-63d1a679.js";import{B as BACKDROP_NO_SCROLL}from"./gesture-controller-314a54f6.js";import{p as printIonWarning}from"./index-9b0d46f4.js";var 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])';var focusFirstDescendant=function(e,n){var r=e.querySelector(focusableQueryString);focusElementInContext(r,n!==null&&n!==void 0?n:e)};var focusLastDescendant=function(e,n){var r=Array.from(e.querySelectorAll(focusableQueryString));var t=r.length>0?r[r.length-1]:null;focusElementInContext(t,n!==null&&n!==void 0?n:e)};var focusElementInContext=function(e,n){var r=e;var t=e===null||e===void 0?void 0:e.shadowRoot;if(t){r=t.querySelector(focusableQueryString)||e}if(r){focusVisibleElement(r)}else{n.focus()}};var lastOverlayIndex=0;var lastId=0;var activeAnimations=new WeakMap;var createController=function(e){return{create:function(n){return createOverlay(e,n)},dismiss:function(n,r,t){return dismissOverlay(document,n,r,e,t)},getTop:function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){return[2,getPresentedOverlay(document,e)]}))}))}}};var alertController=createController("ion-alert");var actionSheetController=createController("ion-action-sheet");var loadingController=createController("ion-loading");var modalController=createController("ion-modal");var pickerController=createController("ion-picker-legacy");var popoverController=createController("ion-popover");var toastController=createController("ion-toast");var prepareOverlay=function(e){if(typeof document!=="undefined"){connectListeners(document)}var n=lastOverlayIndex++;e.overlayIndex=n};var setOverlayId=function(e){if(!e.hasAttribute("id")){e.id="ion-overlay-".concat(++lastId)}return e.id};var createOverlay=function(e,n){if(typeof window!=="undefined"&&typeof window.customElements!=="undefined"){return window.customElements.whenDefined(e).then((function(){var r=document.createElement(e);r.classList.add("overlay-hidden");Object.assign(r,Object.assign(Object.assign({},n),{hasController:true}));getAppRoot(document).appendChild(r);return new Promise((function(e){return componentOnReady(r,e)}))}))}return Promise.resolve()};var isOverlayHidden=function(e){return e.classList.contains("overlay-hidden")};var focusElementInOverlay=function(e,n){var r=e;var t=e===null||e===void 0?void 0:e.shadowRoot;if(t){r=t.querySelector(focusableQueryString)||e}if(r){focusVisibleElement(r)}else{n.focus()}};var trapKeyboardFocus=function(e,n){var r=getPresentedOverlay(n,"ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover");var t=e.target;if(!r||!t){return}if(r.classList.contains(FOCUS_TRAP_DISABLE_CLASS)){return}var o=function(){if(r===t){r.lastFocus=undefined}else if(t.tagName==="ION-TOAST"){focusElementInOverlay(r.lastFocus,r)}else{var e=getElementRoot(r);if(!e.contains(t)){return}var o=e.querySelector(".ion-overlay-wrapper");if(!o){return}if(o.contains(t)||t===e.querySelector("ion-backdrop")){r.lastFocus=t}else{var a=r.lastFocus;focusFirstDescendant(o,r);if(a===n.activeElement){focusLastDescendant(o,r)}r.lastFocus=n.activeElement}}};var a=function(){if(r.contains(t)){r.lastFocus=t}else if(t.tagName==="ION-TOAST"){focusElementInOverlay(r.lastFocus,r)}else{var e=r.lastFocus;focusFirstDescendant(r);if(e===n.activeElement){focusLastDescendant(r)}r.lastFocus=n.activeElement}};if(r.shadowRoot){a()}else{o()}};var connectListeners=function(e){if(lastOverlayIndex===0){lastOverlayIndex=1;e.addEventListener("focus",(function(n){trapKeyboardFocus(n,e)}),true);e.addEventListener("ionBackButton",(function(n){var r=getPresentedOverlay(e);if(r===null||r===void 0?void 0:r.backdropDismiss){n.detail.register(OVERLAY_BACK_BUTTON_PRIORITY,(function(){r.dismiss(undefined,BACKDROP)}))}}));if(!shouldUseCloseWatcher()){e.addEventListener("keydown",(function(n){if(n.key==="Escape"){var r=getPresentedOverlay(e);if(r===null||r===void 0?void 0:r.backdropDismiss){r.dismiss(undefined,BACKDROP)}}}))}}};var dismissOverlay=function(e,n,r,t,o){var a=getPresentedOverlay(e,t,o);if(!a){return Promise.reject("overlay does not exist")}return a.dismiss(n,r)};var getOverlays=function(e,n){if(n===undefined){n="ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover,ion-toast"}return Array.from(e.querySelectorAll(n)).filter((function(e){return e.overlayIndex>0}))};var getPresentedOverlays=function(e,n){return getOverlays(e,n).filter((function(e){return!isOverlayHidden(e)}))};var getPresentedOverlay=function(e,n,r){var t=getPresentedOverlays(e,n);return r===undefined?t[t.length-1]:t.find((function(e){return e.id===r}))};var setRootAriaHidden=function(e){if(e===void 0){e=false}var n=getAppRoot(document);var r=n.querySelector("ion-router-outlet, ion-nav, #ion-view-container-root");if(!r){return}if(e){r.setAttribute("aria-hidden","true")}else{r.removeAttribute("aria-hidden")}};var present=function(e,n,r,t,o){return __awaiter(void 0,void 0,void 0,(function(){var a,i,d,s,u;return __generator(this,(function(l){switch(l.label){case 0:if(e.presented){return[2]}if(e.el.tagName!=="ION-TOAST"){setRootAriaHidden(true)}document.body.classList.add(BACKDROP_NO_SCROLL);hideUnderlyingOverlaysFromScreenReaders(e.el);hideAnimatingOverlayFromScreenReaders(e.el);e.presented=true;e.willPresent.emit();(a=e.willPresentShorthand)===null||a===void 0?void 0:a.emit();d=getIonMode(e);s=e.enterAnimation?e.enterAnimation:config.get(n,d==="ios"?r:t);return[4,overlayAnimation(e,s,e.el,o)];case 1:u=l.sent();if(u){e.didPresent.emit();(i=e.didPresentShorthand)===null||i===void 0?void 0:i.emit()}if(e.el.tagName!=="ION-TOAST"){restoreElementFocus(e.el)}if(e.keyboardClose&&(document.activeElement===null||!e.el.contains(document.activeElement))){e.el.focus()}e.el.removeAttribute("aria-hidden");return[2]}}))}))};var restoreElementFocus=function(e){return __awaiter(void 0,void 0,void 0,(function(){var n,r;return __generator(this,(function(t){switch(t.label){case 0:n=document.activeElement;if(!n){return[2]}r=n===null||n===void 0?void 0:n.shadowRoot;if(r){n=r.querySelector(focusableQueryString)||n}return[4,e.onDidDismiss()];case 1:t.sent();if(document.activeElement===null||document.activeElement===document.body){n.focus()}return[2]}}))}))};var dismiss=function(e,n,r,t,o,a,i){return __awaiter(void 0,void 0,void 0,(function(){var d,s,u,l,c,v,f,m;return __generator(this,(function(O){switch(O.label){case 0:if(!e.presented){return[2,false]}u=doc!==undefined?getPresentedOverlays(doc).filter((function(e){return e.tagName!=="ION-TOAST"})):[];l=u.length===1&&u[0].id===e.el.id;if(l){setRootAriaHidden(false);document.body.classList.remove(BACKDROP_NO_SCROLL)}e.presented=false;O.label=1;case 1:O.trys.push([1,4,,5]);hideAnimatingOverlayFromScreenReaders(e.el);e.el.style.setProperty("pointer-events","none");e.willDismiss.emit({data:n,role:r});(d=e.willDismissShorthand)===null||d===void 0?void 0:d.emit({data:n,role:r});c=getIonMode(e);v=e.leaveAnimation?e.leaveAnimation:config.get(t,c==="ios"?o:a);if(!(r!==GESTURE))return[3,3];return[4,overlayAnimation(e,v,e.el,i)];case 2:O.sent();O.label=3;case 3:e.didDismiss.emit({data:n,role:r});(s=e.didDismissShorthand)===null||s===void 0?void 0:s.emit({data:n,role:r});f=activeAnimations.get(e)||[];f.forEach((function(e){return e.destroy()}));activeAnimations.delete(e);e.el.classList.add("overlay-hidden");e.el.style.removeProperty("pointer-events");if(e.el.lastFocus!==undefined){e.el.lastFocus=undefined}return[3,5];case 4:m=O.sent();console.error(m);return[3,5];case 5:e.el.remove();revealOverlaysToScreenReaders();return[2,true]}}))}))};var getAppRoot=function(e){return e.querySelector("ion-app")||e.body};var overlayAnimation=function(e,n,r,t){return __awaiter(void 0,void 0,void 0,(function(){var o,a,i;return __generator(this,(function(d){switch(d.label){case 0:r.classList.remove("overlay-hidden");o=e.el;a=n(o,t);if(!e.animated||!config.getBoolean("animated",true)){a.duration(0)}if(e.keyboardClose){a.beforeAddWrite((function(){var e=r.ownerDocument.activeElement;if(e===null||e===void 0?void 0:e.matches("input,ion-input, ion-textarea")){e.blur()}}))}i=activeAnimations.get(e)||[];activeAnimations.set(e,__spreadArray(__spreadArray([],i,true),[a],false));return[4,a.play()];case 1:d.sent();return[2,true]}}))}))};var eventMethod=function(e,n){var r;var t=new Promise((function(e){return r=e}));onceEvent(e,n,(function(e){r(e.detail)}));return t};var onceEvent=function(e,n,r){var t=function(o){removeEventListener(e,n,t);r(o)};addEventListener(e,n,t)};var isCancel=function(e){return e==="cancel"||e===BACKDROP};var defaultGate=function(e){return e()};var safeCall=function(e,n){if(typeof e==="function"){var r=config.get("_zoneGate",defaultGate);return r((function(){try{return e(n)}catch(e){throw e}}))}return undefined};var BACKDROP="backdrop";var GESTURE="gesture";var OVERLAY_GESTURE_PRIORITY=39;var createDelegateController=function(e){var n=false;var r;var t=CoreDelegate();var o=function(o){if(o===void 0){o=false}if(r&&!o){return{delegate:r,inline:n}}var a=e.el,i=e.hasController,d=e.delegate;var s=a.parentNode;n=s!==null&&!i;r=n?d||t:d;return{inline:n,delegate:r}};var a=function(n){return __awaiter(void 0,void 0,void 0,(function(){var r,t;return __generator(this,(function(a){switch(a.label){case 0:r=o(true).delegate;if(!r)return[3,2];return[4,r.attachViewToDom(e.el,n)];case 1:return[2,a.sent()];case 2:t=e.hasController;if(t&&n!==undefined){throw new Error("framework delegate is missing")}return[2,null]}}))}))};var i=function(){var n=o().delegate;if(n&&e.el!==undefined){n.removeViewFromDom(e.el.parentElement,e.el)}};return{attachViewToDom:a,removeViewFromDom:i}};var createTriggerController=function(){var e;var n=function(){if(e){e();e=undefined}};var r=function(r,t){n();var o=t!==undefined?document.getElementById(t):null;if(!o){printIonWarning('A trigger element with the ID "'.concat(t,'" was not found in the DOM. The trigger element must be in the DOM when the "trigger" property is set on an overlay component.'),r);return}var a=function(e,n){var r=function(){n.present()};e.addEventListener("click",r);return function(){e.removeEventListener("click",r)}};e=a(o,r)};return{addClickListener:r,removeClickListener:n}};var hideAnimatingOverlayFromScreenReaders=function(e){if(doc===undefined)return;e.setAttribute("aria-hidden","true")};var hideUnderlyingOverlaysFromScreenReaders=function(e){var n;if(doc===undefined)return;var r=getPresentedOverlays(doc);for(var t=r.length-1;t>=0;t--){var o=r[t];var a=(n=r[t+1])!==null&&n!==void 0?n:e;if(a.hasAttribute("aria-hidden")||a.tagName!=="ION-TOAST"){o.setAttribute("aria-hidden","true")}}};var revealOverlaysToScreenReaders=function(){if(doc===undefined)return;var e=getPresentedOverlays(doc);for(var n=e.length-1;n>=0;n--){var r=e[n];r.removeAttribute("aria-hidden");if(r.tagName!=="ION-TOAST"){break}}};var FOCUS_TRAP_DISABLE_CLASS="ion-disable-focus-trap";export{BACKDROP as B,FOCUS_TRAP_DISABLE_CLASS as F,GESTURE as G,OVERLAY_GESTURE_PRIORITY as O,alertController as a,actionSheetController as b,popoverController as c,createDelegateController as d,createTriggerController as e,present as f,dismiss as g,eventMethod as h,isCancel as i,prepareOverlay as j,setOverlayId as k,loadingController as l,modalController as m,focusFirstDescendant as n,getPresentedOverlay as o,pickerController as p,focusLastDescendant as q,safeCall as s,toastController as t};