@ionic/core 8.5.8-dev.11748364689.107665ad → 8.5.8-dev.11748388365.11ad9dfe

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/button.js +23 -5
  2. package/components/ion-datetime.js +27 -51
  3. package/components/ion-input-password-toggle.js +2 -2
  4. package/components/ion-searchbar.js +4 -4
  5. package/components/modal.js +157 -58
  6. package/components/picker-column2.js +3 -3
  7. package/dist/cjs/ion-button_2.cjs.entry.js +19 -3
  8. package/dist/cjs/ion-datetime_3.cjs.entry.js +30 -54
  9. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  10. package/dist/cjs/ion-modal.cjs.entry.js +157 -58
  11. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  12. package/dist/cjs/ionic.cjs.js +1 -1
  13. package/dist/cjs/loader.cjs.js +1 -1
  14. package/dist/collection/components/button/button.js +23 -3
  15. package/dist/collection/components/datetime/datetime.js +27 -51
  16. package/dist/collection/components/input-password-toggle/input-password-toggle.js +2 -2
  17. package/dist/collection/components/modal/animations/ios.enter.js +41 -1
  18. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  19. package/dist/collection/components/modal/animations/md.enter.js +41 -1
  20. package/dist/collection/components/modal/animations/md.leave.js +24 -2
  21. package/dist/collection/components/modal/gestures/sheet.js +27 -52
  22. package/dist/collection/components/picker-legacy-column/picker-column.js +3 -3
  23. package/dist/collection/components/searchbar/searchbar.js +5 -5
  24. package/dist/docs.json +2 -2
  25. package/dist/esm/ion-button_2.entry.js +20 -4
  26. package/dist/esm/ion-datetime_3.entry.js +30 -54
  27. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  28. package/dist/esm/ion-modal.entry.js +157 -58
  29. package/dist/esm/ion-searchbar.entry.js +4 -4
  30. package/dist/esm/ionic.js +1 -1
  31. package/dist/esm/loader.js +1 -1
  32. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  33. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  34. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  35. package/dist/esm-es5/ion-modal.entry.js +1 -1
  36. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  37. package/dist/esm-es5/ionic.js +1 -1
  38. package/dist/esm-es5/loader.js +1 -1
  39. package/dist/html.html-data.json +1 -1
  40. package/dist/ionic/ionic.esm.js +1 -1
  41. package/dist/ionic/p-12914457.entry.js +4 -0
  42. package/dist/ionic/{p-50cb2e8b.system.entry.js → p-3cee5d7c.system.entry.js} +2 -2
  43. package/dist/ionic/p-3d2b2787.system.entry.js +4 -0
  44. package/dist/ionic/{p-7611ede3.system.entry.js → p-3ec227cd.system.entry.js} +1 -1
  45. package/dist/ionic/p-4090ce24.entry.js +4 -0
  46. package/dist/ionic/p-8b8b4530.system.entry.js +4 -0
  47. package/dist/ionic/p-94a18d00.entry.js +4 -0
  48. package/dist/ionic/p-cec902a0.system.entry.js +4 -0
  49. package/dist/ionic/{p-891553d8.entry.js → p-e7f732ef.entry.js} +1 -1
  50. package/dist/ionic/p-f725bf9e.system.js +2 -2
  51. package/dist/ionic/{p-a835aca8.entry.js → p-ffa2125f.entry.js} +1 -1
  52. package/dist/types/components/button/button.d.ts +11 -0
  53. package/dist/types/components/searchbar/searchbar.d.ts +1 -1
  54. package/dist/types/components.d.ts +2 -2
  55. package/hydrate/index.js +211 -121
  56. package/hydrate/index.mjs +211 -121
  57. package/package.json +2 -2
  58. package/dist/ionic/p-451706f5.entry.js +0 -4
  59. package/dist/ionic/p-57957c0f.entry.js +0 -4
  60. package/dist/ionic/p-6b8530f5.system.entry.js +0 -4
  61. package/dist/ionic/p-b5432d15.entry.js +0 -4
  62. package/dist/ionic/p-c1b7d311.system.entry.js +0 -4
  63. package/dist/ionic/p-c8731f25.system.entry.js +0 -4
package/hydrate/index.mjs CHANGED
@@ -7986,6 +7986,19 @@ class Button {
7986
7986
  this.formButtonEl.disabled = disabled;
7987
7987
  }
7988
7988
  }
7989
+ /**
7990
+ * This component is used within the `ion-input-password-toggle` component
7991
+ * to toggle the visibility of the password input.
7992
+ * These attributes need to update based on the state of the password input.
7993
+ * Otherwise, the values will be stale.
7994
+ *
7995
+ * @param newValue
7996
+ * @param _oldValue
7997
+ * @param propName
7998
+ */
7999
+ onAriaChanged(newValue, _oldValue, propName) {
8000
+ this.inheritedAttributes = Object.assign(Object.assign({}, this.inheritedAttributes), { [propName]: newValue });
8001
+ }
7989
8002
  /**
7990
8003
  * This is responsible for rendering a hidden native
7991
8004
  * button element inside the associated form. This allows
@@ -8123,7 +8136,7 @@ class Button {
8123
8136
  {
8124
8137
  type !== 'button' && this.renderHiddenButton();
8125
8138
  }
8126
- return (hAsync(Host, { key: 'e213b0bb76b3f90f883b1a0ea463bb86c2df69c3', onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses$1(color, {
8139
+ return (hAsync(Host, { key: 'b105ad09215adb3ca2298acdadf0dc9154bbb9b0', onClick: this.handleClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses$1(color, {
8127
8140
  [mode]: true,
8128
8141
  [buttonType]: true,
8129
8142
  [`${buttonType}-${expand}`]: expand !== undefined,
@@ -8138,11 +8151,13 @@ class Button {
8138
8151
  'button-disabled': disabled,
8139
8152
  'ion-activatable': true,
8140
8153
  'ion-focusable': true,
8141
- }) }, hAsync(TagType, Object.assign({ key: 'b7c2a46fb994024841219316f4089335fa463d84' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), hAsync("span", { key: '3e07a5c9f86836f9fbaefc6c617bdde6eb6f70cd', class: "button-inner" }, hAsync("slot", { key: '41c08ae09aed16faaa57707d229ff75d97f0731c', name: "icon-only", onSlotchange: this.slotChanged }), hAsync("slot", { key: 'ab8b749e4572884cc04970a7594466b4a24c886e', name: "start" }), hAsync("slot", { key: '397f7ff48ea45e82029414be95d29ae86e12c3a9' }), hAsync("slot", { key: '9a5627713002e8be3738d392b616f6e951b70e12', name: "end" })), mode === 'md' && hAsync("ion-ripple-effect", { key: '105566543ceda102474edab7ca8a44c7e71af589', type: this.rippleType }))));
8154
+ }) }, hAsync(TagType, Object.assign({ key: '66b4e7112bcb9e41d5a723fbbadb0a3104f9ee1d' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur }, inheritedAttributes), hAsync("span", { key: '1439fc3da280221028dcf7ce8ec9dab273c4d4bb', class: "button-inner" }, hAsync("slot", { key: 'd5269ae1afc87ec7b99746032f59cbae93720a9f', name: "icon-only", onSlotchange: this.slotChanged }), hAsync("slot", { key: '461c83e97aa246aa86d83e14f1e15a288d35041e', name: "start" }), hAsync("slot", { key: '807170d47101f9f6a333dd4ff489c89284f306fe' }), hAsync("slot", { key: 'e67f116dd0349a0d27893e4f3ff0ccef1d402f80', name: "end" })), mode === 'md' && hAsync("ion-ripple-effect", { key: '273f0bd9645a36c1bfd18a5c2ab4f81e22b7b989', type: this.rippleType }))));
8142
8155
  }
8143
8156
  get el() { return getElement(this); }
8144
8157
  static get watchers() { return {
8145
- "disabled": ["disabledChanged"]
8158
+ "disabled": ["disabledChanged"],
8159
+ "aria-checked": ["onAriaChanged"],
8160
+ "aria-label": ["onAriaChanged"]
8146
8161
  }; }
8147
8162
  static get style() { return {
8148
8163
  ios: IonButtonIosStyle0,
@@ -11633,19 +11648,18 @@ class Datetime {
11633
11648
  warnIfValueOutOfBounds(valueToProcess, minParts, maxParts);
11634
11649
  }
11635
11650
  /**
11636
- * If there are multiple values, pick an arbitrary one to clamp to. This way,
11637
- * if the values are across months, we always show at least one of them. Note
11638
- * that the values don't necessarily have to be in order.
11651
+ * If there are multiple values, clamp to the last one.
11652
+ * This is because the last value is the one that the user
11653
+ * has most recently interacted with.
11639
11654
  */
