@angular/material 19.0.0-next.9 → 19.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autocomplete/_autocomplete-theme.scss +8 -4
- package/autocomplete/index.d.ts +5 -6
- package/badge/_badge-theme.scss +10 -6
- package/badge/index.d.ts +1 -2
- 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/button-toggle/index.d.ts +2 -1
- 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/m2/_theming.scss +2 -1
- 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/theming/_theming.scss +2 -1
- package/core/tokens/_m3-system.scss +55 -39
- package/core/tokens/_m3-tokens.scss +3 -3
- package/core/tokens/_token-definition.scss +4 -3
- package/core/tokens/m2/mat/_badge.scss +1 -1
- package/core/tokens/m2/mat/_datepicker.scss +1 -1
- package/core/tokens/m2/mat/_menu.scss +5 -3
- package/core/tokens/m2/mat/_sort.scss +1 -1
- package/core/tokens/m3/mat/_menu.scss +6 -3
- package/core/tokens/m3/mdc/_filled-text-field.scss +9 -11
- package/datepicker/_datepicker-theme.scss +10 -6
- package/datepicker/index.d.ts +36 -37
- package/dialog/_dialog-theme.scss +8 -4
- package/dialog/index.d.ts +1 -0
- 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 +225 -151
- package/fesm2022/autocomplete.mjs.map +1 -1
- package/fesm2022/badge/testing.mjs +2 -5
- package/fesm2022/badge/testing.mjs.map +1 -1
- package/fesm2022/badge.mjs +45 -36
- 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 +79 -57
- 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 +84 -47
- package/fesm2022/button-toggle.mjs.map +1 -1
- package/fesm2022/button.mjs +98 -71
- 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 +53 -55
- 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 +105 -63
- 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 +317 -268
- 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 +237 -187
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/datepicker/testing.mjs +13 -22
- package/fesm2022/datepicker/testing.mjs.map +1 -1
- package/fesm2022/datepicker.mjs +821 -568
- 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 +221 -153
- 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 +9 -11
- 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 +85 -76
- package/fesm2022/expansion.mjs.map +1 -1
- package/fesm2022/form-field/testing.mjs +12 -15
- package/fesm2022/form-field/testing.mjs.map +1 -1
- package/fesm2022/form-field.mjs +179 -126
- 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 +72 -50
- package/fesm2022/grid-list.mjs.map +1 -1
- package/fesm2022/icon/testing.mjs +8 -8
- package/fesm2022/icon/testing.mjs.map +1 -1
- package/fesm2022/icon.mjs +65 -45
- 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 +104 -72
- package/fesm2022/input.mjs.map +1 -1
- package/fesm2022/list/testing.mjs +21 -38
- package/fesm2022/list/testing.mjs.map +1 -1
- package/fesm2022/list.mjs +191 -180
- package/fesm2022/list.mjs.map +1 -1
- package/fesm2022/menu/testing.mjs +3 -6
- package/fesm2022/menu/testing.mjs.map +1 -1
- package/fesm2022/menu.mjs +178 -168
- 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 +84 -59
- 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 +35 -34
- 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 +27 -13
- package/fesm2022/progress-spinner.mjs.map +1 -1
- package/fesm2022/radio/testing.mjs +6 -12
- package/fesm2022/radio/testing.mjs.map +1 -1
- package/fesm2022/radio.mjs +123 -88
- 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 +220 -182
- package/fesm2022/select.mjs.map +1 -1
- package/fesm2022/sidenav/testing.mjs +6 -6
- package/fesm2022/sidenav/testing.mjs.map +1 -1
- package/fesm2022/sidenav.mjs +132 -119
- 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 +78 -49
- 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 +260 -190
- 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 +141 -107
- 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 +93 -72
- 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 +143 -105
- 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 +182 -177
- 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 +326 -247
- 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 +157 -153
- 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 +25 -15
- 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 +96 -72
- 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 +56 -54
- package/fesm2022/tree.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +9 -5
- package/form-field/index.d.ts +9 -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 +15 -17
- 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 +7 -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
|
-
import { CdkMonitorFocus, CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
|
|
1
|
+
import { _IdGenerator, CdkMonitorFocus, CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
|
|
2
2
|
import { Overlay, FlexibleConnectedPositionStrategy, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
3
3
|
import { ComponentPortal, CdkPortalOutlet, TemplatePortal, PortalModule } from '@angular/cdk/portal';
|
|
4
|
-
import { NgClass, DOCUMENT, CommonModule } from '@angular/common';
|
|
5
4
|
import * as i0 from '@angular/core';
|
|
6
5
|
import { Injectable, inject, ElementRef, NgZone, EventEmitter, Injector, afterNextRender, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, Optional, SkipSelf, InjectionToken, ChangeDetectorRef, ViewChild, ViewContainerRef, booleanAttribute, Directive, forwardRef, signal, HostAttributeToken, ContentChild, TemplateRef, NgModule } from '@angular/core';
|
|
7
6
|
import { MatButton, MatIconButton, MatButtonModule } from '@angular/material/button';
|
|
@@ -12,7 +11,8 @@ import { Subject, Subscription, merge, of } from 'rxjs';
|
|
|
12
11
|
import { ESCAPE, hasModifierKey, SPACE, ENTER, PAGE_DOWN, PAGE_UP, END, HOME, DOWN_ARROW, UP_ARROW, RIGHT_ARROW, LEFT_ARROW, BACKSPACE } from '@angular/cdk/keycodes';
|
|
13
12
|
import { Directionality } from '@angular/cdk/bidi';
|
|
14
13
|
import { normalizePassiveListenerOptions, Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
|
|
15
|
-
import {
|
|
14
|
+
import { NgClass, DOCUMENT } from '@angular/common';
|
|
15
|
+
import { _CdkPrivateStyleLoader, _VisuallyHiddenLoader } from '@angular/cdk/private';
|
|
16
16
|
import { startWith, take, filter } from 'rxjs/operators';
|
|
17
17
|
import { coerceStringArray } from '@angular/cdk/coercion';
|
|
18
18
|
import { trigger, transition, animate, keyframes, style, state } from '@angular/animations';
|
|
@@ -29,47 +29,45 @@ function createMissingDateImplError(provider) {
|
|
|
29
29
|
|
|
30
30
|
/** Datepicker data that requires internationalization. */
|
|
31
31
|
class MatDatepickerIntl {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
this.endDateLabel = 'End date';
|
|
72
|
-
}
|
|
32
|
+
/**
|
|
33
|
+
* Stream that emits whenever the labels here are changed. Use this to notify
|
|
34
|
+
* components if the labels have changed after initialization.
|
|
35
|
+
*/
|
|
36
|
+
changes = new Subject();
|
|
37
|
+
/** A label for the calendar popup (used by screen readers). */
|
|
38
|
+
calendarLabel = 'Calendar';
|
|
39
|
+
/** A label for the button used to open the calendar popup (used by screen readers). */
|
|
40
|
+
openCalendarLabel = 'Open calendar';
|
|
41
|
+
/** Label for the button used to close the calendar popup. */
|
|
42
|
+
closeCalendarLabel = 'Close calendar';
|
|
43
|
+
/** A label for the previous month button (used by screen readers). */
|
|
44
|
+
prevMonthLabel = 'Previous month';
|
|
45
|
+
/** A label for the next month button (used by screen readers). */
|
|
46
|
+
nextMonthLabel = 'Next month';
|
|
47
|
+
/** A label for the previous year button (used by screen readers). */
|
|
48
|
+
prevYearLabel = 'Previous year';
|
|
49
|
+
/** A label for the next year button (used by screen readers). */
|
|
50
|
+
nextYearLabel = 'Next year';
|
|
51
|
+
/** A label for the previous multi-year button (used by screen readers). */
|
|
52
|
+
prevMultiYearLabel = 'Previous 24 years';
|
|
53
|
+
/** A label for the next multi-year button (used by screen readers). */
|
|
54
|
+
nextMultiYearLabel = 'Next 24 years';
|
|
55
|
+
/** A label for the 'switch to month view' button (used by screen readers). */
|
|
56
|
+
switchToMonthViewLabel = 'Choose date';
|
|
57
|
+
/** A label for the 'switch to year view' button (used by screen readers). */
|
|
58
|
+
switchToMultiYearViewLabel = 'Choose month and year';
|
|
59
|
+
/**
|
|
60
|
+
* A label for the first date of a range of dates (used by screen readers).
|
|
61
|
+
* @deprecated Provide your own internationalization string.
|
|
62
|
+
* @breaking-change 17.0.0
|
|
63
|
+
*/
|
|
64
|
+
startDateLabel = 'Start date';
|
|
65
|
+
/**
|
|
66
|
+
* A label for the last date of a range of dates (used by screen readers).
|
|
67
|
+
* @deprecated Provide your own internationalization string.
|
|
68
|
+
* @breaking-change 17.0.0
|
|
69
|
+
*/
|
|
70
|
+
endDateLabel = 'End date';
|
|
73
71
|
/** Formats a range of years (used for visuals). */
|
|
74
72
|
formatYearRange(start, end) {
|
|
75
73
|
return `${start} \u2013 ${end}`;
|
|
@@ -78,10 +76,10 @@ class MatDatepickerIntl {
|
|
|
78
76
|
formatYearRangeLabel(start, end) {
|
|
79
77
|
return `${start} to ${end}`;
|
|
80
78
|
}
|
|
81
|
-
static
|
|
82
|
-
static
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
80
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerIntl, providedIn: 'root' });
|
|
83
81
|
}
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerIntl, decorators: [{
|
|
85
83
|
type: Injectable,
|
|
86
84
|
args: [{ providedIn: 'root' }]
|
|
87
85
|
}] });
|
|
@@ -92,6 +90,14 @@ let uniqueIdCounter$1 = 0;
|
|
|
92
90
|
* @docs-private
|
|
93
91
|
*/
|
|
94
92
|
class MatCalendarCell {
|
|
93
|
+
value;
|
|
94
|
+
displayValue;
|
|
95
|
+
ariaLabel;
|
|
96
|
+
enabled;
|
|
97
|
+
cssClasses;
|
|
98
|
+
compareValue;
|
|
99
|
+
rawValue;
|
|
100
|
+
id = uniqueIdCounter$1++;
|
|
95
101
|
constructor(value, displayValue, ariaLabel, enabled, cssClasses = {}, compareValue = value, rawValue) {
|
|
96
102
|
this.value = value;
|
|
97
103
|
this.displayValue = displayValue;
|
|
@@ -100,10 +106,8 @@ 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
|
-
let calendarBodyId = 1;
|
|
107
111
|
/** Event options that can be used to bind an active, capturing event. */
|
|
108
112
|
const activeCapturingEventOptions = normalizePassiveListenerOptions({
|
|
109
113
|
passive: false,
|
|
@@ -121,157 +125,90 @@ const passiveEventOptions = normalizePassiveListenerOptions({ passive: true });
|
|
|
121
125
|
* @docs-private
|
|
122
126
|
*/
|
|
123
127
|
class MatCalendarBody {
|
|
128
|
+
_elementRef = inject(ElementRef);
|
|
129
|
+
_ngZone = inject(NgZone);
|
|
130
|
+
_platform = inject(Platform);
|
|
131
|
+
/**
|
|
132
|
+
* Used to skip the next focus event when rendering the preview range.
|
|
133
|
+
* We need a flag like this, because some browsers fire focus events asynchronously.
|
|
134
|
+
*/
|
|
135
|
+
_skipNextFocus;
|
|
136
|
+
/**
|
|
137
|
+
* Used to focus the active cell after change detection has run.
|
|
138
|
+
*/
|
|
139
|
+
_focusActiveCellAfterViewChecked = false;
|
|
140
|
+
/** The label for the table. (e.g. "Jan 2017"). */
|
|
141
|
+
label;
|
|
142
|
+
/** The cells to display in the table. */
|
|
143
|
+
rows;
|
|
144
|
+
/** The value in the table that corresponds to today. */
|
|
145
|
+
todayValue;
|
|
146
|
+
/** Start value of the selected date range. */
|
|
147
|
+
startValue;
|
|
148
|
+
/** End value of the selected date range. */
|
|
149
|
+
endValue;
|
|
150
|
+
/** The minimum number of free cells needed to fit the label in the first row. */
|
|
151
|
+
labelMinRequiredCells;
|
|
152
|
+
/** The number of columns in the table. */
|
|
153
|
+
numCols = 7;
|
|
154
|
+
/** The cell number of the active cell in the table. */
|
|
155
|
+
activeCell = 0;
|
|
124
156
|
ngAfterViewChecked() {
|
|
125
157
|
if (this._focusActiveCellAfterViewChecked) {
|
|
126
158
|
this._focusActiveCell();
|
|
127
159
|
this._focusActiveCellAfterViewChecked = false;
|
|
128
160
|
}
|
|
129
161
|
}
|
|
162
|
+
/** Whether a range is being selected. */
|
|
163
|
+
isRange = false;
|
|
164
|
+
/**
|
|
165
|
+
* The aspect ratio (width / height) to use for the cells in the table. This aspect ratio will be
|
|
166
|
+
* maintained even as the table resizes.
|
|
167
|
+
*/
|
|
168
|
+
cellAspectRatio = 1;
|
|
169
|
+
/** Start of the comparison range. */
|
|
170
|
+
comparisonStart;
|
|
171
|
+
/** End of the comparison range. */
|
|
172
|
+
comparisonEnd;
|
|
173
|
+
/** Start of the preview range. */
|
|
174
|
+
previewStart = null;
|
|
175
|
+
/** End of the preview range. */
|
|
176
|
+
previewEnd = null;
|
|
177
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
178
|
+
startDateAccessibleName;
|
|
179
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
180
|
+
endDateAccessibleName;
|
|
181
|
+
/** Emits when a new value is selected. */
|
|
182
|
+
selectedValueChange = new EventEmitter();
|
|
183
|
+
/** Emits when the preview has changed as a result of a user action. */
|
|
184
|
+
previewChange = new EventEmitter();
|
|
185
|
+
activeDateChange = new EventEmitter();
|
|
186
|
+
/** Emits the date at the possible start of a drag event. */
|
|
187
|
+
dragStarted = new EventEmitter();
|
|
188
|
+
/** Emits the date at the conclusion of a drag, or null if mouse was not released on a date. */
|
|
189
|
+
dragEnded = new EventEmitter();
|
|
190
|
+
/** The number of blank cells to put at the beginning for the first row. */
|
|
191
|
+
_firstRowOffset;
|
|
192
|
+
/** Padding for the individual date cells. */
|
|
193
|
+
_cellPadding;
|
|
194
|
+
/** Width of an individual cell. */
|
|
195
|
+
_cellWidth;
|
|
196
|
+
/** ID for the start date label. */
|
|
197
|
+
_startDateLabelId;
|
|
198
|
+
/** ID for the end date label. */
|
|
199
|
+
_endDateLabelId;
|
|
200
|
+
_didDragSinceMouseDown = false;
|
|
201
|
+
_injector = inject(Injector);
|
|
202
|
+
/**
|
|
203
|
+
* Tracking function for rows based on their identity. Ideally we would use some sort of
|
|
204
|
+
* key on the row, but that would require a breaking change for the `rows` input. We don't
|
|
205
|
+
* use the built-in identity tracking, because it logs warnings.
|
|
206
|
+
*/
|
|
207
|
+
_trackRow = (row) => row;
|
|
130
208
|
constructor() {
|
|
131
|
-
|
|
132
|
-
this.
|
|
133
|
-
this.
|
|
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`;
|
|
209
|
+
const idGenerator = inject(_IdGenerator);
|
|
210
|
+
this._startDateLabelId = idGenerator.getId('mat-calendar-body-start-');
|
|
211
|
+
this._endDateLabelId = idGenerator.getId('mat-calendar-body-start-');
|
|
275
212
|
inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);
|
|
276
213
|
this._ngZone.runOutsideAngular(() => {
|
|
277
214
|
const element = this._elementRef.nativeElement;
|
|
@@ -475,6 +412,108 @@ class MatCalendarBody {
|
|
|
475
412
|
}
|
|
476
413
|
return null;
|
|
477
414
|
}
|
|
415
|
+
/**
|
|
416
|
+
* Event handler for when the user enters an element
|
|
417
|
+
* inside the calendar body (e.g. by hovering in or focus).
|
|
418
|
+
*/
|
|
419
|
+
_enterHandler = (event) => {
|
|
420
|
+
if (this._skipNextFocus && event.type === 'focus') {
|
|
421
|
+
this._skipNextFocus = false;
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
// We only need to hit the zone when we're selecting a range.
|
|
425
|
+
if (event.target && this.isRange) {
|
|
426
|
+
const cell = this._getCellFromElement(event.target);
|
|
427
|
+
if (cell) {
|
|
428
|
+
this._ngZone.run(() => this.previewChange.emit({ value: cell.enabled ? cell : null, event }));
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
_touchmoveHandler = (event) => {
|
|
433
|
+
if (!this.isRange)
|
|
434
|
+
return;
|
|
435
|
+
const target = getActualTouchTarget(event);
|
|
436
|
+
const cell = target ? this._getCellFromElement(target) : null;
|
|
437
|
+
if (target !== event.target) {
|
|
438
|
+
this._didDragSinceMouseDown = true;
|
|
439
|
+
}
|
|
440
|
+
// If the initial target of the touch is a date cell, prevent default so
|
|
441
|
+
// that the move is not handled as a scroll.
|
|
442
|
+
if (getCellElement(event.target)) {
|
|
443
|
+
event.preventDefault();
|
|
444
|
+
}
|
|
445
|
+
this._ngZone.run(() => this.previewChange.emit({ value: cell?.enabled ? cell : null, event }));
|
|
446
|
+
};
|
|
447
|
+
/**
|
|
448
|
+
* Event handler for when the user's pointer leaves an element
|
|
449
|
+
* inside the calendar body (e.g. by hovering out or blurring).
|
|
450
|
+
*/
|
|
451
|
+
_leaveHandler = (event) => {
|
|
452
|
+
// We only need to hit the zone when we're selecting a range.
|
|
453
|
+
if (this.previewEnd !== null && this.isRange) {
|
|
454
|
+
if (event.type !== 'blur') {
|
|
455
|
+
this._didDragSinceMouseDown = true;
|
|
456
|
+
}
|
|
457
|
+
// Only reset the preview end value when leaving cells. This looks better, because
|
|
458
|
+
// we have a gap between the cells and the rows and we don't want to remove the
|
|
459
|
+
// range just for it to show up again when the user moves a few pixels to the side.
|
|
460
|
+
if (event.target &&
|
|
461
|
+
this._getCellFromElement(event.target) &&
|
|
462
|
+
!(event.relatedTarget &&
|
|
463
|
+
this._getCellFromElement(event.relatedTarget))) {
|
|
464
|
+
this._ngZone.run(() => this.previewChange.emit({ value: null, event }));
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
/**
|
|
469
|
+
* Triggered on mousedown or touchstart on a date cell.
|
|
470
|
+
* Respsonsible for starting a drag sequence.
|
|
471
|
+
*/
|
|
472
|
+
_mousedownHandler = (event) => {
|
|
473
|
+
if (!this.isRange)
|
|
474
|
+
return;
|
|
475
|
+
this._didDragSinceMouseDown = false;
|
|
476
|
+
// Begin a drag if a cell within the current range was targeted.
|
|
477
|
+
const cell = event.target && this._getCellFromElement(event.target);
|
|
478
|
+
if (!cell || !this._isInRange(cell.compareValue)) {
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
this._ngZone.run(() => {
|
|
482
|
+
this.dragStarted.emit({
|
|
483
|
+
value: cell.rawValue,
|
|
484
|
+
event,
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
};
|
|
488
|
+
/** Triggered on mouseup anywhere. Respsonsible for ending a drag sequence. */
|
|
489
|
+
_mouseupHandler = (event) => {
|
|
490
|
+
if (!this.isRange)
|
|
491
|
+
return;
|
|
492
|
+
const cellElement = getCellElement(event.target);
|
|
493
|
+
if (!cellElement) {
|
|
494
|
+
// Mouseup happened outside of datepicker. Cancel drag.
|
|
495
|
+
this._ngZone.run(() => {
|
|
496
|
+
this.dragEnded.emit({ value: null, event });
|
|
497
|
+
});
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
if (cellElement.closest('.mat-calendar-body') !== this._elementRef.nativeElement) {
|
|
501
|
+
// Mouseup happened inside a different month instance.
|
|
502
|
+
// Allow it to handle the event.
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
this._ngZone.run(() => {
|
|
506
|
+
const cell = this._getCellFromElement(cellElement);
|
|
507
|
+
this.dragEnded.emit({ value: cell?.rawValue ?? null, event });
|
|
508
|
+
});
|
|
509
|
+
};
|
|
510
|
+
/** Triggered on touchend anywhere. Respsonsible for ending a drag sequence. */
|
|
511
|
+
_touchendHandler = (event) => {
|
|
512
|
+
const target = getActualTouchTarget(event);
|
|
513
|
+
if (target) {
|
|
514
|
+
this._mouseupHandler({ target });
|
|
515
|
+
}
|
|
516
|
+
};
|
|
478
517
|
/** Finds the MatCalendarCell that corresponds to a DOM node. */
|
|
479
518
|
_getCellFromElement(element) {
|
|
480
519
|
const cell = getCellElement(element);
|
|
@@ -487,10 +526,10 @@ class MatCalendarBody {
|
|
|
487
526
|
}
|
|
488
527
|
return null;
|
|
489
528
|
}
|
|
490
|
-
static
|
|
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 }); }
|
|
529
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatCalendarBody, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
530
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-rc.0", 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
531
|
}
|
|
493
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatCalendarBody, decorators: [{
|
|
494
533
|
type: Component,
|
|
495
534
|
args: [{ selector: '[mat-calendar-body]', host: {
|
|
496
535
|
'class': 'mat-calendar-body',
|
|
@@ -587,6 +626,14 @@ function getActualTouchTarget(event) {
|
|
|
587
626
|
|
|
588
627
|
/** A class representing a range of dates. */
|
|
589
628
|
class DateRange {
|
|
629
|
+
start;
|
|
630
|
+
end;
|
|
631
|
+
/**
|
|
632
|
+
* Ensures that objects with a `start` and `end` property can't be assigned to a variable that
|
|
633
|
+
* expects a `DateRange`
|
|
634
|
+
*/
|
|
635
|
+
// tslint:disable-next-line:no-unused-variable
|
|
636
|
+
_disableStructuralEquivalency;
|
|
590
637
|
constructor(
|
|
591
638
|
/** The start date of the range. */
|
|
592
639
|
start,
|
|
@@ -601,14 +648,16 @@ class DateRange {
|
|
|
601
648
|
* @docs-private
|
|
602
649
|
*/
|
|
603
650
|
class MatDateSelectionModel {
|
|
651
|
+
selection;
|
|
652
|
+
_adapter;
|
|
653
|
+
_selectionChanged = new Subject();
|
|
654
|
+
/** Emits when the selection has changed. */
|
|
655
|
+
selectionChanged = this._selectionChanged;
|
|
604
656
|
constructor(
|
|
605
657
|
/** The current selection. */
|
|
606
658
|
selection, _adapter) {
|
|
607
659
|
this.selection = selection;
|
|
608
660
|
this._adapter = _adapter;
|
|
609
|
-
this._selectionChanged = new Subject();
|
|
610
|
-
/** Emits when the selection has changed. */
|
|
611
|
-
this.selectionChanged = this._selectionChanged;
|
|
612
661
|
this.selection = selection;
|
|
613
662
|
}
|
|
614
663
|
/**
|
|
@@ -627,10 +676,10 @@ class MatDateSelectionModel {
|
|
|
627
676
|
_isValidDateInstance(date) {
|
|
628
677
|
return this._adapter.isDateInstance(date) && this._adapter.isValid(date);
|
|
629
678
|
}
|
|
630
|
-
static
|
|
631
|
-
static
|
|
679
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateSelectionModel, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
|
|
680
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateSelectionModel });
|
|
632
681
|
}
|
|
633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
682
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateSelectionModel, decorators: [{
|
|
634
683
|
type: Injectable
|
|
635
684
|
}], ctorParameters: () => [{ type: undefined }, { type: i1.DateAdapter }] });
|
|
636
685
|
/**
|
|
@@ -665,10 +714,10 @@ class MatSingleDateSelectionModel extends MatDateSelectionModel {
|
|
|
665
714
|
clone.updateSelection(this.selection, this);
|
|
666
715
|
return clone;
|
|
667
716
|
}
|
|
668
|
-
static
|
|
669
|
-
static
|
|
717
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatSingleDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
718
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatSingleDateSelectionModel });
|
|
670
719
|
}
|
|
671
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
720
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatSingleDateSelectionModel, decorators: [{
|
|
672
721
|
type: Injectable
|
|
673
722
|
}], ctorParameters: () => [{ type: i1.DateAdapter }] });
|
|
674
723
|
/**
|
|
@@ -728,10 +777,10 @@ class MatRangeDateSelectionModel extends MatDateSelectionModel {
|
|
|
728
777
|
clone.updateSelection(this.selection, this);
|
|
729
778
|
return clone;
|
|
730
779
|
}
|
|
731
|
-
static
|
|
732
|
-
static
|
|
780
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatRangeDateSelectionModel, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
781
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatRangeDateSelectionModel });
|
|
733
782
|
}
|
|
734
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
783
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatRangeDateSelectionModel, decorators: [{
|
|
735
784
|
type: Injectable
|
|
736
785
|
}], ctorParameters: () => [{ type: i1.DateAdapter }] });
|
|
737
786
|
/** @docs-private */
|
|
@@ -765,6 +814,7 @@ const MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER = {
|
|
|
765
814
|
const MAT_DATE_RANGE_SELECTION_STRATEGY = new InjectionToken('MAT_DATE_RANGE_SELECTION_STRATEGY');
|
|
766
815
|
/** Provides the default date range selection behavior. */
|
|
767
816
|
class DefaultMatCalendarRangeStrategy {
|
|
817
|
+
_dateAdapter;
|
|
768
818
|
constructor(_dateAdapter) {
|
|
769
819
|
this._dateAdapter = _dateAdapter;
|
|
770
820
|
}
|
|
@@ -829,10 +879,10 @@ class DefaultMatCalendarRangeStrategy {
|
|
|
829
879
|
}
|
|
830
880
|
return new DateRange(start, end);
|
|
831
881
|
}
|
|
832
|
-
static
|
|
833
|
-
static
|
|
882
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: DefaultMatCalendarRangeStrategy, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
883
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: DefaultMatCalendarRangeStrategy });
|
|
834
884
|
}
|
|
835
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
885
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: DefaultMatCalendarRangeStrategy, decorators: [{
|
|
836
886
|
type: Injectable
|
|
837
887
|
}], ctorParameters: () => [{ type: i1.DateAdapter }] });
|
|
838
888
|
/** @docs-private */
|
|
@@ -853,6 +903,14 @@ let uniqueIdCounter = 0;
|
|
|
853
903
|
* @docs-private
|
|
854
904
|
*/
|
|
855
905
|
class MatMonthView {
|
|
906
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
907
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
908
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
909
|
+
_dir = inject(Directionality, { optional: true });
|
|
910
|
+
_rangeStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
|
|
911
|
+
_rerenderSubscription = Subscription.EMPTY;
|
|
912
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
913
|
+
_selectionKeyPressed;
|
|
856
914
|
/**
|
|
857
915
|
* The date to display in this month view (everything other than the month and year is ignored).
|
|
858
916
|
*/
|
|
@@ -868,6 +926,7 @@ class MatMonthView {
|
|
|
868
926
|
this._init();
|
|
869
927
|
}
|
|
870
928
|
}
|
|
929
|
+
_activeDate;
|
|
871
930
|
/** The currently selected date. */
|
|
872
931
|
get selected() {
|
|
873
932
|
return this._selected;
|
|
@@ -881,6 +940,7 @@ class MatMonthView {
|
|
|
881
940
|
}
|
|
882
941
|
this._setRanges(this._selected);
|
|
883
942
|
}
|
|
943
|
+
_selected;
|
|
884
944
|
/** The minimum selectable date. */
|
|
885
945
|
get minDate() {
|
|
886
946
|
return this._minDate;
|
|
@@ -888,6 +948,7 @@ class MatMonthView {
|
|
|
888
948
|
set minDate(value) {
|
|
889
949
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
890
950
|
}
|
|
951
|
+
_minDate;
|
|
891
952
|
/** The maximum selectable date. */
|
|
892
953
|
get maxDate() {
|
|
893
954
|
return this._maxDate;
|
|
@@ -895,28 +956,62 @@ class MatMonthView {
|
|
|
895
956
|
set maxDate(value) {
|
|
896
957
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
897
958
|
}
|
|
959
|
+
_maxDate;
|
|
960
|
+
/** Function used to filter which dates are selectable. */
|
|
961
|
+
dateFilter;
|
|
962
|
+
/** Function that can be used to add custom CSS classes to dates. */
|
|
963
|
+
dateClass;
|
|
964
|
+
/** Start of the comparison range. */
|
|
965
|
+
comparisonStart;
|
|
966
|
+
/** End of the comparison range. */
|
|
967
|
+
comparisonEnd;
|
|
968
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
969
|
+
startDateAccessibleName;
|
|
970
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
971
|
+
endDateAccessibleName;
|
|
972
|
+
/** Origin of active drag, or null when dragging is not active. */
|
|
973
|
+
activeDrag = null;
|
|
974
|
+
/** Emits when a new date is selected. */
|
|
975
|
+
selectedChange = new EventEmitter();
|
|
976
|
+
/** Emits when any date is selected. */
|
|
977
|
+
_userSelection = new EventEmitter();
|
|
978
|
+
/** Emits when the user initiates a date range drag via mouse or touch. */
|
|
979
|
+
dragStarted = new EventEmitter();
|
|
980
|
+
/**
|
|
981
|
+
* Emits when the user completes or cancels a date range drag.
|
|
982
|
+
* Emits null when the drag was canceled or the newly selected date range if completed.
|
|
983
|
+
*/
|
|
984
|
+
dragEnded = new EventEmitter();
|
|
985
|
+
/** Emits when any date is activated. */
|
|
986
|
+
activeDateChange = new EventEmitter();
|
|
987
|
+
/** The body of calendar table */
|
|
988
|
+
_matCalendarBody;
|
|
989
|
+
/** The label for this month (e.g. "January 2017"). */
|
|
990
|
+
_monthLabel;
|
|
991
|
+
/** Grid of calendar cells representing the dates of the month. */
|
|
992
|
+
_weeks;
|
|
993
|
+
/** The number of blank cells in the first row before the 1st of the month. */
|
|
994
|
+
_firstWeekOffset;
|
|
995
|
+
/** Start value of the currently-shown date range. */
|
|
996
|
+
_rangeStart;
|
|
997
|
+
/** End value of the currently-shown date range. */
|
|
998
|
+
_rangeEnd;
|
|
999
|
+
/** Start value of the currently-shown comparison date range. */
|
|
1000
|
+
_comparisonRangeStart;
|
|
1001
|
+
/** End value of the currently-shown comparison date range. */
|
|
1002
|
+
_comparisonRangeEnd;
|
|
1003
|
+
/** Start of the preview range. */
|
|
1004
|
+
_previewStart;
|
|
1005
|
+
/** End of the preview range. */
|
|
1006
|
+
_previewEnd;
|
|
1007
|
+
/** Whether the user is currently selecting a range of dates. */
|
|
1008
|
+
_isRange;
|
|
1009
|
+
/** The date of the month that today falls on. Null if today is in another month. */
|
|
1010
|
+
_todayDate;
|
|
1011
|
+
/** The names of the weekdays. */
|
|
1012
|
+
_weekdays;
|
|
898
1013
|
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();
|
|
1014
|
+
inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
|
|
920
1015
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
921
1016
|
if (!this._dateAdapter) {
|
|
922
1017
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -1229,10 +1324,10 @@ class MatMonthView {
|
|
|
1229
1324
|
_clearPreview() {
|
|
1230
1325
|
this._previewStart = this._previewEnd = null;
|
|
1231
1326
|
}
|
|
1232
|
-
static
|
|
1233
|
-
static
|
|
1327
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatMonthView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1328
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-rc.0", 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
1329
|
}
|
|
1235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
1330
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatMonthView, decorators: [{
|
|
1236
1331
|
type: Component,
|
|
1237
1332
|
args: [{ selector: 'mat-month-view', exportAs: 'matMonthView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCalendarBody], template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead class=\"mat-calendar-table-header\">\n <tr>\n @for (day of _weekdays; track day.id) {\n <th scope=\"col\">\n <span class=\"cdk-visually-hidden\">{{day.long}}</span>\n <span aria-hidden=\"true\">{{day.narrow}}</span>\n </th>\n }\n </tr>\n <tr aria-hidden=\"true\"><th class=\"mat-calendar-table-header-divider\" colspan=\"7\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_monthLabel\"\n [rows]=\"_weeks\"\n [todayValue]=\"_todayDate!\"\n [startValue]=\"_rangeStart!\"\n [endValue]=\"_rangeEnd!\"\n [comparisonStart]=\"_comparisonRangeStart\"\n [comparisonEnd]=\"_comparisonRangeEnd\"\n [previewStart]=\"_previewStart\"\n [previewEnd]=\"_previewEnd\"\n [isRange]=\"_isRange\"\n [labelMinRequiredCells]=\"3\"\n [activeCell]=\"_dateAdapter.getDate(activeDate) - 1\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (selectedValueChange)=\"_dateSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (previewChange)=\"_previewChanged($event)\"\n (dragStarted)=\"dragStarted.emit($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n" }]
|
|
1238
1333
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{
|
|
@@ -1279,6 +1374,12 @@ const yearsPerRow = 4;
|
|
|
1279
1374
|
* @docs-private
|
|
1280
1375
|
*/
|
|
1281
1376
|
class MatMultiYearView {
|
|
1377
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
1378
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
1379
|
+
_dir = inject(Directionality, { optional: true });
|
|
1380
|
+
_rerenderSubscription = Subscription.EMPTY;
|
|
1381
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
1382
|
+
_selectionKeyPressed;
|
|
1282
1383
|
/** The date to display in this multi-year view (everything other than the year is ignored). */
|
|
1283
1384
|
get activeDate() {
|
|
1284
1385
|
return this._activeDate;
|
|
@@ -1292,6 +1393,7 @@ class MatMultiYearView {
|
|
|
1292
1393
|
this._init();
|
|
1293
1394
|
}
|
|
1294
1395
|
}
|
|
1396
|
+
_activeDate;
|
|
1295
1397
|
/** The currently selected date. */
|
|
1296
1398
|
get selected() {
|
|
1297
1399
|
return this._selected;
|
|
@@ -1305,6 +1407,7 @@ class MatMultiYearView {
|
|
|
1305
1407
|
}
|
|
1306
1408
|
this._setSelectedYear(value);
|
|
1307
1409
|
}
|
|
1410
|
+
_selected;
|
|
1308
1411
|
/** The minimum selectable date. */
|
|
1309
1412
|
get minDate() {
|
|
1310
1413
|
return this._minDate;
|
|
@@ -1312,6 +1415,7 @@ class MatMultiYearView {
|
|
|
1312
1415
|
set minDate(value) {
|
|
1313
1416
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1314
1417
|
}
|
|
1418
|
+
_minDate;
|
|
1315
1419
|
/** The maximum selectable date. */
|
|
1316
1420
|
get maxDate() {
|
|
1317
1421
|
return this._maxDate;
|
|
@@ -1319,17 +1423,26 @@ class MatMultiYearView {
|
|
|
1319
1423
|
set maxDate(value) {
|
|
1320
1424
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1321
1425
|
}
|
|
1426
|
+
_maxDate;
|
|
1427
|
+
/** A function used to filter which dates are selectable. */
|
|
1428
|
+
dateFilter;
|
|
1429
|
+
/** Function that can be used to add custom CSS classes to date cells. */
|
|
1430
|
+
dateClass;
|
|
1431
|
+
/** Emits when a new year is selected. */
|
|
1432
|
+
selectedChange = new EventEmitter();
|
|
1433
|
+
/** Emits the selected year. This doesn't imply a change on the selected date */
|
|
1434
|
+
yearSelected = new EventEmitter();
|
|
1435
|
+
/** Emits when any date is activated. */
|
|
1436
|
+
activeDateChange = new EventEmitter();
|
|
1437
|
+
/** The body of calendar table */
|
|
1438
|
+
_matCalendarBody;
|
|
1439
|
+
/** Grid of calendar cells representing the currently displayed years. */
|
|
1440
|
+
_years;
|
|
1441
|
+
/** The year that today falls on. */
|
|
1442
|
+
_todayYear;
|
|
1443
|
+
/** The year of the selected date. Null if the selected date is null. */
|
|
1444
|
+
_selectedYear;
|
|
1322
1445
|
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
1446
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
1334
1447
|
throw createMissingDateImplError('DateAdapter');
|
|
1335
1448
|
}
|
|
@@ -1515,10 +1628,10 @@ class MatMultiYearView {
|
|
|
1515
1628
|
this._selectedYear = this._dateAdapter.getYear(value);
|
|
1516
1629
|
}
|
|
1517
1630
|
}
|
|
1518
|
-
static
|
|
1519
|
-
static
|
|
1631
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatMultiYearView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1632
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
1633
|
}
|
|
1521
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
1634
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatMultiYearView, decorators: [{
|
|
1522
1635
|
type: Component,
|
|
1523
1636
|
args: [{ selector: 'mat-multi-year-view', exportAs: 'matMultiYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCalendarBody], template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [rows]=\"_years\"\n [todayValue]=\"_todayYear\"\n [startValue]=\"_selectedYear!\"\n [endValue]=\"_selectedYear!\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_getActiveCell()\"\n (selectedValueChange)=\"_yearSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n" }]
|
|
1524
1637
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{
|
|
@@ -1584,6 +1697,13 @@ function euclideanModulo(a, b) {
|
|
|
1584
1697
|
* @docs-private
|
|
1585
1698
|
*/
|
|
1586
1699
|
class MatYearView {
|
|
1700
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
1701
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
1702
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
1703
|
+
_dir = inject(Directionality, { optional: true });
|
|
1704
|
+
_rerenderSubscription = Subscription.EMPTY;
|
|
1705
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
1706
|
+
_selectionKeyPressed;
|
|
1587
1707
|
/** The date to display in this year view (everything other than the year is ignored). */
|
|
1588
1708
|
get activeDate() {
|
|
1589
1709
|
return this._activeDate;
|
|
@@ -1597,6 +1717,7 @@ class MatYearView {
|
|
|
1597
1717
|
this._init();
|
|
1598
1718
|
}
|
|
1599
1719
|
}
|
|
1720
|
+
_activeDate;
|
|
1600
1721
|
/** The currently selected date. */
|
|
1601
1722
|
get selected() {
|
|
1602
1723
|
return this._selected;
|
|
@@ -1610,6 +1731,7 @@ class MatYearView {
|
|
|
1610
1731
|
}
|
|
1611
1732
|
this._setSelectedMonth(value);
|
|
1612
1733
|
}
|
|
1734
|
+
_selected;
|
|
1613
1735
|
/** The minimum selectable date. */
|
|
1614
1736
|
get minDate() {
|
|
1615
1737
|
return this._minDate;
|
|
@@ -1617,6 +1739,7 @@ class MatYearView {
|
|
|
1617
1739
|
set minDate(value) {
|
|
1618
1740
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1619
1741
|
}
|
|
1742
|
+
_minDate;
|
|
1620
1743
|
/** The maximum selectable date. */
|
|
1621
1744
|
get maxDate() {
|
|
1622
1745
|
return this._maxDate;
|
|
@@ -1624,18 +1747,31 @@ class MatYearView {
|
|
|
1624
1747
|
set maxDate(value) {
|
|
1625
1748
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1626
1749
|
}
|
|
1750
|
+
_maxDate;
|
|
1751
|
+
/** A function used to filter which dates are selectable. */
|
|
1752
|
+
dateFilter;
|
|
1753
|
+
/** Function that can be used to add custom CSS classes to date cells. */
|
|
1754
|
+
dateClass;
|
|
1755
|
+
/** Emits when a new month is selected. */
|
|
1756
|
+
selectedChange = new EventEmitter();
|
|
1757
|
+
/** Emits the selected month. This doesn't imply a change on the selected date */
|
|
1758
|
+
monthSelected = new EventEmitter();
|
|
1759
|
+
/** Emits when any date is activated. */
|
|
1760
|
+
activeDateChange = new EventEmitter();
|
|
1761
|
+
/** The body of calendar table */
|
|
1762
|
+
_matCalendarBody;
|
|
1763
|
+
/** Grid of calendar cells representing the months of the year. */
|
|
1764
|
+
_months;
|
|
1765
|
+
/** The label for this year (e.g. "2017"). */
|
|
1766
|
+
_yearLabel;
|
|
1767
|
+
/** The month in this year that today falls on. Null if today is in a different year. */
|
|
1768
|
+
_todayMonth;
|
|
1769
|
+
/**
|
|
1770
|
+
* The month in this year that the selected Date falls on.
|
|
1771
|
+
* Null if the selected Date is in a different year.
|
|
1772
|
+
*/
|
|
1773
|
+
_selectedMonth;
|
|
1627
1774
|
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
1775
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
1640
1776
|
if (!this._dateAdapter) {
|
|
1641
1777
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -1846,10 +1982,10 @@ class MatYearView {
|
|
|
1846
1982
|
this._selectedMonth = this._getMonthInCurrentYear(value);
|
|
1847
1983
|
}
|
|
1848
1984
|
}
|
|
1849
|
-
static
|
|
1850
|
-
static
|
|
1985
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatYearView, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1986
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
1987
|
}
|
|
1852
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
1988
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatYearView, decorators: [{
|
|
1853
1989
|
type: Component,
|
|
1854
1990
|
args: [{ selector: 'mat-year-view', exportAs: 'matYearView', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatCalendarBody], template: "<table class=\"mat-calendar-table\" role=\"grid\">\n <thead aria-hidden=\"true\" class=\"mat-calendar-table-header\">\n <tr><th class=\"mat-calendar-table-header-divider\" colspan=\"4\"></th></tr>\n </thead>\n <tbody mat-calendar-body\n [label]=\"_yearLabel\"\n [rows]=\"_months\"\n [todayValue]=\"_todayMonth!\"\n [startValue]=\"_selectedMonth!\"\n [endValue]=\"_selectedMonth!\"\n [labelMinRequiredCells]=\"2\"\n [numCols]=\"4\"\n [cellAspectRatio]=\"4 / 7\"\n [activeCell]=\"_dateAdapter.getMonth(activeDate)\"\n (selectedValueChange)=\"_monthSelected($event)\"\n (activeDateChange)=\"_updateActiveDate($event)\"\n (keyup)=\"_handleCalendarBodyKeyup($event)\"\n (keydown)=\"_handleCalendarBodyKeydown($event)\">\n </tbody>\n</table>\n" }]
|
|
1855
1991
|
}], ctorParameters: () => [], propDecorators: { activeDate: [{
|
|
@@ -1875,16 +2011,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
1875
2011
|
args: [MatCalendarBody]
|
|
1876
2012
|
}] } });
|
|
1877
2013
|
|
|
1878
|
-
let calendarHeaderId = 1;
|
|
1879
2014
|
/** Default header for MatCalendar */
|
|
1880
2015
|
class MatCalendarHeader {
|
|
2016
|
+
_intl = inject(MatDatepickerIntl);
|
|
2017
|
+
calendar = inject(MatCalendar);
|
|
2018
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
2019
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
1881
2020
|
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`;
|
|
2021
|
+
inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
|
|
1888
2022
|
const changeDetectorRef = inject(ChangeDetectorRef);
|
|
1889
2023
|
this.calendar.stateChanges.subscribe(() => changeDetectorRef.markForCheck());
|
|
1890
2024
|
}
|
|
@@ -1994,15 +2128,30 @@ class MatCalendarHeader {
|
|
|
1994
2128
|
const maxYearLabel = this._dateAdapter.getYearName(this._dateAdapter.createDate(maxYearOfPage, 0, 1));
|
|
1995
2129
|
return [minYearLabel, maxYearLabel];
|
|
1996
2130
|
}
|
|
1997
|
-
|
|
1998
|
-
static
|
|
2131
|
+
_periodButtonLabelId = inject(_IdGenerator).getId('mat-calendar-period-label-');
|
|
2132
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatCalendarHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2133
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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 <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n </svg>\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 <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\n </svg>\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
2134
|
}
|
|
2000
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
2135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatCalendarHeader, decorators: [{
|
|
2001
2136
|
type: Component,
|
|
2002
|
-
args: [{ selector: 'mat-calendar-header', exportAs: 'matCalendarHeader', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatButton, MatIconButton], template: "<div class=\"mat-calendar-header\">\n <div class=\"mat-calendar-controls\">\n <!-- [Firefox Issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1880533]\n Relocated label next to related button and made visually hidden via cdk-visually-hidden\n to enable label to appear in a11y tree for SR when using Firefox -->\n <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\n <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n [attr.aria-describedby]=\"_periodButtonLabelId\">\n <span aria-hidden=\"true\">{{periodButtonText}}</span>\n <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\n <polygon points=\"0,0 5,5 10,0\"/>\n </svg>\n </button>\n\n <div class=\"mat-calendar-spacer\"></div>\n\n <ng-content></ng-content>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n [attr.aria-label]=\"prevButtonLabel\">\n </button>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-next-button\"\n [disabled]=\"!nextEnabled()\" (click)=\"nextClicked()\"\n [attr.aria-label]=\"nextButtonLabel\">\n </button>\n </div>\n</div>\n" }]
|
|
2137
|
+
args: [{ selector: 'mat-calendar-header', exportAs: 'matCalendarHeader', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatButton, MatIconButton], template: "<div class=\"mat-calendar-header\">\n <div class=\"mat-calendar-controls\">\n <!-- [Firefox Issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1880533]\n Relocated label next to related button and made visually hidden via cdk-visually-hidden\n to enable label to appear in a11y tree for SR when using Firefox -->\n <span [id]=\"_periodButtonLabelId\" class=\"cdk-visually-hidden\" aria-live=\"polite\">{{periodButtonDescription}}</span>\n <button mat-button type=\"button\" class=\"mat-calendar-period-button\"\n (click)=\"currentPeriodClicked()\" [attr.aria-label]=\"periodButtonLabel\"\n [attr.aria-describedby]=\"_periodButtonLabelId\">\n <span aria-hidden=\"true\">{{periodButtonText}}</span>\n <svg class=\"mat-calendar-arrow\" [class.mat-calendar-invert]=\"calendar.currentView !== 'month'\"\n viewBox=\"0 0 10 5\" focusable=\"false\" aria-hidden=\"true\">\n <polygon points=\"0,0 5,5 10,0\"/>\n </svg>\n </button>\n\n <div class=\"mat-calendar-spacer\"></div>\n\n <ng-content></ng-content>\n\n <button mat-icon-button type=\"button\" class=\"mat-calendar-previous-button\"\n [disabled]=\"!previousEnabled()\" (click)=\"previousClicked()\"\n [attr.aria-label]=\"prevButtonLabel\">\n <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/>\n </svg>\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 <svg viewBox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/>\n </svg>\n </button>\n </div>\n</div>\n" }]
|
|
2003
2138
|
}], ctorParameters: () => [] });
|
|
2004
2139
|
/** A calendar that is used as part of the datepicker. */
|
|
2005
2140
|
class MatCalendar {
|
|
2141
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
2142
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
2143
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
2144
|
+
/** An input indicating the type of the header component, if set. */
|
|
2145
|
+
headerComponent;
|
|
2146
|
+
/** A portal containing the header component type for this calendar. */
|
|
2147
|
+
_calendarHeaderPortal;
|
|
2148
|
+
_intlChanges;
|
|
2149
|
+
/**
|
|
2150
|
+
* Used for scheduling that focus should be moved to the active cell on the next tick.
|
|
2151
|
+
* We need to schedule it, rather than do it immediately, because we have to wait
|
|
2152
|
+
* for Angular to re-evaluate the view children.
|
|
2153
|
+
*/
|
|
2154
|
+
_moveFocusOnNextTick = false;
|
|
2006
2155
|
/** A date representing the period (month or year) to start the calendar in. */
|
|
2007
2156
|
get startAt() {
|
|
2008
2157
|
return this._startAt;
|
|
@@ -2010,6 +2159,9 @@ class MatCalendar {
|
|
|
2010
2159
|
set startAt(value) {
|
|
2011
2160
|
this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2012
2161
|
}
|
|
2162
|
+
_startAt;
|
|
2163
|
+
/** Whether the calendar should be started in month or year view. */
|
|
2164
|
+
startView = 'month';
|
|
2013
2165
|
/** The currently selected date. */
|
|
2014
2166
|
get selected() {
|
|
2015
2167
|
return this._selected;
|
|
@@ -2022,6 +2174,7 @@ class MatCalendar {
|
|
|
2022
2174
|
this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2023
2175
|
}
|
|
2024
2176
|
}
|
|
2177
|
+
_selected;
|
|
2025
2178
|
/** The minimum selectable date. */
|
|
2026
2179
|
get minDate() {
|
|
2027
2180
|
return this._minDate;
|
|
@@ -2029,6 +2182,7 @@ class MatCalendar {
|
|
|
2029
2182
|
set minDate(value) {
|
|
2030
2183
|
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2031
2184
|
}
|
|
2185
|
+
_minDate;
|
|
2032
2186
|
/** The maximum selectable date. */
|
|
2033
2187
|
get maxDate() {
|
|
2034
2188
|
return this._maxDate;
|
|
@@ -2036,6 +2190,45 @@ class MatCalendar {
|
|
|
2036
2190
|
set maxDate(value) {
|
|
2037
2191
|
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2038
2192
|
}
|
|
2193
|
+
_maxDate;
|
|
2194
|
+
/** Function used to filter which dates are selectable. */
|
|
2195
|
+
dateFilter;
|
|
2196
|
+
/** Function that can be used to add custom CSS classes to dates. */
|
|
2197
|
+
dateClass;
|
|
2198
|
+
/** Start of the comparison range. */
|
|
2199
|
+
comparisonStart;
|
|
2200
|
+
/** End of the comparison range. */
|
|
2201
|
+
comparisonEnd;
|
|
2202
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
2203
|
+
startDateAccessibleName;
|
|
2204
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
2205
|
+
endDateAccessibleName;
|
|
2206
|
+
/** Emits when the currently selected date changes. */
|
|
2207
|
+
selectedChange = new EventEmitter();
|
|
2208
|
+
/**
|
|
2209
|
+
* Emits the year chosen in multiyear view.
|
|
2210
|
+
* This doesn't imply a change on the selected date.
|
|
2211
|
+
*/
|
|
2212
|
+
yearSelected = new EventEmitter();
|
|
2213
|
+
/**
|
|
2214
|
+
* Emits the month chosen in year view.
|
|
2215
|
+
* This doesn't imply a change on the selected date.
|
|
2216
|
+
*/
|
|
2217
|
+
monthSelected = new EventEmitter();
|
|
2218
|
+
/**
|
|
2219
|
+
* Emits when the current view changes.
|
|
2220
|
+
*/
|
|
2221
|
+
viewChanged = new EventEmitter(true);
|
|
2222
|
+
/** Emits when any date is selected. */
|
|
2223
|
+
_userSelection = new EventEmitter();
|
|
2224
|
+
/** Emits a new date range value when the user completes a drag drop operation. */
|
|
2225
|
+
_userDragDrop = new EventEmitter();
|
|
2226
|
+
/** Reference to the current month view component. */
|
|
2227
|
+
monthView;
|
|
2228
|
+
/** Reference to the current year view component. */
|
|
2229
|
+
yearView;
|
|
2230
|
+
/** Reference to the current multi-year view component. */
|
|
2231
|
+
multiYearView;
|
|
2039
2232
|
/**
|
|
2040
2233
|
* The current active date. This determines which time period is shown and which date is
|
|
2041
2234
|
* highlighted when using keyboard navigation.
|
|
@@ -2048,6 +2241,7 @@ class MatCalendar {
|
|
|
2048
2241
|
this.stateChanges.next();
|
|
2049
2242
|
this._changeDetectorRef.markForCheck();
|
|
2050
2243
|
}
|
|
2244
|
+
_clampedActiveDate;
|
|
2051
2245
|
/** Whether the calendar is in month view. */
|
|
2052
2246
|
get currentView() {
|
|
2053
2247
|
return this._currentView;
|
|
@@ -2061,44 +2255,14 @@ class MatCalendar {
|
|
|
2061
2255
|
this.viewChanged.emit(viewChangedResult);
|
|
2062
2256
|
}
|
|
2063
2257
|
}
|
|
2258
|
+
_currentView;
|
|
2259
|
+
/** Origin of active drag, or null when dragging is not active. */
|
|
2260
|
+
_activeDrag = null;
|
|
2261
|
+
/**
|
|
2262
|
+
* Emits whenever there is a state change that the header may need to respond to.
|
|
2263
|
+
*/
|
|
2264
|
+
stateChanges = new Subject();
|
|
2064
2265
|
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
2266
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2103
2267
|
if (!this._dateAdapter) {
|
|
2104
2268
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -2208,14 +2372,14 @@ class MatCalendar {
|
|
|
2208
2372
|
// only the first component type. See https://github.com/angular/components/issues/22996.
|
|
2209
2373
|
return this.monthView || this.yearView || this.multiYearView;
|
|
2210
2374
|
}
|
|
2211
|
-
static
|
|
2212
|
-
static
|
|
2375
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2376
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-rc.0", 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-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))}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.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
2377
|
}
|
|
2214
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
2378
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatCalendar, decorators: [{
|
|
2215
2379
|
type: Component,
|
|
2216
2380
|
args: [{ selector: 'mat-calendar', host: {
|
|
2217
2381
|
'class': 'mat-calendar',
|
|
2218
|
-
}, exportAs: 'matCalendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], imports: [CdkPortalOutlet, CdkMonitorFocus, MatMonthView, MatYearView, MatMultiYearView], template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mat-month-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (_userSelection)=\"_dateSelected($event)\"\n (dragStarted)=\"_dragStarted($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n [activeDrag]=\"_activeDrag\"></mat-month-view>\n }\n\n @case ('year') {\n <mat-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\"></mat-year-view>\n }\n\n @case ('multi-year') {\n <mat-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\"></mat-multi-year-view>\n }\n }\n</div>\n", styles: [".mat-calendar{display:block;line-height:normal;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size))}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-period-button-text-weight, var(--mat-sys-title-small-weight));--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}@media(forced-colors: active){.mat-calendar-arrow{fill:CanvasText}}.mat-
|
|
2382
|
+
}, exportAs: 'matCalendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER], imports: [CdkPortalOutlet, CdkMonitorFocus, MatMonthView, MatYearView, MatMultiYearView], template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n @switch (currentView) {\n @case ('month') {\n <mat-month-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\"\n (_userSelection)=\"_dateSelected($event)\"\n (dragStarted)=\"_dragStarted($event)\"\n (dragEnded)=\"_dragEnded($event)\"\n [activeDrag]=\"_activeDrag\"></mat-month-view>\n }\n\n @case ('year') {\n <mat-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\"></mat-year-view>\n }\n\n @case ('multi-year') {\n <mat-multi-year-view\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n [dateClass]=\"dateClass\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\"></mat-multi-year-view>\n }\n }\n</div>\n", styles: [".mat-calendar{display:block;line-height:normal;font-family:var(--mat-datepicker-calendar-text-font, var(--mat-sys-body-medium-font));font-size:var(--mat-datepicker-calendar-text-size, var(--mat-sys-body-medium-size))}.mat-calendar-header{padding:8px 8px 0 8px}.mat-calendar-content{padding:0 8px 8px 8px;outline:none}.mat-calendar-controls{display:flex;align-items:center;margin:5% calc(4.7142857143% - 16px)}.mat-calendar-spacer{flex:1 1 auto}.mat-calendar-period-button{min-width:0;margin:0 8px;font-size:var(--mat-datepicker-calendar-period-button-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-period-button-text-weight, var(--mat-sys-title-small-weight));--mdc-text-button-label-text-color:var(--mat-datepicker-calendar-period-button-text-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow{display:inline-block;width:10px;height:5px;margin:0 0 0 5px;vertical-align:middle;fill:var(--mat-datepicker-calendar-period-button-icon-color, var(--mat-sys-on-surface-variant))}.mat-calendar-arrow.mat-calendar-invert{transform:rotate(180deg)}[dir=rtl] .mat-calendar-arrow{margin:0 5px 0 0}@media(forced-colors: active){.mat-calendar-arrow{fill:CanvasText}}.mat-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))}[dir=rtl] .mat-calendar-previous-button,[dir=rtl] .mat-calendar-next-button{transform:rotate(180deg)}.mat-calendar-table{border-spacing:0;border-collapse:collapse;width:100%}.mat-calendar-table-header th{text-align:center;padding:0 0 8px 0;color:var(--mat-datepicker-calendar-header-text-color, var(--mat-sys-on-surface-variant));font-size:var(--mat-datepicker-calendar-header-text-size, var(--mat-sys-title-small-size));font-weight:var(--mat-datepicker-calendar-header-text-weight, var(--mat-sys-title-small-weight))}.mat-calendar-table-header-divider{position:relative;height:1px}.mat-calendar-table-header-divider::after{content:\"\";position:absolute;top:0;left:-8px;right:-8px;height:1px;background:var(--mat-datepicker-calendar-header-divider-color, transparent)}.mat-calendar-body-cell-content::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 3px)*-1)}.mat-calendar-body-cell:focus .mat-focus-indicator::before{content:\"\"}"] }]
|
|
2219
2383
|
}], ctorParameters: () => [], propDecorators: { headerComponent: [{
|
|
2220
2384
|
type: Input
|
|
2221
2385
|
}], startAt: [{
|
|
@@ -2290,8 +2454,6 @@ const matDatepickerAnimations = {
|
|
|
2290
2454
|
]),
|
|
2291
2455
|
};
|
|
2292
2456
|
|
|
2293
|
-
/** Used to generate a unique ID for each datepicker instance. */
|
|
2294
|
-
let datepickerUid = 0;
|
|
2295
2457
|
/** Injection token that determines the scroll handling while the calendar is open. */
|
|
2296
2458
|
const MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken('mat-datepicker-scroll-strategy', {
|
|
2297
2459
|
providedIn: 'root',
|
|
@@ -2318,19 +2480,51 @@ const MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {
|
|
|
2318
2480
|
* @docs-private
|
|
2319
2481
|
*/
|
|
2320
2482
|
class MatDatepickerContent {
|
|
2483
|
+
_elementRef = inject(ElementRef);
|
|
2484
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
2485
|
+
_globalModel = inject(MatDateSelectionModel);
|
|
2486
|
+
_dateAdapter = inject(DateAdapter);
|
|
2487
|
+
_rangeSelectionStrategy = inject(MAT_DATE_RANGE_SELECTION_STRATEGY, { optional: true });
|
|
2488
|
+
_subscriptions = new Subscription();
|
|
2489
|
+
_model;
|
|
2490
|
+
/** Reference to the internal calendar component. */
|
|
2491
|
+
_calendar;
|
|
2492
|
+
/**
|
|
2493
|
+
* Theme color of the internal calendar. This API is supported in M2 themes
|
|
2494
|
+
* only, it has no effect in M3 themes.
|
|
2495
|
+
*
|
|
2496
|
+
* For information on applying color variants in M3, see
|
|
2497
|
+
* https://material.angular.io/guide/theming#using-component-color-variants.
|
|
2498
|
+
*/
|
|
2499
|
+
color;
|
|
2500
|
+
/** Reference to the datepicker that created the overlay. */
|
|
2501
|
+
datepicker;
|
|
2502
|
+
/** Start of the comparison range. */
|
|
2503
|
+
comparisonStart;
|
|
2504
|
+
/** End of the comparison range. */
|
|
2505
|
+
comparisonEnd;
|
|
2506
|
+
/** ARIA Accessible name of the `<input matStartDate/>` */
|
|
2507
|
+
startDateAccessibleName;
|
|
2508
|
+
/** ARIA Accessible name of the `<input matEndDate/>` */
|
|
2509
|
+
endDateAccessibleName;
|
|
2510
|
+
/** Whether the datepicker is above or below the input. */
|
|
2511
|
+
_isAbove;
|
|
2512
|
+
/** Current state of the animation. */
|
|
2513
|
+
_animationState;
|
|
2514
|
+
/** Emits when an animation has finished. */
|
|
2515
|
+
_animationDone = new Subject();
|
|
2516
|
+
/** Whether there is an in-progress animation. */
|
|
2517
|
+
_isAnimating = false;
|
|
2518
|
+
/** Text for the close button. */
|
|
2519
|
+
_closeButtonText;
|
|
2520
|
+
/** Whether the close button currently has focus. */
|
|
2521
|
+
_closeButtonFocused;
|
|
2522
|
+
/** Portal with projected action buttons. */
|
|
2523
|
+
_actionsPortal = null;
|
|
2524
|
+
/** Id of the label for the `role="dialog"` element. */
|
|
2525
|
+
_dialogLabelId;
|
|
2321
2526
|
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;
|
|
2527
|
+
inject(_CdkPrivateStyleLoader).load(_VisuallyHiddenLoader);
|
|
2334
2528
|
const intl = inject(MatDatepickerIntl);
|
|
2335
2529
|
this._closeButtonText = intl.closeCalendarLabel;
|
|
2336
2530
|
}
|
|
@@ -2408,10 +2602,10 @@ class MatDatepickerContent {
|
|
|
2408
2602
|
this._changeDetectorRef.detectChanges();
|
|
2409
2603
|
}
|
|
2410
2604
|
}
|
|
2411
|
-
static
|
|
2412
|
-
static
|
|
2605
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2606
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
2607
|
}
|
|
2414
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
2608
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerContent, decorators: [{
|
|
2415
2609
|
type: Component,
|
|
2416
2610
|
args: [{ selector: 'mat-datepicker-content', host: {
|
|
2417
2611
|
'class': 'mat-datepicker-content',
|
|
@@ -2429,6 +2623,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
2429
2623
|
}] } });
|
|
2430
2624
|
/** Base class for a datepicker. */
|
|
2431
2625
|
class MatDatepickerBase {
|
|
2626
|
+
_overlay = inject(Overlay);
|
|
2627
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
2628
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
2629
|
+
_dir = inject(Directionality, { optional: true });
|
|
2630
|
+
_model = inject(MatDateSelectionModel);
|
|
2631
|
+
_scrollStrategy = inject(MAT_DATEPICKER_SCROLL_STRATEGY);
|
|
2632
|
+
_inputStateChanges = Subscription.EMPTY;
|
|
2633
|
+
_document = inject(DOCUMENT);
|
|
2634
|
+
/** An input indicating the type of the custom header component for the calendar, if set. */
|
|
2635
|
+
calendarHeaderComponent;
|
|
2432
2636
|
/** The date to open the calendar to initially. */
|
|
2433
2637
|
get startAt() {
|
|
2434
2638
|
// If an explicit startAt is set we start there, otherwise we start at whatever the currently
|
|
@@ -2438,6 +2642,9 @@ class MatDatepickerBase {
|
|
|
2438
2642
|
set startAt(value) {
|
|
2439
2643
|
this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2440
2644
|
}
|
|
2645
|
+
_startAt;
|
|
2646
|
+
/** The view that the calendar should start in. */
|
|
2647
|
+
startView = 'month';
|
|
2441
2648
|
/**
|
|
2442
2649
|
* Theme color of the datepicker's calendar. This API is supported in M2 themes only, it
|
|
2443
2650
|
* has no effect in M3 themes.
|
|
@@ -2451,6 +2658,12 @@ class MatDatepickerBase {
|
|
|
2451
2658
|
set color(value) {
|
|
2452
2659
|
this._color = value;
|
|
2453
2660
|
}
|
|
2661
|
+
_color;
|
|
2662
|
+
/**
|
|
2663
|
+
* Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather
|
|
2664
|
+
* than a dropdown and elements have more padding to allow for bigger touch targets.
|
|
2665
|
+
*/
|
|
2666
|
+
touchUi = false;
|
|
2454
2667
|
/** Whether the datepicker pop-up should be disabled. */
|
|
2455
2668
|
get disabled() {
|
|
2456
2669
|
return this._disabled === undefined && this.datepickerInput
|
|
@@ -2463,6 +2676,37 @@ class MatDatepickerBase {
|
|
|
2463
2676
|
this.stateChanges.next(undefined);
|
|
2464
2677
|
}
|
|
2465
2678
|
}
|
|
2679
|
+
_disabled;
|
|
2680
|
+
/** Preferred position of the datepicker in the X axis. */
|
|
2681
|
+
xPosition = 'start';
|
|
2682
|
+
/** Preferred position of the datepicker in the Y axis. */
|
|
2683
|
+
yPosition = 'below';
|
|
2684
|
+
/**
|
|
2685
|
+
* Whether to restore focus to the previously-focused element when the calendar is closed.
|
|
2686
|
+
* Note that automatic focus restoration is an accessibility feature and it is recommended that
|
|
2687
|
+
* you provide your own equivalent, if you decide to turn it off.
|
|
2688
|
+
*/
|
|
2689
|
+
restoreFocus = true;
|
|
2690
|
+
/**
|
|
2691
|
+
* Emits selected year in multiyear view.
|
|
2692
|
+
* This doesn't imply a change on the selected date.
|
|
2693
|
+
*/
|
|
2694
|
+
yearSelected = new EventEmitter();
|
|
2695
|
+
/**
|
|
2696
|
+
* Emits selected month in year view.
|
|
2697
|
+
* This doesn't imply a change on the selected date.
|
|
2698
|
+
*/
|
|
2699
|
+
monthSelected = new EventEmitter();
|
|
2700
|
+
/**
|
|
2701
|
+
* Emits when the current view changes.
|
|
2702
|
+
*/
|
|
2703
|
+
viewChanged = new EventEmitter(true);
|
|
2704
|
+
/** Function that can be used to add custom CSS classes to dates. */
|
|
2705
|
+
dateClass;
|
|
2706
|
+
/** Emits when the datepicker has been opened. */
|
|
2707
|
+
openedStream = new EventEmitter();
|
|
2708
|
+
/** Emits when the datepicker has been closed. */
|
|
2709
|
+
closedStream = new EventEmitter();
|
|
2466
2710
|
/** Classes to be passed to the date picker panel. */
|
|
2467
2711
|
get panelClass() {
|
|
2468
2712
|
return this._panelClass;
|
|
@@ -2470,6 +2714,7 @@ class MatDatepickerBase {
|
|
|
2470
2714
|
set panelClass(value) {
|
|
2471
2715
|
this._panelClass = coerceStringArray(value);
|
|
2472
2716
|
}
|
|
2717
|
+
_panelClass;
|
|
2473
2718
|
/** Whether the calendar is open. */
|
|
2474
2719
|
get opened() {
|
|
2475
2720
|
return this._opened;
|
|
@@ -2482,6 +2727,9 @@ class MatDatepickerBase {
|
|
|
2482
2727
|
this.close();
|
|
2483
2728
|
}
|
|
2484
2729
|
}
|
|
2730
|
+
_opened = false;
|
|
2731
|
+
/** The id for the datepicker calendar. */
|
|
2732
|
+
id = inject(_IdGenerator).getId('mat-datepicker-');
|
|
2485
2733
|
/** The minimum selectable date. */
|
|
2486
2734
|
_getMinDate() {
|
|
2487
2735
|
return this.datepickerInput && this.datepickerInput.min;
|
|
@@ -2493,61 +2741,23 @@ class MatDatepickerBase {
|
|
|
2493
2741
|
_getDateFilter() {
|
|
2494
2742
|
return this.datepickerInput && this.datepickerInput.dateFilter;
|
|
2495
2743
|
}
|
|
2744
|
+
/** A reference to the overlay into which we've rendered the calendar. */
|
|
2745
|
+
_overlayRef;
|
|
2746
|
+
/** Reference to the component instance rendered in the overlay. */
|
|
2747
|
+
_componentRef;
|
|
2748
|
+
/** The element that was focused before the datepicker was opened. */
|
|
2749
|
+
_focusedElementBeforeOpen = null;
|
|
2750
|
+
/** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
|
|
2751
|
+
_backdropHarnessClass = `${this.id}-backdrop`;
|
|
2752
|
+
/** Currently-registered actions portal. */
|
|
2753
|
+
_actionsPortal;
|
|
2754
|
+
/** The input element this datepicker is associated with. */
|
|
2755
|
+
datepickerInput;
|
|
2756
|
+
/** Emits when the datepicker's state changes. */
|
|
2757
|
+
stateChanges = new Subject();
|
|
2758
|
+
_injector = inject(Injector);
|
|
2759
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
2496
2760
|
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
2761
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
2552
2762
|
throw createMissingDateImplError('DateAdapter');
|
|
2553
2763
|
}
|
|
@@ -2811,10 +3021,10 @@ class MatDatepickerBase {
|
|
|
2811
3021
|
ctrlShiftMetaModifiers.every((modifier) => !hasModifierKey(event, modifier))));
|
|
2812
3022
|
})));
|
|
2813
3023
|
}
|
|
2814
|
-
static
|
|
2815
|
-
static
|
|
3024
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3025
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-rc.0", 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
3026
|
}
|
|
2817
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3027
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerBase, decorators: [{
|
|
2818
3028
|
type: Directive
|
|
2819
3029
|
}], ctorParameters: () => [], propDecorators: { calendarHeaderComponent: [{
|
|
2820
3030
|
type: Input
|
|
@@ -2863,13 +3073,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
2863
3073
|
// if angular adds support for `exportAs: '$implicit'` on directives.
|
|
2864
3074
|
/** Component responsible for managing the datepicker popup/dialog. */
|
|
2865
3075
|
class MatDatepicker extends MatDatepickerBase {
|
|
2866
|
-
static
|
|
2867
|
-
static
|
|
3076
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
3077
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", type: MatDatepicker, isStandalone: true, selector: "mat-datepicker", providers: [
|
|
2868
3078
|
MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER,
|
|
2869
3079
|
{ provide: MatDatepickerBase, useExisting: MatDatepicker },
|
|
2870
|
-
], exportAs: ["matDatepicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3080
|
+
], exportAs: ["matDatepicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2871
3081
|
}
|
|
2872
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3082
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepicker, decorators: [{
|
|
2873
3083
|
type: Component,
|
|
2874
3084
|
args: [{
|
|
2875
3085
|
selector: 'mat-datepicker',
|
|
@@ -2890,6 +3100,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
2890
3100
|
* calendar popup. For consistency, we always use MatDatepickerInputEvent instead.
|
|
2891
3101
|
*/
|
|
2892
3102
|
class MatDatepickerInputEvent {
|
|
3103
|
+
target;
|
|
3104
|
+
targetElement;
|
|
3105
|
+
/** The new value for the target datepicker input. */
|
|
3106
|
+
value;
|
|
2893
3107
|
constructor(
|
|
2894
3108
|
/** Reference to the datepicker input component that emitted the event. */
|
|
2895
3109
|
target,
|
|
@@ -2902,6 +3116,11 @@ class MatDatepickerInputEvent {
|
|
|
2902
3116
|
}
|
|
2903
3117
|
/** Base class for datepicker inputs. */
|
|
2904
3118
|
class MatDatepickerInputBase {
|
|
3119
|
+
_elementRef = inject(ElementRef);
|
|
3120
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
3121
|
+
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
3122
|
+
/** Whether the component has been initialized. */
|
|
3123
|
+
_isInitialized;
|
|
2905
3124
|
/** The value of the input. */
|
|
2906
3125
|
get value() {
|
|
2907
3126
|
return this._model ? this._getValueFromModel(this._model.selection) : this._pendingValue;
|
|
@@ -2909,6 +3128,7 @@ class MatDatepickerInputBase {
|
|
|
2909
3128
|
set value(value) {
|
|
2910
3129
|
this._assignValueProgrammatically(value);
|
|
2911
3130
|
}
|
|
3131
|
+
_model;
|
|
2912
3132
|
/** Whether the datepicker-input is disabled. */
|
|
2913
3133
|
get disabled() {
|
|
2914
3134
|
return !!this._disabled || this._parentDisabled();
|
|
@@ -2931,6 +3151,53 @@ class MatDatepickerInputBase {
|
|
|
2931
3151
|
element.blur();
|
|
2932
3152
|
}
|
|
2933
3153
|
}
|
|
3154
|
+
_disabled;
|
|
3155
|
+
/** Emits when a `change` event is fired on this `<input>`. */
|
|
3156
|
+
dateChange = new EventEmitter();
|
|
3157
|
+
/** Emits when an `input` event is fired on this `<input>`. */
|
|
3158
|
+
dateInput = new EventEmitter();
|
|
3159
|
+
/** Emits when the internal state has changed */
|
|
3160
|
+
stateChanges = new Subject();
|
|
3161
|
+
_onTouched = () => { };
|
|
3162
|
+
_validatorOnChange = () => { };
|
|
3163
|
+
_cvaOnChange = () => { };
|
|
3164
|
+
_valueChangesSubscription = Subscription.EMPTY;
|
|
3165
|
+
_localeSubscription = Subscription.EMPTY;
|
|
3166
|
+
/**
|
|
3167
|
+
* Since the value is kept on the model which is assigned in an Input,
|
|
3168
|
+
* we might get a value before we have a model. This property keeps track
|
|
3169
|
+
* of the value until we have somewhere to assign it.
|
|
3170
|
+
*/
|
|
3171
|
+
_pendingValue;
|
|
3172
|
+
/** The form control validator for whether the input parses. */
|
|
3173
|
+
_parseValidator = () => {
|
|
3174
|
+
return this._lastValueValid
|
|
3175
|
+
? null
|
|
3176
|
+
: { 'matDatepickerParse': { 'text': this._elementRef.nativeElement.value } };
|
|
3177
|
+
};
|
|
3178
|
+
/** The form control validator for the date filter. */
|
|
3179
|
+
_filterValidator = (control) => {
|
|
3180
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3181
|
+
return !controlValue || this._matchesFilter(controlValue)
|
|
3182
|
+
? null
|
|
3183
|
+
: { 'matDatepickerFilter': true };
|
|
3184
|
+
};
|
|
3185
|
+
/** The form control validator for the min date. */
|
|
3186
|
+
_minValidator = (control) => {
|
|
3187
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3188
|
+
const min = this._getMinDate();
|
|
3189
|
+
return !min || !controlValue || this._dateAdapter.compareDate(min, controlValue) <= 0
|
|
3190
|
+
? null
|
|
3191
|
+
: { 'matDatepickerMin': { 'min': min, 'actual': controlValue } };
|
|
3192
|
+
};
|
|
3193
|
+
/** The form control validator for the max date. */
|
|
3194
|
+
_maxValidator = (control) => {
|
|
3195
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3196
|
+
const max = this._getMaxDate();
|
|
3197
|
+
return !max || !controlValue || this._dateAdapter.compareDate(max, controlValue) >= 0
|
|
3198
|
+
? null
|
|
3199
|
+
: { 'matDatepickerMax': { 'max': max, 'actual': controlValue } };
|
|
3200
|
+
};
|
|
2934
3201
|
/** Gets the base validator functions. */
|
|
2935
3202
|
_getValidators() {
|
|
2936
3203
|
return [this._parseValidator, this._minValidator, this._maxValidator, this._filterValidator];
|
|
@@ -2954,52 +3221,9 @@ class MatDatepickerInputBase {
|
|
|
2954
3221
|
}
|
|
2955
3222
|
});
|
|
2956
3223
|
}
|
|
3224
|
+
/** Whether the last value set on the input was valid. */
|
|
3225
|
+
_lastValueValid = false;
|
|
2957
3226
|
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
3227
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
3004
3228
|
if (!this._dateAdapter) {
|
|
3005
3229
|
throw createMissingDateImplError('DateAdapter');
|
|
@@ -3138,10 +3362,10 @@ class MatDatepickerInputBase {
|
|
|
3138
3362
|
const filter = this._getDateFilter();
|
|
3139
3363
|
return !filter || filter(value);
|
|
3140
3364
|
}
|
|
3141
|
-
static
|
|
3142
|
-
static
|
|
3365
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerInputBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3366
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.0.0-rc.0", type: MatDatepickerInputBase, isStandalone: true, inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { dateChange: "dateChange", dateInput: "dateInput" }, usesOnChanges: true, ngImport: i0 });
|
|
3143
3367
|
}
|
|
3144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerInputBase, decorators: [{
|
|
3145
3369
|
type: Directive
|
|
3146
3370
|
}], ctorParameters: () => [], propDecorators: { value: [{
|
|
3147
3371
|
type: Input
|
|
@@ -3187,6 +3411,9 @@ const MAT_DATEPICKER_VALIDATORS = {
|
|
|
3187
3411
|
};
|
|
3188
3412
|
/** Directive used to connect an input to a MatDatepicker. */
|
|
3189
3413
|
class MatDatepickerInput extends MatDatepickerInputBase {
|
|
3414
|
+
_formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
3415
|
+
_closedSubscription = Subscription.EMPTY;
|
|
3416
|
+
_openedSubscription = Subscription.EMPTY;
|
|
3190
3417
|
/** The datepicker that this input is associated with. */
|
|
3191
3418
|
set matDatepicker(datepicker) {
|
|
3192
3419
|
if (datepicker) {
|
|
@@ -3202,6 +3429,9 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3202
3429
|
this._registerModel(datepicker.registerInput(this));
|
|
3203
3430
|
}
|
|
3204
3431
|
}
|
|
3432
|
+
_datepicker;
|
|
3433
|
+
/** The id of the panel owned by this input. */
|
|
3434
|
+
_ariaOwns = signal(null);
|
|
3205
3435
|
/** The minimum valid date. */
|
|
3206
3436
|
get min() {
|
|
3207
3437
|
return this._min;
|
|
@@ -3213,6 +3443,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3213
3443
|
this._validatorOnChange();
|
|
3214
3444
|
}
|
|
3215
3445
|
}
|
|
3446
|
+
_min;
|
|
3216
3447
|
/** The maximum valid date. */
|
|
3217
3448
|
get max() {
|
|
3218
3449
|
return this._max;
|
|
@@ -3224,6 +3455,7 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3224
3455
|
this._validatorOnChange();
|
|
3225
3456
|
}
|
|
3226
3457
|
}
|
|
3458
|
+
_max;
|
|
3227
3459
|
/** Function that can be used to filter out dates within the datepicker. */
|
|
3228
3460
|
get dateFilter() {
|
|
3229
3461
|
return this._dateFilter;
|
|
@@ -3235,13 +3467,11 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3235
3467
|
this._validatorOnChange();
|
|
3236
3468
|
}
|
|
3237
3469
|
}
|
|
3470
|
+
_dateFilter;
|
|
3471
|
+
/** The combined form control validator for this input. */
|
|
3472
|
+
_validator;
|
|
3238
3473
|
constructor() {
|
|
3239
3474
|
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
3475
|
this._validator = Validators.compose(super._getValidators());
|
|
3246
3476
|
}
|
|
3247
3477
|
/**
|
|
@@ -3300,14 +3530,14 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
3300
3530
|
_shouldHandleChangeEvent(event) {
|
|
3301
3531
|
return event.source !== this;
|
|
3302
3532
|
}
|
|
3303
|
-
static
|
|
3304
|
-
static
|
|
3533
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3534
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
3535
|
MAT_DATEPICKER_VALUE_ACCESSOR,
|
|
3306
3536
|
MAT_DATEPICKER_VALIDATORS,
|
|
3307
3537
|
{ provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
|
|
3308
|
-
], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
|
|
3538
|
+
], exportAs: ["matDatepickerInput"], usesInheritance: true, ngImport: i0 });
|
|
3309
3539
|
}
|
|
3310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerInput, decorators: [{
|
|
3311
3541
|
type: Directive,
|
|
3312
3542
|
args: [{
|
|
3313
3543
|
selector: 'input[matDatepicker]',
|
|
@@ -3346,16 +3576,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3346
3576
|
|
|
3347
3577
|
/** Can be used to override the icon of a `matDatepickerToggle`. */
|
|
3348
3578
|
class MatDatepickerToggleIcon {
|
|
3349
|
-
static
|
|
3350
|
-
static
|
|
3579
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerToggleIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3580
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", type: MatDatepickerToggleIcon, isStandalone: true, selector: "[matDatepickerToggleIcon]", ngImport: i0 });
|
|
3351
3581
|
}
|
|
3352
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerToggleIcon, decorators: [{
|
|
3353
3583
|
type: Directive,
|
|
3354
3584
|
args: [{
|
|
3355
3585
|
selector: '[matDatepickerToggleIcon]',
|
|
3356
3586
|
}]
|
|
3357
3587
|
}] });
|
|
3358
3588
|
class MatDatepickerToggle {
|
|
3589
|
+
_intl = inject(MatDatepickerIntl);
|
|
3590
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
3591
|
+
_stateChanges = Subscription.EMPTY;
|
|
3592
|
+
/** Datepicker instance that the button will toggle. */
|
|
3593
|
+
datepicker;
|
|
3594
|
+
/** Tabindex for the toggle. */
|
|
3595
|
+
tabIndex;
|
|
3596
|
+
/** Screen-reader label for the button. */
|
|
3597
|
+
ariaLabel;
|
|
3359
3598
|
/** Whether the toggle button is disabled. */
|
|
3360
3599
|
get disabled() {
|
|
3361
3600
|
if (this._disabled === undefined && this.datepicker) {
|
|
@@ -3366,10 +3605,14 @@ class MatDatepickerToggle {
|
|
|
3366
3605
|
set disabled(value) {
|
|
3367
3606
|
this._disabled = value;
|
|
3368
3607
|
}
|
|
3608
|
+
_disabled;
|
|
3609
|
+
/** Whether ripples on the toggle should be disabled. */
|
|
3610
|
+
disableRipple;
|
|
3611
|
+
/** Custom icon set by the consumer. */
|
|
3612
|
+
_customIcon;
|
|
3613
|
+
/** Underlying button element. */
|
|
3614
|
+
_button;
|
|
3369
3615
|
constructor() {
|
|
3370
|
-
this._intl = inject(MatDatepickerIntl);
|
|
3371
|
-
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
3372
|
-
this._stateChanges = Subscription.EMPTY;
|
|
3373
3616
|
const defaultTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });
|
|
3374
3617
|
const parsedTabIndex = Number(defaultTabIndex);
|
|
3375
3618
|
this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;
|
|
@@ -3402,10 +3645,10 @@ class MatDatepickerToggle {
|
|
|
3402
3645
|
this._stateChanges.unsubscribe();
|
|
3403
3646
|
this._stateChanges = merge(this._intl.changes, datepickerStateChanged, inputStateChanged, datepickerToggled).subscribe(() => this._changeDetectorRef.markForCheck());
|
|
3404
3647
|
}
|
|
3405
|
-
static
|
|
3406
|
-
static
|
|
3648
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3649
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.0-rc.0", 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
3650
|
}
|
|
3408
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3651
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerToggle, decorators: [{
|
|
3409
3652
|
type: Component,
|
|
3410
3653
|
args: [{ selector: 'mat-datepicker-toggle', host: {
|
|
3411
3654
|
'class': 'mat-datepicker-toggle',
|
|
@@ -3602,6 +3845,19 @@ const MAT_DATE_RANGE_INPUT_PARENT = new InjectionToken('MAT_DATE_RANGE_INPUT_PAR
|
|
|
3602
3845
|
* Base class for the individual inputs that can be projected inside a `mat-date-range-input`.
|
|
3603
3846
|
*/
|
|
3604
3847
|
class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
3848
|
+
_rangeInput = inject(MAT_DATE_RANGE_INPUT_PARENT);
|
|
3849
|
+
_elementRef = inject(ElementRef);
|
|
3850
|
+
_defaultErrorStateMatcher = inject(ErrorStateMatcher);
|
|
3851
|
+
_injector = inject(Injector);
|
|
3852
|
+
_parentForm = inject(NgForm, { optional: true });
|
|
3853
|
+
_parentFormGroup = inject(FormGroupDirective, { optional: true });
|
|
3854
|
+
/**
|
|
3855
|
+
* Form control bound to this input part.
|
|
3856
|
+
* @docs-private
|
|
3857
|
+
*/
|
|
3858
|
+
ngControl;
|
|
3859
|
+
_dir = inject(Directionality, { optional: true });
|
|
3860
|
+
_errorStateTracker;
|
|
3605
3861
|
/** Object used to control when error messages are shown. */
|
|
3606
3862
|
get errorStateMatcher() {
|
|
3607
3863
|
return this._errorStateTracker.matcher;
|
|
@@ -3618,13 +3874,6 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
|
3618
3874
|
}
|
|
3619
3875
|
constructor() {
|
|
3620
3876
|
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
3877
|
this._errorStateTracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, null, this._parentFormGroup, this._parentForm, this.stateChanges);
|
|
3629
3878
|
}
|
|
3630
3879
|
ngOnInit() {
|
|
@@ -3708,28 +3957,25 @@ class MatDateRangeInputPartBase extends MatDatepickerInputBase {
|
|
|
3708
3957
|
_getAccessibleName() {
|
|
3709
3958
|
return _computeAriaAccessibleName(this._elementRef.nativeElement);
|
|
3710
3959
|
}
|
|
3711
|
-
static
|
|
3712
|
-
static
|
|
3960
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateRangeInputPartBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
3961
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", type: MatDateRangeInputPartBase, isStandalone: true, inputs: { errorStateMatcher: "errorStateMatcher" }, usesInheritance: true, ngImport: i0 });
|
|
3713
3962
|
}
|
|
3714
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
3963
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateRangeInputPartBase, decorators: [{
|
|
3715
3964
|
type: Directive
|
|
3716
3965
|
}], ctorParameters: () => [], propDecorators: { errorStateMatcher: [{
|
|
3717
3966
|
type: Input
|
|
3718
3967
|
}] } });
|
|
3719
3968
|
/** Input for entering the start date in a `mat-date-range-input`. */
|
|
3720
3969
|
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
|
-
}
|
|
3970
|
+
/** Validator that checks that the start date isn't after the end date. */
|
|
3971
|
+
_startValidator = (control) => {
|
|
3972
|
+
const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
3973
|
+
const end = this._model ? this._model.selection.end : null;
|
|
3974
|
+
return !start || !end || this._dateAdapter.compareDate(start, end) <= 0
|
|
3975
|
+
? null
|
|
3976
|
+
: { 'matStartDateInvalid': { 'end': end, 'actual': start } };
|
|
3977
|
+
};
|
|
3978
|
+
_validator = Validators.compose([...super._getValidators(), this._startValidator]);
|
|
3733
3979
|
_getValueFromModel(modelValue) {
|
|
3734
3980
|
return modelValue.start;
|
|
3735
3981
|
}
|
|
@@ -3772,13 +4018,13 @@ class MatStartDate extends MatDateRangeInputPartBase {
|
|
|
3772
4018
|
super._onKeydown(event);
|
|
3773
4019
|
}
|
|
3774
4020
|
}
|
|
3775
|
-
static
|
|
3776
|
-
static
|
|
4021
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatStartDate, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
4022
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
4023
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MatStartDate, multi: true },
|
|
3778
4024
|
{ provide: NG_VALIDATORS, useExisting: MatStartDate, multi: true },
|
|
3779
|
-
], usesInheritance: true, ngImport: i0 });
|
|
4025
|
+
], usesInheritance: true, ngImport: i0 });
|
|
3780
4026
|
}
|
|
3781
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4027
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatStartDate, decorators: [{
|
|
3782
4028
|
type: Directive,
|
|
3783
4029
|
args: [{
|
|
3784
4030
|
selector: 'input[matStartDate]',
|
|
@@ -3808,18 +4054,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3808
4054
|
}] });
|
|
3809
4055
|
/** Input for entering the end date in a `mat-date-range-input`. */
|
|
3810
4056
|
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
|
-
}
|
|
4057
|
+
/** Validator that checks that the end date isn't before the start date. */
|
|
4058
|
+
_endValidator = (control) => {
|
|
4059
|
+
const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
4060
|
+
const start = this._model ? this._model.selection.start : null;
|
|
4061
|
+
return !end || !start || this._dateAdapter.compareDate(end, start) >= 0
|
|
4062
|
+
? null
|
|
4063
|
+
: { 'matEndDateInvalid': { 'start': start, 'actual': end } };
|
|
4064
|
+
};
|
|
4065
|
+
_validator = Validators.compose([...super._getValidators(), this._endValidator]);
|
|
3823
4066
|
_getValueFromModel(modelValue) {
|
|
3824
4067
|
return modelValue.end;
|
|
3825
4068
|
}
|
|
@@ -3867,13 +4110,13 @@ class MatEndDate extends MatDateRangeInputPartBase {
|
|
|
3867
4110
|
super._onKeydown(event);
|
|
3868
4111
|
}
|
|
3869
4112
|
}
|
|
3870
|
-
static
|
|
3871
|
-
static
|
|
4113
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatEndDate, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
4114
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
4115
|
{ provide: NG_VALUE_ACCESSOR, useExisting: MatEndDate, multi: true },
|
|
3873
4116
|
{ provide: NG_VALIDATORS, useExisting: MatEndDate, multi: true },
|
|
3874
|
-
], usesInheritance: true, ngImport: i0 });
|
|
4117
|
+
], usesInheritance: true, ngImport: i0 });
|
|
3875
4118
|
}
|
|
3876
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatEndDate, decorators: [{
|
|
3877
4120
|
type: Directive,
|
|
3878
4121
|
args: [{
|
|
3879
4122
|
selector: 'input[matEndDate]',
|
|
@@ -3902,16 +4145,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
3902
4145
|
}]
|
|
3903
4146
|
}] });
|
|
3904
4147
|
|
|
3905
|
-
let nextUniqueId = 0;
|
|
3906
4148
|
class MatDateRangeInput {
|
|
4149
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
4150
|
+
_elementRef = inject(ElementRef);
|
|
4151
|
+
_dateAdapter = inject(DateAdapter, { optional: true });
|
|
4152
|
+
_formField = inject(MAT_FORM_FIELD, { optional: true });
|
|
4153
|
+
_closedSubscription = Subscription.EMPTY;
|
|
4154
|
+
_openedSubscription = Subscription.EMPTY;
|
|
3907
4155
|
/** Current value of the range input. */
|
|
3908
4156
|
get value() {
|
|
3909
4157
|
return this._model ? this._model.selection : null;
|
|
3910
4158
|
}
|
|
4159
|
+
/** Unique ID for the group. */
|
|
4160
|
+
id = inject(_IdGenerator).getId('mat-date-range-input-');
|
|
4161
|
+
/** Whether the control is focused. */
|
|
4162
|
+
focused = false;
|
|
3911
4163
|
/** Whether the control's label should float. */
|
|
3912
4164
|
get shouldLabelFloat() {
|
|
3913
4165
|
return this.focused || !this.empty;
|
|
3914
4166
|
}
|
|
4167
|
+
/** Name of the form control. */
|
|
4168
|
+
controlType = 'mat-date-range-input';
|
|
3915
4169
|
/**
|
|
3916
4170
|
* Implemented as a part of `MatFormFieldControl`.
|
|
3917
4171
|
* Set the placeholder attribute on `matStartDate` and `matEndDate`.
|
|
@@ -3944,6 +4198,9 @@ class MatDateRangeInput {
|
|
|
3944
4198
|
this._registerModel(this._model);
|
|
3945
4199
|
}
|
|
3946
4200
|
}
|
|
4201
|
+
_rangePicker;
|
|
4202
|
+
/** The id of the panel owned by this input. */
|
|
4203
|
+
_ariaOwns = signal(null);
|
|
3947
4204
|
/** Whether the input is required. */
|
|
3948
4205
|
get required() {
|
|
3949
4206
|
return (this._required ??
|
|
@@ -3955,6 +4212,7 @@ class MatDateRangeInput {
|
|
|
3955
4212
|
set required(value) {
|
|
3956
4213
|
this._required = value;
|
|
3957
4214
|
}
|
|
4215
|
+
_required;
|
|
3958
4216
|
/** Function that can be used to filter out dates within the date range picker. */
|
|
3959
4217
|
get dateFilter() {
|
|
3960
4218
|
return this._dateFilter;
|
|
@@ -3972,6 +4230,7 @@ class MatDateRangeInput {
|
|
|
3972
4230
|
end._validatorOnChange();
|
|
3973
4231
|
}
|
|
3974
4232
|
}
|
|
4233
|
+
_dateFilter;
|
|
3975
4234
|
/** The minimum valid date. */
|
|
3976
4235
|
get min() {
|
|
3977
4236
|
return this._min;
|
|
@@ -3983,6 +4242,7 @@ class MatDateRangeInput {
|
|
|
3983
4242
|
this._revalidate();
|
|
3984
4243
|
}
|
|
3985
4244
|
}
|
|
4245
|
+
_min;
|
|
3986
4246
|
/** The maximum valid date. */
|
|
3987
4247
|
get max() {
|
|
3988
4248
|
return this._max;
|
|
@@ -3994,6 +4254,7 @@ class MatDateRangeInput {
|
|
|
3994
4254
|
this._revalidate();
|
|
3995
4255
|
}
|
|
3996
4256
|
}
|
|
4257
|
+
_max;
|
|
3997
4258
|
/** Whether the input is disabled. */
|
|
3998
4259
|
get disabled() {
|
|
3999
4260
|
return this._startInput && this._endInput
|
|
@@ -4006,6 +4267,7 @@ class MatDateRangeInput {
|
|
|
4006
4267
|
this.stateChanges.next(undefined);
|
|
4007
4268
|
}
|
|
4008
4269
|
}
|
|
4270
|
+
_groupDisabled = false;
|
|
4009
4271
|
/** Whether the input is in an error state. */
|
|
4010
4272
|
get errorState() {
|
|
4011
4273
|
if (this._startInput && this._endInput) {
|
|
@@ -4019,37 +4281,32 @@ class MatDateRangeInput {
|
|
|
4019
4281
|
const endEmpty = this._endInput ? this._endInput.isEmpty() : false;
|
|
4020
4282
|
return startEmpty && endEmpty;
|
|
4021
4283
|
}
|
|
4284
|
+
/** Value for the `aria-describedby` attribute of the inputs. */
|
|
4285
|
+
_ariaDescribedBy = null;
|
|
4286
|
+
/** Date selection model currently registered with the input. */
|
|
4287
|
+
_model;
|
|
4288
|
+
/** Separator text to be shown between the inputs. */
|
|
4289
|
+
separator = '–';
|
|
4290
|
+
/** Start of the comparison range that should be shown in the calendar. */
|
|
4291
|
+
comparisonStart = null;
|
|
4292
|
+
/** End of the comparison range that should be shown in the calendar. */
|
|
4293
|
+
comparisonEnd = null;
|
|
4294
|
+
_startInput;
|
|
4295
|
+
_endInput;
|
|
4296
|
+
/**
|
|
4297
|
+
* Implemented as a part of `MatFormFieldControl`.
|
|
4298
|
+
* TODO(crisbeto): change type to `AbstractControlDirective` after #18206 lands.
|
|
4299
|
+
* @docs-private
|
|
4300
|
+
*/
|
|
4301
|
+
ngControl;
|
|
4302
|
+
/** Emits when the input's state has changed. */
|
|
4303
|
+
stateChanges = new Subject();
|
|
4304
|
+
/**
|
|
4305
|
+
* Disable the automatic labeling to avoid issues like #27241.
|
|
4306
|
+
* @docs-private
|
|
4307
|
+
*/
|
|
4308
|
+
disableAutomaticLabeling = true;
|
|
4022
4309
|
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
4310
|
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
4054
4311
|
throw createMissingDateImplError('DateAdapter');
|
|
4055
4312
|
}
|
|
@@ -4190,13 +4447,13 @@ class MatDateRangeInput {
|
|
|
4190
4447
|
_isTargetRequired(target) {
|
|
4191
4448
|
return target?.ngControl?.control?.hasValidator(Validators.required);
|
|
4192
4449
|
}
|
|
4193
|
-
static
|
|
4194
|
-
static
|
|
4450
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateRangeInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4451
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.0.0-rc.0", 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
4452
|
{ provide: MatFormFieldControl, useExisting: MatDateRangeInput },
|
|
4196
4453
|
{ 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 });
|
|
4454
|
+
], 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
4455
|
}
|
|
4199
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4456
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateRangeInput, decorators: [{
|
|
4200
4457
|
type: Component,
|
|
4201
4458
|
args: [{ selector: 'mat-date-range-input', exportAs: 'matDateRangeInput', host: {
|
|
4202
4459
|
'class': 'mat-date-range-input',
|
|
@@ -4256,14 +4513,14 @@ class MatDateRangePicker extends MatDatepickerBase {
|
|
|
4256
4513
|
instance.endDateAccessibleName = input._getEndDateAccessibleName();
|
|
4257
4514
|
}
|
|
4258
4515
|
}
|
|
4259
|
-
static
|
|
4260
|
-
static
|
|
4516
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateRangePicker, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
4517
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", type: MatDateRangePicker, isStandalone: true, selector: "mat-date-range-picker", providers: [
|
|
4261
4518
|
MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
|
|
4262
4519
|
MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
|
|
4263
4520
|
{ provide: MatDatepickerBase, useExisting: MatDateRangePicker },
|
|
4264
|
-
], exportAs: ["matDateRangePicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4521
|
+
], exportAs: ["matDateRangePicker"], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4265
4522
|
}
|
|
4266
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4523
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDateRangePicker, decorators: [{
|
|
4267
4524
|
type: Component,
|
|
4268
4525
|
args: [{
|
|
4269
4526
|
selector: 'mat-date-range-picker',
|
|
@@ -4281,17 +4538,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4281
4538
|
|
|
4282
4539
|
/** Button that will close the datepicker and assign the current selection to the data model. */
|
|
4283
4540
|
class MatDatepickerApply {
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
}
|
|
4541
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4542
|
+
constructor() { }
|
|
4287
4543
|
_applySelection() {
|
|
4288
4544
|
this._datepicker._applyPendingSelection();
|
|
4289
4545
|
this._datepicker.close();
|
|
4290
4546
|
}
|
|
4291
|
-
static
|
|
4292
|
-
static
|
|
4547
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerApply, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4548
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", type: MatDatepickerApply, isStandalone: true, selector: "[matDatepickerApply], [matDateRangePickerApply]", host: { listeners: { "click": "_applySelection()" } }, ngImport: i0 });
|
|
4293
4549
|
}
|
|
4294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4550
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerApply, decorators: [{
|
|
4295
4551
|
type: Directive,
|
|
4296
4552
|
args: [{
|
|
4297
4553
|
selector: '[matDatepickerApply], [matDateRangePickerApply]',
|
|
@@ -4300,13 +4556,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4300
4556
|
}], ctorParameters: () => [] });
|
|
4301
4557
|
/** Button that will close the datepicker and discard the current selection. */
|
|
4302
4558
|
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 }); }
|
|
4559
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4560
|
+
constructor() { }
|
|
4561
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerCancel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
4562
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.0-rc.0", type: MatDatepickerCancel, isStandalone: true, selector: "[matDatepickerCancel], [matDateRangePickerCancel]", host: { listeners: { "click": "_datepicker.close()" } }, ngImport: i0 });
|
|
4308
4563
|
}
|
|
4309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4564
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerCancel, decorators: [{
|
|
4310
4565
|
type: Directive,
|
|
4311
4566
|
args: [{
|
|
4312
4567
|
selector: '[matDatepickerCancel], [matDateRangePickerCancel]',
|
|
@@ -4318,10 +4573,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4318
4573
|
* to the bottom of a datepicker or date range picker.
|
|
4319
4574
|
*/
|
|
4320
4575
|
class MatDatepickerActions {
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4576
|
+
_datepicker = inject(MatDatepickerBase);
|
|
4577
|
+
_viewContainerRef = inject(ViewContainerRef);
|
|
4578
|
+
_template;
|
|
4579
|
+
_portal;
|
|
4580
|
+
constructor() { }
|
|
4325
4581
|
ngAfterViewInit() {
|
|
4326
4582
|
this._portal = new TemplatePortal(this._template, this._viewContainerRef);
|
|
4327
4583
|
this._datepicker.registerActions(this._portal);
|
|
@@ -4333,16 +4589,16 @@ class MatDatepickerActions {
|
|
|
4333
4589
|
this._portal?.detach();
|
|
4334
4590
|
}
|
|
4335
4591
|
}
|
|
4336
|
-
static
|
|
4337
|
-
static
|
|
4592
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerActions, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4593
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.0-rc.0", 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
4594
|
<ng-template>
|
|
4339
4595
|
<div class="mat-datepicker-actions">
|
|
4340
4596
|
<ng-content></ng-content>
|
|
4341
4597
|
</div>
|
|
4342
4598
|
</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 });
|
|
4599
|
+
`, 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
4600
|
}
|
|
4345
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4601
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerActions, decorators: [{
|
|
4346
4602
|
type: Component,
|
|
4347
4603
|
args: [{ selector: 'mat-datepicker-actions, mat-date-range-picker-actions', template: `
|
|
4348
4604
|
<ng-template>
|
|
@@ -4357,9 +4613,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.10",
|
|
|
4357
4613
|
}] } });
|
|
4358
4614
|
|
|
4359
4615
|
class MatDatepickerModule {
|
|
4360
|
-
static
|
|
4361
|
-
static
|
|
4362
|
-
MatButtonModule,
|
|
4616
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
4617
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerModule, imports: [MatButtonModule,
|
|
4363
4618
|
OverlayModule,
|
|
4364
4619
|
A11yModule,
|
|
4365
4620
|
PortalModule,
|
|
@@ -4399,22 +4654,20 @@ class MatDatepickerModule {
|
|
|
4399
4654
|
MatDateRangePicker,
|
|
4400
4655
|
MatDatepickerActions,
|
|
4401
4656
|
MatDatepickerCancel,
|
|
4402
|
-
MatDatepickerApply] });
|
|
4403
|
-
static
|
|
4404
|
-
MatButtonModule,
|
|
4657
|
+
MatDatepickerApply] });
|
|
4658
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerModule, providers: [MatDatepickerIntl, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER], imports: [MatButtonModule,
|
|
4405
4659
|
OverlayModule,
|
|
4406
4660
|
A11yModule,
|
|
4407
4661
|
PortalModule,
|
|
4408
4662
|
MatCommonModule,
|
|
4409
4663
|
MatDatepickerContent,
|
|
4410
4664
|
MatDatepickerToggle,
|
|
4411
|
-
MatCalendarHeader, CdkScrollableModule] });
|
|
4665
|
+
MatCalendarHeader, CdkScrollableModule] });
|
|
4412
4666
|
}
|
|
4413
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-
|
|
4667
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-rc.0", ngImport: i0, type: MatDatepickerModule, decorators: [{
|
|
4414
4668
|
type: NgModule,
|
|
4415
4669
|
args: [{
|
|
4416
4670
|
imports: [
|
|
4417
|
-
CommonModule,
|
|
4418
4671
|
MatButtonModule,
|
|
4419
4672
|
OverlayModule,
|
|
4420
4673
|
A11yModule,
|