@angular/material 14.0.0-next.3 → 14.0.0-next.4
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/button-toggle/_button-toggle-theme.scss +4 -2
- package/chips/chip-list.d.ts +12 -2
- package/core/common-behaviors/error-state.d.ts +1 -2
- package/core/ripple/ripple-ref.d.ts +2 -1
- package/core/ripple/ripple-renderer.d.ts +9 -2
- package/datepicker/date-range-input-parts.d.ts +4 -1
- package/esm2020/autocomplete/autocomplete-trigger.mjs +8 -3
- package/esm2020/button-toggle/button-toggle.mjs +2 -2
- package/esm2020/checkbox/checkbox.mjs +4 -2
- package/esm2020/chips/chip-list.mjs +12 -2
- package/esm2020/core/common-behaviors/error-state.mjs +1 -8
- package/esm2020/core/ripple/ripple-ref.mjs +5 -2
- package/esm2020/core/ripple/ripple-renderer.mjs +72 -37
- package/esm2020/core/version.mjs +1 -1
- package/esm2020/datepicker/date-range-input-parts.mjs +1 -1
- package/esm2020/form-field/form-field.mjs +14 -9
- package/esm2020/input/input.mjs +13 -3
- package/esm2020/radio/radio.mjs +3 -3
- package/esm2020/select/select.mjs +16 -4
- package/esm2020/sidenav/drawer.mjs +3 -3
- package/esm2020/sidenav/sidenav.mjs +3 -3
- package/esm2020/sort/sort-header.mjs +14 -6
- package/esm2020/sort/sort.mjs +1 -1
- package/esm2020/stepper/stepper-module.mjs +3 -7
- package/esm2020/stepper/stepper.mjs +8 -58
- package/esm2020/tabs/tab-header.mjs +3 -3
- package/fesm2015/autocomplete.mjs +7 -2
- package/fesm2015/autocomplete.mjs.map +1 -1
- package/fesm2015/button-toggle.mjs +2 -2
- package/fesm2015/checkbox.mjs +3 -1
- package/fesm2015/checkbox.mjs.map +1 -1
- package/fesm2015/chips.mjs +11 -1
- package/fesm2015/chips.mjs.map +1 -1
- package/fesm2015/core.mjs +77 -45
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/datepicker.mjs.map +1 -1
- package/fesm2015/form-field.mjs +14 -8
- package/fesm2015/form-field.mjs.map +1 -1
- package/fesm2015/input.mjs +12 -2
- package/fesm2015/input.mjs.map +1 -1
- package/fesm2015/radio.mjs +2 -2
- package/fesm2015/radio.mjs.map +1 -1
- package/fesm2015/select.mjs +15 -3
- package/fesm2015/select.mjs.map +1 -1
- package/fesm2015/sidenav.mjs +4 -4
- package/fesm2015/sidenav.mjs.map +1 -1
- package/fesm2015/sort.mjs +119 -111
- package/fesm2015/sort.mjs.map +1 -1
- package/fesm2015/stepper.mjs +9 -62
- package/fesm2015/stepper.mjs.map +1 -1
- package/fesm2015/tabs.mjs +2 -2
- package/fesm2015/tabs.mjs.map +1 -1
- package/fesm2020/autocomplete.mjs +7 -2
- package/fesm2020/autocomplete.mjs.map +1 -1
- package/fesm2020/button-toggle.mjs +2 -2
- package/fesm2020/checkbox.mjs +3 -1
- package/fesm2020/checkbox.mjs.map +1 -1
- package/fesm2020/chips.mjs +11 -1
- package/fesm2020/chips.mjs.map +1 -1
- package/fesm2020/core.mjs +77 -45
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/datepicker.mjs.map +1 -1
- package/fesm2020/form-field.mjs +13 -8
- package/fesm2020/form-field.mjs.map +1 -1
- package/fesm2020/input.mjs +12 -2
- package/fesm2020/input.mjs.map +1 -1
- package/fesm2020/radio.mjs +2 -2
- package/fesm2020/radio.mjs.map +1 -1
- package/fesm2020/select.mjs +15 -3
- package/fesm2020/select.mjs.map +1 -1
- package/fesm2020/sidenav.mjs +4 -4
- package/fesm2020/sidenav.mjs.map +1 -1
- package/fesm2020/sort.mjs +12 -4
- package/fesm2020/sort.mjs.map +1 -1
- package/fesm2020/stepper.mjs +9 -62
- package/fesm2020/stepper.mjs.map +1 -1
- package/fesm2020/tabs.mjs +2 -2
- package/fesm2020/tabs.mjs.map +1 -1
- package/form-field/form-field.d.ts +9 -5
- package/input/input.d.ts +11 -1
- package/package.json +2 -2
- package/prebuilt-themes/deeppurple-amber.css +1 -1
- package/prebuilt-themes/indigo-pink.css +1 -1
- package/prebuilt-themes/pink-bluegrey.css +1 -1
- package/prebuilt-themes/purple-green.css +1 -1
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-update/data/constructor-checks.js +5 -1
- package/schematics/ng-update/data/constructor-checks.mjs +5 -1
- package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.js +4 -4
- package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.mjs +4 -4
- package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.js +13 -13
- package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.mjs +13 -13
- package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.js +2 -13
- package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.mjs +2 -13
- package/select/select.d.ts +11 -0
- package/sort/sort-header.d.ts +4 -4
- package/sort/sort.d.ts +4 -0
- package/stepper/stepper-module.d.ts +1 -1
- package/stepper/stepper.d.ts +2 -35
package/fesm2020/core.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { DOCUMENT, CommonModule } from '@angular/common';
|
|
|
9
9
|
import * as i1$1 from '@angular/cdk/platform';
|
|
10
10
|
import { _isTestEnvironment, normalizePassiveListenerOptions } from '@angular/cdk/platform';
|
|
11
11
|
import { coerceBooleanProperty, coerceNumberProperty, coerceElement } from '@angular/cdk/coercion';
|
|
12
|
-
import {
|
|
12
|
+
import { Observable, Subject } from 'rxjs';
|
|
13
13
|
import { startWith } from 'rxjs/operators';
|
|
14
14
|
import { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';
|
|
15
15
|
import { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';
|
|
@@ -22,7 +22,7 @@ import { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';
|
|
|
22
22
|
* found in the LICENSE file at https://angular.io/license
|
|
23
23
|
*/
|
|
24
24
|
/** Current version of Angular Material. */
|
|
25
|
-
const VERSION = new Version('14.0.0-next.
|
|
25
|
+
const VERSION = new Version('14.0.0-next.4');
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* @license
|
|
@@ -274,12 +274,6 @@ function mixinErrorState(base) {
|
|
|
274
274
|
return class extends base {
|
|
275
275
|
constructor(...args) {
|
|
276
276
|
super(...args);
|
|
277
|
-
// This class member exists as an interop with `MatFormFieldControl` which expects
|
|
278
|
-
// a public `stateChanges` observable to emit whenever the form field should be updated.
|
|
279
|
-
// The description is not specifically mentioning the error state, as classes using this
|
|
280
|
-
// mixin can/should emit an event in other cases too.
|
|
281
|
-
/** Emits whenever the component state changes. */
|
|
282
|
-
this.stateChanges = new Subject();
|
|
283
277
|
/** Whether the component is in an error state. */
|
|
284
278
|
this.errorState = false;
|
|
285
279
|
}
|
|
@@ -848,10 +842,13 @@ class RippleRef {
|
|
|
848
842
|
/** Reference to the ripple HTML element. */
|
|
849
843
|
element,
|
|
850
844
|
/** Ripple configuration used for the ripple. */
|
|
851
|
-
config
|
|
845
|
+
config,
|
|
846
|
+
/* Whether animations are forcibly disabled for ripples through CSS. */
|
|
847
|
+
_animationForciblyDisabledThroughCss = false) {
|
|
852
848
|
this._renderer = _renderer;
|
|
853
849
|
this.element = element;
|
|
854
850
|
this.config = config;
|
|
851
|
+
this._animationForciblyDisabledThroughCss = _animationForciblyDisabledThroughCss;
|
|
855
852
|
/** Current state of the ripple. */
|
|
856
853
|
this.state = 3 /* HIDDEN */;
|
|
857
854
|
}
|
|
@@ -920,7 +917,7 @@ class RippleRenderer {
|
|
|
920
917
|
const radius = config.radius || distanceToFurthestCorner(x, y, containerRect);
|
|
921
918
|
const offsetX = x - containerRect.left;
|
|
922
919
|
const offsetY = y - containerRect.top;
|
|
923
|
-
const
|
|
920
|
+
const enterDuration = animationConfig.enterDuration;
|
|
924
921
|
const ripple = document.createElement('div');
|
|
925
922
|
ripple.classList.add('mat-ripple-element');
|
|
926
923
|
ripple.style.left = `${offsetX - radius}px`;
|
|
@@ -932,35 +929,49 @@ class RippleRenderer {
|
|
|
932
929
|
if (config.color != null) {
|
|
933
930
|
ripple.style.backgroundColor = config.color;
|
|
934
931
|
}
|
|
935
|
-
ripple.style.transitionDuration = `${
|
|
932
|
+
ripple.style.transitionDuration = `${enterDuration}ms`;
|
|
936
933
|
this._containerElement.appendChild(ripple);
|
|
937
934
|
// By default the browser does not recalculate the styles of dynamically created
|
|
938
|
-
// ripple elements. This is critical
|
|
939
|
-
|
|
940
|
-
//
|
|
935
|
+
// ripple elements. This is critical to ensure that the `scale` animates properly.
|
|
936
|
+
// We enforce a style recalculation by calling `getComputedStyle` and *accessing* a property.
|
|
937
|
+
// See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a
|
|
938
|
+
const computedStyles = window.getComputedStyle(ripple);
|
|
939
|
+
const userTransitionProperty = computedStyles.transitionProperty;
|
|
940
|
+
const userTransitionDuration = computedStyles.transitionDuration;
|
|
941
|
+
// Note: We detect whether animation is forcibly disabled through CSS by the use of
|
|
942
|
+
// `transition: none`. This is technically unexpected since animations are controlled
|
|
943
|
+
// through the animation config, but this exists for backwards compatibility. This logic does
|
|
944
|
+
// not need to be super accurate since it covers some edge cases which can be easily avoided by users.
|
|
945
|
+
const animationForciblyDisabledThroughCss = userTransitionProperty === 'none' ||
|
|
946
|
+
// Note: The canonical unit for serialized CSS `<time>` properties is seconds. Additionally
|
|
947
|
+
// some browsers expand the duration for every property (in our case `opacity` and `transform`).
|
|
948
|
+
userTransitionDuration === '0s' ||
|
|
949
|
+
userTransitionDuration === '0s, 0s';
|
|
950
|
+
// Exposed reference to the ripple that will be returned.
|
|
951
|
+
const rippleRef = new RippleRef(this, ripple, config, animationForciblyDisabledThroughCss);
|
|
952
|
+
// Start the enter animation by setting the transform/scale to 100%. The animation will
|
|
953
|
+
// execute as part of this statement because we forced a style recalculation before.
|
|
954
|
+
// Note: We use a 3d transform here in order to avoid an issue in Safari where
|
|
941
955
|
// the ripples aren't clipped when inside the shadow DOM (see #24028).
|
|
942
956
|
ripple.style.transform = 'scale3d(1, 1, 1)';
|
|
943
|
-
// Exposed reference to the ripple that will be returned.
|
|
944
|
-
const rippleRef = new RippleRef(this, ripple, config);
|
|
945
957
|
rippleRef.state = 0 /* FADING_IN */;
|
|
946
958
|
// Add the ripple reference to the list of all active ripples.
|
|
947
959
|
this._activeRipples.add(rippleRef);
|
|
948
960
|
if (!config.persistent) {
|
|
949
961
|
this._mostRecentTransientRipple = rippleRef;
|
|
950
962
|
}
|
|
951
|
-
//
|
|
952
|
-
//
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
}, duration);
|
|
963
|
+
// Do not register the `transition` event listener if fade-in and fade-out duration
|
|
964
|
+
// are set to zero. The events won't fire anyway and we can save resources here.
|
|
965
|
+
if (!animationForciblyDisabledThroughCss && (enterDuration || animationConfig.exitDuration)) {
|
|
966
|
+
this._ngZone.runOutsideAngular(() => {
|
|
967
|
+
ripple.addEventListener('transitionend', () => this._finishRippleTransition(rippleRef));
|
|
968
|
+
});
|
|
969
|
+
}
|
|
970
|
+
// In case there is no fade-in transition duration, we need to manually call the transition
|
|
971
|
+
// end listener because `transitionend` doesn't fire if there is no transition.
|
|
972
|
+
if (animationForciblyDisabledThroughCss || !enterDuration) {
|
|
973
|
+
this._finishRippleTransition(rippleRef);
|
|
974
|
+
}
|
|
964
975
|
return rippleRef;
|
|
965
976
|
}
|
|
966
977
|
/** Fades out a ripple reference. */
|
|
@@ -979,14 +990,16 @@ class RippleRenderer {
|
|
|
979
990
|
}
|
|
980
991
|
const rippleEl = rippleRef.element;
|
|
981
992
|
const animationConfig = { ...defaultRippleAnimationConfig, ...rippleRef.config.animation };
|
|
993
|
+
// This starts the fade-out transition and will fire the transition end listener that
|
|
994
|
+
// removes the ripple element from the DOM.
|
|
982
995
|
rippleEl.style.transitionDuration = `${animationConfig.exitDuration}ms`;
|
|
983
996
|
rippleEl.style.opacity = '0';
|
|
984
997
|
rippleRef.state = 2 /* FADING_OUT */;
|
|
985
|
-
//
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
}
|
|
998
|
+
// In case there is no fade-out transition duration, we need to manually call the
|
|
999
|
+
// transition end listener because `transitionend` doesn't fire if there is no transition.
|
|
1000
|
+
if (rippleRef._animationForciblyDisabledThroughCss || !animationConfig.exitDuration) {
|
|
1001
|
+
this._finishRippleTransition(rippleRef);
|
|
1002
|
+
}
|
|
990
1003
|
}
|
|
991
1004
|
/** Fades out all currently active ripples. */
|
|
992
1005
|
fadeOutAll() {
|
|
@@ -1033,6 +1046,36 @@ class RippleRenderer {
|
|
|
1033
1046
|
this._pointerUpEventsRegistered = true;
|
|
1034
1047
|
}
|
|
1035
1048
|
}
|
|
1049
|
+
/** Method that will be called if the fade-in or fade-in transition completed. */
|
|
1050
|
+
_finishRippleTransition(rippleRef) {
|
|
1051
|
+
if (rippleRef.state === 0 /* FADING_IN */) {
|
|
1052
|
+
this._startFadeOutTransition(rippleRef);
|
|
1053
|
+
}
|
|
1054
|
+
else if (rippleRef.state === 2 /* FADING_OUT */) {
|
|
1055
|
+
this._destroyRipple(rippleRef);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
/**
|
|
1059
|
+
* Starts the fade-out transition of the given ripple if it's not persistent and the pointer
|
|
1060
|
+
* is not held down anymore.
|
|
1061
|
+
*/
|
|
1062
|
+
_startFadeOutTransition(rippleRef) {
|
|
1063
|
+
const isMostRecentTransientRipple = rippleRef === this._mostRecentTransientRipple;
|
|
1064
|
+
const { persistent } = rippleRef.config;
|
|
1065
|
+
rippleRef.state = 1 /* VISIBLE */;
|
|
1066
|
+
// When the timer runs out while the user has kept their pointer down, we want to
|
|
1067
|
+
// keep only the persistent ripples and the latest transient ripple. We do this,
|
|
1068
|
+
// because we don't want stacked transient ripples to appear after their enter
|
|
1069
|
+
// animation has finished.
|
|
1070
|
+
if (!persistent && (!isMostRecentTransientRipple || !this._isPointerDown)) {
|
|
1071
|
+
rippleRef.fadeOut();
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
/** Destroys the given ripple by removing it from the DOM and updating its state. */
|
|
1075
|
+
_destroyRipple(rippleRef) {
|
|
1076
|
+
rippleRef.state = 3 /* HIDDEN */;
|
|
1077
|
+
rippleRef.element.remove();
|
|
1078
|
+
}
|
|
1036
1079
|
/** Function being called whenever the trigger is being pressed using mouse. */
|
|
1037
1080
|
_onMousedown(event) {
|
|
1038
1081
|
// Screen readers will fire fake mouse events for space/enter. Skip launching a
|
|
@@ -1078,10 +1121,6 @@ class RippleRenderer {
|
|
|
1078
1121
|
}
|
|
1079
1122
|
});
|
|
1080
1123
|
}
|
|
1081
|
-
/** Runs a timeout outside of the Angular zone to avoid triggering the change detection. */
|
|
1082
|
-
_runTimeoutOutsideZone(fn, delay = 0) {
|
|
1083
|
-
this._ngZone.runOutsideAngular(() => setTimeout(fn, delay));
|
|
1084
|
-
}
|
|
1085
1124
|
/** Registers event listeners for a given list of events. */
|
|
1086
1125
|
_registerEvents(eventTypes) {
|
|
1087
1126
|
this._ngZone.runOutsideAngular(() => {
|
|
@@ -1104,13 +1143,6 @@ class RippleRenderer {
|
|
|
1104
1143
|
}
|
|
1105
1144
|
}
|
|
1106
1145
|
}
|
|
1107
|
-
/** Enforces a style recalculation of a DOM element by computing its styles. */
|
|
1108
|
-
function enforceStyleRecalculation(element) {
|
|
1109
|
-
// Enforce a style recalculation by calling `getComputedStyle` and accessing any property.
|
|
1110
|
-
// Calling `getPropertyValue` is important to let optimizers know that this is not a noop.
|
|
1111
|
-
// See: https://gist.github.com/paulirish/5d52fb081b3570c81e3a
|
|
1112
|
-
window.getComputedStyle(element).getPropertyValue('opacity');
|
|
1113
|
-
}
|
|
1114
1146
|
/**
|
|
1115
1147
|
* Returns the distance from the point (x, y) to the furthest corner of a rectangle.
|
|
1116
1148
|
*/
|