11640
- const singleValue = Array.isArray(valueToProcess) ? valueToProcess[0] : valueToProcess;
11655
+ const singleValue = Array.isArray(valueToProcess) ? valueToProcess[valueToProcess.length - 1] : valueToProcess;
11641
11656
  const targetValue = clampDate(singleValue, minParts, maxParts);
11642
11657
  const { month, day, year, hour, minute } = targetValue;
11643
11658
  const ampm = parseAmPm(hour);
11644
11659
  /**
11645
- * Since `activeParts` indicates a value that
11646
- * been explicitly selected either by the
11647
- * user or the app, only update `activeParts`
11648
- * if the `value` property is set.
11660
+ * Since `activeParts` indicates a value that been explicitly selected
11661
+ * either by the user or the app, only update `activeParts` if the
11662
+ * `value` property is set.
11649
11663
  */
11650
11664
  if (hasValue) {
11651
11665
  if (Array.isArray(valueToProcess)) {
@@ -11670,51 +11684,28 @@ class Datetime {
11670
11684
  */
11671
11685
  this.activeParts = [];
11672
11686
  }
11673
- /**
11674
- * Only animate if:
11675
- * 1. We're using grid style (wheel style pickers should just jump to new value)
11676
- * 2. The month and/or year actually changed, and both are defined (otherwise there's nothing to animate to)
11677
- * 3. The calendar body is visible (prevents animation when in collapsed datetime-button, for example)
11678
- * 4. The month/year picker is not open (since you wouldn't see the animation anyway)
11679
- */
11680
11687
  const didChangeMonth = (month !== undefined && month !== workingParts.month) || (year !== undefined && year !== workingParts.year);
11681
11688
  const bodyIsVisible = el.classList.contains('datetime-ready');
11682
11689
  const { isGridStyle, showMonthAndYear } = this;
11683
- let areAllSelectedDatesInSameMonth = true;
11684
- if (Array.isArray(valueToProcess)) {
11685
- const firstMonth = valueToProcess[0].month;
11686
- for (const date of valueToProcess) {
11687
- if (date.month !== firstMonth) {
11688
- areAllSelectedDatesInSameMonth = false;
11689
- break;
11690
- }
11691
- }
11690
+ if (isGridStyle && didChangeMonth && bodyIsVisible && !showMonthAndYear) {
11691
+ /**
11692
+ * Only animate if:
11693
+ * 1. We're using grid style (wheel style pickers should just jump to new value)
11694
+ * 2. The month and/or year actually changed, and both are defined (otherwise there's nothing to animate to)
11695
+ * 3. The calendar body is visible (prevents animation when in collapsed datetime-button, for example)
11696
+ * 4. The month/year picker is not open (since you wouldn't see the animation anyway)
11697
+ */
11698
+ this.animateToDate(targetValue);
11692
11699
  }
11693
- /**
11694
- * If there is more than one date selected
11695
- * and the dates aren't all in the same month,
11696
- * then we should neither animate to the date
11697
- * nor update the working parts because we do
11698
- * not know which date the user wants to view.
11699
- */
11700
- if (areAllSelectedDatesInSameMonth) {
11701
- if (isGridStyle && didChangeMonth && bodyIsVisible && !showMonthAndYear) {
11702
- this.animateToDate(targetValue);
11703
- }
11704
- else {
11705
- /**
11706
- * We only need to do this if we didn't just animate to a new month,
11707
- * since that calls prevMonth/nextMonth which calls setWorkingParts for us.
11708
- */
11709
- this.setWorkingParts({
11710
- month,
11711
- day,
11712
- year,
11713
- hour,
11714
- minute,
11715
- ampm,
11716
- });
11717
- }
11700
+ else {
11701
+ this.setWorkingParts({
11702
+ month,
11703
+ day,
11704
+ year,
11705
+ hour,
11706
+ minute,
11707
+ ampm,
11708
+ });
11718
11709
  }
11719
11710
  };
11720
11711
  this.animateToDate = async (targetValue) => {
@@ -12709,7 +12700,7 @@ class Datetime {
12709
12700
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
12710
12701
  const hasWheelVariant = hasDatePresentation && preferWheel;
12711
12702
  renderHiddenInput(true, el, name, formatValue(value), disabled);
12712
- return (hAsync(Host, { key: 'c3dfea8f46fcbcef38eb9e8a69b1b46a4e4b82fd', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
12703
+ return (hAsync(Host, { key: '20e64fb4cfe3fbd74b24038c89e00651d78b500c', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses$1(color, {
12713
12704
  [mode]: true,
12714
12705
  ['datetime-readonly']: readonly,
12715
12706
  ['datetime-disabled']: disabled,
@@ -12719,7 +12710,7 @@ class Datetime {
12719
12710
  [`datetime-size-${size}`]: true,
12720
12711
  [`datetime-prefer-wheel`]: hasWheelVariant,
12721
12712
  [`datetime-grid`]: isGridStyle,
12722
- })) }, hAsync("div", { key: '75c91243cf6a51f44b83d7cf7d8c0c96bfd3c83f', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
12713
+ })) }, hAsync("div", { key: '488fe7bf6b9052e208d65206a580d5d65b945a62', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
12723
12714
  }
12724
12715
  get el() { return getElement(this); }
12725
12716
  static get watchers() { return {
@@ -15693,14 +15684,14 @@ class InputPasswordToggle {
15693
15684
  const isPasswordVisible = type === 'text';
15694
15685
  return (hAsync(Host, { key: '1a28e078c83e74c72d8bb8189ece93ec2e3fa3d0', class: createColorClasses$1(color, {
15695
15686
  [mode]: true,
15696
- }) }, hAsync("ion-button", { key: '039d1bab764093bb6fe4a34299b0872abda087fd', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": "show password", role: "switch", type: "button", onPointerDown: (ev) => {
15687
+ }) }, hAsync("ion-button", { key: '61591d11d97f3065240e51d8887f831339fd36cf', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": isPasswordVisible ? 'Hide password' : 'Show password', role: "switch", type: "button", onPointerDown: (ev) => {
15697
15688
  /**
15698
15689
  * This prevents mobile browsers from
15699
15690
  * blurring the input when the password toggle
15700
15691
  * button is activated.
15701
15692
  */
15702
15693
  ev.preventDefault();
15703
- }, onClick: this.togglePasswordVisibility }, hAsync("ion-icon", { key: '26477ee97b808c3d79944bf5e33d4e05f1ae0b3f', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
15694
+ }, onClick: this.togglePasswordVisibility }, hAsync("ion-icon", { key: '9d98e6675d5e2adea5c0f56ab67e98b6f57521dd', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
15704
15695
  }
15705
15696
  get el() { return getElement(this); }
15706
15697
  static get watchers() { return {
@@ -19210,7 +19201,47 @@ const iosEnterAnimation$3 = (baseEl, opts) => {
19210
19201
  .addElement(baseEl)
19211
19202
  .easing('cubic-bezier(0.32,0.72,0,1)')
19212
19203
  .duration(500)
19213
- .addAnimation([wrapperAnimation]);
19204
+ .addAnimation([wrapperAnimation])
19205
+ .beforeAddWrite(() => {
19206
+ if (expandToScroll) {
19207
+ // Scroll can only be done when the modal is fully expanded.
19208
+ return;
19209
+ }
19210
+ /**
19211
+ * There are some browsers that causes flickering when
19212
+ * dragging the content when scroll is enabled at every
19213
+ * breakpoint. This is due to the wrapper element being
19214
+ * transformed off the screen and having a snap animation.
19215
+ *
19216
+ * A workaround is to clone the footer element and append
19217
+ * it outside of the wrapper element. This way, the footer
19218
+ * is still visible and the drag can be done without
19219
+ * flickering. The original footer is hidden until the modal
19220
+ * is dismissed. This maintains the animation of the footer
19221
+ * when the modal is dismissed.
19222
+ *
19223
+ * The workaround needs to be done before the animation starts
19224
+ * so there are no flickering issues.
19225
+ */
19226
+ const ionFooter = baseEl.querySelector('ion-footer');
19227
+ /**
19228
+ * This check is needed to prevent more than one footer
19229
+ * from being appended to the shadow root.
19230
+ * Otherwise, iOS and MD enter animations would append
19231
+ * the footer twice.
19232
+ */
19233
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19234
+ if (ionFooter && !ionFooterAlreadyAppended) {
19235
+ const footerHeight = ionFooter.clientHeight;
19236
+ const clonedFooter = ionFooter.cloneNode(true);
19237
+ baseEl.shadowRoot.appendChild(clonedFooter);
19238
+ ionFooter.style.setProperty('display', 'none');
19239
+ ionFooter.setAttribute('aria-hidden', 'true');
19240
+ // Padding is added to prevent some content from being hidden.
19241
+ const page = baseEl.querySelector('.ion-page');
19242
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19243
+ }
19244
+ });
19214
19245
  if (contentAnimation) {
19215
19246
  baseAnimation.addAnimation(contentAnimation);
19216
19247
  }
@@ -19291,7 +19322,7 @@ const createLeaveAnimation$1 = () => {
19291
19322
  * iOS Modal Leave Animation
19292
19323
  */
19293
19324
  const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19294
- const { presentingEl, currentBreakpoint } = opts;
19325
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19295
19326
  const root = getElementRoot(baseEl);
19296
19327
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
19297
19328
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19300,7 +19331,29 @@ const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19300
19331
  .addElement(baseEl)
19301
19332
  .easing('cubic-bezier(0.32,0.72,0,1)')
19302
19333
  .duration(duration)
19303
- .addAnimation(wrapperAnimation);
19334
+ .addAnimation(wrapperAnimation)
19335
+ .beforeAddWrite(() => {
19336
+ if (expandToScroll) {
19337
+ // Scroll can only be done when the modal is fully expanded.
19338
+ return;
19339
+ }
19340
+ /**
19341
+ * If expandToScroll is disabled, we need to swap
19342
+ * the visibility to the original, so the footer
19343
+ * dismisses with the modal and doesn't stay
19344
+ * until the modal is removed from the DOM.
19345
+ */
19346
+ const ionFooter = baseEl.querySelector('ion-footer');
19347
+ if (ionFooter) {
19348
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19349
+ ionFooter.style.removeProperty('display');
19350
+ ionFooter.removeAttribute('aria-hidden');
19351
+ clonedFooter.style.setProperty('display', 'none');
19352
+ clonedFooter.setAttribute('aria-hidden', 'true');
19353
+ const page = baseEl.querySelector('.ion-page');
19354
+ page.style.removeProperty('padding-bottom');
19355
+ }
19356
+ });
19304
19357
  if (presentingEl) {
19305
19358
  const isMobile = window.innerWidth < 768;
19306
19359
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19396,7 +19449,47 @@ const mdEnterAnimation$2 = (baseEl, opts) => {
19396
19449
  .addElement(baseEl)
19397
19450
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
19398
19451
  .duration(280)
19399
- .addAnimation([backdropAnimation, wrapperAnimation]);
19452
+ .addAnimation([backdropAnimation, wrapperAnimation])
19453
+ .beforeAddWrite(() => {
19454
+ if (expandToScroll) {
19455
+ // Scroll can only be done when the modal is fully expanded.
19456
+ return;
19457
+ }
19458
+ /**
19459
+ * There are some browsers that causes flickering when
19460
+ * dragging the content when scroll is enabled at every
19461
+ * breakpoint. This is due to the wrapper element being
19462
+ * transformed off the screen and having a snap animation.
19463
+ *
19464
+ * A workaround is to clone the footer element and append
19465
+ * it outside of the wrapper element. This way, the footer
19466
+ * is still visible and the drag can be done without
19467
+ * flickering. The original footer is hidden until the modal
19468
+ * is dismissed. This maintains the animation of the footer
19469
+ * when the modal is dismissed.
19470
+ *
19471
+ * The workaround needs to be done before the animation starts
19472
+ * so there are no flickering issues.
19473
+ */
19474
+ const ionFooter = baseEl.querySelector('ion-footer');
19475
+ /**
19476
+ * This check is needed to prevent more than one footer
19477
+ * from being appended to the shadow root.
19478
+ * Otherwise, iOS and MD enter animations would append
19479
+ * the footer twice.
19480
+ */
19481
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19482
+ if (ionFooter && !ionFooterAlreadyAppended) {
19483
+ const footerHeight = ionFooter.clientHeight;
19484
+ const clonedFooter = ionFooter.cloneNode(true);
19485
+ baseEl.shadowRoot.appendChild(clonedFooter);
19486
+ ionFooter.style.setProperty('display', 'none');
19487
+ ionFooter.setAttribute('aria-hidden', 'true');
19488
+ // Padding is added to prevent some content from being hidden.
19489
+ const page = baseEl.querySelector('.ion-page');
19490
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19491
+ }
19492
+ });
19400
19493
  if (contentAnimation) {
19401
19494
  baseAnimation.addAnimation(contentAnimation);
19402
19495
  }
@@ -19415,7 +19508,7 @@ const createLeaveAnimation = () => {
19415
19508
  * Md Modal Leave Animation
19416
19509
  */
19417
19510
  const mdLeaveAnimation$2 = (baseEl, opts) => {
19418
- const { currentBreakpoint } = opts;
19511
+ const { currentBreakpoint, expandToScroll } = opts;
19419
19512
  const root = getElementRoot(baseEl);
19420
19513
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
19421
19514
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19423,7 +19516,29 @@ const mdLeaveAnimation$2 = (baseEl, opts) => {
19423
19516
  const baseAnimation = createAnimation()
19424
19517
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
19425
19518
  .duration(200)
19426
- .addAnimation([backdropAnimation, wrapperAnimation]);
19519
+ .addAnimation([backdropAnimation, wrapperAnimation])
19520
+ .beforeAddWrite(() => {
19521
+ if (expandToScroll) {
19522
+ // Scroll can only be done when the modal is fully expanded.
19523
+ return;
19524
+ }
19525
+ /**
19526
+ * If expandToScroll is disabled, we need to swap
19527
+ * the visibility to the original, so the footer
19528
+ * dismisses with the modal and doesn't stay
19529
+ * until the modal is removed from the DOM.
19530
+ */
19531
+ const ionFooter = baseEl.querySelector('ion-footer');
19532
+ if (ionFooter) {
19533
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19534
+ ionFooter.style.removeProperty('display');
19535
+ ionFooter.removeAttribute('aria-hidden');
19536
+ clonedFooter.style.setProperty('display', 'none');
19537
+ clonedFooter.setAttribute('aria-hidden', 'true');
19538
+ const page = baseEl.querySelector('.ion-page');
19539
+ page.style.removeProperty('padding-bottom');
19540
+ }
19541
+ });
19427
19542
  return baseAnimation;
19428
19543
  };
19429
19544
 
@@ -19455,8 +19570,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19455
19570
  let offset = 0;
19456
19571
  let canDismissBlocksGesture = false;
19457
19572
  let cachedScrollEl = null;
19458
- let cachedFooterYPosition = null;
19459
- let currentFooterState = null;
19460
19573
  const canDismissMaxStep = 0.95;
19461
19574
  const maxBreakpoint = breakpoints[breakpoints.length - 1];
19462
19575
  const minBreakpoint = breakpoints[0];
@@ -19486,38 +19599,29 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19486
19599
  baseEl.classList.add(FOCUS_TRAP_DISABLE_CLASS);
19487
19600
  };
19488
19601
  /**
19489
- * Toggles the footer to an absolute position while moving to prevent
19490
- * it from shaking while the sheet is being dragged.
19491
- * @param footer Whether the footer is in a moving or stationary position.
19602
+ * Toggles the visible modal footer when `expandToScroll` is disabled.
19603
+ * @param footer The footer to show.
19492
19604
  */
19493
- const swapFooterPosition = (newPosition) => {
19494
- var _a, _b;
19605
+ const swapFooterVisibility = (footer) => {
19495
19606
  const originalFooter = baseEl.querySelector('ion-footer');
19496
19607
  if (!originalFooter) {
19497
19608
  return;
19498
19609
  }
19499
- currentFooterState = newPosition;
19500
- if (newPosition === 'stationary') {
19501
- // Reset positioning styles to allow normal document flow
19502
- originalFooter.style.removeProperty('position');
19503
- originalFooter.style.removeProperty('bottom');
19504
- (_a = originalFooter.parentElement) === null || _a === void 0 ? void 0 : _a.style.removeProperty('padding-bottom');
19610
+ const clonedFooter = wrapperEl.nextElementSibling;
19611
+ const footerToHide = footer === 'original' ? clonedFooter : originalFooter;
19612
+ const footerToShow = footer === 'original' ? originalFooter : clonedFooter;
19613
+ footerToShow.style.removeProperty('display');
19614
+ footerToShow.removeAttribute('aria-hidden');
19615
+ const page = baseEl.querySelector('.ion-page');
19616
+ if (footer === 'original') {
19617
+ page.style.removeProperty('padding-bottom');
19505
19618
  }
19506
19619
  else {
19507
- // Add padding to the parent element to prevent content from being hidden
19508
- // when the footer is positioned absolutely. This has to be done before we
19509
- // make the footer absolutely positioned or we may accidentally cause the
19510
- // sheet to scroll.
19511
- const footerHeight = originalFooter.clientHeight;
19512
- (_b = originalFooter.parentElement) === null || _b === void 0 ? void 0 : _b.style.setProperty('padding-bottom', `${footerHeight}px`);
19513
- // Apply positioning styles to keep footer at bottom
19514
- originalFooter.style.setProperty('position', 'absolute');
19515
- originalFooter.style.setProperty('bottom', '0');
19516
- // Also cache the footer Y position, which we use to determine if the
19517
- // sheet has been moved below the footer. When that happens, we need to swap
19518
- // the position back so it will collapse correctly.
19519
- cachedFooterYPosition = originalFooter.getBoundingClientRect().top + window.scrollY;
19620
+ const pagePadding = footerToShow.clientHeight;
19621
+ page.style.setProperty('padding-bottom', `${pagePadding}px`);
19520
19622
  }
19623
+ footerToHide.style.setProperty('display', 'none');
19624
+ footerToHide.setAttribute('aria-hidden', 'true');
19521
19625
  };
19522
19626
  /**
19523
19627
  * After the entering animation completes,
@@ -19611,11 +19715,12 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19611
19715
  }
19612
19716
  /**
19613
19717
  * If expandToScroll is disabled, we need to swap
19614
- * the footer position to moving so that it doesn't shake
19615
- * while the sheet is being dragged.
19718
+ * the footer visibility to the original, so if the modal
19719
+ * is dismissed, the footer dismisses with the modal
19720
+ * and doesn't stay on the screen after the modal is gone.
19616
19721
  */
19617
19722
  if (!expandToScroll) {
19618
- swapFooterPosition('moving');
19723
+ swapFooterVisibility('original');
19619
19724
  }
19620
19725
  /**
19621
19726
  * If we are pulling down, then it is possible we are pulling on the content.
@@ -19634,21 +19739,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19634
19739
  animation.progressStart(true, 1 - currentBreakpoint);
19635
19740
  };
19636
19741
  const onMove = (detail) => {
19637
- /**
19638
- * If `expandToScroll` is disabled, we need to see if we're currently below
19639
- * the footer element and the footer is in a stationary position. If so,
19640
- * we need to make the stationary the original position so that the footer
19641
- * collapses with the sheet.
19642
- */
19643
- if (!expandToScroll && cachedFooterYPosition !== null && currentFooterState !== null) {
19644
- // Check if we need to swap the footer position
19645
- if (detail.currentY >= cachedFooterYPosition && currentFooterState === 'moving') {
19646
- swapFooterPosition('stationary');
19647
- }
19648
- else if (detail.currentY < cachedFooterYPosition && currentFooterState === 'stationary') {
19649
- swapFooterPosition('moving');
19650
- }
19651
- }
19652
19742
  /**
19653
19743
  * If `expandToScroll` is disabled, and an upwards swipe gesture is done within
19654
19744
  * the scrollable content, we should not allow the swipe gesture to continue.
@@ -19782,6 +19872,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19782
19872
  * snapping animation completes.
19783
19873
  */
19784
19874
  gesture.enable(false);
19875
+ /**
19876
+ * If expandToScroll is disabled, we need to swap
19877
+ * the footer visibility to the cloned one so the footer
19878
+ * doesn't flicker when the sheet's height is animated.
19879
+ */
19880
+ if (!expandToScroll && shouldRemainOpen) {
19881
+ swapFooterVisibility('cloned');
19882
+ }
19785
19883
  if (shouldPreventDismiss) {
19786
19884
  handleCanDismiss(baseEl, animation);
19787
19885
  }
@@ -19802,14 +19900,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19802
19900
  animation
19803
19901
  .onFinish(() => {
19804
19902
  if (shouldRemainOpen) {
19805
- /**
19806
- * If expandToScroll is disabled, we need to swap
19807
- * the footer position to stationary so that it
19808
- * will act as it would by default
19809
- */
19810
- if (!expandToScroll) {
19811
- swapFooterPosition('stationary');
19812
- }
19813
19903
  /**
19814
19904
  * Once the snapping animation completes,
19815
19905
  * we need to reset the animation to go
@@ -23226,7 +23316,7 @@ class PickerColumnCmp {
23226
23316
  const colEl = this.optsEl;
23227
23317
  if (colEl) {
23228
23318
  // DOM READ
23229
- // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
23319
+ // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the column has changed
23230
23320
  this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
23231
23321
  }
23232
23322
  this.refresh(forceRefresh, animated);
@@ -23234,9 +23324,9 @@ class PickerColumnCmp {
23234
23324
  render() {
23235
23325
  const col = this.col;
23236
23326
  const mode = getIonMode$1(this);
23237
- return (hAsync(Host, { key: '88a3c9397c9ac92dd814074c8ae6ecf8e3420a2c', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
23327
+ return (hAsync(Host, { key: '10ef653cbae8e1ed92a23fa17f3396082e35951f', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
23238
23328
  'max-width': this.col.columnWidth,
23239
- } }, col.prefix && (hAsync("div", { key: '4491a705d15337e6f45f3cf6fd21af5242474729', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), hAsync("div", { key: 'b0dd4b7a7a4c1edc4b73e7fb134ac85264072365', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (hAsync("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (hAsync("div", { key: 'c16419ce6481d60fc3ba6b8d102a4edf0ede02aa', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
23329
+ } }, col.prefix && (hAsync("div", { key: '253066708012034206b1d3d466ea48d0a3be3323', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), hAsync("div", { key: '15fa07307d4d2b4994504a5bf2de8db05b51cd2c', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (hAsync("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (hAsync("div", { key: '4db779830b1e6aa6b324e5a72541d4f610ac1ff5', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
23240
23330
  }
23241
23331
  get el() { return getElement(this); }
23242
23332
  static get watchers() { return {
@@ -28948,8 +29038,8 @@ class Searchbar {
28948
29038
  const clearIcon = this.clearIcon || (mode === 'ios' ? closeCircle : closeSharp);
28949
29039
  const searchIcon = this.searchIcon || (mode === 'ios' ? searchOutline : searchSharp);
28950
29040
  const shouldShowCancelButton = this.shouldShowCancelButton();
28951
- const cancelButton = this.showCancelButton !== 'never' && (hAsync("button", { key: '989f3e84c472ada6e66dd9b249d0d268bf17ce26', "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" }, hAsync("div", { key: '7d335d4fde33822dc79d26b748ba2e98db7494bb', "aria-hidden": "true" }, mode === 'md' ? (hAsync("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
28952
- return (hAsync(Host, { key: 'd1a1972725e949fb102c91487aaa7b9d10c2d718', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses$1(this.color, {
29041
+ const cancelButton = this.showCancelButton !== 'never' && (hAsync("button", { key: '4a4bddfaf44acb9ea71d37d11c3fc11450134a5c', "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" }, hAsync("div", { key: '24424547e34a80422f617f5597965724a3ef65f0', "aria-hidden": "true" }, mode === 'md' ? (hAsync("ion-icon", { "aria-hidden": "true", mode: mode, icon: this.cancelButtonIcon, lazy: false })) : (cancelButtonText))));
29042
+ return (hAsync(Host, { key: '0c0e7334cb2af87081a278e5a3f6be3dc646a073', role: "search", "aria-disabled": this.disabled ? 'true' : null, class: createColorClasses$1(this.color, {
28953
29043
  [mode]: true,
28954
29044
  'searchbar-animated': animated,
28955
29045
  'searchbar-disabled': this.disabled,
@@ -28959,14 +29049,14 @@ class Searchbar {
28959
29049
  'searchbar-has-focus': this.focused,
28960
29050
  'searchbar-should-show-clear': this.shouldShowClearButton(),
28961
29051
  'searchbar-should-show-cancel': this.shouldShowCancelButton(),
28962
- }) }, hAsync("div", { key: 'add53640b2994cb6b2bf02792dafe51aba6b1684', class: "searchbar-input-container" }, hAsync("input", Object.assign({ key: '160cc36459a4a652e7f41ccd14dcdc782278779e', "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, hAsync("ion-icon", { key: '8825fd13af0d2dea451ccc0e00ae7b5021dc01c4', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), hAsync("button", { key: '8a7b56da278b9ca5c4f5a4ee9c01924fd5ae29d8', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
29052
+ }) }, hAsync("div", { key: '859da78b062b9059701eba166be3bc5417f7395b', class: "searchbar-input-container" }, hAsync("input", Object.assign({ key: '840fd06a1e4b5a8d7f6d7439d02aef9fcb9720b6', "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, hAsync("ion-icon", { key: 'a5aaa6a2204d38433cac283dd47b6197499fa585', "aria-hidden": "true", mode: mode, icon: searchIcon, lazy: false, class: "searchbar-search-icon" }), hAsync("button", { key: 'cf62c8969c5c916ac838e122a0ad45b2ae234791', "aria-label": "reset", type: "button", "no-blur": true, class: "searchbar-clear-button", onPointerDown: (ev) => {
28963
29053
  /**
28964
29054
  * This prevents mobile browsers from
28965
29055
  * blurring the input when the clear
28966
29056
  * button is activated.
28967
29057
  */
28968
29058
  ev.preventDefault();
28969
- }, onClick: () => this.onClearInput(true) }, hAsync("ion-icon", { key: '24c55274516ab012d8c25f03525c6cdb9409e52f', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
29059
+ }, onClick: () => this.onClearInput(true) }, hAsync("ion-icon", { key: 'b1a75f0964fc2119479e246dc27bef7cc33bd19f', "aria-hidden": "true", mode: mode, icon: clearIcon, lazy: false, class: "searchbar-clear-icon" }))), mode === 'ios' && cancelButton));
28970
29060
  }
28971
29061
  get el() { return getElement(this); }
28972
29062
  static get watchers() { return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ionic/core",
3
- "version": "8.5.8-dev.11748364689.107665ad",
3
+ "version": "8.5.8-dev.11748388365.11ad9dfe",
4
4
  "description": "Base components for Ionic",
5
5
  "keywords": [
6
6
  "ionic",
@@ -41,7 +41,7 @@
41
41
  "@capacitor/haptics": "^7.0.0",
42
42
  "@capacitor/keyboard": "^7.0.0",
43
43
  "@capacitor/status-bar": "^7.0.0",
44
- "@clack/prompts": "^0.10.0",
44
+ "@clack/prompts": "^0.11.0",
45
45
  "@ionic/eslint-config": "^0.3.0",
46
46
  "@ionic/prettier-config": "^2.0.0",
47
47
  "@playwright/test": "^1.52.0",
@@ -1,4 +0,0 @@
1
- /*!
2
- * (C) Ionic http://ionicframework.com - MIT License
3
- */
4
- import{r as t,c as o,w as i,h as a,e,f as r}from"./p-66a5d6a8.js";import{f as s,i as n,d,r as h,a as p,p as l}from"./p-25b10f81.js";import{C as c,a as m,d as f}from"./p-f08a92cc.js";import{g as b,j as u,r as v,h as x,k as w}from"./p-94551927.js";import{c as g}from"./p-ccd02320.js";import{p as k,c as y}from"./p-17e21141.js";import{g as A}from"./p-c61cc894.js";import{G as D,O as B,F as Y,e as S,B as j,j as E,k as M,f as C,g as T,h as O}from"./p-95001a19.js";import{g as P}from"./p-47794def.js";import{e as $,w as z}from"./p-809483ac.js";import{b as I}from"./p-dabe3bd4.js";import{KEYBOARD_DID_OPEN as W}from"./p-2b7827c7.js";import{c as R}from"./p-4c667fce.js";import{g as L}from"./p-2408c236.js";import{createGesture as H}from"./p-8ededb41.js";import{w as N}from"./p-7b30edcc.js";import"./p-b7b1d91a.js";import"./p-9b97df10.js";import"./p-27281edd.js";var F;!function(t){t.Dark="DARK",t.Light="LIGHT",t.Default="DEFAULT"}(F||(F={}));const K={getEngine(){const t=A();if(null==t?void 0:t.isPluginAvailable("StatusBar"))return t.Plugins.StatusBar},setStyle(t){const o=this.getEngine();o&&o.setStyle(t)},getStyle:async function(){const t=this.getEngine();if(!t)return F.Default;const{style:o}=await t.getInfo();return o}},V=(t,o)=>{if(1===o)return 0;const i=1/(1-o);return t*i+-o*i},Z=()=>{!N||N.innerWidth>=768||K.setStyle({style:F.Dark})},_=(t=F.Default)=>{!N||N.innerWidth>=768||K.setStyle({style:t})},G=async(t,o)=>{"function"==typeof t.canDismiss&&await t.canDismiss(void 0,D)&&(o.isRunning()?o.onFinish((()=>{t.dismiss(void 0,"handler")}),{oneTimeCallback:!0}):t.dismiss(void 0,"handler"))},U=t=>.00255275*2.71828**(-14.9619*t)-1.00255*2.71828**(-.0380968*t)+1,q=.915,J=(t,o)=>u(400,t/Math.abs(1.1*o),500),Q=t=>{const{currentBreakpoint:o,backdropBreakpoint:i,expandToScroll:a}=t,e=void 0===i||i<o,r=e?`calc(var(--backdrop-opacity) * ${o})`:"0",s=R("backdropAnimation").fromTo("opacity",0,r);return e&&s.beforeStyles({"pointer-events":"none"}).afterClearStyles(["pointer-events"]),{wrapperAnimation:R("wrapperAnimation").keyframes([{offset:0,opacity:1,transform:"translateY(100%)"},{offset:1,opacity:1,transform:`translateY(${100-100*o}%)`}]),backdropAnimation:s,contentAnimation:a?void 0:R("contentAnimation").keyframes([{offset:0,opacity:1,maxHeight:100*(1-o)+"%"},{offset:1,opacity:1,maxHeight:100*o+"%"}])}},X=t=>{const{currentBreakpoint:o,backdropBreakpoint:i}=t,a=`calc(var(--backdrop-opacity) * ${V(o,i)})`,e=[{offset:0,opacity:a},{offset:1,opacity:0}],r=[{offset:0,opacity:a},{offset:i,opacity:0},{offset:1,opacity:0}],s=R("backdropAnimation").keyframes(0!==i?r:e);return{wrapperAnimation:R("wrapperAnimation").keyframes([{offset:0,opacity:1,transform:`translateY(${100-100*o}%)`},{offset:1,opacity:1,transform:"translateY(100%)"}]),backdropAnimation:s}},tt=(t,o)=>{const{presentingEl:i,currentBreakpoint:a,expandToScroll:e}=o,r=b(t),{wrapperAnimation:s,backdropAnimation:n,contentAnimation:d}=void 0!==a?Q(o):{backdropAnimation:R().fromTo("opacity",.01,"var(--backdrop-opacity)").beforeStyles({"pointer-events":"none"}).afterClearStyles(["pointer-events"]),wrapperAnimation:R().fromTo("transform","translateY(100vh)","translateY(0vh)"),contentAnimation:void 0};n.addElement(r.querySelector("ion-backdrop")),s.addElement(r.querySelectorAll(".modal-wrapper, .modal-shadow")).beforeStyles({opacity:1}),!e&&(null==d||d.addElement(t.querySelector(".ion-page")));const h=R("entering-base").addElement(t).easing("cubic-bezier(0.32,0.72,0,1)").duration(500).addAnimation([s]);if(d&&h.addAnimation(d),i){const t=window.innerWidth<768,o="ION-MODAL"===i.tagName&&void 0!==i.presentingElement,a=b(i),e=R().beforeStyles({transform:"translateY(0)","transform-origin":"top center",overflow:"hidden"}),r=document.body;if(t){const t=CSS.supports("width","max(0px, 1px)")?"max(30px, var(--ion-safe-area-top))":"30px",a=`translateY(${o?"-10px":t}) scale(0.915)`;e.afterStyles({transform:a}).beforeAddWrite((()=>r.style.setProperty("background-color","black"))).addElement(i).keyframes([{offset:0,filter:"contrast(1)",transform:"translateY(0px) scale(1)",borderRadius:"0px"},{offset:1,filter:"contrast(0.85)",transform:a,borderRadius:"10px 10px 0 0"}]),h.addAnimation(e)}else if(h.addAnimation(n),o){const t=`translateY(-10px) scale(${o?q:1})`;e.afterStyles({transform:t}).addElement(a.querySelector(".modal-wrapper")).keyframes([{offset:0,filter:"contrast(1)",transform:"translateY(0) scale(1)"},{offset:1,filter:"contrast(0.85)",transform:t}]);const i=R().afterStyles({transform:t}).addElement(a.querySelector(".modal-shadow")).keyframes([{offset:0,opacity:"1",transform:"translateY(0) scale(1)"},{offset:1,opacity:"0",transform:t}]);h.addAnimation([e,i])}else s.fromTo("opacity","0","1")}else h.addAnimation(n);return h},ot=(t,o,i=500)=>{const{presentingEl:a,currentBreakpoint:e}=o,r=b(t),{wrapperAnimation:s,backdropAnimation:n}=void 0!==e?X(o):{backdropAnimation:R().fromTo("opacity","var(--backdrop-opacity)",0),wrapperAnimation:R().fromTo("transform","translateY(0vh)","translateY(100vh)")};n.addElement(r.querySelector("ion-backdrop")),s.addElement(r.querySelectorAll(".modal-wrapper, .modal-shadow")).beforeStyles({opacity:1});const d=R("leaving-base").addElement(t).easing("cubic-bezier(0.32,0.72,0,1)").duration(i).addAnimation(s);if(a){const t=window.innerWidth<768,o="ION-MODAL"===a.tagName&&void 0!==a.presentingElement,i=b(a),e=R().beforeClearStyles(["transform"]).afterClearStyles(["transform"]).onFinish((t=>{1===t&&(a.style.setProperty("overflow",""),Array.from(r.querySelectorAll("ion-modal:not(.overlay-hidden)")).filter((t=>void 0!==t.presentingElement)).length<=1&&r.style.setProperty("background-color",""))})),r=document.body;if(t){const t=CSS.supports("width","max(0px, 1px)")?"max(30px, var(--ion-safe-area-top))":"30px",i=`translateY(${o?"-10px":t}) scale(0.915)`;e.addElement(a).keyframes([{offset:0,filter:"contrast(0.85)",transform:i,borderRadius:"10px 10px 0 0"},{offset:1,filter:"contrast(1)",transform:"translateY(0px) scale(1)",borderRadius:"0px"}]),d.addAnimation(e)}else if(d.addAnimation(n),o){const t=`translateY(-10px) scale(${o?q:1})`;e.addElement(i.querySelector(".modal-wrapper")).afterStyles({transform:"translate3d(0, 0, 0)"}).keyframes([{offset:0,filter:"contrast(0.85)",transform:t},{offset:1,filter:"contrast(1)",transform:"translateY(0) scale(1)"}]);const a=R().addElement(i.querySelector(".modal-shadow")).afterStyles({transform:"translateY(0) scale(1)"}).keyframes([{offset:0,opacity:"0",transform:t},{offset:1,opacity:"1",transform:"translateY(0) scale(1)"}]);d.addAnimation([e,a])}else s.fromTo("opacity","1","0")}else d.addAnimation(n);return d},it=(t,o)=>{const{currentBreakpoint:i,expandToScroll:a}=o,e=b(t),{wrapperAnimation:r,backdropAnimation:s,contentAnimation:n}=void 0!==i?Q(o):{backdropAnimation:R().fromTo("opacity",.01,"var(--backdrop-opacity)").beforeStyles({"pointer-events":"none"}).afterClearStyles(["pointer-events"]),wrapperAnimation:R().keyframes([{offset:0,opacity:.01,transform:"translateY(40px)"},{offset:1,opacity:1,transform:"translateY(0px)"}]),contentAnimation:void 0};s.addElement(e.querySelector("ion-backdrop")),r.addElement(e.querySelector(".modal-wrapper")),a&&(null==n||n.addElement(t.querySelector(".ion-page")));const d=R().addElement(t).easing("cubic-bezier(0.36,0.66,0.04,1)").duration(280).addAnimation([s,r]);return n&&d.addAnimation(n),d},at=(t,o)=>{const{currentBreakpoint:i}=o,a=b(t),{wrapperAnimation:e,backdropAnimation:r}=void 0!==i?X(o):{backdropAnimation:R().fromTo("opacity","var(--backdrop-opacity)",0),wrapperAnimation:R().keyframes([{offset:0,opacity:.99,transform:"translateY(0px)"},{offset:1,opacity:0,transform:"translateY(40px)"}])};return r.addElement(a.querySelector("ion-backdrop")),e.addElement(a.querySelector(".modal-wrapper")),R().easing("cubic-bezier(0.47,0,0.745,0.715)").duration(200).addAnimation([r,e])},et=class{constructor(i){t(this,i),this.didPresent=o(this,"ionModalDidPresent",7),this.willPresent=o(this,"ionModalWillPresent",7),this.willDismiss=o(this,"ionModalWillDismiss",7),this.didDismiss=o(this,"ionModalDidDismiss",7),this.ionBreakpointDidChange=o(this,"ionBreakpointDidChange",7),this.didPresentShorthand=o(this,"didPresent",7),this.willPresentShorthand=o(this,"willPresent",7),this.willDismissShorthand=o(this,"willDismiss",7),this.didDismissShorthand=o(this,"didDismiss",7),this.ionMount=o(this,"ionMount",7),this.lockController=g(),this.triggerController=S(),this.coreDelegate=c(),this.isSheetModal=!1,this.inheritedAttributes={},this.inline=!1,this.gestureAnimationDismissing=!1,this.onHandleClick=()=>{const{sheetTransition:t,handleBehavior:o}=this;"cycle"===o&&void 0===t&&this.moveToNextBreakpoint()},this.onBackdropTap=()=>{const{sheetTransition:t}=this;void 0===t&&this.dismiss(void 0,j)},this.onLifecycle=t=>{const o=this.usersElement,i=rt[t.type];if(o&&i){const a=new CustomEvent(i,{bubbles:!1,cancelable:!1,detail:t.detail});o.dispatchEvent(a)}},this.presented=!1,this.hasController=!1,this.overlayIndex=void 0,this.delegate=void 0,this.keyboardClose=!0,this.enterAnimation=void 0,this.leaveAnimation=void 0,this.breakpoints=void 0,this.expandToScroll=!0,this.initialBreakpoint=void 0,this.backdropBreakpoint=0,this.handle=void 0,this.handleBehavior="none",this.component=void 0,this.componentProps=void 0,this.cssClass=void 0,this.backdropDismiss=!0,this.showBackdrop=!0,this.animated=!0,this.presentingElement=void 0,this.htmlAttributes=void 0,this.isOpen=!1,this.trigger=void 0,this.keepContentsMounted=!1,this.focusTrap=!0,this.canDismiss=!0}onIsOpenChange(t,o){!0===t&&!1===o?this.present():!1===t&&!0===o&&this.dismiss()}triggerChanged(){const{trigger:t,el:o,triggerController:i}=this;t&&i.addClickListener(o,t)}breakpointsChanged(t){void 0!==t&&(this.sortedBreakpoints=t.sort(((t,o)=>t-o)))}connectedCallback(){const{el:t}=this;E(t),this.triggerChanged()}disconnectedCallback(){this.triggerController.removeClickListener()}componentWillLoad(){var t;const{breakpoints:o,initialBreakpoint:i,el:a,htmlAttributes:e}=this,r=this.isSheetModal=void 0!==o&&void 0!==i,s=["aria-label","role"];this.inheritedAttributes=x(a,s),void 0!==e&&s.forEach((t=>{e[t]&&(this.inheritedAttributes=Object.assign(Object.assign({},this.inheritedAttributes),{[t]:e[t]}),delete e[t])})),r&&(this.currentBreakpoint=this.initialBreakpoint),void 0===o||void 0===i||o.includes(i)||k("[ion-modal] - Your breakpoints array must include the initialBreakpoint value."),(null===(t=this.htmlAttributes)||void 0===t?void 0:t.id)||M(this.el)}componentDidLoad(){!0===this.isOpen&&v((()=>this.present())),this.breakpointsChanged(this.breakpoints),this.triggerChanged()}getDelegate(t=!1){if(this.workingDelegate&&!t)return{delegate:this.workingDelegate,inline:this.inline};const o=this.inline=null!==this.el.parentNode&&!this.hasController;return{inline:o,delegate:this.workingDelegate=o?this.delegate||this.coreDelegate:this.delegate}}async checkCanDismiss(t,o){const{canDismiss:i}=this;return"function"==typeof i?i(t,o):i}async present(){const t=await this.lockController.lock();if(this.presented)return void t();const{presentingElement:o,el:a}=this;this.currentBreakpoint=this.initialBreakpoint;const{inline:e,delegate:r}=this.getDelegate(!0);this.ionMount.emit(),this.usersElement=await m(r,a,this.component,["ion-page"],this.componentProps,e),w(a)?await $(this.usersElement):this.keepContentsMounted||await z(),i((()=>this.el.classList.add("show-modal")));const s=void 0!==o;s&&"ios"===I(this)&&(this.statusBarStyle=await K.getStyle(),Z()),await C(this,"modalEnter",tt,it,{presentingEl:o,currentBreakpoint:this.initialBreakpoint,backdropBreakpoint:this.backdropBreakpoint,expandToScroll:this.expandToScroll}),"undefined"!=typeof window&&(this.keyboardOpenCallback=()=>{this.gesture&&(this.gesture.enable(!1),v((()=>{this.gesture&&this.gesture.enable(!0)})))},window.addEventListener(W,this.keyboardOpenCallback)),this.isSheetModal?this.initSheetGesture():s&&this.initSwipeToClose(),t()}initSwipeToClose(){var t;if("ios"!==I(this))return;const{el:o}=this,i=this.leaveAnimation||y.get("modalLeave",ot),a=this.animation=i(o,{presentingEl:this.presentingElement,expandToScroll:this.expandToScroll});if(!p(o))return void l(o);const e=null!==(t=this.statusBarStyle)&&void 0!==t?t:F.Default;this.gesture=((t,o,i,a)=>{const e=.5,r=t.offsetHeight;let p=!1,l=!1,c=null,m=null,f=!0,v=0;const x=H({el:t,gestureName:"modalSwipeToClose",gesturePriority:B,direction:"y",threshold:10,canStart:t=>{const o=t.event.target;if(null===o||!o.closest)return!0;if(c=s(o),c){if(n(c)){const t=b(c);m=t.querySelector(".inner-scroll")}else m=c;return!c.querySelector("ion-refresher")&&0===m.scrollTop}return null===o.closest("ion-footer")},onStart:i=>{const{deltaY:a}=i;f=!c||!n(c)||c.scrollY,l=void 0!==t.canDismiss&&!0!==t.canDismiss,a>0&&c&&d(c),o.progressStart(!0,p?1:0)},onMove:t=>{const{deltaY:a}=t;a>0&&c&&d(c);const s=t.deltaY/r,n=s>=0&&l,h=n?.2:.9999,p=n?U(s/h):s,m=u(1e-4,p,h);o.progressStep(m),m>=e&&v<e?_(i):m<e&&v>=e&&Z(),v=m},onEnd:i=>{const s=i.velocityY,n=i.deltaY/r,d=n>=0&&l,m=d?.2:.9999,b=d?U(n/m):n,v=u(1e-4,b,m),w=!d&&(i.deltaY+1e3*s)/r>=e;let g=w?-.001:.001;w?(o.easing("cubic-bezier(0.32, 0.72, 0, 1)"),g+=L([0,0],[.32,.72],[0,1],[1,1],v)[0]):(o.easing("cubic-bezier(1, 0, 0.68, 0.28)"),g+=L([0,0],[1,0],[.68,.28],[1,1],v)[0]);const k=J(w?n*r:(1-v)*r,s);p=w,x.enable(!1),c&&h(c,f),o.onFinish((()=>{w||x.enable(!0)})).progressEnd(w?1:0,g,k),d&&v>m/4?G(t,o):w&&a()}});return x})(o,a,e,(()=>{this.gestureAnimationDismissing=!0,_(this.statusBarStyle),this.animation.onFinish((async()=>{await this.dismiss(void 0,D),this.gestureAnimationDismissing=!1}))})),this.gesture.enable(!0)}initSheetGesture(){const{wrapperEl:t,initialBreakpoint:o,backdropBreakpoint:i}=this;if(!t||void 0===o)return;const a=this.enterAnimation||y.get("modalEnter",tt),e=this.animation=a(this.el,{presentingEl:this.presentingElement,currentBreakpoint:o,backdropBreakpoint:i,expandToScroll:this.expandToScroll});e.progressStart(!0,1);const{gesture:r,moveSheetToBreakpoint:d}=((t,o,i,a,e,r,d=[],h,p,l,c)=>{const m={WRAPPER_KEYFRAMES:[{offset:0,transform:"translateY(0%)"},{offset:1,transform:"translateY(100%)"}],BACKDROP_KEYFRAMES:0!==e?[{offset:0,opacity:"var(--backdrop-opacity)"},{offset:1-e,opacity:0},{offset:1,opacity:0}]:[{offset:0,opacity:"var(--backdrop-opacity)"},{offset:1,opacity:.01}],CONTENT_KEYFRAMES:[{offset:0,maxHeight:"100%"},{offset:1,maxHeight:"0%"}]},f=t.querySelector("ion-content"),x=i.clientHeight;let w=a,g=0,k=!1,y=null,A=null,D=null;const B=d[d.length-1],S=d[0],j=r.childAnimations.find((t=>"wrapperAnimation"===t.id)),E=r.childAnimations.find((t=>"backdropAnimation"===t.id)),M=r.childAnimations.find((t=>"contentAnimation"===t.id)),C=()=>{t.style.setProperty("pointer-events","auto"),o.style.setProperty("pointer-events","auto"),t.classList.remove(Y)},T=()=>{t.style.setProperty("pointer-events","none"),o.style.setProperty("pointer-events","none"),t.classList.add(Y)},O=o=>{var i,a;const e=t.querySelector("ion-footer");e&&(D=o,"stationary"===o?(e.style.removeProperty("position"),e.style.removeProperty("bottom"),null===(i=e.parentElement)||void 0===i||i.style.removeProperty("padding-bottom")):(null===(a=e.parentElement)||void 0===a||a.style.setProperty("padding-bottom",`${e.clientHeight}px`),e.style.setProperty("position","absolute"),e.style.setProperty("bottom","0"),A=e.getBoundingClientRect().top+window.scrollY))};j&&E&&(j.keyframes([...m.WRAPPER_KEYFRAMES]),E.keyframes([...m.BACKDROP_KEYFRAMES]),null==M||M.keyframes([...m.CONTENT_KEYFRAMES]),r.progressStart(!0,1-w),w>e?C():T()),f&&w!==B&&h&&(f.scrollY=!1);const P=o=>{const{breakpoint:i,canDismiss:a,breakpointOffset:s,animated:n}=o,p=a&&0===i,b=p?w:i,u=0!==b;return w=0,j&&E&&(j.keyframes([{offset:0,transform:`translateY(${100*s}%)`},{offset:1,transform:`translateY(${100*(1-b)}%)`}]),E.keyframes([{offset:0,opacity:`calc(var(--backdrop-opacity) * ${V(1-s,e)})`},{offset:1,opacity:`calc(var(--backdrop-opacity) * ${V(b,e)})`}]),M&&M.keyframes([{offset:0,maxHeight:100*(1-s)+"%"},{offset:1,maxHeight:100*b+"%"}]),r.progressStep(0)),$.enable(!1),p?G(t,r):u||l(),!f||b!==d[d.length-1]&&h||(f.scrollY=!0),new Promise((t=>{r.onFinish((()=>{u?(h||O("stationary"),j&&E?v((()=>{j.keyframes([...m.WRAPPER_KEYFRAMES]),E.keyframes([...m.BACKDROP_KEYFRAMES]),null==M||M.keyframes([...m.CONTENT_KEYFRAMES]),r.progressStart(!0,1-b),w=b,c(w),w>e?C():T(),$.enable(!0),t()})):($.enable(!0),t())):t()}),{oneTimeCallback:!0}).progressEnd(1,0,n?500:0)}))},$=H({el:i,gestureName:"modalSheet",gesturePriority:40,direction:"y",threshold:10,canStart:t=>{const o=s(t.event.target);if(w=p(),!h&&o)return 0===(n(o)?b(o).querySelector(".inner-scroll"):o).scrollTop;if(1===w&&o){const t=n(o)?b(o).querySelector(".inner-scroll"):o;return!o.querySelector("ion-refresher")&&0===t.scrollTop}return!0},onStart:o=>{if(k=void 0!==t.canDismiss&&!0!==t.canDismiss&&0===S,!h){const t=s(o.event.target);y=t&&n(t)?b(t).querySelector(".inner-scroll"):t}h||O("moving"),o.deltaY>0&&f&&(f.scrollY=!1),v((()=>{t.focus()})),r.progressStart(!0,1-w)},onMove:t=>{if(h||null===A||null===D||(t.currentY>=A&&"moving"===D?O("stationary"):t.currentY<A&&"stationary"===D&&O("moving")),!h&&t.deltaY<=0&&y)return;t.deltaY>0&&f&&(f.scrollY=!1);const o=d.length>1?1-d[1]:void 0,i=1-w+t.deltaY/x,a=void 0!==o&&i>=o&&k,e=a?.95:.9999,s=a&&void 0!==o?o+U((i-o)/(e-o)):i;g=u(1e-4,s,e),r.progressStep(g)},onEnd:t=>{if(!h&&t.deltaY<=0&&y&&y.scrollTop>0)return;const o=w-(t.deltaY+350*t.velocityY)/x,i=d.reduce(((t,i)=>Math.abs(i-o)<Math.abs(t-o)?i:t));P({breakpoint:i,breakpointOffset:g,canDismiss:k,animated:!0})}});return{gesture:$,moveSheetToBreakpoint:P}})(this.el,this.backdropEl,t,o,i,e,this.sortedBreakpoints,this.expandToScroll,(()=>{var t;return null!==(t=this.currentBreakpoint)&&void 0!==t?t:0}),(()=>this.sheetOnDismiss()),(t=>{this.currentBreakpoint!==t&&(this.currentBreakpoint=t,this.ionBreakpointDidChange.emit({breakpoint:t}))}));this.gesture=r,this.moveSheetToBreakpoint=d,this.gesture.enable(!0)}sheetOnDismiss(){this.gestureAnimationDismissing=!0,this.animation.onFinish((async()=>{this.currentBreakpoint=0,this.ionBreakpointDidChange.emit({breakpoint:this.currentBreakpoint}),await this.dismiss(void 0,D),this.gestureAnimationDismissing=!1}))}async dismiss(t,o){var a;if(this.gestureAnimationDismissing&&o!==D)return!1;const e=await this.lockController.lock();if("handler"!==o&&!await this.checkCanDismiss(t,o))return e(),!1;const{presentingElement:r}=this;void 0!==r&&"ios"===I(this)&&_(this.statusBarStyle),"undefined"!=typeof window&&this.keyboardOpenCallback&&(window.removeEventListener(W,this.keyboardOpenCallback),this.keyboardOpenCallback=void 0);const s=await T(this,t,o,"modalLeave",ot,at,{presentingEl:r,currentBreakpoint:null!==(a=this.currentBreakpoint)&&void 0!==a?a:this.initialBreakpoint,backdropBreakpoint:this.backdropBreakpoint,expandToScroll:this.expandToScroll});if(s){const{delegate:t}=this.getDelegate();await f(t,this.usersElement),i((()=>this.el.classList.remove("show-modal"))),this.animation&&this.animation.destroy(),this.gesture&&this.gesture.destroy()}return this.currentBreakpoint=void 0,this.animation=void 0,e(),s}onDidDismiss(){return O(this.el,"ionModalDidDismiss")}onWillDismiss(){return O(this.el,"ionModalWillDismiss")}async setCurrentBreakpoint(t){if(!this.isSheetModal)return void k("[ion-modal] - setCurrentBreakpoint is only supported on sheet modals.");if(!this.breakpoints.includes(t))return void k(`[ion-modal] - Attempted to set invalid breakpoint value ${t}. Please double check that the breakpoint value is part of your defined breakpoints.`);const{currentBreakpoint:o,moveSheetToBreakpoint:i,canDismiss:a,breakpoints:e,animated:r}=this;o!==t&&i&&(this.sheetTransition=i({breakpoint:t,breakpointOffset:1-o,canDismiss:void 0!==a&&!0!==a&&0===e[0],animated:r}),await this.sheetTransition,this.sheetTransition=void 0)}async getCurrentBreakpoint(){return this.currentBreakpoint}async moveToNextBreakpoint(){const{breakpoints:t,currentBreakpoint:o}=this;if(!t||null==o)return!1;const i=t.filter((t=>0!==t)),a=i.indexOf(o),e=i[(a+1)%i.length];return await this.setCurrentBreakpoint(e),!0}render(){const{handle:t,isSheetModal:o,presentingElement:i,htmlAttributes:r,handleBehavior:s,inheritedAttributes:n,focusTrap:d,expandToScroll:h}=this,p=!1!==t&&o,l=I(this),c=void 0!==i&&"ios"===l,m="cycle"===s;return a(e,Object.assign({key:"0991b2e4e32da511e59fb1463b47e4ac1b86d1ca","no-router":!0,tabindex:"-1"},r,{style:{zIndex:`${2e4+this.overlayIndex}`},class:Object.assign({[l]:!0,"modal-default":!c&&!o,"modal-card":c,"modal-sheet":o,"modal-no-expand-scroll":o&&!h,"overlay-hidden":!0,[Y]:!1===d},P(this.cssClass)),onIonBackdropTap:this.onBackdropTap,onIonModalDidPresent:this.onLifecycle,onIonModalWillPresent:this.onLifecycle,onIonModalWillDismiss:this.onLifecycle,onIonModalDidDismiss:this.onLifecycle}),a("ion-backdrop",{key:"ca9453ffe1021fb252ad9460676cfabb5633f00f",ref:t=>this.backdropEl=t,visible:this.showBackdrop,tappable:this.backdropDismiss,part:"backdrop"}),"ios"===l&&a("div",{key:"9f8da446a7b0f3b26aec856e13f6d6d131a7e37b",class:"modal-shadow"}),a("div",Object.assign({key:"9d08bf600571849c97b58f66df40b496a358d1e1",role:"dialog"},n,{"aria-modal":"true",class:"modal-wrapper ion-overlay-wrapper",part:"content",ref:t=>this.wrapperEl=t}),p&&a("button",{key:"f8bf0d1126e5376519101225d9965727121ee042",class:"modal-handle",tabIndex:m?0:-1,"aria-label":"Activate to adjust the size of the dialog overlaying the screen",onClick:m?this.onHandleClick:void 0,part:"handle"}),a("slot",{key:"6d52849df98f2c6c8fbc03996a931ea6a39a512b"})))}get el(){return r(this)}static get watchers(){return{isOpen:["onIsOpenChange"],trigger:["triggerChanged"]}}},rt={ionModalDidPresent:"ionViewDidEnter",ionModalWillPresent:"ionViewWillEnter",ionModalWillDismiss:"ionViewWillLeave",ionModalDidDismiss:"ionViewDidLeave"};et.style={ios:':host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer ion-toolbar:first-of-type{padding-top:6px}',md:':host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:""}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}'};export{et as ion_modal}