@angular/material 20.0.0-next.1 → 20.0.0-next.2
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/autocomplete/_autocomplete-theme.scss +4 -4
- package/autocomplete/index.d.ts +4 -0
- package/badge/_badge-theme.scss +5 -5
- package/bottom-sheet/_bottom-sheet-theme.scss +3 -3
- package/button/_button-theme.scss +84 -32
- package/button/_fab-theme.scss +13 -13
- package/button/_icon-button-theme.scss +5 -5
- package/button/index.d.ts +1 -1
- package/button/testing/index.d.ts +9 -2
- package/button-toggle/_button-toggle-theme.scss +8 -8
- package/card/_card-theme.scss +12 -12
- package/checkbox/_checkbox-theme.scss +10 -10
- package/chips/_chips-theme.scss +14 -14
- package/core/_core-theme.scss +2 -2
- package/core/option/_optgroup-theme.scss +2 -2
- package/core/option/_option-theme.scss +4 -4
- package/core/ripple/_ripple-theme.scss +3 -3
- package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +4 -4
- package/core/theming/_color-api-backwards-compatibility.scss +19 -8
- package/core/tokens/_density.scss +3 -0
- package/core/tokens/_token-definition.scss +1 -2
- package/core/tokens/_token-utils.scss +20 -5
- package/core/tokens/m2/_index.scss +2 -0
- package/core/tokens/m2/mat/_tonal-button.scss +110 -0
- package/core/tokens/m3/_index.scss +2 -0
- package/core/tokens/m3/definitions/_index.scss +1 -1
- package/core/tokens/m3/definitions/_md-comp-elevated-card.scss +3 -1
- package/core/tokens/m3/definitions/_md-sys-color.scss +44 -2
- package/core/tokens/m3/definitions/_md-sys-typescale.scss +20 -1
- package/core/tokens/m3/mat/_tonal-button.scss +101 -0
- package/datepicker/_datepicker-theme.scss +8 -7
- package/datepicker/index.d.ts +1 -1
- package/dialog/_dialog-theme.scss +6 -6
- package/divider/_divider-theme.scss +2 -2
- package/expansion/_expansion-theme.scss +4 -4
- package/fesm2022/autocomplete.mjs +3 -0
- package/fesm2022/autocomplete.mjs.map +1 -1
- package/fesm2022/button/testing.mjs +34 -15
- package/fesm2022/button/testing.mjs.map +1 -1
- package/fesm2022/button.mjs +2 -2
- package/fesm2022/core.mjs +1 -1
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/{date-range-input-harness-ee47cdb0.mjs → date-range-input-harness-de70be6a.mjs} +2 -2
- package/fesm2022/{date-range-input-harness-ee47cdb0.mjs.map → date-range-input-harness-de70be6a.mjs.map} +1 -1
- package/fesm2022/datepicker/testing.mjs +3 -3
- package/fesm2022/datepicker.mjs +8 -8
- package/fesm2022/datepicker.mjs.map +1 -1
- package/fesm2022/dialog/testing.mjs.map +1 -1
- package/fesm2022/divider/testing.mjs +1 -1
- package/fesm2022/{divider-harness-3394f29a.mjs → divider-harness-8099453f.mjs} +1 -1
- package/fesm2022/divider-harness-8099453f.mjs.map +1 -0
- package/fesm2022/expansion/testing.mjs.map +1 -1
- package/fesm2022/form-field/testing/control.mjs +1 -1
- package/fesm2022/form-field/testing.mjs +4 -4
- package/fesm2022/form-field/testing.mjs.map +1 -1
- package/fesm2022/{form-field-control-harness-af6fd278.mjs → form-field-control-harness-efefd4cf.mjs} +1 -1
- package/fesm2022/form-field-control-harness-efefd4cf.mjs.map +1 -0
- package/fesm2022/grid-list/testing.mjs.map +1 -1
- package/fesm2022/icon-button-0850d958.mjs +211 -0
- package/fesm2022/icon-button-0850d958.mjs.map +1 -0
- package/fesm2022/input/testing.mjs +2 -2
- package/fesm2022/input/testing.mjs.map +1 -1
- package/fesm2022/{input-harness-ed59decc.mjs → input-harness-e68bb132.mjs} +2 -2
- package/fesm2022/input-harness-e68bb132.mjs.map +1 -0
- package/fesm2022/list/testing.mjs +1 -1
- package/fesm2022/list/testing.mjs.map +1 -1
- package/fesm2022/{module-3bf2775f.mjs → module-1c16a0a9.mjs} +3 -3
- package/fesm2022/{module-3bf2775f.mjs.map → module-1c16a0a9.mjs.map} +1 -1
- package/fesm2022/module-cf951a02.mjs +214 -0
- package/fesm2022/module-cf951a02.mjs.map +1 -0
- package/fesm2022/paginator/testing.mjs +2 -2
- package/fesm2022/paginator.mjs +5 -5
- package/fesm2022/paginator.mjs.map +1 -1
- package/fesm2022/select/testing.mjs +2 -2
- package/fesm2022/{select-harness-8c55824d.mjs → select-harness-69d47123.mjs} +2 -2
- package/fesm2022/{select-harness-8c55824d.mjs.map → select-harness-69d47123.mjs.map} +1 -1
- package/fesm2022/select.mjs +1 -1
- package/fesm2022/slider.mjs +5 -2
- package/fesm2022/slider.mjs.map +1 -1
- package/fesm2022/snack-bar.mjs +4 -4
- package/fesm2022/snack-bar.mjs.map +1 -1
- package/fesm2022/timepicker.mjs +8 -4
- package/fesm2022/timepicker.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +16 -16
- package/grid-list/_grid-list-theme.scss +1 -1
- package/icon/_icon-theme.scss +2 -2
- package/list/_list-theme.scss +15 -15
- package/menu/_menu-theme.scss +3 -3
- package/{module.d-18a67f56.d.ts → module.d-792a497c.d.ts} +33 -26
- package/package.json +2 -2
- package/paginator/_paginator-theme.scss +3 -3
- package/paginator/index.d.ts +1 -1
- 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/progress-bar/_progress-bar-theme.scss +2 -2
- package/progress-spinner/_progress-spinner-theme.scss +4 -4
- package/radio/_radio-theme.scss +12 -12
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-generate/address-form/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +2 -2
- package/schematics/ng-generate/dashboard/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +1 -1
- package/schematics/ng-generate/navigation/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +1 -1
- package/schematics/ng-generate/tree/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +2 -2
- package/select/_select-theme.scss +6 -6
- package/sidenav/_sidenav-theme.scss +2 -2
- package/slide-toggle/_slide-toggle-theme.scss +10 -10
- package/slider/_slider-theme.scss +10 -10
- package/snack-bar/_snack-bar-theme.scss +4 -4
- package/snack-bar/index.d.ts +1 -1
- package/sort/_sort-theme.scss +3 -3
- package/stepper/_stepper-theme.scss +5 -5
- package/table/_table-theme.scss +4 -4
- package/tabs/_tabs-theme.scss +16 -16
- package/timepicker/_timepicker-theme.scss +4 -4
- package/toolbar/_toolbar-theme.scss +4 -4
- package/tooltip/_tooltip-theme.scss +4 -4
- package/tree/_tree-theme.scss +3 -3
- package/fesm2022/divider-harness-3394f29a.mjs.map +0 -1
- package/fesm2022/form-field-control-harness-af6fd278.mjs.map +0 -1
- package/fesm2022/icon-button-47f1b5d9.mjs +0 -248
- package/fesm2022/icon-button-47f1b5d9.mjs.map +0 -1
- package/fesm2022/input-harness-ed59decc.mjs.map +0 -1
- package/fesm2022/module-df9f7af3.mjs +0 -152
- package/fesm2022/module-df9f7af3.mjs.map +0 -1
- /package/core/tokens/m3/definitions/{unused/_md-comp-filled-tonal-button.scss → _md-comp-filled-tonal-button.scss} +0 -0
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, ElementRef, NgZone, ANIMATION_MODULE_TYPE, Renderer2, booleanAttribute, Directive, Input, numberAttribute, Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
|
|
3
|
-
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
4
|
-
import { _CdkPrivateStyleLoader } from '@angular/cdk/private';
|
|
5
|
-
import { M as MatRippleLoader } from './ripple-loader-f2078c66.mjs';
|
|
6
|
-
import { _ as _StructuralStylesLoader } from './structural-styles-d5ada3b3.mjs';
|
|
7
|
-
|
|
8
|
-
/** Injection token that can be used to provide the default options the button component. */
|
|
9
|
-
const MAT_BUTTON_CONFIG = new InjectionToken('MAT_BUTTON_CONFIG');
|
|
10
|
-
/** Shared host configuration for all buttons */
|
|
11
|
-
const MAT_BUTTON_HOST = {
|
|
12
|
-
'[attr.disabled]': '_getDisabledAttribute()',
|
|
13
|
-
'[attr.aria-disabled]': '_getAriaDisabled()',
|
|
14
|
-
'[class.mat-mdc-button-disabled]': 'disabled',
|
|
15
|
-
'[class.mat-mdc-button-disabled-interactive]': 'disabledInteractive',
|
|
16
|
-
'[class._mat-animation-noopable]': '_animationMode === "NoopAnimations"',
|
|
17
|
-
// MDC automatically applies the primary theme color to the button, but we want to support
|
|
18
|
-
// an unthemed version. If color is undefined, apply a CSS class that makes it easy to
|
|
19
|
-
// select and style this "theme".
|
|
20
|
-
'[class.mat-unthemed]': '!color',
|
|
21
|
-
// Add a class that applies to all buttons. This makes it easier to target if somebody
|
|
22
|
-
// wants to target all Material buttons.
|
|
23
|
-
'[class.mat-mdc-button-base]': 'true',
|
|
24
|
-
'[class]': 'color ? "mat-" + color : ""',
|
|
25
|
-
'[attr.tabindex]': '_getTabIndex()',
|
|
26
|
-
};
|
|
27
|
-
function transformTabIndex(value) {
|
|
28
|
-
return value == null ? undefined : numberAttribute(value);
|
|
29
|
-
}
|
|
30
|
-
/** List of classes to add to buttons instances based on host attribute selector. */
|
|
31
|
-
const HOST_SELECTOR_MDC_CLASS_PAIR = [
|
|
32
|
-
{
|
|
33
|
-
attribute: 'mat-button',
|
|
34
|
-
mdcClasses: ['mdc-button', 'mat-mdc-button'],
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
attribute: 'mat-flat-button',
|
|
38
|
-
mdcClasses: ['mdc-button', 'mdc-button--unelevated', 'mat-mdc-unelevated-button'],
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
attribute: 'mat-raised-button',
|
|
42
|
-
mdcClasses: ['mdc-button', 'mdc-button--raised', 'mat-mdc-raised-button'],
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
attribute: 'mat-stroked-button',
|
|
46
|
-
mdcClasses: ['mdc-button', 'mdc-button--outlined', 'mat-mdc-outlined-button'],
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
attribute: 'mat-fab',
|
|
50
|
-
mdcClasses: ['mdc-fab', 'mat-mdc-fab-base', 'mat-mdc-fab'],
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
attribute: 'mat-mini-fab',
|
|
54
|
-
mdcClasses: ['mdc-fab', 'mat-mdc-fab-base', 'mdc-fab--mini', 'mat-mdc-mini-fab'],
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
attribute: 'mat-icon-button',
|
|
58
|
-
mdcClasses: ['mdc-icon-button', 'mat-mdc-icon-button'],
|
|
59
|
-
},
|
|
60
|
-
];
|
|
61
|
-
/** Base class for all buttons. */
|
|
62
|
-
class MatButtonBase {
|
|
63
|
-
_elementRef = inject(ElementRef);
|
|
64
|
-
_ngZone = inject(NgZone);
|
|
65
|
-
_animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });
|
|
66
|
-
_focusMonitor = inject(FocusMonitor);
|
|
67
|
-
_cleanupClick;
|
|
68
|
-
_renderer = inject(Renderer2);
|
|
69
|
-
/**
|
|
70
|
-
* Handles the lazy creation of the MatButton ripple.
|
|
71
|
-
* Used to improve initial load time of large applications.
|
|
72
|
-
*/
|
|
73
|
-
_rippleLoader = inject(MatRippleLoader);
|
|
74
|
-
/** Whether the button is set on an anchor node. */
|
|
75
|
-
_isAnchor;
|
|
76
|
-
/** Whether this button is a FAB. Used to apply the correct class on the ripple. */
|
|
77
|
-
_isFab = false;
|
|
78
|
-
/**
|
|
79
|
-
* Theme color of the button. This API is supported in M2 themes only, it has
|
|
80
|
-
* no effect in M3 themes. For color customization in M3, see https://material.angular.io/components/button/styling.
|
|
81
|
-
*
|
|
82
|
-
* For information on applying color variants in M3, see
|
|
83
|
-
* https://material.angular.io/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants
|
|
84
|
-
*/
|
|
85
|
-
color;
|
|
86
|
-
/** Whether the ripple effect is disabled or not. */
|
|
87
|
-
get disableRipple() {
|
|
88
|
-
return this._disableRipple;
|
|
89
|
-
}
|
|
90
|
-
set disableRipple(value) {
|
|
91
|
-
this._disableRipple = value;
|
|
92
|
-
this._updateRippleDisabled();
|
|
93
|
-
}
|
|
94
|
-
_disableRipple = false;
|
|
95
|
-
/** Whether the button is disabled. */
|
|
96
|
-
get disabled() {
|
|
97
|
-
return this._disabled;
|
|
98
|
-
}
|
|
99
|
-
set disabled(value) {
|
|
100
|
-
this._disabled = value;
|
|
101
|
-
this._updateRippleDisabled();
|
|
102
|
-
}
|
|
103
|
-
_disabled = false;
|
|
104
|
-
/** `aria-disabled` value of the button. */
|
|
105
|
-
ariaDisabled;
|
|
106
|
-
/**
|
|
107
|
-
* Natively disabled buttons prevent focus and any pointer events from reaching the button.
|
|
108
|
-
* In some scenarios this might not be desirable, because it can prevent users from finding out
|
|
109
|
-
* why the button is disabled (e.g. via tooltip).
|
|
110
|
-
*
|
|
111
|
-
* Enabling this input will change the button so that it is styled to be disabled and will be
|
|
112
|
-
* marked as `aria-disabled`, but it will allow the button to receive events and focus.
|
|
113
|
-
*
|
|
114
|
-
* Note that by enabling this, you need to set the `tabindex` yourself if the button isn't
|
|
115
|
-
* meant to be tabbable and you have to prevent the button action (e.g. form submissions).
|
|
116
|
-
*/
|
|
117
|
-
disabledInteractive;
|
|
118
|
-
/** Tab index for the button. */
|
|
119
|
-
tabIndex;
|
|
120
|
-
/**
|
|
121
|
-
* Backwards-compatibility input that handles pre-existing `[tabindex]` bindings.
|
|
122
|
-
* @docs-private
|
|
123
|
-
*/
|
|
124
|
-
set _tabindex(value) {
|
|
125
|
-
this.tabIndex = value;
|
|
126
|
-
}
|
|
127
|
-
constructor() {
|
|
128
|
-
inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
|
|
129
|
-
const config = inject(MAT_BUTTON_CONFIG, { optional: true });
|
|
130
|
-
const element = this._elementRef.nativeElement;
|
|
131
|
-
const classList = element.classList;
|
|
132
|
-
this._isAnchor = element.tagName === 'A';
|
|
133
|
-
this.disabledInteractive = config?.disabledInteractive ?? false;
|
|
134
|
-
this.color = config?.color ?? null;
|
|
135
|
-
this._rippleLoader?.configureRipple(element, { className: 'mat-mdc-button-ripple' });
|
|
136
|
-
// For each of the variant selectors that is present in the button's host
|
|
137
|
-
// attributes, add the correct corresponding MDC classes.
|
|
138
|
-
for (const { attribute, mdcClasses } of HOST_SELECTOR_MDC_CLASS_PAIR) {
|
|
139
|
-
if (element.hasAttribute(attribute)) {
|
|
140
|
-
classList.add(...mdcClasses);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
ngAfterViewInit() {
|
|
145
|
-
this._focusMonitor.monitor(this._elementRef, true);
|
|
146
|
-
// Some internal tests depend on the timing of this,
|
|
147
|
-
// otherwise we could bind it in the constructor.
|
|
148
|
-
if (this._isAnchor) {
|
|
149
|
-
this._setupAsAnchor();
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
ngOnDestroy() {
|
|
153
|
-
this._cleanupClick?.();
|
|
154
|
-
this._focusMonitor.stopMonitoring(this._elementRef);
|
|
155
|
-
this._rippleLoader?.destroyRipple(this._elementRef.nativeElement);
|
|
156
|
-
}
|
|
157
|
-
/** Focuses the button. */
|
|
158
|
-
focus(origin = 'program', options) {
|
|
159
|
-
if (origin) {
|
|
160
|
-
this._focusMonitor.focusVia(this._elementRef.nativeElement, origin, options);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
this._elementRef.nativeElement.focus(options);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
_getAriaDisabled() {
|
|
167
|
-
if (this.ariaDisabled != null) {
|
|
168
|
-
return this.ariaDisabled;
|
|
169
|
-
}
|
|
170
|
-
if (this._isAnchor) {
|
|
171
|
-
return this.disabled || null;
|
|
172
|
-
}
|
|
173
|
-
return this.disabled && this.disabledInteractive ? true : null;
|
|
174
|
-
}
|
|
175
|
-
_getDisabledAttribute() {
|
|
176
|
-
return this.disabledInteractive || !this.disabled ? null : true;
|
|
177
|
-
}
|
|
178
|
-
_updateRippleDisabled() {
|
|
179
|
-
this._rippleLoader?.setDisabled(this._elementRef.nativeElement, this.disableRipple || this.disabled);
|
|
180
|
-
}
|
|
181
|
-
_getTabIndex() {
|
|
182
|
-
if (this._isAnchor) {
|
|
183
|
-
return this.disabled && !this.disabledInteractive ? -1 : this.tabIndex;
|
|
184
|
-
}
|
|
185
|
-
return this.tabIndex;
|
|
186
|
-
}
|
|
187
|
-
_setupAsAnchor() {
|
|
188
|
-
this._cleanupClick = this._ngZone.runOutsideAngular(() => this._renderer.listen(this._elementRef.nativeElement, 'click', (event) => {
|
|
189
|
-
if (this.disabled) {
|
|
190
|
-
event.preventDefault();
|
|
191
|
-
event.stopImmediatePropagation();
|
|
192
|
-
}
|
|
193
|
-
}));
|
|
194
|
-
}
|
|
195
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.1", ngImport: i0, type: MatButtonBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
196
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "20.0.0-next.1", type: MatButtonBase, isStandalone: true, inputs: { color: "color", disableRipple: ["disableRipple", "disableRipple", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], ariaDisabled: ["aria-disabled", "ariaDisabled", booleanAttribute], disabledInteractive: ["disabledInteractive", "disabledInteractive", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", transformTabIndex], _tabindex: ["tabindex", "_tabindex", transformTabIndex] }, ngImport: i0 });
|
|
197
|
-
}
|
|
198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.1", ngImport: i0, type: MatButtonBase, decorators: [{
|
|
199
|
-
type: Directive
|
|
200
|
-
}], ctorParameters: () => [], propDecorators: { color: [{
|
|
201
|
-
type: Input
|
|
202
|
-
}], disableRipple: [{
|
|
203
|
-
type: Input,
|
|
204
|
-
args: [{ transform: booleanAttribute }]
|
|
205
|
-
}], disabled: [{
|
|
206
|
-
type: Input,
|
|
207
|
-
args: [{ transform: booleanAttribute }]
|
|
208
|
-
}], ariaDisabled: [{
|
|
209
|
-
type: Input,
|
|
210
|
-
args: [{ transform: booleanAttribute, alias: 'aria-disabled' }]
|
|
211
|
-
}], disabledInteractive: [{
|
|
212
|
-
type: Input,
|
|
213
|
-
args: [{ transform: booleanAttribute }]
|
|
214
|
-
}], tabIndex: [{
|
|
215
|
-
type: Input,
|
|
216
|
-
args: [{ transform: transformTabIndex }]
|
|
217
|
-
}], _tabindex: [{
|
|
218
|
-
type: Input,
|
|
219
|
-
args: [{ alias: 'tabindex', transform: transformTabIndex }]
|
|
220
|
-
}] } });
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* Material Design icon button component. This type of button displays a single interactive icon for
|
|
224
|
-
* users to perform an action.
|
|
225
|
-
* See https://material.io/develop/web/components/buttons/icon-buttons/
|
|
226
|
-
*/
|
|
227
|
-
class MatIconButton extends MatButtonBase {
|
|
228
|
-
constructor() {
|
|
229
|
-
super();
|
|
230
|
-
this._rippleLoader.configureRipple(this._elementRef.nativeElement, { centered: true });
|
|
231
|
-
}
|
|
232
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0-next.1", ngImport: i0, type: MatIconButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
233
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.0-next.1", type: MatIconButton, isStandalone: true, selector: "button[mat-icon-button], a[mat-icon-button]", host: { properties: { "attr.disabled": "_getDisabledAttribute()", "attr.aria-disabled": "_getAriaDisabled()", "class.mat-mdc-button-disabled": "disabled", "class.mat-mdc-button-disabled-interactive": "disabledInteractive", "class._mat-animation-noopable": "_animationMode === \"NoopAnimations\"", "class.mat-unthemed": "!color", "class.mat-mdc-button-base": "true", "class": "color ? \"mat-\" + color : \"\"", "attr.tabindex": "_getTabIndex()" } }, exportAs: ["matButton", "matAnchor"], usesInheritance: true, ngImport: i0, template: "<span class=\"mat-mdc-button-persistent-ripple mdc-icon-button__ripple\"></span>\n\n<ng-content></ng-content>\n\n<!--\n The indicator can't be directly on the button, because MDC uses ::before for high contrast\n indication and it can't be on the ripple, because it has a border radius and overflow: hidden.\n-->\n<span class=\"mat-focus-indicator\"></span>\n\n<span class=\"mat-mdc-button-touch-target\"></span>\n", styles: [".mat-mdc-icon-button{-webkit-user-select:none;user-select:none;display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;z-index:0;overflow:visible;border-radius:50%;flex-shrink:0;text-align:center;width:var(--mdc-icon-button-state-layer-size, 40px);height:var(--mdc-icon-button-state-layer-size, 40px);padding:calc(calc(var(--mdc-icon-button-state-layer-size, 40px) - var(--mdc-icon-button-icon-size, 24px)) / 2);font-size:var(--mdc-icon-button-icon-size, 24px);color:var(--mdc-icon-button-icon-color, var(--mat-sys-on-surface-variant));-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:\"\";opacity:0}.mat-mdc-icon-button .mdc-button__label,.mat-mdc-icon-button .mat-icon{z-index:1;position:relative}.mat-mdc-icon-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-icon-button:focus>.mat-focus-indicator::before{content:\"\"}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-icon-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-icon-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%);display:var(--mat-icon-button-touch-target-display, block)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button[disabled],.mat-mdc-icon-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mdc-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-icon-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-icon-button img,.mat-mdc-icon-button svg{width:var(--mdc-icon-button-icon-size, 24px);height:var(--mdc-icon-button-icon-size, 24px);vertical-align:baseline}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:50%}.mat-mdc-icon-button[hidden]{display:none}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1}", "@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
234
|
-
}
|
|
235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0-next.1", ngImport: i0, type: MatIconButton, decorators: [{
|
|
236
|
-
type: Component,
|
|
237
|
-
args: [{ selector: `button[mat-icon-button], a[mat-icon-button]`, host: MAT_BUTTON_HOST, exportAs: 'matButton, matAnchor', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"mat-mdc-button-persistent-ripple mdc-icon-button__ripple\"></span>\n\n<ng-content></ng-content>\n\n<!--\n The indicator can't be directly on the button, because MDC uses ::before for high contrast\n indication and it can't be on the ripple, because it has a border radius and overflow: hidden.\n-->\n<span class=\"mat-focus-indicator\"></span>\n\n<span class=\"mat-mdc-button-touch-target\"></span>\n", styles: [".mat-mdc-icon-button{-webkit-user-select:none;user-select:none;display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;z-index:0;overflow:visible;border-radius:50%;flex-shrink:0;text-align:center;width:var(--mdc-icon-button-state-layer-size, 40px);height:var(--mdc-icon-button-state-layer-size, 40px);padding:calc(calc(var(--mdc-icon-button-state-layer-size, 40px) - var(--mdc-icon-button-icon-size, 24px)) / 2);font-size:var(--mdc-icon-button-icon-size, 24px);color:var(--mdc-icon-button-icon-color, var(--mat-sys-on-surface-variant));-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-ripple{overflow:hidden}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:\"\";opacity:0}.mat-mdc-icon-button .mdc-button__label,.mat-mdc-icon-button .mat-icon{z-index:1;position:relative}.mat-mdc-icon-button .mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-icon-button:focus>.mat-focus-indicator::before{content:\"\"}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-icon-button-ripple-color, color-mix(in srgb, var(--mat-sys-on-surface-variant) calc(var(--mat-sys-pressed-state-layer-opacity) * 100%), transparent))}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button.mat-mdc-button-disabled .mat-mdc-button-persistent-ripple::before{background-color:var(--mat-icon-button-disabled-state-layer-color, var(--mat-sys-on-surface-variant))}.mat-mdc-icon-button:hover>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mat-mdc-icon-button.cdk-program-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.cdk-keyboard-focused>.mat-mdc-button-persistent-ripple::before,.mat-mdc-icon-button.mat-mdc-button-disabled-interactive:focus>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mat-mdc-icon-button:active>.mat-mdc-button-persistent-ripple::before{opacity:var(--mat-icon-button-pressed-state-layer-opacity, var(--mat-sys-pressed-state-layer-opacity))}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%);display:var(--mat-icon-button-touch-target-display, block)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button[disabled],.mat-mdc-icon-button.mat-mdc-button-disabled{cursor:default;pointer-events:none;color:var(--mdc-icon-button-disabled-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-mdc-icon-button.mat-mdc-button-disabled-interactive{pointer-events:auto}.mat-mdc-icon-button img,.mat-mdc-icon-button svg{width:var(--mdc-icon-button-icon-size, 24px);height:var(--mdc-icon-button-icon-size, 24px);vertical-align:baseline}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:50%}.mat-mdc-icon-button[hidden]{display:none}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1}", "@media(forced-colors: active){.mat-mdc-button:not(.mdc-button--outlined),.mat-mdc-unelevated-button:not(.mdc-button--outlined),.mat-mdc-raised-button:not(.mdc-button--outlined),.mat-mdc-outlined-button:not(.mdc-button--outlined),.mat-mdc-icon-button.mat-mdc-icon-button,.mat-mdc-outlined-button .mdc-button__ripple{outline:solid 1px}}"] }]
|
|
238
|
-
}], ctorParameters: () => [] });
|
|
239
|
-
// tslint:disable:variable-name
|
|
240
|
-
/**
|
|
241
|
-
* Material Design icon button component for anchor elements. This button displays a single
|
|
242
|
-
* interaction icon that allows users to navigate across different routes or pages.
|
|
243
|
-
* See https://material.io/develop/web/components/buttons/icon-buttons/
|
|
244
|
-
*/
|
|
245
|
-
const MatIconAnchor = MatIconButton;
|
|
246
|
-
|
|
247
|
-
export { MAT_BUTTON_CONFIG as M, MatIconButton as a, MatIconAnchor as b, MatButtonBase as c, MAT_BUTTON_HOST as d };
|
|
248
|
-
//# sourceMappingURL=icon-button-47f1b5d9.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"icon-button-47f1b5d9.mjs","sources":["../../../../../../src/material/button/button-base.ts","../../../../../../src/material/button/icon-button.ts","../../../../../../src/material/button/icon-button.html"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {FocusMonitor, FocusOrigin} from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ANIMATION_MODULE_TYPE,\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n NgZone,\n numberAttribute,\n OnDestroy,\n Renderer2,\n} from '@angular/core';\nimport {_StructuralStylesLoader, MatRippleLoader, ThemePalette} from '../core';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\n\n/** Object that can be used to configure the default options for the button component. */\nexport interface MatButtonConfig {\n /** Whether disabled buttons should be interactive. */\n disabledInteractive?: boolean;\n\n /** Default palette color to apply to buttons. */\n color?: ThemePalette;\n}\n\n/** Injection token that can be used to provide the default options the button component. */\nexport const MAT_BUTTON_CONFIG = new InjectionToken<MatButtonConfig>('MAT_BUTTON_CONFIG');\n\n/** Shared host configuration for all buttons */\nexport const MAT_BUTTON_HOST = {\n '[attr.disabled]': '_getDisabledAttribute()',\n '[attr.aria-disabled]': '_getAriaDisabled()',\n '[class.mat-mdc-button-disabled]': 'disabled',\n '[class.mat-mdc-button-disabled-interactive]': 'disabledInteractive',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n // MDC automatically applies the primary theme color to the button, but we want to support\n // an unthemed version. If color is undefined, apply a CSS class that makes it easy to\n // select and style this \"theme\".\n '[class.mat-unthemed]': '!color',\n // Add a class that applies to all buttons. This makes it easier to target if somebody\n // wants to target all Material buttons.\n '[class.mat-mdc-button-base]': 'true',\n '[class]': 'color ? \"mat-\" + color : \"\"',\n '[attr.tabindex]': '_getTabIndex()',\n};\n\nfunction transformTabIndex(value: unknown): number | undefined {\n return value == null ? undefined : numberAttribute(value);\n}\n\n/** List of classes to add to buttons instances based on host attribute selector. */\nconst HOST_SELECTOR_MDC_CLASS_PAIR: {attribute: string; mdcClasses: string[]}[] = [\n {\n attribute: 'mat-button',\n mdcClasses: ['mdc-button', 'mat-mdc-button'],\n },\n {\n attribute: 'mat-flat-button',\n mdcClasses: ['mdc-button', 'mdc-button--unelevated', 'mat-mdc-unelevated-button'],\n },\n {\n attribute: 'mat-raised-button',\n mdcClasses: ['mdc-button', 'mdc-button--raised', 'mat-mdc-raised-button'],\n },\n {\n attribute: 'mat-stroked-button',\n mdcClasses: ['mdc-button', 'mdc-button--outlined', 'mat-mdc-outlined-button'],\n },\n {\n attribute: 'mat-fab',\n mdcClasses: ['mdc-fab', 'mat-mdc-fab-base', 'mat-mdc-fab'],\n },\n {\n attribute: 'mat-mini-fab',\n mdcClasses: ['mdc-fab', 'mat-mdc-fab-base', 'mdc-fab--mini', 'mat-mdc-mini-fab'],\n },\n {\n attribute: 'mat-icon-button',\n mdcClasses: ['mdc-icon-button', 'mat-mdc-icon-button'],\n },\n];\n\n/** Base class for all buttons. */\n@Directive()\nexport class MatButtonBase implements AfterViewInit, OnDestroy {\n _elementRef = inject(ElementRef);\n _ngZone = inject(NgZone);\n _animationMode = inject(ANIMATION_MODULE_TYPE, {optional: true});\n\n private readonly _focusMonitor = inject(FocusMonitor);\n private _cleanupClick: (() => void) | undefined;\n private _renderer = inject(Renderer2);\n\n /**\n * Handles the lazy creation of the MatButton ripple.\n * Used to improve initial load time of large applications.\n */\n protected _rippleLoader: MatRippleLoader = inject(MatRippleLoader);\n\n /** Whether the button is set on an anchor node. */\n protected _isAnchor: boolean;\n\n /** Whether this button is a FAB. Used to apply the correct class on the ripple. */\n protected _isFab = false;\n\n /**\n * Theme color of the button. This API is supported in M2 themes only, it has\n * no effect in M3 themes. For color customization in M3, see https://material.angular.io/components/button/styling.\n *\n * For information on applying color variants in M3, see\n * https://material.angular.io/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n */\n @Input() color?: string | null;\n\n /** Whether the ripple effect is disabled or not. */\n @Input({transform: booleanAttribute})\n get disableRipple(): boolean {\n return this._disableRipple;\n }\n set disableRipple(value: any) {\n this._disableRipple = value;\n this._updateRippleDisabled();\n }\n private _disableRipple: boolean = false;\n\n /** Whether the button is disabled. */\n @Input({transform: booleanAttribute})\n get disabled(): boolean {\n return this._disabled;\n }\n set disabled(value: any) {\n this._disabled = value;\n this._updateRippleDisabled();\n }\n private _disabled: boolean = false;\n\n /** `aria-disabled` value of the button. */\n @Input({transform: booleanAttribute, alias: 'aria-disabled'})\n ariaDisabled: boolean | undefined;\n\n /**\n * Natively disabled buttons prevent focus and any pointer events from reaching the button.\n * In some scenarios this might not be desirable, because it can prevent users from finding out\n * why the button is disabled (e.g. via tooltip).\n *\n * Enabling this input will change the button so that it is styled to be disabled and will be\n * marked as `aria-disabled`, but it will allow the button to receive events and focus.\n *\n * Note that by enabling this, you need to set the `tabindex` yourself if the button isn't\n * meant to be tabbable and you have to prevent the button action (e.g. form submissions).\n */\n @Input({transform: booleanAttribute})\n disabledInteractive: boolean;\n\n /** Tab index for the button. */\n @Input({transform: transformTabIndex})\n tabIndex: number;\n\n /**\n * Backwards-compatibility input that handles pre-existing `[tabindex]` bindings.\n * @docs-private\n */\n @Input({alias: 'tabindex', transform: transformTabIndex})\n set _tabindex(value: number) {\n this.tabIndex = value;\n }\n\n constructor(...args: unknown[]);\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const config = inject(MAT_BUTTON_CONFIG, {optional: true});\n const element: HTMLElement = this._elementRef.nativeElement;\n const classList = (element as HTMLElement).classList;\n\n this._isAnchor = element.tagName === 'A';\n this.disabledInteractive = config?.disabledInteractive ?? false;\n this.color = config?.color ?? null;\n this._rippleLoader?.configureRipple(element, {className: 'mat-mdc-button-ripple'});\n\n // For each of the variant selectors that is present in the button's host\n // attributes, add the correct corresponding MDC classes.\n for (const {attribute, mdcClasses} of HOST_SELECTOR_MDC_CLASS_PAIR) {\n if (element.hasAttribute(attribute)) {\n classList.add(...mdcClasses);\n }\n }\n }\n\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n\n // Some internal tests depend on the timing of this,\n // otherwise we could bind it in the constructor.\n if (this._isAnchor) {\n this._setupAsAnchor();\n }\n }\n\n ngOnDestroy() {\n this._cleanupClick?.();\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._rippleLoader?.destroyRipple(this._elementRef.nativeElement);\n }\n\n /** Focuses the button. */\n focus(origin: FocusOrigin = 'program', options?: FocusOptions): void {\n if (origin) {\n this._focusMonitor.focusVia(this._elementRef.nativeElement, origin, options);\n } else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n\n protected _getAriaDisabled() {\n if (this.ariaDisabled != null) {\n return this.ariaDisabled;\n }\n\n if (this._isAnchor) {\n return this.disabled || null;\n }\n\n return this.disabled && this.disabledInteractive ? true : null;\n }\n\n protected _getDisabledAttribute() {\n return this.disabledInteractive || !this.disabled ? null : true;\n }\n\n private _updateRippleDisabled(): void {\n this._rippleLoader?.setDisabled(\n this._elementRef.nativeElement,\n this.disableRipple || this.disabled,\n );\n }\n\n protected _getTabIndex() {\n if (this._isAnchor) {\n return this.disabled && !this.disabledInteractive ? -1 : this.tabIndex;\n }\n return this.tabIndex;\n }\n\n private _setupAsAnchor() {\n this._cleanupClick = this._ngZone.runOutsideAngular(() =>\n this._renderer.listen(this._elementRef.nativeElement, 'click', (event: Event) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }),\n );\n }\n}\n\n// tslint:disable:variable-name\n/**\n * Anchor button base.\n */\nexport const MatAnchorBase = MatButtonBase;\nexport type MatAnchorBase = MatButtonBase;\n// tslint:enable:variable-name\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\nimport {MAT_BUTTON_HOST, MatButtonBase} from './button-base';\n\n/**\n * Material Design icon button component. This type of button displays a single interactive icon for\n * users to perform an action.\n * See https://material.io/develop/web/components/buttons/icon-buttons/\n */\n@Component({\n selector: `button[mat-icon-button], a[mat-icon-button]`,\n templateUrl: 'icon-button.html',\n styleUrls: ['icon-button.css', 'button-high-contrast.css'],\n host: MAT_BUTTON_HOST,\n exportAs: 'matButton, matAnchor',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatIconButton extends MatButtonBase {\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n this._rippleLoader.configureRipple(this._elementRef.nativeElement, {centered: true});\n }\n}\n\n// tslint:disable:variable-name\n/**\n * Material Design icon button component for anchor elements. This button displays a single\n * interaction icon that allows users to navigate across different routes or pages.\n * See https://material.io/develop/web/components/buttons/icon-buttons/\n */\nexport const MatIconAnchor = MatIconButton;\nexport type MatIconAnchor = MatIconButton;\n// tslint:enable:variable-name\n","<span class=\"mat-mdc-button-persistent-ripple mdc-icon-button__ripple\"></span>\n\n<ng-content></ng-content>\n\n<!--\n The indicator can't be directly on the button, because MDC uses ::before for high contrast\n indication and it can't be on the ripple, because it has a border radius and overflow: hidden.\n-->\n<span class=\"mat-focus-indicator\"></span>\n\n<span class=\"mat-mdc-button-touch-target\"></span>\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-harness-ed59decc.mjs","sources":["../../../../../../src/material/input/testing/input-harness.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {HarnessPredicate, parallel} from '@angular/cdk/testing';\nimport {MatFormFieldControlHarness} from '../../form-field/testing/control';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {InputHarnessFilters} from './input-harness-filters';\n\n/** Harness for interacting with a standard Material inputs in tests. */\nexport class MatInputHarness extends MatFormFieldControlHarness {\n // TODO: We do not want to handle `select` elements with `matNativeControl` because\n // not all methods of this harness work reasonably for native select elements.\n // For more details. See: https://github.com/angular/components/pull/18221.\n static hostSelector = '[matInput], input[matNativeControl], textarea[matNativeControl]';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatInputHarness` that meets\n * certain criteria.\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(options: InputHarnessFilters = {}): HarnessPredicate<MatInputHarness> {\n return new HarnessPredicate(MatInputHarness, options)\n .addOption('value', options.value, (harness, value) => {\n return HarnessPredicate.stringMatches(harness.getValue(), value);\n })\n .addOption('placeholder', options.placeholder, (harness, placeholder) => {\n return HarnessPredicate.stringMatches(harness.getPlaceholder(), placeholder);\n });\n }\n\n /** Whether the input is disabled. */\n async isDisabled(): Promise<boolean> {\n const host = await this.host();\n const disabled = await host.getAttribute('disabled');\n\n if (disabled !== null) {\n return coerceBooleanProperty(disabled);\n }\n\n return (await host.getAttribute('aria-disabled')) === 'true';\n }\n\n /** Whether the input is required. */\n async isRequired(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('required');\n }\n\n /** Whether the input is readonly. */\n async isReadonly(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('readOnly');\n }\n\n /** Gets the value of the input. */\n async getValue(): Promise<string> {\n // The \"value\" property of the native input is never undefined.\n return await (await this.host()).getProperty<string>('value');\n }\n\n /** Gets the name of the input. */\n async getName(): Promise<string> {\n // The \"name\" property of the native input is never undefined.\n return await (await this.host()).getProperty<string>('name');\n }\n\n /**\n * Gets the type of the input. Returns \"textarea\" if the input is\n * a textarea.\n */\n async getType(): Promise<string> {\n // The \"type\" property of the native input is never undefined.\n return await (await this.host()).getProperty<string>('type');\n }\n\n /** Gets the placeholder of the input. */\n async getPlaceholder(): Promise<string> {\n const host = await this.host();\n const [nativePlaceholder, fallback] = await parallel(() => [\n host.getProperty('placeholder'),\n host.getAttribute('data-placeholder'),\n ]);\n return nativePlaceholder || fallback || '';\n }\n\n /** Gets the id of the input. */\n async getId(): Promise<string> {\n // The input directive always assigns a unique id to the input in\n // case no id has been explicitly specified.\n return await (await this.host()).getProperty<string>('id');\n }\n\n /**\n * Focuses the input and returns a promise that indicates when the\n * action is complete.\n */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /**\n * Blurs the input and returns a promise that indicates when the\n * action is complete.\n */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the input is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n\n /**\n * Sets the value of the input. The value will be set by simulating\n * keypresses that correspond to the given value.\n */\n async setValue(newValue: string): Promise<void> {\n const inputEl = await this.host();\n await inputEl.clear();\n // We don't want to send keys for the value if the value is an empty\n // string in order to clear the value. Sending keys with an empty string\n // still results in unnecessary focus events.\n if (newValue) {\n await inputEl.sendKeys(newValue);\n }\n\n // Some input types won't respond to key presses (e.g. `color`) so to be sure that the\n // value is set, we also set the property after the keyboard sequence. Note that we don't\n // want to do it before, because it can cause the value to be entered twice.\n await inputEl.setInputValue(newValue);\n }\n}\n"],"names":[],"mappings":"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"}
|