@ionic/core 8.7.18-dev.11769790854.11895f8f → 8.7.18-dev.11770316329.126ef4af

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 (38) hide show
  1. package/components/ion-refresher.js +32 -3
  2. package/components/modal.js +12 -220
  3. package/components/popover.js +11 -83
  4. package/dist/cjs/ion-modal.cjs.entry.js +12 -220
  5. package/dist/cjs/ion-popover.cjs.entry.js +11 -83
  6. package/dist/cjs/ion-refresher_2.cjs.entry.js +32 -3
  7. package/dist/collection/components/modal/gestures/sheet.js +1 -3
  8. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -3
  9. package/dist/collection/components/modal/modal.ios.css +4 -0
  10. package/dist/collection/components/modal/modal.js +7 -215
  11. package/dist/collection/components/modal/modal.md.css +4 -0
  12. package/dist/collection/components/popover/animations/ios.enter.js +5 -21
  13. package/dist/collection/components/popover/animations/md.enter.js +5 -30
  14. package/dist/collection/components/popover/utils.js +1 -32
  15. package/dist/collection/components/refresher/refresher.js +70 -4
  16. package/dist/docs.json +49 -4
  17. package/dist/esm/ion-modal.entry.js +12 -220
  18. package/dist/esm/ion-popover.entry.js +11 -83
  19. package/dist/esm/ion-refresher_2.entry.js +32 -3
  20. package/dist/html.html-data.json +1 -1
  21. package/dist/ionic/ionic.esm.js +1 -1
  22. package/dist/ionic/p-90f2d3ff.entry.js +4 -0
  23. package/dist/ionic/p-91840a80.entry.js +4 -0
  24. package/dist/ionic/p-f9061316.entry.js +4 -0
  25. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  26. package/dist/types/components/modal/gestures/swipe-to-close.d.ts +1 -1
  27. package/dist/types/components/modal/modal.d.ts +0 -47
  28. package/dist/types/components/popover/utils.d.ts +0 -2
  29. package/dist/types/components/refresher/refresher-interface.d.ts +7 -0
  30. package/dist/types/components/refresher/refresher.d.ts +16 -3
  31. package/dist/types/components.d.ts +16 -5
  32. package/dist/types/interface.d.ts +1 -1
  33. package/hydrate/index.js +54 -305
  34. package/hydrate/index.mjs +54 -305
  35. package/package.json +2 -4
  36. package/dist/ionic/p-639dd543.entry.js +0 -4
  37. package/dist/ionic/p-ec9ca3fe.entry.js +0 -4
  38. package/dist/ionic/p-ef4256eb.entry.js +0 -4
