@ionic/core 7.4.4-nightly.20231006 → 7.4.4-nightly.20231010
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/animation.js +60 -1
- package/components/checkbox.js +3 -0
- package/components/ion-menu.js +51 -19
- package/components/ion-toggle.js +3 -0
- package/components/radio-group.js +1 -1
- package/components/radio.js +4 -1
- package/components/swipe-back.js +5 -1
- package/dist/cjs/{animation-2bb33618.js → animation-c8bdd3c7.js} +60 -1
- package/dist/cjs/{index-97a3eade.js → index-1f1ea05f.js} +1 -1
- package/dist/cjs/{index-acf6bdf0.js → index-fa649bd8.js} +2 -2
- package/dist/cjs/index.cjs.js +5 -5
- package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-app_8.cjs.entry.js +2 -2
- package/dist/cjs/ion-checkbox.cjs.entry.js +3 -0
- package/dist/cjs/ion-datetime_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-loading.cjs.entry.js +1 -1
- package/dist/cjs/ion-menu_3.cjs.entry.js +53 -21
- package/dist/cjs/ion-modal.cjs.entry.js +2 -2
- package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
- package/dist/cjs/ion-popover.cjs.entry.js +2 -2
- package/dist/cjs/ion-radio_2.cjs.entry.js +5 -2
- package/dist/cjs/ion-refresher_2.cjs.entry.js +1 -1
- package/dist/cjs/ion-toast.cjs.entry.js +1 -1
- package/dist/cjs/ion-toggle.cjs.entry.js +3 -0
- package/dist/cjs/{ios.transition-e31445c2.js → ios.transition-4195d10d.js} +2 -2
- package/dist/cjs/{md.transition-fb13ac79.js → md.transition-0713f667.js} +2 -2
- package/dist/cjs/{swipe-back-6c57d1df.js → swipe-back-d0412fb6.js} +5 -1
- package/dist/collection/components/checkbox/checkbox.js +3 -0
- package/dist/collection/components/menu/menu.js +51 -19
- package/dist/collection/components/menu/test/disable/menu.e2e.js +55 -0
- package/dist/collection/components/radio/radio.js +4 -1
- package/dist/collection/components/radio-group/radio-group.js +1 -1
- package/dist/collection/components/toggle/toggle.js +3 -0
- package/dist/collection/utils/animation/animation.js +60 -1
- package/dist/collection/utils/gesture/swipe-back.js +5 -1
- package/dist/docs.json +1 -1
- package/dist/esm/{animation-a1d9e088.js → animation-92066c62.js} +60 -1
- package/dist/esm/{index-32c6828b.js → index-0b0dd67c.js} +2 -2
- package/dist/esm/{index-3d6aefa2.js → index-97a2bb98.js} +1 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/ion-action-sheet.entry.js +1 -1
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-app_8.entry.js +2 -2
- package/dist/esm/ion-checkbox.entry.js +3 -0
- package/dist/esm/ion-datetime_3.entry.js +1 -1
- package/dist/esm/ion-loading.entry.js +1 -1
- package/dist/esm/ion-menu_3.entry.js +53 -21
- package/dist/esm/ion-modal.entry.js +2 -2
- package/dist/esm/ion-nav_2.entry.js +2 -2
- package/dist/esm/ion-popover.entry.js +2 -2
- package/dist/esm/ion-radio_2.entry.js +5 -2
- package/dist/esm/ion-refresher_2.entry.js +1 -1
- package/dist/esm/ion-toast.entry.js +1 -1
- package/dist/esm/ion-toggle.entry.js +3 -0
- package/dist/esm/{ios.transition-d8223b18.js → ios.transition-875ba2ea.js} +2 -2
- package/dist/esm/{md.transition-caed184e.js → md.transition-54c79f72.js} +2 -2
- package/dist/esm/{swipe-back-6d4c0a4e.js → swipe-back-0f3bfc8e.js} +5 -1
- package/dist/esm-es5/animation-92066c62.js +4 -0
- package/dist/esm-es5/{index-32c6828b.js → index-0b0dd67c.js} +1 -1
- package/dist/esm-es5/{index-3d6aefa2.js → index-97a2bb98.js} +1 -1
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-app_8.entry.js +1 -1
- package/dist/esm-es5/ion-checkbox.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-nav_2.entry.js +1 -1
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-radio_2.entry.js +1 -1
- package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ion-toggle.entry.js +1 -1
- package/dist/esm-es5/{ios.transition-d8223b18.js → ios.transition-875ba2ea.js} +1 -1
- package/dist/esm-es5/{md.transition-caed184e.js → md.transition-54c79f72.js} +1 -1
- package/dist/esm-es5/{swipe-back-6d4c0a4e.js → swipe-back-0f3bfc8e.js} +1 -1
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-6d5c54f2.system.entry.js → p-00d3814a.system.entry.js} +1 -1
- package/dist/ionic/p-015187e5.system.js +4 -0
- package/dist/ionic/{p-96ad49f1.entry.js → p-07c816fb.entry.js} +1 -1
- package/dist/ionic/{p-1d2d1ab5.system.entry.js → p-0c7d0167.system.entry.js} +1 -1
- package/dist/ionic/{p-95e44641.system.entry.js → p-0dcdf480.system.entry.js} +1 -1
- package/dist/ionic/{p-8957b1de.system.entry.js → p-0fc8a522.system.entry.js} +1 -1
- package/dist/ionic/{p-57c5eca2.system.js → p-15041a8c.system.js} +1 -1
- package/dist/ionic/{p-30b04d8d.js → p-2062958e.js} +1 -1
- package/dist/ionic/{p-4b23f472.entry.js → p-2134558d.entry.js} +1 -1
- package/dist/ionic/{p-037e2738.system.entry.js → p-2330af92.system.entry.js} +1 -1
- package/dist/ionic/{p-e88ed929.system.entry.js → p-24952f8a.system.entry.js} +1 -1
- package/dist/ionic/{p-1caf1ec6.entry.js → p-32eaa293.entry.js} +1 -1
- package/dist/ionic/{p-fb18f74b.system.entry.js → p-3d278648.system.entry.js} +1 -1
- package/dist/ionic/p-446230d7.js +4 -0
- package/dist/ionic/p-4c274938.entry.js +4 -0
- package/dist/ionic/{p-58565369.system.entry.js → p-52e5f8f0.system.entry.js} +1 -1
- package/dist/ionic/{p-c6f41736.entry.js → p-53d4606a.entry.js} +1 -1
- package/dist/ionic/{p-d580cbb7.system.entry.js → p-63b4ef44.system.entry.js} +1 -1
- package/dist/ionic/{p-7cad90ed.entry.js → p-678f37d7.entry.js} +1 -1
- package/dist/ionic/{p-c381a9a9.system.entry.js → p-7061fa75.system.entry.js} +1 -1
- package/dist/ionic/p-73eba881.system.js +1 -1
- package/dist/ionic/p-775f3749.entry.js +4 -0
- package/dist/ionic/p-77872abc.entry.js +4 -0
- package/dist/ionic/p-77b9d68a.system.entry.js +4 -0
- package/dist/ionic/p-8b33cfef.entry.js +4 -0
- package/dist/ionic/{p-c57cde35.system.js → p-8dbdb163.system.js} +1 -1
- package/dist/ionic/{p-9e727d1d.entry.js → p-979dc719.entry.js} +1 -1
- package/dist/ionic/{p-9d0916cb.system.js → p-9e6bf328.system.js} +1 -1
- package/dist/ionic/{p-e7d69cad.entry.js → p-a1528344.entry.js} +1 -1
- package/dist/ionic/p-a1e2f98c.js +4 -0
- package/dist/ionic/{p-c2d6b2fb.entry.js → p-ab37db48.entry.js} +1 -1
- package/dist/ionic/p-af39c1c5.js +4 -0
- package/dist/ionic/{p-a760fd9a.system.js → p-b7258ddb.system.js} +1 -1
- package/dist/ionic/p-c5395981.js +4 -0
- package/dist/ionic/{p-043e8328.system.js → p-c9524896.system.js} +1 -1
- package/dist/ionic/{p-6db9035a.system.entry.js → p-cd075e75.system.entry.js} +1 -1
- package/dist/ionic/{p-a0e2f6d8.entry.js → p-d055bba9.entry.js} +1 -1
- package/dist/ionic/p-d17638e9.system.js +4 -0
- package/dist/ionic/{p-6b3784a2.system.entry.js → p-df951755.system.entry.js} +1 -1
- package/dist/ionic/p-e627ed84.js +4 -0
- package/dist/ionic/{p-ab7edc16.system.entry.js → p-e92068d4.system.entry.js} +1 -1
- package/dist/ionic/{p-e3272ed8.entry.js → p-eaa58d23.entry.js} +1 -1
- package/dist/types/components/menu/menu.d.ts +8 -1
- package/hydrate/index.js +127 -23
- package/package.json +1 -1
- package/dist/esm-es5/animation-a1d9e088.js +0 -4
- package/dist/ionic/p-1c59608c.system.entry.js +0 -4
- package/dist/ionic/p-469d6a98.entry.js +0 -4
- package/dist/ionic/p-4af11953.entry.js +0 -4
- package/dist/ionic/p-6641d7fa.js +0 -4
- package/dist/ionic/p-68b405cc.entry.js +0 -4
- package/dist/ionic/p-6b2641f6.system.js +0 -4
- package/dist/ionic/p-90ebbca0.entry.js +0 -4
- package/dist/ionic/p-94a4ce40.js +0 -4
- package/dist/ionic/p-9649c54e.js +0 -4
- package/dist/ionic/p-a732cfec.system.js +0 -4
- package/dist/ionic/p-b370d1b4.js +0 -4
- package/dist/ionic/p-df7357c5.js +0 -4
|
@@ -32,7 +32,10 @@ const Radio = class {
|
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
34
|
this.onClick = () => {
|
|
35
|
-
const { radioGroup, checked } = this;
|
|
35
|
+
const { radioGroup, checked, disabled } = this;
|
|
36
|
+
if (disabled) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
36
39
|
/**
|
|
37
40
|
* The legacy control uses a native input inside
|
|
38
41
|
* of the radio host, so we can set this.checked
|
|
@@ -232,7 +235,7 @@ const RadioGroup = class {
|
|
|
232
235
|
* using the `name` attribute.
|
|
233
236
|
*/
|
|
234
237
|
const selectedRadio = ev.target && ev.target.closest('ion-radio');
|
|
235
|
-
if (selectedRadio) {
|
|
238
|
+
if (selectedRadio && selectedRadio.disabled === false) {
|
|
236
239
|
const currentValue = this.value;
|
|
237
240
|
const newValue = selectedRadio.value;
|
|
238
241
|
if (newValue !== currentValue) {
|
|
@@ -11,7 +11,7 @@ const index$1 = require('./index-10873539.js');
|
|
|
11
11
|
const helpers = require('./helpers-ea4ccbcb.js');
|
|
12
12
|
const haptic = require('./haptic-c5f6b4d5.js');
|
|
13
13
|
const ionicGlobal = require('./ionic-global-a71608df.js');
|
|
14
|
-
const animation = require('./animation-
|
|
14
|
+
const animation = require('./animation-c8bdd3c7.js');
|
|
15
15
|
const config = require('./config-d5882735.js');
|
|
16
16
|
const index$2 = require('./index-d8d1fc0b.js');
|
|
17
17
|
const spinnerConfigs = require('./spinner-configs-f7b5105b.js');
|
|
@@ -13,7 +13,7 @@ const index$1 = require('./index-cc7dfb7c.js');
|
|
|
13
13
|
const overlays = require('./overlays-efc9d511.js');
|
|
14
14
|
const theme = require('./theme-fbc56b3b.js');
|
|
15
15
|
const ionicGlobal = require('./ionic-global-a71608df.js');
|
|
16
|
-
const animation = require('./animation-
|
|
16
|
+
const animation = require('./animation-c8bdd3c7.js');
|
|
17
17
|
require('./index-306a7476.js');
|
|
18
18
|
require('./framework-delegate-c0873a6f.js');
|
|
19
19
|
require('./hardware-back-button-b67c8e75.js');
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
const animation = require('./animation-
|
|
7
|
-
const index = require('./index-
|
|
6
|
+
const animation = require('./animation-c8bdd3c7.js');
|
|
7
|
+
const index = require('./index-fa649bd8.js');
|
|
8
8
|
require('./index-306a7476.js');
|
|
9
9
|
require('./helpers-ea4ccbcb.js');
|
|
10
10
|
require('./index-14a4821e.js');
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
const animation = require('./animation-
|
|
7
|
-
const index = require('./index-
|
|
6
|
+
const animation = require('./animation-c8bdd3c7.js');
|
|
7
|
+
const index = require('./index-fa649bd8.js');
|
|
8
8
|
require('./index-306a7476.js');
|
|
9
9
|
require('./helpers-ea4ccbcb.js');
|
|
10
10
|
require('./index-14a4821e.js');
|
|
@@ -65,7 +65,11 @@ const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMoveHandl
|
|
|
65
65
|
return index.createGesture({
|
|
66
66
|
el,
|
|
67
67
|
gestureName: 'goback-swipe',
|
|
68
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Swipe to go back should have priority over other horizontal swipe
|
|
70
|
+
* gestures. These gestures have a priority of 100 which is why 101 was chosen here.
|
|
71
|
+
*/
|
|
72
|
+
gesturePriority: 101,
|
|
69
73
|
threshold: 10,
|
|
70
74
|
canStart,
|
|
71
75
|
onStart: onStartHandler,
|
|
@@ -24,6 +24,14 @@ export class Menu {
|
|
|
24
24
|
this.lastOnEnd = 0;
|
|
25
25
|
this.blocker = GESTURE_CONTROLLER.createBlocker({ disableScroll: true });
|
|
26
26
|
this.didLoad = false;
|
|
27
|
+
/**
|
|
28
|
+
* Flag used to determine if an open/close
|
|
29
|
+
* operation was cancelled. For example, if
|
|
30
|
+
* an app calls "menu.open" then disables the menu
|
|
31
|
+
* part way through the animation, then this would
|
|
32
|
+
* be considered a cancelled operation.
|
|
33
|
+
*/
|
|
34
|
+
this.operationCancelled = false;
|
|
27
35
|
this.isAnimating = false;
|
|
28
36
|
this._isOpen = false;
|
|
29
37
|
this.inheritedAttributes = {};
|
|
@@ -292,6 +300,15 @@ export class Menu {
|
|
|
292
300
|
this.beforeAnimation(shouldOpen);
|
|
293
301
|
await this.loadAnimation();
|
|
294
302
|
await this.startAnimation(shouldOpen, animated);
|
|
303
|
+
/**
|
|
304
|
+
* If the animation was cancelled then
|
|
305
|
+
* return false because the operation
|
|
306
|
+
* did not succeed.
|
|
307
|
+
*/
|
|
308
|
+
if (this.operationCancelled) {
|
|
309
|
+
this.operationCancelled = false;
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
295
312
|
this.afterAnimation(shouldOpen);
|
|
296
313
|
return true;
|
|
297
314
|
}
|
|
@@ -328,18 +345,23 @@ export class Menu {
|
|
|
328
345
|
const easingReverse = mode === 'ios' ? iosEasingReverse : mdEasingReverse;
|
|
329
346
|
const ani = this.animation
|
|
330
347
|
.direction(isReversed ? 'reverse' : 'normal')
|
|
331
|
-
.easing(isReversed ? easingReverse : easing)
|
|
332
|
-
.onFinish(() => {
|
|
333
|
-
if (ani.getDirection() === 'reverse') {
|
|
334
|
-
ani.direction('normal');
|
|
335
|
-
}
|
|
336
|
-
});
|
|
348
|
+
.easing(isReversed ? easingReverse : easing);
|
|
337
349
|
if (animated) {
|
|
338
350
|
await ani.play();
|
|
339
351
|
}
|
|
340
352
|
else {
|
|
341
353
|
ani.play({ sync: true });
|
|
342
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* We run this after the play invocation
|
|
357
|
+
* instead of using ani.onFinish so that
|
|
358
|
+
* multiple onFinish callbacks do not get
|
|
359
|
+
* run if an animation is played, stopped,
|
|
360
|
+
* and then played again.
|
|
361
|
+
*/
|
|
362
|
+
if (ani.getDirection() === 'reverse') {
|
|
363
|
+
ani.direction('normal');
|
|
364
|
+
}
|
|
343
365
|
}
|
|
344
366
|
_isActive() {
|
|
345
367
|
return !this.disabled && !this.isPaneVisible;
|
|
@@ -476,7 +498,6 @@ export class Menu {
|
|
|
476
498
|
}
|
|
477
499
|
afterAnimation(isOpen) {
|
|
478
500
|
var _a;
|
|
479
|
-
assert(this.isAnimating, '_before() should be called while animating');
|
|
480
501
|
// keep opening/closing the menu disabled for a touch more yet
|
|
481
502
|
// only add listeners/css if it's enabled and isOpen
|
|
482
503
|
// and only remove listeners/css if it's not open
|
|
@@ -535,10 +556,29 @@ export class Menu {
|
|
|
535
556
|
if (this.gesture) {
|
|
536
557
|
this.gesture.enable(isActive && this.swipeGesture);
|
|
537
558
|
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
559
|
+
/**
|
|
560
|
+
* If the menu is disabled but it is still open
|
|
561
|
+
* then we should close the menu immediately.
|
|
562
|
+
* Additionally, if the menu is in the process
|
|
563
|
+
* of animating {open, close} and the menu is disabled
|
|
564
|
+
* then it should still be closed immediately.
|
|
565
|
+
*/
|
|
566
|
+
if (!isActive) {
|
|
567
|
+
/**
|
|
568
|
+
* It is possible to disable the menu while
|
|
569
|
+
* it is mid-animation. When this happens, we
|
|
570
|
+
* need to set the operationCancelled flag
|
|
571
|
+
* so that this._setOpen knows to return false
|
|
572
|
+
* and not run the "afterAnimation" callback.
|
|
573
|
+
*/
|
|
574
|
+
if (this.isAnimating) {
|
|
575
|
+
this.operationCancelled = true;
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* If the menu is disabled then we should
|
|
579
|
+
* forcibly close the menu even if it is open.
|
|
580
|
+
*/
|
|
581
|
+
this.afterAnimation(false);
|
|
542
582
|
}
|
|
543
583
|
if (doc === null || doc === void 0 ? void 0 : doc.contains(this.el)) {
|
|
544
584
|
/**
|
|
@@ -551,14 +591,6 @@ export class Menu {
|
|
|
551
591
|
menuController._setActiveMenu(this);
|
|
552
592
|
}
|
|
553
593
|
}
|
|
554
|
-
assert(!this.isAnimating, 'can not be animating');
|
|
555
|
-
}
|
|
556
|
-
forceClosing() {
|
|
557
|
-
assert(this._isOpen, 'menu cannot be closed');
|
|
558
|
-
this.isAnimating = true;
|
|
559
|
-
const ani = this.animation.direction('reverse');
|
|
560
|
-
ani.play({ sync: true });
|
|
561
|
-
this.afterAnimation(false);
|
|
562
594
|
}
|
|
563
595
|
render() {
|
|
564
596
|
const { type, disabled, isPaneVisible, inheritedAttributes, side } = this;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
+
*/
|
|
4
|
+
import { expect } from "@playwright/test";
|
|
5
|
+
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
+
/**
|
|
7
|
+
* This behavior does not vary across modes/directions
|
|
8
|
+
*/
|
|
9
|
+
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
10
|
+
test.describe(title('menu: disable'), () => {
|
|
11
|
+
test.beforeEach(async ({ page }) => {
|
|
12
|
+
await page.goto(`/src/components/menu/test/disable`, config);
|
|
13
|
+
});
|
|
14
|
+
test('should disable when menu is fully open', async ({ page }) => {
|
|
15
|
+
const logs = [];
|
|
16
|
+
page.on('console', (msg) => {
|
|
17
|
+
if (msg.type() === 'error') {
|
|
18
|
+
logs.push(msg.text());
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const menu = page.locator('ion-menu');
|
|
22
|
+
// Should be visible on initial presentation
|
|
23
|
+
await menu.evaluate((el) => el.open());
|
|
24
|
+
await expect(menu).toBeVisible();
|
|
25
|
+
// Disabling menu should hide it
|
|
26
|
+
await menu.evaluate((el) => (el.disabled = true));
|
|
27
|
+
await expect(menu).toBeHidden();
|
|
28
|
+
// Re-enabling menu and opening it show make it visible
|
|
29
|
+
await menu.evaluate((el) => (el.disabled = false));
|
|
30
|
+
await menu.evaluate((el) => el.open());
|
|
31
|
+
await expect(menu).toBeVisible();
|
|
32
|
+
expect(logs.length).toBe(0);
|
|
33
|
+
});
|
|
34
|
+
test('should disable when menu is animating', async ({ page }) => {
|
|
35
|
+
const logs = [];
|
|
36
|
+
page.on('console', (msg) => {
|
|
37
|
+
if (msg.type() === 'error') {
|
|
38
|
+
logs.push(msg.text());
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
const menu = page.locator('ion-menu');
|
|
42
|
+
// Opening and quickly disabling menu should hide it
|
|
43
|
+
menu.evaluate((el) => {
|
|
44
|
+
el.open();
|
|
45
|
+
setTimeout(() => (el.disabled = true), 0);
|
|
46
|
+
});
|
|
47
|
+
await expect(menu).toBeHidden();
|
|
48
|
+
// Re-enabling menu and opening it show make it visible
|
|
49
|
+
await menu.evaluate((el) => (el.disabled = false));
|
|
50
|
+
await menu.evaluate((el) => el.open());
|
|
51
|
+
await expect(menu).toBeVisible();
|
|
52
|
+
expect(logs.length).toBe(0);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
@@ -27,7 +27,10 @@ export class Radio {
|
|
|
27
27
|
}
|
|
28
28
|
};
|
|
29
29
|
this.onClick = () => {
|
|
30
|
-
const { radioGroup, checked } = this;
|
|
30
|
+
const { radioGroup, checked, disabled } = this;
|
|
31
|
+
if (disabled) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
31
34
|
/**
|
|
32
35
|
* The legacy control uses a native input inside
|
|
33
36
|
* of the radio host, so we can set this.checked
|
|
@@ -33,7 +33,7 @@ export class RadioGroup {
|
|
|
33
33
|
* using the `name` attribute.
|
|
34
34
|
*/
|
|
35
35
|
const selectedRadio = ev.target && ev.target.closest('ion-radio');
|
|
36
|
-
if (selectedRadio) {
|
|
36
|
+
if (selectedRadio && selectedRadio.disabled === false) {
|
|
37
37
|
const currentValue = this.value;
|
|
38
38
|
const newValue = selectedRadio.value;
|
|
39
39
|
if (newValue !== currentValue) {
|
|
@@ -36,6 +36,7 @@ export const createAnimation = (animationId) => {
|
|
|
36
36
|
const id = animationId;
|
|
37
37
|
const onFinishCallbacks = [];
|
|
38
38
|
const onFinishOneTimeCallbacks = [];
|
|
39
|
+
const onStopOneTimeCallbacks = [];
|
|
39
40
|
const elements = [];
|
|
40
41
|
const childAnimations = [];
|
|
41
42
|
const stylesheets = [];
|
|
@@ -93,6 +94,28 @@ export const createAnimation = (animationId) => {
|
|
|
93
94
|
const isRunning = () => {
|
|
94
95
|
return numAnimationsRunning !== 0 && !paused;
|
|
95
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* @internal
|
|
99
|
+
* Remove a callback from a chosen callback array
|
|
100
|
+
* @param callbackToRemove: A reference to the callback that should be removed
|
|
101
|
+
* @param callbackObjects: An array of callbacks that callbackToRemove should be removed from.
|
|
102
|
+
*/
|
|
103
|
+
const clearCallback = (callbackToRemove, callbackObjects) => {
|
|
104
|
+
const index = callbackObjects.findIndex((callbackObject) => callbackObject.c === callbackToRemove);
|
|
105
|
+
if (index > -1) {
|
|
106
|
+
callbackObjects.splice(index, 1);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* @internal
|
|
111
|
+
* Add a callback to be fired when an animation is stopped/cancelled.
|
|
112
|
+
* @param callback: A reference to the callback that should be fired
|
|
113
|
+
* @param opts: Any options associated with this particular callback
|
|
114
|
+
*/
|
|
115
|
+
const onStop = (callback, opts) => {
|
|
116
|
+
onStopOneTimeCallbacks.push({ c: callback, o: opts });
|
|
117
|
+
return ani;
|
|
118
|
+
};
|
|
96
119
|
const onFinish = (callback, opts) => {
|
|
97
120
|
const callbacks = (opts === null || opts === void 0 ? void 0 : opts.oneTimeCallback) ? onFinishOneTimeCallbacks : onFinishCallbacks;
|
|
98
121
|
callbacks.push({ c: callback, o: opts });
|
|
@@ -761,7 +784,33 @@ export const createAnimation = (animationId) => {
|
|
|
761
784
|
numAnimationsRunning = childAnimations.length + 1;
|
|
762
785
|
shouldCalculateNumAnimations = false;
|
|
763
786
|
}
|
|
764
|
-
|
|
787
|
+
/**
|
|
788
|
+
* When one of these callbacks fires we
|
|
789
|
+
* need to clear the other's callback otherwise
|
|
790
|
+
* you can potentially get these callbacks
|
|
791
|
+
* firing multiple times if the play method
|
|
792
|
+
* is subsequently called.
|
|
793
|
+
* Example:
|
|
794
|
+
* animation.play() (onStop and onFinish callbacks are registered)
|
|
795
|
+
* animation.stop() (onStop callback is fired, onFinish is not)
|
|
796
|
+
* animation.play() (onStop and onFinish callbacks are registered)
|
|
797
|
+
* Total onStop callbacks: 1
|
|
798
|
+
* Total onFinish callbacks: 2
|
|
799
|
+
*/
|
|
800
|
+
const onStopCallback = () => {
|
|
801
|
+
clearCallback(onFinishCallback, onFinishOneTimeCallbacks);
|
|
802
|
+
resolve();
|
|
803
|
+
};
|
|
804
|
+
const onFinishCallback = () => {
|
|
805
|
+
clearCallback(onStopCallback, onStopOneTimeCallbacks);
|
|
806
|
+
resolve();
|
|
807
|
+
};
|
|
808
|
+
/**
|
|
809
|
+
* The play method resolves when an animation
|
|
810
|
+
* run either finishes or is cancelled.
|
|
811
|
+
*/
|
|
812
|
+
onFinish(onFinishCallback, { oneTimeCallback: true });
|
|
813
|
+
onStop(onStopCallback, { oneTimeCallback: true });
|
|
765
814
|
childAnimations.forEach((animation) => {
|
|
766
815
|
animation.play();
|
|
767
816
|
});
|
|
@@ -774,6 +823,14 @@ export const createAnimation = (animationId) => {
|
|
|
774
823
|
paused = false;
|
|
775
824
|
});
|
|
776
825
|
};
|
|
826
|
+
/**
|
|
827
|
+
* Stops an animation and resets it state to the
|
|
828
|
+
* beginning. This does not fire any onFinish
|
|
829
|
+
* callbacks because the animation did not finish.
|
|
830
|
+
* However, since the animation was not destroyed
|
|
831
|
+
* (i.e. the animation could run again) we do not
|
|
832
|
+
* clear the onFinish callbacks.
|
|
833
|
+
*/
|
|
777
834
|
const stop = () => {
|
|
778
835
|
childAnimations.forEach((animation) => {
|
|
779
836
|
animation.stop();
|
|
@@ -783,6 +840,8 @@ export const createAnimation = (animationId) => {
|
|
|
783
840
|
initialized = false;
|
|
784
841
|
}
|
|
785
842
|
resetFlags();
|
|
843
|
+
onStopOneTimeCallbacks.forEach((onStopCallback) => onStopCallback.c(0, ani));
|
|
844
|
+
onStopOneTimeCallbacks.length = 0;
|
|
786
845
|
};
|
|
787
846
|
const from = (property, value) => {
|
|
788
847
|
const firstFrame = _keyframes[0];
|
|
@@ -61,7 +61,11 @@ export const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMo
|
|
|
61
61
|
return createGesture({
|
|
62
62
|
el,
|
|
63
63
|
gestureName: 'goback-swipe',
|
|
64
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Swipe to go back should have priority over other horizontal swipe
|
|
66
|
+
* gestures. These gestures have a priority of 100 which is why 101 was chosen here.
|
|
67
|
+
*/
|
|
68
|
+
gesturePriority: 101,
|
|
65
69
|
threshold: 10,
|
|
66
70
|
canStart,
|
|
67
71
|
onStart: onStartHandler,
|
package/dist/docs.json
CHANGED
|
@@ -159,6 +159,7 @@ const createAnimation = (animationId) => {
|
|
|
159
159
|
const id = animationId;
|
|
160
160
|
const onFinishCallbacks = [];
|
|
161
161
|
const onFinishOneTimeCallbacks = [];
|
|
162
|
+
const onStopOneTimeCallbacks = [];
|
|
162
163
|
const elements = [];
|
|
163
164
|
const childAnimations = [];
|
|
164
165
|
const stylesheets = [];
|
|
@@ -216,6 +217,28 @@ const createAnimation = (animationId) => {
|
|
|
216
217
|
const isRunning = () => {
|
|
217
218
|
return numAnimationsRunning !== 0 && !paused;
|
|
218
219
|
};
|
|
220
|
+
/**
|
|
221
|
+
* @internal
|
|
222
|
+
* Remove a callback from a chosen callback array
|
|
223
|
+
* @param callbackToRemove: A reference to the callback that should be removed
|
|
224
|
+
* @param callbackObjects: An array of callbacks that callbackToRemove should be removed from.
|
|
225
|
+
*/
|
|
226
|
+
const clearCallback = (callbackToRemove, callbackObjects) => {
|
|
227
|
+
const index = callbackObjects.findIndex((callbackObject) => callbackObject.c === callbackToRemove);
|
|
228
|
+
if (index > -1) {
|
|
229
|
+
callbackObjects.splice(index, 1);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* @internal
|
|
234
|
+
* Add a callback to be fired when an animation is stopped/cancelled.
|
|
235
|
+
* @param callback: A reference to the callback that should be fired
|
|
236
|
+
* @param opts: Any options associated with this particular callback
|
|
237
|
+
*/
|
|
238
|
+
const onStop = (callback, opts) => {
|
|
239
|
+
onStopOneTimeCallbacks.push({ c: callback, o: opts });
|
|
240
|
+
return ani;
|
|
241
|
+
};
|
|
219
242
|
const onFinish = (callback, opts) => {
|
|
220
243
|
const callbacks = (opts === null || opts === void 0 ? void 0 : opts.oneTimeCallback) ? onFinishOneTimeCallbacks : onFinishCallbacks;
|
|
221
244
|
callbacks.push({ c: callback, o: opts });
|
|
@@ -884,7 +907,33 @@ const createAnimation = (animationId) => {
|
|
|
884
907
|
numAnimationsRunning = childAnimations.length + 1;
|
|
885
908
|
shouldCalculateNumAnimations = false;
|
|
886
909
|
}
|
|
887
|
-
|
|
910
|
+
/**
|
|
911
|
+
* When one of these callbacks fires we
|
|
912
|
+
* need to clear the other's callback otherwise
|
|
913
|
+
* you can potentially get these callbacks
|
|
914
|
+
* firing multiple times if the play method
|
|
915
|
+
* is subsequently called.
|
|
916
|
+
* Example:
|
|
917
|
+
* animation.play() (onStop and onFinish callbacks are registered)
|
|
918
|
+
* animation.stop() (onStop callback is fired, onFinish is not)
|
|
919
|
+
* animation.play() (onStop and onFinish callbacks are registered)
|
|
920
|
+
* Total onStop callbacks: 1
|
|
921
|
+
* Total onFinish callbacks: 2
|
|
922
|
+
*/
|
|
923
|
+
const onStopCallback = () => {
|
|
924
|
+
clearCallback(onFinishCallback, onFinishOneTimeCallbacks);
|
|
925
|
+
resolve();
|
|
926
|
+
};
|
|
927
|
+
const onFinishCallback = () => {
|
|
928
|
+
clearCallback(onStopCallback, onStopOneTimeCallbacks);
|
|
929
|
+
resolve();
|
|
930
|
+
};
|
|
931
|
+
/**
|
|
932
|
+
* The play method resolves when an animation
|
|
933
|
+
* run either finishes or is cancelled.
|
|
934
|
+
*/
|
|
935
|
+
onFinish(onFinishCallback, { oneTimeCallback: true });
|
|
936
|
+
onStop(onStopCallback, { oneTimeCallback: true });
|
|
888
937
|
childAnimations.forEach((animation) => {
|
|
889
938
|
animation.play();
|
|
890
939
|
});
|
|
@@ -897,6 +946,14 @@ const createAnimation = (animationId) => {
|
|
|
897
946
|
paused = false;
|
|
898
947
|
});
|
|
899
948
|
};
|
|
949
|
+
/**
|
|
950
|
+
* Stops an animation and resets it state to the
|
|
951
|
+
* beginning. This does not fire any onFinish
|
|
952
|
+
* callbacks because the animation did not finish.
|
|
953
|
+
* However, since the animation was not destroyed
|
|
954
|
+
* (i.e. the animation could run again) we do not
|
|
955
|
+
* clear the onFinish callbacks.
|
|
956
|
+
*/
|
|
900
957
|
const stop = () => {
|
|
901
958
|
childAnimations.forEach((animation) => {
|
|
902
959
|
animation.stop();
|
|
@@ -906,6 +963,8 @@ const createAnimation = (animationId) => {
|
|
|
906
963
|
initialized = false;
|
|
907
964
|
}
|
|
908
965
|
resetFlags();
|
|
966
|
+
onStopOneTimeCallbacks.forEach((onStopCallback) => onStopCallback.c(0, ani));
|
|
967
|
+
onStopOneTimeCallbacks.length = 0;
|
|
909
968
|
};
|
|
910
969
|
const from = (property, value) => {
|
|
911
970
|
const firstFrame = _keyframes[0];
|
|
@@ -10,8 +10,8 @@ const LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';
|
|
|
10
10
|
const LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';
|
|
11
11
|
const LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';
|
|
12
12
|
|
|
13
|
-
const iosTransitionAnimation = () => import('./ios.transition-
|
|
14
|
-
const mdTransitionAnimation = () => import('./md.transition-
|
|
13
|
+
const iosTransitionAnimation = () => import('./ios.transition-875ba2ea.js');
|
|
14
|
+
const mdTransitionAnimation = () => import('./md.transition-54c79f72.js');
|
|
15
15
|
// TODO(FW-2832): types
|
|
16
16
|
const transition = (opts) => {
|
|
17
17
|
return new Promise((resolve, reject) => {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-39299f84.js';
|
|
5
5
|
import { c as componentOnReady } from './helpers-3379ba19.js';
|
|
6
6
|
import { b as getIonMode } from './ionic-global-63a8d8c9.js';
|
|
7
|
-
import { c as createAnimation } from './animation-
|
|
7
|
+
import { c as createAnimation } from './animation-92066c62.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* baseAnimation
|
package/dist/esm/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
3
|
*/
|
|
4
|
-
export { c as createAnimation } from './animation-
|
|
5
|
-
export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-
|
|
6
|
-
export { iosTransitionAnimation } from './ios.transition-
|
|
7
|
-
export { mdTransitionAnimation } from './md.transition-
|
|
4
|
+
export { c as createAnimation } from './animation-92066c62.js';
|
|
5
|
+
export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-0b0dd67c.js';
|
|
6
|
+
export { iosTransitionAnimation } from './ios.transition-875ba2ea.js';
|
|
7
|
+
export { mdTransitionAnimation } from './md.transition-54c79f72.js';
|
|
8
8
|
export { g as getTimeGivenProgression } from './cubic-bezier-66542bc5.js';
|
|
9
9
|
export { createGesture } from './index-ff313b19.js';
|
|
10
10
|
export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-global-63a8d8c9.js';
|
|
11
11
|
export { c as componentOnReady } from './helpers-3379ba19.js';
|
|
12
12
|
export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-96c9ace3.js';
|
|
13
|
-
export { m as menuController } from './index-
|
|
13
|
+
export { m as menuController } from './index-97a2bb98.js';
|
|
14
14
|
export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-84621c0a.js';
|
|
15
15
|
import './index-7a14ecec.js';
|
|
16
16
|
import './index-cb894020.js';
|
|
@@ -8,7 +8,7 @@ import { c as createLockController } from './lock-controller-e8c6c051.js';
|
|
|
8
8
|
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-84621c0a.js';
|
|
9
9
|
import { g as getClassMap } from './theme-17531cdf.js';
|
|
10
10
|
import { b as getIonMode } from './ionic-global-63a8d8c9.js';
|
|
11
|
-
import { c as createAnimation } from './animation-
|
|
11
|
+
import { c as createAnimation } from './animation-92066c62.js';
|
|
12
12
|
import './haptic-6447af60.js';
|
|
13
13
|
import './capacitor-b4979570.js';
|
|
14
14
|
import './index-7a14ecec.js';
|
|
@@ -9,7 +9,7 @@ import { c as createLockController } from './lock-controller-e8c6c051.js';
|
|
|
9
9
|
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-84621c0a.js';
|
|
10
10
|
import { g as getClassMap } from './theme-17531cdf.js';
|
|
11
11
|
import { c as config, b as getIonMode } from './ionic-global-63a8d8c9.js';
|
|
12
|
-
import { c as createAnimation } from './animation-
|
|
12
|
+
import { c as createAnimation } from './animation-92066c62.js';
|
|
13
13
|
import './haptic-6447af60.js';
|
|
14
14
|
import './capacitor-b4979570.js';
|
|
15
15
|
import './index-7a14ecec.js';
|
|
@@ -11,7 +11,7 @@ import { c as createKeyboardController } from './keyboard-controller-0c2dce71.js
|
|
|
11
11
|
import { g as getTimeGivenProgression } from './cubic-bezier-66542bc5.js';
|
|
12
12
|
import { a as attachComponent, d as detachComponent } from './framework-delegate-aa433dea.js';
|
|
13
13
|
import { c as createLockController } from './lock-controller-e8c6c051.js';
|
|
14
|
-
import { t as transition } from './index-
|
|
14
|
+
import { t as transition } from './index-0b0dd67c.js';
|
|
15
15
|
import './index-595d62c9.js';
|
|
16
16
|
import './index-7a14ecec.js';
|
|
17
17
|
import './keyboard-b063f012.js';
|
|
@@ -1010,7 +1010,7 @@ const RouterOutlet = class {
|
|
|
1010
1010
|
this.swipeHandler.onStart();
|
|
1011
1011
|
}
|
|
1012
1012
|
};
|
|
1013
|
-
this.gesture = (await import('./swipe-back-
|
|
1013
|
+
this.gesture = (await import('./swipe-back-0f3bfc8e.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), (step) => { var _a; return (_a = this.ani) === null || _a === void 0 ? void 0 : _a.progressStep(step); }, (shouldComplete, step, dur) => {
|
|
1014
1014
|
if (this.ani) {
|
|
1015
1015
|
this.ani.onFinish(() => {
|
|
1016
1016
|
this.gestureOrAnimationInProgress = false;
|
|
@@ -12,7 +12,7 @@ import { b as getIonMode } from './ionic-global-63a8d8c9.js';
|
|
|
12
12
|
import { g as generateDayAriaLabel, a as getDay, i as isBefore, b as isAfter, c as isSameDay, d as getPreviousMonth, e as getNextMonth, v as validateParts, f as getPartsFromCalendarDay, h as getEndOfWeek, j as getStartOfWeek, k as getPreviousDay, l as getNextDay, m as getPreviousWeek, n as getNextWeek, p as parseMinParts, o as parseMaxParts, q as parseDate, w as warnIfValueOutOfBounds, r as convertToArrayOfNumbers, s as convertDataToISO, t as getToday, u as getClosestValidDate, x as getNumDaysInMonth, y as getCombinedDateColumnData, z as getMonthColumnData, A as getDayColumnData, B as getYearColumnData, C as isMonthFirstLocale, D as getTimeColumnsData, E as isLocaleDayPeriodRTL, F as getDaysOfWeek, G as getMonthAndYear, H as getDaysOfMonth, I as generateMonths, J as is24Hour, K as getLocalizedTime, L as getMonthAndDay, M as formatValue, N as getNextYear, O as getPreviousYear, P as clampDate, Q as parseAmPm, R as calculateHourFromAMPM } from './data-009dbf15.js';
|
|
13
13
|
import { c as createLockController } from './lock-controller-e8c6c051.js';
|
|
14
14
|
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-84621c0a.js';
|
|
15
|
-
import { c as createAnimation } from './animation-
|
|
15
|
+
import { c as createAnimation } from './animation-92066c62.js';
|
|
16
16
|
import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-6447af60.js';
|
|
17
17
|
import './index-7a14ecec.js';
|
|
18
18
|
import './framework-delegate-aa433dea.js';
|
|
@@ -8,7 +8,7 @@ import { c as createLockController } from './lock-controller-e8c6c051.js';
|
|
|
8
8
|
import { d as createDelegateController, e as createTriggerController, B as BACKDROP, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod } from './overlays-84621c0a.js';
|
|
9
9
|
import { g as getClassMap } from './theme-17531cdf.js';
|
|
10
10
|
import { c as config, b as getIonMode } from './ionic-global-63a8d8c9.js';
|
|
11
|
-
import { c as createAnimation } from './animation-
|
|
11
|
+
import { c as createAnimation } from './animation-92066c62.js';
|
|
12
12
|
import './index-7a14ecec.js';
|
|
13
13
|
import './framework-delegate-aa433dea.js';
|
|
14
14
|
import './hardware-back-button-39299f84.js';
|