@angular/material 15.1.0-next.0 → 15.1.0-next.1

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 (111) hide show
  1. package/autocomplete/testing/index.d.ts +2 -0
  2. package/button/testing/index.d.ts +2 -0
  3. package/button-toggle/testing/index.d.ts +4 -0
  4. package/checkbox/testing/index.d.ts +2 -0
  5. package/core/index.d.ts +3 -3
  6. package/esm2020/autocomplete/testing/autocomplete-harness-filters.mjs +1 -1
  7. package/esm2020/autocomplete/testing/autocomplete-harness.mjs +6 -2
  8. package/esm2020/button/icon-button.mjs +4 -4
  9. package/esm2020/button/testing/button-harness-filters.mjs +1 -1
  10. package/esm2020/button/testing/button-harness.mjs +5 -2
  11. package/esm2020/button-toggle/testing/button-toggle-group-harness-filters.mjs +1 -1
  12. package/esm2020/button-toggle/testing/button-toggle-group-harness.mjs +4 -2
  13. package/esm2020/button-toggle/testing/button-toggle-harness-filters.mjs +1 -1
  14. package/esm2020/button-toggle/testing/button-toggle-harness.mjs +5 -2
  15. package/esm2020/checkbox/testing/checkbox-harness-filters.mjs +1 -1
  16. package/esm2020/checkbox/testing/checkbox-harness.mjs +5 -2
  17. package/esm2020/chips/chip-action.mjs +3 -5
  18. package/esm2020/core/ripple/ripple-event-manager.mjs +69 -0
  19. package/esm2020/core/ripple/ripple-renderer.mjs +31 -23
  20. package/esm2020/core/version.mjs +1 -1
  21. package/esm2020/form-field/directives/prefix.mjs +12 -7
  22. package/esm2020/form-field/directives/suffix.mjs +12 -7
  23. package/esm2020/legacy-autocomplete/testing/autocomplete-harness-filters.mjs +1 -1
  24. package/esm2020/legacy-autocomplete/testing/autocomplete-harness.mjs +6 -2
  25. package/esm2020/legacy-button/testing/button-harness.mjs +5 -2
  26. package/esm2020/legacy-checkbox/testing/checkbox-harness.mjs +5 -2
  27. package/esm2020/list/list-option.mjs +2 -5
  28. package/esm2020/list/selection-list.mjs +2 -9
  29. package/esm2020/progress-spinner/progress-spinner.mjs +4 -5
  30. package/esm2020/slider/testing/slider-harness-filters.mjs +1 -1
  31. package/esm2020/slider/testing/slider-harness.mjs +6 -2
  32. package/esm2020/tabs/tab-group.mjs +6 -6
  33. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +7 -7
  34. package/fesm2015/autocomplete/testing.mjs +5 -1
  35. package/fesm2015/autocomplete/testing.mjs.map +1 -1
  36. package/fesm2015/button/testing.mjs +4 -1
  37. package/fesm2015/button/testing.mjs.map +1 -1
  38. package/fesm2015/button-toggle/testing.mjs +7 -2
  39. package/fesm2015/button-toggle/testing.mjs.map +1 -1
  40. package/fesm2015/button.mjs +4 -4
  41. package/fesm2015/button.mjs.map +1 -1
  42. package/fesm2015/checkbox/testing.mjs +4 -1
  43. package/fesm2015/checkbox/testing.mjs.map +1 -1
  44. package/fesm2015/chips.mjs +2 -4
  45. package/fesm2015/chips.mjs.map +1 -1
  46. package/fesm2015/core.mjs +100 -24
  47. package/fesm2015/core.mjs.map +1 -1
  48. package/fesm2015/form-field.mjs +20 -10
  49. package/fesm2015/form-field.mjs.map +1 -1
  50. package/fesm2015/legacy-autocomplete/testing.mjs +6 -8
  51. package/fesm2015/legacy-autocomplete/testing.mjs.map +1 -1
  52. package/fesm2015/legacy-button/testing.mjs +4 -1
  53. package/fesm2015/legacy-button/testing.mjs.map +1 -1
  54. package/fesm2015/legacy-checkbox/testing.mjs +4 -1
  55. package/fesm2015/legacy-checkbox/testing.mjs.map +1 -1
  56. package/fesm2015/list.mjs +2 -12
  57. package/fesm2015/list.mjs.map +1 -1
  58. package/fesm2015/progress-spinner.mjs +3 -4
  59. package/fesm2015/progress-spinner.mjs.map +1 -1
  60. package/fesm2015/slider/testing.mjs +5 -1
  61. package/fesm2015/slider/testing.mjs.map +1 -1
  62. package/fesm2015/tabs.mjs +11 -11
  63. package/fesm2015/tabs.mjs.map +1 -1
  64. package/fesm2020/autocomplete/testing.mjs +5 -1
  65. package/fesm2020/autocomplete/testing.mjs.map +1 -1
  66. package/fesm2020/button/testing.mjs +4 -1
  67. package/fesm2020/button/testing.mjs.map +1 -1
  68. package/fesm2020/button-toggle/testing.mjs +7 -2
  69. package/fesm2020/button-toggle/testing.mjs.map +1 -1
  70. package/fesm2020/button.mjs +4 -4
  71. package/fesm2020/button.mjs.map +1 -1
  72. package/fesm2020/checkbox/testing.mjs +4 -1
  73. package/fesm2020/checkbox/testing.mjs.map +1 -1
  74. package/fesm2020/chips.mjs +2 -4
  75. package/fesm2020/chips.mjs.map +1 -1
  76. package/fesm2020/core.mjs +99 -24
  77. package/fesm2020/core.mjs.map +1 -1
  78. package/fesm2020/form-field.mjs +20 -10
  79. package/fesm2020/form-field.mjs.map +1 -1
  80. package/fesm2020/legacy-autocomplete/testing.mjs +5 -1
  81. package/fesm2020/legacy-autocomplete/testing.mjs.map +1 -1
  82. package/fesm2020/legacy-button/testing.mjs +4 -1
  83. package/fesm2020/legacy-button/testing.mjs.map +1 -1
  84. package/fesm2020/legacy-checkbox/testing.mjs +4 -1
  85. package/fesm2020/legacy-checkbox/testing.mjs.map +1 -1
  86. package/fesm2020/list.mjs +2 -12
  87. package/fesm2020/list.mjs.map +1 -1
  88. package/fesm2020/progress-spinner.mjs +3 -4
  89. package/fesm2020/progress-spinner.mjs.map +1 -1
  90. package/fesm2020/slider/testing.mjs +5 -1
  91. package/fesm2020/slider/testing.mjs.map +1 -1
  92. package/fesm2020/tabs.mjs +11 -11
  93. package/fesm2020/tabs.mjs.map +1 -1
  94. package/form-field/index.d.ts +4 -4
  95. package/legacy-autocomplete/testing/index.d.ts +2 -0
  96. package/list/_interactive-list-theme.scss +0 -17
  97. package/list/index.d.ts +0 -12
  98. package/package.json +2 -2
  99. package/prebuilt-themes/deeppurple-amber.css +1 -1
  100. package/prebuilt-themes/indigo-pink.css +1 -1
  101. package/prebuilt-themes/pink-bluegrey.css +1 -1
  102. package/prebuilt-themes/purple-green.css +1 -1
  103. package/progress-spinner/index.d.ts +3 -4
  104. package/schematics/ng-add/index.js +1 -1
  105. package/schematics/ng-add/index.mjs +1 -1
  106. package/schematics/ng-generate/mdc-migration/index_bundled.js +4 -2
  107. package/schematics/ng-generate/mdc-migration/index_bundled.js.map +2 -2
  108. package/schematics/ng-generate/mdc-migration/mdc_migration_bundle_metadata.json +1 -1
  109. package/slider/testing/index.d.ts +2 -0
  110. package/tabs/_tabs-common.scss +42 -0
  111. package/tabs/_tabs-theme.scss +4 -30
