@ionic/core 8.6.3-dev.11750799190.186437ae → 8.6.3-dev.11751305829.1112929c

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 (84) hide show
  1. package/components/action-sheet.js +8 -9
  2. package/components/alert.js +7 -8
  3. package/components/ion-app.js +3 -1
  4. package/components/ion-datetime.js +8 -2
  5. package/components/ion-loading.js +7 -8
  6. package/components/ion-menu.js +27 -5
  7. package/components/ion-reorder-group.js +1 -2
  8. package/components/ion-router.js +1 -0
  9. package/components/ion-searchbar.js +4 -6
  10. package/components/ion-toast.js +6 -7
  11. package/components/modal.js +213 -15
  12. package/components/popover.js +8 -7
  13. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -9
  14. package/dist/cjs/ion-alert.cjs.entry.js +7 -8
  15. package/dist/cjs/ion-app_8.cjs.entry.js +3 -1
  16. package/dist/cjs/ion-datetime_3.cjs.entry.js +8 -2
  17. package/dist/cjs/ion-loading.cjs.entry.js +7 -8
  18. package/dist/cjs/ion-menu_3.cjs.entry.js +27 -5
  19. package/dist/cjs/ion-modal.cjs.entry.js +213 -15
  20. package/dist/cjs/ion-popover.cjs.entry.js +8 -7
  21. package/dist/cjs/ion-reorder_2.cjs.entry.js +1 -2
  22. package/dist/cjs/ion-route_4.cjs.entry.js +1 -0
  23. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -6
  24. package/dist/cjs/ion-toast.cjs.entry.js +6 -7
  25. package/dist/collection/components/action-sheet/action-sheet.js +11 -12
  26. package/dist/collection/components/alert/alert.js +10 -11
  27. package/dist/collection/components/app/app.js +8 -3
  28. package/dist/collection/components/datetime/datetime.js +23 -8
  29. package/dist/collection/components/loading/loading.js +10 -11
  30. package/dist/collection/components/menu/menu.js +62 -19
  31. package/dist/collection/components/modal/animations/ios.enter.js +2 -2
  32. package/dist/collection/components/modal/animations/ios.leave.js +2 -2
  33. package/dist/collection/components/modal/animations/ios.transition.js +124 -0
  34. package/dist/collection/components/modal/modal.js +108 -17
  35. package/dist/collection/components/popover/popover.js +18 -14
  36. package/dist/collection/components/reorder-group/reorder-group.js +2 -3
  37. package/dist/collection/components/router/router.js +5 -1
  38. package/dist/collection/components/searchbar/searchbar.js +5 -7
  39. package/dist/collection/components/toast/toast.js +9 -10
  40. package/dist/docs.json +138 -72
  41. package/dist/esm/ion-action-sheet.entry.js +8 -9
  42. package/dist/esm/ion-alert.entry.js +7 -8
  43. package/dist/esm/ion-app_8.entry.js +3 -1
  44. package/dist/esm/ion-datetime_3.entry.js +8 -2
  45. package/dist/esm/ion-loading.entry.js +7 -8
  46. package/dist/esm/ion-menu_3.entry.js +27 -5
  47. package/dist/esm/ion-modal.entry.js +213 -15
  48. package/dist/esm/ion-popover.entry.js +8 -7
  49. package/dist/esm/ion-reorder_2.entry.js +1 -2
  50. package/dist/esm/ion-route_4.entry.js +1 -0
  51. package/dist/esm/ion-searchbar.entry.js +4 -6
  52. package/dist/esm/ion-toast.entry.js +6 -7
  53. package/dist/ionic/ionic.esm.js +1 -1
  54. package/dist/ionic/{p-96389029.entry.js → p-01123ecf.entry.js} +1 -1
  55. package/dist/ionic/{p-cb787a4b.entry.js → p-03d21728.entry.js} +1 -1
  56. package/dist/ionic/{p-9e699d4a.entry.js → p-0d131a02.entry.js} +1 -1
  57. package/dist/ionic/p-0df5b2a5.entry.js +4 -0
  58. package/dist/ionic/{p-6b666996.entry.js → p-2d0eccfb.entry.js} +1 -1
  59. package/dist/ionic/{p-ead42a37.entry.js → p-5f671887.entry.js} +1 -1
  60. package/dist/ionic/p-69f91268.entry.js +4 -0
  61. package/dist/ionic/{p-2020aa51.entry.js → p-b758a177.entry.js} +1 -1
  62. package/dist/ionic/p-b9ba04ca.entry.js +4 -0
  63. package/dist/ionic/{p-cd12ed1c.entry.js → p-d8429eb4.entry.js} +1 -1
  64. package/dist/ionic/{p-3a4feac2.entry.js → p-e37d6c67.entry.js} +1 -1
  65. package/dist/types/components/action-sheet/action-sheet.d.ts +5 -6
  66. package/dist/types/components/alert/alert.d.ts +5 -6
  67. package/dist/types/components/app/app.d.ts +2 -0
  68. package/dist/types/components/datetime/datetime.d.ts +6 -0
  69. package/dist/types/components/loading/loading.d.ts +5 -6
  70. package/dist/types/components/menu/menu.d.ts +25 -3
  71. package/dist/types/components/modal/animations/ios.transition.d.ts +14 -0
  72. package/dist/types/components/modal/modal.d.ts +20 -6
  73. package/dist/types/components/popover/popover.d.ts +6 -5
  74. package/dist/types/components/reorder-group/reorder-group.d.ts +0 -1
  75. package/dist/types/components/router/router.d.ts +1 -0
  76. package/dist/types/components/searchbar/searchbar.d.ts +0 -2
  77. package/dist/types/components/toast/toast.d.ts +4 -5
  78. package/dist/types/components.d.ts +32 -18
  79. package/hydrate/index.js +293 -70
  80. package/hydrate/index.mjs +293 -70
  81. package/package.json +2 -2
  82. package/dist/ionic/p-6dd2e493.entry.js +0 -4
  83. package/dist/ionic/p-7149db7e.entry.js +0 -4
  84. package/dist/ionic/p-bec79123.entry.js +0 -4
