@ionic/core 7.3.5-dev.11694621267.1e5f63c2 → 7.4.0
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/components/button-active.js +1 -1
- package/components/checkbox.js +6 -3
- package/components/data.js +31 -7
- package/components/index.js +2 -2
- package/components/index2.js +203 -429
- package/components/index3.js +429 -203
- package/components/ion-datetime-button.js +3 -0
- package/components/ion-datetime.js +132 -92
- package/components/ion-item-sliding.js +1 -1
- package/components/ion-menu.js +1 -1
- package/components/ion-modal.js +2 -2
- package/components/ion-nav.js +1 -1
- package/components/ion-range.js +3 -3
- package/components/ion-refresher.js +3 -3
- package/components/ion-reorder-group.js +1 -1
- package/components/ion-router-outlet.js +1 -1
- package/components/ion-segment.js +1 -1
- package/components/ion-toggle.js +7 -4
- package/components/ios.transition.js +1 -1
- package/components/md.transition.js +1 -1
- package/components/notch-controller.js +1 -1
- package/components/picker-column.js +1 -1
- package/components/popover.js +1 -1
- package/components/radio.js +6 -3
- package/components/swipe-back.js +1 -1
- package/css/core.css.map +1 -1
- package/css/ionic.bundle.css.map +1 -1
- package/dist/cjs/{data-967b9c15.js → data-db832785.js} +31 -7
- package/dist/cjs/index.cjs.js +10 -9
- package/dist/cjs/ion-checkbox.cjs.entry.js +5 -3
- package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +132 -93
- package/dist/cjs/ion-input.cjs.entry.js +1 -1
- package/dist/cjs/ion-radio_2.cjs.entry.js +5 -3
- package/dist/cjs/ion-range.cjs.entry.js +2 -2
- package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-textarea.cjs.entry.js +1 -1
- package/dist/cjs/ion-toggle.cjs.entry.js +5 -3
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{notch-controller-c27fe0b7.js → notch-controller-f4f6af5d.js} +1 -1
- package/dist/collection/components/checkbox/checkbox.ios.css +67 -0
- package/dist/collection/components/checkbox/checkbox.js +24 -4
- package/dist/collection/components/checkbox/checkbox.md.css +67 -0
- package/dist/collection/components/checkbox/test/item/checkbox.e2e.js +13 -0
- package/dist/collection/components/checkbox/test/label/checkbox.e2e.js +27 -0
- package/dist/collection/components/datetime/datetime.ios.css +32 -29
- package/dist/collection/components/datetime/datetime.js +137 -93
- package/dist/collection/components/datetime/datetime.md.css +20 -28
- package/dist/collection/components/datetime/test/basic/datetime.e2e.js +25 -0
- package/dist/collection/components/datetime/test/color/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/custom/datetime.e2e.js +27 -1
- package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +15 -0
- package/dist/collection/components/datetime/test/set-value/datetime.e2e.js +9 -12
- package/dist/collection/components/datetime/utils/data.js +14 -6
- package/dist/collection/components/datetime/utils/parse.js +18 -1
- package/dist/collection/components/datetime-button/datetime-button.js +3 -0
- package/dist/collection/components/radio/radio.ios.css +67 -0
- package/dist/collection/components/radio/radio.js +24 -4
- package/dist/collection/components/radio/radio.md.css +67 -0
- package/dist/collection/components/radio/test/item/radio.e2e.js +15 -0
- package/dist/collection/components/radio/test/label-placement/radio.e2e.js +31 -0
- package/dist/collection/components/range/range.ios.css +66 -1
- package/dist/collection/components/range/range.js +3 -3
- package/dist/collection/components/range/range.md.css +66 -1
- package/dist/collection/components/range/test/item/range.e2e.js +15 -0
- package/dist/collection/components/range/test/label/range.e2e.js +59 -0
- package/dist/collection/components/toggle/test/item/toggle.e2e.js +15 -0
- package/dist/collection/components/toggle/test/label/toggle.e2e.js +27 -0
- package/dist/collection/components/toggle/toggle.ios.css +67 -1
- package/dist/collection/components/toggle/toggle.js +24 -4
- package/dist/collection/components/toggle/toggle.md.css +67 -1
- package/dist/collection/index.js +1 -0
- package/dist/collection/utils/forms/notch-controller.js +1 -1
- package/dist/docs.json +147 -18
- package/dist/esm/{data-4b448e3a.js → data-009dbf15.js} +31 -7
- package/dist/esm/index.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +5 -3
- package/dist/esm/ion-datetime-button.entry.js +4 -1
- package/dist/esm/ion-datetime_3.entry.js +132 -93
- package/dist/esm/ion-input.entry.js +1 -1
- package/dist/esm/ion-radio_2.entry.js +5 -3
- package/dist/esm/ion-range.entry.js +2 -2
- package/dist/esm/ion-select_3.entry.js +1 -1
- package/dist/esm/ion-textarea.entry.js +1 -1
- package/dist/esm/ion-toggle.entry.js +5 -3
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{notch-controller-cb5bbe6a.js → notch-controller-8c9c0e54.js} +1 -1
- package/dist/esm-es5/data-009dbf15.js +4 -0
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-input.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-range.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-textarea.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/html.html-data.json +52 -4
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-dc4c9086.system.entry.js → p-264b5dd9.system.entry.js} +1 -1
- package/dist/ionic/{p-4d2807fa.entry.js → p-37c9e295.entry.js} +1 -1
- package/dist/ionic/p-3d575698.system.entry.js +4 -0
- package/dist/ionic/p-44ef7224.system.js +4 -0
- package/dist/ionic/{p-1c236453.system.entry.js → p-46058a1e.system.entry.js} +1 -1
- package/dist/ionic/{p-68deb933.entry.js → p-52edd6b0.entry.js} +1 -1
- package/dist/ionic/p-60f22efc.system.entry.js +4 -0
- package/dist/ionic/p-6d640b2b.entry.js +4 -0
- package/dist/ionic/p-74ef17ea.system.entry.js +4 -0
- package/dist/ionic/p-7cfd253c.js +4 -0
- package/dist/ionic/p-9fccec52.system.js +4 -0
- package/dist/ionic/p-aa702daf.entry.js +4 -0
- package/dist/ionic/p-ab051966.entry.js +4 -0
- package/dist/ionic/p-c005eb67.system.entry.js +4 -0
- package/dist/ionic/p-c68a8814.system.js +1 -1
- package/dist/ionic/p-cc758251.system.entry.js +4 -0
- package/dist/ionic/{p-0ce43a8f.system.entry.js → p-d0d09178.system.entry.js} +1 -1
- package/dist/ionic/p-dfee12f6.entry.js +4 -0
- package/dist/ionic/{p-8db97b90.entry.js → p-e3ca182a.entry.js} +1 -1
- package/dist/ionic/p-f0c28fbd.entry.js +4 -0
- package/dist/ionic/p-fdfc7b98.entry.js +4 -0
- package/dist/ionic/p-ff0611e6.system.entry.js +4 -0
- package/dist/types/components/checkbox/checkbox.d.ts +8 -1
- package/dist/types/components/datetime/datetime.d.ts +23 -10
- package/dist/types/components/datetime/utils/data.d.ts +1 -1
- package/dist/types/components/datetime/utils/parse.d.ts +3 -3
- package/dist/types/components/radio/radio.d.ts +8 -1
- package/dist/types/components/range/range.d.ts +2 -1
- package/dist/types/components/toast/toast-interface.d.ts +3 -0
- package/dist/types/components/toggle/toggle.d.ts +8 -1
- package/dist/types/components.d.ts +40 -16
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interface.d.ts +1 -0
- package/hydrate/index.js +193 -111
- package/package.json +1 -1
- package/dist/esm-es5/data-4b448e3a.js +0 -4
- package/dist/ionic/p-17e961cf.entry.js +0 -4
- package/dist/ionic/p-1b533a76.system.entry.js +0 -4
- package/dist/ionic/p-44a6f15d.system.entry.js +0 -4
- package/dist/ionic/p-4f7109fa.entry.js +0 -4
- package/dist/ionic/p-601fd53c.js +0 -4
- package/dist/ionic/p-7106c152.system.js +0 -4
- package/dist/ionic/p-9eaaa910.entry.js +0 -4
- package/dist/ionic/p-af6125d1.system.entry.js +0 -4
- package/dist/ionic/p-b8d7f0eb.system.entry.js +0 -4
- package/dist/ionic/p-b9179eab.entry.js +0 -4
- package/dist/ionic/p-cc8910e7.system.js +0 -4
- package/dist/ionic/p-dc7d392d.entry.js +0 -4
- package/dist/ionic/p-e65aed58.system.entry.js +0 -4
- package/dist/ionic/p-f3ec1f2b.entry.js +0 -4
- package/dist/ionic/p-fb26fa56.system.entry.js +0 -4
- /package/dist/esm-es5/{notch-controller-cb5bbe6a.js → notch-controller-8c9c0e54.js} +0 -0
- /package/dist/ionic/{p-4b37d92d.js → p-3bad5c1a.js} +0 -0
- /package/dist/ionic/{p-46b2991d.system.js → p-ab4cff27.system.js} +0 -0
package/components/index2.js
CHANGED
|
@@ -1,457 +1,231 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { writeTask, Build } from '@stencil/core/internal/client';
|
|
5
|
+
import { r as raf } from './helpers.js';
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
|
|
8
|
+
const LIFECYCLE_DID_ENTER = 'ionViewDidEnter';
|
|
9
|
+
const LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';
|
|
10
|
+
const LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';
|
|
11
|
+
const LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';
|
|
12
|
+
|
|
13
|
+
const iosTransitionAnimation = () => import('./ios.transition.js');
|
|
14
|
+
const mdTransitionAnimation = () => import('./md.transition.js');
|
|
15
|
+
// TODO(FW-2832): types
|
|
16
|
+
const transition = (opts) => {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
writeTask(() => {
|
|
19
|
+
beforeTransition(opts);
|
|
20
|
+
runTransition(opts).then((result) => {
|
|
21
|
+
if (result.animation) {
|
|
22
|
+
result.animation.destroy();
|
|
23
|
+
}
|
|
24
|
+
afterTransition(opts);
|
|
25
|
+
resolve(result);
|
|
26
|
+
}, (error) => {
|
|
27
|
+
afterTransition(opts);
|
|
28
|
+
reject(error);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
const beforeTransition = (opts) => {
|
|
34
|
+
const enteringEl = opts.enteringEl;
|
|
35
|
+
const leavingEl = opts.leavingEl;
|
|
36
|
+
setZIndex(enteringEl, leavingEl, opts.direction);
|
|
37
|
+
if (opts.showGoBack) {
|
|
38
|
+
enteringEl.classList.add('can-go-back');
|
|
22
39
|
}
|
|
23
40
|
else {
|
|
24
|
-
|
|
25
|
-
|
|
41
|
+
enteringEl.classList.remove('can-go-back');
|
|
42
|
+
}
|
|
43
|
+
setPageHidden(enteringEl, false);
|
|
44
|
+
/**
|
|
45
|
+
* When transitioning, the page should not
|
|
46
|
+
* respond to click events. This resolves small
|
|
47
|
+
* issues like users double tapping the ion-back-button.
|
|
48
|
+
* These pointer events are removed in `afterTransition`.
|
|
49
|
+
*/
|
|
50
|
+
enteringEl.style.setProperty('pointer-events', 'none');
|
|
51
|
+
if (leavingEl) {
|
|
52
|
+
setPageHidden(leavingEl, false);
|
|
53
|
+
leavingEl.style.setProperty('pointer-events', 'none');
|
|
26
54
|
}
|
|
27
|
-
el[add](eventName, callback, listenerOpts);
|
|
28
|
-
return () => {
|
|
29
|
-
el[remove](eventName, callback, listenerOpts);
|
|
30
|
-
};
|
|
31
55
|
};
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
_sPassive = false;
|
|
46
|
-
}
|
|
56
|
+
const runTransition = async (opts) => {
|
|
57
|
+
const animationBuilder = await getAnimationBuilder(opts);
|
|
58
|
+
const ani = animationBuilder && Build.isBrowser ? animation(animationBuilder, opts) : noAnimation(opts); // fast path for no animation
|
|
59
|
+
return ani;
|
|
60
|
+
};
|
|
61
|
+
const afterTransition = (opts) => {
|
|
62
|
+
const enteringEl = opts.enteringEl;
|
|
63
|
+
const leavingEl = opts.leavingEl;
|
|
64
|
+
enteringEl.classList.remove('ion-page-invisible');
|
|
65
|
+
enteringEl.style.removeProperty('pointer-events');
|
|
66
|
+
if (leavingEl !== undefined) {
|
|
67
|
+
leavingEl.classList.remove('ion-page-invisible');
|
|
68
|
+
leavingEl.style.removeProperty('pointer-events');
|
|
47
69
|
}
|
|
48
|
-
return !!_sPassive;
|
|
49
70
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
* the reference element in the gesture. In the event that the element this
|
|
74
|
-
* event was first dispatched on is removed from the DOM, the event will no
|
|
75
|
-
* longer bubble up to our reference element. This leaves the gesture in an
|
|
76
|
-
* unusable state. To account for this, the touchend and touchcancel listeners
|
|
77
|
-
* should be added to the event target so that they still fire even if the target
|
|
78
|
-
* is removed from the DOM.
|
|
79
|
-
*/
|
|
80
|
-
if (!rmTouchEnd) {
|
|
81
|
-
rmTouchEnd = addEventListener(ev.target, 'touchend', handleTouchEnd, options);
|
|
82
|
-
}
|
|
83
|
-
if (!rmTouchCancel) {
|
|
84
|
-
rmTouchCancel = addEventListener(ev.target, 'touchcancel', handleTouchEnd, options);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const handleMouseDown = (ev) => {
|
|
88
|
-
if (lastTouchEvent > Date.now()) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
if (!pointerDown(ev)) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
if (!rmMouseMove && pointerMove) {
|
|
95
|
-
rmMouseMove = addEventListener(getDocument(el), 'mousemove', pointerMove, options);
|
|
96
|
-
}
|
|
97
|
-
if (!rmMouseUp) {
|
|
98
|
-
rmMouseUp = addEventListener(getDocument(el), 'mouseup', handleMouseUp, options);
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
const handleTouchEnd = (ev) => {
|
|
102
|
-
stopTouch();
|
|
103
|
-
if (pointerUp) {
|
|
104
|
-
pointerUp(ev);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
const handleMouseUp = (ev) => {
|
|
108
|
-
stopMouse();
|
|
109
|
-
if (pointerUp) {
|
|
110
|
-
pointerUp(ev);
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
const stopTouch = () => {
|
|
114
|
-
if (rmTouchMove) {
|
|
115
|
-
rmTouchMove();
|
|
116
|
-
}
|
|
117
|
-
if (rmTouchEnd) {
|
|
118
|
-
rmTouchEnd();
|
|
119
|
-
}
|
|
120
|
-
if (rmTouchCancel) {
|
|
121
|
-
rmTouchCancel();
|
|
122
|
-
}
|
|
123
|
-
rmTouchMove = rmTouchEnd = rmTouchCancel = undefined;
|
|
124
|
-
};
|
|
125
|
-
const stopMouse = () => {
|
|
126
|
-
if (rmMouseMove) {
|
|
127
|
-
rmMouseMove();
|
|
128
|
-
}
|
|
129
|
-
if (rmMouseUp) {
|
|
130
|
-
rmMouseUp();
|
|
131
|
-
}
|
|
132
|
-
rmMouseMove = rmMouseUp = undefined;
|
|
133
|
-
};
|
|
134
|
-
const stop = () => {
|
|
135
|
-
stopTouch();
|
|
136
|
-
stopMouse();
|
|
137
|
-
};
|
|
138
|
-
const enable = (isEnabled = true) => {
|
|
139
|
-
if (!isEnabled) {
|
|
140
|
-
if (rmTouchStart) {
|
|
141
|
-
rmTouchStart();
|
|
142
|
-
}
|
|
143
|
-
if (rmMouseStart) {
|
|
144
|
-
rmMouseStart();
|
|
145
|
-
}
|
|
146
|
-
rmTouchStart = rmMouseStart = undefined;
|
|
147
|
-
stop();
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
if (!rmTouchStart) {
|
|
151
|
-
rmTouchStart = addEventListener(el, 'touchstart', handleTouchStart, options);
|
|
152
|
-
}
|
|
153
|
-
if (!rmMouseStart) {
|
|
154
|
-
rmMouseStart = addEventListener(el, 'mousedown', handleMouseDown, options);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
const destroy = () => {
|
|
159
|
-
enable(false);
|
|
160
|
-
pointerUp = pointerMove = pointerDown = undefined;
|
|
161
|
-
};
|
|
71
|
+
const getAnimationBuilder = async (opts) => {
|
|
72
|
+
if (!opts.leavingEl || !opts.animated || opts.duration === 0) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
if (opts.animationBuilder) {
|
|
76
|
+
return opts.animationBuilder;
|
|
77
|
+
}
|
|
78
|
+
const getAnimation = opts.mode === 'ios'
|
|
79
|
+
? (await iosTransitionAnimation()).iosTransitionAnimation
|
|
80
|
+
: (await mdTransitionAnimation()).mdTransitionAnimation;
|
|
81
|
+
return getAnimation;
|
|
82
|
+
};
|
|
83
|
+
const animation = async (animationBuilder, opts) => {
|
|
84
|
+
await waitForReady(opts, true);
|
|
85
|
+
const trans = animationBuilder(opts.baseEl, opts);
|
|
86
|
+
fireWillEvents(opts.enteringEl, opts.leavingEl);
|
|
87
|
+
const didComplete = await playTransition(trans, opts);
|
|
88
|
+
if (opts.progressCallback) {
|
|
89
|
+
opts.progressCallback(undefined);
|
|
90
|
+
}
|
|
91
|
+
if (didComplete) {
|
|
92
|
+
fireDidEvents(opts.enteringEl, opts.leavingEl);
|
|
93
|
+
}
|
|
162
94
|
return {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
destroy,
|
|
95
|
+
hasCompleted: didComplete,
|
|
96
|
+
animation: trans,
|
|
166
97
|
};
|
|
167
98
|
};
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
const isDirX = direction === 'x';
|
|
175
|
-
const maxCosine = Math.cos(radians);
|
|
176
|
-
const threshold = thresh * thresh;
|
|
177
|
-
let startX = 0;
|
|
178
|
-
let startY = 0;
|
|
179
|
-
let dirty = false;
|
|
180
|
-
let isPan = 0;
|
|
99
|
+
const noAnimation = async (opts) => {
|
|
100
|
+
const enteringEl = opts.enteringEl;
|
|
101
|
+
const leavingEl = opts.leavingEl;
|
|
102
|
+
await waitForReady(opts, false);
|
|
103
|
+
fireWillEvents(enteringEl, leavingEl);
|
|
104
|
+
fireDidEvents(enteringEl, leavingEl);
|
|
181
105
|
return {
|
|
182
|
-
|
|
183
|
-
startX = x;
|
|
184
|
-
startY = y;
|
|
185
|
-
isPan = 0;
|
|
186
|
-
dirty = true;
|
|
187
|
-
},
|
|
188
|
-
detect(x, y) {
|
|
189
|
-
if (!dirty) {
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
const deltaX = x - startX;
|
|
193
|
-
const deltaY = y - startY;
|
|
194
|
-
const distance = deltaX * deltaX + deltaY * deltaY;
|
|
195
|
-
if (distance < threshold) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
const hypotenuse = Math.sqrt(distance);
|
|
199
|
-
const cosine = (isDirX ? deltaX : deltaY) / hypotenuse;
|
|
200
|
-
if (cosine > maxCosine) {
|
|
201
|
-
isPan = 1;
|
|
202
|
-
}
|
|
203
|
-
else if (cosine < -maxCosine) {
|
|
204
|
-
isPan = -1;
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
isPan = 0;
|
|
208
|
-
}
|
|
209
|
-
dirty = false;
|
|
210
|
-
return true;
|
|
211
|
-
},
|
|
212
|
-
isGesture() {
|
|
213
|
-
return isPan !== 0;
|
|
214
|
-
},
|
|
215
|
-
getDirection() {
|
|
216
|
-
return isPan;
|
|
217
|
-
},
|
|
106
|
+
hasCompleted: true,
|
|
218
107
|
};
|
|
219
108
|
};
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
const blurOnStart = finalConfig.blurOnStart;
|
|
237
|
-
const detail = {
|
|
238
|
-
type: 'pan',
|
|
239
|
-
startX: 0,
|
|
240
|
-
startY: 0,
|
|
241
|
-
startTime: 0,
|
|
242
|
-
currentX: 0,
|
|
243
|
-
currentY: 0,
|
|
244
|
-
velocityX: 0,
|
|
245
|
-
velocityY: 0,
|
|
246
|
-
deltaX: 0,
|
|
247
|
-
deltaY: 0,
|
|
248
|
-
currentTime: 0,
|
|
249
|
-
event: undefined,
|
|
250
|
-
data: undefined,
|
|
251
|
-
};
|
|
252
|
-
const pan = createPanRecognizer(finalConfig.direction, finalConfig.threshold, finalConfig.maxAngle);
|
|
253
|
-
const gesture = GESTURE_CONTROLLER.createGesture({
|
|
254
|
-
name: config.gestureName,
|
|
255
|
-
priority: config.gesturePriority,
|
|
256
|
-
disableScroll: config.disableScroll,
|
|
109
|
+
const waitForReady = async (opts, defaultDeep) => {
|
|
110
|
+
const deep = opts.deepWait !== undefined ? opts.deepWait : defaultDeep;
|
|
111
|
+
if (deep) {
|
|
112
|
+
await Promise.all([deepReady(opts.enteringEl), deepReady(opts.leavingEl)]);
|
|
113
|
+
}
|
|
114
|
+
await notifyViewReady(opts.viewIsReady, opts.enteringEl);
|
|
115
|
+
};
|
|
116
|
+
const notifyViewReady = async (viewIsReady, enteringEl) => {
|
|
117
|
+
if (viewIsReady) {
|
|
118
|
+
await viewIsReady(enteringEl);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const playTransition = (trans, opts) => {
|
|
122
|
+
const progressCallback = opts.progressCallback;
|
|
123
|
+
const promise = new Promise((resolve) => {
|
|
124
|
+
trans.onFinish((currentStep) => resolve(currentStep === 1));
|
|
257
125
|
});
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
};
|
|
316
|
-
const tryToCapturePan = () => {
|
|
317
|
-
if (!gesture.capture()) {
|
|
318
|
-
return false;
|
|
319
|
-
}
|
|
320
|
-
hasCapturedPan = true;
|
|
321
|
-
hasFiredStart = false;
|
|
322
|
-
// reset start position since the real user-land event starts here
|
|
323
|
-
// If the pan detector threshold is big, not resetting the start position
|
|
324
|
-
// will cause a jump in the animation equal to the detector threshold.
|
|
325
|
-
// the array of positions used to calculate the gesture velocity does not
|
|
326
|
-
// need to be cleaned, more points in the positions array always results in a
|
|
327
|
-
// more accurate value of the velocity.
|
|
328
|
-
detail.startX = detail.currentX;
|
|
329
|
-
detail.startY = detail.currentY;
|
|
330
|
-
detail.startTime = detail.currentTime;
|
|
331
|
-
if (onWillStart) {
|
|
332
|
-
onWillStart(detail).then(fireOnStart);
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
fireOnStart();
|
|
336
|
-
}
|
|
337
|
-
return true;
|
|
338
|
-
};
|
|
339
|
-
const blurActiveElement = () => {
|
|
340
|
-
if (typeof document !== 'undefined') {
|
|
341
|
-
const activeElement = document.activeElement;
|
|
342
|
-
if (activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur) {
|
|
343
|
-
activeElement.blur();
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
};
|
|
347
|
-
const fireOnStart = () => {
|
|
348
|
-
if (blurOnStart) {
|
|
349
|
-
blurActiveElement();
|
|
350
|
-
}
|
|
351
|
-
if (onStart) {
|
|
352
|
-
onStart(detail);
|
|
353
|
-
}
|
|
354
|
-
hasFiredStart = true;
|
|
355
|
-
};
|
|
356
|
-
const reset = () => {
|
|
357
|
-
hasCapturedPan = false;
|
|
358
|
-
hasStartedPan = false;
|
|
359
|
-
isMoveQueued = false;
|
|
360
|
-
hasFiredStart = true;
|
|
361
|
-
gesture.release();
|
|
362
|
-
};
|
|
363
|
-
// END *************************
|
|
364
|
-
const pointerUp = (ev) => {
|
|
365
|
-
const tmpHasCaptured = hasCapturedPan;
|
|
366
|
-
const tmpHasFiredStart = hasFiredStart;
|
|
367
|
-
reset();
|
|
368
|
-
if (!tmpHasFiredStart) {
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
calcGestureData(detail, ev);
|
|
372
|
-
// Try to capture press
|
|
373
|
-
if (tmpHasCaptured) {
|
|
374
|
-
if (onEnd) {
|
|
375
|
-
onEnd(detail);
|
|
126
|
+
// cool, let's do this, start the transition
|
|
127
|
+
if (progressCallback) {
|
|
128
|
+
// this is a swipe to go back, just get the transition progress ready
|
|
129
|
+
// kick off the swipe animation start
|
|
130
|
+
trans.progressStart(true);
|
|
131
|
+
progressCallback(trans);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// only the top level transition should actually start "play"
|
|
135
|
+
// kick it off and let it play through
|
|
136
|
+
// ******** DOM WRITE ****************
|
|
137
|
+
trans.play();
|
|
138
|
+
}
|
|
139
|
+
// create a callback for when the animation is done
|
|
140
|
+
return promise;
|
|
141
|
+
};
|
|
142
|
+
const fireWillEvents = (enteringEl, leavingEl) => {
|
|
143
|
+
lifecycle(leavingEl, LIFECYCLE_WILL_LEAVE);
|
|
144
|
+
lifecycle(enteringEl, LIFECYCLE_WILL_ENTER);
|
|
145
|
+
};
|
|
146
|
+
const fireDidEvents = (enteringEl, leavingEl) => {
|
|
147
|
+
lifecycle(enteringEl, LIFECYCLE_DID_ENTER);
|
|
148
|
+
lifecycle(leavingEl, LIFECYCLE_DID_LEAVE);
|
|
149
|
+
};
|
|
150
|
+
const lifecycle = (el, eventName) => {
|
|
151
|
+
if (el) {
|
|
152
|
+
const ev = new CustomEvent(eventName, {
|
|
153
|
+
bubbles: false,
|
|
154
|
+
cancelable: false,
|
|
155
|
+
});
|
|
156
|
+
el.dispatchEvent(ev);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Wait two request animation frame loops.
|
|
161
|
+
* This allows the framework implementations enough time to mount
|
|
162
|
+
* the user-defined contents. This is often needed when using inline
|
|
163
|
+
* modals and popovers that accept user components. For popover,
|
|
164
|
+
* the contents must be mounted for the popover to be sized correctly.
|
|
165
|
+
* For modals, the contents must be mounted for iOS to run the
|
|
166
|
+
* transition correctly.
|
|
167
|
+
*
|
|
168
|
+
* On Angular and React, a single raf is enough time, but for Vue
|
|
169
|
+
* we need to wait two rafs. As a result we are using two rafs for
|
|
170
|
+
* all frameworks to ensure contents are mounted.
|
|
171
|
+
*/
|
|
172
|
+
const waitForMount = () => {
|
|
173
|
+
return new Promise((resolve) => raf(() => raf(() => resolve())));
|
|
174
|
+
};
|
|
175
|
+
const deepReady = async (el) => {
|
|
176
|
+
const element = el;
|
|
177
|
+
if (element) {
|
|
178
|
+
if (element.componentOnReady != null) {
|
|
179
|
+
// eslint-disable-next-line custom-rules/no-component-on-ready-method
|
|
180
|
+
const stencilEl = await element.componentOnReady();
|
|
181
|
+
if (stencilEl != null) {
|
|
182
|
+
return;
|
|
376
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Custom elements in Stencil will have __registerHost.
|
|
186
|
+
*/
|
|
187
|
+
}
|
|
188
|
+
else if (element.__registerHost != null) {
|
|
189
|
+
/**
|
|
190
|
+
* Non-lazy loaded custom elements need to wait
|
|
191
|
+
* one frame for component to be loaded.
|
|
192
|
+
*/
|
|
193
|
+
const waitForCustomElement = new Promise((resolve) => raf(resolve));
|
|
194
|
+
await waitForCustomElement;
|
|
377
195
|
return;
|
|
378
196
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
notCaptured(detail);
|
|
382
|
-
}
|
|
383
|
-
};
|
|
384
|
-
const pointerEvents = createPointerEvents(finalConfig.el, pointerDown, pointerMove, pointerUp, {
|
|
385
|
-
capture: false,
|
|
386
|
-
passive,
|
|
387
|
-
});
|
|
388
|
-
const abortGesture = () => {
|
|
389
|
-
reset();
|
|
390
|
-
pointerEvents.stop();
|
|
391
|
-
if (notCaptured) {
|
|
392
|
-
notCaptured(detail);
|
|
393
|
-
}
|
|
394
|
-
};
|
|
395
|
-
return {
|
|
396
|
-
enable(enable = true) {
|
|
397
|
-
if (!enable) {
|
|
398
|
-
if (hasCapturedPan) {
|
|
399
|
-
pointerUp(undefined);
|
|
400
|
-
}
|
|
401
|
-
reset();
|
|
402
|
-
}
|
|
403
|
-
pointerEvents.enable(enable);
|
|
404
|
-
},
|
|
405
|
-
destroy() {
|
|
406
|
-
gesture.destroy();
|
|
407
|
-
pointerEvents.destroy();
|
|
408
|
-
},
|
|
409
|
-
};
|
|
197
|
+
await Promise.all(Array.from(element.children).map(deepReady));
|
|
198
|
+
}
|
|
410
199
|
};
|
|
411
|
-
const
|
|
412
|
-
if (
|
|
413
|
-
|
|
200
|
+
const setPageHidden = (el, hidden) => {
|
|
201
|
+
if (hidden) {
|
|
202
|
+
el.setAttribute('aria-hidden', 'true');
|
|
203
|
+
el.classList.add('ion-page-hidden');
|
|
414
204
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
const currentX = detail.currentX;
|
|
420
|
-
const currentY = detail.currentY;
|
|
421
|
-
const timestamp = (detail.currentTime = now(ev));
|
|
422
|
-
const timeDelta = timestamp - prevT;
|
|
423
|
-
if (timeDelta > 0 && timeDelta < 100) {
|
|
424
|
-
const velocityX = (currentX - prevX) / timeDelta;
|
|
425
|
-
const velocityY = (currentY - prevY) / timeDelta;
|
|
426
|
-
detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3;
|
|
427
|
-
detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3;
|
|
205
|
+
else {
|
|
206
|
+
el.hidden = false;
|
|
207
|
+
el.removeAttribute('aria-hidden');
|
|
208
|
+
el.classList.remove('ion-page-hidden');
|
|
428
209
|
}
|
|
429
|
-
detail.deltaX = currentX - detail.startX;
|
|
430
|
-
detail.deltaY = currentY - detail.startY;
|
|
431
|
-
detail.event = ev;
|
|
432
210
|
};
|
|
433
|
-
const
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
const changedTouches = ev.changedTouches;
|
|
440
|
-
if (changedTouches && changedTouches.length > 0) {
|
|
441
|
-
const touch = changedTouches[0];
|
|
442
|
-
x = touch.clientX;
|
|
443
|
-
y = touch.clientY;
|
|
444
|
-
}
|
|
445
|
-
else if (ev.pageX !== undefined) {
|
|
446
|
-
x = ev.pageX;
|
|
447
|
-
y = ev.pageY;
|
|
448
|
-
}
|
|
211
|
+
const setZIndex = (enteringEl, leavingEl, direction) => {
|
|
212
|
+
if (enteringEl !== undefined) {
|
|
213
|
+
enteringEl.style.zIndex = direction === 'back' ? '99' : '101';
|
|
214
|
+
}
|
|
215
|
+
if (leavingEl !== undefined) {
|
|
216
|
+
leavingEl.style.zIndex = '100';
|
|
449
217
|
}
|
|
450
|
-
detail.currentX = x;
|
|
451
|
-
detail.currentY = y;
|
|
452
218
|
};
|
|
453
|
-
const
|
|
454
|
-
|
|
219
|
+
const getIonPageElement = (element) => {
|
|
220
|
+
if (element.classList.contains('ion-page')) {
|
|
221
|
+
return element;
|
|
222
|
+
}
|
|
223
|
+
const ionPage = element.querySelector(':scope > .ion-page, :scope > ion-nav, :scope > ion-tabs');
|
|
224
|
+
if (ionPage) {
|
|
225
|
+
return ionPage;
|
|
226
|
+
}
|
|
227
|
+
// idk, return the original element so at least something animates and we don't have a null pointer
|
|
228
|
+
return element;
|
|
455
229
|
};
|
|
456
230
|
|
|
457
|
-
export {
|
|
231
|
+
export { LIFECYCLE_WILL_ENTER as L, LIFECYCLE_DID_ENTER as a, LIFECYCLE_WILL_LEAVE as b, LIFECYCLE_DID_LEAVE as c, LIFECYCLE_WILL_UNLOAD as d, deepReady as e, getIonPageElement as g, lifecycle as l, setPageHidden as s, transition as t, waitForMount as w };
|