package/fesm2015/core.mjs CHANGED
@@ -5,7 +5,7 @@ import { VERSION as VERSION$1 } from '@angular/cdk';
5
5
  import * as i3 from '@angular/common';
6
6
  import { DOCUMENT, CommonModule } from '@angular/common';
7
7
  import * as i1$1 from '@angular/cdk/platform';
8
- import { _isTestEnvironment, normalizePassiveListenerOptions } from '@angular/cdk/platform';
8
+ import { _isTestEnvironment, normalizePassiveListenerOptions, _getEventTarget } from '@angular/cdk/platform';
9
9
  import * as i1 from '@angular/cdk/a11y';
10
10
  import { isFakeMousedownFromScreenReader, isFakeTouchstartFromScreenReader } from '@angular/cdk/a11y';
11
11
  import { coerceBooleanProperty, coerceNumberProperty, coerceElement } from '@angular/cdk/coercion';
@@ -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('15.1.0-next.0');
25
+ const VERSION = new Version('15.1.0-next.1');
26
26
 
27
27
  /**
28
28
  * @license
@@ -848,6 +848,75 @@ class RippleRef {
848
848
  }
849
849
  }
850
850
 
851
+ /**
852
+ * @license
853
+ * Copyright Google LLC All Rights Reserved.
854
+ *
855
+ * Use of this source code is governed by an MIT-style license that can be
856
+ * found in the LICENSE file at https://angular.io/license
857
+ */
858
+ /** Options used to bind a passive capturing event. */
859
+ const passiveCapturingEventOptions$1 = normalizePassiveListenerOptions({
860
+ passive: true,
861
+ capture: true,
862
+ });
863
+ /** Manages events through delegation so that as few event handlers as possible are bound. */
864
+ class RippleEventManager {
865
+ constructor() {
866
+ this._events = new Map();
867
+ /** Event handler that is bound and which dispatches the events to the different targets. */
868
+ this._delegateEventHandler = (event) => {
869
+ var _a;
870
+ const target = _getEventTarget(event);
871
+ if (target) {
872
+ (_a = this._events.get(event.type)) === null || _a === void 0 ? void 0 : _a.forEach((handlers, element) => {
873
+ if (element === target || element.contains(target)) {
874
+ handlers.forEach(handler => handler.handleEvent(event));
875
+ }
876
+ });
877
+ }
878
+ };
879
+ }
880
+ /** Adds an event handler. */
881
+ addHandler(ngZone, name, element, handler) {
882
+ const handlersForEvent = this._events.get(name);
883
+ if (handlersForEvent) {
884
+ const handlersForElement = handlersForEvent.get(element);
885
+ if (handlersForElement) {
886
+ handlersForElement.add(handler);
887
+ }
888
+ else {
889
+ handlersForEvent.set(element, new Set([handler]));
890
+ }
891
+ }
892
+ else {
893
+ this._events.set(name, new Map([[element, new Set([handler])]]));
894
+ ngZone.runOutsideAngular(() => {
895
+ document.addEventListener(name, this._delegateEventHandler, passiveCapturingEventOptions$1);
896
+ });
897
+ }
898
+ }
899
+ /** Removes an event handler. */
900
+ removeHandler(name, element, handler) {
901
+ const handlersForEvent = this._events.get(name);
902
+ if (!handlersForEvent) {
903
+ return;
904
+ }
905
+ const handlersForElement = handlersForEvent.get(element);
906
+ if (!handlersForElement) {
907
+ return;
908
+ }
909
+ handlersForElement.delete(handler);
910
+ if (handlersForElement.size === 0) {
911
+ handlersForEvent.delete(element);
912
+ }
913
+ if (handlersForEvent.size === 0) {
914
+ this._events.delete(name);
915
+ document.removeEventListener(name, this._delegateEventHandler, passiveCapturingEventOptions$1);
916
+ }
917
+ }
918
+ }
919
+
851
920
  // TODO: import these values from `@material/ripple` eventually.
