@ionic/core 8.7.12-dev.11765060985.14ad27fb → 8.7.12-dev.11765231260.1def96ab

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 (63) hide show
  1. package/components/action-sheet.js +186 -5
  2. package/components/ion-select.js +8 -3
  3. package/components/modal.js +16 -86
  4. package/components/overlays.js +11 -15
  5. package/css/core.css +1 -1
  6. package/css/core.css.map +1 -1
  7. package/css/ionic.bundle.css +1 -1
  8. package/css/ionic.bundle.css.map +1 -1
  9. package/dist/cjs/index.cjs.js +1 -1
  10. package/dist/cjs/ion-action-sheet.cjs.entry.js +184 -5
  11. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  12. package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
  13. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  14. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  15. package/dist/cjs/ion-modal.cjs.entry.js +17 -86
  16. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  17. package/dist/cjs/ion-select-modal.cjs.entry.js +1 -1
  18. package/dist/cjs/ion-select_3.cjs.entry.js +9 -4
  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-D3xMmZCY.js → overlays-DxIZwUXI.js} +11 -15
  23. package/dist/collection/components/action-sheet/action-sheet.js +199 -4
  24. package/dist/collection/components/modal/modal.js +16 -86
  25. package/dist/collection/components/select/select.js +8 -3
  26. package/dist/collection/utils/overlays.js +11 -15
  27. package/dist/docs.json +14 -8
  28. package/dist/esm/index.js +1 -1
  29. package/dist/esm/ion-action-sheet.entry.js +184 -5
  30. package/dist/esm/ion-alert.entry.js +1 -1
  31. package/dist/esm/ion-datetime_3.entry.js +1 -1
  32. package/dist/esm/ion-loading.entry.js +1 -1
  33. package/dist/esm/ion-menu_3.entry.js +1 -1
  34. package/dist/esm/ion-modal.entry.js +17 -86
  35. package/dist/esm/ion-popover.entry.js +1 -1
  36. package/dist/esm/ion-select-modal.entry.js +1 -1
  37. package/dist/esm/ion-select_3.entry.js +9 -4
  38. package/dist/esm/ion-toast.entry.js +1 -1
  39. package/dist/esm/ionic.js +1 -1
  40. package/dist/esm/loader.js +1 -1
  41. package/dist/esm/{overlays-DYKBVm6h.js → overlays-BymNv-BL.js} +11 -15
  42. package/dist/ionic/index.esm.js +1 -1
  43. package/dist/ionic/ionic.esm.js +1 -1
  44. package/dist/ionic/{p-3fad4ab5.entry.js → p-0b80d700.entry.js} +1 -1
  45. package/dist/ionic/{p-a480563a.entry.js → p-15193d01.entry.js} +1 -1
  46. package/dist/ionic/p-5837f29f.entry.js +4 -0
  47. package/dist/ionic/{p-b4b6513a.entry.js → p-7da39a4d.entry.js} +1 -1
  48. package/dist/ionic/{p-caa8efa1.entry.js → p-83be404e.entry.js} +1 -1
  49. package/dist/ionic/p-8edc7565.entry.js +4 -0
  50. package/dist/ionic/{p-7928cc4d.entry.js → p-98fc09eb.entry.js} +1 -1
  51. package/dist/ionic/p-D87hU-Ly.js +4 -0
  52. package/dist/ionic/p-c69ff6d8.entry.js +4 -0
  53. package/dist/ionic/{p-985f02a8.entry.js → p-cb93126d.entry.js} +1 -1
  54. package/dist/ionic/{p-038f3a87.entry.js → p-e16b69e1.entry.js} +1 -1
  55. package/dist/types/components/action-sheet/action-sheet.d.ts +37 -0
  56. package/dist/types/components/modal/modal.d.ts +0 -13
  57. package/hydrate/index.js +220 -109
  58. package/hydrate/index.mjs +220 -109
  59. package/package.json +4 -1
  60. package/dist/ionic/p-1cf19c5a.entry.js +0 -4
  61. package/dist/ionic/p-9084d52f.entry.js +0 -4
  62. package/dist/ionic/p-CHK505Co.js +0 -4
  63. package/dist/ionic/p-ede27a66.entry.js +0 -4
@@ -463,13 +463,7 @@ export class Modal {
463
463
  };
464
464
  window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
465
465
  }
