@ionic/core 8.6.1-dev.11749572912.152b544d → 8.6.1-dev.11749648223.169ce853

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.
package/hydrate/index.js CHANGED
@@ -21430,7 +21430,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
21430
21430
  let offset = 0;
21431
21431
  let canDismissBlocksGesture = false;
21432
21432
  let cachedScrollEl = null;
21433
- let cachedFooterEls = null;
21433
+ let cachedFooterEl = null;
21434
21434
  let cachedFooterYPosition = null;
21435
21435
  let currentFooterState = null;
21436
21436
  const canDismissMaxStep = 0.95;
@@ -21467,81 +21467,60 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
21467
21467
  * @param newPosition Whether the footer is in a moving or stationary position.
21468
21468
  */
21469
21469
  const swapFooterPosition = (newPosition) => {
21470
- if (!cachedFooterEls) {
21471
- cachedFooterEls = Array.from(baseEl.querySelectorAll('ion-footer'));
21472
- if (!cachedFooterEls.length) {
21470
+ if (!cachedFooterEl) {
21471
+ cachedFooterEl = baseEl.querySelector('ion-footer');
21472
+ if (!cachedFooterEl) {
21473
21473
  return;
21474
21474
  }
21475
21475
  }
21476
21476
  const page = baseEl.querySelector('.ion-page');
21477
21477
  currentFooterState = newPosition;
21478
21478
  if (newPosition === 'stationary') {
21479
- cachedFooterEls.forEach((cachedFooterEl) => {
21480
- // Reset positioning styles to allow normal document flow
21481
- cachedFooterEl.classList.remove('modal-footer-moving');
21482
- cachedFooterEl.style.removeProperty('position');
21483
- cachedFooterEl.style.removeProperty('width');
21484
- cachedFooterEl.style.removeProperty('height');
21485
- cachedFooterEl.style.removeProperty('top');
21486
- cachedFooterEl.style.removeProperty('left');
21487
- page === null || page === void 0 ? void 0 : page.style.removeProperty('padding-bottom');
21488
- // Move to page
21489
- page === null || page === void 0 ? void 0 : page.appendChild(cachedFooterEl);
21490
- });
21479
+ // Reset positioning styles to allow normal document flow
21480
+ cachedFooterEl.classList.remove('modal-footer-moving');
21481
+ cachedFooterEl.style.removeProperty('position');
21482
+ cachedFooterEl.style.removeProperty('width');
21483
+ cachedFooterEl.style.removeProperty('height');
21484
+ cachedFooterEl.style.removeProperty('top');
21485
+ cachedFooterEl.style.removeProperty('left');
21486
+ page === null || page === void 0 ? void 0 : page.style.removeProperty('padding-bottom');
21487
+ // Move to page
21488
+ page === null || page === void 0 ? void 0 : page.appendChild(cachedFooterEl);
21491
21489
  }
21492
21490
  else {
21493
- let footerHeights = 0;
21494
- cachedFooterEls.forEach((cachedFooterEl, index) => {
21495
- // Get both the footer and document body positions
21496
- const cachedFooterElRect = cachedFooterEl.getBoundingClientRect();
21497
- const bodyRect = document.body.getBoundingClientRect();
21498
- // Calculate the total height of all footers
21499
- // so we can add padding to the page element
21500
- footerHeights += cachedFooterEl.clientHeight;
21501
- // Calculate absolute position relative to body
21502
- // We need to subtract the body's offsetTop to get true position within document.body
21503
- const absoluteTop = cachedFooterElRect.top - bodyRect.top;
21504
- const absoluteLeft = cachedFooterElRect.left - bodyRect.left;
21505
- // Capture the footer's current dimensions and store them in CSS variables for
21506
- // later use when applying absolute positioning.
21507
- cachedFooterEl.style.setProperty('--pinned-width', `${cachedFooterEl.clientWidth}px`);
21508
- cachedFooterEl.style.setProperty('--pinned-height', `${cachedFooterEl.clientHeight}px`);
21509
- cachedFooterEl.style.setProperty('--pinned-top', `${absoluteTop}px`);
21510
- cachedFooterEl.style.setProperty('--pinned-left', `${absoluteLeft}px`);
21511
- // Only cache the first footer's Y position
21512
- // This is used to determine if the sheet has been moved below the footer
21513
- // and needs to be swapped back to stationary so it collapses correctly.
21514
- if (index === 0) {
21515
- cachedFooterYPosition = absoluteTop;
21516
- // If there's a toolbar, we need to combine the toolbar height with the footer position
21517
- // because the toolbar moves with the drag handle, so when it starts overlapping the footer,
21518
- // we need to account for that.
21519
- const toolbar = baseEl.querySelector('ion-toolbar');
21520
- if (toolbar) {
21521
- cachedFooterYPosition -= toolbar.clientHeight;
21522
- }
21523
- }
21524
- });
21525
- // Apply the pinning of styles after we've calculated everything
21526
- // so that we don't cause layouts to shift while calculating the footer positions.
21527
- // Otherwise, with multiple footers we'll end up capturing the wrong positions.
21528
- cachedFooterEls.forEach((cachedFooterEl) => {
21529
- // Add padding to the parent element to prevent content from being hidden
21530
- // when the footer is positioned absolutely. This has to be done before we
21531
- // make the footer absolutely positioned or we may accidentally cause the
21532
- // sheet to scroll.
21533
- page === null || page === void 0 ? void 0 : page.style.setProperty('padding-bottom', `${footerHeights}px`);
21534
- // Apply positioning styles to keep footer at bottom
21535
- cachedFooterEl.classList.add('modal-footer-moving');
21536
- // Apply our preserved styles to pin the footer
21537
- cachedFooterEl.style.setProperty('position', 'absolute');
21538
- cachedFooterEl.style.setProperty('width', 'var(--pinned-width)');
21539
- cachedFooterEl.style.setProperty('height', 'var(--pinned-height)');
21540
- cachedFooterEl.style.setProperty('top', 'var(--pinned-top)');
21541
- cachedFooterEl.style.setProperty('left', 'var(--pinned-left)');
21542
- // Move the element to the body when everything else is done
21543
- document.body.appendChild(cachedFooterEl);
21544
- });
21491
+ // Get both the footer and document body positions
21492
+ const cachedFooterElRect = cachedFooterEl.getBoundingClientRect();
21493
+ const bodyRect = document.body.getBoundingClientRect();
21494
+ // Add padding to the parent element to prevent content from being hidden
21495
+ // when the footer is positioned absolutely. This has to be done before we
21496
+ // make the footer absolutely positioned or we may accidentally cause the
21497
+ // sheet to scroll.
21498
+ const footerHeight = cachedFooterEl.clientHeight;
21499
+ page === null || page === void 0 ? void 0 : page.style.setProperty('padding-bottom', `${footerHeight}px`);
21500
+ // Apply positioning styles to keep footer at bottom
21501
+ cachedFooterEl.classList.add('modal-footer-moving');
21502
+ // Calculate absolute position relative to body
21503
+ // We need to subtract the body's offsetTop to get true position within document.body
21504
+ const absoluteTop = cachedFooterElRect.top - bodyRect.top;
21505
+ const absoluteLeft = cachedFooterElRect.left - bodyRect.left;
21506
+ // Capture the footer's current dimensions and hard code them during the drag
21507
+ cachedFooterEl.style.setProperty('position', 'absolute');
21508
+ cachedFooterEl.style.setProperty('width', `${cachedFooterEl.clientWidth}px`);
21509
+ cachedFooterEl.style.setProperty('height', `${cachedFooterEl.clientHeight}px`);
21510
+ cachedFooterEl.style.setProperty('top', `${absoluteTop}px`);
21511
+ cachedFooterEl.style.setProperty('left', `${absoluteLeft}px`);
21512
+ // Also cache the footer Y position, which we use to determine if the
21513
+ // sheet has been moved below the footer. When that happens, we need to swap
21514
+ // the position back so it will collapse correctly.
21515
+ cachedFooterYPosition = absoluteTop;
21516
+ // If there's a toolbar, we need to combine the toolbar height with the footer position
21517
+ // because the toolbar moves with the drag handle, so when it starts overlapping the footer,
21518
+ // we need to account for that.
21519
+ const toolbar = baseEl.querySelector('ion-toolbar');
21520
+ if (toolbar) {
21521
+ cachedFooterYPosition -= toolbar.clientHeight;
21522
+ }
21523
+ document.body.appendChild(cachedFooterEl);
21545
21524
  }
21546
21525
  };
21547
21526
  /**
@@ -21733,16 +21712,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
21733
21712
  * is not scrolled to the top.
21734
21713
  */
21735
21714
  if (!expandToScroll && detail.deltaY <= 0 && cachedScrollEl && cachedScrollEl.scrollTop > 0) {
21736
- /**
21737
- * If expand to scroll is disabled, we need to make sure we swap the footer position
21738
- * back to stationary so that it will collapse correctly if the modal is dismissed without
21739
- * dragging (e.g. through a dismiss button).
21740
- * This can cause issues if the user has a modal with content that can be dragged, as we'll
21741
- * swap to moving on drag and if we don't swap back here then the footer will get stuck.
21742
- */
21743
- if (!expandToScroll) {
21744
- swapFooterPosition('stationary');
21745
- }
21746
21715
  return;
21747
21716
  }
21748
21717
  /**
@@ -29402,6 +29371,9 @@ class ReorderGroup {
29402
29371
  constructor(hostRef) {
29403
29372
  registerInstance(this, hostRef);
29404
29373
  this.ionItemReorder = createEvent(this, "ionItemReorder", 7);
29374
+ this.ionReorderStart = createEvent(this, "ionReorderStart", 7);
29375
+ this.ionReorderMove = createEvent(this, "ionReorderMove", 7);
29376
+ this.ionReorderEnd = createEvent(this, "ionReorderEnd", 7);
29405
29377
  this.lastToIndex = -1;
29406
29378
  this.cachedHeights = [];
29407
29379
  this.scrollElTop = 0;
@@ -29447,7 +29419,7 @@ class ReorderGroup {
29447
29419
  }
29448
29420
  }
29449
29421
  /**
29450
- * Completes the reorder operation. Must be called by the `ionItemReorder` event.
29422
+ * Completes the reorder operation. Must be called by the `ionReorderEnd` event.
29451
29423
  *
29452
29424
  * If a list of items is passed, the list will be reordered and returned in the
29453
29425
  * proper order.
@@ -29514,6 +29486,7 @@ class ReorderGroup {
29514
29486
  this.state = 1 /* ReorderGroupState.Active */;
29515
29487
  item.classList.add(ITEM_REORDER_SELECTED);
29516
29488
  hapticSelectionStart();
29489
+ this.ionReorderStart.emit();
29517
29490
  }
29518
29491
  onMove(ev) {
29519
29492
  const selectedItem = this.selectedItemEl;
@@ -29528,6 +29501,7 @@ class ReorderGroup {
29528
29501
  const currentY = Math.max(top, Math.min(ev.currentY, bottom));
29529
29502
  const deltaY = scroll + currentY - ev.startY;
29530
29503
  const normalizedY = currentY - top;
29504
+ const fromIndex = this.lastToIndex;
29531
29505
  const toIndex = this.itemIndexForTop(normalizedY);
29532
29506
  if (toIndex !== this.lastToIndex) {
29533
29507
  const fromIndex = indexForItem(selectedItem);
@@ -29537,6 +29511,10 @@ class ReorderGroup {
29537
29511
  }
29538
29512
  // Update selected item position
29539
29513
  selectedItem.style.transform = `translateY(${deltaY}px)`;
29514
+ this.ionReorderMove.emit({
29515
+ from: fromIndex,
29516
+ to: toIndex,
29517
+ });
29540
29518
  }
29541
29519
  onEnd() {
29542
29520
  const selectedItemEl = this.selectedItemEl;
@@ -29548,14 +29526,23 @@ class ReorderGroup {
29548
29526
  const toIndex = this.lastToIndex;
29549
29527
  const fromIndex = indexForItem(selectedItemEl);
29550
29528
  if (toIndex === fromIndex) {
29529
+ this.ionReorderEnd.emit({
29530
+ complete: this.completeReorder.bind(this),
29531
+ });
29551
29532
  this.completeReorder();
29552
29533
  }
29553
29534
  else {
29535
+ // TODO(FW-6590): Remove this once the deprecated event is removed
29554
29536
  this.ionItemReorder.emit({
29555
29537
  from: fromIndex,
29556
29538
  to: toIndex,
29557
29539
  complete: this.completeReorder.bind(this),
29558
29540
  });
29541
+ this.ionReorderEnd.emit({
29542
+ from: fromIndex,
29543
+ to: toIndex,
29544
+ complete: this.completeReorder.bind(this),
29545
+ });
29559
29546
  }
29560
29547
  hapticSelectionEnd();
29561
29548
  }
@@ -29635,7 +29622,7 @@ class ReorderGroup {
29635
29622
  }
29636
29623
  render() {
29637
29624
  const mode = getIonMode$1(this);
29638
- return (hAsync(Host, { key: 'f30613b361c5c3095b7928a92fb4b1e8d6eff600', class: {
29625
+ return (hAsync(Host, { key: '8f47e24dfc7b8ef53ad3f5816fa13a8fa07de2a6', class: {
29639
29626
  [mode]: true,
29640
29627
  'reorder-enabled': !this.disabled,
29641
29628
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
package/hydrate/index.mjs CHANGED
@@ -21428,7 +21428,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
21428
21428
  let offset = 0;
21429
21429
  let canDismissBlocksGesture = false;
21430
21430
  let cachedScrollEl = null;
21431
- let cachedFooterEls = null;
21431
+ let cachedFooterEl = null;
21432
21432
  let cachedFooterYPosition = null;
21433
21433
  let currentFooterState = null;
21434
21434
  const canDismissMaxStep = 0.95;
@@ -21465,81 +21465,60 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
21465
21465
  * @param newPosition Whether the footer is in a moving or stationary position.
21466
21466
  */
21467
21467
  const swapFooterPosition = (newPosition) => {
21468
- if (!cachedFooterEls) {
21469
- cachedFooterEls = Array.from(baseEl.querySelectorAll('ion-footer'));
21470
- if (!cachedFooterEls.length) {
21468
+ if (!cachedFooterEl) {
21469
+ cachedFooterEl = baseEl.querySelector('ion-footer');
21470
+ if (!cachedFooterEl) {
21471
21471
  return;
21472
21472
  }
21473
21473
  }
21474
21474
  const page = baseEl.querySelector('.ion-page');
21475
21475
  currentFooterState = newPosition;
21476
21476
  if (newPosition === 'stationary') {
21477
- cachedFooterEls.forEach((cachedFooterEl) => {
21478
- // Reset positioning styles to allow normal document flow
21479
- cachedFooterEl.classList.remove('modal-footer-moving');
21480
- cachedFooterEl.style.removeProperty('position');
21481
- cachedFooterEl.style.removeProperty('width');
21482
- cachedFooterEl.style.removeProperty('height');
21483
- cachedFooterEl.style.removeProperty('top');
21484
- cachedFooterEl.style.removeProperty('left');
21485
- page === null || page === void 0 ? void 0 : page.style.removeProperty('padding-bottom');
21486
- // Move to page
21487
- page === null || page === void 0 ? void 0 : page.appendChild(cachedFooterEl);
21488
- });
21477
+ // Reset positioning styles to allow normal document flow
21478
+ cachedFooterEl.classList.remove('modal-footer-moving');
21479
+ cachedFooterEl.style.removeProperty('position');
21480
+ cachedFooterEl.style.removeProperty('width');
21481
+ cachedFooterEl.style.removeProperty('height');
21482
+ cachedFooterEl.style.removeProperty('top');
21483
+ cachedFooterEl.style.removeProperty('left');
21484
+ page === null || page === void 0 ? void 0 : page.style.removeProperty('padding-bottom');
21485
+ // Move to page
21486
+ page === null || page === void 0 ? void 0 : page.appendChild(cachedFooterEl);
21489
21487
  }
21490
21488
  else {
21491
- let footerHeights = 0;
21492
- cachedFooterEls.forEach((cachedFooterEl, index) => {
21493
- // Get both the footer and document body positions
21494
- const cachedFooterElRect = cachedFooterEl.getBoundingClientRect();
21495
- const bodyRect = document.body.getBoundingClientRect();
21496
- // Calculate the total height of all footers
21497
- // so we can add padding to the page element
21498
- footerHeights += cachedFooterEl.clientHeight;
21499
- // Calculate absolute position relative to body
21500
- // We need to subtract the body's offsetTop to get true position within document.body
21501
- const absoluteTop = cachedFooterElRect.top - bodyRect.top;
21502
- const absoluteLeft = cachedFooterElRect.left - bodyRect.left;
21503
- // Capture the footer's current dimensions and store them in CSS variables for
21504
- // later use when applying absolute positioning.
21505
- cachedFooterEl.style.setProperty('--pinned-width', `${cachedFooterEl.clientWidth}px`);
21506
- cachedFooterEl.style.setProperty('--pinned-height', `${cachedFooterEl.clientHeight}px`);
21507
- cachedFooterEl.style.setProperty('--pinned-top', `${absoluteTop}px`);
21508
- cachedFooterEl.style.setProperty('--pinned-left', `${absoluteLeft}px`);
21509
- // Only cache the first footer's Y position
21510
- // This is used to determine if the sheet has been moved below the footer
21511
- // and needs to be swapped back to stationary so it collapses correctly.
21512
- if (index === 0) {
21513
- cachedFooterYPosition = absoluteTop;
21514
- // If there's a toolbar, we need to combine the toolbar height with the footer position
21515
- // because the toolbar moves with the drag handle, so when it starts overlapping the footer,
21516
- // we need to account for that.
21517
- const toolbar = baseEl.querySelector('ion-toolbar');
21518
- if (toolbar) {
21519
- cachedFooterYPosition -= toolbar.clientHeight;
21520
- }
21521
- }
21522
- });
21523
- // Apply the pinning of styles after we've calculated everything
21524
- // so that we don't cause layouts to shift while calculating the footer positions.
21525
- // Otherwise, with multiple footers we'll end up capturing the wrong positions.
21526
- cachedFooterEls.forEach((cachedFooterEl) => {
21527
- // Add padding to the parent element to prevent content from being hidden
21528
- // when the footer is positioned absolutely. This has to be done before we
21529
- // make the footer absolutely positioned or we may accidentally cause the
21530
- // sheet to scroll.
21531
- page === null || page === void 0 ? void 0 : page.style.setProperty('padding-bottom', `${footerHeights}px`);
21532
- // Apply positioning styles to keep footer at bottom
21533
- cachedFooterEl.classList.add('modal-footer-moving');
21534
- // Apply our preserved styles to pin the footer
21535
- cachedFooterEl.style.setProperty('position', 'absolute');
21536
- cachedFooterEl.style.setProperty('width', 'var(--pinned-width)');
21537
- cachedFooterEl.style.setProperty('height', 'var(--pinned-height)');
21538
- cachedFooterEl.style.setProperty('top', 'var(--pinned-top)');
21539
- cachedFooterEl.style.setProperty('left', 'var(--pinned-left)');
21540
- // Move the element to the body when everything else is done
21541
- document.body.appendChild(cachedFooterEl);
21542
- });
21489
+ // Get both the footer and document body positions
21490
+ const cachedFooterElRect = cachedFooterEl.getBoundingClientRect();
21491
+ const bodyRect = document.body.getBoundingClientRect();
21492
+ // Add padding to the parent element to prevent content from being hidden
21493
+ // when the footer is positioned absolutely. This has to be done before we
21494
+ // make the footer absolutely positioned or we may accidentally cause the
21495
+ // sheet to scroll.
21496
+ const footerHeight = cachedFooterEl.clientHeight;
21497
+ page === null || page === void 0 ? void 0 : page.style.setProperty('padding-bottom', `${footerHeight}px`);
21498
+ // Apply positioning styles to keep footer at bottom
21499
+ cachedFooterEl.classList.add('modal-footer-moving');
21500
+ // Calculate absolute position relative to body
21501
+ // We need to subtract the body's offsetTop to get true position within document.body
21502
+ const absoluteTop = cachedFooterElRect.top - bodyRect.top;
21503
+ const absoluteLeft = cachedFooterElRect.left - bodyRect.left;
21504
+ // Capture the footer's current dimensions and hard code them during the drag
21505
+ cachedFooterEl.style.setProperty('position', 'absolute');
21506
+ cachedFooterEl.style.setProperty('width', `${cachedFooterEl.clientWidth}px`);
21507
+ cachedFooterEl.style.setProperty('height', `${cachedFooterEl.clientHeight}px`);
21508
+ cachedFooterEl.style.setProperty('top', `${absoluteTop}px`);
21509
+ cachedFooterEl.style.setProperty('left', `${absoluteLeft}px`);
21510
+ // Also cache the footer Y position, which we use to determine if the
21511
+ // sheet has been moved below the footer. When that happens, we need to swap
21512
+ // the position back so it will collapse correctly.
21513
+ cachedFooterYPosition = absoluteTop;
21514
+ // If there's a toolbar, we need to combine the toolbar height with the footer position
21515
+ // because the toolbar moves with the drag handle, so when it starts overlapping the footer,
21516
+ // we need to account for that.
21517
+ const toolbar = baseEl.querySelector('ion-toolbar');
21518
+ if (toolbar) {
21519
+ cachedFooterYPosition -= toolbar.clientHeight;
21520
+ }
21521
+ document.body.appendChild(cachedFooterEl);
21543
21522
  }
21544
21523
  };
21545
21524
  /**
@@ -21731,16 +21710,6 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
21731
21710
  * is not scrolled to the top.
21732
21711
  */
21733
21712
  if (!expandToScroll && detail.deltaY <= 0 && cachedScrollEl && cachedScrollEl.scrollTop > 0) {
21734
- /**
21735
- * If expand to scroll is disabled, we need to make sure we swap the footer position
21736
- * back to stationary so that it will collapse correctly if the modal is dismissed without
21737
- * dragging (e.g. through a dismiss button).
21738
- * This can cause issues if the user has a modal with content that can be dragged, as we'll
21739
- * swap to moving on drag and if we don't swap back here then the footer will get stuck.
21740
- */
21741
- if (!expandToScroll) {
21742
- swapFooterPosition('stationary');
21743
- }
21744
21713
  return;
21745
21714
  }
21746
21715
  /**
@@ -29400,6 +29369,9 @@ class ReorderGroup {
29400
29369
  constructor(hostRef) {
29401
29370
  registerInstance(this, hostRef);
29402
29371
  this.ionItemReorder = createEvent(this, "ionItemReorder", 7);
29372
+ this.ionReorderStart = createEvent(this, "ionReorderStart", 7);
29373
+ this.ionReorderMove = createEvent(this, "ionReorderMove", 7);
29374
+ this.ionReorderEnd = createEvent(this, "ionReorderEnd", 7);
29403
29375
  this.lastToIndex = -1;
29404
29376
  this.cachedHeights = [];
29405
29377
  this.scrollElTop = 0;
@@ -29445,7 +29417,7 @@ class ReorderGroup {
29445
29417
  }
29446
29418
  }
29447
29419
  /**
29448
- * Completes the reorder operation. Must be called by the `ionItemReorder` event.
29420
+ * Completes the reorder operation. Must be called by the `ionReorderEnd` event.
29449
29421
  *
29450
29422
  * If a list of items is passed, the list will be reordered and returned in the
29451
29423
  * proper order.
@@ -29512,6 +29484,7 @@ class ReorderGroup {
29512
29484
  this.state = 1 /* ReorderGroupState.Active */;
29513
29485
  item.classList.add(ITEM_REORDER_SELECTED);
29514
29486
  hapticSelectionStart();
29487
+ this.ionReorderStart.emit();
29515
29488
  }
29516
29489
  onMove(ev) {
29517
29490
  const selectedItem = this.selectedItemEl;
@@ -29526,6 +29499,7 @@ class ReorderGroup {
29526
29499
  const currentY = Math.max(top, Math.min(ev.currentY, bottom));
29527
29500
  const deltaY = scroll + currentY - ev.startY;
29528
29501
  const normalizedY = currentY - top;
29502
+ const fromIndex = this.lastToIndex;
29529
29503
  const toIndex = this.itemIndexForTop(normalizedY);
29530
29504
  if (toIndex !== this.lastToIndex) {
29531
29505
  const fromIndex = indexForItem(selectedItem);
@@ -29535,6 +29509,10 @@ class ReorderGroup {
29535
29509
  }
29536
29510
  // Update selected item position
29537
29511
  selectedItem.style.transform = `translateY(${deltaY}px)`;
29512
+ this.ionReorderMove.emit({
29513
+ from: fromIndex,
29514
+ to: toIndex,
29515
+ });
29538
29516
  }
29539
29517
  onEnd() {
29540
29518
  const selectedItemEl = this.selectedItemEl;
@@ -29546,14 +29524,23 @@ class ReorderGroup {
29546
29524
  const toIndex = this.lastToIndex;
29547
29525
  const fromIndex = indexForItem(selectedItemEl);
29548
29526
  if (toIndex === fromIndex) {
29527
+ this.ionReorderEnd.emit({
29528
+ complete: this.completeReorder.bind(this),
29529
+ });
29549
29530
  this.completeReorder();
29550
29531
  }
29551
29532
  else {
29533
+ // TODO(FW-6590): Remove this once the deprecated event is removed
29552
29534
  this.ionItemReorder.emit({
29553
29535
  from: fromIndex,
29554
29536
  to: toIndex,
29555
29537
  complete: this.completeReorder.bind(this),
29556
29538
  });
29539
+ this.ionReorderEnd.emit({
29540
+ from: fromIndex,
29541
+ to: toIndex,
29542
+ complete: this.completeReorder.bind(this),
29543
+ });
29557
29544
  }
29558
29545
  hapticSelectionEnd();
29559
29546
  }
@@ -29633,7 +29620,7 @@ class ReorderGroup {
29633
29620
  }
29634
29621
  render() {
29635
29622
  const mode = getIonMode$1(this);
29636
- return (hAsync(Host, { key: 'f30613b361c5c3095b7928a92fb4b1e8d6eff600', class: {
29623
+ return (hAsync(Host, { key: '8f47e24dfc7b8ef53ad3f5816fa13a8fa07de2a6', class: {
29637
29624
  [mode]: true,
29638
29625
  'reorder-enabled': !this.disabled,
29639
29626
  'reorder-list-active': this.state !== 0 /* ReorderGroupState.Idle */,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ionic/core",
3
- "version": "8.6.1-dev.11749572912.152b544d",
3
+ "version": "8.6.1-dev.11749648223.169ce853",
4
4
  "description": "Base components for Ionic",
5
5
  "keywords": [
6
6
  "ionic",
@@ -1,4 +0,0 @@
1
- /*!
2
- * (C) Ionic http://ionicframework.com - MIT License
3
- */
4
- import{r as t,e as s,h as e,j as r,k as i,d as o}from"./p-B_U9CtaY.js";import{j as n,k as a}from"./p-BLV6ykCk.js";import{f as h,g as c}from"./p-QwEXyOze.js";import{r as d}from"./p-Do-uqmtX.js";import{b as l,a as b,h as m}from"./p-CKvCXMs9.js";import"./p-CIGNaXM1.js";import"./p-ZjP4CjeZ.js";const p=class{constructor(s){t(this,s)}onClick(t){const s=this.el.closest("ion-reorder-group");t.preventDefault(),s&&s.disabled||t.stopImmediatePropagation()}render(){const t=s(this);return e(r,{key:"e6807bb349725682e99e791ac65e729a360d64e8",class:t},e("slot",{key:"1c691cdbffa6427ba08dc12184c69559ed5d5506"},e("ion-icon",{key:"8b4150302cdca475379582b2251737b5e74079b1",icon:"ios"===t?n:a,lazy:!1,class:"reorder-icon",part:"icon","aria-hidden":"true"})))}get el(){return i(this)}};p.style={ios:":host([slot]){display:none;line-height:0;z-index:100}.reorder-icon{display:block}::slotted(ion-icon){font-size:dynamic-font(16px)}.reorder-icon{font-size:2.125rem;opacity:0.4}",md:":host([slot]){display:none;line-height:0;z-index:100}.reorder-icon{display:block}::slotted(ion-icon){font-size:dynamic-font(16px)}.reorder-icon{font-size:1.9375rem;opacity:0.3}"};const f=class{constructor(s){t(this,s),this.ionItemReorder=o(this,"ionItemReorder",7),this.lastToIndex=-1,this.cachedHeights=[],this.scrollElTop=0,this.scrollElBottom=0,this.scrollElInitial=0,this.containerTop=0,this.containerBottom=0,this.state=0,this.disabled=!0}disabledChanged(){this.gesture&&this.gesture.enable(!this.disabled)}async connectedCallback(){const t=h(this.el);t&&(this.scrollEl=await c(t)),this.gesture=(await import("./p-Cl0B-RWe.js")).createGesture({el:this.el,gestureName:"reorder",gesturePriority:110,threshold:0,direction:"y",passive:!1,canStart:t=>this.canStart(t),onStart:t=>this.onStart(t),onMove:t=>this.onMove(t),onEnd:()=>this.onEnd()}),this.disabledChanged()}disconnectedCallback(){this.onEnd(),this.gesture&&(this.gesture.destroy(),this.gesture=void 0)}complete(t){return Promise.resolve(this.completeReorder(t))}canStart(t){if(this.selectedItemEl||0!==this.state)return!1;const s=t.event.target.closest("ion-reorder");if(!s)return!1;const e=k(s,this.el);return!!e&&(t.data=e,!0)}onStart(t){t.event.preventDefault();const s=this.selectedItemEl=t.data,e=this.cachedHeights;e.length=0;const r=this.el,i=r.children;if(!i||0===i.length)return;let o=0;for(let t=0;t<i.length;t++){const s=i[t];o+=s.offsetHeight,e.push(o),s.$ionIndex=t}const n=r.getBoundingClientRect();if(this.containerTop=n.top,this.containerBottom=n.bottom,this.scrollEl){const t=this.scrollEl.getBoundingClientRect();this.scrollElInitial=this.scrollEl.scrollTop,this.scrollElTop=t.top+y,this.scrollElBottom=t.bottom-y}else this.scrollElInitial=0,this.scrollElTop=0,this.scrollElBottom=0;this.lastToIndex=u(s),this.selectedItemHeight=s.offsetHeight,this.state=1,s.classList.add(w),l()}onMove(t){const s=this.selectedItemEl;if(!s)return;const e=this.autoscroll(t.currentY),r=this.containerTop-e,i=Math.max(r,Math.min(t.currentY,this.containerBottom-e)),o=e+i-t.startY,n=this.itemIndexForTop(i-r);if(n!==this.lastToIndex){const t=u(s);this.lastToIndex=n,b(),this.reorderMove(t,n)}s.style.transform=`translateY(${o}px)`}onEnd(){const t=this.selectedItemEl;if(this.state=2,!t)return void(this.state=0);const s=this.lastToIndex,e=u(t);s===e?this.completeReorder():this.ionItemReorder.emit({from:e,to:s,complete:this.completeReorder.bind(this)}),m()}completeReorder(t){const s=this.selectedItemEl;if(s&&2===this.state){const e=this.el.children,r=e.length,i=this.lastToIndex,o=u(s);d((()=>{i===o||void 0!==t&&!0!==t||this.el.insertBefore(s,o<i?e[i+1]:e[i]);for(let t=0;t<r;t++)e[t].style.transform=""})),Array.isArray(t)&&(t=v(t,o,i)),s.style.transition="",s.classList.remove(w),this.selectedItemEl=void 0,this.state=0}return t}itemIndexForTop(t){const s=this.cachedHeights;for(let e=0;e<s.length;e++)if(s[e]>t)return e;return s.length-1}reorderMove(t,s){const e=this.selectedItemHeight,r=this.el.children;for(let i=0;i<r.length;i++){let o="";i>t&&i<=s?o=`translateY(${-e}px)`:i<t&&i>=s&&(o=`translateY(${e}px)`),r[i].style.transform=o}}autoscroll(t){if(!this.scrollEl)return 0;let s=0;return t<this.scrollElTop?s=-10:t>this.scrollElBottom&&(s=g),0!==s&&this.scrollEl.scrollBy(0,s),this.scrollEl.scrollTop-this.scrollElInitial}render(){const t=s(this);return e(r,{key:"f30613b361c5c3095b7928a92fb4b1e8d6eff600",class:{[t]:!0,"reorder-enabled":!this.disabled,"reorder-list-active":0!==this.state}})}get el(){return i(this)}static get watchers(){return{disabled:["disabledChanged"]}}},u=t=>t.$ionIndex,k=(t,s)=>{let e;for(;t;){if(e=t.parentElement,e===s)return t;t=e}},y=60,g=10,w="reorder-selected",v=(t,s,e)=>{const r=t[s];return t.splice(s,1),t.splice(e,0,r),t.slice()};f.style=".reorder-list-active>*{display:block;-webkit-transition:-webkit-transform 300ms;transition:-webkit-transform 300ms;transition:transform 300ms;transition:transform 300ms, -webkit-transform 300ms;will-change:transform}.reorder-enabled{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.reorder-enabled ion-reorder{display:block;cursor:-webkit-grab;cursor:grab;pointer-events:all;-ms-touch-action:none;touch-action:none}.reorder-selected,.reorder-selected ion-reorder{cursor:-webkit-grabbing;cursor:grabbing}.reorder-selected{position:relative;-webkit-transition:none !important;transition:none !important;-webkit-box-shadow:0 0 10px rgba(0, 0, 0, 0.4);box-shadow:0 0 10px rgba(0, 0, 0, 0.4);opacity:0.8;z-index:100}.reorder-visible ion-reorder .reorder-icon{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}";export{p as ion_reorder,f as ion_reorder_group}
@@ -1,4 +0,0 @@
1
- /*!
2
- * (C) Ionic http://ionicframework.com - MIT License
3
- */
4
- import{r as t,d as o,m as i,w as a,e,l as r,h as n,j as s,k as d}from"./p-B_U9CtaY.js";import{f as p,i as h,d as l,r as c,a as m,p as f}from"./p-QwEXyOze.js";import{C as b,a as u,d as w}from"./p-BhLqfMrf.js";import{e as x,g as v,r as g,b as k,h as y}from"./p-Do-uqmtX.js";import{c as A}from"./p-B-hirT0v.js";import{g as B}from"./p-CIGNaXM1.js";import{G as D,O as Y,F as E,e as S,B as j,j as C,k as M,f as T,g as O,h as $}from"./p-aIxOGKys.js";import{g as P}from"./p-DiVJyqlX.js";import{e as R,w as z}from"./p-BROiNJRB.js";import{KEYBOARD_DID_OPEN as I}from"./p-9eeaBrnk.js";import{c as W}from"./p-bNmY-WfR.js";import{g as L}from"./p-hHmYLOfE.js";import{createGesture as N}from"./p-Cl0B-RWe.js";import{w as H}from"./p-ZjP4CjeZ.js";import"./p-DzH0J0yi.js";import"./p-BTEOs1at.js";import"./p-D13Eaw-8.js";var K;!function(t){t.Dark="DARK",t.Light="LIGHT",t.Default="DEFAULT"}(K||(K={}));const Z={getEngine(){const t=B();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 K.Default;const{style:o}=await t.getInfo();return o}},F=(t,o)=>{if(1===o)return 0;const i=1/(1-o);return t*i+-o*i},G=()=>{!H||H.innerWidth>=768||Z.setStyle({style:K.Dark})},V=(t=K.Default)=>{!H||H.innerWidth>=768||Z.setStyle({style:t})},_=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"))},X=t=>.00255275*2.71828**(-14.9619*t)-1.00255*2.71828**(-.0380968*t)+1,q=.915,J=(t,o)=>x(400,t/Math.abs(1.1*o),500),U=t=>{const{currentBreakpoint:o,backdropBreakpoint:i,expandToScroll:a}=t,e=void 0===i||i<o,r=e?`calc(var(--backdrop-opacity) * ${o})`:"0",n=W("backdropAnimation").fromTo("opacity",0,r);return e&&n.beforeStyles({"pointer-events":"none"}).afterClearStyles(["pointer-events"]),{wrapperAnimation:W("wrapperAnimation").keyframes([{offset:0,opacity:1,transform:"translateY(100%)"},{offset:1,opacity:1,transform:`translateY(${100-100*o}%)`}]),backdropAnimation:n,contentAnimation:a?void 0:W("contentAnimation").keyframes([{offset:0,opacity:1,maxHeight:100*(1-o)+"%"},{offset:1,opacity:1,maxHeight:100*o+"%"}])}},Q=t=>{const{currentBreakpoint:o,backdropBreakpoint:i}=t,a=`calc(var(--backdrop-opacity) * ${F(o,i)})`,e=[{offset:0,opacity:a},{offset:1,opacity:0}],r=[{offset:0,opacity:a},{offset:i,opacity:0},{offset:1,opacity:0}],n=W("backdropAnimation").keyframes(0!==i?r:e);return{wrapperAnimation:W("wrapperAnimation").keyframes([{offset:0,opacity:1,transform:`translateY(${100-100*o}%)`},{offset:1,opacity:1,transform:"translateY(100%)"}]),backdropAnimation:n}},tt=(t,o)=>{const{presentingEl:i,currentBreakpoint:a,expandToScroll:e}=o,r=v(t),{wrapperAnimation:n,backdropAnimation:s,contentAnimation:d}=void 0!==a?U(o):{backdropAnimation:W().fromTo("opacity",.01,"var(--backdrop-opacity)").beforeStyles({"pointer-events":"none"}).afterClearStyles(["pointer-events"]),wrapperAnimation:W().fromTo("transform","translateY(100vh)","translateY(0vh)"),contentAnimation:void 0};s.addElement(r.querySelector("ion-backdrop")),n.addElement(r.querySelectorAll(".modal-wrapper, .modal-shadow")).beforeStyles({opacity:1}),!e&&(null==d||d.addElement(t.querySelector(".ion-page")));const p=W("entering-base").addElement(t).easing("cubic-bezier(0.32,0.72,0,1)").duration(500).addAnimation([n]);if(d&&p.addAnimation(d),i){const t=window.innerWidth<768,o="ION-MODAL"===i.tagName&&void 0!==i.presentingElement,a=v(i),e=W().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"}]),p.addAnimation(e)}else if(p.addAnimation(s),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=W().afterStyles({transform:t}).addElement(a.querySelector(".modal-shadow")).keyframes([{offset:0,opacity:"1",transform:"translateY(0) scale(1)"},{offset:1,opacity:"0",transform:t}]);p.addAnimation([e,i])}else n.fromTo("opacity","0","1")}else p.addAnimation(s);return p},ot=(t,o,i=500)=>{const{presentingEl:a,currentBreakpoint:e}=o,r=v(t),{wrapperAnimation:n,backdropAnimation:s}=void 0!==e?Q(o):{backdropAnimation:W().fromTo("opacity","var(--backdrop-opacity)",0),wrapperAnimation:W().fromTo("transform","translateY(0vh)","translateY(100vh)")};s.addElement(r.querySelector("ion-backdrop")),n.addElement(r.querySelectorAll(".modal-wrapper, .modal-shadow")).beforeStyles({opacity:1});const d=W("leaving-base").addElement(t).easing("cubic-bezier(0.32,0.72,0,1)").duration(i).addAnimation(n);if(a){const t=window.innerWidth<768,o="ION-MODAL"===a.tagName&&void 0!==a.presentingElement,i=v(a),e=W().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(s),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=W().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 n.fromTo("opacity","1","0")}else d.addAnimation(s);return d},it=(t,o)=>{const{currentBreakpoint:i,expandToScroll:a}=o,e=v(t),{wrapperAnimation:r,backdropAnimation:n,contentAnimation:s}=void 0!==i?U(o):{backdropAnimation:W().fromTo("opacity",.01,"var(--backdrop-opacity)").beforeStyles({"pointer-events":"none"}).afterClearStyles(["pointer-events"]),wrapperAnimation:W().keyframes([{offset:0,opacity:.01,transform:"translateY(40px)"},{offset:1,opacity:1,transform:"translateY(0px)"}]),contentAnimation:void 0};n.addElement(e.querySelector("ion-backdrop")),r.addElement(e.querySelector(".modal-wrapper")),!a&&(null==s||s.addElement(t.querySelector(".ion-page")));const d=W().addElement(t).easing("cubic-bezier(0.36,0.66,0.04,1)").duration(280).addAnimation([n,r]);return s&&d.addAnimation(s),d},at=(t,o)=>{const{currentBreakpoint:i}=o,a=v(t),{wrapperAnimation:e,backdropAnimation:r}=void 0!==i?Q(o):{backdropAnimation:W().fromTo("opacity","var(--backdrop-opacity)",0),wrapperAnimation:W().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")),W().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=A(),this.triggerController=S(),this.coreDelegate=b(),this.isSheetModal=!1,this.inheritedAttributes={},this.inline=!1,this.gestureAnimationDismissing=!1,this.presented=!1,this.hasController=!1,this.keyboardClose=!0,this.expandToScroll=!0,this.backdropBreakpoint=0,this.handleBehavior="none",this.backdropDismiss=!0,this.showBackdrop=!0,this.animated=!0,this.isOpen=!1,this.keepContentsMounted=!1,this.focusTrap=!0,this.canDismiss=!0,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)}}}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;C(t),this.triggerChanged()}disconnectedCallback(){this.triggerController.removeClickListener()}componentWillLoad(){var t;const{breakpoints:o,initialBreakpoint:a,el:e,htmlAttributes:r}=this,n=this.isSheetModal=void 0!==o&&void 0!==a,s=["aria-label","role"];this.inheritedAttributes=k(e,s),void 0!==r&&s.forEach((t=>{r[t]&&(this.inheritedAttributes=Object.assign(Object.assign({},this.inheritedAttributes),{[t]:r[t]}),delete r[t])})),n&&(this.currentBreakpoint=this.initialBreakpoint),void 0===o||void 0===a||o.includes(a)||i("[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&&g((()=>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:i}=this;this.currentBreakpoint=this.initialBreakpoint;const{inline:r,delegate:n}=this.getDelegate(!0);this.ionMount.emit(),this.usersElement=await u(n,i,this.component,["ion-page"],this.componentProps,r),y(i)?await R(this.usersElement):this.keepContentsMounted||await z(),a((()=>this.el.classList.add("show-modal")));const s=void 0!==o;s&&"ios"===e(this)&&(this.statusBarStyle=await Z.getStyle(),G()),await T(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),g((()=>{this.gesture&&this.gesture.enable(!0)})))},window.addEventListener(I,this.keyboardOpenCallback)),this.isSheetModal?this.initSheetGesture():s&&this.initSwipeToClose(),t()}initSwipeToClose(){var t;if("ios"!==e(this))return;const{el:o}=this,i=this.leaveAnimation||r.get("modalLeave",ot),a=this.animation=i(o,{presentingEl:this.presentingElement,expandToScroll:this.expandToScroll});if(!m(o))return void f(o);const n=null!==(t=this.statusBarStyle)&&void 0!==t?t:K.Default;this.gesture=((t,o,i,a)=>{const e=.5,r=t.offsetHeight;let n=!1,s=!1,d=null,m=null,f=!0,b=0;const u=N({el:t,gestureName:"modalSwipeToClose",gesturePriority:Y,direction:"y",threshold:10,canStart:t=>{const o=t.event.target;if(null===o||!o.closest)return!0;if(d=p(o),d){if(h(d)){const t=v(d);m=t.querySelector(".inner-scroll")}else m=d;return!d.querySelector("ion-refresher")&&0===m.scrollTop}return null===o.closest("ion-footer")},onStart:i=>{const{deltaY:a}=i;f=!d||!h(d)||d.scrollY,s=void 0!==t.canDismiss&&!0!==t.canDismiss,a>0&&d&&l(d),o.progressStart(!0,n?1:0)},onMove:t=>{const{deltaY:a}=t;a>0&&d&&l(d);const n=t.deltaY/r,p=n>=0&&s,h=p?.2:.9999,c=p?X(n/h):n,m=x(1e-4,c,h);o.progressStep(m),m>=e&&b<e?V(i):m<e&&b>=e&&G(),b=m},onEnd:i=>{const p=i.velocityY,h=i.deltaY/r,l=h>=0&&s,m=l?.2:.9999,b=l?X(h/m):h,w=x(1e-4,b,m),v=!l&&(i.deltaY+1e3*p)/r>=e;let g=v?-.001:.001;v?(o.easing("cubic-bezier(0.32, 0.72, 0, 1)"),g+=L([0,0],[.32,.72],[0,1],[1,1],w)[0]):(o.easing("cubic-bezier(1, 0, 0.68, 0.28)"),g+=L([0,0],[1,0],[.68,.28],[1,1],w)[0]);const k=J(v?h*r:(1-w)*r,p);n=v,u.enable(!1),d&&c(d,f),o.onFinish((()=>{v||u.enable(!0)})).progressEnd(v?1:0,g,k),l&&w>m/4?_(t,o):v&&a()}});return u})(o,a,n,(()=>{this.gestureAnimationDismissing=!0,V(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||r.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:n,moveSheetToBreakpoint:s}=((t,o,i,a,e,r,n=[],s,d,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"),b=i.clientHeight;let u=a,w=0,k=!1,y=null,A=null,B=null,D=null;const Y=n[n.length-1],S=n[0],j=r.childAnimations.find((t=>"wrapperAnimation"===t.id)),C=r.childAnimations.find((t=>"backdropAnimation"===t.id)),M=r.childAnimations.find((t=>"contentAnimation"===t.id)),T=()=>{t.style.setProperty("pointer-events","auto"),o.style.setProperty("pointer-events","auto"),t.classList.remove(E)},O=()=>{t.style.setProperty("pointer-events","none"),o.style.setProperty("pointer-events","none"),t.classList.add(E)},$=o=>{if(!A&&(A=Array.from(t.querySelectorAll("ion-footer")),!A.length))return;const i=t.querySelector(".ion-page");if(D=o,"stationary"===o)A.forEach((t=>{t.classList.remove("modal-footer-moving"),t.style.removeProperty("position"),t.style.removeProperty("width"),t.style.removeProperty("height"),t.style.removeProperty("top"),t.style.removeProperty("left"),null==i||i.style.removeProperty("padding-bottom"),null==i||i.appendChild(t)}));else{let o=0;A.forEach(((i,a)=>{const e=i.getBoundingClientRect(),r=document.body.getBoundingClientRect();o+=i.clientHeight;const n=e.top-r.top,s=e.left-r.left;if(i.style.setProperty("--pinned-width",`${i.clientWidth}px`),i.style.setProperty("--pinned-height",`${i.clientHeight}px`),i.style.setProperty("--pinned-top",`${n}px`),i.style.setProperty("--pinned-left",`${s}px`),0===a){B=n;const o=t.querySelector("ion-toolbar");o&&(B-=o.clientHeight)}})),A.forEach((t=>{null==i||i.style.setProperty("padding-bottom",`${o}px`),t.classList.add("modal-footer-moving"),t.style.setProperty("position","absolute"),t.style.setProperty("width","var(--pinned-width)"),t.style.setProperty("height","var(--pinned-height)"),t.style.setProperty("top","var(--pinned-top)"),t.style.setProperty("left","var(--pinned-left)"),document.body.appendChild(t)}))}};j&&C&&(j.keyframes([...m.WRAPPER_KEYFRAMES]),C.keyframes([...m.BACKDROP_KEYFRAMES]),null==M||M.keyframes([...m.CONTENT_KEYFRAMES]),r.progressStart(!0,1-u),u>e?T():O()),f&&u!==Y&&s&&(f.scrollY=!1);const P=o=>{const{breakpoint:i,canDismiss:a,breakpointOffset:d,animated:p}=o,h=a&&0===i,b=h?u:i,w=0!==b;return u=0,j&&C&&(j.keyframes([{offset:0,transform:`translateY(${100*d}%)`},{offset:1,transform:`translateY(${100*(1-b)}%)`}]),C.keyframes([{offset:0,opacity:`calc(var(--backdrop-opacity) * ${F(1-d,e)})`},{offset:1,opacity:`calc(var(--backdrop-opacity) * ${F(b,e)})`}]),M&&M.keyframes([{offset:0,maxHeight:100*(1-d)+"%"},{offset:1,maxHeight:100*b+"%"}]),r.progressStep(0)),R.enable(!1),h?_(t,r):w||l(),!f||b!==n[n.length-1]&&s||(f.scrollY=!0),s||0!==b||$("stationary"),new Promise((t=>{r.onFinish((()=>{w?(s||$("stationary"),j&&C?g((()=>{j.keyframes([...m.WRAPPER_KEYFRAMES]),C.keyframes([...m.BACKDROP_KEYFRAMES]),null==M||M.keyframes([...m.CONTENT_KEYFRAMES]),r.progressStart(!0,1-b),u=b,c(u),u>e?T():O(),R.enable(!0),t()})):(R.enable(!0),t())):t()}),{oneTimeCallback:!0}).progressEnd(1,0,p?500:0)}))},R=N({el:i,gestureName:"modalSheet",gesturePriority:40,direction:"y",threshold:10,canStart:t=>{const o=p(t.event.target);if(u=d(),!s&&o)return 0===(h(o)?v(o).querySelector(".inner-scroll"):o).scrollTop;if(1===u&&o){const t=h(o)?v(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,!s){const t=p(o.event.target);y=t&&h(t)?v(t).querySelector(".inner-scroll"):t}s||$("moving"),o.deltaY>0&&f&&(f.scrollY=!1),g((()=>{t.focus()})),r.progressStart(!0,1-u)},onMove:t=>{if(s||null===B||null===D||(t.currentY>=B&&"moving"===D?$("stationary"):t.currentY<B&&"stationary"===D&&$("moving")),!s&&t.deltaY<=0&&y)return;t.deltaY>0&&f&&(f.scrollY=!1);const o=n.length>1?1-n[1]:void 0,i=1-u+t.deltaY/b,a=void 0!==o&&i>=o&&k,e=a?.95:.9999,d=a&&void 0!==o?o+X((i-o)/(e-o)):i;w=x(1e-4,d,e),r.progressStep(w)},onEnd:t=>{if(!s&&t.deltaY<=0&&y&&y.scrollTop>0)return void(s||$("stationary"));const o=u-(t.deltaY+350*t.velocityY)/b,i=n.reduce(((t,i)=>Math.abs(i-o)<Math.abs(t-o)?i:t));P({breakpoint:i,breakpointOffset:w,canDismiss:k,animated:!0})}});return{gesture:R,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=n,this.moveSheetToBreakpoint=s,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 i;if(this.gestureAnimationDismissing&&o!==D)return!1;const r=await this.lockController.lock();if("handler"!==o&&!await this.checkCanDismiss(t,o))return r(),!1;const{presentingElement:n}=this;void 0!==n&&"ios"===e(this)&&V(this.statusBarStyle),"undefined"!=typeof window&&this.keyboardOpenCallback&&(window.removeEventListener(I,this.keyboardOpenCallback),this.keyboardOpenCallback=void 0);const s=await O(this,t,o,"modalLeave",ot,at,{presentingEl:n,currentBreakpoint:null!==(i=this.currentBreakpoint)&&void 0!==i?i:this.initialBreakpoint,backdropBreakpoint:this.backdropBreakpoint,expandToScroll:this.expandToScroll});if(s){const{delegate:t}=this.getDelegate();await w(t,this.usersElement),a((()=>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,r(),s}onDidDismiss(){return $(this.el,"ionModalDidDismiss")}onWillDismiss(){return $(this.el,"ionModalWillDismiss")}async setCurrentBreakpoint(t){if(!this.isSheetModal)return void i("[ion-modal] - setCurrentBreakpoint is only supported on sheet modals.");if(!this.breakpoints.includes(t))return void i(`[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:a,canDismiss:e,breakpoints:r,animated:n}=this;o!==t&&a&&(this.sheetTransition=a({breakpoint:t,breakpointOffset:1-o,canDismiss:void 0!==e&&!0!==e&&0===r[0],animated:n}),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:a,handleBehavior:r,inheritedAttributes:d,focusTrap:p,expandToScroll:h}=this,l=!1!==t&&o,c=e(this),m=void 0!==i&&"ios"===c,f="cycle"===r;return n(s,Object.assign({key:"0bcbdcfcd7d890eb599da3f97f21c317d34f8e0e","no-router":!0,tabindex:"-1"},a,{style:{zIndex:`${2e4+this.overlayIndex}`},class:Object.assign({[c]:!0,"modal-default":!m&&!o,"modal-card":m,"modal-sheet":o,"modal-no-expand-scroll":o&&!h,"overlay-hidden":!0,[E]:!1===p},P(this.cssClass)),onIonBackdropTap:this.onBackdropTap,onIonModalDidPresent:this.onLifecycle,onIonModalWillPresent:this.onLifecycle,onIonModalWillDismiss:this.onLifecycle,onIonModalDidDismiss:this.onLifecycle}),n("ion-backdrop",{key:"d72159e73daa5af7349aa9e8f695aa435eb43069",ref:t=>this.backdropEl=t,visible:this.showBackdrop,tappable:this.backdropDismiss,part:"backdrop"}),"ios"===c&&n("div",{key:"fd2d9b13676ae72473881649a397b6eacde03a03",class:"modal-shadow"}),n("div",Object.assign({key:"908eccb1ad982dcde2dbcff0cbb18b6e60f8ba74",role:"dialog"},d,{"aria-modal":"true",class:"modal-wrapper ion-overlay-wrapper",part:"content",ref:t=>this.wrapperEl=t}),l&&n("button",{key:"332dc0b40363a77c7be62331d9f26def91c790e9",class:"modal-handle",tabIndex:f?0:-1,"aria-label":"Activate to adjust the size of the dialog overlaying the screen",onClick:f?this.onHandleClick:void 0,part:"handle"}),n("slot",{key:"c32698350193c450327e97049daf8b8d1fda0d0e"})))}get el(){return d(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}',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}