@use '@angular/cdk'; @use '../core/focus-indicators/private'; @use '../core/tokens/m2/mat/datepicker' as tokens-mat-datepicker; @use '../core/tokens/token-utils'; $calendar-padding: 8px !default; $calendar-header-divider-width: 1px !default; $calendar-controls-vertical-padding: 5%; // We use the same padding as the month / year label, but subtract 16px since there is padding // between the edge of the button and the text. This ensures that the button text lines up with // the month / year label text. $calendar-controls-side-margin: calc(33% / 7 - 16px); $calendar-arrow-size: 5px !default; $calendar-arrow-disabled-opacity: 0.5 !default; $_tokens: tokens-mat-datepicker.$prefix, tokens-mat-datepicker.get-token-slots(); .mat-calendar { display: block; // Prevents layout issues if the line height bleeds in from the body (see #29756). line-height: normal; @include token-utils.use-tokens($_tokens...) { @include token-utils.create-token-slot(font-family, calendar-text-font); @include token-utils.create-token-slot(font-size, calendar-text-size); } } .mat-calendar-header { padding: $calendar-padding $calendar-padding 0 $calendar-padding; } .mat-calendar-content { padding: 0 $calendar-padding $calendar-padding $calendar-padding; outline: none; } .mat-calendar-controls { display: flex; align-items: center; margin: $calendar-controls-vertical-padding $calendar-controls-side-margin; } .mat-calendar-spacer { flex: 1 1 auto; } .mat-calendar-period-button { min-width: 0; margin: 0 8px; @include token-utils.use-tokens($_tokens...) { @include token-utils.create-token-slot(font-size, calendar-period-button-text-size); @include token-utils.create-token-slot(font-weight, calendar-period-button-text-weight); @include token-utils.create-token-slot(--mdc-text-button-label-text-color, calendar-period-button-text-color); } } .mat-calendar-arrow { display: inline-block; width: $calendar-arrow-size * 2; height: $calendar-arrow-size; margin: 0 0 0 $calendar-arrow-size; vertical-align: middle; @include token-utils.use-tokens($_tokens...) { @include token-utils.create-token-slot(fill, calendar-period-button-icon-color); } &.mat-calendar-invert { transform: rotate(180deg); } [dir='rtl'] & { margin: 0 $calendar-arrow-size 0 0; } @include cdk.high-contrast { // Setting the fill to `currentColor` doesn't work on Chromium browsers. fill: CanvasText; } } .mat-calendar-previous-button, .mat-calendar-next-button { @include token-utils.use-tokens($_tokens...) { // Needs need a bit more specificity to avoid being overwritten by the .mat-icon-button. .mat-datepicker-content &:not(.mat-mdc-button-disabled) { @include token-utils.create-token-slot(color, calendar-navigation-button-icon-color); } } [dir='rtl'] & { 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 $calendar-padding 0; @include token-utils.use-tokens($_tokens...) { @include token-utils.create-token-slot(color, calendar-header-text-color); @include token-utils.create-token-slot(font-size, calendar-header-text-size); @include token-utils.create-token-slot(font-weight, calendar-header-text-weight); } } .mat-calendar-table-header-divider { position: relative; height: $calendar-header-divider-width; // We use an absolutely positioned pseudo-element as the divider line for the table header so we // can extend it all the way to the edge of the calendar. &::after { content: ''; position: absolute; top: 0; left: -$calendar-padding; right: -$calendar-padding; height: $calendar-header-divider-width; @include token-utils.use-tokens($_tokens...) { @include token-utils.create-token-slot(background, calendar-header-divider-color); } } } // For the calendar element, default inset/offset values are necessary to ensure that // the focus indicator is sufficiently contrastive and renders appropriately. .mat-calendar-body-cell-content::before { $border-width: var(--mat-focus-indicator-border-width, #{private.$default-border-width}); $offset: calc(#{$border-width} + 3px); margin: calc(#{$offset} * -1); } // For calendar cells, render the focus indicator when the parent cell is // focused. .mat-calendar-body-cell:focus .mat-focus-indicator::before { content: ''; }