466
- /**
467
- * Recalculate isSheetModal because framework bindings (e.g., Angular)
468
- * may not have been applied when componentWillLoad ran.
469
- */
470
- const isSheetModal = this.breakpoints !== undefined && this.initialBreakpoint !== undefined;
471
- this.isSheetModal = isSheetModal;
472
- if (isSheetModal) {
466
+ if (this.isSheetModal) {
473
467
  this.initSheetGesture();
474
468
  }
475
469
  else if (hasCardModal) {
@@ -551,79 +545,6 @@ export class Modal {
551
545
  this.gesture = gesture;
552
546
  this.moveSheetToBreakpoint = moveSheetToBreakpoint;
553
547
  this.gesture.enable(true);
554
- /**
555
- * When backdrop interaction is allowed, nested router outlets from child routes
556
- * may block pointer events to parent content. Apply passthrough styles only when
557
- * the modal was the sole content of a child route page.
558
- * See https://github.com/ionic-team/ionic-framework/issues/30700
559
- */
560
- const backdropNotBlocking = this.showBackdrop === false || this.focusTrap === false || backdropBreakpoint > 0;
561
- if (backdropNotBlocking) {
562
- this.setupChildRoutePassthrough();
563
- }
564
- }
565
- /**
566
- * For sheet modals that allow background interaction, sets up pointer-events
567
- * passthrough on child route page wrappers and nested router outlets.
568
- */
569
- setupChildRoutePassthrough() {
570
- var _a;
571
- const pageParent = this.getOriginalPageParent();
572
- // Skip ion-app (controller modals) and pages with other content (inline modals)
573
- if (!pageParent || pageParent.tagName === 'ION-APP') {
574
- return;
575
- }
576
- const hasVisibleContent = Array.from(pageParent.children).some((child) => {
577
- var _a;
578
- if (child === this.el)
579
- return false;
580
- if (child instanceof HTMLElement && window.getComputedStyle(child).display === 'none')
581
- return false;
582
- if (child.tagName === 'TEMPLATE' || child.tagName === 'SLOT')
583
- return false;
584
- if (child.nodeType === Node.TEXT_NODE && !((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()))
585
- return false;
586
- return true;
587
- });
588
- if (hasVisibleContent) {
589
- return;
590
- }
591
- // Child route case: page only contained the modal
592
- pageParent.classList.add('ion-page-overlay-passthrough');
593
- // Also make nested router outlets passthrough
594
- const routerOutlet = pageParent.parentElement;
595
- if ((routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.tagName) === 'ION-ROUTER-OUTLET' && ((_a = routerOutlet.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) !== 'ION-APP') {
596
- routerOutlet.style.setProperty('pointer-events', 'none');
597
- routerOutlet.setAttribute('data-overlay-passthrough', 'true');
598
- }
599
- }
600
- /**
601
- * Finds the ion-page ancestor of the modal's original parent location.
602
- */
603
- getOriginalPageParent() {
604
- if (!this.cachedOriginalParent) {
605
- return null;
606
- }
607
- let pageParent = this.cachedOriginalParent;
608
- while (pageParent && !pageParent.classList.contains('ion-page')) {
609
- pageParent = pageParent.parentElement;
610
- }
611
- return pageParent;
612
- }
613
- /**
614
- * Removes passthrough styles added by setupChildRoutePassthrough.
615
- */
616
- cleanupChildRoutePassthrough() {
617
- const pageParent = this.getOriginalPageParent();
618
- if (!pageParent) {
619
- return;
620
- }
621
- pageParent.classList.remove('ion-page-overlay-passthrough');
622
- const routerOutlet = pageParent.parentElement;
623
- if (routerOutlet === null || routerOutlet === void 0 ? void 0 : routerOutlet.hasAttribute('data-overlay-passthrough')) {
624
- routerOutlet.style.removeProperty('pointer-events');
625
- routerOutlet.removeAttribute('data-overlay-passthrough');
626
- }
627
548
  }
628
549
  sheetOnDismiss() {
629
550
  /**
@@ -713,7 +634,6 @@ export class Modal {
713
634
  }
714
635
  this.cleanupViewTransitionListener();
715
636
  this.cleanupParentRemovalObserver();
716
- this.cleanupChildRoutePassthrough();
717
637
  }
718
638
  this.currentBreakpoint = undefined;
719
639
  this.animation = undefined;
@@ -918,6 +838,17 @@ export class Modal {
918
838
  this.cachedOriginalParent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
919
839
  return;
920
840
  }
841
+ /**
842
+ * Don't observe for controller-based modals or when the parent is the
843
+ * app root (document.body or ion-app). These parents won't be removed,
844
+ * and observing document.body with subtree: true causes performance
845
+ * issues with frameworks like Angular during change detection.
846
+ */
847
+ if (this.hasController ||
848
+ this.cachedOriginalParent === document.body ||
849
+ this.cachedOriginalParent.tagName === 'ION-APP') {
850
+ return;
851
+ }
921
852
  this.parentRemovalObserver = new MutationObserver((mutations) => {
922
853
  mutations.forEach((mutation) => {
923
854
  if (mutation.type === 'childList' && mutation.removedNodes.length > 0) {
@@ -959,20 +890,20 @@ export class Modal {
959
890
  const isCardModal = presentingElement !== undefined && mode === 'ios';
960
891
  const isHandleCycle = handleBehavior === 'cycle';
961
892
  const isSheetModalWithHandle = isSheetModal && showHandle;
962
- return (h(Host, Object.assign({ key: '880d34a27983dde27c81a06bfed390bf38e43244', "no-router": true,
893
+ return (h(Host, Object.assign({ key: '5d8261a1a174d83642c0f7f2aa4f6c265f50fa57', "no-router": true,
963
894
  // Allow the modal to be navigable when the handle is focusable
964
895
  tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
965
896
  zIndex: `${20000 + this.overlayIndex}`,
966
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: 'c674d142ace2b3e5bd38b302cf2984fc3fac11c8', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'ce83713b57960d354935ef8e65251892ed9d4e3b', class: "modal-shadow" }), h("div", Object.assign({ key: '67c001e824f5c31eb58053eea71c884817479896',
897
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle, onFocus: this.onModalFocus }), h("ion-backdrop", { key: 'bc165dd344e752c13076ca5ae37ea7d68d618d55', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '4a2f6edaeeec2978f0cd7b2b93a44c2f0da3ab54', class: "modal-shadow" }), h("div", Object.assign({ key: '13d662aa50871e97567270dbbce6825633c62bad',
967
898
  /*
968
899
  role and aria-modal must be used on the
969
900
  same element. They must also be set inside the
970
901
  shadow DOM otherwise ion-button will not be highlighted
971
902
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
972
903
  */
973
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '9263cbb0c5f550ef463b72446c21379ccaf0ccdd', class: "modal-handle",
904
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'e678cd3c64a0ab56636f68f9fa416741589f783c', class: "modal-handle",
974
905
  // Prevents the handle from receiving keyboard focus when it does not cycle
975
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '3ef07e617f2b1d46fca6a00b40119c35bff4215a', onSlotchange: this.onSlotChange }))));
906
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle", ref: (el) => (this.dragHandleEl = el) })), h("slot", { key: '1ebc3549c5c67ea286384b9917ed4dd8958ea2ae', onSlotchange: this.onSlotChange }))));
976
907
  }
977
908
  static get is() { return "ion-modal"; }
978
909
  static get encapsulation() { return "shadow"; }
@@ -1531,7 +1462,6 @@ export class Modal {
1531
1462
  }
1532
1463
  static get states() {
1533
1464
  return {
1534
- "isSheetModal": {},
1535
1465
  "presented": {}
1536
1466
  };
1537
1467
  }
@@ -395,13 +395,18 @@ export class Select {
395
395
  .filter((cls) => cls !== 'hydrated')
396
396
  .join(' ');
397
397
  const optClass = `${OPTION_CLASS} ${copyClasses}`;
398
+ const isSelected = isOptionSelected(selectValue, value, this.compareWith);
398
399
  return {
399
- role: isOptionSelected(selectValue, value, this.compareWith) ? 'selected' : '',
400
+ role: isSelected ? 'selected' : '',
400
401
  text: option.textContent,
401
402
  cssClass: optClass,
402
403
  handler: () => {
403
404
  this.setValue(value);
404
405
  },
406
+ htmlAttributes: {
407
+ 'aria-checked': isSelected ? 'true' : 'false',
408
+ role: 'radio',
409
+ },
405
410
  };
406
411
  });
407
412
  // Add "cancel" button
@@ -828,7 +833,7 @@ export class Select {
828
833
  * TODO(FW-5592): Remove hasStartEndSlots condition
829
834
  */
830
835
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
831
- return (h(Host, { key: '35b5e18e6f79a802ff2d46d1242e80ff755cc0b9', onClick: this.onClick, class: createColorClasses(this.color, {
836
+ return (h(Host, { key: 'd8026835993d0e6dce747098f741a06ae4e4f54d', onClick: this.onClick, class: createColorClasses(this.color, {
832
837
  [mode]: true,
833
838
  'in-item': inItem,
834
839
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -846,7 +851,7 @@ export class Select {
846
851
  [`select-justify-${justify}`]: justifyEnabled,
847
852
  [`select-shape-${shape}`]: shape !== undefined,
848
853
  [`select-label-placement-${labelPlacement}`]: true,
849
- }) }, h("label", { key: '6005b34a0c50bc4d7653a4276bc232ecd02e083c', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: 'c7e07aa81ae856c057f16275dd058f37c5670a47', class: "select-wrapper-inner" }, h("slot", { key: '7fc2deefe0424404caacdbbd9e08ed43ba55d28a', name: "start" }), h("div", { key: '157d74ee717b1bc30b5f1c233a09b0c8456aa68e', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: 'ea66db304528b82bf9317730b6dce3db2612f235', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '786eb1530b7476f0615d4e7c0bf4e7e4dc66509c', class: "select-highlight" })), this.renderBottomContent()));
854
+ }) }, h("label", { key: 'fcfb40209d6d07d49c7fdca4884b31abf6ac2567', class: "select-wrapper", id: "select-label", onClick: this.onLabelClick }, this.renderLabelContainer(), h("div", { key: 'f191664f2290c3890bde1156157c83a6ff17dbe2', class: "select-wrapper-inner" }, h("slot", { key: '317a28d1115b4214f291e228ce0fe6fc782e57d5', name: "start" }), h("div", { key: 'db68e18abd5ca3a1023d7c7b58bf89893ae18073', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), h("slot", { key: '4274e042267c2234a198b0f65c89477898d08130', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && h("div", { key: '2e2eb1ee2b2791e0683d9afb186fde6e938ca59c', class: "select-highlight" })), this.renderBottomContent()));
850
855
  }
851
856
  static get is() { return "ion-select"; }
852
857
  static get encapsulation() { return "shadow"; }
@@ -423,7 +423,7 @@ export const setRootAriaHidden = (hidden = false) => {
423
423
  }
424
424
  };
425
425
  export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation, opts) => {
426
- var _a, _b, _c;
426
+ var _a, _b;
427
427
  if (overlay.presented) {
428
428
  return;
429
429
  }
@@ -457,10 +457,9 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
457
457
  */
458
458
  const overlayEl = overlay.el;
459
459
  const shouldTrapFocus = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false;
460
- // Only lock out root content when backdrop is always active. Developers relying on
461
- // showBackdrop=false or backdropBreakpoint expect background interaction at some point.
462
- const backdropAlwaysActive = overlayEl.showBackdrop !== false && !(((_a = overlayEl.backdropBreakpoint) !== null && _a !== void 0 ? _a : 0) > 0);
463
- const shouldLockRoot = shouldTrapFocus && backdropAlwaysActive;
460
+ // Only lock out root content when backdrop is active. Developers relying on showBackdrop=false
461
+ // expect background interaction to remain enabled.
462
+ const shouldLockRoot = shouldTrapFocus && overlayEl.showBackdrop !== false;
464
463
  overlay.presented = true;
465
464
  overlay.willPresent.emit();
466
465
  if (shouldLockRoot) {
@@ -472,7 +471,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
472
471
  }
473
472
  document.body.classList.add(BACKDROP_NO_SCROLL);
474
473
  }
475
- (_b = overlay.willPresentShorthand) === null || _b === void 0 ? void 0 : _b.emit();
474
+ (_a = overlay.willPresentShorthand) === null || _a === void 0 ? void 0 : _a.emit();
476
475
  const mode = getIonMode(overlay);
477
476
  // get the user's animation fn if one was provided
478
477
  const animationBuilder = overlay.enterAnimation
@@ -481,7 +480,7 @@ export const present = async (overlay, name, iosEnterAnimation, mdEnterAnimation
481
480
  const completed = await overlayAnimation(overlay, animationBuilder, overlay.el, opts);
482
481
  if (completed) {
483
482
  overlay.didPresent.emit();
484
- (_c = overlay.didPresentShorthand) === null || _c === void 0 ? void 0 : _c.emit();
483
+ (_b = overlay.didPresentShorthand) === null || _b === void 0 ? void 0 : _b.emit();
485
484
  }
486
485
  /**
487
486
  * If the focused element is already
@@ -559,7 +558,7 @@ const restoreElementFocus = async (overlayEl) => {
559
558
  }
560
559
  };
561
560
  export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnimation, opts) => {
562
- var _a, _b, _c;
561
+ var _a, _b;
563
562
  if (!overlay.presented) {
564
563
  return false;
565
564
  }
@@ -575,14 +574,11 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
575
574
  * is dismissed.
576
575
  */
577
576
  const overlaysLockingRoot = presentedOverlays.filter((o) => {
578
- var _a;
579
577
  const el = o;
580
- const backdropAlwaysActive = el.showBackdrop !== false && !(((_a = el.backdropBreakpoint) !== null && _a !== void 0 ? _a : 0) > 0);
581
- return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && backdropAlwaysActive;
578
+ return el.tagName !== 'ION-TOAST' && el.focusTrap !== false && el.showBackdrop !== false;
582
579
  });
583
580
  const overlayEl = overlay.el;
584
- const backdropAlwaysActive = overlayEl.showBackdrop !== false && !(((_a = overlayEl.backdropBreakpoint) !== null && _a !== void 0 ? _a : 0) > 0);
585
- const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && backdropAlwaysActive;
581
+ const locksRoot = overlayEl.tagName !== 'ION-TOAST' && overlayEl.focusTrap !== false && overlayEl.showBackdrop !== false;
586
582
  /**
587
583
  * If this is the last visible overlay that is trapping focus
588
584
  * then we want to re-add the root to the accessibility tree.
@@ -597,7 +593,7 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
597
593
  // Overlay contents should not be clickable during dismiss
598
594
  overlay.el.style.setProperty('pointer-events', 'none');
599
595
  overlay.willDismiss.emit({ data, role });
600
- (_b = overlay.willDismissShorthand) === null || _b === void 0 ? void 0 : _b.emit({ data, role });
596
+ (_a = overlay.willDismissShorthand) === null || _a === void 0 ? void 0 : _a.emit({ data, role });
601
597
  const mode = getIonMode(overlay);
602
598
  const animationBuilder = overlay.leaveAnimation
603
599
  ? overlay.leaveAnimation
@@ -607,7 +603,7 @@ export const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLe
607
603
  await overlayAnimation(overlay, animationBuilder, overlay.el, opts);
608
604
  }
609
605
  overlay.didDismiss.emit({ data, role });
610
- (_c = overlay.didDismissShorthand) === null || _c === void 0 ? void 0 : _c.emit({ data, role });
606
+ (_b = overlay.didDismissShorthand) === null || _b === void 0 ? void 0 : _b.emit({ data, role });
611
607
  // Get a reference to all animations currently assigned to this overlay
612
608
  // Then tear them down to return the overlay to its initial visual state
613
609
  const animations = activeAnimations.get(overlay) || [];
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2025-12-06T22:44:54",
2
+ "timestamp": "2025-12-08T22:02:42",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.38.0",
@@ -1188,7 +1188,13 @@
1188
1188
  "docsTags": []
1189
1189
  }
1190
1190
  ],
1191
- "listeners": [],
1191
+ "listeners": [
1192
+ {
1193
+ "event": "keydown",
1194
+ "capture": false,
1195
+ "passive": false
1196
+ }
1197
+ ],
1192
1198
  "styles": [
1193
1199
  {
1194
1200
  "name": "--backdrop-opacity",
@@ -1485,15 +1491,15 @@
1485
1491
  "ion-select"
1486
1492
  ],
1487
1493
  "dependencies": [
1488
- "ion-backdrop",
1489
1494
  "ion-icon",
1490
- "ion-ripple-effect"
1495
+ "ion-ripple-effect",
1496
+ "ion-backdrop"
1491
1497
  ],
1492
1498
  "dependencyGraph": {
1493
1499
  "ion-action-sheet": [
1494
- "ion-backdrop",
1495
1500
  "ion-icon",
1496
- "ion-ripple-effect"
1501
+ "ion-ripple-effect",
1502
+ "ion-backdrop"
1497
1503
  ],
1498
1504
  "ion-select": [
1499
1505
  "ion-action-sheet"
@@ -31731,9 +31737,9 @@
31731
31737
  "ion-backdrop"
31732
31738
  ],
31733
31739
  "ion-action-sheet": [
31734
- "ion-backdrop",
31735
31740
  "ion-icon",
31736
- "ion-ripple-effect"
31741
+ "ion-ripple-effect",
31742
+ "ion-backdrop"
31737
31743
  ],
31738
31744
  "ion-alert": [
31739
31745
  "ion-ripple-effect",
package/dist/esm/index.js CHANGED
@@ -13,7 +13,7 @@ export { L as LogLevel } from './index-C8IsBmNU.js';
13
13
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-mCdtaoPe.js';
14
14
  export { o as openURL } from './theme-DiVJyqlX.js';
15
15
  export { m as menuController } from './index-CvDIirVx.js';
16
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-DYKBVm6h.js';
16
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-BymNv-BL.js';
17
17
  import './index-ZjP4CjeZ.js';
18
18
  import './gesture-controller-BTEOs1at.js';
19
19
  import './hardware-back-button-CPLxO-Ev.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, a as readTask, h, d as Host, g
5
5
  import { c as createButtonActiveGesture } from './button-active-L570Swow.js';
6
6
  import { r as raf } from './helpers-DEn3pfjm.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.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-DYKBVm6h.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-BymNv-BL.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-CDrldh-5.js';
11
11
  import { c as createAnimation } from './animation-Dt8bGnA-.js';
@@ -119,6 +119,7 @@ const ActionSheet = class {
119
119
  this.delegateController = createDelegateController(this);
120
120
  this.lockController = createLockController();
121
121
  this.triggerController = createTriggerController();
122
+ this.hasRadioButtons = false;
122
123
  this.presented = false;
123
124
  /** @internal */
124
125
  this.hasController = false;
@@ -163,6 +164,19 @@ const ActionSheet = class {
163
164
  }
164
165
  };
165
166
  }
167
+ buttonsChanged() {
168
+ const radioButtons = this.getRadioButtons();
169
+ this.hasRadioButtons = radioButtons.length > 0;
170
+ // Initialize activeRadioId when buttons change
171
+ if (this.hasRadioButtons) {
172
+ const checkedButton = radioButtons.find((b) => { var _a; return ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a['aria-checked']) === 'true'; });
173
+ if (checkedButton) {
174
+ const allButtons = this.getButtons();
175
+ const checkedIndex = allButtons.indexOf(checkedButton);
176
+ this.activeRadioId = this.getButtonId(checkedButton, checkedIndex);
177
+ }
178
+ }
179
+ }
166
180
  onIsOpenChange(newValue, oldValue) {
167
181
  if (newValue === true && oldValue === false) {
168
182
  this.present();
@@ -243,11 +257,122 @@ const ActionSheet = class {
243
257
  }
244
258
  return true;
245
259
  }
260
+ /**
261
+ * Get all buttons regardless of role.
262
+ */
246
263
  getButtons() {
247
264
  return this.buttons.map((b) => {
248
265
  return typeof b === 'string' ? { text: b } : b;
249
266
  });
250
267
  }
268
+ /**
269
+ * Get all radio buttons (buttons with role="radio").
270
+ */
271
+ getRadioButtons() {
272
+ return this.getButtons().filter((b) => {
273
+ var _a;
274
+ const role = (_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role;
275
+ return role === 'radio' && !isCancel(role);
276
+ });
277
+ }
278
+ /**
279
+ * Handle radio button selection and update aria-checked state.
280
+ *
281
+ * @param button The radio button that was selected.
282
+ */
283
+ selectRadioButton(button) {
284
+ const buttonId = this.getButtonId(button);
285
+ // Set the active radio ID (this will trigger a re-render and update aria-checked)
286
+ this.activeRadioId = buttonId;
287
+ }
288
+ /**
289
+ * Get or generate an ID for a button.
290
+ *
291
+ * @param button The button for which to get the ID.
292
+ * @param index Optional index of the button in the buttons array.
293
+ * @returns The ID of the button.
294
+ */
295
+ getButtonId(button, index) {
296
+ if (button.id) {
297
+ return button.id;
298
+ }
299
+ const allButtons = this.getButtons();
300
+ const buttonIndex = index !== undefined ? index : allButtons.indexOf(button);
301
+ return `action-sheet-button-${this.overlayIndex}-${buttonIndex}`;
302
+ }
303
+ /**
304
+ * When the action sheet has radio buttons, we want to follow the
305
+ * keyboard navigation pattern for radio groups:
306
+ * - Arrow Down/Right: Move to the next radio button (wrap to first if at end)
307
+ * - Arrow Up/Left: Move to the previous radio button (wrap to last if at start)
308
+ * - Space/Enter: Select the focused radio button and trigger its handler
309
+ */
310
+ onKeydown(ev) {
311
+ // Only handle keyboard navigation if we have radio buttons
312
+ if (!this.hasRadioButtons || !this.presented) {
313
+ return;
314
+ }
315
+ const target = ev.target;
316
+ // Ignore if the target element is not within the action sheet or not a radio button
317
+ if (!this.el.contains(target) ||
318
+ !target.classList.contains('action-sheet-button') ||
319
+ target.getAttribute('role') !== 'radio') {
320
+ return;
321
+ }
322
+ // Get all radio button elements and filter out disabled ones
323
+ const radios = Array.from(this.el.querySelectorAll('.action-sheet-button[role="radio"]')).filter((el) => !el.disabled);
324
+ const currentIndex = radios.findIndex((radio) => radio.id === target.id);
325
+ if (currentIndex === -1) {
326
+ return;
327
+ }
328
+ const allButtons = this.getButtons();
329
+ const radioButtons = this.getRadioButtons();
330
+ /**
331
+ * Build a map of button element IDs to their ActionSheetButton
332
+ * config objects.
333
+ * This allows us to quickly look up which button config corresponds
334
+ * to a DOM element when handling keyboard navigation
335
+ * (e.g., whenuser presses Space/Enter or arrow keys).
336
+ * The key is the ID that was set on the DOM element during render,
337
+ * and the value is the ActionSheetButton config that contains the
338
+ * handler and other properties.
339
+ */
340
+ const buttonIdMap = new Map();
341
+ radioButtons.forEach((b) => {
342
+ const allIndex = allButtons.indexOf(b);
343
+ const buttonId = this.getButtonId(b, allIndex);
344
+ buttonIdMap.set(buttonId, b);
345
+ });
346
+ let nextEl;
347
+ if (['ArrowDown', 'ArrowRight'].includes(ev.key)) {
348
+ ev.preventDefault();
349
+ ev.stopPropagation();
350
+ nextEl = currentIndex === radios.length - 1 ? radios[0] : radios[currentIndex + 1];
351
+ }
352
+ else if (['ArrowUp', 'ArrowLeft'].includes(ev.key)) {
353
+ ev.preventDefault();
354
+ ev.stopPropagation();
355
+ nextEl = currentIndex === 0 ? radios[radios.length - 1] : radios[currentIndex - 1];
356
+ }
357
+ else if (ev.key === ' ' || ev.key === 'Enter') {
358
+ ev.preventDefault();
359
+ ev.stopPropagation();
360
+ const button = buttonIdMap.get(target.id);
361
+ if (button) {
362
+ this.selectRadioButton(button);
363
+ this.buttonClick(button);
364
+ }
365
+ return;
366
+ }
367
+ // Focus the next radio button
368
+ if (nextEl) {
369
+ const button = buttonIdMap.get(nextEl.id);
370
+ if (button) {
371
+ this.selectRadioButton(button);
372
+ nextEl.focus();
373
+ }
374
+ }
375
+ }
251
376
  connectedCallback() {
252
377
  prepareOverlay(this.el);
253
378
  this.triggerChanged();
@@ -264,6 +389,8 @@ const ActionSheet = class {
264
389
  if (!((_a = this.htmlAttributes) === null || _a === void 0 ? void 0 : _a.id)) {
265
390
  setOverlayId(this.el);
266
391
  }
392
+ // Initialize activeRadioId for radio buttons
393
+ this.buttonsChanged();
267
394
  }
268
395
  componentDidLoad() {
269
396
  /**
@@ -301,22 +428,74 @@ const ActionSheet = class {
301
428
  */
302
429
  this.triggerChanged();
303
430
  }
431
+ renderActionSheetButtons(filteredButtons) {
432
+ const mode = getIonMode(this);
433
+ const { activeRadioId } = this;
434
+ return filteredButtons.map((b, index) => {
435
+ var _a;
436
+ const isRadio = ((_a = b.htmlAttributes) === null || _a === void 0 ? void 0 : _a.role) === 'radio';
437
+ const buttonId = this.getButtonId(b, index);
438
+ const radioButtons = this.getRadioButtons();
439
+ const isActiveRadio = isRadio && buttonId === activeRadioId;
440
+ const isFirstRadio = isRadio && b === radioButtons[0];
441
+ // For radio buttons, set tabindex: 0 for the active one, -1 for others
442
+ // For non-radio buttons, use default tabindex (undefined, which means 0)
443
+ /**
444
+ * For radio buttons, set tabindex based on activeRadioId
445
+ * - If the button is the active radio, tabindex is 0
446
+ * - If no radio is active, the first radio button should have tabindex 0
447
+ * - All other radio buttons have tabindex -1
448
+ * For non-radio buttons, use default tabindex (undefined, which means 0)
449
+ */
450
+ let tabIndex;
451
+ if (isRadio) {
452
+ // Focus on the active radio button
453
+ if (isActiveRadio) {
454
+ tabIndex = 0;
455
+ }
456
+ else if (!activeRadioId && isFirstRadio) {
457
+ // No active radio, first radio gets focus
458
+ tabIndex = 0;
459
+ }
460
+ else {
461
+ // All other radios are not focusable
462
+ tabIndex = -1;
463
+ }
464
+ }
465
+ else {
466
+ tabIndex = undefined;
467
+ }
468
+ // For radio buttons, set aria-checked based on activeRadioId
469
+ // Otherwise, use the value from htmlAttributes if provided
470
+ const htmlAttrs = Object.assign({}, b.htmlAttributes);
471
+ if (isRadio) {
472
+ htmlAttrs['aria-checked'] = isActiveRadio ? 'true' : 'false';
473
+ }
474
+ return (h("button", Object.assign({}, htmlAttrs, { role: isRadio ? 'radio' : undefined, type: "button", id: buttonId, class: Object.assign(Object.assign({}, buttonClass(b)), { 'action-sheet-selected': isActiveRadio }), onClick: () => {
475
+ if (isRadio) {
476
+ this.selectRadioButton(b);
477
+ }
478
+ this.buttonClick(b);
479
+ }, disabled: b.disabled, tabIndex: tabIndex }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null)));
480
+ });
481
+ }
304
482
  render() {
305
- const { header, htmlAttributes, overlayIndex } = this;
483
+ const { header, htmlAttributes, overlayIndex, hasRadioButtons } = this;
306
484
  const mode = getIonMode(this);
307
485
  const allButtons = this.getButtons();
308
486
  const cancelButton = allButtons.find((b) => b.role === 'cancel');
309
487
  const buttons = allButtons.filter((b) => b.role !== 'cancel');
310
488
  const headerID = `action-sheet-${overlayIndex}-header`;
311
- return (h(Host, Object.assign({ key: '9fef156b2a1f09ca4a6c1fe1f37c374139bde03c', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
489
+ return (h(Host, Object.assign({ key: '173fcff5b1da7c33c267de4667591c946b8c8d03', role: "dialog", "aria-modal": "true", "aria-labelledby": header !== undefined ? headerID : null, tabindex: "-1" }, htmlAttributes, { style: {
312
490
  zIndex: `${20000 + this.overlayIndex}`,
313
- }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '81cf3f7d19864e041813987b46d2d115b8466819', tappable: this.backdropDismiss }), h("div", { key: '791c6a976683646fc306a42c15c5078b6f06a45f', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'a350b489ef7852eab9dc2227ce6d92da27dd9bf9', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '69ba51ee13510c1a411d87cb4845b11b7302a36f', class: "action-sheet-container" }, h("div", { key: 'bded15b8306c36591e526f0f99e1eeabcbab3915', class: "action-sheet-group", ref: (el) => (this.groupEl = el) }, header !== undefined && (h("div", { key: '06b5147c0f6d9180fe8f12e75c9b4a0310226adc', id: headerID, class: {
491
+ }, class: Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'action-sheet-translucent': this.translucent }), onIonActionSheetWillDismiss: this.dispatchCancelHandler, onIonBackdropTap: this.onBackdropTap }), h("ion-backdrop", { key: '521ede659f747864f6c974e09016436eceb7158c', tappable: this.backdropDismiss }), h("div", { key: '7a7946fc434bc444f16a70638f5e948c69d33fcd', tabindex: "0", "aria-hidden": "true" }), h("div", { key: 'bcff39a580489dbafa255842e57aa8602c6d0f18', class: "action-sheet-wrapper ion-overlay-wrapper", ref: (el) => (this.wrapperEl = el) }, h("div", { key: '84bba13ce14261f0f0daa3f9c77648c9e7f36e0e', class: "action-sheet-container" }, h("div", { key: 'd9c8ac404fd6719a7adf8cb36549f67616f9a0c4', class: "action-sheet-group", ref: (el) => (this.groupEl = el), role: hasRadioButtons ? 'radiogroup' : undefined }, header !== undefined && (h("div", { key: '180433a8ad03ef5c54728a1a8f34715b6921d658', id: headerID, class: {
314
492
  'action-sheet-title': true,
315
493
  'action-sheet-has-sub-title': this.subHeader !== undefined,
316
- } }, header, this.subHeader && h("div", { key: '54874362a75c679aba803bf4f8768f5404d2dd28', class: "action-sheet-sub-title" }, this.subHeader))), buttons.map((b) => (h("button", Object.assign({}, b.htmlAttributes, { type: "button", id: b.id, class: buttonClass(b), onClick: () => this.buttonClick(b), disabled: b.disabled }), h("span", { class: "action-sheet-button-inner" }, b.icon && h("ion-icon", { icon: b.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" }), b.text), mode === 'md' && h("ion-ripple-effect", null))))), cancelButton && (h("div", { key: '67b0de298eb424f3dea846a841b7a06d70e3930d', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: 'e7e3f9a5495eea9b97dbf885ef36944f2e420eff' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: 'f889d29ed6c3d14bbc1d805888351d87f5122377', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '7c05cf424b38c37fd40aaeb42a494387291571fb', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: 'bed927b477dc2708a5123ef560274fca9819b3d6' })))))), h("div", { key: 'c5df1b11dc15a93892d57065d3dd5fbe02e43b39', tabindex: "0", "aria-hidden": "true" })));
494
+ } }, header, this.subHeader && h("div", { key: '7138e79e61b1a8f42bc5a9175c57fa2f15d7ec5a', class: "action-sheet-sub-title" }, this.subHeader))), this.renderActionSheetButtons(buttons)), cancelButton && (h("div", { key: 'b617c722f5b8028d73ed34b69310f312c65f34a7', class: "action-sheet-group action-sheet-group-cancel" }, h("button", Object.assign({ key: 'd0dd876fc48815df3710413c201c0b445a8e16c0' }, cancelButton.htmlAttributes, { type: "button", class: buttonClass(cancelButton), onClick: () => this.buttonClick(cancelButton) }), h("span", { key: 'e7b960157cc6fc5fe92a12090b2be55e8ae072e4', class: "action-sheet-button-inner" }, cancelButton.icon && (h("ion-icon", { key: '05498ffc60cab911dbff0ecbc6168dea59ada9a5', icon: cancelButton.icon, "aria-hidden": "true", lazy: false, class: "action-sheet-icon" })), cancelButton.text), mode === 'md' && h("ion-ripple-effect", { key: '3d401346cea301be4ca03671f7370f6f4b0b6bde' })))))), h("div", { key: '971f3c5fcc07f36c28eb469a47ec0290c692e139', tabindex: "0", "aria-hidden": "true" })));
317
495
  }
318
496
  get el() { return getElement(this); }
319
497
  static get watchers() { return {
498
+ "buttons": ["buttonsChanged"],
320
499
  "isOpen": ["onIsOpenChange"],
321
500
  "trigger": ["triggerChanged"]
322
501
  }; }
@@ -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-L570Swow.js';
7
7
  import { r as raf } from './helpers-DEn3pfjm.js';
8
8
  import { c as createLockController } from './lock-controller-B-hirT0v.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-DYKBVm6h.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-BymNv-BL.js';
10
10
  import { g as getClassMap } from './theme-DiVJyqlX.js';
11
11
  import { b as getIonMode } from './ionic-global-CDrldh-5.js';
12
12
  import { c as createAnimation } from './animation-Dt8bGnA-.js';
@@ -4,7 +4,7 @@
4
4
  import { j as printIonError, f as printIonWarning, r as registerInstance, c as createEvent, w as writeTask, h, d as Host, g as getElement } from './index-C8IsBmNU.js';
5
5
  import { startFocusVisible } from './focus-visible-BmVRXR1y.js';
6
6
  import { r as raf, g as getElementRoot, a as renderHiddenInput, e as clamp } from './helpers-DEn3pfjm.js';
7
- import { F as FOCUS_TRAP_DISABLE_CLASS, 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-DYKBVm6h.js';
7
+ import { F as FOCUS_TRAP_DISABLE_CLASS, 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-BymNv-BL.js';
8
8
  import { i as isRTL } from './dir-C53feagD.js';
9
9
  import { c as createColorClasses, g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { l as chevronDown, o as caretUpSharp, p as chevronForward, q as caretDownSharp, c as chevronBack } from './index-DV3sJJW8.js';
@@ -5,7 +5,7 @@ import { r as registerInstance, c as createEvent, e as config, h, d as Host, g a
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-mCdtaoPe.js';
6
6
  import { r as raf } from './helpers-DEn3pfjm.js';
7
7
  import { c as createLockController } from './lock-controller-B-hirT0v.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-DYKBVm6h.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-BymNv-BL.js';
9
9
  import { g as getClassMap } from './theme-DiVJyqlX.js';
10
10
  import { b as getIonMode } from './ionic-global-CDrldh-5.js';
11
11
  import { c as createAnimation } from './animation-Dt8bGnA-.js';
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { r as registerInstance, c as createEvent, e as config, j as printIonError, h, d as Host, g as getElement } from './index-C8IsBmNU.js';
5
5
  import { g as getTimeGivenProgression } from './cubic-bezier-hHmYLOfE.js';
6
- import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-DYKBVm6h.js';
6
+ import { o as getPresentedOverlay, B as BACKDROP, n as focusFirstDescendant, q as focusLastDescendant, G as GESTURE } from './overlays-BymNv-BL.js';
7
7
  import { G as GESTURE_CONTROLLER } from './gesture-controller-BTEOs1at.js';
8
8
  import { shouldUseCloseWatcher } from './hardware-back-button-CPLxO-Ev.js';
9
9
  import { o as isEndSide, i as inheritAriaAttributes, l as assert, e as clamp } from './helpers-DEn3pfjm.js';