@angular/material 19.0.0-next.9 → 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/autocomplete/_autocomplete-theme.scss +8 -4
- package/autocomplete/index.d.ts +5 -6
- package/badge/_badge-theme.scss +10 -6
- package/bottom-sheet/_bottom-sheet-theme.scss +8 -4
- package/button/_button-theme.scss +10 -6
- package/button/_fab-theme.scss +10 -6
- package/button/_icon-button-theme.scss +8 -4
- package/button/index.d.ts +1 -1
- package/button-toggle/_button-toggle-theme.scss +11 -6
- package/card/_card-theme.scss +8 -4
- package/card/index.d.ts +2 -3
- package/checkbox/_checkbox-theme.scss +10 -6
- package/chips/_chips-theme.scss +10 -6
- package/core/_core-theme.scss +4 -7
- package/core/_core.scss +2 -5
- package/core/option/_optgroup-theme.scss +8 -4
- package/core/option/_option-theme.scss +10 -6
- package/core/ripple/_ripple-theme.scss +8 -4
- package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +10 -6
- package/core/theming/_config-validation.scss +4 -4
- package/core/theming/_definition.scss +12 -2
- package/core/tokens/_m3-system.scss +55 -39
- package/datepicker/_datepicker-theme.scss +10 -6
- package/datepicker/index.d.ts +32 -33
- package/dialog/_dialog-theme.scss +8 -4
- package/divider/_divider-theme.scss +8 -4
- package/expansion/_expansion-theme.scss +8 -4
- package/fesm2022/autocomplete/testing.mjs +2 -5
- package/fesm2022/autocomplete/testing.mjs.map +1 -1
- package/fesm2022/autocomplete.mjs +220 -141
- 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 +41 -30
- 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 +76 -54
- 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 +78 -40
- package/fesm2022/button-toggle.mjs.map +1 -1
- package/fesm2022/button.mjs +87 -60
- 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 +38 -40
- 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 +99 -56
- 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 +303 -251
- 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 +217 -160
- 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 +788 -533
- package/fesm2022/datepicker.mjs.map +1 -1
- package/fesm2022/dialog/testing.mjs +15 -9
- package/fesm2022/dialog/testing.mjs.map +1 -1
- package/fesm2022/dialog.mjs +210 -140
- 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 +7 -9
- 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 +76 -65
- 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 +165 -111
- 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 +65 -43
- package/fesm2022/grid-list.mjs.map +1 -1
- package/fesm2022/icon/testing.mjs +6 -6
- package/fesm2022/icon/testing.mjs.map +1 -1
- package/fesm2022/icon.mjs +62 -42
- 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 +101 -69
- 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 +175 -164
- 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 +171 -118
- 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 +79 -54
- 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 +33 -32
- 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 +25 -11
- 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 +119 -82
- 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 +215 -177
- 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 +125 -112
- 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 +72 -41
- 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 +255 -185
- 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 +133 -98
- 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 +89 -68
- 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 +133 -95
- 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 +164 -159
- 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 +308 -225
- 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 +152 -146
- 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 +22 -12
- 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 +93 -69
- 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 +48 -46
- package/fesm2022/tree.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +9 -5
- package/form-field/index.d.ts +8 -9
- package/grid-list/_grid-list-theme.scss +8 -4
- package/icon/_icon-theme.scss +10 -6
- package/input/_input-theme.scss +8 -4
- package/list/_list-theme.scss +8 -4
- package/list/index.d.ts +20 -21
- package/menu/_menu-theme.scss +8 -4
- package/menu/index.d.ts +8 -9
- package/package.json +2 -2
- package/paginator/_paginator-theme.scss +8 -4
- 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 +11 -9
- package/progress-spinner/_progress-spinner-theme.scss +11 -9
- package/progress-spinner/index.d.ts +3 -4
- package/radio/_radio-theme.scss +10 -6
- package/radio/index.d.ts +2 -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/theme-color/index_bundled.js +35 -9
- package/schematics/ng-generate/theme-color/index_bundled.js.map +2 -2
- package/schematics/ng-update/index_bundled.js +6 -1
- package/schematics/ng-update/index_bundled.js.map +1 -1
- package/select/_select-theme.scss +10 -6
- package/select/index.d.ts +6 -7
- package/sidenav/_sidenav-theme.scss +8 -4
- package/slide-toggle/_slide-toggle-theme.scss +10 -6
- package/slider/_slider-theme.scss +10 -6
- package/snack-bar/_snack-bar-theme.scss +10 -6
- package/sort/_sort-theme.scss +8 -4
- package/stepper/_stepper-theme.scss +10 -6
- package/stepper/index.d.ts +14 -15
- package/table/_table-theme.scss +8 -4
- package/tabs/_tabs-theme.scss +10 -6
- package/timepicker/_timepicker-theme.scss +10 -6
- package/toolbar/_toolbar-theme.scss +10 -6
- package/tooltip/_tooltip-theme.scss +8 -4
- package/tooltip/index.d.ts +5 -6
- package/tree/_tree-theme.scss +8 -4
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,8 +76,8 @@ 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
82
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerIntl, decorators: [{
|
|
85
83
|
type: Injectable,
|
|
@@ -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,8 +520,11 @@ 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.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 }); }
|
|
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
529
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarBody, decorators: [{
|
|
494
530
|
type: Component,
|
|
@@ -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,8 +673,8 @@ 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
679
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateSelectionModel, decorators: [{
|
|
634
680
|
type: Injectable
|
|
@@ -665,8 +711,8 @@ 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
717
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatSingleDateSelectionModel, decorators: [{
|
|
672
718
|
type: Injectable
|
|
@@ -728,8 +774,8 @@ 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
780
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatRangeDateSelectionModel, decorators: [{
|
|
735
781
|
type: Injectable
|
|
@@ -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,8 +876,8 @@ 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
882
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: DefaultMatCalendarRangeStrategy, decorators: [{
|
|
836
883
|
type: Injectable
|
|
@@ -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,8 +1321,8 @@ 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
1327
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMonthView, decorators: [{
|
|
1236
1328
|
type: Component,
|
|
@@ -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,8 +1625,8 @@ 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
1631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatMultiYearView, decorators: [{
|
|
1522
1632
|
type: Component,
|
|
@@ -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,8 +1979,8 @@ 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
1985
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatYearView, decorators: [{
|
|
1853
1986
|
type: Component,
|
|
@@ -1878,13 +2011,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
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,8 +2126,10 @@ 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
2134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendarHeader, decorators: [{
|
|
2001
2135
|
type: Component,
|
|
@@ -2003,6 +2137,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
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,8 +2371,8 @@ 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
2377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatCalendar, decorators: [{
|
|
2215
2378
|
type: Component,
|
|
@@ -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,8 +2603,8 @@ 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
2609
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerContent, decorators: [{
|
|
2415
2610
|
type: Component,
|
|
@@ -2429,6 +2624,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
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,8 +3022,8 @@ 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
3028
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerBase, decorators: [{
|
|
2818
3029
|
type: Directive
|
|
@@ -2863,11 +3074,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
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
3083
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepicker, decorators: [{
|
|
2873
3084
|
type: Component,
|
|
@@ -2890,6 +3101,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
2890
3101
|
* calendar popup. For consistency, we always use MatDatepickerInputEvent instead.
|
|
2891
3102
|
*/
|
|
2892
3103
|
class MatDatepickerInputEvent {
|
|
3104
|
+
target;
|
|
3105
|
+
targetElement;
|
|
3106
|
+
/** The new value for the target datepicker input. */
|
|
3107
|
+
value;
|
|
2893
3108
|
constructor(
|
|
2894
3109
|
/** Reference to the datepicker input component that emitted the event. */
|
|
2895
3110
|
target,
|
|
@@ -2902,6 +3117,11 @@ class MatDatepickerInputEvent {
|
|
|
2902
3117
|
}
|
|
2903
3118
|
/** Base class for datepicker inputs. */
|
|
2904
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;
|
|
2905
3125
|
/** The value of the input. */
|
|
2906
3126
|
get value() {
|
|
2907
3127
|
return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;
|
|
@@ -2909,6 +3129,7 @@ class MatDatepickerInputBase {
|
|
|
2909
3129
|
set value(value) {
|
|
2910
3130
|
this._assignValueProgrammatically(value);
|
|
2911
3131
|
}
|
|
3132
|
+
_model;
|
|
2912
3133
|
/** Whether the datepicker-input is disabled. */
|
|
2913
3134
|
get disabled() {
|
|
2914
3135
|
return !!this._disabled || this._parentDisabled();
|
|
@@ -2931,6 +3152,53 @@ class MatDatepickerInputBase {
|
|
|
2931
3152
|
element.blur();
|
|
2932
3153
|
}
|
|
2933
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
|
+
};
|
|
2934
3202
|
/** Gets the base validator functions. */
|
|
2935
3203
|
_getValidators() {
|
|
2936
3204
|
return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];
|
|
@@ -2954,52 +3222,9 @@ class MatDatepickerInputBase {
|
|
|
2954
3222
|
}
|
|
2955
3223
|
});
|
|
2956
3224
|
}
|
|
3225
|
+
/** Whether the last value set on the input was valid. */
|
|
3226
|
+
_lastValueValid = false;
|
|
2957
3227
|
constructor() {
|
|
2958
|
-
this._elementRef = inject(ElementRef);
|
|
2959
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
2960
|
-
this._dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
2961
|
-
/** Emits when a `change` event is fired on this `<input>`. */
|
|
2962
|
-
this.dateChange = new EventEmitter();
|
|
2963
|
-
/** Emits when an `input` event is fired on this `<input>`. */
|
|
2964
|
-
this.dateInput = new EventEmitter();
|
|
2965
|
-
/** Emits when the internal state has changed */
|
|
2966
|
-
this.stateChanges = new Subject();
|
|
2967
|
-
this._onTouched = () => { };
|
|
2968
|
-
this._validatorOnChange = () => { };
|
|
2969
|
-
this._cvaOnChange = () => { };
|
|
2970
|
-
this._valueChangesSubscription = Subscription.EMPTY;
|
|
2971
|
-
this._localeSubscription = Subscription.EMPTY;
|
|
2972
|
-
/** The form control validator for whether the input parses. */
|
|
2973
|
-
this._parseValidator = () => {
|
|
2974
|
-
return this._lastValueValid
|
|
2975
|
-
? null
|
|
2976
|
-
: { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
|
|
2977
|
-
};
|
|
2978
|
-
/** The form control validator for the date filter. */
|
|
2979
|
-
this._filterValidator = (control) => {
|
|
2980
|
-
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2981
|
-
return !controlValue || this._matchesFilter(controlValue)
|
|
2982
|
-
? null
|
|
2983
|
-
: { 'matDatepickerFilter': true };
|
|
2984
|
-
};
|
|
2985
|
-
/** The form control validator for the min date. */
|
|
2986
|
-
this._minValidator = (control) => {
|
|
2987
|
-
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2988
|
-
const min = this._getMinDate();
|
|
2989
|
-
return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
|
|
2990
|
-
? null
|
|
2991
|
-
: { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
|
|
2992
|
-
};
|
|
2993
|
-
/** The form control validator for the max date. */
|
|
2994
|
-
this._maxValidator = (control) => {
|
|
2995
|
-
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2996
|
-
const max = this._getMaxDate();
|
|
2997
|
-
return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
|
|
2998
|
-
? null
|
|
2999
|
-
: { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
|
|
3000
|
-
};
|
|
3001
|
-
/** Whether the last value set on the input was valid. */
|
|
3002
|
-
this._lastValueValid = false;
|
|
3003
3228
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
3004
3229
|
if (!this._dateAdapter) {
|
|
3005
3230
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -3138,8 +3363,8 @@ class MatDatepickerInputBase {
|
|
|
3138
3363
|
const filter = this._getDateFilter();
|
|
3139
3364
|
return !filter || filter(value);
|
|
3140
3365
|
}
|
|
3141
|
-
static
|
|
3142
|
-
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 });
|
|
3143
3368
|
}
|
|
3144
3369
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInputBase, decorators: [{
|
|
3145
3370
|
type: Directive
|
|
@@ -3187,6 +3412,9 @@ const MAT_DATEPICKER_VALIDATORS = {
|
|
|
3187
3412
|
};
|
|
3188
3413
|
/** Directive used to connect an input to a MatDatepicker. */
|
|
3189
3414
|
class MatDatepickerInput extends MatDatepickerInputBase {
|
|
3415
|
+
_formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
3416
|
+
_closedSubscription = Subscription.EMPTY;
|
|
3417
|
+
_openedSubscription = Subscription.EMPTY;
|
|
3190
3418
|
/** The datepicker that this input is associated with. */
|
|
3191
3419
|
set matDatepicker(datepicker) {
|
|
3192
3420
|
if (datepicker) {
|
|
@@ -3202,6 +3430,9 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3202
3430
|
this._registerModel(datepicker.registerInput(this));
|
|
3203
3431
|
}
|
|
3204
3432
|
}
|
|
3433
|
+
_datepicker;
|
|
3434
|
+
/** The id of the panel owned by this input. */
|
|
3435
|
+
_ariaOwns = signal(null);
|
|
3205
3436
|
/** The minimum valid date. */
|
|
3206
3437
|
get min() {
|
|
3207
3438
|
return this._min;
|
|
@@ -3213,6 +3444,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3213
3444
|
this._validatorOnChange();
|
|
3214
3445
|
}
|
|
3215
3446
|
}
|
|
3447
|
+
_min;
|
|
3216
3448
|
/** The maximum valid date. */
|
|
3217
3449
|
get max() {
|
|
3218
3450
|
return this._max;
|
|
@@ -3224,6 +3456,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3224
3456
|
this._validatorOnChange();
|
|
3225
3457
|
}
|
|
3226
3458
|
}
|
|
3459
|
+
_max;
|
|
3227
3460
|
/** Function that can be used to filter out dates within the datepicker. */
|
|
3228
3461
|
get dateFilter() {
|
|
3229
3462
|
return this._dateFilter;
|
|
@@ -3235,13 +3468,11 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3235
3468
|
this._validatorOnChange();
|
|
3236
3469
|
}
|
|
3237
3470
|
}
|
|
3471
|
+
_dateFilter;
|
|
3472
|
+
/** The combined form control validator for this input. */
|
|
3473
|
+
_validator;
|
|
3238
3474
|
constructor() {
|
|
3239
3475
|
super();
|
|
3240
|
-
this._formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
3241
|
-
this._closedSubscription = Subscription.EMPTY;
|
|
3242
|
-
this._openedSubscription = Subscription.EMPTY;
|
|
3243
|
-
/** The id of the panel owned by this input. */
|
|
3244
|
-
this._ariaOwns = signal(null);
|
|
3245
3476
|
this._validator = Validators.compose(super._getValidators());
|
|
3246
3477
|
}
|
|
3247
3478
|
/**
|
|
@@ -3300,12 +3531,12 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3300
3531
|
_shouldHandleChangeEvent(event) {
|
|
3301
3532
|
return event.source !== this;
|
|
3302
3533
|
}
|
|
3303
|
-
static
|
|
3304
|
-
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: [
|
|
3305
3536
|
MAT_DATEPICKER_VALUE_ACCESSOR,
|
|
3306
3537
|
MAT_DATEPICKER_VALIDATORS,
|
|
3307
3538
|
{ provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
|
|
3308
|
-
], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
|
|
3539
|
+
], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
|
|
3309
3540
|
}
|
|
3310
3541
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerInput, decorators: [{
|
|
3311
3542
|
type: Directive,
|
|
@@ -3346,8 +3577,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3346
3577
|
|
|
3347
3578
|
/** Can be used to override the icon of a `matDatepickerToggle`. */
|
|
3348
3579
|
class MatDatepickerToggleIcon {
|
|
3349
|
-
static
|
|
3350
|
-
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 });
|
|
3351
3582
|
}
|
|
3352
3583
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggleIcon, decorators: [{
|
|
3353
3584
|
type: Directive,
|
|
@@ -3356,6 +3587,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3356
3587
|
}]
|
|
3357
3588
|
}] });
|
|
3358
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;
|
|
3359
3599
|
/** Whether the toggle button is disabled. */
|
|
3360
3600
|
get disabled() {
|
|
3361
3601
|
if (this._disabled === undefined && this.datepicker) {
|
|
@@ -3366,10 +3606,14 @@ class MatDatepickerToggle {
|
|
|
3366
3606
|
set disabled(value) {
|
|
3367
3607
|
this._disabled = value;
|
|
3368
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;
|
|
3369
3616
|
constructor() {
|
|
3370
|
-
this._intl = inject(MatDatepickerIntl);
|
|
3371
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
3372
|
-
this._stateChanges = Subscription.EMPTY;
|
|
3373
3617
|
const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });
|
|
3374
3618
|
const parsedTabIndex = Number(defaultTabIndex);
|
|
3375
3619
|
this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;
|
|
@@ -3402,8 +3646,8 @@ class MatDatepickerToggle {
|
|
|
3402
3646
|
this._stateChanges.unsubscribe();
|
|
3403
3647
|
this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());
|
|
3404
3648
|
}
|
|
3405
|
-
static
|
|
3406
|
-
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 });
|
|
3407
3651
|
}
|
|
3408
3652
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerToggle, decorators: [{
|
|
3409
3653
|
type: Component,
|
|
@@ -3602,6 +3846,19 @@ const MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken('MAT_DATE_RANGE_INPUT_PAR
|
|
|
3602
3846
|
* Base class for the individual inputs that can be projected inside a `mat-date-range-input`.
|
|
3603
3847
|
*/
|
|
3604
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;
|
|
3605
3862
|
/** Object used to control when error messages are shown. */
|
|
3606
3863
|
get errorStateMatcher() {
|
|
3607
3864
|
return this._errorStateTracker.matcher;
|
|
@@ -3618,13 +3875,6 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
|
3618
3875
|
}
|
|
3619
3876
|
constructor() {
|
|
3620
3877
|
super();
|
|
3621
|
-
this._rangeInput = inject(MAT_DATE_RANGE_INPUT_PARENT);
|
|
3622
|
-
this._elementRef = inject(ElementRef);
|
|
3623
|
-
this._defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
3624
|
-
this._injector = inject(Injector);
|
|
3625
|
-
this._parentForm = inject(NgForm, { optional: true });
|
|
3626
|
-
this._parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
3627
|
-
this._dir = inject(Directionality, { optional: true });
|
|
3628
3878
|
this._errorStateTracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, null, this._parentFormGroup, this._parentForm, this.stateChanges);
|
|
3629
3879
|
}
|
|
3630
3880
|
ngOnInit() {
|
|
@@ -3708,8 +3958,8 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
|
3708
3958
|
_getAccessibleName() {
|
|
3709
3959
|
return _computeAriaAccessibleName(this._elementRef.nativeElement);
|
|
3710
3960
|
}
|
|
3711
|
-
static
|
|
3712
|
-
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 });
|
|
3713
3963
|
}
|
|
3714
3964
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInputPartBase, decorators: [{
|
|
3715
3965
|
type: Directive
|
|
@@ -3718,18 +3968,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3718
3968
|
}] } });
|
|
3719
3969
|
/** Input for entering the start date in a `mat-date-range-input`. */
|
|
3720
3970
|
class MatStartDate extends MatDateRangeInputPartBase {
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
this.
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
};
|
|
3731
|
-
this._validator = Validators.compose([...super._getValidators(), this._startValidator]);
|
|
3732
|
-
}
|
|
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]);
|
|
3733
3980
|
_getValueFromModel(modelValue) {
|
|
3734
3981
|
return modelValue.start;
|
|
3735
3982
|
}
|
|
@@ -3772,11 +4019,11 @@ class MatStartDate extends MatDateRangeInputPartBase {
|
|
|
3772
4019
|
super._onKeydown(event);
|
|
3773
4020
|
}
|
|
3774
4021
|
}
|
|
3775
|
-
static
|
|
3776
|
-
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: [
|
|
3777
4024
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },
|
|
3778
4025
|
{ provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true },
|
|
3779
|
-
], usesInheritance: true, ngImport: i0 });
|
|
4026
|
+
], usesInheritance: true, ngImport: i0 });
|
|
3780
4027
|
}
|
|
3781
4028
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatStartDate, decorators: [{
|
|
3782
4029
|
type: Directive,
|
|
@@ -3808,18 +4055,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3808
4055
|
}] });
|
|
3809
4056
|
/** Input for entering the end date in a `mat-date-range-input`. */
|
|
3810
4057
|
class MatEndDate extends MatDateRangeInputPartBase {
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
this.
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
};
|
|
3821
|
-
this._validator = Validators.compose([...super._getValidators(), this._endValidator]);
|
|
3822
|
-
}
|
|
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]);
|
|
3823
4067
|
_getValueFromModel(modelValue) {
|
|
3824
4068
|
return modelValue.end;
|
|
3825
4069
|
}
|
|
@@ -3867,11 +4111,11 @@ class MatEndDate extends MatDateRangeInputPartBase {
|
|
|
3867
4111
|
super._onKeydown(event);
|
|
3868
4112
|
}
|
|
3869
4113
|
}
|
|
3870
|
-
static
|
|
3871
|
-
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: [
|
|
3872
4116
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },
|
|
3873
4117
|
{ provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true },
|
|
3874
|
-
], usesInheritance: true, ngImport: i0 });
|
|
4118
|
+
], usesInheritance: true, ngImport: i0 });
|
|
3875
4119
|
}
|
|
3876
4120
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatEndDate, decorators: [{
|
|
3877
4121
|
type: Directive,
|
|
@@ -3904,14 +4148,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3904
4148
|
|
|
3905
4149
|
let nextUniqueId = 0;
|
|
3906
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;
|
|
3907
4157
|
/** Current value of the range input. */
|
|
3908
4158
|
get value() {
|
|
3909
4159
|
return this._model ? this._model.selection : null;
|
|
3910
4160
|
}
|
|
4161
|
+
/** Unique ID for the group. */
|
|
4162
|
+
id = `mat-date-range-input-${nextUniqueId++}`;
|
|
4163
|
+
/** Whether the control is focused. */
|
|
4164
|
+
focused = false;
|
|
3911
4165
|
/** Whether the control's label should float. */
|
|
3912
4166
|
get shouldLabelFloat() {
|
|
3913
4167
|
return this.focused || !this.empty;
|
|
3914
4168
|
}
|
|
4169
|
+
/** Name of the form control. */
|
|
4170
|
+
controlType = 'mat-date-range-input';
|
|
3915
4171
|
/**
|
|
3916
4172
|
* Implemented as a part of `MatFormFieldControl`.
|
|
3917
4173
|
* Set the placeholder attribute on `matStartDate` and `matEndDate`.
|
|
@@ -3944,6 +4200,9 @@ class MatDateRangeInput {
|
|
|
3944
4200
|
this._registerModel(this._model);
|
|
3945
4201
|
}
|
|
3946
4202
|
}
|
|
4203
|
+
_rangePicker;
|
|
4204
|
+
/** The id of the panel owned by this input. */
|
|
4205
|
+
_ariaOwns = signal(null);
|
|
3947
4206
|
/** Whether the input is required. */
|
|
3948
4207
|
get required() {
|
|
3949
4208
|
return (this._required ??
|
|
@@ -3955,6 +4214,7 @@ class MatDateRangeInput {
|
|
|
3955
4214
|
set required(value) {
|
|
3956
4215
|
this._required = value;
|
|
3957
4216
|
}
|
|
4217
|
+
_required;
|
|
3958
4218
|
/** Function that can be used to filter out dates within the date range picker. */
|
|
3959
4219
|
get dateFilter() {
|
|
3960
4220
|
return this._dateFilter;
|
|
@@ -3972,6 +4232,7 @@ class MatDateRangeInput {
|
|
|
3972
4232
|
end._validatorOnChange();
|
|
3973
4233
|
}
|
|
3974
4234
|
}
|
|
4235
|
+
_dateFilter;
|
|
3975
4236
|
/** The minimum valid date. */
|
|
3976
4237
|
get min() {
|
|
3977
4238
|
return this._min;
|
|
@@ -3983,6 +4244,7 @@ class MatDateRangeInput {
|
|
|
3983
4244
|
this._revalidate();
|
|
3984
4245
|
}
|
|
3985
4246
|
}
|
|
4247
|
+
_min;
|
|
3986
4248
|
/** The maximum valid date. */
|
|
3987
4249
|
get max() {
|
|
3988
4250
|
return this._max;
|
|
@@ -3994,6 +4256,7 @@ class MatDateRangeInput {
|
|
|
3994
4256
|
this._revalidate();
|
|
3995
4257
|
}
|
|
3996
4258
|
}
|
|
4259
|
+
_max;
|
|
3997
4260
|
/** Whether the input is disabled. */
|
|
3998
4261
|
get disabled() {
|
|
3999
4262
|
return this._startInput && this._endInput
|
|
@@ -4006,6 +4269,7 @@ class MatDateRangeInput {
|
|
|
4006
4269
|
this.stateChanges.next(undefined);
|
|
4007
4270
|
}
|
|
4008
4271
|
}
|
|
4272
|
+
_groupDisabled = false;
|
|
4009
4273
|
/** Whether the input is in an error state. */
|
|
4010
4274
|
get errorState() {
|
|
4011
4275
|
if (this._startInput && this._endInput) {
|
|
@@ -4019,37 +4283,32 @@ class MatDateRangeInput {
|
|
|
4019
4283
|
const endEmpty = this._endInput ? this._endInput.isEmpty() : false;
|
|
4020
4284
|
return startEmpty && endEmpty;
|
|
4021
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;
|
|
4022
4311
|
constructor() {
|
|
4023
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
4024
|
-
this._elementRef = inject(ElementRef);
|
|
4025
|
-
this._dateAdapter = inject(DateAdapter, { optional: true });
|
|
4026
|
-
this._formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
4027
|
-
this._closedSubscription = Subscription.EMPTY;
|
|
4028
|
-
this._openedSubscription = Subscription.EMPTY;
|
|
4029
|
-
/** Unique ID for the group. */
|
|
4030
|
-
this.id = `mat-date-range-input-${nextUniqueId++}`;
|
|
4031
|
-
/** Whether the control is focused. */
|
|
4032
|
-
this.focused = false;
|
|
4033
|
-
/** Name of the form control. */
|
|
4034
|
-
this.controlType = 'mat-date-range-input';
|
|
4035
|
-
/** The id of the panel owned by this input. */
|
|
4036
|
-
this._ariaOwns = signal(null);
|
|
4037
|
-
this._groupDisabled = false;
|
|
4038
|
-
/** Value for the `aria-describedby` attribute of the inputs. */
|
|
4039
|
-
this._ariaDescribedBy = null;
|
|
4040
|
-
/** Separator text to be shown between the inputs. */
|
|
4041
|
-
this.separator = '–';
|
|
4042
|
-
/** Start of the comparison range that should be shown in the calendar. */
|
|
4043
|
-
this.comparisonStart = null;
|
|
4044
|
-
/** End of the comparison range that should be shown in the calendar. */
|
|
4045
|
-
this.comparisonEnd = null;
|
|
4046
|
-
/** Emits when the input's state has changed. */
|
|
4047
|
-
this.stateChanges = new Subject();
|
|
4048
|
-
/**
|
|
4049
|
-
* Disable the automatic labeling to avoid issues like #27241.
|
|
4050
|
-
* @docs-private
|
|
4051
|
-
*/
|
|
4052
|
-
this.disableAutomaticLabeling = true;
|
|
4053
4312
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
4054
4313
|
throw createMissingDateImplError('DateAdapter');
|
|
4055
4314
|
}
|
|
@@ -4190,11 +4449,11 @@ class MatDateRangeInput {
|
|
|
4190
4449
|
_isTargetRequired(target) {
|
|
4191
4450
|
return target?.ngControl?.control?.hasValidator(Validators.required);
|
|
4192
4451
|
}
|
|
4193
|
-
static
|
|
4194
|
-
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: [
|
|
4195
4454
|
{ provide: MatFormFieldControl, useExisting: MatDateRangeInput },
|
|
4196
4455
|
{ provide: MAT_DATE_RANGE_INPUT_PARENT, useExisting: MatDateRangeInput },
|
|
4197
|
-
], 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 });
|
|
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 });
|
|
4198
4457
|
}
|
|
4199
4458
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangeInput, decorators: [{
|
|
4200
4459
|
type: Component,
|
|
@@ -4256,12 +4515,12 @@ class MatDateRangePicker extends MatDatepickerBase {
|
|
|
4256
4515
|
instance.endDateAccessibleName = input._getEndDateAccessibleName();
|
|
4257
4516
|
}
|
|
4258
4517
|
}
|
|
4259
|
-
static
|
|
4260
|
-
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: [
|
|
4261
4520
|
MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
|
|
4262
4521
|
MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
|
|
4263
4522
|
{ provide: MatDatepickerBase, useExisting: MatDateRangePicker },
|
|
4264
|
-
], 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 });
|
|
4265
4524
|
}
|
|
4266
4525
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDateRangePicker, decorators: [{
|
|
4267
4526
|
type: Component,
|
|
@@ -4281,15 +4540,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4281
4540
|
|
|
4282
4541
|
/** Button that will close the datepicker and assign the current selection to the data model. */
|
|
4283
4542
|
class MatDatepickerApply {
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
}
|
|
4543
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4544
|
+
constructor() { }
|
|
4287
4545
|
_applySelection() {
|
|
4288
4546
|
this._datepicker._applyPendingSelection();
|
|
4289
4547
|
this._datepicker.close();
|
|
4290
4548
|
}
|
|
4291
|
-
static
|
|
4292
|
-
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 });
|
|
4293
4551
|
}
|
|
4294
4552
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerApply, decorators: [{
|
|
4295
4553
|
type: Directive,
|
|
@@ -4300,11 +4558,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4300
4558
|
}], ctorParameters: () => [] });
|
|
4301
4559
|
/** Button that will close the datepicker and discard the current selection. */
|
|
4302
4560
|
class MatDatepickerCancel {
|
|
4303
|
-
|
|
4304
|
-
|
|
4305
|
-
}
|
|
4306
|
-
static
|
|
4307
|
-
static { this.ɵ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 }); }
|
|
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 });
|
|
4308
4565
|
}
|
|
4309
4566
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerCancel, decorators: [{
|
|
4310
4567
|
type: Directive,
|
|
@@ -4318,10 +4575,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4318
4575
|
* to the bottom of a datepicker or date range picker.
|
|
4319
4576
|
*/
|
|
4320
4577
|
class MatDatepickerActions {
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4578
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4579
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
4580
|
+
_template;
|
|
4581
|
+
_portal;
|
|
4582
|
+
constructor() { }
|
|
4325
4583
|
ngAfterViewInit() {
|
|
4326
4584
|
this._portal = new TemplatePortal(this._template, this._viewContainerRef);
|
|
4327
4585
|
this._datepicker.registerActions(this._portal);
|
|
@@ -4333,14 +4591,14 @@ class MatDatepickerActions {
|
|
|
4333
4591
|
this._portal?.detach();
|
|
4334
4592
|
}
|
|
4335
4593
|
}
|
|
4336
|
-
static
|
|
4337
|
-
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: `
|
|
4338
4596
|
<ng-template>
|
|
4339
4597
|
<div class="mat-datepicker-actions">
|
|
4340
4598
|
<ng-content></ng-content>
|
|
4341
4599
|
</div>
|
|
4342
4600
|
</ng-template>
|
|
4343
|
-
`, 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 });
|
|
4344
4602
|
}
|
|
4345
4603
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerActions, decorators: [{
|
|
4346
4604
|
type: Component,
|
|
@@ -4357,9 +4615,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4357
4615
|
}] } });
|
|
4358
4616
|
|
|
4359
4617
|
class MatDatepickerModule {
|
|
4360
|
-
static
|
|
4361
|
-
static
|
|
4362
|
-
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,
|
|
4363
4620
|
OverlayModule,
|
|
4364
4621
|
A11yModule,
|
|
4365
4622
|
PortalModule,
|
|
@@ -4399,22 +4656,20 @@ class MatDatepickerModule {
|
|
|
4399
4656
|
MatDateRangePicker,
|
|
4400
4657
|
MatDatepickerActions,
|
|
4401
4658
|
MatDatepickerCancel,
|
|
4402
|
-
MatDatepickerApply] });
|
|
4403
|
-
static
|
|
4404
|
-
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,
|
|
4405
4661
|
OverlayModule,
|
|
4406
4662
|
A11yModule,
|
|
4407
4663
|
PortalModule,
|
|
4408
4664
|
MatCommonModule,
|
|
4409
4665
|
MatDatepickerContent,
|
|
4410
4666
|
MatDatepickerToggle,
|
|
4411
|
-
MatCalendarHeader, CdkScrollableModule] });
|
|
4667
|
+
MatCalendarHeader, CdkScrollableModule] });
|
|
4412
4668
|
}
|
|
4413
4669
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10", ngImport: i0, type: MatDatepickerModule, decorators: [{
|
|
4414
4670
|
type: NgModule,
|
|
4415
4671
|
args: [{
|
|
4416
4672
|
imports: [
|
|
4417
|
-
CommonModule,
|
|
4418
4673
|
MatButtonModule,
|
|
4419
4674
|
OverlayModule,
|
|
4420
4675
|
A11yModule,
|