852
921
  /**
853
922
  * Default ripple animation configuration for ripples without an explicit
@@ -862,8 +931,11 @@ const defaultRippleAnimationConfig = {
862
931
  * events to avoid synthetic mouse events.
863
932
  */
864
933
  const ignoreMouseEventsTimeout = 800;
865
- /** Options that apply to all the event listeners that are bound by the ripple renderer. */
866
- const passiveEventOptions = normalizePassiveListenerOptions({ passive: true });
934
+ /** Options used to bind a passive capturing event. */
935
+ const passiveCapturingEventOptions = normalizePassiveListenerOptions({
936
+ passive: true,
937
+ capture: true,
938
+ });
867
939
  /** Events that signal that the pointer is down. */
868
940
  const pointerDownEvents = ['mousedown', 'touchstart'];
869
941
  /** Events that signal that the pointer is up. */
@@ -876,9 +948,10 @@ const pointerUpEvents = ['mouseup', 'mouseleave', 'touchend', 'touchcancel'];
876
948
  * @docs-private
877
949
  */
878
950
  class RippleRenderer {
879
- constructor(_target, _ngZone, elementOrElementRef, platform) {
951
+ constructor(_target, _ngZone, elementOrElementRef, _platform) {
880
952
  this._target = _target;
881
953
  this._ngZone = _ngZone;
954
+ this._platform = _platform;
882
955
  /** Whether the pointer is currently down or not. */
883
956
  this._isPointerDown = false;
884
957
  /**
@@ -891,7 +964,7 @@ class RippleRenderer {
891
964
  /** Whether pointer-up event listeners have been registered. */
892
965
  this._pointerUpEventsRegistered = false;
893
966
  // Only do anything if we're on the browser.
894
- if (platform.isBrowser) {
967
+ if (_platform.isBrowser) {
895
968
  this._containerElement = coerceElement(elementOrElementRef);
896
969
  }
897
970
  }
@@ -1014,13 +1087,17 @@ class RippleRenderer {
1014
1087
  /** Sets up the trigger event listeners */
1015
1088
  setupTriggerEvents(elementOrElementRef) {
1016
1089
  const element = coerceElement(elementOrElementRef);
1017
- if (!element || element === this._triggerElement) {
1090
+ if (!this._platform.isBrowser || !element || element === this._triggerElement) {
1018
1091
  return;
1019
1092
  }
1020
1093
  // Remove all previously registered event listeners from the trigger element.
1021
1094
  this._removeTriggerEvents();
1022
1095
  this._triggerElement = element;
1023
- this._registerEvents(pointerDownEvents);
1096
+ // Use event delegation for the trigger events since they're
1097
+ // set up during creation and are performance-sensitive.
1098
+ pointerDownEvents.forEach(type => {
1099
+ RippleRenderer._eventManager.addHandler(this._ngZone, type, element, this);
1100
+ });
1024
1101
  }
1025
1102
  /**
1026
1103
  * Handles all registered events.
@@ -1040,7 +1117,16 @@ class RippleRenderer {
1040
1117
  // We do this on-demand in order to reduce the total number of event listeners
1041
1118
  // registered by the ripples, which speeds up the rendering time for large UIs.
1042
1119
  if (!this._pointerUpEventsRegistered) {
1043
- this._registerEvents(pointerUpEvents);
1120
+ // The events for hiding the ripple are bound directly on the trigger, because:
1121
+ // 1. Some of them occur frequently (e.g. `mouseleave`) and any advantage we get from
1122
+ // delegation will be diminished by having to look through all the data structures often.
1123
+ // 2. They aren't as performance-sensitive, because they're bound only after the user
1124
+ // has interacted with an element.
1125
+ this._ngZone.runOutsideAngular(() => {
1126
+ pointerUpEvents.forEach(type => {
1127
+ this._triggerElement.addEventListener(type, this, passiveCapturingEventOptions);
1128
+ });
1129
+ });
1044
1130
  this._pointerUpEventsRegistered = true;
1045
1131
  }
1046
1132
  }
@@ -1135,31 +1221,21 @@ class RippleRenderer {
1135
1221
  }
1136
1222
  });
1137
1223
  }
1138
- /** Registers event listeners for a given list of events. */
1139
- _registerEvents(eventTypes) {
1140
- this._ngZone.runOutsideAngular(() => {
1141
- eventTypes.forEach(type => {
1142
- this._triggerElement.addEventListener(type, this, passiveEventOptions);
1143
- });
1144
- });
1145
- }
1146
1224
  _getActiveRipples() {
1147
1225
  return Array.from(this._activeRipples.keys());
1148
1226
  }
1149
1227
  /** Removes previously registered event listeners from the trigger element. */
1150
1228
  _removeTriggerEvents() {
1151
- if (this._triggerElement) {
1152
- pointerDownEvents.forEach(type => {
1153
- this._triggerElement.removeEventListener(type, this, passiveEventOptions);
1154
- });
1229
+ const trigger = this._triggerElement;
1230
+ if (trigger) {
1231
+ pointerDownEvents.forEach(type => RippleRenderer._eventManager.removeHandler(type, trigger, this));
1155
1232
  if (this._pointerUpEventsRegistered) {
1156
- pointerUpEvents.forEach(type => {
1157
- this._triggerElement.removeEventListener(type, this, passiveEventOptions);
1158
- });
1233
+ pointerUpEvents.forEach(type => trigger.removeEventListener(type, this, passiveCapturingEventOptions));
1159
1234
  }
1160
1235
  }
1161
1236
  }
1162
1237
  }
1238
+ RippleRenderer._eventManager = new RippleEventManager();
1163
1239
  /**
1164
1240
  * Returns the distance from the point (x, y) to the furthest corner of a rectangle.
1165
1241
  */