@angular/material 10.1.1 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_theming.scss +46 -20
- package/autocomplete/autocomplete-origin.d.ts +8 -5
- package/autocomplete/autocomplete-trigger.d.ts +23 -17
- package/autocomplete/autocomplete.d.ts +23 -12
- package/autocomplete/index.metadata.json +1 -1
- package/badge/badge.d.ts +3 -1
- package/badge/index.metadata.json +1 -1
- package/bottom-sheet/index.metadata.json +1 -1
- package/bundles/material-autocomplete-testing.umd.js +316 -256
- package/bundles/material-autocomplete-testing.umd.js.map +1 -1
- package/bundles/material-autocomplete-testing.umd.min.js +2 -16
- package/bundles/material-autocomplete-testing.umd.min.js.map +1 -1
- package/bundles/material-autocomplete.umd.js +553 -436
- package/bundles/material-autocomplete.umd.js.map +1 -1
- package/bundles/material-autocomplete.umd.min.js +3 -25
- package/bundles/material-autocomplete.umd.min.js.map +1 -1
- package/bundles/material-badge-testing.umd.js +301 -243
- package/bundles/material-badge-testing.umd.js.map +1 -1
- package/bundles/material-badge-testing.umd.min.js +2 -16
- package/bundles/material-badge-testing.umd.min.js.map +1 -1
- package/bundles/material-badge.umd.js +356 -282
- package/bundles/material-badge.umd.js.map +1 -1
- package/bundles/material-badge.umd.min.js +2 -2
- package/bundles/material-badge.umd.min.js.map +1 -1
- package/bundles/material-bottom-sheet-testing.umd.js +302 -244
- package/bundles/material-bottom-sheet-testing.umd.js.map +1 -1
- package/bundles/material-bottom-sheet-testing.umd.min.js +2 -16
- package/bundles/material-bottom-sheet-testing.umd.min.js.map +1 -1
- package/bundles/material-bottom-sheet.umd.js +376 -302
- package/bundles/material-bottom-sheet.umd.js.map +1 -1
- package/bundles/material-bottom-sheet.umd.min.js +17 -2
- package/bundles/material-bottom-sheet.umd.min.js.map +1 -1
- package/bundles/material-button-testing.umd.js +310 -252
- package/bundles/material-button-testing.umd.js.map +1 -1
- package/bundles/material-button-testing.umd.min.js +2 -16
- package/bundles/material-button-testing.umd.min.js.map +1 -1
- package/bundles/material-button-toggle-testing.umd.js +304 -261
- package/bundles/material-button-toggle-testing.umd.js.map +1 -1
- package/bundles/material-button-toggle-testing.umd.min.js +2 -31
- package/bundles/material-button-toggle-testing.umd.min.js.map +1 -1
- package/bundles/material-button-toggle.umd.js +388 -322
- package/bundles/material-button-toggle.umd.js.map +1 -1
- package/bundles/material-button-toggle.umd.min.js +2 -10
- package/bundles/material-button-toggle.umd.min.js.map +1 -1
- package/bundles/material-button.umd.js +375 -309
- package/bundles/material-button.umd.js.map +1 -1
- package/bundles/material-button.umd.min.js +2 -10
- package/bundles/material-button.umd.min.js.map +1 -1
- package/bundles/material-card-testing.umd.js +306 -250
- package/bundles/material-card-testing.umd.js.map +1 -1
- package/bundles/material-card-testing.umd.min.js +2 -16
- package/bundles/material-card-testing.umd.min.js.map +1 -1
- package/bundles/material-card.umd.js +139 -139
- package/bundles/material-card.umd.js.map +1 -1
- package/bundles/material-card.umd.min.js +2 -2
- package/bundles/material-card.umd.min.js.map +1 -1
- package/bundles/material-checkbox-testing.umd.js +302 -244
- package/bundles/material-checkbox-testing.umd.js.map +1 -1
- package/bundles/material-checkbox-testing.umd.min.js +2 -16
- package/bundles/material-checkbox-testing.umd.min.js.map +1 -1
- package/bundles/material-checkbox.umd.js +371 -312
- package/bundles/material-checkbox.umd.js.map +1 -1
- package/bundles/material-checkbox.umd.min.js +2 -9
- package/bundles/material-checkbox.umd.min.js.map +1 -1
- package/bundles/material-chips-testing.umd.js +802 -0
- package/bundles/material-chips-testing.umd.js.map +1 -0
- package/bundles/material-chips-testing.umd.min.js +30 -0
- package/bundles/material-chips-testing.umd.min.js.map +1 -0
- package/bundles/material-chips.umd.js +598 -551
- package/bundles/material-chips.umd.js.map +1 -1
- package/bundles/material-chips.umd.min.js +18 -3
- package/bundles/material-chips.umd.min.js.map +1 -1
- package/bundles/material-core-testing.umd.js +304 -261
- package/bundles/material-core-testing.umd.js.map +1 -1
- package/bundles/material-core-testing.umd.min.js +2 -31
- package/bundles/material-core-testing.umd.min.js.map +1 -1
- package/bundles/material-core.umd.js +605 -540
- package/bundles/material-core.umd.js.map +1 -1
- package/bundles/material-core.umd.min.js +37 -12
- package/bundles/material-core.umd.min.js.map +1 -1
- package/bundles/material-datepicker-testing.umd.js +1342 -0
- package/bundles/material-datepicker-testing.umd.js.map +1 -0
- package/bundles/material-datepicker-testing.umd.min.js +30 -0
- package/bundles/material-datepicker-testing.umd.min.js.map +1 -0
- package/bundles/material-datepicker.umd.js +1014 -981
- package/bundles/material-datepicker.umd.js.map +1 -1
- package/bundles/material-datepicker.umd.min.js +43 -9
- package/bundles/material-datepicker.umd.min.js.map +1 -1
- package/bundles/material-dialog-testing.umd.js +303 -245
- package/bundles/material-dialog-testing.umd.js.map +1 -1
- package/bundles/material-dialog-testing.umd.min.js +2 -16
- package/bundles/material-dialog-testing.umd.min.js.map +1 -1
- package/bundles/material-dialog.umd.js +597 -476
- package/bundles/material-dialog.umd.js.map +1 -1
- package/bundles/material-dialog.umd.min.js +10 -8
- package/bundles/material-dialog.umd.min.js.map +1 -1
- package/bundles/material-divider-testing.umd.js +300 -242
- package/bundles/material-divider-testing.umd.js.map +1 -1
- package/bundles/material-divider-testing.umd.min.js +2 -16
- package/bundles/material-divider-testing.umd.min.js.map +1 -1
- package/bundles/material-divider.umd.js +28 -28
- package/bundles/material-divider.umd.js.map +1 -1
- package/bundles/material-divider.umd.min.js +2 -9
- package/bundles/material-divider.umd.min.js.map +1 -1
- package/bundles/material-expansion-testing.umd.js +303 -254
- package/bundles/material-expansion-testing.umd.js.map +1 -1
- package/bundles/material-expansion-testing.umd.min.js +2 -17
- package/bundles/material-expansion-testing.umd.min.js.map +1 -1
- package/bundles/material-expansion.umd.js +471 -433
- package/bundles/material-expansion.umd.js.map +1 -1
- package/bundles/material-expansion.umd.min.js +12 -4
- package/bundles/material-expansion.umd.min.js.map +1 -1
- package/bundles/material-form-field-testing-control.umd.js +299 -233
- package/bundles/material-form-field-testing-control.umd.js.map +1 -1
- package/bundles/material-form-field-testing-control.umd.min.js.map +1 -1
- package/bundles/material-form-field-testing.umd.js +301 -243
- package/bundles/material-form-field-testing.umd.js.map +1 -1
- package/bundles/material-form-field-testing.umd.min.js +3 -17
- package/bundles/material-form-field-testing.umd.min.js.map +1 -1
- package/bundles/material-form-field.umd.js +480 -417
- package/bundles/material-form-field.umd.js.map +1 -1
- package/bundles/material-form-field.umd.min.js +51 -4
- package/bundles/material-form-field.umd.min.js.map +1 -1
- package/bundles/material-grid-list-testing.umd.js +311 -260
- package/bundles/material-grid-list-testing.umd.js.map +1 -1
- package/bundles/material-grid-list-testing.umd.min.js +2 -24
- package/bundles/material-grid-list-testing.umd.min.js.map +1 -1
- package/bundles/material-grid-list.umd.js +414 -340
- package/bundles/material-grid-list.umd.js.map +1 -1
- package/bundles/material-grid-list.umd.min.js +20 -5
- package/bundles/material-grid-list.umd.min.js.map +1 -1
- package/bundles/material-icon-testing.umd.js +409 -12
- package/bundles/material-icon-testing.umd.js.map +1 -1
- package/bundles/material-icon-testing.umd.min.js +18 -3
- package/bundles/material-icon-testing.umd.min.js.map +1 -1
- package/bundles/material-icon.umd.js +404 -336
- package/bundles/material-icon.umd.js.map +1 -1
- package/bundles/material-icon.umd.min.js +2 -9
- package/bundles/material-icon.umd.min.js.map +1 -1
- package/bundles/material-input-testing.umd.js +309 -262
- package/bundles/material-input-testing.umd.js.map +1 -1
- package/bundles/material-input-testing.umd.min.js +2 -16
- package/bundles/material-input-testing.umd.min.js.map +1 -1
- package/bundles/material-input.umd.js +399 -333
- package/bundles/material-input.umd.js.map +1 -1
- package/bundles/material-input.umd.min.js +5 -18
- package/bundles/material-input.umd.min.js.map +1 -1
- package/bundles/material-list-testing.umd.js +333 -311
- package/bundles/material-list-testing.umd.js.map +1 -1
- package/bundles/material-list-testing.umd.min.js +1 -9
- package/bundles/material-list-testing.umd.min.js.map +1 -1
- package/bundles/material-list.umd.js +527 -466
- package/bundles/material-list.umd.js.map +1 -1
- package/bundles/material-list.umd.min.js +2 -10
- package/bundles/material-list.umd.min.js.map +1 -1
- package/bundles/material-menu-testing.umd.js +305 -247
- package/bundles/material-menu-testing.umd.js.map +1 -1
- package/bundles/material-menu-testing.umd.min.js +2 -17
- package/bundles/material-menu-testing.umd.min.js.map +1 -1
- package/bundles/material-menu.umd.js +476 -429
- package/bundles/material-menu.umd.js.map +1 -1
- package/bundles/material-menu.umd.min.js +3 -17
- package/bundles/material-menu.umd.min.js.map +1 -1
- package/bundles/material-paginator-testing.umd.js +302 -244
- package/bundles/material-paginator-testing.umd.js.map +1 -1
- package/bundles/material-paginator-testing.umd.min.js +2 -16
- package/bundles/material-paginator-testing.umd.min.js.map +1 -1
- package/bundles/material-paginator.umd.js +349 -280
- package/bundles/material-paginator.umd.js.map +1 -1
- package/bundles/material-paginator.umd.min.js +2 -9
- package/bundles/material-paginator.umd.min.js.map +1 -1
- package/bundles/material-progress-bar-testing.umd.js +301 -243
- package/bundles/material-progress-bar-testing.umd.js.map +1 -1
- package/bundles/material-progress-bar-testing.umd.min.js +2 -16
- package/bundles/material-progress-bar-testing.umd.min.js.map +1 -1
- package/bundles/material-progress-bar.umd.js +339 -266
- package/bundles/material-progress-bar.umd.js.map +1 -1
- package/bundles/material-progress-bar.umd.min.js +4 -3
- package/bundles/material-progress-bar.umd.min.js.map +1 -1
- package/bundles/material-progress-spinner-testing.umd.js +301 -243
- package/bundles/material-progress-spinner-testing.umd.js.map +1 -1
- package/bundles/material-progress-spinner-testing.umd.min.js +2 -16
- package/bundles/material-progress-spinner-testing.umd.min.js.map +1 -1
- package/bundles/material-progress-spinner.umd.js +420 -365
- package/bundles/material-progress-spinner.umd.js.map +1 -1
- package/bundles/material-progress-spinner.umd.min.js +3 -11
- package/bundles/material-progress-spinner.umd.min.js.map +1 -1
- package/bundles/material-radio-testing.umd.js +304 -246
- package/bundles/material-radio-testing.umd.js.map +1 -1
- package/bundles/material-radio-testing.umd.min.js +2 -17
- package/bundles/material-radio-testing.umd.min.js.map +1 -1
- package/bundles/material-radio.umd.js +405 -339
- package/bundles/material-radio.umd.js.map +1 -1
- package/bundles/material-radio.umd.min.js +2 -10
- package/bundles/material-radio.umd.min.js.map +1 -1
- package/bundles/material-select-testing.umd.js +316 -260
- package/bundles/material-select-testing.umd.js.map +1 -1
- package/bundles/material-select-testing.umd.min.js +2 -16
- package/bundles/material-select-testing.umd.min.js.map +1 -1
- package/bundles/material-select.umd.js +469 -389
- package/bundles/material-select.umd.js.map +1 -1
- package/bundles/material-select.umd.min.js +5 -12
- package/bundles/material-select.umd.min.js.map +1 -1
- package/bundles/material-sidenav-testing.umd.js +303 -252
- package/bundles/material-sidenav-testing.umd.js.map +1 -1
- package/bundles/material-sidenav-testing.umd.min.js +1 -23
- package/bundles/material-sidenav-testing.umd.min.js.map +1 -1
- package/bundles/material-sidenav.umd.js +535 -496
- package/bundles/material-sidenav.umd.js.map +1 -1
- package/bundles/material-sidenav.umd.min.js +3 -3
- package/bundles/material-sidenav.umd.min.js.map +1 -1
- package/bundles/material-slide-toggle-testing.umd.js +302 -244
- package/bundles/material-slide-toggle-testing.umd.js.map +1 -1
- package/bundles/material-slide-toggle-testing.umd.min.js +2 -16
- package/bundles/material-slide-toggle-testing.umd.min.js.map +1 -1
- package/bundles/material-slide-toggle.umd.js +373 -314
- package/bundles/material-slide-toggle.umd.js.map +1 -1
- package/bundles/material-slide-toggle.umd.min.js +2 -9
- package/bundles/material-slide-toggle.umd.min.js.map +1 -1
- package/bundles/material-slider-testing.umd.js +302 -236
- package/bundles/material-slider-testing.umd.js.map +1 -1
- package/bundles/material-slider-testing.umd.min.js +2 -9
- package/bundles/material-slider-testing.umd.min.js.map +1 -1
- package/bundles/material-slider.umd.js +479 -448
- package/bundles/material-slider.umd.js.map +1 -1
- package/bundles/material-slider.umd.min.js +4 -3
- package/bundles/material-slider.umd.min.js.map +1 -1
- package/bundles/material-snack-bar-testing.umd.js +304 -246
- package/bundles/material-snack-bar-testing.umd.js.map +1 -1
- package/bundles/material-snack-bar-testing.umd.min.js +2 -16
- package/bundles/material-snack-bar-testing.umd.min.js.map +1 -1
- package/bundles/material-snack-bar.umd.js +394 -317
- package/bundles/material-snack-bar.umd.js.map +1 -1
- package/bundles/material-snack-bar.umd.min.js +26 -2
- package/bundles/material-snack-bar.umd.min.js.map +1 -1
- package/bundles/material-sort-testing.umd.js +302 -243
- package/bundles/material-sort-testing.umd.js.map +1 -1
- package/bundles/material-sort-testing.umd.min.js +2 -17
- package/bundles/material-sort-testing.umd.min.js.map +1 -1
- package/bundles/material-sort.umd.js +383 -326
- package/bundles/material-sort.umd.js.map +1 -1
- package/bundles/material-sort.umd.min.js +3 -33
- package/bundles/material-sort.umd.min.js.map +1 -1
- package/bundles/material-stepper-testing.umd.js +727 -0
- package/bundles/material-stepper-testing.umd.js.map +1 -0
- package/bundles/material-stepper-testing.umd.min.js +30 -0
- package/bundles/material-stepper-testing.umd.min.js.map +1 -0
- package/bundles/material-stepper.umd.js +496 -446
- package/bundles/material-stepper.umd.js.map +1 -1
- package/bundles/material-stepper.umd.min.js +4 -11
- package/bundles/material-stepper.umd.min.js.map +1 -1
- package/bundles/material-table-testing.umd.js +317 -265
- package/bundles/material-table-testing.umd.js.map +1 -1
- package/bundles/material-table-testing.umd.min.js +2 -24
- package/bundles/material-table-testing.umd.min.js.map +1 -1
- package/bundles/material-table.umd.js +521 -465
- package/bundles/material-table.umd.js.map +1 -1
- package/bundles/material-table.umd.min.js +4 -11
- package/bundles/material-table.umd.min.js.map +1 -1
- package/bundles/material-tabs-testing.umd.js +303 -244
- package/bundles/material-tabs-testing.umd.js.map +1 -1
- package/bundles/material-tabs-testing.umd.min.js +1 -16
- package/bundles/material-tabs-testing.umd.min.js.map +1 -1
- package/bundles/material-tabs.umd.js +677 -646
- package/bundles/material-tabs.umd.js.map +1 -1
- package/bundles/material-tabs.umd.min.js +29 -4
- package/bundles/material-tabs.umd.min.js.map +1 -1
- package/bundles/material-toolbar-testing.umd.js +301 -243
- package/bundles/material-toolbar-testing.umd.js.map +1 -1
- package/bundles/material-toolbar-testing.umd.min.js +2 -16
- package/bundles/material-toolbar-testing.umd.min.js.map +1 -1
- package/bundles/material-toolbar.umd.js +350 -286
- package/bundles/material-toolbar.umd.js.map +1 -1
- package/bundles/material-toolbar.umd.min.js +4 -3
- package/bundles/material-toolbar.umd.min.js.map +1 -1
- package/bundles/material-tooltip-testing.umd.js +301 -243
- package/bundles/material-tooltip-testing.umd.js.map +1 -1
- package/bundles/material-tooltip-testing.umd.min.js +2 -16
- package/bundles/material-tooltip-testing.umd.min.js.map +1 -1
- package/bundles/material-tooltip.umd.js +424 -324
- package/bundles/material-tooltip.umd.js.map +1 -1
- package/bundles/material-tooltip.umd.min.js +11 -3
- package/bundles/material-tooltip.umd.min.js.map +1 -1
- package/bundles/material-tree.umd.js +446 -385
- package/bundles/material-tree.umd.js.map +1 -1
- package/bundles/material-tree.umd.min.js +3 -3
- package/bundles/material-tree.umd.min.js.map +1 -1
- package/button/index.metadata.json +1 -1
- package/chips/chip-default-options.d.ts +1 -1
- package/chips/chip-input.d.ts +1 -1
- package/chips/chip.d.ts +2 -2
- package/chips/index.metadata.json +1 -1
- package/chips/testing/chip-harness-filters.d.ts +28 -0
- package/chips/testing/chip-harness.d.ts +41 -0
- package/chips/testing/chip-input-harness.d.ts +47 -0
- package/chips/testing/chip-list-harness.d.ts +49 -0
- package/chips/testing/chip-remove-harness.d.ts +22 -0
- package/chips/testing/index.d.ts +8 -0
- package/chips/testing/package.json +9 -0
- package/chips/testing/public-api.d.ts +12 -0
- package/core/common-behaviors/color.d.ts +2 -0
- package/core/common-behaviors/constructor.d.ts +7 -0
- package/core/common-behaviors/disable-ripple.d.ts +2 -2
- package/core/common-behaviors/tabindex.d.ts +4 -2
- package/core/datetime/date-adapter.d.ts +9 -2
- package/core/index.metadata.json +1 -1
- package/core/option/optgroup.d.ts +8 -6
- package/core/option/option.d.ts +12 -9
- package/core/style/_vendor-prefixes.scss +5 -0
- package/datepicker/_datepicker-theme.scss +42 -21
- package/datepicker/calendar-body.d.ts +15 -4
- package/datepicker/calendar.d.ts +2 -7
- package/datepicker/date-range-input.d.ts +0 -5
- package/datepicker/date-range-selection-strategy.d.ts +5 -1
- package/datepicker/datepicker-base.d.ts +9 -11
- package/datepicker/datepicker-input-base.d.ts +0 -5
- package/datepicker/index.d.ts +4 -3
- package/datepicker/index.metadata.json +1 -1
- package/datepicker/month-view.d.ts +5 -9
- package/datepicker/multi-year-view.d.ts +3 -6
- package/datepicker/public-api.d.ts +1 -1
- package/datepicker/testing/calendar-cell-harness.d.ts +64 -0
- package/datepicker/testing/calendar-harness.d.ts +53 -0
- package/datepicker/testing/date-range-input-harness.d.ts +59 -0
- package/datepicker/testing/datepicker-harness-filters.d.ts +45 -0
- package/datepicker/testing/datepicker-input-harness-base.d.ts +43 -0
- package/datepicker/testing/datepicker-input-harness.d.ts +36 -0
- package/datepicker/testing/datepicker-toggle-harness.d.ts +28 -0
- package/datepicker/testing/datepicker-trigger-harness-base.d.ts +44 -0
- package/datepicker/testing/index.d.ts +8 -0
- package/datepicker/testing/package.json +9 -0
- package/datepicker/testing/public-api.d.ts +13 -0
- package/datepicker/year-view.d.ts +3 -6
- package/dialog/dialog-config.d.ts +1 -1
- package/dialog/dialog-container.d.ts +39 -22
- package/dialog/dialog-ref.d.ts +3 -3
- package/dialog/dialog.d.ts +25 -14
- package/dialog/index.metadata.json +1 -1
- package/esm2015/autocomplete/autocomplete-module.js +10 -5
- package/esm2015/autocomplete/autocomplete-origin.js +15 -9
- package/esm2015/autocomplete/autocomplete-trigger.js +73 -53
- package/esm2015/autocomplete/autocomplete.js +35 -22
- package/esm2015/autocomplete/testing/autocomplete-harness-filters.js +1 -0
- package/esm2015/badge/badge.js +15 -7
- package/esm2015/badge/testing/badge-harness-filters.js +1 -0
- package/esm2015/bottom-sheet/bottom-sheet-container.js +2 -2
- package/esm2015/bottom-sheet/bottom-sheet-ref.js +3 -3
- package/esm2015/bottom-sheet/bottom-sheet.js +14 -13
- package/esm2015/bottom-sheet/testing/bottom-sheet-harness-filters.js +1 -0
- package/esm2015/button/button.js +3 -3
- package/esm2015/button/testing/button-harness-filters.js +1 -0
- package/esm2015/button-toggle/button-toggle.js +2 -2
- package/esm2015/button-toggle/testing/button-toggle-group-harness-filters.js +1 -0
- package/esm2015/button-toggle/testing/button-toggle-group-harness.js +2 -2
- package/esm2015/button-toggle/testing/button-toggle-harness-filters.js +1 -0
- package/esm2015/button-toggle/testing/button-toggle-harness.js +2 -2
- package/esm2015/card/testing/card-harness-filters.js +1 -0
- package/esm2015/card/testing/card-harness.js +2 -2
- package/esm2015/checkbox/checkbox.js +2 -2
- package/esm2015/checkbox/testing/checkbox-harness-filters.js +1 -0
- package/esm2015/checkbox/testing/checkbox-harness.js +2 -2
- package/esm2015/chips/chip-default-options.js +1 -1
- package/esm2015/chips/chip-input.js +3 -8
- package/esm2015/chips/chip-list.js +7 -13
- package/esm2015/chips/chip-text-control.js +1 -0
- package/esm2015/chips/chip.js +1 -2
- package/esm2015/chips/testing/chip-harness-filters.js +2 -0
- package/esm2015/chips/testing/chip-harness.js +82 -0
- package/esm2015/chips/testing/chip-input-harness.js +101 -0
- package/esm2015/chips/testing/chip-list-harness.js +94 -0
- package/esm2015/chips/testing/chip-remove-harness.js +29 -0
- package/esm2015/chips/testing/index.js +9 -0
- package/esm2015/chips/testing/public-api.js +13 -0
- package/esm2015/chips/testing/testing.externs.js +0 -0
- package/esm2015/core/common-behaviors/color.js +3 -2
- package/esm2015/core/common-behaviors/common-module.js +6 -2
- package/esm2015/core/common-behaviors/constructor.js +2 -1
- package/esm2015/core/common-behaviors/disable-ripple.js +7 -3
- package/esm2015/core/common-behaviors/initialized.js +2 -2
- package/esm2015/core/common-behaviors/tabindex.js +11 -4
- package/esm2015/core/datetime/date-adapter.js +12 -3
- package/esm2015/core/datetime/native-date-adapter.js +11 -9
- package/esm2015/core/option/optgroup.js +16 -11
- package/esm2015/core/option/option.js +29 -16
- package/esm2015/core/testing/optgroup-harness-filters.js +1 -0
- package/esm2015/core/testing/option-harness-filters.js +1 -0
- package/esm2015/core/version.js +1 -1
- package/esm2015/datepicker/calendar-body.js +20 -5
- package/esm2015/datepicker/calendar.js +13 -18
- package/esm2015/datepicker/date-range-input-parts.js +5 -5
- package/esm2015/datepicker/date-range-input.js +15 -16
- package/esm2015/datepicker/date-range-picker.js +6 -2
- package/esm2015/datepicker/date-range-selection-strategy.js +12 -2
- package/esm2015/datepicker/date-selection-model.js +2 -2
- package/esm2015/datepicker/datepicker-base.js +17 -19
- package/esm2015/datepicker/datepicker-input-base.js +13 -18
- package/esm2015/datepicker/datepicker-input.js +7 -3
- package/esm2015/datepicker/datepicker-module.js +2 -7
- package/esm2015/datepicker/datepicker-toggle.js +3 -1
- package/esm2015/datepicker/index.js +5 -4
- package/esm2015/datepicker/month-view.js +19 -18
- package/esm2015/datepicker/multi-year-view.js +12 -16
- package/esm2015/datepicker/public-api.js +2 -2
- package/esm2015/datepicker/testing/calendar-cell-harness.js +181 -0
- package/esm2015/datepicker/testing/calendar-harness.js +91 -0
- package/esm2015/datepicker/testing/date-range-input-harness.js +116 -0
- package/esm2015/datepicker/testing/datepicker-harness-filters.js +9 -0
- package/esm2015/datepicker/testing/datepicker-input-harness-base.js +100 -0
- package/esm2015/datepicker/testing/datepicker-input-harness.js +69 -0
- package/esm2015/datepicker/testing/datepicker-toggle-harness.js +48 -0
- package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +77 -0
- package/esm2015/datepicker/testing/index.js +9 -0
- package/esm2015/datepicker/testing/public-api.js +14 -0
- package/esm2015/datepicker/testing/testing.externs.js +0 -0
- package/esm2015/datepicker/year-view.js +18 -20
- package/esm2015/dialog/dialog-config.js +1 -1
- package/esm2015/dialog/dialog-container.js +73 -50
- package/esm2015/dialog/dialog-content-directives.js +9 -3
- package/esm2015/dialog/dialog-ref.js +8 -8
- package/esm2015/dialog/dialog.js +58 -29
- package/esm2015/dialog/testing/dialog-harness-filters.js +1 -0
- package/esm2015/divider/testing/divider-harness-filters.js +1 -0
- package/esm2015/divider/testing/divider-harness.js +2 -2
- package/esm2015/expansion/accordion.js +3 -20
- package/esm2015/expansion/expansion-panel-header.js +7 -13
- package/esm2015/expansion/expansion-panel.js +7 -6
- package/esm2015/expansion/testing/expansion-harness-filters.js +1 -0
- package/esm2015/form-field/form-field-control.js +1 -1
- package/esm2015/form-field/form-field.js +26 -17
- package/esm2015/form-field/testing/form-field-harness-filters.js +1 -0
- package/esm2015/grid-list/grid-list.js +2 -2
- package/esm2015/grid-list/testing/grid-list-harness-filters.js +1 -0
- package/esm2015/grid-list/tile-coordinator.js +2 -2
- package/esm2015/grid-list/tile-styler.js +4 -3
- package/esm2015/icon/icon-registry.js +44 -52
- package/esm2015/icon/icon.js +13 -2
- package/esm2015/icon/testing/icon-harness-filters.js +9 -0
- package/esm2015/icon/testing/icon-harness.js +63 -0
- package/esm2015/icon/testing/public-api.js +3 -1
- package/esm2015/input/input.js +17 -10
- package/esm2015/input/testing/input-harness-filters.js +1 -0
- package/esm2015/input/testing/input-harness.js +7 -7
- package/esm2015/list/list.js +2 -2
- package/esm2015/list/selection-list.js +33 -31
- package/esm2015/list/testing/action-list-harness.js +2 -2
- package/esm2015/list/testing/list-harness-filters.js +1 -0
- package/esm2015/list/testing/list-harness.js +2 -2
- package/esm2015/list/testing/list-item-harness-base.js +2 -2
- package/esm2015/list/testing/nav-list-harness.js +2 -2
- package/esm2015/list/testing/selection-list-harness.js +3 -3
- package/esm2015/menu/menu-positions.js +1 -0
- package/esm2015/menu/menu-trigger.js +12 -6
- package/esm2015/menu/menu.js +11 -14
- package/esm2015/menu/testing/menu-harness-filters.js +1 -0
- package/esm2015/paginator/paginator.js +6 -3
- package/esm2015/paginator/testing/paginator-harness-filters.js +1 -0
- package/esm2015/progress-bar/testing/progress-bar-harness-filters.js +1 -0
- package/esm2015/progress-bar/testing/progress-bar-harness.js +2 -2
- package/esm2015/progress-spinner/progress-spinner.js +25 -16
- package/esm2015/progress-spinner/testing/progress-spinner-harness-filters.js +1 -0
- package/esm2015/progress-spinner/testing/progress-spinner-harness.js +2 -2
- package/esm2015/radio/radio.js +1 -1
- package/esm2015/radio/testing/radio-harness-filters.js +1 -0
- package/esm2015/radio/testing/radio-harness.js +3 -3
- package/esm2015/select/select.js +71 -57
- package/esm2015/select/testing/select-harness-filters.js +1 -0
- package/esm2015/select/testing/select-harness.js +2 -3
- package/esm2015/sidenav/drawer.js +23 -28
- package/esm2015/sidenav/testing/drawer-harness-filters.js +1 -0
- package/esm2015/slide-toggle/testing/slide-toggle-harness-filters.js +1 -0
- package/esm2015/slide-toggle/testing/slide-toggle-harness.js +2 -2
- package/esm2015/slider/slider.js +28 -31
- package/esm2015/slider/testing/slider-harness-filters.js +1 -0
- package/esm2015/slider/testing/slider-harness.js +2 -2
- package/esm2015/snack-bar/snack-bar-container.js +3 -3
- package/esm2015/snack-bar/snack-bar-ref.js +3 -3
- package/esm2015/snack-bar/snack-bar.js +13 -9
- package/esm2015/snack-bar/testing/snack-bar-harness-filters.js +1 -0
- package/esm2015/sort/sort-direction.js +1 -0
- package/esm2015/sort/sort-header.js +6 -3
- package/esm2015/sort/sort.js +11 -8
- package/esm2015/sort/testing/sort-harness-filters.js +1 -0
- package/esm2015/stepper/step-header.js +2 -2
- package/esm2015/stepper/stepper-button.js +3 -1
- package/esm2015/stepper/stepper.js +7 -4
- package/esm2015/stepper/testing/index.js +9 -0
- package/esm2015/stepper/testing/public-api.js +12 -0
- package/esm2015/stepper/testing/step-harness-filters.js +2 -0
- package/esm2015/stepper/testing/step-harness.js +132 -0
- package/esm2015/stepper/testing/stepper-button-harnesses.js +55 -0
- package/esm2015/stepper/testing/stepper-harness.js +57 -0
- package/esm2015/stepper/testing/testing.externs.js +0 -0
- package/esm2015/table/cell.js +15 -26
- package/esm2015/table/table-data-source.js +14 -1
- package/esm2015/table/table.js +11 -4
- package/esm2015/table/testing/table-harness-filters.js +1 -0
- package/esm2015/tabs/paginated-tab-header.js +3 -10
- package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +3 -3
- package/esm2015/tabs/tab.js +17 -10
- package/esm2015/tabs/testing/tab-harness-filters.js +1 -0
- package/esm2015/toolbar/testing/toolbar-harness-filters.js +1 -0
- package/esm2015/toolbar/testing/toolbar-harness.js +2 -2
- package/esm2015/toolbar/toolbar.js +15 -17
- package/esm2015/tooltip/testing/tooltip-harness-filters.js +1 -0
- package/esm2015/tooltip/tooltip.js +53 -31
- package/esm2015/tree/node.js +2 -2
- package/esm2015/tree/padding.js +7 -1
- package/esm2015/tree/toggle.js +8 -4
- package/expansion/expansion-panel-header.d.ts +6 -12
- package/expansion/expansion-panel.d.ts +5 -4
- package/expansion/index.metadata.json +1 -1
- package/fesm2015/autocomplete.js +128 -84
- package/fesm2015/autocomplete.js.map +1 -1
- package/fesm2015/badge.js +14 -6
- package/fesm2015/badge.js.map +1 -1
- package/fesm2015/bottom-sheet.js +17 -16
- package/fesm2015/bottom-sheet.js.map +1 -1
- package/fesm2015/button-toggle/testing.js +2 -2
- package/fesm2015/button-toggle/testing.js.map +1 -1
- package/fesm2015/button-toggle.js +1 -1
- package/fesm2015/button-toggle.js.map +1 -1
- package/fesm2015/button.js +2 -2
- package/fesm2015/button.js.map +1 -1
- package/fesm2015/card/testing.js +1 -1
- package/fesm2015/card/testing.js.map +1 -1
- package/fesm2015/checkbox/testing.js +1 -1
- package/fesm2015/checkbox/testing.js.map +1 -1
- package/fesm2015/checkbox.js +1 -1
- package/fesm2015/checkbox.js.map +1 -1
- package/fesm2015/chips/testing.js +316 -0
- package/fesm2015/chips/testing.js.map +1 -0
- package/fesm2015/chips.js +7 -19
- package/fesm2015/chips.js.map +1 -1
- package/fesm2015/core.js +87 -42
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/datepicker/testing.js +690 -0
- package/fesm2015/datepicker/testing.js.map +1 -0
- package/fesm2015/datepicker.js +146 -134
- package/fesm2015/datepicker.js.map +1 -1
- package/fesm2015/dialog.js +143 -85
- package/fesm2015/dialog.js.map +1 -1
- package/fesm2015/divider/testing.js +1 -1
- package/fesm2015/divider/testing.js.map +1 -1
- package/fesm2015/expansion.js +9 -30
- package/fesm2015/expansion.js.map +1 -1
- package/fesm2015/form-field.js +25 -16
- package/fesm2015/form-field.js.map +1 -1
- package/fesm2015/grid-list.js +5 -4
- package/fesm2015/grid-list.js.map +1 -1
- package/fesm2015/icon/testing.js +72 -1
- package/fesm2015/icon/testing.js.map +1 -1
- package/fesm2015/icon.js +56 -53
- package/fesm2015/icon.js.map +1 -1
- package/fesm2015/input/testing.js +6 -6
- package/fesm2015/input/testing.js.map +1 -1
- package/fesm2015/input.js +15 -8
- package/fesm2015/input.js.map +1 -1
- package/fesm2015/list/testing.js +6 -6
- package/fesm2015/list/testing.js.map +1 -1
- package/fesm2015/list.js +33 -31
- package/fesm2015/list.js.map +1 -1
- package/fesm2015/menu.js +20 -17
- package/fesm2015/menu.js.map +1 -1
- package/fesm2015/paginator.js +5 -2
- package/fesm2015/paginator.js.map +1 -1
- package/fesm2015/progress-bar/testing.js +1 -1
- package/fesm2015/progress-bar/testing.js.map +1 -1
- package/fesm2015/progress-spinner/testing.js +1 -1
- package/fesm2015/progress-spinner/testing.js.map +1 -1
- package/fesm2015/progress-spinner.js +24 -15
- package/fesm2015/progress-spinner.js.map +1 -1
- package/fesm2015/radio/testing.js +2 -2
- package/fesm2015/radio/testing.js.map +1 -1
- package/fesm2015/radio.js.map +1 -1
- package/fesm2015/select/testing.js +1 -2
- package/fesm2015/select/testing.js.map +1 -1
- package/fesm2015/select.js +70 -56
- package/fesm2015/select.js.map +1 -1
- package/fesm2015/sidenav.js +22 -27
- package/fesm2015/sidenav.js.map +1 -1
- package/fesm2015/slide-toggle/testing.js +1 -1
- package/fesm2015/slide-toggle/testing.js.map +1 -1
- package/fesm2015/slider/testing.js +1 -1
- package/fesm2015/slider/testing.js.map +1 -1
- package/fesm2015/slider.js +27 -30
- package/fesm2015/slider.js.map +1 -1
- package/fesm2015/snack-bar.js +17 -13
- package/fesm2015/snack-bar.js.map +1 -1
- package/fesm2015/sort.js +15 -9
- package/fesm2015/sort.js.map +1 -1
- package/fesm2015/stepper/testing.js +258 -0
- package/fesm2015/stepper/testing.js.map +1 -0
- package/fesm2015/stepper.js +10 -5
- package/fesm2015/stepper.js.map +1 -1
- package/fesm2015/table.js +37 -28
- package/fesm2015/table.js.map +1 -1
- package/fesm2015/tabs.js +20 -20
- package/fesm2015/tabs.js.map +1 -1
- package/fesm2015/toolbar/testing.js +1 -1
- package/fesm2015/toolbar/testing.js.map +1 -1
- package/fesm2015/toolbar.js +14 -16
- package/fesm2015/toolbar.js.map +1 -1
- package/fesm2015/tooltip.js +52 -30
- package/fesm2015/tooltip.js.map +1 -1
- package/fesm2015/tree.js +13 -4
- package/fesm2015/tree.js.map +1 -1
- package/form-field/form-field-control.d.ts +5 -0
- package/form-field/form-field.d.ts +8 -5
- package/form-field/index.metadata.json +1 -1
- package/icon/icon-registry.d.ts +4 -6
- package/icon/icon.d.ts +3 -1
- package/icon/index.metadata.json +1 -1
- package/icon/testing/icon-harness-filters.d.ts +22 -0
- package/icon/testing/icon-harness.d.ts +29 -0
- package/icon/testing/index.metadata.json +1 -1
- package/icon/testing/public-api.d.ts +2 -0
- package/input/index.metadata.json +1 -1
- package/input/input.d.ts +6 -3
- package/list/index.metadata.json +1 -1
- package/list/selection-list.d.ts +3 -7
- package/menu/index.metadata.json +1 -1
- package/package.json +2 -2
- package/paginator/index.metadata.json +1 -1
- package/paginator/paginator.d.ts +5 -0
- package/prebuilt-themes/deeppurple-amber.css +1 -1
- package/prebuilt-themes/indigo-pink.css +1 -1
- package/prebuilt-themes/pink-bluegrey.css +1 -1
- package/prebuilt-themes/purple-green.css +1 -1
- package/progress-spinner/index.metadata.json +1 -1
- package/progress-spinner/progress-spinner.d.ts +9 -5
- package/radio/index.metadata.json +1 -1
- package/radio/radio.d.ts +2 -2
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-generate/tree/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +1 -1
- package/schematics/ng-update/data/index.js +1 -1
- package/select/index.metadata.json +1 -1
- package/select/select.d.ts +9 -8
- package/sidenav/drawer.d.ts +5 -5
- package/sidenav/index.metadata.json +1 -1
- package/slider/index.metadata.json +1 -1
- package/slider/slider.d.ts +8 -10
- package/snack-bar/index.metadata.json +1 -1
- package/sort/index.metadata.json +1 -1
- package/stepper/index.metadata.json +1 -1
- package/stepper/stepper.d.ts +3 -1
- package/stepper/testing/index.d.ts +8 -0
- package/stepper/testing/package.json +9 -0
- package/stepper/testing/public-api.d.ts +11 -0
- package/stepper/testing/step-harness-filters.d.ts +37 -0
- package/stepper/testing/step-harness.d.ts +57 -0
- package/stepper/testing/stepper-button-harnesses.d.ts +41 -0
- package/stepper/testing/stepper-harness.d.ts +35 -0
- package/table/cell.d.ts +9 -5
- package/table/index.metadata.json +1 -1
- package/table/table.d.ts +2 -0
- package/tabs/index.metadata.json +1 -1
- package/tabs/tab.d.ts +8 -1
- package/toolbar/index.metadata.json +1 -1
- package/tooltip/index.metadata.json +1 -1
- package/tooltip/tooltip.d.ts +6 -2
- package/tree/index.metadata.json +1 -1
- package/tree/padding.d.ts +4 -2
- package/tree/toggle.d.ts +2 -1
package/fesm2015/datepicker.js
CHANGED
|
@@ -173,8 +173,8 @@ class MatCalendarBody {
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
/** Returns whether a cell should be marked as selected. */
|
|
176
|
-
_isSelected(
|
|
177
|
-
return this.startValue ===
|
|
176
|
+
_isSelected(value) {
|
|
177
|
+
return this.startValue === value || this.endValue === value;
|
|
178
178
|
}
|
|
179
179
|
ngOnChanges(changes) {
|
|
180
180
|
const columnChanges = changes['numCols'];
|
|
@@ -208,7 +208,7 @@ class MatCalendarBody {
|
|
|
208
208
|
/** Focuses the active cell after the microtask queue is empty. */
|
|
209
209
|
_focusActiveCell(movePreview = true) {
|
|
210
210
|
this._ngZone.runOutsideAngular(() => {
|
|
211
|
-
this._ngZone.onStable.
|
|
211
|
+
this._ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
212
212
|
const activeCell = this._elementRef.nativeElement.querySelector('.mat-calendar-body-active');
|
|
213
213
|
if (activeCell) {
|
|
214
214
|
if (!movePreview) {
|
|
@@ -267,6 +267,21 @@ class MatCalendarBody {
|
|
|
267
267
|
_isInComparisonRange(value) {
|
|
268
268
|
return isInRange(value, this.comparisonStart, this.comparisonEnd, this.isRange);
|
|
269
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* Gets whether a value is the same as the start and end of the comparison range.
|
|
272
|
+
* For context, the functions that we use to determine whether something is the start/end of
|
|
273
|
+
* a range don't allow for the start and end to be on the same day, because we'd have to use
|
|
274
|
+
* much more specific CSS selectors to style them correctly in all scenarios. This is fine for
|
|
275
|
+
* the regular range, because when it happens, the selected styles take over and still show where
|
|
276
|
+
* the range would've been, however we don't have these selected styles for a comparison range.
|
|
277
|
+
* This function is used to apply a class that serves the same purpose as the one for selected
|
|
278
|
+
* dates, but it only applies in the context of a comparison range.
|
|
279
|
+
*/
|
|
280
|
+
_isComparisonIdentical(value) {
|
|
281
|
+
// Note that we don't need to null check the start/end
|
|
282
|
+
// here, because the `value` will always be defined.
|
|
283
|
+
return this.comparisonStart === this.comparisonEnd && value === this.comparisonStart;
|
|
284
|
+
}
|
|
270
285
|
/** Gets whether a value is the start of the preview range. */
|
|
271
286
|
_isPreviewStart(value) {
|
|
272
287
|
return isStart(value, this.previewStart, this.previewEnd);
|
|
@@ -301,7 +316,7 @@ class MatCalendarBody {
|
|
|
301
316
|
MatCalendarBody.decorators = [
|
|
302
317
|
{ type: Component, args: [{
|
|
303
318
|
selector: '[mat-calendar-body]',
|
|
304
|
-
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<tr *ngIf=\"_firstRowOffset < labelMinRequiredCells\" 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<!-- Create the first row separately so we can include a special spacer cell. -->\n<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\n <!--\n We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\n The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\n percentage of the width (a variant of the trick described here:\n https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n <td *ngIf=\"rowIndex === 0 && _firstRowOffset\"\n aria-hidden=\"true\"\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 <td *ngFor=\"let item of row; let colIndex = index\"\n role=\"gridcell\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\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-selected]=\"_isSelected(item)\"\n (click)=\"_cellClicked(item, $event)\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n <div class=\"mat-calendar-body-cell-content mat-focus-indicator\"\n [class.mat-calendar-body-selected]=\"_isSelected(item)\"\n [class.mat-calendar-body-today]=\"todayValue === item.compareValue\">\n {{item.displayValue}}\n </div>\n <div class=\"mat-calendar-body-cell-preview\"></div>\n </td>\n</tr>\n",
|
|
319
|
+
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<tr *ngIf=\"_firstRowOffset < labelMinRequiredCells\" 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<!-- Create the first row separately so we can include a special spacer cell. -->\n<tr *ngFor=\"let row of rows; let rowIndex = index\" role=\"row\">\n <!--\n We mark this cell as aria-hidden so it doesn't get read out as one of the days in the week.\n The aspect ratio of the table cells is maintained by setting the top and bottom padding as a\n percentage of the width (a variant of the trick described here:\n https://www.w3schools.com/howto/howto_css_aspect_ratio.asp).\n -->\n <td *ngIf=\"rowIndex === 0 && _firstRowOffset\"\n aria-hidden=\"true\"\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 <td *ngFor=\"let item of row; let colIndex = index\"\n role=\"gridcell\"\n class=\"mat-calendar-body-cell\"\n [ngClass]=\"item.cssClasses\"\n [tabindex]=\"_isActiveCell(rowIndex, colIndex) ? 0 : -1\"\n [attr.data-mat-row]=\"rowIndex\"\n [attr.data-mat-col]=\"colIndex\"\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-selected]=\"_isSelected(item.compareValue)\"\n (click)=\"_cellClicked(item, $event)\"\n [style.width]=\"_cellWidth\"\n [style.paddingTop]=\"_cellPadding\"\n [style.paddingBottom]=\"_cellPadding\">\n <div 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 </div>\n <div class=\"mat-calendar-body-cell-preview\"></div>\n </td>\n</tr>\n",
|
|
305
320
|
host: {
|
|
306
321
|
'class': 'mat-calendar-body',
|
|
307
322
|
'role': 'grid',
|
|
@@ -380,7 +395,7 @@ class MatDateSelectionModel {
|
|
|
380
395
|
this._adapter = _adapter;
|
|
381
396
|
this._selectionChanged = new Subject();
|
|
382
397
|
/** Emits when the selection has changed. */
|
|
383
|
-
this.selectionChanged = this._selectionChanged
|
|
398
|
+
this.selectionChanged = this._selectionChanged;
|
|
384
399
|
this.selection = selection;
|
|
385
400
|
}
|
|
386
401
|
/**
|
|
@@ -555,6 +570,16 @@ DefaultMatCalendarRangeStrategy.decorators = [
|
|
|
555
570
|
DefaultMatCalendarRangeStrategy.ctorParameters = () => [
|
|
556
571
|
{ type: DateAdapter }
|
|
557
572
|
];
|
|
573
|
+
/** @docs-private */
|
|
574
|
+
function MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY(parent, adapter) {
|
|
575
|
+
return parent || new DefaultMatCalendarRangeStrategy(adapter);
|
|
576
|
+
}
|
|
577
|
+
/** @docs-private */
|
|
578
|
+
const MAT_CALENDAR_RANGE_STRATEGY_PROVIDER = {
|
|
579
|
+
provide: MAT_DATE_RANGE_SELECTION_STRATEGY,
|
|
580
|
+
deps: [[new Optional(), new SkipSelf(), MAT_DATE_RANGE_SELECTION_STRATEGY], DateAdapter],
|
|
581
|
+
useFactory: MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY,
|
|
582
|
+
};
|
|
558
583
|
|
|
559
584
|
/**
|
|
560
585
|
* @license
|
|
@@ -582,11 +607,13 @@ class MatMonthView {
|
|
|
582
607
|
this._userSelection = new EventEmitter();
|
|
583
608
|
/** Emits when any date is activated. */
|
|
584
609
|
this.activeDateChange = new EventEmitter();
|
|
585
|
-
if (
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
610
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
611
|
+
if (!this._dateAdapter) {
|
|
612
|
+
throw createMissingDateImplError('DateAdapter');
|
|
613
|
+
}
|
|
614
|
+
if (!this._dateFormats) {
|
|
615
|
+
throw createMissingDateImplError('MAT_DATE_FORMATS');
|
|
616
|
+
}
|
|
590
617
|
}
|
|
591
618
|
this._activeDate = this._dateAdapter.today();
|
|
592
619
|
}
|
|
@@ -596,7 +623,7 @@ class MatMonthView {
|
|
|
596
623
|
get activeDate() { return this._activeDate; }
|
|
597
624
|
set activeDate(value) {
|
|
598
625
|
const oldActiveDate = this._activeDate;
|
|
599
|
-
const validDate = this.
|
|
626
|
+
const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();
|
|
600
627
|
this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);
|
|
601
628
|
if (!this._hasSameMonthAndYear(oldActiveDate, this._activeDate)) {
|
|
602
629
|
this._init();
|
|
@@ -609,25 +636,31 @@ class MatMonthView {
|
|
|
609
636
|
this._selected = value;
|
|
610
637
|
}
|
|
611
638
|
else {
|
|
612
|
-
this._selected = this.
|
|
639
|
+
this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
613
640
|
}
|
|
614
641
|
this._setRanges(this._selected);
|
|
615
642
|
}
|
|
616
643
|
/** The minimum selectable date. */
|
|
617
644
|
get minDate() { return this._minDate; }
|
|
618
645
|
set minDate(value) {
|
|
619
|
-
this._minDate = this.
|
|
646
|
+
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
620
647
|
}
|
|
621
648
|
/** The maximum selectable date. */
|
|
622
649
|
get maxDate() { return this._maxDate; }
|
|
623
650
|
set maxDate(value) {
|
|
624
|
-
this._maxDate = this.
|
|
651
|
+
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
625
652
|
}
|
|
626
653
|
ngAfterContentInit() {
|
|
627
654
|
this._rerenderSubscription = this._dateAdapter.localeChanges
|
|
628
655
|
.pipe(startWith(null))
|
|
629
656
|
.subscribe(() => this._init());
|
|
630
657
|
}
|
|
658
|
+
ngOnChanges(changes) {
|
|
659
|
+
const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];
|
|
660
|
+
if (comparisonChange && !comparisonChange.firstChange) {
|
|
661
|
+
this._setRanges(this.selected);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
631
664
|
ngOnDestroy() {
|
|
632
665
|
this._rerenderSubscription.unsubscribe();
|
|
633
666
|
}
|
|
@@ -776,7 +809,7 @@ class MatMonthView {
|
|
|
776
809
|
const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), this._dateAdapter.getMonth(this.activeDate), i + 1);
|
|
777
810
|
const enabled = this._shouldEnableDate(date);
|
|
778
811
|
const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.dateA11yLabel);
|
|
779
|
-
const cellClasses = this.dateClass ? this.dateClass(date) : undefined;
|
|
812
|
+
const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;
|
|
780
813
|
this._weeks[this._weeks.length - 1].push(new MatCalendarCell(i + 1, dateNames[i], ariaLabel, enabled, cellClasses, this._getCellCompareValue(date), date));
|
|
781
814
|
}
|
|
782
815
|
}
|
|
@@ -812,13 +845,6 @@ class MatMonthView {
|
|
|
812
845
|
}
|
|
813
846
|
return null;
|
|
814
847
|
}
|
|
815
|
-
/**
|
|
816
|
-
* @param obj The object to check.
|
|
817
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
818
|
-
*/
|
|
819
|
-
_getValidDateOrNull(obj) {
|
|
820
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
821
|
-
}
|
|
822
848
|
/** Determines whether the user has the RTL layout direction. */
|
|
823
849
|
_isRtl() {
|
|
824
850
|
return this._dir && this._dir.value === 'rtl';
|
|
@@ -894,7 +920,7 @@ class MatMultiYearView {
|
|
|
894
920
|
this.yearSelected = new EventEmitter();
|
|
895
921
|
/** Emits when any date is activated. */
|
|
896
922
|
this.activeDateChange = new EventEmitter();
|
|
897
|
-
if (!this._dateAdapter) {
|
|
923
|
+
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
898
924
|
throw createMissingDateImplError('DateAdapter');
|
|
899
925
|
}
|
|
900
926
|
this._activeDate = this._dateAdapter.today();
|
|
@@ -903,7 +929,7 @@ class MatMultiYearView {
|
|
|
903
929
|
get activeDate() { return this._activeDate; }
|
|
904
930
|
set activeDate(value) {
|
|
905
931
|
let oldActiveDate = this._activeDate;
|
|
906
|
-
const validDate = this.
|
|
932
|
+
const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();
|
|
907
933
|
this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);
|
|
908
934
|
if (!isSameMultiYearView(this._dateAdapter, oldActiveDate, this._activeDate, this.minDate, this.maxDate)) {
|
|
909
935
|
this._init();
|
|
@@ -916,19 +942,19 @@ class MatMultiYearView {
|
|
|
916
942
|
this._selected = value;
|
|
917
943
|
}
|
|
918
944
|
else {
|
|
919
|
-
this._selected = this.
|
|
945
|
+
this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
920
946
|
}
|
|
921
947
|
this._setSelectedYear(value);
|
|
922
948
|
}
|
|
923
949
|
/** The minimum selectable date. */
|
|
924
950
|
get minDate() { return this._minDate; }
|
|
925
951
|
set minDate(value) {
|
|
926
|
-
this._minDate = this.
|
|
952
|
+
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
927
953
|
}
|
|
928
954
|
/** The maximum selectable date. */
|
|
929
955
|
get maxDate() { return this._maxDate; }
|
|
930
956
|
set maxDate(value) {
|
|
931
|
-
this._maxDate = this.
|
|
957
|
+
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
932
958
|
}
|
|
933
959
|
ngAfterContentInit() {
|
|
934
960
|
this._rerenderSubscription = this._dateAdapter.localeChanges
|
|
@@ -1021,8 +1047,10 @@ class MatMultiYearView {
|
|
|
1021
1047
|
}
|
|
1022
1048
|
/** Creates an MatCalendarCell for the given year. */
|
|
1023
1049
|
_createCellForYear(year) {
|
|
1024
|
-
|
|
1025
|
-
|
|
1050
|
+
const date = this._dateAdapter.createDate(year, 0, 1);
|
|
1051
|
+
const yearName = this._dateAdapter.getYearName(date);
|
|
1052
|
+
const cellClasses = this.dateClass ? this.dateClass(date, 'multi-year') : undefined;
|
|
1053
|
+
return new MatCalendarCell(year, yearName, yearName, this._shouldEnableYear(year), cellClasses);
|
|
1026
1054
|
}
|
|
1027
1055
|
/** Whether the given year is enabled. */
|
|
1028
1056
|
_shouldEnableYear(year) {
|
|
@@ -1045,13 +1073,6 @@ class MatMultiYearView {
|
|
|
1045
1073
|
}
|
|
1046
1074
|
return false;
|
|
1047
1075
|
}
|
|
1048
|
-
/**
|
|
1049
|
-
* @param obj The object to check.
|
|
1050
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
1051
|
-
*/
|
|
1052
|
-
_getValidDateOrNull(obj) {
|
|
1053
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
1054
|
-
}
|
|
1055
1076
|
/** Determines whether the user has the RTL layout direction. */
|
|
1056
1077
|
_isRtl() {
|
|
1057
1078
|
return this._dir && this._dir.value === 'rtl';
|
|
@@ -1090,6 +1111,7 @@ MatMultiYearView.propDecorators = {
|
|
|
1090
1111
|
minDate: [{ type: Input }],
|
|
1091
1112
|
maxDate: [{ type: Input }],
|
|
1092
1113
|
dateFilter: [{ type: Input }],
|
|
1114
|
+
dateClass: [{ type: Input }],
|
|
1093
1115
|
selectedChange: [{ type: Output }],
|
|
1094
1116
|
yearSelected: [{ type: Output }],
|
|
1095
1117
|
activeDateChange: [{ type: Output }],
|
|
@@ -1155,11 +1177,13 @@ class MatYearView {
|
|
|
1155
1177
|
this.monthSelected = new EventEmitter();
|
|
1156
1178
|
/** Emits when any date is activated. */
|
|
1157
1179
|
this.activeDateChange = new EventEmitter();
|
|
1158
|
-
if (
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1180
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
1181
|
+
if (!this._dateAdapter) {
|
|
1182
|
+
throw createMissingDateImplError('DateAdapter');
|
|
1183
|
+
}
|
|
1184
|
+
if (!this._dateFormats) {
|
|
1185
|
+
throw createMissingDateImplError('MAT_DATE_FORMATS');
|
|
1186
|
+
}
|
|
1163
1187
|
}
|
|
1164
1188
|
this._activeDate = this._dateAdapter.today();
|
|
1165
1189
|
}
|
|
@@ -1167,7 +1191,7 @@ class MatYearView {
|
|
|
1167
1191
|
get activeDate() { return this._activeDate; }
|
|
1168
1192
|
set activeDate(value) {
|
|
1169
1193
|
let oldActiveDate = this._activeDate;
|
|
1170
|
-
const validDate = this.
|
|
1194
|
+
const validDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value)) || this._dateAdapter.today();
|
|
1171
1195
|
this._activeDate = this._dateAdapter.clampDate(validDate, this.minDate, this.maxDate);
|
|
1172
1196
|
if (this._dateAdapter.getYear(oldActiveDate) !== this._dateAdapter.getYear(this._activeDate)) {
|
|
1173
1197
|
this._init();
|
|
@@ -1180,19 +1204,19 @@ class MatYearView {
|
|
|
1180
1204
|
this._selected = value;
|
|
1181
1205
|
}
|
|
1182
1206
|
else {
|
|
1183
|
-
this._selected = this.
|
|
1207
|
+
this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1184
1208
|
}
|
|
1185
1209
|
this._setSelectedMonth(value);
|
|
1186
1210
|
}
|
|
1187
1211
|
/** The minimum selectable date. */
|
|
1188
1212
|
get minDate() { return this._minDate; }
|
|
1189
1213
|
set minDate(value) {
|
|
1190
|
-
this._minDate = this.
|
|
1214
|
+
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1191
1215
|
}
|
|
1192
1216
|
/** The maximum selectable date. */
|
|
1193
1217
|
get maxDate() { return this._maxDate; }
|
|
1194
1218
|
set maxDate(value) {
|
|
1195
|
-
this._maxDate = this.
|
|
1219
|
+
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1196
1220
|
}
|
|
1197
1221
|
ngAfterContentInit() {
|
|
1198
1222
|
this._rerenderSubscription = this._dateAdapter.localeChanges
|
|
@@ -1283,8 +1307,10 @@ class MatYearView {
|
|
|
1283
1307
|
}
|
|
1284
1308
|
/** Creates an MatCalendarCell for the given month. */
|
|
1285
1309
|
_createCellForMonth(month, monthName) {
|
|
1286
|
-
|
|
1287
|
-
|
|
1310
|
+
const date = this._dateAdapter.createDate(this._dateAdapter.getYear(this.activeDate), month, 1);
|
|
1311
|
+
const ariaLabel = this._dateAdapter.format(date, this._dateFormats.display.monthYearA11yLabel);
|
|
1312
|
+
const cellClasses = this.dateClass ? this.dateClass(date, 'year') : undefined;
|
|
1313
|
+
return new MatCalendarCell(month, monthName.toLocaleUpperCase(), ariaLabel, this._shouldEnableMonth(month), cellClasses);
|
|
1288
1314
|
}
|
|
1289
1315
|
/** Whether the given month is enabled. */
|
|
1290
1316
|
_shouldEnableMonth(month) {
|
|
@@ -1330,13 +1356,6 @@ class MatYearView {
|
|
|
1330
1356
|
}
|
|
1331
1357
|
return false;
|
|
1332
1358
|
}
|
|
1333
|
-
/**
|
|
1334
|
-
* @param obj The object to check.
|
|
1335
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
1336
|
-
*/
|
|
1337
|
-
_getValidDateOrNull(obj) {
|
|
1338
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
1339
|
-
}
|
|
1340
1359
|
/** Determines whether the user has the RTL layout direction. */
|
|
1341
1360
|
_isRtl() {
|
|
1342
1361
|
return this._dir && this._dir.value === 'rtl';
|
|
@@ -1373,6 +1392,7 @@ MatYearView.propDecorators = {
|
|
|
1373
1392
|
minDate: [{ type: Input }],
|
|
1374
1393
|
maxDate: [{ type: Input }],
|
|
1375
1394
|
dateFilter: [{ type: Input }],
|
|
1395
|
+
dateClass: [{ type: Input }],
|
|
1376
1396
|
selectedChange: [{ type: Output }],
|
|
1377
1397
|
monthSelected: [{ type: Output }],
|
|
1378
1398
|
activeDateChange: [{ type: Output }],
|
|
@@ -1531,11 +1551,13 @@ class MatCalendar {
|
|
|
1531
1551
|
* Emits whenever there is a state change that the header may need to respond to.
|
|
1532
1552
|
*/
|
|
1533
1553
|
this.stateChanges = new Subject();
|
|
1534
|
-
if (
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1554
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
1555
|
+
if (!this._dateAdapter) {
|
|
1556
|
+
throw createMissingDateImplError('DateAdapter');
|
|
1557
|
+
}
|
|
1558
|
+
if (!this._dateFormats) {
|
|
1559
|
+
throw createMissingDateImplError('MAT_DATE_FORMATS');
|
|
1560
|
+
}
|
|
1539
1561
|
}
|
|
1540
1562
|
this._intlChanges = _intl.changes.subscribe(() => {
|
|
1541
1563
|
_changeDetectorRef.markForCheck();
|
|
@@ -1545,7 +1567,7 @@ class MatCalendar {
|
|
|
1545
1567
|
/** A date representing the period (month or year) to start the calendar in. */
|
|
1546
1568
|
get startAt() { return this._startAt; }
|
|
1547
1569
|
set startAt(value) {
|
|
1548
|
-
this._startAt = this.
|
|
1570
|
+
this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1549
1571
|
}
|
|
1550
1572
|
/** The currently selected date. */
|
|
1551
1573
|
get selected() { return this._selected; }
|
|
@@ -1554,18 +1576,18 @@ class MatCalendar {
|
|
|
1554
1576
|
this._selected = value;
|
|
1555
1577
|
}
|
|
1556
1578
|
else {
|
|
1557
|
-
this._selected = this.
|
|
1579
|
+
this._selected = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1558
1580
|
}
|
|
1559
1581
|
}
|
|
1560
1582
|
/** The minimum selectable date. */
|
|
1561
1583
|
get minDate() { return this._minDate; }
|
|
1562
1584
|
set minDate(value) {
|
|
1563
|
-
this._minDate = this.
|
|
1585
|
+
this._minDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1564
1586
|
}
|
|
1565
1587
|
/** The maximum selectable date. */
|
|
1566
1588
|
get maxDate() { return this._maxDate; }
|
|
1567
1589
|
set maxDate(value) {
|
|
1568
|
-
this._maxDate = this.
|
|
1590
|
+
this._maxDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1569
1591
|
}
|
|
1570
1592
|
/**
|
|
1571
1593
|
* The current active date. This determines which time period is shown and which date is
|
|
@@ -1655,13 +1677,6 @@ class MatCalendar {
|
|
|
1655
1677
|
this.activeDate = date;
|
|
1656
1678
|
this.currentView = view;
|
|
1657
1679
|
}
|
|
1658
|
-
/**
|
|
1659
|
-
* @param obj The object to check.
|
|
1660
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
1661
|
-
*/
|
|
1662
|
-
_getValidDateOrNull(obj) {
|
|
1663
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
1664
|
-
}
|
|
1665
1680
|
/** Returns the component instance that corresponds to the current calendar view. */
|
|
1666
1681
|
_getCurrentViewComponent() {
|
|
1667
1682
|
return this.monthView || this.yearView || this.multiYearView;
|
|
@@ -1670,7 +1685,7 @@ class MatCalendar {
|
|
|
1670
1685
|
MatCalendar.decorators = [
|
|
1671
1686
|
{ type: Component, args: [{
|
|
1672
1687
|
selector: 'mat-calendar',
|
|
1673
|
-
template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" [ngSwitch]=\"currentView\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n <mat-month-view\n *ngSwitchCase=\"'month'\"\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 (_userSelection)=\"_dateSelected($event)\">\n </mat-month-view>\n\n <mat-year-view\n *ngSwitchCase=\"'year'\"\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n (monthSelected)=\"_monthSelectedInYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'month')\">\n </mat-year-view>\n\n <mat-multi-year-view\n *ngSwitchCase=\"'multi-year'\"\n [(activeDate)]=\"activeDate\"\n [selected]=\"selected\"\n [dateFilter]=\"dateFilter\"\n [maxDate]=\"maxDate\"\n [minDate]=\"minDate\"\n (yearSelected)=\"_yearSelectedInMultiYearView($event)\"\n (selectedChange)=\"_goToDateInView($event, 'year')\">\n </mat-multi-year-view>\n</div>\n",
|
|
1688
|
+
template: "<ng-template [cdkPortalOutlet]=\"_calendarHeaderPortal\"></ng-template>\n\n<div class=\"mat-calendar-content\" [ngSwitch]=\"currentView\" cdkMonitorSubtreeFocus tabindex=\"-1\">\n <mat-month-view\n *ngSwitchCase=\"'month'\"\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 (_userSelection)=\"_dateSelected($event)\">\n </mat-month-view>\n\n <mat-year-view\n *ngSwitchCase=\"'year'\"\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')\">\n </mat-year-view>\n\n <mat-multi-year-view\n *ngSwitchCase=\"'multi-year'\"\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')\">\n </mat-multi-year-view>\n</div>\n",
|
|
1674
1689
|
host: {
|
|
1675
1690
|
'class': 'mat-calendar',
|
|
1676
1691
|
},
|
|
@@ -1849,7 +1864,7 @@ class MatDatepickerContent extends _MatDatepickerContentMixinBase {
|
|
|
1849
1864
|
MatDatepickerContent.decorators = [
|
|
1850
1865
|
{ type: Component, args: [{
|
|
1851
1866
|
selector: 'mat-datepicker-content',
|
|
1852
|
-
template: "<mat-calendar cdkTrapFocus\n [id]=\"datepicker.id\"\n [ngClass]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker.
|
|
1867
|
+
template: "<mat-calendar cdkTrapFocus\n [id]=\"datepicker.id\"\n [ngClass]=\"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 (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (_userSelection)=\"_handleUserSelection($event)\">\n</mat-calendar>\n",
|
|
1853
1868
|
host: {
|
|
1854
1869
|
'class': 'mat-datepicker-content',
|
|
1855
1870
|
'[@transformPanel]': '_animationState',
|
|
@@ -1915,9 +1930,11 @@ class MatDatepickerBase {
|
|
|
1915
1930
|
this.id = `mat-datepicker-${datepickerUid++}`;
|
|
1916
1931
|
/** The element that was focused before the datepicker was opened. */
|
|
1917
1932
|
this._focusedElementBeforeOpen = null;
|
|
1933
|
+
/** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
|
|
1934
|
+
this._backdropHarnessClass = `${this.id}-backdrop`;
|
|
1918
1935
|
/** Emits when the datepicker's state changes. */
|
|
1919
1936
|
this._stateChanges = new Subject();
|
|
1920
|
-
if (!this._dateAdapter) {
|
|
1937
|
+
if (!this._dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
1921
1938
|
throw createMissingDateImplError('DateAdapter');
|
|
1922
1939
|
}
|
|
1923
1940
|
this._scrollStrategy = scrollStrategy;
|
|
@@ -1929,7 +1946,7 @@ class MatDatepickerBase {
|
|
|
1929
1946
|
return this._startAt || (this._datepickerInput ? this._datepickerInput.getStartValue() : null);
|
|
1930
1947
|
}
|
|
1931
1948
|
set startAt(value) {
|
|
1932
|
-
this._startAt = this.
|
|
1949
|
+
this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
1933
1950
|
}
|
|
1934
1951
|
/** Color palette to use on the datepicker's calendar. */
|
|
1935
1952
|
get color() {
|
|
@@ -1961,16 +1978,18 @@ class MatDatepickerBase {
|
|
|
1961
1978
|
}
|
|
1962
1979
|
/** Whether the calendar is open. */
|
|
1963
1980
|
get opened() { return this._opened; }
|
|
1964
|
-
set opened(value) {
|
|
1981
|
+
set opened(value) {
|
|
1982
|
+
coerceBooleanProperty(value) ? this.open() : this.close();
|
|
1983
|
+
}
|
|
1965
1984
|
/** The minimum selectable date. */
|
|
1966
|
-
|
|
1985
|
+
_getMinDate() {
|
|
1967
1986
|
return this._datepickerInput && this._datepickerInput.min;
|
|
1968
1987
|
}
|
|
1969
1988
|
/** The maximum selectable date. */
|
|
1970
|
-
|
|
1989
|
+
_getMaxDate() {
|
|
1971
1990
|
return this._datepickerInput && this._datepickerInput.max;
|
|
1972
1991
|
}
|
|
1973
|
-
|
|
1992
|
+
_getDateFilter() {
|
|
1974
1993
|
return this._datepickerInput && this._datepickerInput.dateFilter;
|
|
1975
1994
|
}
|
|
1976
1995
|
ngOnChanges(changes) {
|
|
@@ -2007,7 +2026,7 @@ class MatDatepickerBase {
|
|
|
2007
2026
|
* @returns Selection model that the input should hook itself up to.
|
|
2008
2027
|
*/
|
|
2009
2028
|
_registerInput(input) {
|
|
2010
|
-
if (this._datepickerInput) {
|
|
2029
|
+
if (this._datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
2011
2030
|
throw Error('A MatDatepicker can only be associated with a single input.');
|
|
2012
2031
|
}
|
|
2013
2032
|
this._inputStateChanges.unsubscribe();
|
|
@@ -2021,7 +2040,7 @@ class MatDatepickerBase {
|
|
|
2021
2040
|
if (this._opened || this.disabled) {
|
|
2022
2041
|
return;
|
|
2023
2042
|
}
|
|
2024
|
-
if (!this._datepickerInput) {
|
|
2043
|
+
if (!this._datepickerInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
2025
2044
|
throw Error('Attempted to open an MatDatepicker with no associated input.');
|
|
2026
2045
|
}
|
|
2027
2046
|
if (this._document) {
|
|
@@ -2085,6 +2104,7 @@ class MatDatepickerBase {
|
|
|
2085
2104
|
// datepicker dialog behaves consistently even if the user changed the defaults.
|
|
2086
2105
|
hasBackdrop: true,
|
|
2087
2106
|
disableClose: false,
|
|
2107
|
+
backdropClass: ['cdk-overlay-dark-backdrop', this._backdropHarnessClass],
|
|
2088
2108
|
width: '',
|
|
2089
2109
|
height: '',
|
|
2090
2110
|
minWidth: '',
|
|
@@ -2112,7 +2132,7 @@ class MatDatepickerBase {
|
|
|
2112
2132
|
this._popupComponentRef = this._popupRef.attach(portal);
|
|
2113
2133
|
this._forwardContentValues(this._popupComponentRef.instance);
|
|
2114
2134
|
// Update the position once the calendar has rendered.
|
|
2115
|
-
this._ngZone.onStable.
|
|
2135
|
+
this._ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
2116
2136
|
this._popupRef.updatePosition();
|
|
2117
2137
|
});
|
|
2118
2138
|
}
|
|
@@ -2132,7 +2152,7 @@ class MatDatepickerBase {
|
|
|
2132
2152
|
const overlayConfig = new OverlayConfig({
|
|
2133
2153
|
positionStrategy: this._setConnectedPositions(positionStrategy),
|
|
2134
2154
|
hasBackdrop: true,
|
|
2135
|
-
backdropClass: 'mat-overlay-transparent-backdrop',
|
|
2155
|
+
backdropClass: ['mat-overlay-transparent-backdrop', this._backdropHarnessClass],
|
|
2136
2156
|
direction: this._dir,
|
|
2137
2157
|
scrollStrategy: this._scrollStrategy(),
|
|
2138
2158
|
panelClass: 'mat-datepicker-popup',
|
|
@@ -2190,13 +2210,6 @@ class MatDatepickerBase {
|
|
|
2190
2210
|
}
|
|
2191
2211
|
]);
|
|
2192
2212
|
}
|
|
2193
|
-
/**
|
|
2194
|
-
* @param obj The object to check.
|
|
2195
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
2196
|
-
*/
|
|
2197
|
-
_getValidDateOrNull(obj) {
|
|
2198
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
2199
|
-
}
|
|
2200
2213
|
}
|
|
2201
2214
|
MatDatepickerBase.decorators = [
|
|
2202
2215
|
{ type: Directive }
|
|
@@ -2303,14 +2316,14 @@ class MatDatepickerInputBase {
|
|
|
2303
2316
|
};
|
|
2304
2317
|
/** The form control validator for the date filter. */
|
|
2305
2318
|
this._filterValidator = (control) => {
|
|
2306
|
-
const controlValue = this.
|
|
2319
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2307
2320
|
const dateFilter = this._getDateFilter();
|
|
2308
2321
|
return !dateFilter || !controlValue || dateFilter(controlValue) ?
|
|
2309
2322
|
null : { 'matDatepickerFilter': true };
|
|
2310
2323
|
};
|
|
2311
2324
|
/** The form control validator for the min date. */
|
|
2312
2325
|
this._minValidator = (control) => {
|
|
2313
|
-
const controlValue = this.
|
|
2326
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2314
2327
|
const min = this._getMinDate();
|
|
2315
2328
|
return (!min || !controlValue ||
|
|
2316
2329
|
this._dateAdapter.compareDate(min, controlValue) <= 0) ?
|
|
@@ -2318,7 +2331,7 @@ class MatDatepickerInputBase {
|
|
|
2318
2331
|
};
|
|
2319
2332
|
/** The form control validator for the max date. */
|
|
2320
2333
|
this._maxValidator = (control) => {
|
|
2321
|
-
const controlValue = this.
|
|
2334
|
+
const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2322
2335
|
const max = this._getMaxDate();
|
|
2323
2336
|
return (!max || !controlValue ||
|
|
2324
2337
|
this._dateAdapter.compareDate(max, controlValue) >= 0) ?
|
|
@@ -2326,11 +2339,13 @@ class MatDatepickerInputBase {
|
|
|
2326
2339
|
};
|
|
2327
2340
|
/** Whether the last value set on the input was valid. */
|
|
2328
2341
|
this._lastValueValid = false;
|
|
2329
|
-
if (
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
|
|
2333
|
-
|
|
2342
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
2343
|
+
if (!this._dateAdapter) {
|
|
2344
|
+
throw createMissingDateImplError('DateAdapter');
|
|
2345
|
+
}
|
|
2346
|
+
if (!this._dateFormats) {
|
|
2347
|
+
throw createMissingDateImplError('MAT_DATE_FORMATS');
|
|
2348
|
+
}
|
|
2334
2349
|
}
|
|
2335
2350
|
// Update the displayed date when the locale changes.
|
|
2336
2351
|
this._localeSubscription = _dateAdapter.localeChanges.subscribe(() => {
|
|
@@ -2344,7 +2359,7 @@ class MatDatepickerInputBase {
|
|
|
2344
2359
|
set value(value) {
|
|
2345
2360
|
value = this._dateAdapter.deserialize(value);
|
|
2346
2361
|
this._lastValueValid = this._isValidValue(value);
|
|
2347
|
-
value = this.
|
|
2362
|
+
value = this._dateAdapter.getValidDateOrNull(value);
|
|
2348
2363
|
const oldDate = this.value;
|
|
2349
2364
|
this._assignValue(value);
|
|
2350
2365
|
this._formatValue(value);
|
|
@@ -2450,7 +2465,7 @@ class MatDatepickerInputBase {
|
|
|
2450
2465
|
const lastValueWasValid = this._lastValueValid;
|
|
2451
2466
|
let date = this._dateAdapter.parse(value, this._dateFormats.parse.dateInput);
|
|
2452
2467
|
this._lastValueValid = this._isValidValue(date);
|
|
2453
|
-
date = this.
|
|
2468
|
+
date = this._dateAdapter.getValidDateOrNull(date);
|
|
2454
2469
|
if (!this._dateAdapter.sameDate(date, this.value)) {
|
|
2455
2470
|
this._assignValue(date);
|
|
2456
2471
|
this._cvaOnChange(date);
|
|
@@ -2484,13 +2499,6 @@ class MatDatepickerInputBase {
|
|
|
2484
2499
|
this._elementRef.nativeElement.value =
|
|
2485
2500
|
value ? this._dateAdapter.format(value, this._dateFormats.display.dateInput) : '';
|
|
2486
2501
|
}
|
|
2487
|
-
/**
|
|
2488
|
-
* @param obj The object to check.
|
|
2489
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
2490
|
-
*/
|
|
2491
|
-
_getValidDateOrNull(obj) {
|
|
2492
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
2493
|
-
}
|
|
2494
2502
|
/** Assigns a value to the model. */
|
|
2495
2503
|
_assignValue(value) {
|
|
2496
2504
|
// We may get some incoming values before the model was
|
|
@@ -2566,13 +2574,13 @@ class MatDatepickerInput extends MatDatepickerInputBase {
|
|
|
2566
2574
|
/** The minimum valid date. */
|
|
2567
2575
|
get min() { return this._min; }
|
|
2568
2576
|
set min(value) {
|
|
2569
|
-
this._min = this.
|
|
2577
|
+
this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2570
2578
|
this._validatorOnChange();
|
|
2571
2579
|
}
|
|
2572
2580
|
/** The maximum valid date. */
|
|
2573
2581
|
get max() { return this._max; }
|
|
2574
2582
|
set max(value) {
|
|
2575
|
-
this._max = this.
|
|
2583
|
+
this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
2576
2584
|
this._validatorOnChange();
|
|
2577
2585
|
}
|
|
2578
2586
|
/** Function that can be used to filter out dates within the datepicker. */
|
|
@@ -2642,10 +2650,14 @@ MatDatepickerInput.decorators = [
|
|
|
2642
2650
|
{ provide: MAT_INPUT_VALUE_ACCESSOR, useExisting: MatDatepickerInput },
|
|
2643
2651
|
],
|
|
2644
2652
|
host: {
|
|
2653
|
+
'class': 'mat-datepicker-input',
|
|
2645
2654
|
'[attr.aria-haspopup]': '_datepicker ? "dialog" : null',
|
|
2646
2655
|
'[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',
|
|
2647
2656
|
'[attr.min]': 'min ? _dateAdapter.toIso8601(min) : null',
|
|
2648
2657
|
'[attr.max]': 'max ? _dateAdapter.toIso8601(max) : null',
|
|
2658
|
+
// Used by the test harness to tie this input to its calendar. We can't depend on
|
|
2659
|
+
// `aria-owns` for this, because it's only defined while the calendar is open.
|
|
2660
|
+
'[attr.data-mat-calendar]': '_datepicker ? _datepicker.id : null',
|
|
2649
2661
|
'[disabled]': 'disabled',
|
|
2650
2662
|
'(input)': '_onInput($event.target.value)',
|
|
2651
2663
|
'(change)': '_onChange()',
|
|
@@ -2741,6 +2753,8 @@ MatDatepickerToggle.decorators = [
|
|
|
2741
2753
|
'[class.mat-datepicker-toggle-active]': 'datepicker && datepicker.opened',
|
|
2742
2754
|
'[class.mat-accent]': 'datepicker && datepicker.color === "accent"',
|
|
2743
2755
|
'[class.mat-warn]': 'datepicker && datepicker.color === "warn"',
|
|
2756
|
+
// Used by the test harness to tie this toggle to its datepicker.
|
|
2757
|
+
'[attr.data-mat-calendar]': 'datepicker ? datepicker.id : null',
|
|
2744
2758
|
'(focus)': '_button.focus()',
|
|
2745
2759
|
},
|
|
2746
2760
|
exportAs: 'matDatepickerToggle',
|
|
@@ -2874,7 +2888,7 @@ class MatStartDate extends _MatDateRangeInputBase {
|
|
|
2874
2888
|
super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);
|
|
2875
2889
|
/** Validator that checks that the start date isn't after the end date. */
|
|
2876
2890
|
this._startValidator = (control) => {
|
|
2877
|
-
const start = this.
|
|
2891
|
+
const start = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2878
2892
|
const end = this._model ? this._model.selection.end : null;
|
|
2879
2893
|
return (!start || !end ||
|
|
2880
2894
|
this._dateAdapter.compareDate(start, end) <= 0) ?
|
|
@@ -2911,7 +2925,7 @@ MatStartDate.decorators = [
|
|
|
2911
2925
|
{ type: Directive, args: [{
|
|
2912
2926
|
selector: 'input[matStartDate]',
|
|
2913
2927
|
host: {
|
|
2914
|
-
'class': 'mat-date-range-input-inner',
|
|
2928
|
+
'class': 'mat-start-date mat-date-range-input-inner',
|
|
2915
2929
|
'[disabled]': 'disabled',
|
|
2916
2930
|
'(input)': '_onInput($event.target.value)',
|
|
2917
2931
|
'(change)': '_onChange()',
|
|
@@ -2949,7 +2963,7 @@ class MatEndDate extends _MatDateRangeInputBase {
|
|
|
2949
2963
|
super(rangeInput, elementRef, defaultErrorStateMatcher, injector, parentForm, parentFormGroup, dateAdapter, dateFormats);
|
|
2950
2964
|
/** Validator that checks that the end date isn't before the start date. */
|
|
2951
2965
|
this._endValidator = (control) => {
|
|
2952
|
-
const end = this.
|
|
2966
|
+
const end = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
|
|
2953
2967
|
const start = this._model ? this._model.selection.start : null;
|
|
2954
2968
|
return (!end || !start ||
|
|
2955
2969
|
this._dateAdapter.compareDate(end, start) >= 0) ?
|
|
@@ -2982,7 +2996,7 @@ MatEndDate.decorators = [
|
|
|
2982
2996
|
{ type: Directive, args: [{
|
|
2983
2997
|
selector: 'input[matEndDate]',
|
|
2984
2998
|
host: {
|
|
2985
|
-
'class': 'mat-date-range-input-inner',
|
|
2999
|
+
'class': 'mat-end-date mat-date-range-input-inner',
|
|
2986
3000
|
'[disabled]': 'disabled',
|
|
2987
3001
|
'(input)': '_onInput($event.target.value)',
|
|
2988
3002
|
'(change)': '_onChange()',
|
|
@@ -3039,7 +3053,10 @@ MatDateRangePicker.decorators = [
|
|
|
3039
3053
|
exportAs: 'matDateRangePicker',
|
|
3040
3054
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3041
3055
|
encapsulation: ViewEncapsulation.None,
|
|
3042
|
-
providers: [
|
|
3056
|
+
providers: [
|
|
3057
|
+
MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER,
|
|
3058
|
+
MAT_CALENDAR_RANGE_STRATEGY_PROVIDER,
|
|
3059
|
+
]
|
|
3043
3060
|
},] }
|
|
3044
3061
|
];
|
|
3045
3062
|
|
|
@@ -3076,7 +3093,7 @@ class MatDateRangeInput {
|
|
|
3076
3093
|
this.comparisonEnd = null;
|
|
3077
3094
|
/** Emits when the input's state changes. */
|
|
3078
3095
|
this._stateChanges = new Subject();
|
|
3079
|
-
if (!_dateAdapter) {
|
|
3096
|
+
if (!_dateAdapter && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
3080
3097
|
throw createMissingDateImplError('DateAdapter');
|
|
3081
3098
|
}
|
|
3082
3099
|
// TODO(crisbeto): remove `as any` after #18206 lands.
|
|
@@ -3124,13 +3141,13 @@ class MatDateRangeInput {
|
|
|
3124
3141
|
/** The minimum valid date. */
|
|
3125
3142
|
get min() { return this._min; }
|
|
3126
3143
|
set min(value) {
|
|
3127
|
-
this._min = this.
|
|
3144
|
+
this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
3128
3145
|
this._revalidate();
|
|
3129
3146
|
}
|
|
3130
3147
|
/** The maximum valid date. */
|
|
3131
3148
|
get max() { return this._max; }
|
|
3132
3149
|
set max(value) {
|
|
3133
|
-
this._max = this.
|
|
3150
|
+
this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
|
|
3134
3151
|
this._revalidate();
|
|
3135
3152
|
}
|
|
3136
3153
|
/** Whether the input is disabled. */
|
|
@@ -3181,11 +3198,13 @@ class MatDateRangeInput {
|
|
|
3181
3198
|
}
|
|
3182
3199
|
}
|
|
3183
3200
|
ngAfterContentInit() {
|
|
3184
|
-
if (
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3201
|
+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
3202
|
+
if (!this._startInput) {
|
|
3203
|
+
throw Error('mat-date-range-input must contain a matStartDate input');
|
|
3204
|
+
}
|
|
3205
|
+
if (!this._endInput) {
|
|
3206
|
+
throw Error('mat-date-range-input must contain a matEndDate input');
|
|
3207
|
+
}
|
|
3189
3208
|
}
|
|
3190
3209
|
if (this._model) {
|
|
3191
3210
|
this._registerModel(this._model);
|
|
@@ -3243,13 +3262,6 @@ class MatDateRangeInput {
|
|
|
3243
3262
|
const formField = this._formField;
|
|
3244
3263
|
return formField && formField._hasFloatingLabel() ? formField._labelId : null;
|
|
3245
3264
|
}
|
|
3246
|
-
/**
|
|
3247
|
-
* @param obj The object to check.
|
|
3248
|
-
* @returns The given object if it is both a date instance and valid, otherwise null.
|
|
3249
|
-
*/
|
|
3250
|
-
_getValidDateOrNull(obj) {
|
|
3251
|
-
return (this._dateAdapter.isDateInstance(obj) && this._dateAdapter.isValid(obj)) ? obj : null;
|
|
3252
|
-
}
|
|
3253
3265
|
/** Re-runs the validators on the start/end inputs. */
|
|
3254
3266
|
_revalidate() {
|
|
3255
3267
|
if (this._startInput) {
|
|
@@ -3277,10 +3289,14 @@ MatDateRangeInput.decorators = [
|
|
|
3277
3289
|
host: {
|
|
3278
3290
|
'class': 'mat-date-range-input',
|
|
3279
3291
|
'[class.mat-date-range-input-hide-placeholders]': '_shouldHidePlaceholders()',
|
|
3292
|
+
'[class.mat-date-range-input-required]': 'required',
|
|
3280
3293
|
'[attr.id]': 'null',
|
|
3281
3294
|
'role': 'group',
|
|
3282
3295
|
'[attr.aria-labelledby]': '_getAriaLabelledby()',
|
|
3283
3296
|
'[attr.aria-describedby]': '_ariaDescribedBy',
|
|
3297
|
+
// Used by the test harness to tie this input to its calendar. We can't depend on
|
|
3298
|
+
// `aria-owns` for this, because it's only defined while the calendar is open.
|
|
3299
|
+
'[attr.data-mat-calendar]': 'rangePicker ? rangePicker.id : null',
|
|
3284
3300
|
},
|
|
3285
3301
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3286
3302
|
encapsulation: ViewEncapsulation.None,
|
|
@@ -3368,11 +3384,7 @@ MatDatepickerModule.decorators = [
|
|
|
3368
3384
|
],
|
|
3369
3385
|
providers: [
|
|
3370
3386
|
MatDatepickerIntl,
|
|
3371
|
-
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
3372
|
-
{
|
|
3373
|
-
provide: MAT_DATE_RANGE_SELECTION_STRATEGY,
|
|
3374
|
-
useClass: DefaultMatCalendarRangeStrategy
|
|
3375
|
-
}
|
|
3387
|
+
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
3376
3388
|
],
|
|
3377
3389
|
entryComponents: [
|
|
3378
3390
|
MatDatepickerContent,
|
|
@@ -3393,5 +3405,5 @@ MatDatepickerModule.decorators = [
|
|
|
3393
3405
|
* Generated bundle index. Do not edit.
|
|
3394
3406
|
*/
|
|
3395
3407
|
|
|
3396
|
-
export { DateRange, DefaultMatCalendarRangeStrategy, MAT_DATEPICKER_SCROLL_STRATEGY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_DATEPICKER_VALIDATORS, MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATE_RANGE_SELECTION_STRATEGY, MAT_RANGE_DATE_SELECTION_MODEL_FACTORY, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, MatCalendar, MatCalendarBody, MatCalendarCell, MatCalendarHeader, MatDateRangeInput, MatDateRangePicker, MatDateSelectionModel, MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatDatepickerInputEvent, MatDatepickerIntl, MatDatepickerModule, MatDatepickerToggle, MatDatepickerToggleIcon, MatEndDate, MatMonthView, MatMultiYearView, MatRangeDateSelectionModel, MatSingleDateSelectionModel, MatStartDate, MatYearView, matDatepickerAnimations, yearsPerPage, yearsPerRow,
|
|
3408
|
+
export { DateRange, DefaultMatCalendarRangeStrategy, MAT_DATEPICKER_SCROLL_STRATEGY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY, MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MAT_DATEPICKER_VALIDATORS, MAT_DATEPICKER_VALUE_ACCESSOR, MAT_DATE_RANGE_SELECTION_STRATEGY, MAT_RANGE_DATE_SELECTION_MODEL_FACTORY, MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER, MAT_SINGLE_DATE_SELECTION_MODEL_FACTORY, MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER, MatCalendar, MatCalendarBody, MatCalendarCell, MatCalendarHeader, MatDateRangeInput, MatDateRangePicker, MatDateSelectionModel, MatDatepicker, MatDatepickerContent, MatDatepickerInput, MatDatepickerInputEvent, MatDatepickerIntl, MatDatepickerModule, MatDatepickerToggle, MatDatepickerToggleIcon, MatEndDate, MatMonthView, MatMultiYearView, MatRangeDateSelectionModel, MatSingleDateSelectionModel, MatStartDate, MatYearView, matDatepickerAnimations, yearsPerPage, yearsPerRow, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER_FACTORY as ɵangular_material_src_material_datepicker_datepicker_a, MAT_CALENDAR_RANGE_STRATEGY_PROVIDER as ɵangular_material_src_material_datepicker_datepicker_b, MatDatepickerBase as ɵangular_material_src_material_datepicker_datepicker_c, MatDatepickerInputBase as ɵangular_material_src_material_datepicker_datepicker_d, MAT_DATE_RANGE_INPUT_PARENT as ɵangular_material_src_material_datepicker_datepicker_e };
|
|
3397
3409
|
//# sourceMappingURL=datepicker.js.map
|