@@ -0,0 +1,124 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { createAnimation } from "../../../utils/animation/animation";
5
+ import { getElementRoot } from "../../../utils/helpers";
6
+ import { SwipeToCloseDefaults } from "../gestures/swipe-to-close";
7
+ /**
8
+ * Transition animation from portrait view to landscape view
9
+ * This handles the case where a card modal is open in portrait view
10
+ * and the user switches to landscape view
11
+ */
12
+ export const portraitToLandscapeTransition = (baseEl, opts, duration = 300) => {
13
+ const { presentingEl } = opts;
14
+ if (!presentingEl) {
15
+ // No transition needed for non-card modals
16
+ return createAnimation('portrait-to-landscape-transition');
17
+ }
18
+ const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
19
+ const presentingElRoot = getElementRoot(presentingEl);
20
+ const bodyEl = document.body;
21
+ const baseAnimation = createAnimation('portrait-to-landscape-transition')
22
+ .addElement(baseEl)
23
+ .easing('cubic-bezier(0.32,0.72,0,1)')
24
+ .duration(duration);
25
+ const presentingAnimation = createAnimation();
26
+ if (!hasCardModal) {
27
+ // Non-card modal: transition from portrait state to landscape state
28
+ // Portrait: presentingEl has transform and body has black background
29
+ // Landscape: no transform, no body background, modal wrapper opacity changes
30
+ const root = getElementRoot(baseEl);
31
+ const wrapperAnimation = createAnimation()
32
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
33
+ .fromTo('opacity', '1', '1'); // Keep wrapper visible in landscape
34
+ const backdropAnimation = createAnimation()
35
+ .addElement(root.querySelector('ion-backdrop'))
36
+ .fromTo('opacity', 'var(--backdrop-opacity)', 'var(--backdrop-opacity)'); // Keep backdrop visible
37
+ // Animate presentingEl from portrait state back to normal
38
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
39
+ const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
40
+ const fromTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
41
+ presentingAnimation
42
+ .addElement(presentingEl)
43
+ .beforeAddWrite(() => bodyEl.style.setProperty('background-color', ''))
44
+ .fromTo('transform', fromTransform, 'translateY(0px) scale(1)')
45
+ .fromTo('filter', 'contrast(0.85)', 'contrast(1)')
46
+ .fromTo('border-radius', '10px 10px 0 0', '0px');
47
+ baseAnimation.addAnimation([presentingAnimation, wrapperAnimation, backdropAnimation]);
48
+ }
49
+ else {
50
+ // Card modal: transition from portrait card state to landscape card state
51
+ const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
52
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
53
+ const fromTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
54
+ const toTransform = `translateY(-10px) scale(${toPresentingScale})`;
55
+ presentingAnimation
56
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
57
+ .fromTo('transform', fromTransform, toTransform)
58
+ .fromTo('filter', 'contrast(0.85)', 'contrast(0.85)'); // Keep same contrast for card
59
+ const shadowAnimation = createAnimation()
60
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
61
+ .fromTo('opacity', '0', '0') // Shadow stays hidden in landscape for card modals
62
+ .fromTo('transform', fromTransform, toTransform);
63
+ baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
64
+ }
65
+ return baseAnimation;
66
+ };
67
+ /**
68
+ * Transition animation from landscape view to portrait view
69
+ * This handles the case where a card modal is open in landscape view
70
+ * and the user switches to portrait view
71
+ */
72
+ export const landscapeToPortraitTransition = (baseEl, opts, duration = 300) => {
73
+ const { presentingEl } = opts;
74
+ if (!presentingEl) {
75
+ // No transition needed for non-card modals
76
+ return createAnimation('landscape-to-portrait-transition');
77
+ }
78
+ const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
79
+ const presentingElRoot = getElementRoot(presentingEl);
80
+ const bodyEl = document.body;
81
+ const baseAnimation = createAnimation('landscape-to-portrait-transition')
82
+ .addElement(baseEl)
83
+ .easing('cubic-bezier(0.32,0.72,0,1)')
84
+ .duration(duration);
85
+ const presentingAnimation = createAnimation();
86
+ if (!hasCardModal) {
87
+ // Non-card modal: transition from landscape state to portrait state
88
+ const root = getElementRoot(baseEl);
89
+ const wrapperAnimation = createAnimation()
90
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
91
+ .fromTo('opacity', '1', '1'); // Keep wrapper visible
92
+ const backdropAnimation = createAnimation()
93
+ .addElement(root.querySelector('ion-backdrop'))
94
+ .fromTo('opacity', 'var(--backdrop-opacity)', 'var(--backdrop-opacity)'); // Keep backdrop visible
95
+ // Animate presentingEl from normal state to portrait state
96
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
97
+ const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
98
+ const toTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
99
+ presentingAnimation
100
+ .addElement(presentingEl)
101
+ .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))
102
+ .fromTo('transform', 'translateY(0px) scale(1)', toTransform)
103
+ .fromTo('filter', 'contrast(1)', 'contrast(0.85)')
104
+ .fromTo('border-radius', '0px', '10px 10px 0 0');
105
+ baseAnimation.addAnimation([presentingAnimation, wrapperAnimation, backdropAnimation]);
106
+ }
107
+ else {
108
+ // Card modal: transition from landscape card state to portrait card state
109
+ const toPresentingScale = SwipeToCloseDefaults.MIN_PRESENTING_SCALE;
110
+ const transformOffset = !CSS.supports('width', 'max(0px, 1px)') ? '30px' : 'max(30px, var(--ion-safe-area-top))';
111
+ const fromTransform = `translateY(-10px) scale(${toPresentingScale})`;
112
+ const toTransform = `translateY(${transformOffset}) scale(${toPresentingScale})`;
113
+ presentingAnimation
114
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
115
+ .fromTo('transform', fromTransform, toTransform)
116
+ .fromTo('filter', 'contrast(0.85)', 'contrast(0.85)'); // Keep same contrast for card
117
+ const shadowAnimation = createAnimation()
118
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
119
+ .fromTo('opacity', '0', '0') // Shadow stays hidden
120
+ .fromTo('transform', fromTransform, toTransform);
121
+ baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);
122
+ }
123
+ return baseAnimation;
124
+ };
@@ -16,6 +16,7 @@ import { getIonMode } from "../../global/ionic-global";
16
16
  import { KEYBOARD_DID_OPEN } from "../../utils/keyboard/keyboard";
