You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

180 lines
5.6 KiB

@use 'sass:map';
@use '../core/theming/theming';
@use '../core/typography/typography';
@use '../core/typography/typography-utils';
@mixin color($config-or-theme) {
$config: theming.get-color-config($config-or-theme);
$primary: map.get($config, primary);
$accent: map.get($config, accent);
$warn: map.get($config, warn);
$background: map.get($config, background);
$foreground: map.get($config, foreground);
$header-border: 1px solid theming.get-color-from-palette($foreground, divider);
.mat-tab-nav-bar,
.mat-tab-header {
border-bottom: $header-border;
}
.mat-tab-group-inverted-header {
.mat-tab-nav-bar,
.mat-tab-header {
border-top: $header-border;
border-bottom: none;
}
}
.mat-tab-label, .mat-tab-link {
color: theming.get-color-from-palette($foreground, text);
&.mat-tab-disabled {
color: theming.get-color-from-palette($foreground, disabled-text);
}
}
.mat-tab-header-pagination-chevron {
border-color: theming.get-color-from-palette($foreground, text);
}
.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {
border-color: theming.get-color-from-palette($foreground, disabled-text);
}
// Remove header border when there is a background color
.mat-tab-group[class*='mat-background-'] > .mat-tab-header,
.mat-tab-nav-bar[class*='mat-background-'] {
border-bottom: none;
border-top: none;
}
.mat-tab-group, .mat-tab-nav-bar {
$theme-colors: (
primary: $primary,
accent: $accent,
warn: $warn
);
@each $name, $color in $theme-colors {
// Set the foreground color of the tabs
&.mat-#{$name} {
@include _label-focus-color($color);
@include _ink-bar-color($color);
// Override ink bar when background color is the same
&.mat-background-#{$name} {
> .mat-tab-header, > .mat-tab-link-container {
@include _ink-bar-color($color, default-contrast);
}
}
}
}
@each $name, $color in $theme-colors {
// Set background color of the tabs and override focus color
&.mat-background-#{$name} {
@include _label-focus-color($color);
@include _tabs-background($color);
}
}
}
}
@mixin _ink-bar-color($color, $hue: default) {
.mat-ink-bar {
background-color: theming.get-color-from-palette($color, $hue);
}
}
@mixin _label-focus-color($tab-focus-color) {
.mat-tab-label,
.mat-tab-link {
&.cdk-keyboard-focused,
&.cdk-program-focused {
&:not(.mat-tab-disabled) {
background-color: theming.get-color-from-palette($tab-focus-color, lighter, 0.3);
}
}
}
}
@mixin _tabs-background($background-color) {
// Note that these selectors target direct descendants so
// that the styles don't apply to any nested tab groups.
// Set background color for the tab group
> .mat-tab-header, > .mat-tab-link-container, > .mat-tab-header-pagination {
background-color: theming.get-color-from-palette($background-color);
}
// Set labels to contrast against background
> .mat-tab-header .mat-tab-label, > .mat-tab-link-container .mat-tab-link {
color: theming.get-color-from-palette($background-color, default-contrast);
&.mat-tab-disabled {
color: theming.get-color-from-palette($background-color, default-contrast, 0.4);
}
}
// Set pagination chevrons to contrast background
> .mat-tab-header .mat-tab-header-pagination-chevron,
> .mat-tab-header-pagination .mat-tab-header-pagination-chevron,
> .mat-tab-link-container .mat-focus-indicator::before,
> .mat-tab-header .mat-focus-indicator::before {
border-color: theming.get-color-from-palette($background-color, default-contrast);
}
> .mat-tab-header .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,
> .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron {
// Set the color opacity via `opacity`, rather than `rgba`, because it may be a CSS variable.
border-color: theming.get-color-from-palette($background-color, default-contrast, 1);
opacity: 0.4;
}
// Set ripples color to be the contrast color of the new background. Otherwise the ripple
// color will be based on the app background color.
> .mat-tab-header .mat-ripple-element,
> .mat-tab-link-container .mat-ripple-element,
> .mat-tab-header-pagination .mat-ripple-element {
// Set the color opacity via `opacity`, rather than `rgba`, because it may be a CSS variable.
background-color: theming.get-color-from-palette($background-color, default-contrast, 1);
opacity: 0.12;
}
}
@mixin typography($config-or-theme) {
$config: typography.private-typography-to-2014-config(
theming.get-typography-config($config-or-theme));
.mat-tab-group {
font-family: typography-utils.font-family($config);
}
.mat-tab-label, .mat-tab-link {
font: {
family: typography-utils.font-family($config, button);
size: typography-utils.font-size($config, button);
weight: typography-utils.font-weight($config, button);
}
}
}
@mixin _density($config-or-theme) {}
@mixin theme($theme-or-color-config) {
$theme: theming.private-legacy-get-theme($theme-or-color-config);
@include theming.private-check-duplicate-theme-styles($theme, 'mat-tabs') {
$color: theming.get-color-config($theme);
$density: theming.get-density-config($theme);
$typography: theming.get-typography-config($theme);
@if $color != null {
@include color($color);
}
@if $density != null {
@include _density($density);
}
@if $typography != null {
@include typography($typography);
}
}
}