@angular/material 19.0.0-next.8 → 19.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_index.scss +1 -2
- package/autocomplete/_autocomplete-theme.scss +37 -24
- package/autocomplete/index.d.ts +5 -6
- package/badge/_badge-theme.scss +38 -24
- package/bottom-sheet/_bottom-sheet-theme.scss +32 -20
- package/button/_button-theme.scss +229 -105
- package/button/_fab-theme.scss +95 -44
- package/button/_icon-button-theme.scss +38 -25
- package/button/index.d.ts +3 -3
- package/button-toggle/_button-toggle-theme.scss +62 -37
- package/card/_card-theme.scss +79 -38
- package/card/index.d.ts +2 -3
- package/checkbox/_checkbox-theme.scss +16 -10
- package/chips/_chips-theme.scss +64 -30
- package/core/_core-theme.scss +55 -37
- package/core/_core.scss +3 -6
- package/core/option/_optgroup-theme.scss +29 -18
- package/core/option/_option-theme.scss +34 -21
- package/core/ripple/_ripple-theme.scss +33 -21
- package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +49 -23
- package/core/theming/_config-validation.scss +4 -4
- package/core/theming/_definition.scss +12 -2
- package/core/tokens/_m3-system.scss +86 -42
- package/core/tokens/_token-utils.scss +91 -34
- package/core/tokens/m2/mat/_badge.scss +12 -3
- package/core/tokens/m2/mdc/_radio.scss +1 -1
- package/core/tokens/m3/definitions/_md-comp-elevated-card.scss +1 -1
- package/core/tokens/m3/mat/_badge.scss +6 -3
- package/datepicker/_datepicker-theme.scss +53 -32
- package/datepicker/index.d.ts +33 -34
- package/dialog/_dialog-theme.scss +46 -23
- package/divider/_divider-theme.scss +28 -17
- package/expansion/_expansion-theme.scss +36 -24
- package/fesm2022/autocomplete/testing.mjs +2 -5
- package/fesm2022/autocomplete/testing.mjs.map +1 -1
- package/fesm2022/autocomplete.mjs +225 -148
- package/fesm2022/autocomplete.mjs.map +1 -1
- package/fesm2022/badge/testing.mjs +2 -5
- package/fesm2022/badge/testing.mjs.map +1 -1
- package/fesm2022/badge.mjs +45 -35
- package/fesm2022/badge.mjs.map +1 -1
- package/fesm2022/bottom-sheet/testing.mjs +1 -1
- package/fesm2022/bottom-sheet/testing.mjs.map +1 -1
- package/fesm2022/bottom-sheet.mjs +80 -58
- package/fesm2022/bottom-sheet.mjs.map +1 -1
- package/fesm2022/button/testing.mjs +2 -2
- package/fesm2022/button/testing.mjs.map +1 -1
- package/fesm2022/button-toggle/testing.mjs +4 -7
- package/fesm2022/button-toggle/testing.mjs.map +1 -1
- package/fesm2022/button-toggle.mjs +82 -45
- package/fesm2022/button-toggle.mjs.map +1 -1
- package/fesm2022/button.mjs +106 -79
- package/fesm2022/button.mjs.map +1 -1
- package/fesm2022/card/testing.mjs +3 -6
- package/fesm2022/card/testing.mjs.map +1 -1
- package/fesm2022/card.mjs +56 -69
- package/fesm2022/card.mjs.map +1 -1
- package/fesm2022/checkbox/testing.mjs +4 -7
- package/fesm2022/checkbox/testing.mjs.map +1 -1
- package/fesm2022/checkbox.mjs +104 -62
- package/fesm2022/checkbox.mjs.map +1 -1
- package/fesm2022/chips/testing.mjs +11 -14
- package/fesm2022/chips/testing.mjs.map +1 -1
- package/fesm2022/chips.mjs +322 -276
- package/fesm2022/chips.mjs.map +1 -1
- package/fesm2022/core/testing.mjs +5 -11
- package/fesm2022/core/testing.mjs.map +1 -1
- package/fesm2022/core.mjs +242 -187
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/datepicker/testing.mjs +13 -22
- package/fesm2022/datepicker/testing.mjs.map +1 -1
- package/fesm2022/datepicker.mjs +827 -582
- package/fesm2022/datepicker.mjs.map +1 -1
- package/fesm2022/dialog/testing.mjs +15 -10
- package/fesm2022/dialog/testing.mjs.map +1 -1
- package/fesm2022/dialog.mjs +221 -156
- package/fesm2022/dialog.mjs.map +1 -1
- package/fesm2022/divider/testing.mjs +1 -1
- package/fesm2022/divider/testing.mjs.map +1 -1
- package/fesm2022/divider.mjs +10 -12
- package/fesm2022/divider.mjs.map +1 -1
- package/fesm2022/expansion/testing.mjs +7 -10
- package/fesm2022/expansion/testing.mjs.map +1 -1
- package/fesm2022/expansion.mjs +86 -80
- package/fesm2022/expansion.mjs.map +1 -1
- package/fesm2022/form-field/testing.mjs +12 -15
- package/fesm2022/form-field/testing.mjs.map +1 -1
- package/fesm2022/form-field.mjs +179 -132
- package/fesm2022/form-field.mjs.map +1 -1
- package/fesm2022/grid-list/testing.mjs +11 -17
- package/fesm2022/grid-list/testing.mjs.map +1 -1
- package/fesm2022/grid-list.mjs +75 -56
- package/fesm2022/grid-list.mjs.map +1 -1
- package/fesm2022/icon/testing.mjs +8 -8
- package/fesm2022/icon/testing.mjs.map +1 -1
- package/fesm2022/icon.mjs +66 -46
- package/fesm2022/icon.mjs.map +1 -1
- package/fesm2022/input/testing.mjs +3 -3
- package/fesm2022/input/testing.mjs.map +1 -1
- package/fesm2022/input.mjs +103 -72
- package/fesm2022/input.mjs.map +1 -1
- package/fesm2022/list/testing.mjs +21 -38
- package/fesm2022/list/testing.mjs.map +1 -1
- package/fesm2022/list.mjs +197 -195
- package/fesm2022/list.mjs.map +1 -1
- package/fesm2022/menu/testing.mjs +3 -6
- package/fesm2022/menu/testing.mjs.map +1 -1
- package/fesm2022/menu.mjs +178 -127
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/paginator/testing.mjs +10 -13
- package/fesm2022/paginator/testing.mjs.map +1 -1
- package/fesm2022/paginator.mjs +83 -58
- package/fesm2022/paginator.mjs.map +1 -1
- package/fesm2022/progress-bar/testing.mjs +1 -1
- package/fesm2022/progress-bar/testing.mjs.map +1 -1
- package/fesm2022/progress-bar.mjs +36 -35
- package/fesm2022/progress-bar.mjs.map +1 -1
- package/fesm2022/progress-spinner/testing.mjs +1 -1
- package/fesm2022/progress-spinner/testing.mjs.map +1 -1
- package/fesm2022/progress-spinner.mjs +28 -14
- package/fesm2022/progress-spinner.mjs.map +1 -1
- package/fesm2022/radio/testing.mjs +6 -12
- package/fesm2022/radio/testing.mjs.map +1 -1
- package/fesm2022/radio.mjs +123 -87
- package/fesm2022/radio.mjs.map +1 -1
- package/fesm2022/select/testing.mjs +6 -9
- package/fesm2022/select/testing.mjs.map +1 -1
- package/fesm2022/select.mjs +219 -182
- package/fesm2022/select.mjs.map +1 -1
- package/fesm2022/sidenav/testing.mjs +6 -6
- package/fesm2022/sidenav/testing.mjs.map +1 -1
- package/fesm2022/sidenav.mjs +136 -125
- package/fesm2022/sidenav.mjs.map +1 -1
- package/fesm2022/slide-toggle/testing.mjs +3 -6
- package/fesm2022/slide-toggle/testing.mjs.map +1 -1
- package/fesm2022/slide-toggle.mjs +77 -47
- package/fesm2022/slide-toggle.mjs.map +1 -1
- package/fesm2022/slider/testing.mjs +2 -2
- package/fesm2022/slider/testing.mjs.map +1 -1
- package/fesm2022/slider.mjs +262 -194
- package/fesm2022/slider.mjs.map +1 -1
- package/fesm2022/snack-bar/testing.mjs +4 -7
- package/fesm2022/snack-bar/testing.mjs.map +1 -1
- package/fesm2022/snack-bar.mjs +143 -111
- package/fesm2022/snack-bar.mjs.map +1 -1
- package/fesm2022/sort/testing.mjs +3 -6
- package/fesm2022/sort/testing.mjs.map +1 -1
- package/fesm2022/sort.mjs +94 -74
- package/fesm2022/sort.mjs.map +1 -1
- package/fesm2022/stepper/testing.mjs +4 -4
- package/fesm2022/stepper/testing.mjs.map +1 -1
- package/fesm2022/stepper.mjs +146 -113
- package/fesm2022/stepper.mjs.map +1 -1
- package/fesm2022/table/testing.mjs +13 -25
- package/fesm2022/table/testing.mjs.map +1 -1
- package/fesm2022/table.mjs +183 -194
- package/fesm2022/table.mjs.map +1 -1
- package/fesm2022/tabs/testing.mjs +5 -5
- package/fesm2022/tabs/testing.mjs.map +1 -1
- package/fesm2022/tabs.mjs +329 -251
- package/fesm2022/tabs.mjs.map +1 -1
- package/fesm2022/timepicker/testing.mjs +7 -16
- package/fesm2022/timepicker/testing.mjs.map +1 -1
- package/fesm2022/timepicker.mjs +160 -155
- package/fesm2022/timepicker.mjs.map +1 -1
- package/fesm2022/toolbar/testing.mjs +2 -5
- package/fesm2022/toolbar/testing.mjs.map +1 -1
- package/fesm2022/toolbar.mjs +26 -17
- package/fesm2022/toolbar.mjs.map +1 -1
- package/fesm2022/tooltip/testing.mjs +6 -9
- package/fesm2022/tooltip/testing.mjs.map +1 -1
- package/fesm2022/tooltip.mjs +97 -74
- package/fesm2022/tooltip.mjs.map +1 -1
- package/fesm2022/tree/testing.mjs +3 -6
- package/fesm2022/tree/testing.mjs.map +1 -1
- package/fesm2022/tree.mjs +57 -61
- package/fesm2022/tree.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +114 -61
- package/form-field/index.d.ts +9 -10
- package/grid-list/_grid-list-theme.scss +25 -15
- package/icon/_icon-theme.scss +22 -14
- package/input/_input-theme.scss +18 -11
- package/list/_list-theme.scss +89 -47
- package/list/index.d.ts +20 -21
- package/menu/_menu-theme.scss +33 -21
- package/menu/index.d.ts +8 -9
- package/package.json +2 -2
- package/paginator/_paginator-theme.scss +39 -23
- package/prebuilt-themes/azure-blue.css +1 -1
- package/prebuilt-themes/cyan-orange.css +1 -1
- package/prebuilt-themes/deeppurple-amber.css +1 -1
- package/prebuilt-themes/indigo-pink.css +1 -1
- package/prebuilt-themes/magenta-violet.css +1 -1
- package/prebuilt-themes/pink-bluegrey.css +1 -1
- package/prebuilt-themes/purple-green.css +1 -1
- package/prebuilt-themes/rose-red.css +1 -1
- package/progress-bar/_progress-bar-theme.scss +20 -16
- package/progress-spinner/_progress-spinner-theme.scss +41 -25
- package/progress-spinner/index.d.ts +3 -4
- package/radio/_radio-theme.scss +60 -32
- package/radio/index.d.ts +2 -3
- package/schematics/collection.json +3 -3
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-add/theming/create-custom-theme.js +1 -6
- package/schematics/ng-add/theming/create-custom-theme.mjs +1 -6
- package/schematics/ng-generate/{m3-theme → theme-color}/index_bundled.js +480 -288
- package/schematics/ng-generate/theme-color/index_bundled.js.map +7 -0
- package/schematics/ng-generate/{m3-theme → theme-color}/schema.json +7 -13
- package/schematics/ng-update/index_bundled.js +6 -1
- package/schematics/ng-update/index_bundled.js.map +1 -1
- package/select/_select-theme.scss +38 -25
- package/select/index.d.ts +6 -7
- package/sidenav/_sidenav-theme.scss +28 -17
- package/slide-toggle/_slide-toggle-theme.scss +52 -28
- package/slider/_slider-theme.scss +62 -38
- package/snack-bar/_snack-bar-theme.scss +29 -17
- package/sort/_sort-theme.scss +33 -21
- package/stepper/_stepper-theme.scss +40 -27
- package/stepper/index.d.ts +14 -15
- package/table/_table-theme.scss +36 -23
- package/tabs/_tabs-theme.scss +97 -50
- package/tabs/index.d.ts +2 -2
- package/timepicker/_timepicker-theme.scss +37 -24
- package/toolbar/_toolbar-theme.scss +35 -22
- package/tooltip/_tooltip-theme.scss +18 -15
- package/tooltip/index.d.ts +5 -6
- package/tree/_tree-theme.scss +33 -21
- package/schematics/ng-generate/m3-theme/index_bundled.js.map +0 -7
package/fesm2022/datepicker.mjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { CdkMonitorFocus, CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
|
|
2
2
|
import { Overlay, FlexibleConnectedPositionStrategy, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
3
3
|
import { ComponentPortal, CdkPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';
|
|
4
|
-
import { NgClass, DOCUMENT, CommonModule } from '@angular/common';
|
|
5
4
|
import * as i0 from '@angular/core';
|
|
6
5
|
import { Injectable, inject, ElementRef, NgZone, EventEmitter, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, ChangeDetectorRef, ViewChild, ViewContainerRef, booleanAttribute, Directive, forwardRef, signal, HostAttributeToken, ContentChild, TemplateRef, NgModule } from '@angular/core';
|
|
7
6
|
import { MatButton, MatIconButton, MatButtonModule } from '@angular/material/button';
|
|
@@ -12,7 +11,8 @@ import { Subject, Subscription, merge, of } from 'rxjs';
|
|
|
12
11
|
import { ESCAPE, hasModifierKey, SPACE, ENTER, PAGE_DOWN, PAGE_UP, END, HOME, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW, BACKSPACE } from '@angular/cdk/keycodes';
|
|
13
12
|
import { Directionality } from '@angular/cdk/bidi';
|
|
14
13
|
import { normalizePassiveListenerOptions, Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
|
|
15
|
-
import {
|
|
14
|
+
import { NgClass, DOCUMENT } from '@angular/common';
|
|
15
|
+
import { _CdkPrivateStyleLoader, _VisuallyHiddenLoader } from '@angular/cdk/private';
|
|
16
16
|
import { startWith, take, filter } from 'rxjs/operators';
|
|
17
17
|
import { coerceStringArray } from '@angular/cdk/coercion';
|
|
18
18
|
import { trigger, transition, animate, keyframes, style, state } from '@angular/animations';
|
|
@@ -29,47 +29,45 @@ function createMissingDateImplError(provider) {
|
|
|
29
29
|
|
|
30
30
|
/** Datepicker data that requires internationalization. */
|
|
31
31
|
class MatDatepickerIntl {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.endDateLabel = 'End date';
|
|
72
|
-
}
|
|
32
|
+
/**
|
|
33
|
+
* Stream that emits whenever the labels here are changed. Use this to notify
|
|
34
|
+
* components if the labels have changed after initialization.
|
|
35
|
+
*/
|
|
36
|
+
changes = new Subject();
|
|
37
|
+
/** A label for the calendar popup (used by screen readers). */
|
|
38
|
+
calendarLabel = 'Calendar';
|
|
39
|
+
/** A label for the button used to open the calendar popup (used by screen readers). */
|
|
40
|
+
openCalendarLabel = 'Open calendar';
|
|
41
|
+
/** Label for the button used to close the calendar popup. */
|
|
42
|
+
closeCalendarLabel = 'Close calendar';
|
|
43
|
+
/** A label for the previous month button (used by screen readers). */
|
|
44
|
+
prevMonthLabel = 'Previous month';
|
|
45
|
+
/** A label for the next month button (used by screen readers). */
|
|
46
|
+
nextMonthLabel = 'Next month';
|
|
47
|
+
/** A label for the previous year button (used by screen readers). */
|
|
48
|
+
prevYearLabel = 'Previous year';
|
|
49
|
+
/** A label for the next year button (used by screen readers). */
|
|
50
|
+
nextYearLabel = 'Next year';
|
|
51
|
+
/** A label for the previous multi-year button (used by screen readers). */
|
|
52
|
+
prevMultiYearLabel = 'Previous 24 years';
|
|
53
|
+
/** A label for the next multi-year button (used by screen readers). */
|
|
54
|
+
nextMultiYearLabel = 'Next 24 years';
|
|
55
|
+
/** A label for the 'switch to month view' button (used by screen readers). */
|
|
56
|
+
switchToMonthViewLabel = 'Choose date';
|
|
57
|
+
/** A label for the 'switch to year view' button (used by screen readers). */
|
|
58
|
+
switchToMultiYearViewLabel = 'Choose month and year';
|
|
59
|
+
/**
|
|
60
|
+
* A label for the first date of a range of dates (used by screen readers).
|
|
61
|
+
* @deprecated Provide your own internationalization string.
|
|
62
|
+
* @breaking-change 17.0.0
|
|
63
|
+
*/
|
|
64
|
+
startDateLabel = 'Start date';
|
|
65
|
+
/**
|
|
66
|
+
* A label for the last date of a range of dates (used by screen readers).
|
|
67
|
+
* @deprecated Provide your own internationalization string.
|
|
68
|
+
* @breaking-change 17.0.0
|
|
69
|
+
*/
|
|
70
|
+
endDateLabel = 'End date';
|
|
73
71
|
/** Formats a range of years (used for visuals). */
|
|
74
72
|
formatYearRange(start, end) {
|
|
75
73
|
return `${start} \u2013 ${end}`;
|
|
@@ -78,10 +76,10 @@ class MatDatepickerIntl {
|
|
|
78
76
|
formatYearRangeLabel(start, end) {
|
|
79
77
|
return `${start} to ${end}`;
|
|
80
78
|
}
|
|
81
|
-
static
|
|
82
|
-
static
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
80
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, providedIn: 'root' });
|
|
83
81
|
}
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, decorators: [{
|
|
85
83
|
type: Injectable,
|
|
86
84
|
args: [{ providedIn: 'root' }]
|
|
87
85
|
}] });
|
|
@@ -92,6 +90,14 @@ let uniqueIdCounter$1 = 0;
|
|
|
92
90
|
* @docs-private
|
|
93
91
|
*/
|
|
94
92
|
class MatCalendarCell {
|
|
93
|
+
value;
|
|
94
|
+
displayValue;
|
|
95
|
+
ariaLabel;
|
|
96
|
+
enabled;
|
|
97
|
+
cssClasses;
|
|
98
|
+
compareValue;
|
|
99
|
+
rawValue;
|
|
100
|
+
id = uniqueIdCounter$1++;
|
|
95
101
|
constructor(value, displayValue, ariaLabel, enabled, cssClasses = {}, compareValue = value, rawValue) {
|
|
96
102
|
this.value = value;
|
|
97
103
|
this.displayValue = displayValue;
|
|
@@ -100,7 +106,6 @@ class MatCalendarCell {
|
|
|
100
106
|
this.cssClasses = cssClasses;
|
|
101
107
|
this.compareValue = compareValue;
|
|
102
108
|
this.rawValue = rawValue;
|
|
103
|
-
this.id = uniqueIdCounter$1++;
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
let calendarBodyId = 1;
|
|
@@ -121,157 +126,83 @@ const passiveEventOptions = normalizePassiveListenerOptions({ passive: true });
|
|
|
121
126
|
* @docs-private
|
|
122
127
|
*/
|
|
123
128
|
class MatCalendarBody {
|
|
129
|
+
_elementRef = inject(ElementRef);
|
|
130
|
+
_ngZone = inject(NgZone);
|
|
131
|
+
_platform = inject(Platform);
|
|
132
|
+
/**
|
|
133
|
+
* Used to skip the next focus event when rendering the preview range.
|
|
134
|
+
* We need a flag like this, because some browsers fire focus events asynchronously.
|
|
135
|
+
*/
|
|
136
|
+
_skipNextFocus;
|
|
137
|
+
/**
|
|
138
|
+
* Used to focus the active cell after change detection has run.
|
|
139
|
+
*/
|
|
140
|
+
_focusActiveCellAfterViewChecked = false;
|
|
141
|
+
/** The label for the table. (e.g. "Jan 2017"). */
|
|
142
|
+
label;
|
|
143
|
+
/** The cells to display in the table. */
|
|
144
|
+
rows;
|
|
145
|
+
/** The value in the table that corresponds to today. */
|
|
146
|
+
todayValue;
|
|
147
|
+
/** Start value of the selected date range. */
|
|
148
|
+
startValue;
|
|
149
|
+
/** End value of the selected date range. */
|
|
150
|
+
endValue;
|
|
151
|
+
/** The minimum number of free cells needed to fit the label in the first row. */
|
|
152
|
+
labelMinRequiredCells;
|
|
153
|
+
/** The number of columns in the table. */
|
|
154
|
+
numCols = 7;
|
|
155
|
+
/** The cell number of the active cell in the table. */
|
|
156
|
+
activeCell = 0;
|
|
124
157
|
ngAfterViewChecked() {
|
|
125
158
|
if (this._focusActiveCellAfterViewChecked) {
|
|
126
159
|
this._focusActiveCell();
|
|
127
160
|
this._focusActiveCellAfterViewChecked = false;
|
|
128
161
|
}
|
|
129
162
|
}
|
|
163
|
+
/** Whether a range is being selected. */
|
|
164
|
+
isRange = false;
|
|
165
|
+
/**
|
|
166
|
+
* The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be
|
|
167
|
+
* maintained even as the table resizes.
|
|
168
|
+
*/
|
|
169
|
+
cellAspectRatio = 1;
|
|
170
|
+
/** Start of the comparison range. */
|
|
171
|
+
comparisonStart;
|
|
172
|
+
/** End of the comparison range. */
|
|
173
|
+
comparisonEnd;
|
|
174
|
+
/** Start of the preview range. */
|
|
175
|
+
previewStart = null;
|
|
176
|
+
/** End of the preview range. */
|
|
177
|
+
previewEnd = null;
|
|
178
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
179
|
+
startDateAccessibleName;
|
|
180
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
181
|
+
endDateAccessibleName;
|
|
182
|
+
/** Emits when a new value is selected. */
|
|
183
|
+
selectedValueChange = new EventEmitter();
|
|
184
|
+
/** Emits when the preview has changed as a result of a user action. */
|
|
185
|
+
previewChange = new EventEmitter();
|
|
186
|
+
activeDateChange = new EventEmitter();
|
|
187
|
+
/** Emits the date at the possible start of a drag event. */
|
|
188
|
+
dragStarted = new EventEmitter();
|
|
189
|
+
/** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */
|
|
190
|
+
dragEnded = new EventEmitter();
|
|
191
|
+
/** The number of blank cells to put at the beginning for the first row. */
|
|
192
|
+
_firstRowOffset;
|
|
193
|
+
/** Padding for the individual date cells. */
|
|
194
|
+
_cellPadding;
|
|
195
|
+
/** Width of an individual cell. */
|
|
196
|
+
_cellWidth;
|
|
197
|
+
_didDragSinceMouseDown = false;
|
|
198
|
+
_injector = inject(Injector);
|
|
199
|
+
/**
|
|
200
|
+
* Tracking function for rows based on their identity. Ideally we would use some sort of
|
|
201
|
+
* key on the row, but that would require a breaking change for the `rows` input. We don't
|
|
202
|
+
* use the built-in identity tracking, because it logs warnings.
|
|
203
|
+
*/
|
|
204
|
+
_trackRow = (row) => row;
|
|
130
205
|
constructor() {
|
|
131
|
-
this._elementRef = inject(ElementRef);
|
|
132
|
-
this._ngZone = inject(NgZone);
|
|
133
|
-
this._platform = inject(Platform);
|
|
134
|
-
/**
|
|
135
|
-
* Used to focus the active cell after change detection has run.
|
|
136
|
-
*/
|
|
137
|
-
this._focusActiveCellAfterViewChecked = false;
|
|
138
|
-
/** The number of columns in the table. */
|
|
139
|
-
this.numCols = 7;
|
|
140
|
-
/** The cell number of the active cell in the table. */
|
|
141
|
-
this.activeCell = 0;
|
|
142
|
-
/** Whether a range is being selected. */
|
|
143
|
-
this.isRange = false;
|
|
144
|
-
/**
|
|
145
|
-
* The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be
|
|
146
|
-
* maintained even as the table resizes.
|
|
147
|
-
*/
|
|
148
|
-
this.cellAspectRatio = 1;
|
|
149
|
-
/** Start of the preview range. */
|
|
150
|
-
this.previewStart = null;
|
|
151
|
-
/** End of the preview range. */
|
|
152
|
-
this.previewEnd = null;
|
|
153
|
-
/** Emits when a new value is selected. */
|
|
154
|
-
this.selectedValueChange = new EventEmitter();
|
|
155
|
-
/** Emits when the preview has changed as a result of a user action. */
|
|
156
|
-
this.previewChange = new EventEmitter();
|
|
157
|
-
this.activeDateChange = new EventEmitter();
|
|
158
|
-
/** Emits the date at the possible start of a drag event. */
|
|
159
|
-
this.dragStarted = new EventEmitter();
|
|
160
|
-
/** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */
|
|
161
|
-
this.dragEnded = new EventEmitter();
|
|
162
|
-
this._didDragSinceMouseDown = false;
|
|
163
|
-
this._injector = inject(Injector);
|
|
164
|
-
/**
|
|
165
|
-
* Tracking function for rows based on their identity. Ideally we would use some sort of
|
|
166
|
-
* key on the row, but that would require a breaking change for the `rows` input. We don't
|
|
167
|
-
* use the built-in identity tracking, because it logs warnings.
|
|
168
|
-
*/
|
|
169
|
-
this._trackRow = (row) => row;
|
|
170
|
-
/**
|
|
171
|
-
* Event handler for when the user enters an element
|
|
172
|
-
* inside the calendar body (e.g. by hovering in or focus).
|
|
173
|
-
*/
|
|
174
|
-
this._enterHandler = (event) => {
|
|
175
|
-
if (this._skipNextFocus && event.type === 'focus') {
|
|
176
|
-
this._skipNextFocus = false;
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
// We only need to hit the zone when we're selecting a range.
|
|
180
|
-
if (event.target && this.isRange) {
|
|
181
|
-
const cell = this._getCellFromElement(event.target);
|
|
182
|
-
if (cell) {
|
|
183
|
-
this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
this._touchmoveHandler = (event) => {
|
|
188
|
-
if (!this.isRange)
|
|
189
|
-
return;
|
|
190
|
-
const target = getActualTouchTarget(event);
|
|
191
|
-
const cell = target ? this._getCellFromElement(target) : null;
|
|
192
|
-
if (target !== event.target) {
|
|
193
|
-
this._didDragSinceMouseDown = true;
|
|
194
|
-
}
|
|
195
|
-
// If the initial target of the touch is a date cell, prevent default so
|
|
196
|
-
// that the move is not handled as a scroll.
|
|
197
|
-
if (getCellElement(event.target)) {
|
|
198
|
-
event.preventDefault();
|
|
199
|
-
}
|
|
200
|
-
this._ngZone.run(() => this.previewChange.emit({ value: cell?.enabled ? cell : null, event }));
|
|
201
|
-
};
|
|
202
|
-
/**
|
|
203
|
-
* Event handler for when the user's pointer leaves an element
|
|
204
|
-
* inside the calendar body (e.g. by hovering out or blurring).
|
|
205
|
-
*/
|
|
206
|
-
this._leaveHandler = (event) => {
|
|
207
|
-
// We only need to hit the zone when we're selecting a range.
|
|
208
|
-
if (this.previewEnd !== null && this.isRange) {
|
|
209
|
-
if (event.type !== 'blur') {
|
|
210
|
-
this._didDragSinceMouseDown = true;
|
|
211
|
-
}
|
|
212
|
-
// Only reset the preview end value when leaving cells. This looks better, because
|
|
213
|
-
// we have a gap between the cells and the rows and we don't want to remove the
|
|
214
|
-
// range just for it to show up again when the user moves a few pixels to the side.
|
|
215
|
-
if (event.target &&
|
|
216
|
-
this._getCellFromElement(event.target) &&
|
|
217
|
-
!(event.relatedTarget &&
|
|
218
|
-
this._getCellFromElement(event.relatedTarget))) {
|
|
219
|
-
this._ngZone.run(() => this.previewChange.emit({ value: null, event }));
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
};
|
|
223
|
-
/**
|
|
224
|
-
* Triggered on mousedown or touchstart on a date cell.
|
|
225
|
-
* Respsonsible for starting a drag sequence.
|
|
226
|
-
*/
|
|
227
|
-
this._mousedownHandler = (event) => {
|
|
228
|
-
if (!this.isRange)
|
|
229
|
-
return;
|
|
230
|
-
this._didDragSinceMouseDown = false;
|
|
231
|
-
// Begin a drag if a cell within the current range was targeted.
|
|
232
|
-
const cell = event.target && this._getCellFromElement(event.target);
|
|
233
|
-
if (!cell || !this._isInRange(cell.compareValue)) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
this._ngZone.run(() => {
|
|
237
|
-
this.dragStarted.emit({
|
|
238
|
-
value: cell.rawValue,
|
|
239
|
-
event,
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
};
|
|
243
|
-
/** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */
|
|
244
|
-
this._mouseupHandler = (event) => {
|
|
245
|
-
if (!this.isRange)
|
|
246
|
-
return;
|
|
247
|
-
const cellElement = getCellElement(event.target);
|
|
248
|
-
if (!cellElement) {
|
|
249
|
-
// Mouseup happened outside of datepicker. Cancel drag.
|
|
250
|
-
this._ngZone.run(() => {
|
|
251
|
-
this.dragEnded.emit({ value: null, event });
|
|
252
|
-
});
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {
|
|
256
|
-
// Mouseup happened inside a different month instance.
|
|
257
|
-
// Allow it to handle the event.
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
this._ngZone.run(() => {
|
|
261
|
-
const cell = this._getCellFromElement(cellElement);
|
|
262
|
-
this.dragEnded.emit({ value: cell?.rawValue ?? null, event });
|
|
263
|
-
});
|
|
264
|
-
};
|
|
265
|
-
/** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */
|
|
266
|
-
this._touchendHandler = (event) => {
|
|
267
|
-
const target = getActualTouchTarget(event);
|
|
268
|
-
if (target) {
|
|
269
|
-
this._mouseupHandler({ target });
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
this._id = `mat-calendar-body-${calendarBodyId++}`;
|
|
273
|
-
this._startDateLabelId = `${this._id}-start-date`;
|
|
274
|
-
this._endDateLabelId = `${this._id}-end-date`;
|
|
275
206
|
inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
|
|
276
207
|
this._ngZone.runOutsideAngular(() => {
|
|
277
208
|
const element = this._elementRef.nativeElement;
|
|
@@ -475,6 +406,108 @@ class MatCalendarBody {
|
|
|
475
406
|
}
|
|
476
407
|
return null;
|
|
477
408
|
}
|
|
409
|
+
/**
|
|
410
|
+
* Event handler for when the user enters an element
|
|
411
|
+
* inside the calendar body (e.g. by hovering in or focus).
|
|
412
|
+
*/
|
|
413
|
+
_enterHandler = (event) => {
|
|
414
|
+
if (this._skipNextFocus && event.type === 'focus') {
|
|
415
|
+
this._skipNextFocus = false;
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
// We only need to hit the zone when we're selecting a range.
|
|
419
|
+
if (event.target && this.isRange) {
|
|
420
|
+
const cell = this._getCellFromElement(event.target);
|
|
421
|
+
if (cell) {
|
|
422
|
+
this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
_touchmoveHandler = (event) => {
|
|
427
|
+
if (!this.isRange)
|
|
428
|
+
return;
|
|
429
|
+
const target = getActualTouchTarget(event);
|
|
430
|
+
const cell = target ? this._getCellFromElement(target) : null;
|
|
431
|
+
if (target !== event.target) {
|
|
432
|
+
this._didDragSinceMouseDown = true;
|
|
433
|
+
}
|
|
434
|
+
// If the initial target of the touch is a date cell, prevent default so
|
|
435
|
+
// that the move is not handled as a scroll.
|
|
436
|
+
if (getCellElement(event.target)) {
|
|
437
|
+
event.preventDefault();
|
|
438
|
+
}
|
|
439
|
+
this._ngZone.run(() => this.previewChange.emit({ value: cell?.enabled ? cell : null, event }));
|
|
440
|
+
};
|
|
441
|
+
/**
|
|
442
|
+
* Event handler for when the user's pointer leaves an element
|
|
443
|
+
* inside the calendar body (e.g. by hovering out or blurring).
|
|
444
|
+
*/
|
|
445
|
+
_leaveHandler = (event) => {
|
|
446
|
+
// We only need to hit the zone when we're selecting a range.
|
|
447
|
+
if (this.previewEnd !== null && this.isRange) {
|
|
448
|
+
if (event.type !== 'blur') {
|
|
449
|
+
this._didDragSinceMouseDown = true;
|
|
450
|
+
}
|
|
451
|
+
// Only reset the preview end value when leaving cells. This looks better, because
|
|
452
|
+
// we have a gap between the cells and the rows and we don't want to remove the
|
|
453
|
+
// range just for it to show up again when the user moves a few pixels to the side.
|
|
454
|
+
if (event.target &&
|
|
455
|
+
this._getCellFromElement(event.target) &&
|
|
456
|
+
!(event.relatedTarget &&
|
|
457
|
+
this._getCellFromElement(event.relatedTarget))) {
|
|
458
|
+
this._ngZone.run(() => this.previewChange.emit({ value: null, event }));
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
};
|
|
462
|
+
/**
|
|
463
|
+
* Triggered on mousedown or touchstart on a date cell.
|
|
464
|
+
* Respsonsible for starting a drag sequence.
|
|
465
|
+
*/
|
|
466
|
+
_mousedownHandler = (event) => {
|
|
467
|
+
if (!this.isRange)
|
|
468
|
+
return;
|
|
469
|
+
this._didDragSinceMouseDown = false;
|
|
470
|
+
// Begin a drag if a cell within the current range was targeted.
|
|
471
|
+
const cell = event.target && this._getCellFromElement(event.target);
|
|
472
|
+
if (!cell || !this._isInRange(cell.compareValue)) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
this._ngZone.run(() => {
|
|
476
|
+
this.dragStarted.emit({
|
|
477
|
+
value: cell.rawValue,
|
|
478
|
+
event,
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
};
|
|
482
|
+
/** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */
|
|
483
|
+
_mouseupHandler = (event) => {
|
|
484
|
+
if (!this.isRange)
|
|
485
|
+
return;
|
|
486
|
+
const cellElement = getCellElement(event.target);
|
|
487
|
+
if (!cellElement) {
|
|
488
|
+
// Mouseup happened outside of datepicker. Cancel drag.
|
|
489
|
+
this._ngZone.run(() => {
|
|
490
|
+
this.dragEnded.emit({ value: null, event });
|
|
491
|
+
});
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {
|
|
495
|
+
// Mouseup happened inside a different month instance.
|
|
496
|
+
// Allow it to handle the event.
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
this._ngZone.run(() => {
|
|
500
|
+
const cell = this._getCellFromElement(cellElement);
|
|
501
|
+
this.dragEnded.emit({ value: cell?.rawValue ?? null, event });
|
|
502
|
+
});
|
|
503
|
+
};
|
|
504
|
+
/** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */
|
|
505
|
+
_touchendHandler = (event) => {
|
|
506
|
+
const target = getActualTouchTarget(event);
|
|
507
|
+
if (target) {
|
|
508
|
+
this._mouseupHandler({ target });
|
|
509
|
+
}
|
|
510
|
+
};
|
|
478
511
|
/** Finds the MatCalendarCell that corresponds to a DOM node. */
|
|
479
512
|
_getCellFromElement(element) {
|
|
480
513
|
const cell = getCellElement(element);
|
|
@@ -487,14 +520,17 @@ class MatCalendarBody {
|
|
|
487
520
|
}
|
|
488
521
|
return null;
|
|
489
522
|
}
|
|
490
|
-
|
|
491
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.8", type: MatCalendarBody, isStandalone: true, selector: "[mat-calendar-body]", inputs: { label: "label", rows: "rows", todayValue: "todayValue", startValue: "startValue", endValue: "endValue", labelMinRequiredCells: "labelMinRequiredCells", numCols: "numCols", activeCell: "activeCell", isRange: "isRange", cellAspectRatio: "cellAspectRatio", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", previewStart: "previewStart", previewEnd: "previewEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedValueChange: "selectedValueChange", previewChange: "previewChange", activeDateChange: "activeDateChange", dragStarted: "dragStarted", dragEnded: "dragEnded" }, host: { classAttribute: "mat-calendar-body" }, exportAs: ["matCalendarBody"], usesOnChanges: true, ngImport: i0, template: "<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"mat-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{label}}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mat-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mat-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mat-calendar-body-disabled]=\"!item.enabled\"\n [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [class.mat-calendar-body-range-start]=\"_isRangeStart(item.compareValue)\"\n [class.mat-calendar-body-range-end]=\"_isRangeEnd(item.compareValue)\"\n [class.mat-calendar-body-in-range]=\"_isInRange(item.compareValue)\"\n [class.mat-calendar-body-comparison-bridge-start]=\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-bridge-end]=\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-start]=\"_isComparisonStart(item.compareValue)\"\n [class.mat-calendar-body-comparison-end]=\"_isComparisonEnd(item.compareValue)\"\n [class.mat-calendar-body-in-comparison-range]=\"_isInComparisonRange(item.compareValue)\"\n [class.mat-calendar-body-preview-start]=\"_isPreviewStart(item.compareValue)\"\n [class.mat-calendar-body-preview-end]=\"_isPreviewEnd(item.compareValue)\"\n [class.mat-calendar-body-in-preview]=\"_isInPreview(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"_isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"_getDescribedby(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n (focus)=\"_emitActiveDateChange(item, $event)\">\n <span class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item.compareValue)\"\n [class.mat-calendar-body-comparison-identical]=\"_isComparisonIdentical(item.compareValue)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </span>\n <span class=\"mat-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"_startDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{startDateAccessibleName}}\n</span>\n<span [id]=\"_endDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{endDateAccessibleName}}\n</span>\n", styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color, var(--mat-app-primary))}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size, var(--mat-app-title-small-size));font-weight:var(--mat-datepicker-calendar-body-label-text-weight, var(--mat-app-title-small-weight));color:var(--mat-datepicker-calendar-body-label-text-color, var(--mat-app-on-surface))}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-app-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-app-body-medium-size));-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color, var(--mat-app-primary))}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color, color-mix(in srgb, var(--mat-app-on-surface) 38%, transparent))}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color, color-mix(in srgb, var(--mat-app-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-calendar-body-disabled{opacity:.5}}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color, var(--mat-app-on-surface));border-color:var(--mat-datepicker-calendar-date-outline-color, transparent)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}@media(forced-colors: active){.mat-calendar-body-cell-content{border:none}}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color, color-mix(in srgb, var(--mat-app-on-surface) calc(var(--mat-app-focus-state-layer-opacity) * 100%), transparent))}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color, color-mix(in srgb, var(--mat-app-on-surface) calc(var(--mat-app-hover-state-layer-opacity) * 100%), transparent))}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color, var(--mat-app-primary));color:var(--mat-datepicker-calendar-date-selected-state-text-color, var(--mat-app-on-primary))}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color, color-mix(in srgb, var(--mat-app-on-surface) 38%, transparent))}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color, var(--mat-app-primary))}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-app-primary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container))}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-app-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container)) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-app-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container)) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color, var(--mat-app-secondary-container))}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color, var(--mat-app-secondary))}@media(forced-colors: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-selected{background:none}.mat-calendar-body-in-range::before,.mat-calendar-body-comparison-bridge-start::before,.mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}}"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
523
|
+
_id = `mat-calendar-body-${calendarBodyId++}`;
|
|
524
|
+
_startDateLabelId = `${this._id}-start-date`;
|
|
525
|
+
_endDateLabelId = `${this._id}-end-date`;
|
|
526
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarBody, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
527
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatCalendarBody, isStandalone: true, selector: "[mat-calendar-body]", inputs: { label: "label", rows: "rows", todayValue: "todayValue", startValue: "startValue", endValue: "endValue", labelMinRequiredCells: "labelMinRequiredCells", numCols: "numCols", activeCell: "activeCell", isRange: "isRange", cellAspectRatio: "cellAspectRatio", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", previewStart: "previewStart", previewEnd: "previewEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedValueChange: "selectedValueChange", previewChange: "previewChange", activeDateChange: "activeDateChange", dragStarted: "dragStarted", dragEnded: "dragEnded" }, host: { classAttribute: "mat-calendar-body" }, exportAs: ["matCalendarBody"], usesOnChanges: true, ngImport: i0, template: "<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"mat-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{label}}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mat-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mat-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mat-calendar-body-disabled]=\"!item.enabled\"\n [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [class.mat-calendar-body-range-start]=\"_isRangeStart(item.compareValue)\"\n [class.mat-calendar-body-range-end]=\"_isRangeEnd(item.compareValue)\"\n [class.mat-calendar-body-in-range]=\"_isInRange(item.compareValue)\"\n [class.mat-calendar-body-comparison-bridge-start]=\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-bridge-end]=\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-start]=\"_isComparisonStart(item.compareValue)\"\n [class.mat-calendar-body-comparison-end]=\"_isComparisonEnd(item.compareValue)\"\n [class.mat-calendar-body-in-comparison-range]=\"_isInComparisonRange(item.compareValue)\"\n [class.mat-calendar-body-preview-start]=\"_isPreviewStart(item.compareValue)\"\n [class.mat-calendar-body-preview-end]=\"_isPreviewEnd(item.compareValue)\"\n [class.mat-calendar-body-in-preview]=\"_isInPreview(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"_isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"_getDescribedby(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n (focus)=\"_emitActiveDateChange(item, $event)\">\n <span class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item.compareValue)\"\n [class.mat-calendar-body-comparison-identical]=\"_isComparisonIdentical(item.compareValue)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </span>\n <span class=\"mat-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"_startDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{startDateAccessibleName}}\n</span>\n<span [id]=\"_endDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{endDateAccessibleName}}\n</span>\n", styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color, var(--mat-sys-primary))}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-body-label-text-weight, var(--mat-sys-title-small-weight));color:var(--mat-datepicker-calendar-body-label-text-color, var(--mat-sys-on-surface))}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size));-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-calendar-body-disabled{opacity:.5}}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color, var(--mat-sys-on-surface));border-color:var(--mat-datepicker-calendar-date-outline-color, transparent)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}@media(forced-colors: active){.mat-calendar-body-cell-content{border:none}}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color, var(--mat-sys-primary));color:var(--mat-datepicker-calendar-date-selected-state-text-color, var(--mat-sys-on-primary))}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color, var(--mat-sys-secondary-container))}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color, var(--mat-sys-secondary))}@media(forced-colors: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-selected{background:none}.mat-calendar-body-in-range::before,.mat-calendar-body-comparison-bridge-start::before,.mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}}"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
492
528
|
}
|
|
493
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
529
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarBody, decorators: [{
|
|
494
530
|
type: Component,
|
|
495
531
|
args: [{ selector: '[mat-calendar-body]', host: {
|
|
496
532
|
'class': 'mat-calendar-body',
|
|
497
|
-
}, exportAs: 'matCalendarBody', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgClass], template: "<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"mat-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{label}}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mat-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mat-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mat-calendar-body-disabled]=\"!item.enabled\"\n [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [class.mat-calendar-body-range-start]=\"_isRangeStart(item.compareValue)\"\n [class.mat-calendar-body-range-end]=\"_isRangeEnd(item.compareValue)\"\n [class.mat-calendar-body-in-range]=\"_isInRange(item.compareValue)\"\n [class.mat-calendar-body-comparison-bridge-start]=\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-bridge-end]=\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-start]=\"_isComparisonStart(item.compareValue)\"\n [class.mat-calendar-body-comparison-end]=\"_isComparisonEnd(item.compareValue)\"\n [class.mat-calendar-body-in-comparison-range]=\"_isInComparisonRange(item.compareValue)\"\n [class.mat-calendar-body-preview-start]=\"_isPreviewStart(item.compareValue)\"\n [class.mat-calendar-body-preview-end]=\"_isPreviewEnd(item.compareValue)\"\n [class.mat-calendar-body-in-preview]=\"_isInPreview(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"_isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"_getDescribedby(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n (focus)=\"_emitActiveDateChange(item, $event)\">\n <span class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item.compareValue)\"\n [class.mat-calendar-body-comparison-identical]=\"_isComparisonIdentical(item.compareValue)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </span>\n <span class=\"mat-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"_startDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{startDateAccessibleName}}\n</span>\n<span [id]=\"_endDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{endDateAccessibleName}}\n</span>\n", styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color, var(--mat-app-primary))}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size, var(--mat-app-title-small-size));font-weight:var(--mat-datepicker-calendar-body-label-text-weight, var(--mat-app-title-small-weight));color:var(--mat-datepicker-calendar-body-label-text-color, var(--mat-app-on-surface))}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-app-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-app-body-medium-size));-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color, var(--mat-app-primary))}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color, color-mix(in srgb, var(--mat-app-on-surface) 38%, transparent))}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color, color-mix(in srgb, var(--mat-app-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-calendar-body-disabled{opacity:.5}}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color, var(--mat-app-on-surface));border-color:var(--mat-datepicker-calendar-date-outline-color, transparent)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}@media(forced-colors: active){.mat-calendar-body-cell-content{border:none}}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color, color-mix(in srgb, var(--mat-app-on-surface) calc(var(--mat-app-focus-state-layer-opacity) * 100%), transparent))}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color, color-mix(in srgb, var(--mat-app-on-surface) calc(var(--mat-app-hover-state-layer-opacity) * 100%), transparent))}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color, var(--mat-app-primary));color:var(--mat-datepicker-calendar-date-selected-state-text-color, var(--mat-app-on-primary))}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color, color-mix(in srgb, var(--mat-app-on-surface) 38%, transparent))}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color, var(--mat-app-primary))}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-app-primary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container))}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-app-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container)) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-app-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-app-tertiary-container)) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color, var(--mat-app-secondary-container))}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color, var(--mat-app-secondary))}@media(forced-colors: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-selected{background:none}.mat-calendar-body-in-range::before,.mat-calendar-body-comparison-bridge-start::before,.mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}}"] }]
|
|
533
|
+
}, exportAs: 'matCalendarBody', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass], template: "<!--\n If there's not enough space in the first row, create a separate label row. We mark this row as\n aria-hidden because we don't want it to be read out as one of the weeks in the month.\n-->\n@if (_firstRowOffset < labelMinRequiredCells) {\n <tr aria-hidden=\"true\">\n <td class=\"mat-calendar-body-label\"\n [attr.colspan]=\"numCols\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{label}}\n </td>\n </tr>\n}\n\n<!-- Create the first row separately so we can include a special spacer cell. -->\n@for (row of rows; track _trackRow(row); let rowIndex = $index) {\n <tr role=\"row\">\n <!--\n This cell is purely decorative, but we can't put `aria-hidden` or `role=\"presentation\"` on it,\n because it throws off the week days for the rest of the row on NVDA. The aspect ratio of the\n table cells is maintained by setting the top and bottom padding as a percentage of the width\n (a variant of the trick described here: https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n @if (rowIndex === 0 && _firstRowOffset) {\n <td\n class=\"mat-calendar-body-label\"\n [attr.colspan]=\"_firstRowOffset\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n {{_firstRowOffset >= labelMinRequiredCells ? label : ''}}\n </td>\n }\n <!--\n Each gridcell in the calendar contains a button, which signals to assistive technology that the\n cell is interactable, as well as the selection state via `aria-pressed`. See #23476 for\n background.\n -->\n @for (item of row; track item.id; let colIndex = $index) {\n <td\n role=\"gridcell\"\n class=\"mat-calendar-body-cell-container\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\n >\n <button\n type=\"button\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [class.mat-calendar-body-disabled]=\"!item.enabled\"\n [class.mat-calendar-body-active]=\"_isActiveCell(rowIndex, colIndex)\"\n [class.mat-calendar-body-range-start]=\"_isRangeStart(item.compareValue)\"\n [class.mat-calendar-body-range-end]=\"_isRangeEnd(item.compareValue)\"\n [class.mat-calendar-body-in-range]=\"_isInRange(item.compareValue)\"\n [class.mat-calendar-body-comparison-bridge-start]=\"_isComparisonBridgeStart(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-bridge-end]=\"_isComparisonBridgeEnd(item.compareValue, rowIndex, colIndex)\"\n [class.mat-calendar-body-comparison-start]=\"_isComparisonStart(item.compareValue)\"\n [class.mat-calendar-body-comparison-end]=\"_isComparisonEnd(item.compareValue)\"\n [class.mat-calendar-body-in-comparison-range]=\"_isInComparisonRange(item.compareValue)\"\n [class.mat-calendar-body-preview-start]=\"_isPreviewStart(item.compareValue)\"\n [class.mat-calendar-body-preview-end]=\"_isPreviewEnd(item.compareValue)\"\n [class.mat-calendar-body-in-preview]=\"_isInPreview(item.compareValue)\"\n [attr.aria-label]=\"item.ariaLabel\"\n [attr.aria-disabled]=\"!item.enabled || null\"\n [attr.aria-pressed]=\"_isSelected(item.compareValue)\"\n [attr.aria-current]=\"todayValue === item.compareValue ? 'date' : null\"\n [attr.aria-describedby]=\"_getDescribedby(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n (focus)=\"_emitActiveDateChange(item, $event)\">\n <span class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item.compareValue)\"\n [class.mat-calendar-body-comparison-identical]=\"_isComparisonIdentical(item.compareValue)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </span>\n <span class=\"mat-calendar-body-cell-preview\" aria-hidden=\"true\"></span>\n </button>\n </td>\n }\n </tr>\n}\n\n<span [id]=\"_startDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{startDateAccessibleName}}\n</span>\n<span [id]=\"_endDateLabelId\" class=\"mat-calendar-body-hidden-label\">\n {{endDateAccessibleName}}\n</span>\n", styles: [".mat-calendar-body{min-width:224px}.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-outline-color, var(--mat-sys-primary))}.mat-calendar-body-label{height:0;line-height:0;text-align:start;padding-left:4.7142857143%;padding-right:4.7142857143%;font-size:var(--mat-datepicker-calendar-body-label-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-body-label-text-weight, var(--mat-sys-title-small-weight));color:var(--mat-datepicker-calendar-body-label-text-color, var(--mat-sys-on-surface))}.mat-calendar-body-hidden-label{display:none}.mat-calendar-body-cell-container{position:relative;height:0;line-height:0}.mat-calendar-body-cell{position:absolute;top:0;left:0;width:100%;height:100%;background:none;text-align:center;outline:none;font-family:inherit;margin:0;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size));-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-calendar-body-cell::-moz-focus-inner{border:0}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-cell-preview{content:\"\";position:absolute;top:5%;left:0;z-index:0;box-sizing:border-box;display:block;height:90%;width:100%}.mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-start::after,.mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,.mat-calendar-body-comparison-start::after,.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-range-start:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-start:not(.mat-calendar-body-comparison-bridge-start)::before,[dir=rtl] .mat-calendar-body-comparison-start::after,[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:0;border-radius:0;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,.mat-calendar-body-comparison-end::after,.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}[dir=rtl] .mat-calendar-body-range-end:not(.mat-calendar-body-in-comparison-range)::before,[dir=rtl] .mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-end:not(.mat-calendar-body-comparison-bridge-end)::before,[dir=rtl] .mat-calendar-body-comparison-end::after,[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{left:5%;border-radius:0;border-top-left-radius:999px;border-bottom-left-radius:999px}[dir=rtl] .mat-calendar-body-comparison-bridge-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-bridge-end.mat-calendar-body-range-start::after{width:95%;border-top-right-radius:999px;border-bottom-right-radius:999px}.mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,[dir=rtl] .mat-calendar-body-comparison-start.mat-calendar-body-range-end::after,.mat-calendar-body-comparison-end.mat-calendar-body-range-start::after,[dir=rtl] .mat-calendar-body-comparison-end.mat-calendar-body-range-start::after{width:90%}.mat-calendar-body-in-preview{color:var(--mat-datepicker-calendar-date-preview-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-preview .mat-calendar-body-cell-preview{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{border-left:0;border-right:dashed 1px}.mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{border-right:0;border-left:dashed 1px}.mat-calendar-body-disabled{cursor:default}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:var(--mat-datepicker-calendar-date-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border-color:var(--mat-datepicker-calendar-date-today-disabled-state-outline-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-calendar-body-disabled{opacity:.5}}.mat-calendar-body-cell-content{top:5%;left:5%;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:90%;height:90%;line-height:1;border-width:1px;border-style:solid;border-radius:999px;color:var(--mat-datepicker-calendar-date-text-color, var(--mat-sys-on-surface));border-color:var(--mat-datepicker-calendar-date-outline-color, transparent)}.mat-calendar-body-cell-content.mat-focus-indicator{position:absolute}@media(forced-colors: active){.mat-calendar-body-cell-content{border:none}}.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-focus-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}@media(hover: hover){.mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:var(--mat-datepicker-calendar-date-hover-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}}.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-state-background-color, var(--mat-sys-primary));color:var(--mat-datepicker-calendar-date-selected-state-text-color, var(--mat-sys-on-primary))}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:var(--mat-datepicker-calendar-date-selected-disabled-state-background-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-calendar-body-selected.mat-calendar-body-today{box-shadow:inset 0 0 0 1px var(--mat-datepicker-calendar-date-today-selected-state-outline-color, var(--mat-sys-primary))}.mat-calendar-body-in-range::before{background:var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range::before{background:var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container))}.mat-calendar-body-comparison-bridge-start::before,[dir=rtl] .mat-calendar-body-comparison-bridge-end::before{background:linear-gradient(to right, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-comparison-bridge-end::before,[dir=rtl] .mat-calendar-body-comparison-bridge-start::before{background:linear-gradient(to left, var(--mat-datepicker-calendar-date-in-range-state-background-color, var(--mat-sys-primary-container)) 50%, var(--mat-datepicker-calendar-date-in-comparison-range-state-background-color, var(--mat-sys-tertiary-container)) 50%)}.mat-calendar-body-in-range>.mat-calendar-body-comparison-identical,.mat-calendar-body-in-comparison-range.mat-calendar-body-in-range::after{background:var(--mat-datepicker-calendar-date-in-overlap-range-state-background-color, var(--mat-sys-secondary-container))}.mat-calendar-body-comparison-identical.mat-calendar-body-selected,.mat-calendar-body-in-comparison-range>.mat-calendar-body-selected{background:var(--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color, var(--mat-sys-secondary))}@media(forced-colors: active){.mat-datepicker-popup:not(:empty),.mat-calendar-body-cell:not(.mat-calendar-body-in-range) .mat-calendar-body-selected{outline:solid 1px}.mat-calendar-body-today{outline:dotted 1px}.mat-calendar-body-cell::before,.mat-calendar-body-cell::after,.mat-calendar-body-selected{background:none}.mat-calendar-body-in-range::before,.mat-calendar-body-comparison-bridge-start::before,.mat-calendar-body-comparison-bridge-end::before{border-top:solid 1px;border-bottom:solid 1px}.mat-calendar-body-range-start::before{border-left:solid 1px}[dir=rtl] .mat-calendar-body-range-start::before{border-left:0;border-right:solid 1px}.mat-calendar-body-range-end::before{border-right:solid 1px}[dir=rtl] .mat-calendar-body-range-end::before{border-right:0;border-left:solid 1px}.mat-calendar-body-in-comparison-range::before{border-top:dashed 1px;border-bottom:dashed 1px}.mat-calendar-body-comparison-start::before{border-left:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-start::before{border-left:0;border-right:dashed 1px}.mat-calendar-body-comparison-end::before{border-right:dashed 1px}[dir=rtl] .mat-calendar-body-comparison-end::before{border-right:0;border-left:dashed 1px}}"] }]
|
|
498
534
|
}], ctorParameters: () => [], propDecorators: { label: [{
|
|
499
535
|
type: Input
|
|
500
536
|
}], rows: [{
|
|
@@ -587,6 +623,14 @@ function getActualTouchTarget(event) {
|
|
|
587
623
|
|
|
588
624
|
/** A class representing a range of dates. */
|
|
589
625
|
class DateRange {
|
|
626
|
+
start;
|
|
627
|
+
end;
|
|
628
|
+
/**
|
|
629
|
+
* Ensures that objects with a `start` and `end` property can't be assigned to a variable that
|
|
630
|
+
* expects a `DateRange`
|
|
631
|
+
*/
|
|
632
|
+
// tslint:disable-next-line:no-unused-variable
|
|
633
|
+
_disableStructuralEquivalency;
|
|
590
634
|
constructor(
|
|
591
635
|
/** The start date of the range. */
|
|
592
636
|
start,
|
|
@@ -601,14 +645,16 @@ class DateRange {
|
|
|
601
645
|
* @docs-private
|
|
602
646
|
*/
|
|
603
647
|
class MatDateSelectionModel {
|
|
648
|
+
selection;
|
|
649
|
+
_adapter;
|
|
650
|
+
_selectionChanged = new Subject();
|
|
651
|
+
/** Emits when the selection has changed. */
|
|
652
|
+
selectionChanged = this._selectionChanged;
|
|
604
653
|
constructor(
|
|
605
654
|
/** The current selection. */
|
|
606
655
|
selection, _adapter) {
|
|
607
656
|
this.selection = selection;
|
|
608
657
|
this._adapter = _adapter;
|
|
609
|
-
this._selectionChanged = new Subject();
|
|
610
|
-
/** Emits when the selection has changed. */
|
|
611
|
-
this.selectionChanged = this._selectionChanged;
|
|
612
658
|
this.selection = selection;
|
|
613
659
|
}
|
|
614
660
|
/**
|
|
@@ -627,10 +673,10 @@ class MatDateSelectionModel {
|
|
|
627
673
|
_isValidDateInstance(date) {
|
|
628
674
|
return this._adapter.isDateInstance(date) && this._adapter.isValid(date);
|
|
629
675
|
}
|
|
630
|
-
static
|
|
631
|
-
static
|
|
676
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
|
|
677
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel });
|
|
632
678
|
}
|
|
633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
679
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel, decorators: [{
|
|
634
680
|
type: Injectable
|
|
635
681
|
}], ctorParameters: () => [{ type: undefined }, { type: i1.DateAdapter }] });
|
|
636
682
|
/**
|
|
@@ -665,10 +711,10 @@ class MatSingleDateSelectionModel extends MatDateSelectionModel {
|
|
|
665
711
|
clone.updateSelection(this.selection, this);
|
|
666
712
|
return clone;
|
|
667
713
|
}
|
|
668
|
-
static
|
|
669
|
-
static
|
|
714
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
715
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel });
|
|
670
716
|
}
|
|
671
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
717
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel, decorators: [{
|
|
672
718
|
type: Injectable
|
|
673
719
|
}], ctorParameters: () => [{ type: i1.DateAdapter }] });
|
|
674
720
|
/**
|
|
@@ -728,10 +774,10 @@ class MatRangeDateSelectionModel extends MatDateSelectionModel {
|
|
|
728
774
|
clone.updateSelection(this.selection, this);
|
|
729
775
|
return clone;
|
|
730
776
|
}
|
|
731
|
-
static
|
|
732
|
-
static
|
|
777
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
778
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel });
|
|
733
779
|
}
|
|
734
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
780
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel, decorators: [{
|
|
735
781
|
type: Injectable
|
|
736
782
|
}], ctorParameters: () => [{ type: i1.DateAdapter }] });
|
|
737
783
|
/** @docs-private */
|
|
@@ -765,6 +811,7 @@ const MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER = {
|
|
|
765
811
|
const MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken('MAT_DATE_RANGE_SELECTION_STRATEGY');
|
|
766
812
|
/** Provides the default date range selection behavior. */
|
|
767
813
|
class DefaultMatCalendarRangeStrategy {
|
|
814
|
+
_dateAdapter;
|
|
768
815
|
constructor(_dateAdapter) {
|
|
769
816
|
this._dateAdapter = _dateAdapter;
|
|
770
817
|
}
|
|
@@ -829,10 +876,10 @@ class DefaultMatCalendarRangeStrategy {
|
|
|
829
876
|
}
|
|
830
877
|
return new DateRange(start, end);
|
|
831
878
|
}
|
|
832
|
-
static
|
|
833
|
-
static
|
|
879
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
880
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy });
|
|
834
881
|
}
|
|
835
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
882
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy, decorators: [{
|
|
836
883
|
type: Injectable
|
|
837
884
|
}], ctorParameters: () => [{ type: i1.DateAdapter }] });
|
|
838
885
|
/** @docs-private */
|
|
@@ -853,6 +900,14 @@ let uniqueIdCounter = 0;
|
|
|
853
900
|
* @docs-private
|
|
854
901
|
*/
|
|
855
902
|
class MatMonthView {
|
|
903
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
904
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
905
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
906
|
+
_dir = inject(Directionality, { optional: true });
|
|
907
|
+
_rangeStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
|
|
908
|
+
_rerenderSubscription = Subscription.EMPTY;
|
|
909
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
910
|
+
_selectionKeyPressed;
|
|
856
911
|
/**
|
|
857
912
|
* The date to display in this month view (everything other than the month and year is ignored).
|
|
858
913
|
*/
|
|
@@ -868,6 +923,7 @@ class MatMonthView {
|
|
|
868
923
|
this._init();
|
|
869
924
|
}
|
|
870
925
|
}
|
|
926
|
+
_activeDate;
|
|
871
927
|
/** The currently selected date. */
|
|
872
928
|
get selected() {
|
|
873
929
|
return this._selected;
|
|
@@ -881,6 +937,7 @@ class MatMonthView {
|
|
|
881
937
|
}
|
|
882
938
|
this._setRanges(this._selected);
|
|
883
939
|
}
|
|
940
|
+
_selected;
|
|
884
941
|
/** The minimum selectable date. */
|
|
885
942
|
get minDate() {
|
|
886
943
|
return this._minDate;
|
|
@@ -888,6 +945,7 @@ class MatMonthView {
|
|
|
888
945
|
set minDate(value) {
|
|
889
946
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
890
947
|
}
|
|
948
|
+
_minDate;
|
|
891
949
|
/** The maximum selectable date. */
|
|
892
950
|
get maxDate() {
|
|
893
951
|
return this._maxDate;
|
|
@@ -895,28 +953,62 @@ class MatMonthView {
|
|
|
895
953
|
set maxDate(value) {
|
|
896
954
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
897
955
|
}
|
|
956
|
+
_maxDate;
|
|
957
|
+
/** Function used to filter which dates are selectable. */
|
|
958
|
+
dateFilter;
|
|
959
|
+
/** Function that can be used to add custom CSS classes to dates. */
|
|
960
|
+
dateClass;
|
|
961
|
+
/** Start of the comparison range. */
|
|
962
|
+
comparisonStart;
|
|
963
|
+
/** End of the comparison range. */
|
|
964
|
+
comparisonEnd;
|
|
965
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
966
|
+
startDateAccessibleName;
|
|
967
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
968
|
+
endDateAccessibleName;
|
|
969
|
+
/** Origin of active drag, or null when dragging is not active. */
|
|
970
|
+
activeDrag = null;
|
|
971
|
+
/** Emits when a new date is selected. */
|
|
972
|
+
selectedChange = new EventEmitter();
|
|
973
|
+
/** Emits when any date is selected. */
|
|
974
|
+
_userSelection = new EventEmitter();
|
|
975
|
+
/** Emits when the user initiates a date range drag via mouse or touch. */
|
|
976
|
+
dragStarted = new EventEmitter();
|
|
977
|
+
/**
|
|
978
|
+
* Emits when the user completes or cancels a date range drag.
|
|
979
|
+
* Emits null when the drag was canceled or the newly selected date range if completed.
|
|
980
|
+
*/
|
|
981
|
+
dragEnded = new EventEmitter();
|
|
982
|
+
/** Emits when any date is activated. */
|
|
983
|
+
activeDateChange = new EventEmitter();
|
|
984
|
+
/** The body of calendar table */
|
|
985
|
+
_matCalendarBody;
|
|
986
|
+
/** The label for this month (e.g. "January 2017"). */
|
|
987
|
+
_monthLabel;
|
|
988
|
+
/** Grid of calendar cells representing the dates of the month. */
|
|
989
|
+
_weeks;
|
|
990
|
+
/** The number of blank cells in the first row before the 1st of the month. */
|
|
991
|
+
_firstWeekOffset;
|
|
992
|
+
/** Start value of the currently-shown date range. */
|
|
993
|
+
_rangeStart;
|
|
994
|
+
/** End value of the currently-shown date range. */
|
|
995
|
+
_rangeEnd;
|
|
996
|
+
/** Start value of the currently-shown comparison date range. */
|
|
997
|
+
_comparisonRangeStart;
|
|
998
|
+
/** End value of the currently-shown comparison date range. */
|
|
999
|
+
_comparisonRangeEnd;
|
|
1000
|
+
/** Start of the preview range. */
|
|
1001
|
+
_previewStart;
|
|
1002
|
+
/** End of the preview range. */
|
|
1003
|
+
_previewEnd;
|
|
1004
|
+
/** Whether the user is currently selecting a range of dates. */
|
|
1005
|
+
_isRange;
|
|
1006
|
+
/** The date of the month that today falls on. Null if today is in another month. */
|
|
1007
|
+
_todayDate;
|
|
1008
|
+
/** The names of the weekdays. */
|
|
1009
|
+
_weekdays;
|
|
898
1010
|
constructor() {
|
|
899
|
-
|
|
900
|
-
this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
901
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
902
|
-
this._dir = inject(Directionality, { optional: true });
|
|
903
|
-
this._rangeStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
|
|
904
|
-
this._rerenderSubscription = Subscription.EMPTY;
|
|
905
|
-
/** Origin of active drag, or null when dragging is not active. */
|
|
906
|
-
this.activeDrag = null;
|
|
907
|
-
/** Emits when a new date is selected. */
|
|
908
|
-
this.selectedChange = new EventEmitter();
|
|
909
|
-
/** Emits when any date is selected. */
|
|
910
|
-
this._userSelection = new EventEmitter();
|
|
911
|
-
/** Emits when the user initiates a date range drag via mouse or touch. */
|
|
912
|
-
this.dragStarted = new EventEmitter();
|
|
913
|
-
/**
|
|
914
|
-
* Emits when the user completes or cancels a date range drag.
|
|
915
|
-
* Emits null when the drag was canceled or the newly selected date range if completed.
|
|
916
|
-
*/
|
|
917
|
-
this.dragEnded = new EventEmitter();
|
|
918
|
-
/** Emits when any date is activated. */
|
|
919
|
-
this.activeDateChange = new EventEmitter();
|
|
1011
|
+
inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
|
|
920
1012
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
921
1013
|
if (!this._dateAdapter) {
|
|
922
1014
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -1229,12 +1321,12 @@ class MatMonthView {
|
|
|
1229
1321
|
_clearPreview() {
|
|
1230
1322
|
this._previewStart = this._previewEnd = null;
|
|
1231
1323
|
}
|
|
1232
|
-
static
|
|
1233
|
-
static
|
|
1324
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMonthView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1325
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatMonthView, isStandalone: true, selector: "mat-month-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName", activeDrag: "activeDrag" }, outputs: { selectedChange: "selectedChange", _userSelection: "_userSelection", dragStarted: "dragStarted", dragEnded: "dragEnded", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matMonthView"], usesOnChanges: true, ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead class=\"mat-calendar-table-header\">\n <tr>\n @for (day of _weekdays; track day.id) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{day.long}}</span>\n <span aria-hidden=\"true\">{{day.narrow}}</span>\n </th>\n }\n </tr>\n <tr aria-hidden=\"true\"><th class=\"mat-calendar-table-header-divider\" colspan=\"7\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_monthLabel\"\n [rows]=\"_weeks\"\n [todayValue]=\"_todayDate!\"\n [startValue]=\"_rangeStart!\"\n [endValue]=\"_rangeEnd!\"\n [comparisonStart]=\"_comparisonRangeStart\"\n [comparisonEnd]=\"_comparisonRangeEnd\"\n [previewStart]=\"_previewStart\"\n [previewEnd]=\"_previewEnd\"\n [isRange]=\"_isRange\"\n [labelMinRequiredCells]=\"3\"\n [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (previewChange)=\"_previewChanged($event)\"\n (dragStarted)=\"dragStarted.emit($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1234
1326
|
}
|
|
1235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
1327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMonthView, decorators: [{
|
|
1236
1328
|
type: Component,
|
|
1237
|
-
args: [{ selector: 'mat-month-view', exportAs: 'matMonthView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1329
|
+
args: [{ selector: 'mat-month-view', exportAs: 'matMonthView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCalendarBody], template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead class=\"mat-calendar-table-header\">\n <tr>\n @for (day of _weekdays; track day.id) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{day.long}}</span>\n <span aria-hidden=\"true\">{{day.narrow}}</span>\n </th>\n }\n </tr>\n <tr aria-hidden=\"true\"><th class=\"mat-calendar-table-header-divider\" colspan=\"7\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_monthLabel\"\n [rows]=\"_weeks\"\n [todayValue]=\"_todayDate!\"\n [startValue]=\"_rangeStart!\"\n [endValue]=\"_rangeEnd!\"\n [comparisonStart]=\"_comparisonRangeStart\"\n [comparisonEnd]=\"_comparisonRangeEnd\"\n [previewStart]=\"_previewStart\"\n [previewEnd]=\"_previewEnd\"\n [isRange]=\"_isRange\"\n [labelMinRequiredCells]=\"3\"\n [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (previewChange)=\"_previewChanged($event)\"\n (dragStarted)=\"dragStarted.emit($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n" }]
|
|
1238
1330
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{
|
|
1239
1331
|
type: Input
|
|
1240
1332
|
}], selected: [{
|
|
@@ -1279,6 +1371,12 @@ const yearsPerRow = 4;
|
|
|
1279
1371
|
* @docs-private
|
|
1280
1372
|
*/
|
|
1281
1373
|
class MatMultiYearView {
|
|
1374
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
1375
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
1376
|
+
_dir = inject(Directionality, { optional: true });
|
|
1377
|
+
_rerenderSubscription = Subscription.EMPTY;
|
|
1378
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
1379
|
+
_selectionKeyPressed;
|
|
1282
1380
|
/** The date to display in this multi-year view (everything other than the year is ignored). */
|
|
1283
1381
|
get activeDate() {
|
|
1284
1382
|
return this._activeDate;
|
|
@@ -1292,6 +1390,7 @@ class MatMultiYearView {
|
|
|
1292
1390
|
this._init();
|
|
1293
1391
|
}
|
|
1294
1392
|
}
|
|
1393
|
+
_activeDate;
|
|
1295
1394
|
/** The currently selected date. */
|
|
1296
1395
|
get selected() {
|
|
1297
1396
|
return this._selected;
|
|
@@ -1305,6 +1404,7 @@ class MatMultiYearView {
|
|
|
1305
1404
|
}
|
|
1306
1405
|
this._setSelectedYear(value);
|
|
1307
1406
|
}
|
|
1407
|
+
_selected;
|
|
1308
1408
|
/** The minimum selectable date. */
|
|
1309
1409
|
get minDate() {
|
|
1310
1410
|
return this._minDate;
|
|
@@ -1312,6 +1412,7 @@ class MatMultiYearView {
|
|
|
1312
1412
|
set minDate(value) {
|
|
1313
1413
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1314
1414
|
}
|
|
1415
|
+
_minDate;
|
|
1315
1416
|
/** The maximum selectable date. */
|
|
1316
1417
|
get maxDate() {
|
|
1317
1418
|
return this._maxDate;
|
|
@@ -1319,17 +1420,26 @@ class MatMultiYearView {
|
|
|
1319
1420
|
set maxDate(value) {
|
|
1320
1421
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1321
1422
|
}
|
|
1423
|
+
_maxDate;
|
|
1424
|
+
/** A function used to filter which dates are selectable. */
|
|
1425
|
+
dateFilter;
|
|
1426
|
+
/** Function that can be used to add custom CSS classes to date cells. */
|
|
1427
|
+
dateClass;
|
|
1428
|
+
/** Emits when a new year is selected. */
|
|
1429
|
+
selectedChange = new EventEmitter();
|
|
1430
|
+
/** Emits the selected year. This doesn't imply a change on the selected date */
|
|
1431
|
+
yearSelected = new EventEmitter();
|
|
1432
|
+
/** Emits when any date is activated. */
|
|
1433
|
+
activeDateChange = new EventEmitter();
|
|
1434
|
+
/** The body of calendar table */
|
|
1435
|
+
_matCalendarBody;
|
|
1436
|
+
/** Grid of calendar cells representing the currently displayed years. */
|
|
1437
|
+
_years;
|
|
1438
|
+
/** The year that today falls on. */
|
|
1439
|
+
_todayYear;
|
|
1440
|
+
/** The year of the selected date. Null if the selected date is null. */
|
|
1441
|
+
_selectedYear;
|
|
1322
1442
|
constructor() {
|
|
1323
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
1324
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
1325
|
-
this._dir = inject(Directionality, { optional: true });
|
|
1326
|
-
this._rerenderSubscription = Subscription.EMPTY;
|
|
1327
|
-
/** Emits when a new year is selected. */
|
|
1328
|
-
this.selectedChange = new EventEmitter();
|
|
1329
|
-
/** Emits the selected year. This doesn't imply a change on the selected date */
|
|
1330
|
-
this.yearSelected = new EventEmitter();
|
|
1331
|
-
/** Emits when any date is activated. */
|
|
1332
|
-
this.activeDateChange = new EventEmitter();
|
|
1333
1443
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
1334
1444
|
throw createMissingDateImplError('DateAdapter');
|
|
1335
1445
|
}
|
|
@@ -1515,12 +1625,12 @@ class MatMultiYearView {
|
|
|
1515
1625
|
this._selectedYear = this._dateAdapter.getYear(value);
|
|
1516
1626
|
}
|
|
1517
1627
|
}
|
|
1518
|
-
static
|
|
1519
|
-
static
|
|
1628
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMultiYearView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1629
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatMultiYearView, isStandalone: true, selector: "mat-multi-year-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass" }, outputs: { selectedChange: "selectedChange", yearSelected: "yearSelected", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matMultiYearView"], ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [startValue]=\"_selectedYear!\"\n [endValue]=\"_selectedYear!\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1520
1630
|
}
|
|
1521
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
1631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMultiYearView, decorators: [{
|
|
1522
1632
|
type: Component,
|
|
1523
|
-
args: [{ selector: 'mat-multi-year-view', exportAs: 'matMultiYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1633
|
+
args: [{ selector: 'mat-multi-year-view', exportAs: 'matMultiYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCalendarBody], template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [startValue]=\"_selectedYear!\"\n [endValue]=\"_selectedYear!\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n" }]
|
|
1524
1634
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{
|
|
1525
1635
|
type: Input
|
|
1526
1636
|
}], selected: [{
|
|
@@ -1584,6 +1694,13 @@ function euclideanModulo(a, b) {
|
|
|
1584
1694
|
* @docs-private
|
|
1585
1695
|
*/
|
|
1586
1696
|
class MatYearView {
|
|
1697
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
1698
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
1699
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
1700
|
+
_dir = inject(Directionality, { optional: true });
|
|
1701
|
+
_rerenderSubscription = Subscription.EMPTY;
|
|
1702
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
1703
|
+
_selectionKeyPressed;
|
|
1587
1704
|
/** The date to display in this year view (everything other than the year is ignored). */
|
|
1588
1705
|
get activeDate() {
|
|
1589
1706
|
return this._activeDate;
|
|
@@ -1597,6 +1714,7 @@ class MatYearView {
|
|
|
1597
1714
|
this._init();
|
|
1598
1715
|
}
|
|
1599
1716
|
}
|
|
1717
|
+
_activeDate;
|
|
1600
1718
|
/** The currently selected date. */
|
|
1601
1719
|
get selected() {
|
|
1602
1720
|
return this._selected;
|
|
@@ -1610,6 +1728,7 @@ class MatYearView {
|
|
|
1610
1728
|
}
|
|
1611
1729
|
this._setSelectedMonth(value);
|
|
1612
1730
|
}
|
|
1731
|
+
_selected;
|
|
1613
1732
|
/** The minimum selectable date. */
|
|
1614
1733
|
get minDate() {
|
|
1615
1734
|
return this._minDate;
|
|
@@ -1617,6 +1736,7 @@ class MatYearView {
|
|
|
1617
1736
|
set minDate(value) {
|
|
1618
1737
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1619
1738
|
}
|
|
1739
|
+
_minDate;
|
|
1620
1740
|
/** The maximum selectable date. */
|
|
1621
1741
|
get maxDate() {
|
|
1622
1742
|
return this._maxDate;
|
|
@@ -1624,18 +1744,31 @@ class MatYearView {
|
|
|
1624
1744
|
set maxDate(value) {
|
|
1625
1745
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1626
1746
|
}
|
|
1747
|
+
_maxDate;
|
|
1748
|
+
/** A function used to filter which dates are selectable. */
|
|
1749
|
+
dateFilter;
|
|
1750
|
+
/** Function that can be used to add custom CSS classes to date cells. */
|
|
1751
|
+
dateClass;
|
|
1752
|
+
/** Emits when a new month is selected. */
|
|
1753
|
+
selectedChange = new EventEmitter();
|
|
1754
|
+
/** Emits the selected month. This doesn't imply a change on the selected date */
|
|
1755
|
+
monthSelected = new EventEmitter();
|
|
1756
|
+
/** Emits when any date is activated. */
|
|
1757
|
+
activeDateChange = new EventEmitter();
|
|
1758
|
+
/** The body of calendar table */
|
|
1759
|
+
_matCalendarBody;
|
|
1760
|
+
/** Grid of calendar cells representing the months of the year. */
|
|
1761
|
+
_months;
|
|
1762
|
+
/** The label for this year (e.g. "2017"). */
|
|
1763
|
+
_yearLabel;
|
|
1764
|
+
/** The month in this year that today falls on. Null if today is in a different year. */
|
|
1765
|
+
_todayMonth;
|
|
1766
|
+
/**
|
|
1767
|
+
* The month in this year that the selected Date falls on.
|
|
1768
|
+
* Null if the selected Date is in a different year.
|
|
1769
|
+
*/
|
|
1770
|
+
_selectedMonth;
|
|
1627
1771
|
constructor() {
|
|
1628
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
1629
|
-
this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
1630
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
1631
|
-
this._dir = inject(Directionality, { optional: true });
|
|
1632
|
-
this._rerenderSubscription = Subscription.EMPTY;
|
|
1633
|
-
/** Emits when a new month is selected. */
|
|
1634
|
-
this.selectedChange = new EventEmitter();
|
|
1635
|
-
/** Emits the selected month. This doesn't imply a change on the selected date */
|
|
1636
|
-
this.monthSelected = new EventEmitter();
|
|
1637
|
-
/** Emits when any date is activated. */
|
|
1638
|
-
this.activeDateChange = new EventEmitter();
|
|
1639
1772
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
1640
1773
|
if (!this._dateAdapter) {
|
|
1641
1774
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -1846,12 +1979,12 @@ class MatYearView {
|
|
|
1846
1979
|
this._selectedMonth = this._getMonthInCurrentYear(value);
|
|
1847
1980
|
}
|
|
1848
1981
|
}
|
|
1849
|
-
static
|
|
1850
|
-
static
|
|
1982
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatYearView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1983
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatYearView, isStandalone: true, selector: "mat-year-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass" }, outputs: { selectedChange: "selectedChange", monthSelected: "monthSelected", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: MatCalendarBody, descendants: true }], exportAs: ["matYearView"], ngImport: i0, template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [startValue]=\"_selectedMonth!\"\n [endValue]=\"_selectedMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\n (selectedValueChange)=\"_monthSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n", dependencies: [{ kind: "component", type: MatCalendarBody, selector: "[mat-calendar-body]", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "activeDateChange", "dragStarted", "dragEnded"], exportAs: ["matCalendarBody"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1851
1984
|
}
|
|
1852
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
1985
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatYearView, decorators: [{
|
|
1853
1986
|
type: Component,
|
|
1854
|
-
args: [{ selector: 'mat-year-view', exportAs: 'matYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1987
|
+
args: [{ selector: 'mat-year-view', exportAs: 'matYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCalendarBody], template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [startValue]=\"_selectedMonth!\"\n [endValue]=\"_selectedMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\n (selectedValueChange)=\"_monthSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n" }]
|
|
1855
1988
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{
|
|
1856
1989
|
type: Input
|
|
1857
1990
|
}], selected: [{
|
|
@@ -1878,13 +2011,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
1878
2011
|
let calendarHeaderId = 1;
|
|
1879
2012
|
/** Default header for MatCalendar */
|
|
1880
2013
|
class MatCalendarHeader {
|
|
2014
|
+
_intl = inject(MatDatepickerIntl);
|
|
2015
|
+
calendar = inject(MatCalendar);
|
|
2016
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
2017
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
1881
2018
|
constructor() {
|
|
1882
|
-
|
|
1883
|
-
this.calendar = inject(MatCalendar);
|
|
1884
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
1885
|
-
this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
1886
|
-
this._id = `mat-calendar-header-${calendarHeaderId++}`;
|
|
1887
|
-
this._periodButtonLabelId = `${this._id}-period-label`;
|
|
2019
|
+
inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
|
|
1888
2020
|
const changeDetectorRef = inject(ChangeDetectorRef);
|
|
1889
2021
|
this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());
|
|
1890
2022
|
}
|
|
@@ -1994,15 +2126,31 @@ class MatCalendarHeader {
|
|
|
1994
2126
|
const maxYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));
|
|
1995
2127
|
return [minYearLabel, maxYearLabel];
|
|
1996
2128
|
}
|
|
1997
|
-
|
|
1998
|
-
|
|
2129
|
+
_id = `mat-calendar-header-${calendarHeaderId++}`;
|
|
2130
|
+
_periodButtonLabelId = `${this._id}-period-label`;
|
|
2131
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2132
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatCalendarHeader, isStandalone: true, selector: "mat-calendar-header", exportAs: ["matCalendarHeader"], ngImport: i0, template: "<div class=\"mat-calendar-header\">\n <div class=\"mat-calendar-controls\">\n <!-- [Firefox Issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1880533]\n Relocated label next to related button and made visually hidden via cdk-visually-hidden\n to enable label to appear in a11y tree for SR when using Firefox -->\n <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\n <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n [attr.aria-describedby]=\"_periodButtonLabelId\">\n <span aria-hidden=\"true\">{{periodButtonText}}</span>\n <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\n <polygon points=\"0,0 5,5 10,0\"/>\n </svg>\n </button>\n\n <div class=\"mat-calendar-spacer\"></div>\n\n <ng-content></ng-content>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n [attr.aria-label]=\"prevButtonLabel\">\n </button>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n [attr.aria-label]=\"nextButtonLabel\">\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1999
2133
|
}
|
|
2000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
2134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarHeader, decorators: [{
|
|
2001
2135
|
type: Component,
|
|
2002
|
-
args: [{ selector: 'mat-calendar-header', exportAs: 'matCalendarHeader', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2136
|
+
args: [{ selector: 'mat-calendar-header', exportAs: 'matCalendarHeader', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatButton, MatIconButton], template: "<div class=\"mat-calendar-header\">\n <div class=\"mat-calendar-controls\">\n <!-- [Firefox Issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1880533]\n Relocated label next to related button and made visually hidden via cdk-visually-hidden\n to enable label to appear in a11y tree for SR when using Firefox -->\n <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\n <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n [attr.aria-describedby]=\"_periodButtonLabelId\">\n <span aria-hidden=\"true\">{{periodButtonText}}</span>\n <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\n <polygon points=\"0,0 5,5 10,0\"/>\n </svg>\n </button>\n\n <div class=\"mat-calendar-spacer\"></div>\n\n <ng-content></ng-content>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n [attr.aria-label]=\"prevButtonLabel\">\n </button>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n [attr.aria-label]=\"nextButtonLabel\">\n </button>\n </div>\n</div>\n" }]
|
|
2003
2137
|
}], ctorParameters: () => [] });
|
|
2004
2138
|
/** A calendar that is used as part of the datepicker. */
|
|
2005
2139
|
class MatCalendar {
|
|
2140
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
2141
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
2142
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
2143
|
+
/** An input indicating the type of the header component, if set. */
|
|
2144
|
+
headerComponent;
|
|
2145
|
+
/** A portal containing the header component type for this calendar. */
|
|
2146
|
+
_calendarHeaderPortal;
|
|
2147
|
+
_intlChanges;
|
|
2148
|
+
/**
|
|
2149
|
+
* Used for scheduling that focus should be moved to the active cell on the next tick.
|
|
2150
|
+
* We need to schedule it, rather than do it immediately, because we have to wait
|
|
2151
|
+
* for Angular to re-evaluate the view children.
|
|
2152
|
+
*/
|
|
2153
|
+
_moveFocusOnNextTick = false;
|
|
2006
2154
|
/** A date representing the period (month or year) to start the calendar in. */
|
|
2007
2155
|
get startAt() {
|
|
2008
2156
|
return this._startAt;
|
|
@@ -2010,6 +2158,9 @@ class MatCalendar {
|
|
|
2010
2158
|
set startAt(value) {
|
|
2011
2159
|
this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2012
2160
|
}
|
|
2161
|
+
_startAt;
|
|
2162
|
+
/** Whether the calendar should be started in month or year view. */
|
|
2163
|
+
startView = 'month';
|
|
2013
2164
|
/** The currently selected date. */
|
|
2014
2165
|
get selected() {
|
|
2015
2166
|
return this._selected;
|
|
@@ -2022,6 +2173,7 @@ class MatCalendar {
|
|
|
2022
2173
|
this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2023
2174
|
}
|
|
2024
2175
|
}
|
|
2176
|
+
_selected;
|
|
2025
2177
|
/** The minimum selectable date. */
|
|
2026
2178
|
get minDate() {
|
|
2027
2179
|
return this._minDate;
|
|
@@ -2029,6 +2181,7 @@ class MatCalendar {
|
|
|
2029
2181
|
set minDate(value) {
|
|
2030
2182
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2031
2183
|
}
|
|
2184
|
+
_minDate;
|
|
2032
2185
|
/** The maximum selectable date. */
|
|
2033
2186
|
get maxDate() {
|
|
2034
2187
|
return this._maxDate;
|
|
@@ -2036,6 +2189,45 @@ class MatCalendar {
|
|
|
2036
2189
|
set maxDate(value) {
|
|
2037
2190
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2038
2191
|
}
|
|
2192
|
+
_maxDate;
|
|
2193
|
+
/** Function used to filter which dates are selectable. */
|
|
2194
|
+
dateFilter;
|
|
2195
|
+
/** Function that can be used to add custom CSS classes to dates. */
|
|
2196
|
+
dateClass;
|
|
2197
|
+
/** Start of the comparison range. */
|
|
2198
|
+
comparisonStart;
|
|
2199
|
+
/** End of the comparison range. */
|
|
2200
|
+
comparisonEnd;
|
|
2201
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
2202
|
+
startDateAccessibleName;
|
|
2203
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
2204
|
+
endDateAccessibleName;
|
|
2205
|
+
/** Emits when the currently selected date changes. */
|
|
2206
|
+
selectedChange = new EventEmitter();
|
|
2207
|
+
/**
|
|
2208
|
+
* Emits the year chosen in multiyear view.
|
|
2209
|
+
* This doesn't imply a change on the selected date.
|
|
2210
|
+
*/
|
|
2211
|
+
yearSelected = new EventEmitter();
|
|
2212
|
+
/**
|
|
2213
|
+
* Emits the month chosen in year view.
|
|
2214
|
+
* This doesn't imply a change on the selected date.
|
|
2215
|
+
*/
|
|
2216
|
+
monthSelected = new EventEmitter();
|
|
2217
|
+
/**
|
|
2218
|
+
* Emits when the current view changes.
|
|
2219
|
+
*/
|
|
2220
|
+
viewChanged = new EventEmitter(true);
|
|
2221
|
+
/** Emits when any date is selected. */
|
|
2222
|
+
_userSelection = new EventEmitter();
|
|
2223
|
+
/** Emits a new date range value when the user completes a drag drop operation. */
|
|
2224
|
+
_userDragDrop = new EventEmitter();
|
|
2225
|
+
/** Reference to the current month view component. */
|
|
2226
|
+
monthView;
|
|
2227
|
+
/** Reference to the current year view component. */
|
|
2228
|
+
yearView;
|
|
2229
|
+
/** Reference to the current multi-year view component. */
|
|
2230
|
+
multiYearView;
|
|
2039
2231
|
/**
|
|
2040
2232
|
* The current active date. This determines which time period is shown and which date is
|
|
2041
2233
|
* highlighted when using keyboard navigation.
|
|
@@ -2048,6 +2240,7 @@ class MatCalendar {
|
|
|
2048
2240
|
this.stateChanges.next();
|
|
2049
2241
|
this._changeDetectorRef.markForCheck();
|
|
2050
2242
|
}
|
|
2243
|
+
_clampedActiveDate;
|
|
2051
2244
|
/** Whether the calendar is in month view. */
|
|
2052
2245
|
get currentView() {
|
|
2053
2246
|
return this._currentView;
|
|
@@ -2061,44 +2254,14 @@ class MatCalendar {
|
|
|
2061
2254
|
this.viewChanged.emit(viewChangedResult);
|
|
2062
2255
|
}
|
|
2063
2256
|
}
|
|
2257
|
+
_currentView;
|
|
2258
|
+
/** Origin of active drag, or null when dragging is not active. */
|
|
2259
|
+
_activeDrag = null;
|
|
2260
|
+
/**
|
|
2261
|
+
* Emits whenever there is a state change that the header may need to respond to.
|
|
2262
|
+
*/
|
|
2263
|
+
stateChanges = new Subject();
|
|
2064
2264
|
constructor() {
|
|
2065
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
2066
|
-
this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
2067
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
2068
|
-
/**
|
|
2069
|
-
* Used for scheduling that focus should be moved to the active cell on the next tick.
|
|
2070
|
-
* We need to schedule it, rather than do it immediately, because we have to wait
|
|
2071
|
-
* for Angular to re-evaluate the view children.
|
|
2072
|
-
*/
|
|
2073
|
-
this._moveFocusOnNextTick = false;
|
|
2074
|
-
/** Whether the calendar should be started in month or year view. */
|
|
2075
|
-
this.startView = 'month';
|
|
2076
|
-
/** Emits when the currently selected date changes. */
|
|
2077
|
-
this.selectedChange = new EventEmitter();
|
|
2078
|
-
/**
|
|
2079
|
-
* Emits the year chosen in multiyear view.
|
|
2080
|
-
* This doesn't imply a change on the selected date.
|
|
2081
|
-
*/
|
|
2082
|
-
this.yearSelected = new EventEmitter();
|
|
2083
|
-
/**
|
|
2084
|
-
* Emits the month chosen in year view.
|
|
2085
|
-
* This doesn't imply a change on the selected date.
|
|
2086
|
-
*/
|
|
2087
|
-
this.monthSelected = new EventEmitter();
|
|
2088
|
-
/**
|
|
2089
|
-
* Emits when the current view changes.
|
|
2090
|
-
*/
|
|
2091
|
-
this.viewChanged = new EventEmitter(true);
|
|
2092
|
-
/** Emits when any date is selected. */
|
|
2093
|
-
this._userSelection = new EventEmitter();
|
|
2094
|
-
/** Emits a new date range value when the user completes a drag drop operation. */
|
|
2095
|
-
this._userDragDrop = new EventEmitter();
|
|
2096
|
-
/** Origin of active drag, or null when dragging is not active. */
|
|
2097
|
-
this._activeDrag = null;
|
|
2098
|
-
/**
|
|
2099
|
-
* Emits whenever there is a state change that the header may need to respond to.
|
|
2100
|
-
*/
|
|
2101
|
-
this.stateChanges = new Subject();
|
|
2102
2265
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2103
2266
|
if (!this._dateAdapter) {
|
|
2104
2267
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -2208,14 +2371,14 @@ class MatCalendar {
|
|
|
2208
2371
|
// only the first component type. See https://github.com/angular/components/issues/22996.
|
|
2209
2372
|
return this.monthView || this.yearView || this.multiYearView;
|
|
2210
2373
|
}
|
|
2211
|
-
static
|
|
2212
|
-
static
|
|
2374
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2375
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatCalendar, isStandalone: true, selector: "mat-calendar", inputs: { headerComponent: "headerComponent", startAt: "startAt", startView: "startView", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName" }, outputs: { selectedChange: "selectedChange", yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged", _userSelection: "_userSelection", _userDragDrop: "_userDragDrop" }, host: { classAttribute: "mat-calendar" }, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], viewQueries: [{ propertyName: "monthView", first: true, predicate: MatMonthView, descendants: true }, { propertyName: "yearView", first: true, predicate: MatYearView, descendants: true }, { propertyName: "multiYearView", first: true, predicate: MatMultiYearView, descendants: true }], exportAs: ["matCalendar"], usesOnChanges: true, ngImport: i0, template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mat-month-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (_userSelection)=\"_dateSelected($event)\"\n (dragStarted)=\"_dragStarted($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n [activeDrag]=\"_activeDrag\"></mat-month-view>\n }\n\n @case ('year') {\n <mat-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\"></mat-year-view>\n }\n\n @case ('multi-year') {\n <mat-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\"></mat-multi-year-view>\n }\n }\n</div>\n", styles: [".mat-calendar{display:block;line-height:normal;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size))}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-period-button-text-weight, var(--mat-sys-title-small-weight));--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}@media(forced-colors: active){.mat-calendar-arrow{fill:CanvasText}}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-datepicker-content .mat-calendar-previous-button:not(.mat-mdc-button-disabled),.mat-datepicker-content .mat-calendar-next-button:not(.mat-mdc-button-disabled){color:var(--mat-datepicker-calendar-navigation-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0;color:var(--mat-datepicker-calendar-header-text-color, var(--mat-sys-on-surface-variant));font-size:var(--mat-datepicker-calendar-header-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-header-text-weight, var(--mat-sys-title-small-weight))}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px;background:var(--mat-datepicker-calendar-header-divider-color, transparent)}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\"\"}"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "component", type: MatMonthView, selector: "mat-month-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName", "activeDrag"], outputs: ["selectedChange", "_userSelection", "dragStarted", "dragEnded", "activeDateChange"], exportAs: ["matMonthView"] }, { kind: "component", type: MatYearView, selector: "mat-year-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass"], outputs: ["selectedChange", "monthSelected", "activeDateChange"], exportAs: ["matYearView"] }, { kind: "component", type: MatMultiYearView, selector: "mat-multi-year-view", inputs: ["activeDate", "selected", "minDate", "maxDate", "dateFilter", "dateClass"], outputs: ["selectedChange", "yearSelected", "activeDateChange"], exportAs: ["matMultiYearView"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2213
2376
|
}
|
|
2214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
2377
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendar, decorators: [{
|
|
2215
2378
|
type: Component,
|
|
2216
2379
|
args: [{ selector: 'mat-calendar', host: {
|
|
2217
2380
|
'class': 'mat-calendar',
|
|
2218
|
-
}, exportAs: 'matCalendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER],
|
|
2381
|
+
}, exportAs: 'matCalendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], imports: [CdkPortalOutlet, CdkMonitorFocus, MatMonthView, MatYearView, MatMultiYearView], template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mat-month-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (_userSelection)=\"_dateSelected($event)\"\n (dragStarted)=\"_dragStarted($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n [activeDrag]=\"_activeDrag\"></mat-month-view>\n }\n\n @case ('year') {\n <mat-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\"></mat-year-view>\n }\n\n @case ('multi-year') {\n <mat-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\"></mat-multi-year-view>\n }\n }\n</div>\n", styles: [".mat-calendar{display:block;line-height:normal;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size))}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-period-button-text-weight, var(--mat-sys-title-small-weight));--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}@media(forced-colors: active){.mat-calendar-arrow{fill:CanvasText}}.mat-calendar-previous-button,.mat-calendar-next-button{position:relative}.mat-datepicker-content .mat-calendar-previous-button:not(.mat-mdc-button-disabled),.mat-datepicker-content .mat-calendar-next-button:not(.mat-mdc-button-disabled){color:var(--mat-datepicker-calendar-navigation-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-previous-button::after,.mat-calendar-next-button::after{top:0;left:0;right:0;bottom:0;position:absolute;content:\"\";margin:15.5px;border:0 solid currentColor;border-top-width:2px}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-previous-button::after{border-left-width:2px;transform:translateX(2px) rotate(-45deg)}.mat-calendar-next-button::after{border-right-width:2px;transform:translateX(-2px) rotate(45deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0;color:var(--mat-datepicker-calendar-header-text-color, var(--mat-sys-on-surface-variant));font-size:var(--mat-datepicker-calendar-header-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-header-text-weight, var(--mat-sys-title-small-weight))}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px;background:var(--mat-datepicker-calendar-header-divider-color, transparent)}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\"\"}"] }]
|
|
2219
2382
|
}], ctorParameters: () => [], propDecorators: { headerComponent: [{
|
|
2220
2383
|
type: Input
|
|
2221
2384
|
}], startAt: [{
|
|
@@ -2318,19 +2481,51 @@ const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {
|
|
|
2318
2481
|
* @docs-private
|
|
2319
2482
|
*/
|
|
2320
2483
|
class MatDatepickerContent {
|
|
2484
|
+
_elementRef = inject(ElementRef);
|
|
2485
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
2486
|
+
_globalModel = inject(MatDateSelectionModel);
|
|
2487
|
+
_dateAdapter = inject(DateAdapter);
|
|
2488
|
+
_rangeSelectionStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
|
|
2489
|
+
_subscriptions = new Subscription();
|
|
2490
|
+
_model;
|
|
2491
|
+
/** Reference to the internal calendar component. */
|
|
2492
|
+
_calendar;
|
|
2493
|
+
/**
|
|
2494
|
+
* Theme color of the internal calendar. This API is supported in M2 themes
|
|
2495
|
+
* only, it has no effect in M3 themes.
|
|
2496
|
+
*
|
|
2497
|
+
* For information on applying color variants in M3, see
|
|
2498
|
+
* https://material.angular.io/guide/theming#using-component-color-variants.
|
|
2499
|
+
*/
|
|
2500
|
+
color;
|
|
2501
|
+
/** Reference to the datepicker that created the overlay. */
|
|
2502
|
+
datepicker;
|
|
2503
|
+
/** Start of the comparison range. */
|
|
2504
|
+
comparisonStart;
|
|
2505
|
+
/** End of the comparison range. */
|
|
2506
|
+
comparisonEnd;
|
|
2507
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
2508
|
+
startDateAccessibleName;
|
|
2509
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
2510
|
+
endDateAccessibleName;
|
|
2511
|
+
/** Whether the datepicker is above or below the input. */
|
|
2512
|
+
_isAbove;
|
|
2513
|
+
/** Current state of the animation. */
|
|
2514
|
+
_animationState;
|
|
2515
|
+
/** Emits when an animation has finished. */
|
|
2516
|
+
_animationDone = new Subject();
|
|
2517
|
+
/** Whether there is an in-progress animation. */
|
|
2518
|
+
_isAnimating = false;
|
|
2519
|
+
/** Text for the close button. */
|
|
2520
|
+
_closeButtonText;
|
|
2521
|
+
/** Whether the close button currently has focus. */
|
|
2522
|
+
_closeButtonFocused;
|
|
2523
|
+
/** Portal with projected action buttons. */
|
|
2524
|
+
_actionsPortal = null;
|
|
2525
|
+
/** Id of the label for the `role="dialog"` element. */
|
|
2526
|
+
_dialogLabelId;
|
|
2321
2527
|
constructor() {
|
|
2322
|
-
|
|
2323
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
2324
|
-
this._globalModel = inject(MatDateSelectionModel);
|
|
2325
|
-
this._dateAdapter = inject(DateAdapter);
|
|
2326
|
-
this._rangeSelectionStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
|
|
2327
|
-
this._subscriptions = new Subscription();
|
|
2328
|
-
/** Emits when an animation has finished. */
|
|
2329
|
-
this._animationDone = new Subject();
|
|
2330
|
-
/** Whether there is an in-progress animation. */
|
|
2331
|
-
this._isAnimating = false;
|
|
2332
|
-
/** Portal with projected action buttons. */
|
|
2333
|
-
this._actionsPortal = null;
|
|
2528
|
+
inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
|
|
2334
2529
|
const intl = inject(MatDatepickerIntl);
|
|
2335
2530
|
this._closeButtonText = intl.closeCalendarLabel;
|
|
2336
2531
|
}
|
|
@@ -2408,10 +2603,10 @@ class MatDatepickerContent {
|
|
|
2408
2603
|
this._changeDetectorRef.detectChanges();
|
|
2409
2604
|
}
|
|
2410
2605
|
}
|
|
2411
|
-
static
|
|
2412
|
-
static
|
|
2606
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2607
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerContent, isStandalone: true, selector: "mat-datepicker-content", inputs: { color: "color" }, host: { listeners: { "@transformPanel.start": "_handleAnimationEvent($event)", "@transformPanel.done": "_handleAnimationEvent($event)" }, properties: { "class": "color ? \"mat-\" + color : \"\"", "@transformPanel": "_animationState", "class.mat-datepicker-content-touch": "datepicker.touchUi" }, classAttribute: "mat-datepicker-content" }, viewQueries: [{ propertyName: "_calendar", first: true, predicate: MatCalendar, descendants: true }], exportAs: ["matDatepickerContent"], ngImport: i0, template: "<div\n cdkTrapFocus\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n class=\"mat-datepicker-content-container\"\n [class.mat-datepicker-content-container-with-custom-header]=\"datepicker.calendarHeaderComponent\"\n [class.mat-datepicker-content-container-with-actions]=\"_actionsPortal\">\n <mat-calendar\n [id]=\"datepicker.id\"\n [class]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (viewChanged)=\"datepicker._viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection($event)\"\n (_userDragDrop)=\"_handleUserDragDrop($event)\"></mat-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mat-datepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n", styles: [".mat-datepicker-content{display:block;border-radius:4px;background-color:var(--mat-datepicker-calendar-container-background-color, var(--mat-sys-surface-container-high));color:var(--mat-datepicker-calendar-container-text-color, var(--mat-sys-on-surface));box-shadow:var(--mat-datepicker-calendar-container-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-shape, var(--mat-sys-corner-large))}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;box-shadow:var(--mat-datepicker-calendar-container-touch-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-touch-shape, var(--mat-sys-corner-extra-large));position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}"], dependencies: [{ kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2413
2608
|
}
|
|
2414
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
2609
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerContent, decorators: [{
|
|
2415
2610
|
type: Component,
|
|
2416
2611
|
args: [{ selector: 'mat-datepicker-content', host: {
|
|
2417
2612
|
'class': 'mat-datepicker-content',
|
|
@@ -2420,7 +2615,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
2420
2615
|
'(@transformPanel.start)': '_handleAnimationEvent($event)',
|
|
2421
2616
|
'(@transformPanel.done)': '_handleAnimationEvent($event)',
|
|
2422
2617
|
'[class.mat-datepicker-content-touch]': 'datepicker.touchUi',
|
|
2423
|
-
}, animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], exportAs: 'matDatepickerContent', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2618
|
+
}, animations: [matDatepickerAnimations.transformPanel, matDatepickerAnimations.fadeInCalendar], exportAs: 'matDatepickerContent', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CdkTrapFocus, MatCalendar, CdkPortalOutlet, MatButton], template: "<div\n cdkTrapFocus\n role=\"dialog\"\n [attr.aria-modal]=\"true\"\n [attr.aria-labelledby]=\"_dialogLabelId ?? undefined\"\n class=\"mat-datepicker-content-container\"\n [class.mat-datepicker-content-container-with-custom-header]=\"datepicker.calendarHeaderComponent\"\n [class.mat-datepicker-content-container-with-actions]=\"_actionsPortal\">\n <mat-calendar\n [id]=\"datepicker.id\"\n [class]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [headerComponent]=\"datepicker.calendarHeaderComponent\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (viewChanged)=\"datepicker._viewChanged($event)\"\n (_userSelection)=\"_handleUserSelection($event)\"\n (_userDragDrop)=\"_handleUserDragDrop($event)\"></mat-calendar>\n\n <ng-template [cdkPortalOutlet]=\"_actionsPortal\"></ng-template>\n\n <!-- Invisible close button for screen reader users. -->\n <button\n type=\"button\"\n mat-raised-button\n [color]=\"color || 'primary'\"\n class=\"mat-datepicker-close-button\"\n [class.cdk-visually-hidden]=\"!_closeButtonFocused\"\n (focus)=\"_closeButtonFocused = true\"\n (blur)=\"_closeButtonFocused = false\"\n (click)=\"datepicker.close()\">{{ _closeButtonText }}</button>\n</div>\n", styles: [".mat-datepicker-content{display:block;border-radius:4px;background-color:var(--mat-datepicker-calendar-container-background-color, var(--mat-sys-surface-container-high));color:var(--mat-datepicker-calendar-container-text-color, var(--mat-sys-on-surface));box-shadow:var(--mat-datepicker-calendar-container-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-shape, var(--mat-sys-corner-large))}.mat-datepicker-content .mat-calendar{width:296px;height:354px}.mat-datepicker-content .mat-datepicker-content-container-with-custom-header .mat-calendar{height:auto}.mat-datepicker-content .mat-datepicker-close-button{position:absolute;top:100%;left:0;margin-top:8px}.ng-animating .mat-datepicker-content .mat-datepicker-close-button{display:none}.mat-datepicker-content-container{display:flex;flex-direction:column;justify-content:space-between}.mat-datepicker-content-touch{display:block;max-height:80vh;box-shadow:var(--mat-datepicker-calendar-container-touch-elevation-shadow, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12));border-radius:var(--mat-datepicker-calendar-container-touch-shape, var(--mat-sys-corner-extra-large));position:relative;overflow:visible}.mat-datepicker-content-touch .mat-datepicker-content-container{min-height:312px;max-height:788px;min-width:250px;max-width:750px}.mat-datepicker-content-touch .mat-calendar{width:100%;height:auto}@media all and (orientation: landscape){.mat-datepicker-content-touch .mat-datepicker-content-container{width:64vh;height:80vh}}@media all and (orientation: portrait){.mat-datepicker-content-touch .mat-datepicker-content-container{width:80vw;height:100vw}.mat-datepicker-content-touch .mat-datepicker-content-container-with-actions{height:115vw}}"] }]
|
|
2424
2619
|
}], ctorParameters: () => [], propDecorators: { _calendar: [{
|
|
2425
2620
|
type: ViewChild,
|
|
2426
2621
|
args: [MatCalendar]
|
|
@@ -2429,6 +2624,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
2429
2624
|
}] } });
|
|
2430
2625
|
/** Base class for a datepicker. */
|
|
2431
2626
|
class MatDatepickerBase {
|
|
2627
|
+
_overlay = inject(Overlay);
|
|
2628
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
2629
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
2630
|
+
_dir = inject(Directionality, { optional: true });
|
|
2631
|
+
_model = inject(MatDateSelectionModel);
|
|
2632
|
+
_scrollStrategy = inject(MAT_DATEPICKER_SCROLL_STRATEGY);
|
|
2633
|
+
_inputStateChanges = Subscription.EMPTY;
|
|
2634
|
+
_document = inject(DOCUMENT);
|
|
2635
|
+
/** An input indicating the type of the custom header component for the calendar, if set. */
|
|
2636
|
+
calendarHeaderComponent;
|
|
2432
2637
|
/** The date to open the calendar to initially. */
|
|
2433
2638
|
get startAt() {
|
|
2434
2639
|
// If an explicit startAt is set we start there, otherwise we start at whatever the currently
|
|
@@ -2438,6 +2643,9 @@ class MatDatepickerBase {
|
|
|
2438
2643
|
set startAt(value) {
|
|
2439
2644
|
this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2440
2645
|
}
|
|
2646
|
+
_startAt;
|
|
2647
|
+
/** The view that the calendar should start in. */
|
|
2648
|
+
startView = 'month';
|
|
2441
2649
|
/**
|
|
2442
2650
|
* Theme color of the datepicker's calendar. This API is supported in M2 themes only, it
|
|
2443
2651
|
* has no effect in M3 themes.
|
|
@@ -2451,6 +2659,12 @@ class MatDatepickerBase {
|
|
|
2451
2659
|
set color(value) {
|
|
2452
2660
|
this._color = value;
|
|
2453
2661
|
}
|
|
2662
|
+
_color;
|
|
2663
|
+
/**
|
|
2664
|
+
* Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather
|
|
2665
|
+
* than a dropdown and elements have more padding to allow for bigger touch targets.
|
|
2666
|
+
*/
|
|
2667
|
+
touchUi = false;
|
|
2454
2668
|
/** Whether the datepicker pop-up should be disabled. */
|
|
2455
2669
|
get disabled() {
|
|
2456
2670
|
return this._disabled === undefined && this.datepickerInput
|
|
@@ -2463,6 +2677,37 @@ class MatDatepickerBase {
|
|
|
2463
2677
|
this.stateChanges.next(undefined);
|
|
2464
2678
|
}
|
|
2465
2679
|
}
|
|
2680
|
+
_disabled;
|
|
2681
|
+
/** Preferred position of the datepicker in the X axis. */
|
|
2682
|
+
xPosition = 'start';
|
|
2683
|
+
/** Preferred position of the datepicker in the Y axis. */
|
|
2684
|
+
yPosition = 'below';
|
|
2685
|
+
/**
|
|
2686
|
+
* Whether to restore focus to the previously-focused element when the calendar is closed.
|
|
2687
|
+
* Note that automatic focus restoration is an accessibility feature and it is recommended that
|
|
2688
|
+
* you provide your own equivalent, if you decide to turn it off.
|
|
2689
|
+
*/
|
|
2690
|
+
restoreFocus = true;
|
|
2691
|
+
/**
|
|
2692
|
+
* Emits selected year in multiyear view.
|
|
2693
|
+
* This doesn't imply a change on the selected date.
|
|
2694
|
+
*/
|
|
2695
|
+
yearSelected = new EventEmitter();
|
|
2696
|
+
/**
|
|
2697
|
+
* Emits selected month in year view.
|
|
2698
|
+
* This doesn't imply a change on the selected date.
|
|
2699
|
+
*/
|
|
2700
|
+
monthSelected = new EventEmitter();
|
|
2701
|
+
/**
|
|
2702
|
+
* Emits when the current view changes.
|
|
2703
|
+
*/
|
|
2704
|
+
viewChanged = new EventEmitter(true);
|
|
2705
|
+
/** Function that can be used to add custom CSS classes to dates. */
|
|
2706
|
+
dateClass;
|
|
2707
|
+
/** Emits when the datepicker has been opened. */
|
|
2708
|
+
openedStream = new EventEmitter();
|
|
2709
|
+
/** Emits when the datepicker has been closed. */
|
|
2710
|
+
closedStream = new EventEmitter();
|
|
2466
2711
|
/** Classes to be passed to the date picker panel. */
|
|
2467
2712
|
get panelClass() {
|
|
2468
2713
|
return this._panelClass;
|
|
@@ -2470,6 +2715,7 @@ class MatDatepickerBase {
|
|
|
2470
2715
|
set panelClass(value) {
|
|
2471
2716
|
this._panelClass = coerceStringArray(value);
|
|
2472
2717
|
}
|
|
2718
|
+
_panelClass;
|
|
2473
2719
|
/** Whether the calendar is open. */
|
|
2474
2720
|
get opened() {
|
|
2475
2721
|
return this._opened;
|
|
@@ -2482,6 +2728,9 @@ class MatDatepickerBase {
|
|
|
2482
2728
|
this.close();
|
|
2483
2729
|
}
|
|
2484
2730
|
}
|
|
2731
|
+
_opened = false;
|
|
2732
|
+
/** The id for the datepicker calendar. */
|
|
2733
|
+
id = `mat-datepicker-${datepickerUid++}`;
|
|
2485
2734
|
/** The minimum selectable date. */
|
|
2486
2735
|
_getMinDate() {
|
|
2487
2736
|
return this.datepickerInput && this.datepickerInput.min;
|
|
@@ -2493,61 +2742,23 @@ class MatDatepickerBase {
|
|
|
2493
2742
|
_getDateFilter() {
|
|
2494
2743
|
return this.datepickerInput && this.datepickerInput.dateFilter;
|
|
2495
2744
|
}
|
|
2745
|
+
/** A reference to the overlay into which we've rendered the calendar. */
|
|
2746
|
+
_overlayRef;
|
|
2747
|
+
/** Reference to the component instance rendered in the overlay. */
|
|
2748
|
+
_componentRef;
|
|
2749
|
+
/** The element that was focused before the datepicker was opened. */
|
|
2750
|
+
_focusedElementBeforeOpen = null;
|
|
2751
|
+
/** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
|
|
2752
|
+
_backdropHarnessClass = `${this.id}-backdrop`;
|
|
2753
|
+
/** Currently-registered actions portal. */
|
|
2754
|
+
_actionsPortal;
|
|
2755
|
+
/** The input element this datepicker is associated with. */
|
|
2756
|
+
datepickerInput;
|
|
2757
|
+
/** Emits when the datepicker's state changes. */
|
|
2758
|
+
stateChanges = new Subject();
|
|
2759
|
+
_injector = inject(Injector);
|
|
2760
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
2496
2761
|
constructor() {
|
|
2497
|
-
this._overlay = inject(Overlay);
|
|
2498
|
-
this._viewContainerRef = inject(ViewContainerRef);
|
|
2499
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
2500
|
-
this._dir = inject(Directionality, { optional: true });
|
|
2501
|
-
this._model = inject(MatDateSelectionModel);
|
|
2502
|
-
this._scrollStrategy = inject(MAT_DATEPICKER_SCROLL_STRATEGY);
|
|
2503
|
-
this._inputStateChanges = Subscription.EMPTY;
|
|
2504
|
-
this._document = inject(DOCUMENT);
|
|
2505
|
-
/** The view that the calendar should start in. */
|
|
2506
|
-
this.startView = 'month';
|
|
2507
|
-
/**
|
|
2508
|
-
* Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather
|
|
2509
|
-
* than a dropdown and elements have more padding to allow for bigger touch targets.
|
|
2510
|
-
*/
|
|
2511
|
-
this.touchUi = false;
|
|
2512
|
-
/** Preferred position of the datepicker in the X axis. */
|
|
2513
|
-
this.xPosition = 'start';
|
|
2514
|
-
/** Preferred position of the datepicker in the Y axis. */
|
|
2515
|
-
this.yPosition = 'below';
|
|
2516
|
-
/**
|
|
2517
|
-
* Whether to restore focus to the previously-focused element when the calendar is closed.
|
|
2518
|
-
* Note that automatic focus restoration is an accessibility feature and it is recommended that
|
|
2519
|
-
* you provide your own equivalent, if you decide to turn it off.
|
|
2520
|
-
*/
|
|
2521
|
-
this.restoreFocus = true;
|
|
2522
|
-
/**
|
|
2523
|
-
* Emits selected year in multiyear view.
|
|
2524
|
-
* This doesn't imply a change on the selected date.
|
|
2525
|
-
*/
|
|
2526
|
-
this.yearSelected = new EventEmitter();
|
|
2527
|
-
/**
|
|
2528
|
-
* Emits selected month in year view.
|
|
2529
|
-
* This doesn't imply a change on the selected date.
|
|
2530
|
-
*/
|
|
2531
|
-
this.monthSelected = new EventEmitter();
|
|
2532
|
-
/**
|
|
2533
|
-
* Emits when the current view changes.
|
|
2534
|
-
*/
|
|
2535
|
-
this.viewChanged = new EventEmitter(true);
|
|
2536
|
-
/** Emits when the datepicker has been opened. */
|
|
2537
|
-
this.openedStream = new EventEmitter();
|
|
2538
|
-
/** Emits when the datepicker has been closed. */
|
|
2539
|
-
this.closedStream = new EventEmitter();
|
|
2540
|
-
this._opened = false;
|
|
2541
|
-
/** The id for the datepicker calendar. */
|
|
2542
|
-
this.id = `mat-datepicker-${datepickerUid++}`;
|
|
2543
|
-
/** The element that was focused before the datepicker was opened. */
|
|
2544
|
-
this._focusedElementBeforeOpen = null;
|
|
2545
|
-
/** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
|
|
2546
|
-
this._backdropHarnessClass = `${this.id}-backdrop`;
|
|
2547
|
-
/** Emits when the datepicker's state changes. */
|
|
2548
|
-
this.stateChanges = new Subject();
|
|
2549
|
-
this._injector = inject(Injector);
|
|
2550
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
2551
2762
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
2552
2763
|
throw createMissingDateImplError('DateAdapter');
|
|
2553
2764
|
}
|
|
@@ -2811,10 +3022,10 @@ class MatDatepickerBase {
|
|
|
2811
3022
|
ctrlShiftMetaModifiers.every((modifier) => !hasModifierKey(event, modifier))));
|
|
2812
3023
|
})));
|
|
2813
3024
|
}
|
|
2814
|
-
static
|
|
2815
|
-
static
|
|
3025
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3026
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDatepickerBase, isStandalone: true, inputs: { calendarHeaderComponent: "calendarHeaderComponent", startAt: "startAt", startView: "startView", color: "color", touchUi: ["touchUi", "touchUi", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], xPosition: "xPosition", yPosition: "yPosition", restoreFocus: ["restoreFocus", "restoreFocus", booleanAttribute], dateClass: "dateClass", panelClass: "panelClass", opened: ["opened", "opened", booleanAttribute] }, outputs: { yearSelected: "yearSelected", monthSelected: "monthSelected", viewChanged: "viewChanged", openedStream: "opened", closedStream: "closed" }, usesOnChanges: true, ngImport: i0 });
|
|
2816
3027
|
}
|
|
2817
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3028
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerBase, decorators: [{
|
|
2818
3029
|
type: Directive
|
|
2819
3030
|
}], ctorParameters: () => [], propDecorators: { calendarHeaderComponent: [{
|
|
2820
3031
|
type: Input
|
|
@@ -2863,13 +3074,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
2863
3074
|
// if angular adds support for `exportAs: '$implicit'` on directives.
|
|
2864
3075
|
/** Component responsible for managing the datepicker popup/dialog. */
|
|
2865
3076
|
class MatDatepicker extends MatDatepickerBase {
|
|
2866
|
-
static
|
|
2867
|
-
static
|
|
3077
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
3078
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepicker, isStandalone: true, selector: "mat-datepicker", providers: [
|
|
2868
3079
|
MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,
|
|
2869
3080
|
{ provide: MatDatepickerBase, useExisting: MatDatepicker },
|
|
2870
|
-
], exportAs: ["matDatepicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3081
|
+
], exportAs: ["matDatepicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2871
3082
|
}
|
|
2872
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3083
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepicker, decorators: [{
|
|
2873
3084
|
type: Component,
|
|
2874
3085
|
args: [{
|
|
2875
3086
|
selector: 'mat-datepicker',
|
|
@@ -2881,7 +3092,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
2881
3092
|
MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,
|
|
2882
3093
|
{ provide: MatDatepickerBase, useExisting: MatDatepicker },
|
|
2883
3094
|
],
|
|
2884
|
-
standalone: true,
|
|
2885
3095
|
}]
|
|
2886
3096
|
}] });
|
|
2887
3097
|
|
|
@@ -2891,6 +3101,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
2891
3101
|
* calendar popup. For consistency, we always use MatDatepickerInputEvent instead.
|
|
2892
3102
|
*/
|
|
2893
3103
|
class MatDatepickerInputEvent {
|
|
3104
|
+
target;
|
|
3105
|
+
targetElement;
|
|
3106
|
+
/** The new value for the target datepicker input. */
|
|
3107
|
+
value;
|
|
2894
3108
|
constructor(
|
|
2895
3109
|
/** Reference to the datepicker input component that emitted the event. */
|
|
2896
3110
|
target,
|
|
@@ -2903,6 +3117,11 @@ class MatDatepickerInputEvent {
|
|
|
2903
3117
|
}
|
|
2904
3118
|
/** Base class for datepicker inputs. */
|
|
2905
3119
|
class MatDatepickerInputBase {
|
|
3120
|
+
_elementRef = inject(ElementRef);
|
|
3121
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
3122
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
3123
|
+
/** Whether the component has been initialized. */
|
|
3124
|
+
_isInitialized;
|
|
2906
3125
|
/** The value of the input. */
|
|
2907
3126
|
get value() {
|
|
2908
3127
|
return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;
|
|
@@ -2910,6 +3129,7 @@ class MatDatepickerInputBase {
|
|
|
2910
3129
|
set value(value) {
|
|
2911
3130
|
this._assignValueProgrammatically(value);
|
|
2912
3131
|
}
|
|
3132
|
+
_model;
|
|
2913
3133
|
/** Whether the datepicker-input is disabled. */
|
|
2914
3134
|
get disabled() {
|
|
2915
3135
|
return !!this._disabled || this._parentDisabled();
|
|
@@ -2932,6 +3152,53 @@ class MatDatepickerInputBase {
|
|
|
2932
3152
|
element.blur();
|
|
2933
3153
|
}
|
|
2934
3154
|
}
|
|
3155
|
+
_disabled;
|
|
3156
|
+
/** Emits when a `change` event is fired on this `<input>`. */
|
|
3157
|
+
dateChange = new EventEmitter();
|
|
3158
|
+
/** Emits when an `input` event is fired on this `<input>`. */
|
|
3159
|
+
dateInput = new EventEmitter();
|
|
3160
|
+
/** Emits when the internal state has changed */
|
|
3161
|
+
stateChanges = new Subject();
|
|
3162
|
+
_onTouched = () => { };
|
|
3163
|
+
_validatorOnChange = () => { };
|
|
3164
|
+
_cvaOnChange = () => { };
|
|
3165
|
+
_valueChangesSubscription = Subscription.EMPTY;
|
|
3166
|
+
_localeSubscription = Subscription.EMPTY;
|
|
3167
|
+
/**
|
|
3168
|
+
* Since the value is kept on the model which is assigned in an Input,
|
|
3169
|
+
* we might get a value before we have a model. This property keeps track
|
|
3170
|
+
* of the value until we have somewhere to assign it.
|
|
3171
|
+
*/
|
|
3172
|
+
_pendingValue;
|
|
3173
|
+
/** The form control validator for whether the input parses. */
|
|
3174
|
+
_parseValidator = () => {
|
|
3175
|
+
return this._lastValueValid
|
|
3176
|
+
? null
|
|
3177
|
+
: { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
|
|
3178
|
+
};
|
|
3179
|
+
/** The form control validator for the date filter. */
|
|
3180
|
+
_filterValidator = (control) => {
|
|
3181
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3182
|
+
return !controlValue || this._matchesFilter(controlValue)
|
|
3183
|
+
? null
|
|
3184
|
+
: { 'matDatepickerFilter': true };
|
|
3185
|
+
};
|
|
3186
|
+
/** The form control validator for the min date. */
|
|
3187
|
+
_minValidator = (control) => {
|
|
3188
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3189
|
+
const min = this._getMinDate();
|
|
3190
|
+
return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
|
|
3191
|
+
? null
|
|
3192
|
+
: { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
|
|
3193
|
+
};
|
|
3194
|
+
/** The form control validator for the max date. */
|
|
3195
|
+
_maxValidator = (control) => {
|
|
3196
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3197
|
+
const max = this._getMaxDate();
|
|
3198
|
+
return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
|
|
3199
|
+
? null
|
|
3200
|
+
: { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
|
|
3201
|
+
};
|
|
2935
3202
|
/** Gets the base validator functions. */
|
|
2936
3203
|
_getValidators() {
|
|
2937
3204
|
return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];
|
|
@@ -2955,52 +3222,9 @@ class MatDatepickerInputBase {
|
|
|
2955
3222
|
}
|
|
2956
3223
|
});
|
|
2957
3224
|
}
|
|
3225
|
+
/** Whether the last value set on the input was valid. */
|
|
3226
|
+
_lastValueValid = false;
|
|
2958
3227
|
constructor() {
|
|
2959
|
-
this._elementRef = inject(ElementRef);
|
|
2960
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
2961
|
-
this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
2962
|
-
/** Emits when a `change` event is fired on this `<input>`. */
|
|
2963
|
-
this.dateChange = new EventEmitter();
|
|
2964
|
-
/** Emits when an `input` event is fired on this `<input>`. */
|
|
2965
|
-
this.dateInput = new EventEmitter();
|
|
2966
|
-
/** Emits when the internal state has changed */
|
|
2967
|
-
this.stateChanges = new Subject();
|
|
2968
|
-
this._onTouched = () => { };
|
|
2969
|
-
this._validatorOnChange = () => { };
|
|
2970
|
-
this._cvaOnChange = () => { };
|
|
2971
|
-
this._valueChangesSubscription = Subscription.EMPTY;
|
|
2972
|
-
this._localeSubscription = Subscription.EMPTY;
|
|
2973
|
-
/** The form control validator for whether the input parses. */
|
|
2974
|
-
this._parseValidator = () => {
|
|
2975
|
-
return this._lastValueValid
|
|
2976
|
-
? null
|
|
2977
|
-
: { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
|
|
2978
|
-
};
|
|
2979
|
-
/** The form control validator for the date filter. */
|
|
2980
|
-
this._filterValidator = (control) => {
|
|
2981
|
-
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2982
|
-
return !controlValue || this._matchesFilter(controlValue)
|
|
2983
|
-
? null
|
|
2984
|
-
: { 'matDatepickerFilter': true };
|
|
2985
|
-
};
|
|
2986
|
-
/** The form control validator for the min date. */
|
|
2987
|
-
this._minValidator = (control) => {
|
|
2988
|
-
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2989
|
-
const min = this._getMinDate();
|
|
2990
|
-
return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
|
|
2991
|
-
? null
|
|
2992
|
-
: { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
|
|
2993
|
-
};
|
|
2994
|
-
/** The form control validator for the max date. */
|
|
2995
|
-
this._maxValidator = (control) => {
|
|
2996
|
-
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2997
|
-
const max = this._getMaxDate();
|
|
2998
|
-
return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
|
|
2999
|
-
? null
|
|
3000
|
-
: { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
|
|
3001
|
-
};
|
|
3002
|
-
/** Whether the last value set on the input was valid. */
|
|
3003
|
-
this._lastValueValid = false;
|
|
3004
3228
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
3005
3229
|
if (!this._dateAdapter) {
|
|
3006
3230
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -3139,12 +3363,11 @@ class MatDatepickerInputBase {
|
|
|
3139
3363
|
const filter = this._getDateFilter();
|
|
3140
3364
|
return !filter || filter(value);
|
|
3141
3365
|
}
|
|
3142
|
-
static
|
|
3143
|
-
static
|
|
3366
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3367
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDatepickerInputBase, isStandalone: true, inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { dateChange: "dateChange", dateInput: "dateInput" }, usesOnChanges: true, ngImport: i0 });
|
|
3144
3368
|
}
|
|
3145
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3146
|
-
type: Directive
|
|
3147
|
-
args: [{ standalone: true }]
|
|
3369
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInputBase, decorators: [{
|
|
3370
|
+
type: Directive
|
|
3148
3371
|
}], ctorParameters: () => [], propDecorators: { value: [{
|
|
3149
3372
|
type: Input
|
|
3150
3373
|
}], disabled: [{
|
|
@@ -3189,6 +3412,9 @@ const MAT_DATEPICKER_VALIDATORS = {
|
|
|
3189
3412
|
};
|
|
3190
3413
|
/** Directive used to connect an input to a MatDatepicker. */
|
|
3191
3414
|
class MatDatepickerInput extends MatDatepickerInputBase {
|
|
3415
|
+
_formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
3416
|
+
_closedSubscription = Subscription.EMPTY;
|
|
3417
|
+
_openedSubscription = Subscription.EMPTY;
|
|
3192
3418
|
/** The datepicker that this input is associated with. */
|
|
3193
3419
|
set matDatepicker(datepicker) {
|
|
3194
3420
|
if (datepicker) {
|
|
@@ -3204,6 +3430,9 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3204
3430
|
this._registerModel(datepicker.registerInput(this));
|
|
3205
3431
|
}
|
|
3206
3432
|
}
|
|
3433
|
+
_datepicker;
|
|
3434
|
+
/** The id of the panel owned by this input. */
|
|
3435
|
+
_ariaOwns = signal(null);
|
|
3207
3436
|
/** The minimum valid date. */
|
|
3208
3437
|
get min() {
|
|
3209
3438
|
return this._min;
|
|
@@ -3215,6 +3444,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3215
3444
|
this._validatorOnChange();
|
|
3216
3445
|
}
|
|
3217
3446
|
}
|
|
3447
|
+
_min;
|
|
3218
3448
|
/** The maximum valid date. */
|
|
3219
3449
|
get max() {
|
|
3220
3450
|
return this._max;
|
|
@@ -3226,6 +3456,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3226
3456
|
this._validatorOnChange();
|
|
3227
3457
|
}
|
|
3228
3458
|
}
|
|
3459
|
+
_max;
|
|
3229
3460
|
/** Function that can be used to filter out dates within the datepicker. */
|
|
3230
3461
|
get dateFilter() {
|
|
3231
3462
|
return this._dateFilter;
|
|
@@ -3237,13 +3468,11 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3237
3468
|
this._validatorOnChange();
|
|
3238
3469
|
}
|
|
3239
3470
|
}
|
|
3471
|
+
_dateFilter;
|
|
3472
|
+
/** The combined form control validator for this input. */
|
|
3473
|
+
_validator;
|
|
3240
3474
|
constructor() {
|
|
3241
3475
|
super();
|
|
3242
|
-
this._formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
3243
|
-
this._closedSubscription = Subscription.EMPTY;
|
|
3244
|
-
this._openedSubscription = Subscription.EMPTY;
|
|
3245
|
-
/** The id of the panel owned by this input. */
|
|
3246
|
-
this._ariaOwns = signal(null);
|
|
3247
3476
|
this._validator = Validators.compose(super._getValidators());
|
|
3248
3477
|
}
|
|
3249
3478
|
/**
|
|
@@ -3302,14 +3531,14 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3302
3531
|
_shouldHandleChangeEvent(event) {
|
|
3303
3532
|
return event.source !== this;
|
|
3304
3533
|
}
|
|
3305
|
-
static
|
|
3306
|
-
static
|
|
3534
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3535
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerInput, isStandalone: true, selector: "input[matDatepicker]", inputs: { matDatepicker: "matDatepicker", min: "min", max: "max", dateFilter: ["matDatepickerFilter", "dateFilter"] }, host: { listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "blur": "_onBlur()", "keydown": "_onKeydown($event)" }, properties: { "attr.aria-haspopup": "_datepicker ? \"dialog\" : null", "attr.aria-owns": "_ariaOwns()", "attr.min": "min ? _dateAdapter.toIso8601(min) : null", "attr.max": "max ? _dateAdapter.toIso8601(max) : null", "attr.data-mat-calendar": "_datepicker ? _datepicker.id : null", "disabled": "disabled" }, classAttribute: "mat-datepicker-input" }, providers: [
|
|
3307
3536
|
MAT_DATEPICKER_VALUE_ACCESSOR,
|
|
3308
3537
|
MAT_DATEPICKER_VALIDATORS,
|
|
3309
3538
|
{ provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
|
|
3310
|
-
], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
|
|
3539
|
+
], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
|
|
3311
3540
|
}
|
|
3312
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3541
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInput, decorators: [{
|
|
3313
3542
|
type: Directive,
|
|
3314
3543
|
args: [{
|
|
3315
3544
|
selector: 'input[matDatepicker]',
|
|
@@ -3334,7 +3563,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
3334
3563
|
'(keydown)': '_onKeydown($event)',
|
|
3335
3564
|
},
|
|
3336
3565
|
exportAs: 'matDatepickerInput',
|
|
3337
|
-
standalone: true,
|
|
3338
3566
|
}]
|
|
3339
3567
|
}], ctorParameters: () => [], propDecorators: { matDatepicker: [{
|
|
3340
3568
|
type: Input
|
|
@@ -3349,17 +3577,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
3349
3577
|
|
|
3350
3578
|
/** Can be used to override the icon of a `matDatepickerToggle`. */
|
|
3351
3579
|
class MatDatepickerToggleIcon {
|
|
3352
|
-
static
|
|
3353
|
-
static
|
|
3580
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggleIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3581
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerToggleIcon, isStandalone: true, selector: "[matDatepickerToggleIcon]", ngImport: i0 });
|
|
3354
3582
|
}
|
|
3355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3583
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggleIcon, decorators: [{
|
|
3356
3584
|
type: Directive,
|
|
3357
3585
|
args: [{
|
|
3358
3586
|
selector: '[matDatepickerToggleIcon]',
|
|
3359
|
-
standalone: true,
|
|
3360
3587
|
}]
|
|
3361
3588
|
}] });
|
|
3362
3589
|
class MatDatepickerToggle {
|
|
3590
|
+
_intl = inject(MatDatepickerIntl);
|
|
3591
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
3592
|
+
_stateChanges = Subscription.EMPTY;
|
|
3593
|
+
/** Datepicker instance that the button will toggle. */
|
|
3594
|
+
datepicker;
|
|
3595
|
+
/** Tabindex for the toggle. */
|
|
3596
|
+
tabIndex;
|
|
3597
|
+
/** Screen-reader label for the button. */
|
|
3598
|
+
ariaLabel;
|
|
3363
3599
|
/** Whether the toggle button is disabled. */
|
|
3364
3600
|
get disabled() {
|
|
3365
3601
|
if (this._disabled === undefined && this.datepicker) {
|
|
@@ -3370,10 +3606,14 @@ class MatDatepickerToggle {
|
|
|
3370
3606
|
set disabled(value) {
|
|
3371
3607
|
this._disabled = value;
|
|
3372
3608
|
}
|
|
3609
|
+
_disabled;
|
|
3610
|
+
/** Whether ripples on the toggle should be disabled. */
|
|
3611
|
+
disableRipple;
|
|
3612
|
+
/** Custom icon set by the consumer. */
|
|
3613
|
+
_customIcon;
|
|
3614
|
+
/** Underlying button element. */
|
|
3615
|
+
_button;
|
|
3373
3616
|
constructor() {
|
|
3374
|
-
this._intl = inject(MatDatepickerIntl);
|
|
3375
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
3376
|
-
this._stateChanges = Subscription.EMPTY;
|
|
3377
3617
|
const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });
|
|
3378
3618
|
const parsedTabIndex = Number(defaultTabIndex);
|
|
3379
3619
|
this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;
|
|
@@ -3406,10 +3646,10 @@ class MatDatepickerToggle {
|
|
|
3406
3646
|
this._stateChanges.unsubscribe();
|
|
3407
3647
|
this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());
|
|
3408
3648
|
}
|
|
3409
|
-
static
|
|
3410
|
-
static
|
|
3649
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3650
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-next.10", type: MatDatepickerToggle, isStandalone: true, selector: "mat-datepicker-toggle", inputs: { datepicker: ["for", "datepicker"], tabIndex: "tabIndex", ariaLabel: ["aria-label", "ariaLabel"], disabled: ["disabled", "disabled", booleanAttribute], disableRipple: "disableRipple" }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null", "class.mat-datepicker-toggle-active": "datepicker && datepicker.opened", "class.mat-accent": "datepicker && datepicker.color === \"accent\"", "class.mat-warn": "datepicker && datepicker.color === \"warn\"", "attr.data-mat-calendar": "datepicker ? datepicker.id : null" }, classAttribute: "mat-datepicker-toggle" }, queries: [{ propertyName: "_customIcon", first: true, predicate: MatDatepickerToggleIcon, descendants: true }], viewQueries: [{ propertyName: "_button", first: true, predicate: ["button"], descendants: true }], exportAs: ["matDatepickerToggle"], usesOnChanges: true, ngImport: i0, template: "<button\n #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n @if (!_customIcon) {\n <svg\n class=\"mat-datepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\n </svg>\n }\n\n <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-datepicker-toggle{pointer-events:auto;color:var(--mat-datepicker-toggle-icon-color, var(--mat-sys-on-surface-variant))}.mat-datepicker-toggle-active{color:var(--mat-datepicker-toggle-active-state-icon-color, var(--mat-sys-on-surface-variant))}@media(forced-colors: active){.mat-datepicker-toggle-default-icon{color:CanvasText}}"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3411
3651
|
}
|
|
3412
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggle, decorators: [{
|
|
3413
3653
|
type: Component,
|
|
3414
3654
|
args: [{ selector: 'mat-datepicker-toggle', host: {
|
|
3415
3655
|
'class': 'mat-datepicker-toggle',
|
|
@@ -3423,7 +3663,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
3423
3663
|
// `stopPropagation` on it without affecting the user's `click` handlers. We need to stop
|
|
3424
3664
|
// it so that the input doesn't get focused automatically by the form field (See #21836).
|
|
3425
3665
|
'(click)': '_open($event)',
|
|
3426
|
-
}, exportAs: 'matDatepickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3666
|
+
}, exportAs: 'matDatepickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIconButton], template: "<button\n #button\n mat-icon-button\n type=\"button\"\n [attr.aria-haspopup]=\"datepicker ? 'dialog' : null\"\n [attr.aria-label]=\"ariaLabel || _intl.openCalendarLabel\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [disabled]=\"disabled\"\n [disableRipple]=\"disableRipple\">\n\n @if (!_customIcon) {\n <svg\n class=\"mat-datepicker-toggle-default-icon\"\n viewBox=\"0 0 24 24\"\n width=\"24px\"\n height=\"24px\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z\"/>\n </svg>\n }\n\n <ng-content select=\"[matDatepickerToggleIcon]\"></ng-content>\n</button>\n", styles: [".mat-datepicker-toggle{pointer-events:auto;color:var(--mat-datepicker-toggle-icon-color, var(--mat-sys-on-surface-variant))}.mat-datepicker-toggle-active{color:var(--mat-datepicker-toggle-active-state-icon-color, var(--mat-sys-on-surface-variant))}@media(forced-colors: active){.mat-datepicker-toggle-default-icon{color:CanvasText}}"] }]
|
|
3427
3667
|
}], ctorParameters: () => [], propDecorators: { datepicker: [{
|
|
3428
3668
|
type: Input,
|
|
3429
3669
|
args: ['for']
|
|
@@ -3606,6 +3846,19 @@ const MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken('MAT_DATE_RANGE_INPUT_PAR
|
|
|
3606
3846
|
* Base class for the individual inputs that can be projected inside a `mat-date-range-input`.
|
|
3607
3847
|
*/
|
|
3608
3848
|
class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
3849
|
+
_rangeInput = inject(MAT_DATE_RANGE_INPUT_PARENT);
|
|
3850
|
+
_elementRef = inject(ElementRef);
|
|
3851
|
+
_defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
3852
|
+
_injector = inject(Injector);
|
|
3853
|
+
_parentForm = inject(NgForm, { optional: true });
|
|
3854
|
+
_parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
3855
|
+
/**
|
|
3856
|
+
* Form control bound to this input part.
|
|
3857
|
+
* @docs-private
|
|
3858
|
+
*/
|
|
3859
|
+
ngControl;
|
|
3860
|
+
_dir = inject(Directionality, { optional: true });
|
|
3861
|
+
_errorStateTracker;
|
|
3609
3862
|
/** Object used to control when error messages are shown. */
|
|
3610
3863
|
get errorStateMatcher() {
|
|
3611
3864
|
return this._errorStateTracker.matcher;
|
|
@@ -3622,13 +3875,6 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
|
3622
3875
|
}
|
|
3623
3876
|
constructor() {
|
|
3624
3877
|
super();
|
|
3625
|
-
this._rangeInput = inject(MAT_DATE_RANGE_INPUT_PARENT);
|
|
3626
|
-
this._elementRef = inject(ElementRef);
|
|
3627
|
-
this._defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
3628
|
-
this._injector = inject(Injector);
|
|
3629
|
-
this._parentForm = inject(NgForm, { optional: true });
|
|
3630
|
-
this._parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
3631
|
-
this._dir = inject(Directionality, { optional: true });
|
|
3632
3878
|
this._errorStateTracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, null, this._parentFormGroup, this._parentForm, this.stateChanges);
|
|
3633
3879
|
}
|
|
3634
3880
|
ngOnInit() {
|
|
@@ -3712,29 +3958,25 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
|
3712
3958
|
_getAccessibleName() {
|
|
3713
3959
|
return _computeAriaAccessibleName(this._elementRef.nativeElement);
|
|
3714
3960
|
}
|
|
3715
|
-
static
|
|
3716
|
-
static
|
|
3961
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInputPartBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3962
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDateRangeInputPartBase, isStandalone: true, inputs: { errorStateMatcher: "errorStateMatcher" }, usesInheritance: true, ngImport: i0 });
|
|
3717
3963
|
}
|
|
3718
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
3719
|
-
type: Directive
|
|
3720
|
-
args: [{ standalone: true }]
|
|
3964
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInputPartBase, decorators: [{
|
|
3965
|
+
type: Directive
|
|
3721
3966
|
}], ctorParameters: () => [], propDecorators: { errorStateMatcher: [{
|
|
3722
3967
|
type: Input
|
|
3723
3968
|
}] } });
|
|
3724
3969
|
/** Input for entering the start date in a `mat-date-range-input`. */
|
|
3725
3970
|
class MatStartDate extends MatDateRangeInputPartBase {
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
this.
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
};
|
|
3736
|
-
this._validator = Validators.compose([...super._getValidators(), this._startValidator]);
|
|
3737
|
-
}
|
|
3971
|
+
/** Validator that checks that the start date isn't after the end date. */
|
|
3972
|
+
_startValidator = (control) => {
|
|
3973
|
+
const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3974
|
+
const end = this._model ? this._model.selection.end : null;
|
|
3975
|
+
return !start || !end || this._dateAdapter.compareDate(start, end) <= 0
|
|
3976
|
+
? null
|
|
3977
|
+
: { 'matStartDateInvalid': { 'end': end, 'actual': start } };
|
|
3978
|
+
};
|
|
3979
|
+
_validator = Validators.compose([...super._getValidators(), this._startValidator]);
|
|
3738
3980
|
_getValueFromModel(modelValue) {
|
|
3739
3981
|
return modelValue.start;
|
|
3740
3982
|
}
|
|
@@ -3777,13 +4019,13 @@ class MatStartDate extends MatDateRangeInputPartBase {
|
|
|
3777
4019
|
super._onKeydown(event);
|
|
3778
4020
|
}
|
|
3779
4021
|
}
|
|
3780
|
-
static
|
|
3781
|
-
static
|
|
4022
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatStartDate, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
4023
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatStartDate, isStandalone: true, selector: "input[matStartDate]", outputs: { dateChange: "dateChange", dateInput: "dateInput" }, host: { attributes: { "type": "text" }, listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "keydown": "_onKeydown($event)", "blur": "_onBlur()" }, properties: { "disabled": "disabled", "attr.aria-haspopup": "_rangeInput.rangePicker ? \"dialog\" : null", "attr.aria-owns": "_rangeInput._ariaOwns\n ? _rangeInput._ariaOwns()\n : (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null", "attr.min": "_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null", "attr.max": "_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null" }, classAttribute: "mat-start-date mat-date-range-input-inner" }, providers: [
|
|
3782
4024
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },
|
|
3783
4025
|
{ provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true },
|
|
3784
|
-
], usesInheritance: true, ngImport: i0 });
|
|
4026
|
+
], usesInheritance: true, ngImport: i0 });
|
|
3785
4027
|
}
|
|
3786
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4028
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatStartDate, decorators: [{
|
|
3787
4029
|
type: Directive,
|
|
3788
4030
|
args: [{
|
|
3789
4031
|
selector: 'input[matStartDate]',
|
|
@@ -3809,23 +4051,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
3809
4051
|
// These need to be specified explicitly, because some tooling doesn't
|
|
3810
4052
|
// seem to pick them up from the base class. See #20932.
|
|
3811
4053
|
outputs: ['dateChange', 'dateInput'],
|
|
3812
|
-
standalone: true,
|
|
3813
4054
|
}]
|
|
3814
4055
|
}] });
|
|
3815
4056
|
/** Input for entering the end date in a `mat-date-range-input`. */
|
|
3816
4057
|
class MatEndDate extends MatDateRangeInputPartBase {
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
this.
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
};
|
|
3827
|
-
this._validator = Validators.compose([...super._getValidators(), this._endValidator]);
|
|
3828
|
-
}
|
|
4058
|
+
/** Validator that checks that the end date isn't before the start date. */
|
|
4059
|
+
_endValidator = (control) => {
|
|
4060
|
+
const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
4061
|
+
const start = this._model ? this._model.selection.start : null;
|
|
4062
|
+
return !end || !start || this._dateAdapter.compareDate(end, start) >= 0
|
|
4063
|
+
? null
|
|
4064
|
+
: { 'matEndDateInvalid': { 'start': start, 'actual': end } };
|
|
4065
|
+
};
|
|
4066
|
+
_validator = Validators.compose([...super._getValidators(), this._endValidator]);
|
|
3829
4067
|
_getValueFromModel(modelValue) {
|
|
3830
4068
|
return modelValue.end;
|
|
3831
4069
|
}
|
|
@@ -3873,13 +4111,13 @@ class MatEndDate extends MatDateRangeInputPartBase {
|
|
|
3873
4111
|
super._onKeydown(event);
|
|
3874
4112
|
}
|
|
3875
4113
|
}
|
|
3876
|
-
static
|
|
3877
|
-
static
|
|
4114
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatEndDate, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
4115
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatEndDate, isStandalone: true, selector: "input[matEndDate]", outputs: { dateChange: "dateChange", dateInput: "dateInput" }, host: { attributes: { "type": "text" }, listeners: { "input": "_onInput($event.target.value)", "change": "_onChange()", "keydown": "_onKeydown($event)", "blur": "_onBlur()" }, properties: { "disabled": "disabled", "attr.aria-haspopup": "_rangeInput.rangePicker ? \"dialog\" : null", "attr.aria-owns": "_rangeInput._ariaOwns\n ? _rangeInput._ariaOwns()\n : (_rangeInput.rangePicker?.opened && _rangeInput.rangePicker.id) || null", "attr.min": "_getMinDate() ? _dateAdapter.toIso8601(_getMinDate()) : null", "attr.max": "_getMaxDate() ? _dateAdapter.toIso8601(_getMaxDate()) : null" }, classAttribute: "mat-end-date mat-date-range-input-inner" }, providers: [
|
|
3878
4116
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },
|
|
3879
4117
|
{ provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true },
|
|
3880
|
-
], usesInheritance: true, ngImport: i0 });
|
|
4118
|
+
], usesInheritance: true, ngImport: i0 });
|
|
3881
4119
|
}
|
|
3882
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatEndDate, decorators: [{
|
|
3883
4121
|
type: Directive,
|
|
3884
4122
|
args: [{
|
|
3885
4123
|
selector: 'input[matEndDate]',
|
|
@@ -3905,20 +4143,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
3905
4143
|
// These need to be specified explicitly, because some tooling doesn't
|
|
3906
4144
|
// seem to pick them up from the base class. See #20932.
|
|
3907
4145
|
outputs: ['dateChange', 'dateInput'],
|
|
3908
|
-
standalone: true,
|
|
3909
4146
|
}]
|
|
3910
4147
|
}] });
|
|
3911
4148
|
|
|
3912
4149
|
let nextUniqueId = 0;
|
|
3913
4150
|
class MatDateRangeInput {
|
|
4151
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
4152
|
+
_elementRef = inject(ElementRef);
|
|
4153
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
4154
|
+
_formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
4155
|
+
_closedSubscription = Subscription.EMPTY;
|
|
4156
|
+
_openedSubscription = Subscription.EMPTY;
|
|
3914
4157
|
/** Current value of the range input. */
|
|
3915
4158
|
get value() {
|
|
3916
4159
|
return this._model ? this._model.selection : null;
|
|
3917
4160
|
}
|
|
4161
|
+
/** Unique ID for the group. */
|
|
4162
|
+
id = `mat-date-range-input-${nextUniqueId++}`;
|
|
4163
|
+
/** Whether the control is focused. */
|
|
4164
|
+
focused = false;
|
|
3918
4165
|
/** Whether the control's label should float. */
|
|
3919
4166
|
get shouldLabelFloat() {
|
|
3920
4167
|
return this.focused || !this.empty;
|
|
3921
4168
|
}
|
|
4169
|
+
/** Name of the form control. */
|
|
4170
|
+
controlType = 'mat-date-range-input';
|
|
3922
4171
|
/**
|
|
3923
4172
|
* Implemented as a part of `MatFormFieldControl`.
|
|
3924
4173
|
* Set the placeholder attribute on `matStartDate` and `matEndDate`.
|
|
@@ -3951,6 +4200,9 @@ class MatDateRangeInput {
|
|
|
3951
4200
|
this._registerModel(this._model);
|
|
3952
4201
|
}
|
|
3953
4202
|
}
|
|
4203
|
+
_rangePicker;
|
|
4204
|
+
/** The id of the panel owned by this input. */
|
|
4205
|
+
_ariaOwns = signal(null);
|
|
3954
4206
|
/** Whether the input is required. */
|
|
3955
4207
|
get required() {
|
|
3956
4208
|
return (this._required ??
|
|
@@ -3962,6 +4214,7 @@ class MatDateRangeInput {
|
|
|
3962
4214
|
set required(value) {
|
|
3963
4215
|
this._required = value;
|
|
3964
4216
|
}
|
|
4217
|
+
_required;
|
|
3965
4218
|
/** Function that can be used to filter out dates within the date range picker. */
|
|
3966
4219
|
get dateFilter() {
|
|
3967
4220
|
return this._dateFilter;
|
|
@@ -3979,6 +4232,7 @@ class MatDateRangeInput {
|
|
|
3979
4232
|
end._validatorOnChange();
|
|
3980
4233
|
}
|
|
3981
4234
|
}
|
|
4235
|
+
_dateFilter;
|
|
3982
4236
|
/** The minimum valid date. */
|
|
3983
4237
|
get min() {
|
|
3984
4238
|
return this._min;
|
|
@@ -3990,6 +4244,7 @@ class MatDateRangeInput {
|
|
|
3990
4244
|
this._revalidate();
|
|
3991
4245
|
}
|
|
3992
4246
|
}
|
|
4247
|
+
_min;
|
|
3993
4248
|
/** The maximum valid date. */
|
|
3994
4249
|
get max() {
|
|
3995
4250
|
return this._max;
|
|
@@ -4001,6 +4256,7 @@ class MatDateRangeInput {
|
|
|
4001
4256
|
this._revalidate();
|
|
4002
4257
|
}
|
|
4003
4258
|
}
|
|
4259
|
+
_max;
|
|
4004
4260
|
/** Whether the input is disabled. */
|
|
4005
4261
|
get disabled() {
|
|
4006
4262
|
return this._startInput && this._endInput
|
|
@@ -4013,6 +4269,7 @@ class MatDateRangeInput {
|
|
|
4013
4269
|
this.stateChanges.next(undefined);
|
|
4014
4270
|
}
|
|
4015
4271
|
}
|
|
4272
|
+
_groupDisabled = false;
|
|
4016
4273
|
/** Whether the input is in an error state. */
|
|
4017
4274
|
get errorState() {
|
|
4018
4275
|
if (this._startInput && this._endInput) {
|
|
@@ -4026,37 +4283,32 @@ class MatDateRangeInput {
|
|
|
4026
4283
|
const endEmpty = this._endInput ? this._endInput.isEmpty() : false;
|
|
4027
4284
|
return startEmpty && endEmpty;
|
|
4028
4285
|
}
|
|
4286
|
+
/** Value for the `aria-describedby` attribute of the inputs. */
|
|
4287
|
+
_ariaDescribedBy = null;
|
|
4288
|
+
/** Date selection model currently registered with the input. */
|
|
4289
|
+
_model;
|
|
4290
|
+
/** Separator text to be shown between the inputs. */
|
|
4291
|
+
separator = '–';
|
|
4292
|
+
/** Start of the comparison range that should be shown in the calendar. */
|
|
4293
|
+
comparisonStart = null;
|
|
4294
|
+
/** End of the comparison range that should be shown in the calendar. */
|
|
4295
|
+
comparisonEnd = null;
|
|
4296
|
+
_startInput;
|
|
4297
|
+
_endInput;
|
|
4298
|
+
/**
|
|
4299
|
+
* Implemented as a part of `MatFormFieldControl`.
|
|
4300
|
+
* TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.
|
|
4301
|
+
* @docs-private
|
|
4302
|
+
*/
|
|
4303
|
+
ngControl;
|
|
4304
|
+
/** Emits when the input's state has changed. */
|
|
4305
|
+
stateChanges = new Subject();
|
|
4306
|
+
/**
|
|
4307
|
+
* Disable the automatic labeling to avoid issues like #27241.
|
|
4308
|
+
* @docs-private
|
|
4309
|
+
*/
|
|
4310
|
+
disableAutomaticLabeling = true;
|
|
4029
4311
|
constructor() {
|
|
4030
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
4031
|
-
this._elementRef = inject(ElementRef);
|
|
4032
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
4033
|
-
this._formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
4034
|
-
this._closedSubscription = Subscription.EMPTY;
|
|
4035
|
-
this._openedSubscription = Subscription.EMPTY;
|
|
4036
|
-
/** Unique ID for the group. */
|
|
4037
|
-
this.id = `mat-date-range-input-${nextUniqueId++}`;
|
|
4038
|
-
/** Whether the control is focused. */
|
|
4039
|
-
this.focused = false;
|
|
4040
|
-
/** Name of the form control. */
|
|
4041
|
-
this.controlType = 'mat-date-range-input';
|
|
4042
|
-
/** The id of the panel owned by this input. */
|
|
4043
|
-
this._ariaOwns = signal(null);
|
|
4044
|
-
this._groupDisabled = false;
|
|
4045
|
-
/** Value for the `aria-describedby` attribute of the inputs. */
|
|
4046
|
-
this._ariaDescribedBy = null;
|
|
4047
|
-
/** Separator text to be shown between the inputs. */
|
|
4048
|
-
this.separator = '–';
|
|
4049
|
-
/** Start of the comparison range that should be shown in the calendar. */
|
|
4050
|
-
this.comparisonStart = null;
|
|
4051
|
-
/** End of the comparison range that should be shown in the calendar. */
|
|
4052
|
-
this.comparisonEnd = null;
|
|
4053
|
-
/** Emits when the input's state has changed. */
|
|
4054
|
-
this.stateChanges = new Subject();
|
|
4055
|
-
/**
|
|
4056
|
-
* Disable the automatic labeling to avoid issues like #27241.
|
|
4057
|
-
* @docs-private
|
|
4058
|
-
*/
|
|
4059
|
-
this.disableAutomaticLabeling = true;
|
|
4060
4312
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
4061
4313
|
throw createMissingDateImplError('DateAdapter');
|
|
4062
4314
|
}
|
|
@@ -4197,13 +4449,13 @@ class MatDateRangeInput {
|
|
|
4197
4449
|
_isTargetRequired(target) {
|
|
4198
4450
|
return target?.ngControl?.control?.hasValidator(Validators.required);
|
|
4199
4451
|
}
|
|
4200
|
-
static
|
|
4201
|
-
static
|
|
4452
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4453
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-next.10", type: MatDateRangeInput, isStandalone: true, selector: "mat-date-range-input", inputs: { rangePicker: "rangePicker", required: ["required", "required", booleanAttribute], dateFilter: "dateFilter", min: "min", max: "max", disabled: ["disabled", "disabled", booleanAttribute], separator: "separator", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd" }, host: { attributes: { "role": "group" }, properties: { "class.mat-date-range-input-hide-placeholders": "_shouldHidePlaceholders()", "class.mat-date-range-input-required": "required", "attr.id": "id", "attr.aria-labelledby": "_getAriaLabelledby()", "attr.aria-describedby": "_ariaDescribedBy", "attr.data-mat-calendar": "rangePicker ? rangePicker.id : null" }, classAttribute: "mat-date-range-input" }, providers: [
|
|
4202
4454
|
{ provide: MatFormFieldControl, useExisting: MatDateRangeInput },
|
|
4203
4455
|
{ provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },
|
|
4204
|
-
], queries: [{ propertyName: "_startInput", first: true, predicate: MatStartDate, descendants: true }, { propertyName: "_endInput", first: true, predicate: MatEndDate, descendants: true }], exportAs: ["matDateRangeInput"], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"mat-date-range-input-container\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_updateFocus($event)\">\n <div class=\"mat-date-range-input-wrapper\">\n <ng-content select=\"input[matStartDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('start')}}</span>\n </div>\n\n <span\n class=\"mat-date-range-input-separator\"\n [class.mat-date-range-input-separator-hidden]=\"_shouldHideSeparator()\">{{separator}}</span>\n\n <div class=\"mat-date-range-input-wrapper mat-date-range-input-end-wrapper\">\n <ng-content select=\"input[matEndDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('end')}}</span>\n </div>\n</div>\n\n", styles: [".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px;color:var(--mat-datepicker-range-input-separator-color, var(--mat-
|
|
4456
|
+
], queries: [{ propertyName: "_startInput", first: true, predicate: MatStartDate, descendants: true }, { propertyName: "_endInput", first: true, predicate: MatEndDate, descendants: true }], exportAs: ["matDateRangeInput"], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"mat-date-range-input-container\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_updateFocus($event)\">\n <div class=\"mat-date-range-input-wrapper\">\n <ng-content select=\"input[matStartDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('start')}}</span>\n </div>\n\n <span\n class=\"mat-date-range-input-separator\"\n [class.mat-date-range-input-separator-hidden]=\"_shouldHideSeparator()\">{{separator}}</span>\n\n <div class=\"mat-date-range-input-wrapper mat-date-range-input-end-wrapper\">\n <ng-content select=\"input[matEndDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('end')}}</span>\n </div>\n</div>\n\n", styles: [".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px;color:var(--mat-datepicker-range-input-separator-color, var(--mat-sys-on-surface))}.mat-form-field-disabled .mat-date-range-input-separator{color:var(--mat-datepicker-range-input-disabled-state-separator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}._mat-animation-noopable .mat-date-range-input-separator{transition:none}.mat-date-range-input-separator-hidden{-webkit-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-end-wrapper{flex-grow:1}.mat-date-range-input-inner{position:absolute;top:0;left:0;font:inherit;background:rgba(0,0,0,0);color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%;height:100%}.mat-date-range-input-inner:-moz-ui-invalid{box-shadow:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner[disabled]{color:var(--mat-datepicker-range-input-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{opacity:0}}._mat-animation-noopable .mat-date-range-input-inner::placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-moz-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-webkit-input-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner:-ms-input-placeholder{transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-mdc-form-field-type-mat-date-range-input .mat-mdc-form-field-infix{width:200px}"], dependencies: [{ kind: "directive", type: CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4205
4457
|
}
|
|
4206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4458
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInput, decorators: [{
|
|
4207
4459
|
type: Component,
|
|
4208
4460
|
args: [{ selector: 'mat-date-range-input', exportAs: 'matDateRangeInput', host: {
|
|
4209
4461
|
'class': 'mat-date-range-input',
|
|
@@ -4219,7 +4471,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
4219
4471
|
}, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
4220
4472
|
{ provide: MatFormFieldControl, useExisting: MatDateRangeInput },
|
|
4221
4473
|
{ provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },
|
|
4222
|
-
],
|
|
4474
|
+
], imports: [CdkMonitorFocus], template: "<div\n class=\"mat-date-range-input-container\"\n cdkMonitorSubtreeFocus\n (cdkFocusChange)=\"_updateFocus($event)\">\n <div class=\"mat-date-range-input-wrapper\">\n <ng-content select=\"input[matStartDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('start')}}</span>\n </div>\n\n <span\n class=\"mat-date-range-input-separator\"\n [class.mat-date-range-input-separator-hidden]=\"_shouldHideSeparator()\">{{separator}}</span>\n\n <div class=\"mat-date-range-input-wrapper mat-date-range-input-end-wrapper\">\n <ng-content select=\"input[matEndDate]\"></ng-content>\n <span\n class=\"mat-date-range-input-mirror\"\n aria-hidden=\"true\">{{_getInputMirrorValue('end')}}</span>\n </div>\n</div>\n\n", styles: [".mat-date-range-input{display:block;width:100%}.mat-date-range-input-container{display:flex;align-items:center}.mat-date-range-input-separator{transition:opacity 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1);margin:0 4px;color:var(--mat-datepicker-range-input-separator-color, var(--mat-sys-on-surface))}.mat-form-field-disabled .mat-date-range-input-separator{color:var(--mat-datepicker-range-input-disabled-state-separator-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}._mat-animation-noopable .mat-date-range-input-separator{transition:none}.mat-date-range-input-separator-hidden{-webkit-user-select:none;user-select:none;opacity:0;transition:none}.mat-date-range-input-wrapper{position:relative;overflow:hidden;max-width:calc(50% - 4px)}.mat-date-range-input-end-wrapper{flex-grow:1}.mat-date-range-input-inner{position:absolute;top:0;left:0;font:inherit;background:rgba(0,0,0,0);color:currentColor;border:none;outline:none;padding:0;margin:0;vertical-align:bottom;text-align:inherit;-webkit-appearance:none;width:100%;height:100%}.mat-date-range-input-inner:-moz-ui-invalid{box-shadow:none}.mat-date-range-input-inner::placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-moz-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner::-webkit-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner:-ms-input-placeholder{transition:color 400ms 133.3333333333ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-date-range-input-inner[disabled]{color:var(--mat-datepicker-range-input-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-moz-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-moz-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner::-webkit-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner::-webkit-input-placeholder{opacity:0}}.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{-webkit-user-select:none;user-select:none;color:rgba(0,0,0,0) !important;-webkit-text-fill-color:rgba(0,0,0,0);transition:none}@media(forced-colors: active){.mat-form-field-hide-placeholder .mat-date-range-input-inner:-ms-input-placeholder,.mat-date-range-input-hide-placeholders .mat-date-range-input-inner:-ms-input-placeholder{opacity:0}}._mat-animation-noopable .mat-date-range-input-inner::placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-moz-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner::-webkit-input-placeholder{transition:none}._mat-animation-noopable .mat-date-range-input-inner:-ms-input-placeholder{transition:none}.mat-date-range-input-mirror{-webkit-user-select:none;user-select:none;visibility:hidden;white-space:nowrap;display:inline-block;min-width:2px}.mat-mdc-form-field-type-mat-date-range-input .mat-mdc-form-field-infix{width:200px}"] }]
|
|
4223
4475
|
}], ctorParameters: () => [], propDecorators: { rangePicker: [{
|
|
4224
4476
|
type: Input
|
|
4225
4477
|
}], required: [{
|
|
@@ -4263,14 +4515,14 @@ class MatDateRangePicker extends MatDatepickerBase {
|
|
|
4263
4515
|
instance.endDateAccessibleName = input._getEndDateAccessibleName();
|
|
4264
4516
|
}
|
|
4265
4517
|
}
|
|
4266
|
-
static
|
|
4267
|
-
static
|
|
4518
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangePicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
4519
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDateRangePicker, isStandalone: true, selector: "mat-date-range-picker", providers: [
|
|
4268
4520
|
MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
|
|
4269
4521
|
MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
|
|
4270
4522
|
{ provide: MatDatepickerBase, useExisting: MatDateRangePicker },
|
|
4271
|
-
], exportAs: ["matDateRangePicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4523
|
+
], exportAs: ["matDateRangePicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4272
4524
|
}
|
|
4273
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4525
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangePicker, decorators: [{
|
|
4274
4526
|
type: Component,
|
|
4275
4527
|
args: [{
|
|
4276
4528
|
selector: 'mat-date-range-picker',
|
|
@@ -4283,44 +4535,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
4283
4535
|
MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
|
|
4284
4536
|
{ provide: MatDatepickerBase, useExisting: MatDateRangePicker },
|
|
4285
4537
|
],
|
|
4286
|
-
standalone: true,
|
|
4287
4538
|
}]
|
|
4288
4539
|
}] });
|
|
4289
4540
|
|
|
4290
4541
|
/** Button that will close the datepicker and assign the current selection to the data model. */
|
|
4291
4542
|
class MatDatepickerApply {
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
}
|
|
4543
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4544
|
+
constructor() { }
|
|
4295
4545
|
_applySelection() {
|
|
4296
4546
|
this._datepicker._applyPendingSelection();
|
|
4297
4547
|
this._datepicker.close();
|
|
4298
4548
|
}
|
|
4299
|
-
static
|
|
4300
|
-
static
|
|
4549
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerApply, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4550
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerApply, isStandalone: true, selector: "[matDatepickerApply], [matDateRangePickerApply]", host: { listeners: { "click": "_applySelection()" } }, ngImport: i0 });
|
|
4301
4551
|
}
|
|
4302
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4552
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerApply, decorators: [{
|
|
4303
4553
|
type: Directive,
|
|
4304
4554
|
args: [{
|
|
4305
4555
|
selector: '[matDatepickerApply], [matDateRangePickerApply]',
|
|
4306
4556
|
host: { '(click)': '_applySelection()' },
|
|
4307
|
-
standalone: true,
|
|
4308
4557
|
}]
|
|
4309
4558
|
}], ctorParameters: () => [] });
|
|
4310
4559
|
/** Button that will close the datepicker and discard the current selection. */
|
|
4311
4560
|
class MatDatepickerCancel {
|
|
4312
|
-
|
|
4313
|
-
|
|
4314
|
-
}
|
|
4315
|
-
static
|
|
4316
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.8", type: MatDatepickerCancel, isStandalone: true, selector: "[matDatepickerCancel], [matDateRangePickerCancel]", host: { listeners: { "click": "_datepicker.close()" } }, ngImport: i0 }); }
|
|
4561
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4562
|
+
constructor() { }
|
|
4563
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerCancel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4564
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerCancel, isStandalone: true, selector: "[matDatepickerCancel], [matDateRangePickerCancel]", host: { listeners: { "click": "_datepicker.close()" } }, ngImport: i0 });
|
|
4317
4565
|
}
|
|
4318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4566
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerCancel, decorators: [{
|
|
4319
4567
|
type: Directive,
|
|
4320
4568
|
args: [{
|
|
4321
4569
|
selector: '[matDatepickerCancel], [matDateRangePickerCancel]',
|
|
4322
4570
|
host: { '(click)': '_datepicker.close()' },
|
|
4323
|
-
standalone: true,
|
|
4324
4571
|
}]
|
|
4325
4572
|
}], ctorParameters: () => [] });
|
|
4326
4573
|
/**
|
|
@@ -4328,10 +4575,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
4328
4575
|
* to the bottom of a datepicker or date range picker.
|
|
4329
4576
|
*/
|
|
4330
4577
|
class MatDatepickerActions {
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4578
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4579
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
4580
|
+
_template;
|
|
4581
|
+
_portal;
|
|
4582
|
+
constructor() { }
|
|
4335
4583
|
ngAfterViewInit() {
|
|
4336
4584
|
this._portal = new TemplatePortal(this._template, this._viewContainerRef);
|
|
4337
4585
|
this._datepicker.registerActions(this._portal);
|
|
@@ -4343,16 +4591,16 @@ class MatDatepickerActions {
|
|
|
4343
4591
|
this._portal?.detach();
|
|
4344
4592
|
}
|
|
4345
4593
|
}
|
|
4346
|
-
static
|
|
4347
|
-
static
|
|
4594
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerActions, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4595
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-next.10", type: MatDatepickerActions, isStandalone: true, selector: "mat-datepicker-actions, mat-date-range-picker-actions", viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: `
|
|
4348
4596
|
<ng-template>
|
|
4349
4597
|
<div class="mat-datepicker-actions">
|
|
4350
4598
|
<ng-content></ng-content>
|
|
4351
4599
|
</div>
|
|
4352
4600
|
</ng-template>
|
|
4353
|
-
`, isInline: true, styles: [".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4601
|
+
`, isInline: true, styles: [".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4354
4602
|
}
|
|
4355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4603
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerActions, decorators: [{
|
|
4356
4604
|
type: Component,
|
|
4357
4605
|
args: [{ selector: 'mat-datepicker-actions, mat-date-range-picker-actions', template: `
|
|
4358
4606
|
<ng-template>
|
|
@@ -4360,16 +4608,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.8",
|
|
|
4360
4608
|
<ng-content></ng-content>
|
|
4361
4609
|
</div>
|
|
4362
4610
|
</ng-template>
|
|
4363
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None,
|
|
4611
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".mat-datepicker-actions{display:flex;justify-content:flex-end;align-items:center;padding:0 8px 8px 8px}.mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-datepicker-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}"] }]
|
|
4364
4612
|
}], ctorParameters: () => [], propDecorators: { _template: [{
|
|
4365
4613
|
type: ViewChild,
|
|
4366
4614
|
args: [TemplateRef]
|
|
4367
4615
|
}] } });
|
|
4368
4616
|
|
|
4369
4617
|
class MatDatepickerModule {
|
|
4370
|
-
static
|
|
4371
|
-
static
|
|
4372
|
-
MatButtonModule,
|
|
4618
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
4619
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, imports: [MatButtonModule,
|
|
4373
4620
|
OverlayModule,
|
|
4374
4621
|
A11yModule,
|
|
4375
4622
|
PortalModule,
|
|
@@ -4409,22 +4656,20 @@ class MatDatepickerModule {
|
|
|
4409
4656
|
MatDateRangePicker,
|
|
4410
4657
|
MatDatepickerActions,
|
|
4411
4658
|
MatDatepickerCancel,
|
|
4412
|
-
MatDatepickerApply] });
|
|
4413
|
-
static
|
|
4414
|
-
MatButtonModule,
|
|
4659
|
+
MatDatepickerApply] });
|
|
4660
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, providers: [MatDatepickerIntl, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [MatButtonModule,
|
|
4415
4661
|
OverlayModule,
|
|
4416
4662
|
A11yModule,
|
|
4417
4663
|
PortalModule,
|
|
4418
4664
|
MatCommonModule,
|
|
4419
4665
|
MatDatepickerContent,
|
|
4420
4666
|
MatDatepickerToggle,
|
|
4421
|
-
MatCalendarHeader, CdkScrollableModule] });
|
|
4667
|
+
MatCalendarHeader, CdkScrollableModule] });
|
|
4422
4668
|
}
|
|
4423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.
|
|
4669
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, decorators: [{
|
|
4424
4670
|
type: NgModule,
|
|
4425
4671
|
args: [{
|
|
4426
4672
|
imports: [
|
|
4427
|
-
CommonModule,
|
|
4428
4673
|
MatButtonModule,
|
|
4429
4674
|
OverlayModule,
|
|
4430
4675
|
A11yModule,
|