17
17
  import { iosEnterAnimation } from "./animations/ios.enter";
18
18
  import { iosLeaveAnimation } from "./animations/ios.leave";
19
+ import { portraitToLandscapeTransition, landscapeToPortraitTransition } from "./animations/ios.transition";
19
20
  import { mdEnterAnimation } from "./animations/md.enter";
20
21
  import { mdLeaveAnimation } from "./animations/md.leave";
21
22
  import { createSheetGesture } from "./gestures/sheet";
@@ -184,6 +185,17 @@ export class Modal {
184
185
  el.dispatchEvent(ev);
185
186
  }
186
187
  };
188
+ /**
189
+ * When the modal receives focus directly, pass focus to the handle
190
+ * if it exists and is focusable, otherwise let the focus trap handle it.
191
+ */
192
+ this.onModalFocus = (ev) => {
193
+ const { dragHandleEl, el } = this;
194
+ // Only handle focus if the modal itself was focused (not a child element)
195
+ if (ev.target === el && dragHandleEl && dragHandleEl.tabIndex !== -1) {
196
+ dragHandleEl.focus();
197
+ }
198
+ };
187
199
  }
188
200
  onIsOpenChange(newValue, oldValue) {
189
201
  if (newValue === true && oldValue === false) {
@@ -211,6 +223,7 @@ export class Modal {
211
223
  }
212
224
  disconnectedCallback() {
213
225
  this.triggerController.removeClickListener();
226
+ this.cleanupViewTransitionListener();
214
227
  }
215
228
  componentWillLoad() {
216
229
  var _a;
@@ -421,6 +434,8 @@ export class Modal {
421
434
  else if (hasCardModal) {
422
435
  this.initSwipeToClose();
423
436
  }
437
+ // Initialize view transition listener for iOS card modals
438
+ this.initViewTransitionListener();
424
439
  unlock();
425
440
  }
426
441
  initSwipeToClose() {
@@ -515,13 +530,13 @@ export class Modal {
515
530
  }
516
531
  /**
517
532
  * Dismiss the modal overlay after it has been presented.
518
- *
519
- * @param data Any data to emit in the dismiss events.
520
- * @param role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.
521
- *
522
533
  * This is a no-op if the overlay has not been presented yet. If you want
523
534
  * to remove an overlay from the DOM that was never presented, use the
524
535
  * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
536
+ *
537
+ * @param data Any data to emit in the dismiss events.
538
+ * @param role The role of the element that is dismissing the modal.
539
+ * For example, `cancel` or `backdrop`.
525
540
  */
526
541
  async dismiss(data, role) {
527
542
  var _a;
@@ -574,6 +589,7 @@ export class Modal {
574
589
  if (this.gesture) {
575
590
  this.gesture.destroy();
576
591
  }
592
+ this.cleanupViewTransitionListener();
577
593
  }
578
594
  this.currentBreakpoint = undefined;
579
595
  this.animation = undefined;
@@ -593,8 +609,10 @@ export class Modal {
593
609
  return eventMethod(this.el, 'ionModalWillDismiss');
594
610
  }
595
611
  /**
596
- * Move a sheet style modal to a specific breakpoint. The breakpoint value must
597
- * be a value defined in your `breakpoints` array.
612
+ * Move a sheet style modal to a specific breakpoint.
613
+ *
614
+ * @param breakpoint The breakpoint value to move the sheet modal to.
615
+ * Must be a value defined in your `breakpoints` array.
598
616
  */
599
617
  async setCurrentBreakpoint(breakpoint) {
600
618
  if (!this.isSheetModal) {
@@ -647,26 +665,96 @@ export class Modal {
647
665
  await this.setCurrentBreakpoint(nextBreakpoint);
648
666
  return true;
649
667
  }
668
+ initViewTransitionListener() {
669
+ // Only enable for iOS card modals when no custom animations are provided
670
+ if (getIonMode(this) !== 'ios' || !this.presentingElement || this.enterAnimation || this.leaveAnimation) {
671
+ return;
672
+ }
673
+ // Set initial view state
674
+ this.currentViewIsPortrait = window.innerWidth < 768;
675
+ // Create debounced resize handler
676
+ let resizeTimeout;
677
+ this.resizeListener = () => {
678
+ clearTimeout(resizeTimeout);
679
+ resizeTimeout = setTimeout(() => {
680
+ this.handleViewTransition();
681
+ }, 100); // Debounce for 100ms to avoid excessive calls
682
+ };
683
+ window.addEventListener('resize', this.resizeListener);
684
+ }
685
+ handleViewTransition() {
686
+ const isPortrait = window.innerWidth < 768;
687
+ // Only transition if view state actually changed
688
+ if (this.currentViewIsPortrait === isPortrait) {
689
+ return;
690
+ }
691
+ // Cancel any ongoing transition animation
692
+ if (this.viewTransitionAnimation) {
693
+ this.viewTransitionAnimation.destroy();
694
+ this.viewTransitionAnimation = undefined;
695
+ }
696
+ const { presentingElement } = this;
697
+ if (!presentingElement) {
698
+ return;
699
+ }
700
+ // Create transition animation
701
+ let transitionAnimation;
702
+ if (this.currentViewIsPortrait && !isPortrait) {
703
+ // Portrait to landscape transition
704
+ transitionAnimation = portraitToLandscapeTransition(this.el, {
705
+ presentingEl: presentingElement,
706
+ currentBreakpoint: this.currentBreakpoint,
707
+ backdropBreakpoint: this.backdropBreakpoint,
708
+ expandToScroll: this.expandToScroll,
709
+ });
710
+ }
711
+ else {
712
+ // Landscape to portrait transition
713
+ transitionAnimation = landscapeToPortraitTransition(this.el, {
714
+ presentingEl: presentingElement,
715
+ currentBreakpoint: this.currentBreakpoint,
716
+ backdropBreakpoint: this.backdropBreakpoint,
717
+ expandToScroll: this.expandToScroll,
718
+ });
719
+ }
720
+ // Update state and play animation
721
+ this.currentViewIsPortrait = isPortrait;
722
+ this.viewTransitionAnimation = transitionAnimation;
723
+ transitionAnimation.play().then(() => {
724
+ this.viewTransitionAnimation = undefined;
725
+ });
726
+ }
727
+ cleanupViewTransitionListener() {
728
+ if (this.resizeListener) {
729
+ window.removeEventListener('resize', this.resizeListener);
730
+ this.resizeListener = undefined;
731
+ }
732
+ if (this.viewTransitionAnimation) {
733
+ this.viewTransitionAnimation.destroy();
734
+ this.viewTransitionAnimation = undefined;
735
+ }
736
+ }
650
737
  render() {
651
738
  const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
652
739
  const showHandle = handle !== false && isSheetModal;
653
740
  const mode = getIonMode(this);
654
741
  const isCardModal = presentingElement !== undefined && mode === 'ios';
655
742
  const isHandleCycle = handleBehavior === 'cycle';
656
- return (h(Host, Object.assign({ key: '04c094d52dcd7095fc08d74ab7f3e37b498ec480', "no-router": true,
743
+ const isSheetModalWithHandle = isSheetModal && showHandle;
744
+ return (h(Host, Object.assign({ key: 'd5bcaa588471573e1bcbd99997b306c8ecdd124f', "no-router": true,
657
745
  // Allow the modal to be navigable when the handle is focusable
658
- tabIndex: !isHandleCycle ? -1 : 0 }, htmlAttributes, { style: {
746
+ tabIndex: isHandleCycle && isSheetModalWithHandle ? 0 : -1 }, htmlAttributes, { style: {
659
747
  zIndex: `${20000 + this.overlayIndex}`,
660
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { key: '20e56317fbf12a75fbcfd4abb394146de1764b9b', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: 'cb87817485a204ee7bc117aaa9472de8acaebfd6', class: "modal-shadow" }), h("div", Object.assign({ key: 'b5e88cd83782a5d09fe2caf298aaaf67d226f699',
748
+ }, 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: '78b954a1c50a0325eb51db04314e86701c66d840', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { key: '21887227c272f5eba1b3d164be3572bd710d415c', class: "modal-shadow" }), h("div", Object.assign({ key: 'a40472a9065c04ad12fb7b2b2a05e5021f077ad5',
661
749
  /*
662
750
  role and aria-modal must be used on the
663
751
  same element. They must also be set inside the
664
752
  shadow DOM otherwise ion-button will not be highlighted
665
753
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
666
754
  */
667
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: '90340f02007b74da70ace1d5035d7b49573fad2b', class: "modal-handle",
755
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (h("button", { key: 'a4973f66587546031d1cc0197e1ba7c2521a3fbc', class: "modal-handle",
668
756
  // Prevents the handle from receiving keyboard focus when it does not cycle
669
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), h("slot", { key: 'c7db14c97e2a80b0b9680635ea9d4361e8f4b77e' }))));
757
+ 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: 'ee5e007e3a4e592d98f1b5a5d31ad55e6faa3bdb' }))));
670
758
  }
671
759
  static get is() { return "ion-modal"; }
672
760
  static get encapsulation() { return "shadow"; }
@@ -1454,7 +1542,7 @@ export class Modal {
1454
1542
  }, {
1455
1543
  "name": "role",
1456
1544
  "type": "string | undefined",
1457
- "docs": "The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
1545
+ "docs": "The role of the element that is dismissing the modal.\nFor example, `cancel` or `backdrop`."
1458
1546
  }],
1459
1547
  "references": {
1460
1548
  "Promise": {
@@ -1469,13 +1557,13 @@ export class Modal {
1469
1557
  "return": "Promise<boolean>"
1470
1558
  },
1471
1559
  "docs": {
1472
- "text": "Dismiss the modal overlay after it has been presented.",
1560
+ "text": "Dismiss the modal overlay after it has been presented.\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.",
1473
1561
  "tags": [{
1474
1562
  "name": "param",
1475
1563
  "text": "data Any data to emit in the dismiss events."
1476
1564
  }, {
1477
1565
  "name": "param",
1478
- "text": "role The role of the element that is dismissing the modal. For example, 'cancel' or 'backdrop'.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
1566
+ "text": "role The role of the element that is dismissing the modal.\nFor example, `cancel` or `backdrop`."
1479
1567
  }]
1480
1568
  }
1481
1569
  },
@@ -1537,7 +1625,7 @@ export class Modal {
1537
1625
  "parameters": [{
1538
1626
  "name": "breakpoint",
1539
1627
  "type": "number",
1540
- "docs": ""
1628
+ "docs": "The breakpoint value to move the sheet modal to.\nMust be a value defined in your `breakpoints` array."
1541
1629
  }],
1542
1630
  "references": {
1543
1631
  "Promise": {
@@ -1548,8 +1636,11 @@ export class Modal {
1548
1636
  "return": "Promise<void>"
1549
1637
  },
1550
1638
  "docs": {
1551
- "text": "Move a sheet style modal to a specific breakpoint. The breakpoint value must\nbe a value defined in your `breakpoints` array.",
1552
- "tags": []
1639
+ "text": "Move a sheet style modal to a specific breakpoint.",
1640
+ "tags": [{
1641
+ "name": "param",
1642
+ "text": "breakpoint The breakpoint value to move the sheet modal to.\nMust be a value defined in your `breakpoints` array."
1643
+ }]
1553
1644
  }
1554
1645
  },
1555
1646
  "getCurrentBreakpoint": {
@@ -309,6 +309,8 @@ export class Popover {
309
309
  * Developers can pass a mouse, touch, or pointer event
310
310
  * to position the popover relative to where that event
311
311
  * was dispatched.
312
+ *
313
+ * @param event The event to position the popover relative to.
312
314
  */
313
315
  async present(event) {
314
316
  const unlock = await this.lockController.lock();
@@ -372,15 +374,14 @@ export class Popover {
372
374
  }
373
375
  /**
374
376
  * Dismiss the popover overlay after it has been presented.
377
+ * This is a no-op if the overlay has not been presented yet. If you want
378
+ * to remove an overlay from the DOM that was never presented, use the
379
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
375
380
  *
376
381
  * @param data Any data to emit in the dismiss events.
377
- * @param role The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'.
382
+ * @param role The role of the element that is dismissing the popover. For example, `cancel` or `backdrop`.
378
383
  * @param dismissParentPopover If `true`, dismissing this popover will also dismiss
379
384
  * a parent popover if this popover is nested. Defaults to `true`.
380
- *
381
- * This is a no-op if the overlay has not been presented yet. If you want
382
- * to remove an overlay from the DOM that was never presented, use the
383
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
384
385
  */
385
386
  async dismiss(data, role, dismissParentPopover = true) {
386
387
  const unlock = await this.lockController.lock();
@@ -432,9 +433,9 @@ export class Popover {
432
433
  const { onLifecycle, parentPopover, dismissOnSelect, side, arrow, htmlAttributes, focusTrap } = this;
433
434
  const desktop = isPlatform('desktop');
434
435
  const enableArrow = arrow && !parentPopover;
435
- return (h(Host, Object.assign({ key: '1de4862099cfcb5035e78008e6dc7c1371846f9a', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
436
+ return (h(Host, Object.assign({ key: '16866c02534968c982cf4730d2936d03a5107c8b', "aria-modal": "true", "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
436
437
  zIndex: `${20000 + this.overlayIndex}`,
437
- }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '981aa4e0102cb93312ffbd8243cdf2a0cdc60469', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: '1a28ed55e9d34ef78cf0eb0178643301fd2dd75d', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '1c206ea5eb3c0b5883a3d45c34cd22dd5ffe4b65', class: "popover-arrow", part: "arrow" }), h("div", { key: '5ba561486a328c0c7ab825995fdbfb7a196429a4', class: "popover-content", part: "content" }, h("slot", { key: '00fc244ce9dcc2dfc677e6c34b7c8e7a330b2b03' })))));
438
+ }, class: Object.assign(Object.assign({}, getClassMap(this.cssClass)), { [mode]: true, 'popover-translucent': this.translucent, 'overlay-hidden': true, 'popover-desktop': desktop, [`popover-side-${side}`]: true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false, 'popover-nested': !!parentPopover }), onIonPopoverDidPresent: onLifecycle, onIonPopoverWillPresent: onLifecycle, onIonPopoverWillDismiss: onLifecycle, onIonPopoverDidDismiss: onLifecycle, onIonBackdropTap: this.onBackdropTap }), !parentPopover && h("ion-backdrop", { key: '0df258601a4d30df3c27aa8234a7d5e056c3ecbb', tappable: this.backdropDismiss, visible: this.showBackdrop, part: "backdrop" }), h("div", { key: 'f94e80ed996b957b5cd09b826472b4f60e8fcc78', class: "popover-wrapper ion-overlay-wrapper", onClick: dismissOnSelect ? () => this.dismiss() : undefined }, enableArrow && h("div", { key: '185ce22f6386e8444a9cc7b8818dbfc16c463c99', class: "popover-arrow", part: "arrow" }), h("div", { key: '206202b299404e110de5397b229678cca18568d3', class: "popover-content", part: "content" }, h("slot", { key: 'ee543a0b92d6e35a837c0a0e4617c7b0fc4ad0b0' })))));
438
439
  }
439
440
  static get is() { return "ion-popover"; }
440
441
  static get encapsulation() { return "shadow"; }
@@ -1259,7 +1260,7 @@ export class Popover {
1259
1260
  "parameters": [{
1260
1261
  "name": "event",
1261
1262
  "type": "MouseEvent | PointerEvent | TouchEvent | CustomEvent<any> | undefined",
1262
- "docs": ""
1263
+ "docs": "The event to position the popover relative to."
1263
1264
  }],
1264
1265
  "references": {
1265
1266
  "Promise": {
@@ -1291,7 +1292,10 @@ export class Popover {
1291
1292
  },
1292
1293
  "docs": {
1293
1294
  "text": "Present the popover overlay after it has been created.\nDevelopers can pass a mouse, touch, or pointer event\nto position the popover relative to where that event\nwas dispatched.",
1294
- "tags": []
1295
+ "tags": [{
1296
+ "name": "param",
1297
+ "text": "event The event to position the popover relative to."
1298
+ }]
1295
1299
  }
1296
1300
  },
1297
1301
  "dismiss": {
@@ -1304,11 +1308,11 @@ export class Popover {
1304
1308
  }, {
1305
1309
  "name": "role",
1306
1310
  "type": "string | undefined",
1307
- "docs": "The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'."
1311
+ "docs": "The role of the element that is dismissing the popover. For example, `cancel` or `backdrop`."
1308
1312
  }, {
1309
1313
  "name": "dismissParentPopover",
1310
1314
  "type": "boolean",
1311
- "docs": "If `true`, dismissing this popover will also dismiss\na parent popover if this popover is nested. Defaults to `true`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
1315
+ "docs": "If `true`, dismissing this popover will also dismiss\na parent popover if this popover is nested. Defaults to `true`."
1312
1316
  }],
1313
1317
  "references": {
1314
1318
  "Promise": {
@@ -1323,16 +1327,16 @@ export class Popover {
1323
1327
  "return": "Promise<boolean>"
1324
1328
  },
1325
1329
  "docs": {
1326
- "text": "Dismiss the popover overlay after it has been presented.",
1330
+ "text": "Dismiss the popover overlay after it has been presented.\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.",
1327
1331
  "tags": [{
1328
1332
  "name": "param",
1329
1333
  "text": "data Any data to emit in the dismiss events."
1330
1334
  }, {
1331
1335
  "name": "param",
1332
- "text": "role The role of the element that is dismissing the popover. For example, 'cancel' or 'backdrop'."
1336
+ "text": "role The role of the element that is dismissing the popover. For example, `cancel` or `backdrop`."
1333
1337
  }, {
1334
1338
  "name": "param",
1335
- "text": "dismissParentPopover If `true`, dismissing this popover will also dismiss\na parent popover if this popover is nested. Defaults to `true`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
1339
+ "text": "dismissParentPopover If `true`, dismissing this popover will also dismiss\na parent popover if this popover is nested. Defaults to `true`."
1336
1340
  }]
1337
1341
  }
1338
1342
  },
@@ -54,7 +54,6 @@ export class ReorderGroup {
54
54
  }
55
55
  /**
56
56
  * Completes the reorder operation. Must be called by the `ionItemReorder` event.
57
- *
58
57
  * If a list of items is passed, the list will be reordered and returned in the
59
58
  * proper order.
60
59
  *
@@ -241,7 +240,7 @@ export class ReorderGroup {
241
240
  }
242
241
  render() {
243
242
  const mode = getIonMode(this);
244
- return (h(Host, { key: 'f30613b361c5c3095b7928a92fb4b1e8d6eff600', class: {
243
+ return (h(Host, { key: 'dfcdc3a6aa1b2fba15f861ec868d6a11e667c9de', class: {
245
244
  [mode]: true,
246
245
  'reorder-enabled': !this.disabled,
247
246
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
@@ -330,7 +329,7 @@ export class ReorderGroup {
330
329
  "return": "Promise<any>"
331
330
  },
332
331
  "docs": {
333
- "text": "Completes the reorder operation. Must be called by the `ionItemReorder` event.\n\nIf a list of items is passed, the list will be reordered and returned in the\nproper order.\n\nIf no parameters are passed or if `true` is passed in, the reorder will complete\nand the item will remain in the position it was dragged to. If `false` is passed,\nthe reorder will complete and the item will bounce back to its original position.",
332
+ "text": "Completes the reorder operation. Must be called by the `ionItemReorder` event.\nIf a list of items is passed, the list will be reordered and returned in the\nproper order.\n\nIf no parameters are passed or if `true` is passed in, the reorder will complete\nand the item will remain in the position it was dragged to. If `false` is passed,\nthe reorder will complete and the item will bounce back to its original position.",
334
333
  "tags": [{
335
334
  "name": "param",
336
335
  "text": "listOrReorder A list of items to be sorted and returned in the new order or a\nboolean of whether or not the reorder should reposition the item."
@@ -90,6 +90,7 @@ export class Router {
90
90
  *
91
91
  * @param path The path to navigate to.
92
92
  * @param direction The direction of the animation. Defaults to `"forward"`.
93
+ * @param animation A custom animation to use for the transition.
93
94
  */
94
95
  async push(path, direction = 'forward', animation) {
95
96
  var _a;
@@ -411,7 +412,7 @@ export class Router {
411
412
  }, {
412
413
  "name": "animation",
413
414
  "type": "AnimationBuilder | undefined",
414
- "docs": ""
415
+ "docs": "A custom animation to use for the transition."
415
416
  }],
416
417
  "references": {
417
418
  "Promise": {
@@ -439,6 +440,9 @@ export class Router {
439
440
  }, {
440
441
  "name": "param",
441
442
  "text": "direction The direction of the animation. Defaults to `\"forward\"`."
443
+ }, {
444
+ "name": "param",
445
+ "text": "animation A custom animation to use for the transition."
442
446
  }]
443
447
  }
444
448
  },
@@ -247,10 +247,8 @@ export class Searchbar {
247
247
  /**
248
248
  * Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global
249
249
  * `input.focus()`.
250
- *
251
250
  * Developers who wish to focus an input when a page enters
252
251
  * should call `setFocus()` in the `ionViewDidEnter()` lifecycle method.
253
- *
254
252
  * Developers who wish to focus an input when an overlay is presented
255
253
  * should call `setFocus` after `didPresent` has resolved.
256
254
  *
@@ -429,8 +427,8 @@ export class Searchbar {
429
427
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
430
428
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
431
429
  const shouldShowCancelButton = this.shouldShowCancelButton();
432
- const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '5835c36fcb0b52aec956538202a783f6c194d853', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: '85df41676bed611467bd4df0002b08baee4f539c', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
433
- return (h(Host, { key: 'e1e30cdd79f9f54d5f2d27501012358bc46880e5', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
430
+ const cancelButton = this.showCancelButton !== 'never' && (h("button", { key: '19e18775856db87daeb4b9e3d7bca0461915a0df', "aria-label": cancelButtonText, "aria-hidden": shouldShowCancelButton ? undefined : 'true', type: "button", tabIndex: mode === 'ios' && !shouldShowCancelButton ? -1 : undefined, onMouseDown: this.onCancelSearchbar, onTouchStart: this.onCancelSearchbar, class: "searchbar-cancel-button" }, h("div", { key: 'b3bbdcc033f3bd3441d619e4a252cef0dad4d07e', "aria-hidden": "true" }, mode === 'md' ? (h("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
431
+ return (h(Host, { key: '074aa60e051bfb3225e87d44bbb6346c59c73574', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses(this.color, {
434
432
  [mode]: true,
435
433
  'searchbar-animated': animated,
436
434
  'searchbar-disabled': this.disabled,
@@ -440,14 +438,14 @@ export class Searchbar {
440
438
  'searchbar-has-focus': this.focused,
441
439
  'searchbar-should-show-clear': this.shouldShowClearButton(),
442
440
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
443
- }) }, h("div", { key: '7e9db147282a35bb1e3c9c6125b9a044e81ddde5', class: "searchbar-input-container" }, h("input", Object.assign({ key: '02f08da21326b78d6cd249d54deab96fd8472ba8', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: '048b00348456bd827ae734491c46a67bfb146227', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '71f64339bbfd54ebd26a0946c8ee9d726cd89c04', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
441
+ }) }, h("div", { key: '54f58a79fe36e85d9295157303f1be89c98bbdaf', class: "searchbar-input-container" }, h("input", Object.assign({ key: 'f991a37fcf54d26b7ad10d89084764e03d97b9de', "aria-label": "search text", disabled: this.disabled, ref: (el) => (this.nativeInput = el), class: "searchbar-input", inputMode: this.inputmode, enterKeyHint: this.enterkeyhint, name: this.name, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, minLength: this.minlength, maxLength: this.maxlength, placeholder: this.placeholder, type: this.type, value: this.getValue(), autoCapitalize: autocapitalize === 'default' ? undefined : autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, spellcheck: this.spellcheck }, this.inheritedAttributes)), mode === 'md' && cancelButton, h("ion-icon", { key: '8b44dd90a3292c5cf872ef16a8520675f5673494', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), h("button", { key: '79d9cfed8f01268044f82811a35d323a12dca749', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
444
442
  /**
445
443
  * This prevents mobile browsers from
446
444
  * blurring the input when the clear
447
445
  * button is activated.
448
446
  */
449
447
  ev.preventDefault();
450
- }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: '9b1a177b21951c1c95897a468b34bb7bbd63d137', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
448
+ }, onClick: () => this.onClearInput(true) }, h("ion-icon", { key: 'aa3b9fa8a61f853236783ac7bcd0b113ea65ece2', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
451
449
  }
452
450
  static get is() { return "ion-searchbar"; }
453
451
  static get encapsulation() { return "scoped"; }
@@ -1061,7 +1059,7 @@ export class Searchbar {
1061
1059
  "return": "Promise<void>"
1062
1060
  },
1063
1061
  "docs": {
1064
- "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
1062
+ "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
1065
1063
  "tags": []
1066
1064
  }
1067
1065
  },
@@ -239,16 +239,15 @@ export class Toast {
239
239
  }
240
240
  /**
241
241
  * Dismiss the toast overlay after it has been presented.
242
+ * This is a no-op if the overlay has not been presented yet. If you want
243
+ * to remove an overlay from the DOM that was never presented, use the
244
+ * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
242
245
  *
243
246
  * @param data Any data to emit in the dismiss events.
244
247
  * @param role The role of the element that is dismissing the toast.
245
248
  * This can be useful in a button handler for determining which button was
246
249
  * clicked to dismiss the toast.
247
- * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
248
- *
249
- * This is a no-op if the overlay has not been presented yet. If you want
250
- * to remove an overlay from the DOM that was never presented, use the
251
- * [remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.
250
+ * Some examples include: `"cancel"`, `"destructive"`, `"selected"`, and `"backdrop"`.
252
251
  */
253
252
  async dismiss(data, role) {
254
253
  var _a, _b;
@@ -416,9 +415,9 @@ export class Toast {
416
415
  if (layout === 'stacked' && startButtons.length > 0 && endButtons.length > 0) {
417
416
  printIonWarning('[ion-toast] - This toast is using start and end buttons with the stacked toast layout. We recommend following the best practice of using either start or end buttons with the stacked toast layout.', el);
418
417
  }
419
- return (h(Host, Object.assign({ key: '425be734aee0eeef281ab1609a9f982ce8b5e852', tabindex: "-1" }, this.htmlAttributes, { style: {
418
+ return (h(Host, Object.assign({ key: 'd1ecd90c87700aad4685e230cdd430aa286b8791', tabindex: "-1" }, this.htmlAttributes, { style: {
420
419
  zIndex: `${60000 + this.overlayIndex}`,
421
- }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '7c3ad1a8df9e21fc30fc179c7edebeabcf3c6874', class: wrapperClass }, h("div", { key: 'f950c21e8d7bf92653e0bd52e820ed6b84fa8cf5', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '0266241927dbe16799adb57f9fc11bd5372877b2', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '9ef4b87bad672af6a5b693af61375564daf1eeeb', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
420
+ }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: '4bfc863417324de69e222054d5cf9c452038b41e', class: wrapperClass }, h("div", { key: '3417940afec0392e81b7d54c7cb00f3ab6c30d47', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { key: '6bf878fbc85c01e1e5faa9d97d46255a6511a952', class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '54b500348a9c37660c3aff37436d9188e4374947', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
422
421
  }
423
422
  static get is() { return "ion-toast"; }
424
423
  static get encapsulation() { return "shadow"; }
@@ -1113,7 +1112,7 @@ export class Toast {
1113
1112
  }, {
1114
1113
  "name": "role",
1115
1114
  "type": "string | undefined",
1116
- "docs": "The role of the element that is dismissing the toast.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the toast.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
1115
+ "docs": "The role of the element that is dismissing the toast.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the toast.\nSome examples include: `\"cancel\"`, `\"destructive\"`, `\"selected\"`, and `\"backdrop\"`."
1117
1116
  }],
1118
1117
  "references": {
1119
1118
  "Promise": {
@@ -1129,13 +1128,13 @@ export class Toast {
1129
1128
  "return": "Promise<boolean>"
1130
1129
  },
1131
1130
  "docs": {
1132
- "text": "Dismiss the toast overlay after it has been presented.",
1131
+ "text": "Dismiss the toast overlay after it has been presented.\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method.",
1133
1132
  "tags": [{
1134
1133
  "name": "param",
1135
1134
  "text": "data Any data to emit in the dismiss events."
1136
1135
  }, {
1137
1136
  "name": "param",
1138
- "text": "role The role of the element that is dismissing the toast.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the toast.\nSome examples include: ``\"cancel\"`, `\"destructive\"`, \"selected\"`, and `\"backdrop\"`.\n\nThis is a no-op if the overlay has not been presented yet. If you want\nto remove an overlay from the DOM that was never presented, use the\n[remove](https://developer.mozilla.org/en-US/docs/Web/API/Element/remove) method."
1137
+ "text": "role The role of the element that is dismissing the toast.\nThis can be useful in a button handler for determining which button was\nclicked to dismiss the toast.\nSome examples include: `\"cancel\"`, `\"destructive\"`, `\"selected\"`, and `\"backdrop\"`."
1139
1138
  }]
1140
1139
  }
1141
1140
  },