@@ -31,7 +31,7 @@ export const iosEnterAnimation = (baseEl, opts) => {
31
31
  const results = getPopoverPosition(isRTL, contentWidth, contentHeight, arrowWidth, arrowHeight, reference, side, align, defaultPosition, trigger, ev);
32
32
  const padding = size === 'cover' ? 0 : POPOVER_IOS_BODY_PADDING;
33
33
  const margin = size === 'cover' ? 0 : 25;
34
- const { originX, originY, top, left, bottom, checkSafeAreaTop, checkSafeAreaBottom, checkSafeAreaLeft, checkSafeAreaRight, arrowTop, arrowLeft, addPopoverBottomClass, } = calculateWindowAdjustment(side, results.top, results.left, padding, bodyWidth, bodyHeight, contentWidth, contentHeight, margin, results.originX, results.originY, results.referenceCoordinates, results.arrowTop, results.arrowLeft, arrowHeight);
34
+ const { originX, originY, top, left, bottom, checkSafeAreaLeft, checkSafeAreaRight, arrowTop, arrowLeft, addPopoverBottomClass, } = calculateWindowAdjustment(side, results.top, results.left, padding, bodyWidth, bodyHeight, contentWidth, contentHeight, margin, results.originX, results.originY, results.referenceCoordinates, results.arrowTop, results.arrowLeft, arrowHeight);
35
35
  const baseAnimation = createAnimation();
36
36
  const backdropAnimation = createAnimation();
37
37
  const contentAnimation = createAnimation();
@@ -61,35 +61,19 @@ export const iosEnterAnimation = (baseEl, opts) => {
61
61
  if (addPopoverBottomClass) {
62
62
  baseEl.classList.add('popover-bottom');
63
63
  }
64
- /**
65
- * Safe area CSS variable adjustments.
66
- * When the popover is positioned near an edge, we add the corresponding
67
- * safe-area inset to ensure the popover doesn't overlap with system UI
68
- * (status bars, home indicators, navigation bars on Android API 36+, etc.)
69
- */
70
- const safeAreaTop = ' + var(--ion-safe-area-top, 0)';
71
- const safeAreaBottom = ' + var(--ion-safe-area-bottom, 0)';
64
+ if (bottom !== undefined) {
65
+ contentEl.style.setProperty('bottom', `${bottom}px`);
66
+ }
72
67
  const safeAreaLeft = ' + var(--ion-safe-area-left, 0)';
73
68
  const safeAreaRight = ' - var(--ion-safe-area-right, 0)';
74
- let topValue = `${top}px`;
75
- let bottomValue = bottom !== undefined ? `${bottom}px` : undefined;
76
69
  let leftValue = `${left}px`;
77
- if (checkSafeAreaTop) {
78
- topValue = `${top}px${safeAreaTop}`;
79
- }
80
- if (checkSafeAreaBottom && bottomValue !== undefined) {
81
- bottomValue = `${bottom}px${safeAreaBottom}`;
82
- }
83
70
  if (checkSafeAreaLeft) {
84
71
  leftValue = `${left}px${safeAreaLeft}`;
85
72
  }
86
73
  if (checkSafeAreaRight) {
87
74
  leftValue = `${left}px${safeAreaRight}`;
88
75
  }
89
- if (bottomValue !== undefined) {
90
- contentEl.style.setProperty('bottom', `calc(${bottomValue})`);
91
- }
92
- contentEl.style.setProperty('top', `calc(${topValue} + var(--offset-y, 0))`);
76
+ contentEl.style.setProperty('top', `calc(${top}px + var(--offset-y, 0))`);
93
77
  contentEl.style.setProperty('left', `calc(${leftValue} + var(--offset-x, 0))`);
94
78
  contentEl.style.setProperty('transform-origin', `${originY} ${originX}`);
95
79
  if (arrowEl !== null) {
@@ -28,32 +28,7 @@ export const mdEnterAnimation = (baseEl, opts) => {
28
28
  };
29
29
  const results = getPopoverPosition(isRTL, contentWidth, contentHeight, 0, 0, reference, side, align, defaultPosition, trigger, ev);
30
30
  const padding = size === 'cover' ? 0 : POPOVER_MD_BODY_PADDING;
31
- const { originX, originY, top, left, bottom, checkSafeAreaTop, checkSafeAreaBottom, checkSafeAreaLeft, checkSafeAreaRight, } = calculateWindowAdjustment(side, results.top, results.left, padding, bodyWidth, bodyHeight, contentWidth, contentHeight, 0, results.originX, results.originY, results.referenceCoordinates);
32
- /**
33
- * Safe area CSS variable adjustments.
34
- * When the popover is positioned near an edge, we add the corresponding
35
- * safe-area inset to ensure the popover doesn't overlap with system UI
36
- * (status bars, home indicators, navigation bars on Android API 36+, etc.)
37
- */
38
- const safeAreaTop = ' + var(--ion-safe-area-top, 0)';
39
- const safeAreaBottom = ' + var(--ion-safe-area-bottom, 0)';
40
- const safeAreaLeft = ' + var(--ion-safe-area-left, 0)';
41
- const safeAreaRight = ' - var(--ion-safe-area-right, 0)';
42
- let topValue = `${top}px`;
43
- let bottomValue = bottom !== undefined ? `${bottom}px` : undefined;
44
- let leftValue = `${left}px`;
45
- if (checkSafeAreaTop) {
46
- topValue = `${top}px${safeAreaTop}`;
47
- }
48
- if (checkSafeAreaBottom && bottomValue !== undefined) {
49
- bottomValue = `${bottom}px${safeAreaBottom}`;
50
- }
51
- if (checkSafeAreaLeft) {
52
- leftValue = `${left}px${safeAreaLeft}`;
53
- }
54
- if (checkSafeAreaRight) {
55
- leftValue = `${left}px${safeAreaRight}`;
56
- }
31
+ const { originX, originY, top, left, bottom } = calculateWindowAdjustment(side, results.top, results.left, padding, bodyWidth, bodyHeight, contentWidth, contentHeight, 0, results.originX, results.originY, results.referenceCoordinates);
57
32
  const baseAnimation = createAnimation();
58
33
  const backdropAnimation = createAnimation();
59
34
  const wrapperAnimation = createAnimation();
@@ -70,13 +45,13 @@ export const mdEnterAnimation = (baseEl, opts) => {
70
45
  contentAnimation
71
46
  .addElement(contentEl)
72
47
  .beforeStyles({
73
- top: `calc(${topValue} + var(--offset-y, 0px))`,
74
- left: `calc(${leftValue} + var(--offset-x, 0px))`,
48
+ top: `calc(${top}px + var(--offset-y, 0px))`,
49
+ left: `calc(${left}px + var(--offset-x, 0px))`,
75
50
  'transform-origin': `${originY} ${originX}`,
76
51
  })
77
52
  .beforeAddWrite(() => {
78
- if (bottomValue !== undefined) {
79
- contentEl.style.setProperty('bottom', `calc(${bottomValue})`);
53
+ if (bottom !== undefined) {
54
+ contentEl.style.setProperty('bottom', `${bottom}px`);
80
55
  }
81
56
  })
82
57
  .fromTo('transform', 'scale(0.8)', 'scale(1)');
@@ -648,8 +648,6 @@ export const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding
648
648
  let bottom;
649
649
  let originX = contentOriginX;
650
650
  let originY = contentOriginY;
651
- let checkSafeAreaTop = false;
652
- let checkSafeAreaBottom = false;
653
651
  let checkSafeAreaLeft = false;
654
652
  let checkSafeAreaRight = false;
655
653
  const triggerTop = triggerCoordinates
@@ -694,18 +692,10 @@ export const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding
694
692
  * We chose 12 here so that the popover position looks a bit nicer as
695
693
  * it is not right up against the edge of the screen.
696
694
  */
697
- top = Math.max(bodyPadding, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
695
+ top = Math.max(12, triggerTop - contentHeight - triggerHeight - (arrowHeight - 1));
698
696
  arrowTop = top + contentHeight;
699
697
  originY = 'bottom';
700
698
  addPopoverBottomClass = true;
701
- /**
702
- * If the popover is positioned near the top edge, account for safe area.
703
- * This ensures the popover doesn't overlap with status bars or notches.
704
- */
705
- if (top <= bodyPadding + safeAreaMargin) {
706
- checkSafeAreaTop = true;
707
- top = bodyPadding;
708
- }
709
699
  /**
710
700
  * If not enough room for popover to appear
711
701
  * above trigger, then cut it off.
@@ -713,35 +703,14 @@ export const calculateWindowAdjustment = (side, coordTop, coordLeft, bodyPadding
713
703
  }
714
704
  else {
715
705
  bottom = bodyPadding;
716
- /**
717
- * When the popover is pinned to the bottom, account for safe area.
718
- * This ensures the popover doesn't overlap with home indicators
719
- * or navigation bars (e.g., Android API 36+ edge-to-edge).
720
- */
721
- checkSafeAreaBottom = true;
722
706
  }
723
707
  }
724
- /**
725
- * Final check: If the popover extends into any safe-area region,
726
- * ensure the corresponding flag is set regardless of side.
727
- * This handles cases where a side-positioned popover (left/right)
728
- * still needs bottom safe-area padding because it extends into that region.
729
- */
730
- const popoverBottom = bottom !== undefined ? bodyHeight - bottom : top + contentHeight;
731
- if (popoverBottom + safeAreaMargin > bodyHeight) {
732
- checkSafeAreaBottom = true;
733
- }
734
- if (top < safeAreaMargin) {
735
- checkSafeAreaTop = true;
736
- }
737
708
  return {
738
709
  top,
739
710
  left,
740
711
  bottom,
741
712
  originX,
742
713
  originY,
743
- checkSafeAreaTop,
744
- checkSafeAreaBottom,
745
714
  checkSafeAreaLeft,
746
715
  checkSafeAreaRight,
747
716
  arrowTop,
@@ -68,8 +68,8 @@ export class Refresher {
68
68
  * than `1`. The default value is `1` which is equal to the speed of the cursor.
69
69
  * If a negative value is passed in, the factor will be `1` instead.
70
70
  *
71
- * For example: If the value passed is `1.2` and the content is dragged by
72
- * `10` pixels, instead of `10` pixels the content will be pulled by `12` pixels
71
+ * For example, If the value passed is `1.2` and the content is dragged by
72
+ * `10` pixels, instead of `10` pixels, the content will be pulled by `12` pixels
73
73
  * (an increase of 20 percent). If the value passed is `0.8`, the dragged amount
74
74
  * will be `8` pixels, less than the amount the cursor has moved.
75
75
  *
@@ -119,6 +119,9 @@ export class Refresher {
119
119
  this.animations = [];
120
120
  this.progress = 0;
121
121
  this.state = 1 /* RefresherState.Inactive */;
122
+ this.ionPullEnd.emit({
123
+ reason: state === 32 /* RefresherState.Completing */ ? 'complete' : 'cancel',
124
+ });
122
125
  }
123
126
  async setupiOSNativeRefresher(pullingSpinner, refreshingSpinner) {
124
127
  this.elementToTransform = this.scrollEl;
@@ -151,6 +154,7 @@ export class Refresher {
151
154
  if (!this.didStart) {
152
155
  this.didStart = true;
153
156
  this.ionStart.emit();
157
+ this.ionPullStart.emit();
154
158
  }
155
159
  // emit "pulling" on every move
156
160
  if (this.pointerDown) {
@@ -226,6 +230,7 @@ export class Refresher {
226
230
  this.lastVelocityY = ev.velocityY;
227
231
  },
228
232
  onEnd: () => {
233
+ const hadStarted = this.didStart;
229
234
  this.pointerDown = false;
230
235
  this.didStart = false;
231
236
  if (this.needsCompletion) {
@@ -235,6 +240,13 @@ export class Refresher {
235
240
  else if (this.didRefresh) {
236
241
  readTask(() => translateElement(this.elementToTransform, `${this.el.clientHeight}px`));
237
242
  }
243
+ else if (hadStarted) {
244
+ /**
245
+ * User started pulling but released before reaching the refresh threshold.
246
+ * Emit ionPullEnd to complete the event pair.
247
+ */
248
+ this.ionPullEnd.emit({ reason: 'cancel' });
249
+ }
238
250
  },
239
251
  });
240
252
  this.disabledChanged();
@@ -281,6 +293,7 @@ export class Refresher {
281
293
  ev.data.animation = animation;
282
294
  animation.progressStart(false, 0);
283
295
  this.ionStart.emit();
296
+ this.ionPullStart.emit();
284
297
  this.animations.push(animation);
285
298
  return;
286
299
  }
@@ -303,6 +316,7 @@ export class Refresher {
303
316
  this.animations = [];
304
317
  this.gesture.enable(true);
305
318
  this.state = 1 /* RefresherState.Inactive */;
319
+ this.ionPullEnd.emit({ reason: 'cancel' });
306
320
  });
307
321
  return;
308
322
  }
@@ -547,6 +561,7 @@ export class Refresher {
547
561
  if (!this.didStart) {
548
562
  this.didStart = true;
549
563
  this.ionStart.emit();
564
+ this.ionPullStart.emit();
550
565
  }
551
566
  // emit "pulling" on every move
552
567
  this.ionPull.emit();
@@ -590,6 +605,15 @@ export class Refresher {
590
605
  * available right away.
591
606
  */
592
607
  this.restoreOverflowStyle();
608
+ /**
609
+ * If ionPullStart was emitted, we need to emit ionPullEnd
610
+ * even though the gesture was aborted before reaching the
611
+ * pulling threshold.
612
+ */
613
+ if (this.didStart) {
614
+ this.didStart = false;
615
+ this.ionPullEnd.emit({ reason: 'cancel' });
616
+ }
593
617
  }
594
618
  }
595
619
  beginRefresh() {
@@ -636,6 +660,9 @@ export class Refresher {
636
660
  if (this.contentFullscreen && this.backgroundContentEl) {
637
661
  (_a = this.backgroundContentEl) === null || _a === void 0 ? void 0 : _a.style.removeProperty('--offset-top');
638
662
  }
663
+ this.ionPullEnd.emit({
664
+ reason: state === 32 /* RefresherState.Completing */ ? 'complete' : 'cancel',
665
+ });
639
666
  }, 600);
640
667
  // reset the styles on the scroll element
641
668
  // set that the refresh is actively cancelling/completing
@@ -689,7 +716,7 @@ export class Refresher {
689
716
  }
690
717
  render() {
691
718
  const mode = getIonMode(this);
692
- return (h(Host, { key: '2d1bd880877b698604542ab2d602d38b9504d975', slot: "fixed", class: {
719
+ return (h(Host, { key: 'bed0c2f44c32ecac24b7d8326ac7c7ef1d12c44f', slot: "fixed", class: {
693
720
  [mode]: true,
694
721
  // Used internally for styling
695
722
  [`refresher-${mode}`]: true,
@@ -809,7 +836,7 @@ export class Refresher {
809
836
  "optional": false,
810
837
  "docs": {
811
838
  "tags": [],
812
- "text": "How much to multiply the pull speed by. To slow the pull animation down,\npass a number less than `1`. To speed up the pull, pass a number greater\nthan `1`. The default value is `1` which is equal to the speed of the cursor.\nIf a negative value is passed in, the factor will be `1` instead.\n\nFor example: If the value passed is `1.2` and the content is dragged by\n`10` pixels, instead of `10` pixels the content will be pulled by `12` pixels\n(an increase of 20 percent). If the value passed is `0.8`, the dragged amount\nwill be `8` pixels, less than the amount the cursor has moved.\n\nDoes not apply when the refresher content uses a spinner,\nenabling the native refresher."
839
+ "text": "How much to multiply the pull speed by. To slow the pull animation down,\npass a number less than `1`. To speed up the pull, pass a number greater\nthan `1`. The default value is `1` which is equal to the speed of the cursor.\nIf a negative value is passed in, the factor will be `1` instead.\n\nFor example, If the value passed is `1.2` and the content is dragged by\n`10` pixels, instead of `10` pixels, the content will be pulled by `12` pixels\n(an increase of 20 percent). If the value passed is `0.8`, the dragged amount\nwill be `8` pixels, less than the amount the cursor has moved.\n\nDoes not apply when the refresher content uses a spinner,\nenabling the native refresher."
813
840
  },
814
841
  "getter": false,
815
842
  "setter": false,
@@ -888,6 +915,24 @@ export class Refresher {
888
915
  "bubbles": true,
889
916
  "cancelable": true,
890
917
  "composed": true,
918
+ "docs": {
919
+ "tags": [{
920
+ "name": "deprecated",
921
+ "text": "Use `ionPullStart` instead."
922
+ }],
923
+ "text": "Emitted when the user begins to start pulling down.\nTODO(FW-7044): Remove this in a major release"
924
+ },
925
+ "complexType": {
926
+ "original": "void",
927
+ "resolved": "void",
928
+ "references": {}
929
+ }
930
+ }, {
931
+ "method": "ionPullStart",
932
+ "name": "ionPullStart",
933
+ "bubbles": true,
934
+ "cancelable": true,
935
+ "composed": true,
891
936
  "docs": {
892
937
  "tags": [],
893
938
  "text": "Emitted when the user begins to start pulling down."
@@ -897,6 +942,27 @@ export class Refresher {
897
942
  "resolved": "void",
898
943
  "references": {}
899
944
  }
945
+ }, {
946
+ "method": "ionPullEnd",
947
+ "name": "ionPullEnd",
948
+ "bubbles": true,
949
+ "cancelable": true,
950
+ "composed": true,
951
+ "docs": {
952
+ "tags": [],
953
+ "text": "Emitted when the refresher has returned to the inactive state\nafter a pull gesture. This fires whether the refresh completed\nsuccessfully or was canceled."
954
+ },
955
+ "complexType": {
956
+ "original": "RefresherPullEndEventDetail",
957
+ "resolved": "RefresherPullEndEventDetail",
958
+ "references": {
959
+ "RefresherPullEndEventDetail": {
960
+ "location": "import",
961
+ "path": "./refresher-interface",
962
+ "id": "src/components/refresher/refresher-interface.ts::RefresherPullEndEventDetail"
963
+ }
964
+ }
965
+ }
900
966
  }];
901
967
  }
902
968
  static get methods() {
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-01-30T16:35:57",
2
+ "timestamp": "2026-02-05T18:33:56",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.38.0",
@@ -26514,7 +26514,7 @@
26514
26514
  "mutable": false,
26515
26515
  "attr": "pull-factor",
26516
26516
  "reflectToAttr": false,
26517
- "docs": "How much to multiply the pull speed by. To slow the pull animation down,\npass a number less than `1`. To speed up the pull, pass a number greater\nthan `1`. The default value is `1` which is equal to the speed of the cursor.\nIf a negative value is passed in, the factor will be `1` instead.\n\nFor example: If the value passed is `1.2` and the content is dragged by\n`10` pixels, instead of `10` pixels the content will be pulled by `12` pixels\n(an increase of 20 percent). If the value passed is `0.8`, the dragged amount\nwill be `8` pixels, less than the amount the cursor has moved.\n\nDoes not apply when the refresher content uses a spinner,\nenabling the native refresher.",
26517
+ "docs": "How much to multiply the pull speed by. To slow the pull animation down,\npass a number less than `1`. To speed up the pull, pass a number greater\nthan `1`. The default value is `1` which is equal to the speed of the cursor.\nIf a negative value is passed in, the factor will be `1` instead.\n\nFor example, If the value passed is `1.2` and the content is dragged by\n`10` pixels, instead of `10` pixels, the content will be pulled by `12` pixels\n(an increase of 20 percent). If the value passed is `0.8`, the dragged amount\nwill be `8` pixels, less than the amount the cursor has moved.\n\nDoes not apply when the refresher content uses a spinner,\nenabling the native refresher.",
26518
26518
  "docsTags": [
26519
26519
  {
26520
26520
  "name": "default",
@@ -26703,6 +26703,40 @@
26703
26703
  "docs": "Emitted while the user is pulling down the content and exposing the refresher.",
26704
26704
  "docsTags": []
26705
26705
  },
26706
+ {
26707
+ "event": "ionPullEnd",
26708
+ "detail": "RefresherPullEndEventDetail",
26709
+ "bubbles": true,
26710
+ "complexType": {
26711
+ "original": "RefresherPullEndEventDetail",
26712
+ "resolved": "RefresherPullEndEventDetail",
26713
+ "references": {
26714
+ "RefresherPullEndEventDetail": {
26715
+ "location": "import",
26716
+ "path": "./refresher-interface",
26717
+ "id": "src/components/refresher/refresher-interface.ts::RefresherPullEndEventDetail"
26718
+ }
26719
+ }
26720
+ },
26721
+ "cancelable": true,
26722
+ "composed": true,
26723
+ "docs": "Emitted when the refresher has returned to the inactive state\nafter a pull gesture. This fires whether the refresh completed\nsuccessfully or was canceled.",
26724
+ "docsTags": []
26725
+ },
26726
+ {
26727
+ "event": "ionPullStart",
26728
+ "detail": "void",
26729
+ "bubbles": true,
26730
+ "complexType": {
26731
+ "original": "void",
26732
+ "resolved": "void",
26733
+ "references": {}
26734
+ },
26735
+ "cancelable": true,
26736
+ "composed": true,
26737
+ "docs": "Emitted when the user begins to start pulling down.",
26738
+ "docsTags": []
26739
+ },
26706
26740
  {
26707
26741
  "event": "ionRefresh",
26708
26742
  "detail": "RefresherEventDetail",
@@ -26734,8 +26768,14 @@
26734
26768
  },
26735
26769
  "cancelable": true,
26736
26770
  "composed": true,
26737
- "docs": "Emitted when the user begins to start pulling down.",
26738
- "docsTags": []
26771
+ "docs": "Emitted when the user begins to start pulling down.\nTODO(FW-7044): Remove this in a major release",
26772
+ "docsTags": [
26773
+ {
26774
+ "name": "deprecated",
26775
+ "text": "Use `ionPullStart` instead."
26776
+ }
26777
+ ],
26778
+ "deprecation": "Use `ionPullStart` instead."
26739
26779
  }
26740
26780
  ],
26741
26781
  "listeners": [],
@@ -37551,6 +37591,11 @@
37551
37591
  "docstring": "",
37552
37592
  "path": "src/components/refresher/refresher-interface.ts"
37553
37593
  },
37594
+ "src/components/refresher/refresher-interface.ts::RefresherPullEndEventDetail": {
37595
+ "declaration": "export interface RefresherPullEndEventDetail {\n reason: 'complete' | 'cancel';\n}",
37596
+ "docstring": "",
37597
+ "path": "src/components/refresher/refresher-interface.ts"
37598
+ },
37554
37599
  "src/components/reorder-group/reorder-group-interface.ts::ItemReorderEventDetail": {
37555
37600
  "declaration": "export interface ItemReorderEventDetail {\n from: number;\n to: number;\n complete: (data?: boolean | any[]) => any;\n}",
37556
37601
  "docstring": "",