diff --git a/.stylelintrc.json b/.stylelintrc.json index de474c7bab1c..19c2d5615ce8 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -10,7 +10,8 @@ "./tools/stylelint/no-top-level-ampersand-in-mixin.ts", "./tools/stylelint/theme-mixin-api.ts", "./tools/stylelint/no-import.ts", - "./tools/stylelint/single-line-comment-only.ts" + "./tools/stylelint/single-line-comment-only.ts", + "./tools/stylelint/no-unused-import.ts" ], "rules": { "material/no-prefixes": [true, { @@ -20,6 +21,7 @@ "material/theme-mixin-api": true, "material/selector-no-deep": true, "material/no-nested-mixin": true, + "material/no-unused-import": true, "material/single-line-comment-only": [true, { "filePattern": "\\.scss$" }], diff --git a/src/material-experimental/column-resize/_column-resize-theme.scss b/src/material-experimental/column-resize/_column-resize-theme.scss index 609842ff9a06..c88c47b1859e 100644 --- a/src/material-experimental/column-resize/_column-resize-theme.scss +++ b/src/material-experimental/column-resize/_column-resize-theme.scss @@ -1,7 +1,6 @@ @use 'sass:map'; @use '../../material/core/style/variables'; @use '../../material/core/style/vendor-prefixes'; -@use '../../material/core/theming/palette'; @use '../../material/core/theming/theming'; @mixin color($config-or-theme) { diff --git a/src/material-experimental/mdc-autocomplete/autocomplete.scss b/src/material-experimental/mdc-autocomplete/autocomplete.scss index a512daff86d0..e1045195a660 100644 --- a/src/material-experimental/mdc-autocomplete/autocomplete.scss +++ b/src/material-experimental/mdc-autocomplete/autocomplete.scss @@ -1,7 +1,6 @@ @use '@material/menu-surface/mixins' as mdc-menu-surface; @use '@material/list/mixins' as mdc-list; @use '../../cdk/a11y'; -@use '../mdc-helpers/mdc-helpers'; @include mdc-menu-surface.core-styles($query: structure); diff --git a/src/material-experimental/mdc-checkbox/checkbox.scss b/src/material-experimental/mdc-checkbox/checkbox.scss index 48b140ab0863..b0f8c7b671f6 100644 --- a/src/material-experimental/mdc-checkbox/checkbox.scss +++ b/src/material-experimental/mdc-checkbox/checkbox.scss @@ -1,5 +1,4 @@ @use '@material/checkbox' as mdc-checkbox; -@use '@material/checkbox/checkbox-theme' as mdc-checkbox-theme; @use '@material/form-field' as mdc-form-field; @use '@material/ripple' as mdc-ripple; @use 'sass:map'; diff --git a/src/material-experimental/mdc-form-field/_form-field-native-select.scss b/src/material-experimental/mdc-form-field/_form-field-native-select.scss index b65477800db3..0a1b04feaecf 100644 --- a/src/material-experimental/mdc-form-field/_form-field-native-select.scss +++ b/src/material-experimental/mdc-form-field/_form-field-native-select.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use '../mdc-helpers/mdc-helpers'; -@use '../../material/core/theming/theming'; @use '../../cdk/a11y'; @use '../../material/core/theming/palette'; @use '@material/theme/theme-color' as mdc-theme-color; diff --git a/src/material-experimental/mdc-form-field/_form-field-theme.scss b/src/material-experimental/mdc-form-field/_form-field-theme.scss index ac28c78d2b98..7af35ef8bfa8 100644 --- a/src/material-experimental/mdc-form-field/_form-field-theme.scss +++ b/src/material-experimental/mdc-form-field/_form-field-theme.scss @@ -1,4 +1,3 @@ -@use '@material/ripple/mixins' as mdc-ripple; @use '@material/textfield' as mdc-textfield; @use '@material/floating-label' as mdc-floating-label; @use '@material/notched-outline' as mdc-notched-outline; diff --git a/src/material-experimental/mdc-form-field/_mdc-text-field-textarea-overrides.scss b/src/material-experimental/mdc-form-field/_mdc-text-field-textarea-overrides.scss index 0a0a124fa6e7..008321138c11 100644 --- a/src/material-experimental/mdc-form-field/_mdc-text-field-textarea-overrides.scss +++ b/src/material-experimental/mdc-form-field/_mdc-text-field-textarea-overrides.scss @@ -1,5 +1,3 @@ -@use 'form-field-sizing'; - // MDCs default textarea styles cannot be used because they only apply if a special // class is applied to the "mdc-text-field" wrapper. Since we cannot know whether the // registered form-field control is a textarea and MDC by default does not have styles diff --git a/src/material-experimental/mdc-helpers/_focus-indicators.scss b/src/material-experimental/mdc-helpers/_focus-indicators.scss index 679c39f3f911..9b7ec751a2d0 100644 --- a/src/material-experimental/mdc-helpers/_focus-indicators.scss +++ b/src/material-experimental/mdc-helpers/_focus-indicators.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use '../../material/core/style/layout-common'; -@use '../../material/core/focus-indicators/focus-indicators'; /// Mixin that turns on strong focus indicators. /// diff --git a/src/material-experimental/mdc-helpers/_mdc-helpers.scss b/src/material-experimental/mdc-helpers/_mdc-helpers.scss index 2e89863cc7c7..0e9776d7b17b 100644 --- a/src/material-experimental/mdc-helpers/_mdc-helpers.scss +++ b/src/material-experimental/mdc-helpers/_mdc-helpers.scss @@ -4,10 +4,8 @@ @use '@material/feature-targeting' as mdc-feature-targeting; @use '@material/typography' as mdc-typography; -@use '@material/theme/functions' as mdc-theme-functions; @use '@material/theme/theme-color' as mdc-theme-color; @use 'sass:map'; -@use '../../material/core/style/layout-common'; @use '../../material/core/theming/theming'; @use '../../material/core/typography/typography'; @use '../../material/core/typography/typography-utils'; diff --git a/src/material-experimental/mdc-list/_interactive-list-theme.scss b/src/material-experimental/mdc-list/_interactive-list-theme.scss index 07c3b676eeb7..84135ba60947 100644 --- a/src/material-experimental/mdc-list/_interactive-list-theme.scss +++ b/src/material-experimental/mdc-list/_interactive-list-theme.scss @@ -1,6 +1,5 @@ @use '@material/ripple' as mdc-ripple; @use 'sass:map'; -@use '../mdc-helpers/mdc-helpers'; @use '../../material/core/theming/theming'; // Mixin that provides colors for the various states of an interactive list-item. MDC diff --git a/src/material-experimental/mdc-sidenav/_sidenav-theme.scss b/src/material-experimental/mdc-sidenav/_sidenav-theme.scss index 53d24118739b..9c358542f417 100644 --- a/src/material-experimental/mdc-sidenav/_sidenav-theme.scss +++ b/src/material-experimental/mdc-sidenav/_sidenav-theme.scss @@ -1,4 +1,3 @@ -@use '../mdc-helpers/mdc-helpers'; @use '../../material/core/theming/theming'; @mixin color($config-or-theme) {} diff --git a/src/material-experimental/mdc-slider/slider.scss b/src/material-experimental/mdc-slider/slider.scss index 13940da0725a..dc38ea9472a2 100644 --- a/src/material-experimental/mdc-slider/slider.scss +++ b/src/material-experimental/mdc-slider/slider.scss @@ -1,6 +1,5 @@ // TODO: disabled until we implement the new MDC slider. // @use '@material/slider' as mdc-slider; -@use '../mdc-helpers/mdc-helpers'; @use '../../cdk/a11y'; $mat-slider-min-size: 128px !default; diff --git a/src/material-experimental/mdc-tabs/_tabs-common.scss b/src/material-experimental/mdc-tabs/_tabs-common.scss index 33523cb3bebe..3daa19355cf6 100644 --- a/src/material-experimental/mdc-tabs/_tabs-common.scss +++ b/src/material-experimental/mdc-tabs/_tabs-common.scss @@ -1,8 +1,6 @@ @use '@material/ripple' as mdc-ripple; @use '@material/tab' as mdc-tab; @use 'sass:map'; -@use '../../material/core/style/variables'; -@use '../../material/core/style/private'; @use '../../material/core/style/vendor-prefixes'; @use '../../cdk/a11y'; @use '../mdc-helpers/mdc-helpers'; diff --git a/src/material-experimental/mdc-tabs/tab-body.scss b/src/material-experimental/mdc-tabs/tab-body.scss index 8b7ffc1b65fb..52e0942d1723 100644 --- a/src/material-experimental/mdc-tabs/tab-body.scss +++ b/src/material-experimental/mdc-tabs/tab-body.scss @@ -1,4 +1,3 @@ -@use '../../material/core/style/vendor-prefixes'; @use '../../material/core/style/layout-common'; // Wraps each tab body. We need to add these styles ourselves, diff --git a/src/material-experimental/mdc-tabs/tab-header.scss b/src/material-experimental/mdc-tabs/tab-header.scss index 51765e169075..30d5a65b2afb 100644 --- a/src/material-experimental/mdc-tabs/tab-header.scss +++ b/src/material-experimental/mdc-tabs/tab-header.scss @@ -1,5 +1,4 @@ @use '@material/tab-indicator' as mdc-tab-indicator; -@use '../../material/core/style/private'; @use '../mdc-helpers/mdc-helpers'; @use './tabs-common'; diff --git a/src/material-experimental/mdc-tabs/tab-nav-bar/tab-nav-bar.scss b/src/material-experimental/mdc-tabs/tab-nav-bar/tab-nav-bar.scss index 178ea15d62b3..334886d45280 100644 --- a/src/material-experimental/mdc-tabs/tab-nav-bar/tab-nav-bar.scss +++ b/src/material-experimental/mdc-tabs/tab-nav-bar/tab-nav-bar.scss @@ -1,6 +1,4 @@ @use '../tabs-common'; -@use '../../../material/core/style/variables'; -@use '../../mdc-helpers/mdc-helpers'; @include tabs-common.paginated-tab-header; diff --git a/src/material-experimental/mdc-theming/_all-theme.scss b/src/material-experimental/mdc-theming/_all-theme.scss index bdc92055b0f3..b50de0f52882 100644 --- a/src/material-experimental/mdc-theming/_all-theme.scss +++ b/src/material-experimental/mdc-theming/_all-theme.scss @@ -19,7 +19,6 @@ @use '../mdc-progress-spinner/progress-spinner-theme'; @use '../mdc-input/input-theme'; @use '../mdc-form-field/form-field-theme'; -@use '../../material/core/core'; @use '../../material/core/theming/theming'; @mixin all-mdc-component-themes($theme-or-color-config) { diff --git a/src/material-experimental/popover-edit/_popover-edit-theme.scss b/src/material-experimental/popover-edit/_popover-edit-theme.scss index b012c4fae95c..95a1f92ab2de 100644 --- a/src/material-experimental/popover-edit/_popover-edit-theme.scss +++ b/src/material-experimental/popover-edit/_popover-edit-theme.scss @@ -2,7 +2,6 @@ @use '../../cdk/a11y'; @use '../../material/core/style/variables'; @use '../../material/core/style/private'; -@use '../../material/core/theming/palette'; @use '../../material/core/theming/theming'; @use '../../material/core/typography/typography'; @use '../../material/core/typography/typography-utils'; diff --git a/src/material/badge/_badge-theme.scss b/src/material/badge/_badge-theme.scss index 4de31c700d96..42500482c60d 100644 --- a/src/material/badge/_badge-theme.scss +++ b/src/material/badge/_badge-theme.scss @@ -4,7 +4,6 @@ @use 'sass:color'; @use 'sass:map'; @use 'sass:meta'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/bottom-sheet/_bottom-sheet-theme.scss b/src/material/bottom-sheet/_bottom-sheet-theme.scss index cf591407e09a..810dc345d622 100644 --- a/src/material/bottom-sheet/_bottom-sheet-theme.scss +++ b/src/material/bottom-sheet/_bottom-sheet-theme.scss @@ -2,7 +2,6 @@ @use '../core/style/private'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @mixin color($config-or-theme) { diff --git a/src/material/button-toggle/_button-toggle-theme.scss b/src/material/button-toggle/_button-toggle-theme.scss index c00b336569b4..02e0b29173a3 100644 --- a/src/material/button-toggle/_button-toggle-theme.scss +++ b/src/material/button-toggle/_button-toggle-theme.scss @@ -1,7 +1,5 @@ @use 'sass:map'; -@use '../../cdk/a11y'; @use '../core/style/private'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/card/_card-theme.scss b/src/material/card/_card-theme.scss index 8fc6f7d6b8fa..c2585619891f 100644 --- a/src/material/card/_card-theme.scss +++ b/src/material/card/_card-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/style/private'; @use '../core/typography/typography'; diff --git a/src/material/checkbox/checkbox.scss b/src/material/checkbox/checkbox.scss index b23461002921..c892a54f5aca 100644 --- a/src/material/checkbox/checkbox.scss +++ b/src/material/checkbox/checkbox.scss @@ -1,8 +1,6 @@ @use 'sass:math'; -@use '../core/theming/theming'; @use '../core/style/elevation'; @use '../core/style/checkbox-common'; -@use '../core/ripple/ripple'; @use '../core/style/layout-common'; @use '../core/style/vendor-prefixes'; @use '../core/style/private'; diff --git a/src/material/chips/_chips-theme.scss b/src/material/chips/_chips-theme.scss index a2a14fd42558..a73823fb3600 100644 --- a/src/material/chips/_chips-theme.scss +++ b/src/material/chips/_chips-theme.scss @@ -1,7 +1,6 @@ @use 'sass:map'; @use 'sass:meta'; @use '../core/style/private'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/core/option/_optgroup-theme.scss b/src/material/core/option/_optgroup-theme.scss index e2d6327063be..ba85112b96b0 100644 --- a/src/material/core/option/_optgroup-theme.scss +++ b/src/material/core/option/_optgroup-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../theming/palette'; @use '../theming/theming'; @use '../typography/typography'; @use '../typography/typography-utils'; diff --git a/src/material/core/option/_option-theme.scss b/src/material/core/option/_option-theme.scss index e6c6f741cb85..024d36f6b678 100644 --- a/src/material/core/option/_option-theme.scss +++ b/src/material/core/option/_option-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../theming/palette'; @use '../theming/theming'; @use '../typography/typography'; @use '../typography/typography-utils'; diff --git a/src/material/core/style/_checkbox-common.scss b/src/material/core/style/_checkbox-common.scss index f01fcc30c010..d9aec357c38e 100644 --- a/src/material/core/style/_checkbox-common.scss +++ b/src/material/core/style/_checkbox-common.scss @@ -1,5 +1,3 @@ -@use './variables'; - // The width/height of the checkbox element. $size: 16px !default; diff --git a/src/material/core/style/_menu-common.scss b/src/material/core/style/_menu-common.scss index fd13f907d473..41b7f3bab0ce 100644 --- a/src/material/core/style/_menu-common.scss +++ b/src/material/core/style/_menu-common.scss @@ -1,7 +1,5 @@ -@use './variables'; @use './list-common'; @use './layout-common'; -@use './vendor-prefixes'; // The mixins below are shared between mat-menu and mat-select diff --git a/src/material/datepicker/_datepicker-theme.scss b/src/material/datepicker/_datepicker-theme.scss index 1e358df7c2c4..4f5de5b5138d 100644 --- a/src/material/datepicker/_datepicker-theme.scss +++ b/src/material/datepicker/_datepicker-theme.scss @@ -3,7 +3,6 @@ @use 'sass:math'; @use 'sass:meta'; @use '../core/style/private'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/dialog/_dialog-theme.scss b/src/material/dialog/_dialog-theme.scss index 4a43531298eb..09e56ed2cf45 100644 --- a/src/material/dialog/_dialog-theme.scss +++ b/src/material/dialog/_dialog-theme.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use '../core/style/private'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/dialog/dialog.scss b/src/material/dialog/dialog.scss index f5793f93e007..ca5f92cde2af 100644 --- a/src/material/dialog/dialog.scss +++ b/src/material/dialog/dialog.scss @@ -1,4 +1,3 @@ -@use '../core/style/vendor-prefixes'; @use '../../cdk/a11y'; diff --git a/src/material/divider/_divider-theme.scss b/src/material/divider/_divider-theme.scss index 7db7b043a4fd..47a697817ced 100644 --- a/src/material/divider/_divider-theme.scss +++ b/src/material/divider/_divider-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @mixin color($config-or-theme) { diff --git a/src/material/expansion/_expansion-theme.scss b/src/material/expansion/_expansion-theme.scss index d92fdcd948bb..14bf3814e91f 100644 --- a/src/material/expansion/_expansion-theme.scss +++ b/src/material/expansion/_expansion-theme.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use '../core/density/private/compatibility'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/style/private'; @use '../core/typography/typography'; diff --git a/src/material/form-field/_form-field-fill-theme.scss b/src/material/form-field/_form-field-fill-theme.scss index 3e9d1fc477d8..499726974bda 100644 --- a/src/material/form-field/_form-field-fill-theme.scss +++ b/src/material/form-field/_form-field-fill-theme.scss @@ -1,7 +1,5 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; -@use '../core/style/form-common'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/form-field/_form-field-legacy-theme.scss b/src/material/form-field/_form-field-legacy-theme.scss index 211dc0ec9de5..a32ffe195969 100644 --- a/src/material/form-field/_form-field-legacy-theme.scss +++ b/src/material/form-field/_form-field-legacy-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/style/form-common'; @use '../core/typography/typography'; diff --git a/src/material/form-field/_form-field-outline-theme.scss b/src/material/form-field/_form-field-outline-theme.scss index a77dc9577940..67d90eaf98a3 100644 --- a/src/material/form-field/_form-field-outline-theme.scss +++ b/src/material/form-field/_form-field-outline-theme.scss @@ -1,7 +1,5 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; -@use '../core/style/form-common'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/form-field/_form-field-standard-theme.scss b/src/material/form-field/_form-field-standard-theme.scss index cb55824709d7..22dd1c2365ba 100644 --- a/src/material/form-field/_form-field-standard-theme.scss +++ b/src/material/form-field/_form-field-standard-theme.scss @@ -1,8 +1,6 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/style/form-common'; -@use '../core/typography/typography-utils'; // Theme styles that only apply to the standard appearance of the form-field. diff --git a/src/material/form-field/_form-field-theme.scss b/src/material/form-field/_form-field-theme.scss index 4617b6156f6b..ecec990ccfec 100644 --- a/src/material/form-field/_form-field-theme.scss +++ b/src/material/form-field/_form-field-theme.scss @@ -1,7 +1,5 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; -@use '../core/style/form-common'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/form-field/form-field-fill.scss b/src/material/form-field/form-field-fill.scss index 035f5a2ba879..33e26bb28364 100644 --- a/src/material/form-field/form-field-fill.scss +++ b/src/material/form-field/form-field-fill.scss @@ -1,5 +1,4 @@ @use '../core/style/variables'; -@use '../core/style/vendor-prefixes'; @use '../../cdk/a11y'; // Styles that only apply to the fill appearance of the form-field. diff --git a/src/material/form-field/form-field-legacy.scss b/src/material/form-field/form-field-legacy.scss index fa47c9bdeb00..a6771fd3cabc 100644 --- a/src/material/form-field/form-field-legacy.scss +++ b/src/material/form-field/form-field-legacy.scss @@ -1,5 +1,3 @@ -@use '../core/style/variables'; -@use '../core/style/vendor-prefixes'; @use '../../cdk/a11y'; diff --git a/src/material/form-field/form-field-outline.scss b/src/material/form-field/form-field-outline.scss index 49e3c0768e34..f5ad9b88bfd4 100644 --- a/src/material/form-field/form-field-outline.scss +++ b/src/material/form-field/form-field-outline.scss @@ -1,5 +1,4 @@ @use '../core/style/variables'; -@use '../core/style/vendor-prefixes'; // Styles that only apply to the outline appearance of the form-field. diff --git a/src/material/form-field/form-field-standard.scss b/src/material/form-field/form-field-standard.scss index 340c28fa5602..2477eee18e6c 100644 --- a/src/material/form-field/form-field-standard.scss +++ b/src/material/form-field/form-field-standard.scss @@ -1,5 +1,4 @@ @use '../core/style/variables'; -@use '../core/style/vendor-prefixes'; @use '../../cdk/a11y'; diff --git a/src/material/form-field/form-field.scss b/src/material/form-field/form-field.scss index 5545b0380af0..a2c49e27ead8 100644 --- a/src/material/form-field/form-field.scss +++ b/src/material/form-field/form-field.scss @@ -1,5 +1,4 @@ @use '../core/style/variables'; -@use '../core/style/vendor-prefixes'; @use '../../cdk/a11y'; diff --git a/src/material/grid-list/_grid-list-theme.scss b/src/material/grid-list/_grid-list-theme.scss index e8e955094a7f..0b38ca0c55bc 100644 --- a/src/material/grid-list/_grid-list-theme.scss +++ b/src/material/grid-list/_grid-list-theme.scss @@ -1,4 +1,3 @@ -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/icon/icon.scss b/src/material/icon/icon.scss index 91aad30c01b7..d74412f0bb56 100644 --- a/src/material/icon/icon.scss +++ b/src/material/icon/icon.scss @@ -1,6 +1,3 @@ -@use '../core/style/variables'; - - // The width/height of the icon element. $size: 24px !default; diff --git a/src/material/list/_list-theme.scss b/src/material/list/_list-theme.scss index aed76e8c0280..f5072b9eeabb 100644 --- a/src/material/list/_list-theme.scss +++ b/src/material/list/_list-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/list/list.scss b/src/material/list/list.scss index 046e4b2f9091..05a5e83733f8 100644 --- a/src/material/list/list.scss +++ b/src/material/list/list.scss @@ -1,4 +1,3 @@ -@use '../core/style/variables'; @use '../core/style/list-common'; @use '../core/style/layout-common'; @use '../divider/divider-offset'; diff --git a/src/material/menu/_menu-theme.scss b/src/material/menu/_menu-theme.scss index 2b7479bdfb59..d1bf93020179 100644 --- a/src/material/menu/_menu-theme.scss +++ b/src/material/menu/_menu-theme.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use '../core/style/private'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/paginator/_paginator-theme.scss b/src/material/paginator/_paginator-theme.scss index 9005a4d0e96d..561ebd2cfcbd 100644 --- a/src/material/paginator/_paginator-theme.scss +++ b/src/material/paginator/_paginator-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/progress-bar/_progress-bar-theme.scss b/src/material/progress-bar/_progress-bar-theme.scss index 6404b8aa59ba..5e2d2f49fa00 100644 --- a/src/material/progress-bar/_progress-bar-theme.scss +++ b/src/material/progress-bar/_progress-bar-theme.scss @@ -1,7 +1,6 @@ @use 'sass:map'; @use 'sass:meta'; @use 'sass:color'; -@use '../core/theming/palette'; @use '../core/theming/theming'; // Approximates the correct buffer color by using a mix between the theme color diff --git a/src/material/progress-bar/progress-bar.scss b/src/material/progress-bar/progress-bar.scss index d457adeae0d9..1b109cce480f 100644 --- a/src/material/progress-bar/progress-bar.scss +++ b/src/material/progress-bar/progress-bar.scss @@ -1,4 +1,3 @@ -@use '../core/style/variables'; @use '../core/style/vendor-prefixes'; @use '../core/style/private'; @use '../../cdk/a11y'; diff --git a/src/material/progress-spinner/_progress-spinner-theme.scss b/src/material/progress-spinner/_progress-spinner-theme.scss index b3f7f917c3f3..748660e57217 100644 --- a/src/material/progress-spinner/_progress-spinner-theme.scss +++ b/src/material/progress-spinner/_progress-spinner-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @mixin color($config-or-theme) { diff --git a/src/material/radio/_radio-theme.scss b/src/material/radio/_radio-theme.scss index 8198916ccfb0..88c15ed2b5b8 100644 --- a/src/material/radio/_radio-theme.scss +++ b/src/material/radio/_radio-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/select/_select-theme.scss b/src/material/select/_select-theme.scss index 08c755c9fbac..35581dff2018 100644 --- a/src/material/select/_select-theme.scss +++ b/src/material/select/_select-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/style/private'; @use '../core/style/form-common'; diff --git a/src/material/sidenav/_sidenav-theme.scss b/src/material/sidenav/_sidenav-theme.scss index d11653d68950..4267e73947a1 100644 --- a/src/material/sidenav/_sidenav-theme.scss +++ b/src/material/sidenav/_sidenav-theme.scss @@ -2,7 +2,6 @@ @use 'sass:map'; @use 'sass:meta'; @use '../core/style/private'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @mixin color($config-or-theme) { diff --git a/src/material/sidenav/drawer.scss b/src/material/sidenav/drawer.scss index f3ba0ceef90e..84aaa6a7e91e 100644 --- a/src/material/sidenav/drawer.scss +++ b/src/material/sidenav/drawer.scss @@ -1,6 +1,5 @@ @use '../core/style/variables'; @use '../core/style/layout-common'; -@use '../core/style/vendor-prefixes'; @use '../../cdk/a11y'; $drawer-content-z-index: 1; diff --git a/src/material/slider/_slider-theme.scss b/src/material/slider/_slider-theme.scss index 4ddcde651473..2c9e93825dd6 100644 --- a/src/material/slider/_slider-theme.scss +++ b/src/material/slider/_slider-theme.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use 'sass:meta'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/snack-bar/simple-snack-bar.scss b/src/material/snack-bar/simple-snack-bar.scss index 223a04a0f98b..5b5c65fc3825 100644 --- a/src/material/snack-bar/simple-snack-bar.scss +++ b/src/material/snack-bar/simple-snack-bar.scss @@ -1,7 +1,3 @@ -@use '../core/style/variables'; -@use '../core/style/button-common'; -@use '../core/style/list-common'; - $button-horizontal-margin: 8px !default; $button-height: 36px !default; $line-height: 20px !default; diff --git a/src/material/stepper/_stepper-theme.scss b/src/material/stepper/_stepper-theme.scss index 17e998a04cc9..d311149c36be 100644 --- a/src/material/stepper/_stepper-theme.scss +++ b/src/material/stepper/_stepper-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/table/_table-theme.scss b/src/material/table/_table-theme.scss index d38ba5f71f74..dd21a44ea797 100644 --- a/src/material/table/_table-theme.scss +++ b/src/material/table/_table-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/tabs/_tabs-theme.scss b/src/material/tabs/_tabs-theme.scss index 87ec81077d39..95037f48f4f5 100644 --- a/src/material/tabs/_tabs-theme.scss +++ b/src/material/tabs/_tabs-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/tabs/tab-body.scss b/src/material/tabs/tab-body.scss index 37acee9270df..a92aaf492e20 100644 --- a/src/material/tabs/tab-body.scss +++ b/src/material/tabs/tab-body.scss @@ -1,5 +1,3 @@ -@use '../core/style/vendor-prefixes'; - .mat-tab-body-content { height: 100%; overflow: auto; diff --git a/src/material/toolbar/_toolbar-theme.scss b/src/material/toolbar/_toolbar-theme.scss index e2a039f4a115..7647760f931c 100644 --- a/src/material/toolbar/_toolbar-theme.scss +++ b/src/material/toolbar/_toolbar-theme.scss @@ -1,7 +1,6 @@ @use 'sass:map'; @use '../core/density/private/compatibility'; @use '../core/style/variables'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/tooltip/_tooltip-theme.scss b/src/material/tooltip/_tooltip-theme.scss index 92036addd3fe..b25a49dd1232 100644 --- a/src/material/tooltip/_tooltip-theme.scss +++ b/src/material/tooltip/_tooltip-theme.scss @@ -1,5 +1,4 @@ @use 'sass:map'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/src/material/tooltip/tooltip.scss b/src/material/tooltip/tooltip.scss index 2bdb09fd0ba6..84cce45ad333 100644 --- a/src/material/tooltip/tooltip.scss +++ b/src/material/tooltip/tooltip.scss @@ -1,4 +1,3 @@ -@use '../core/style/variables'; @use '../../cdk/a11y'; $horizontal-padding: 8px; diff --git a/src/material/tree/_tree-theme.scss b/src/material/tree/_tree-theme.scss index 2c6cb6c6e1ca..871c27b85386 100644 --- a/src/material/tree/_tree-theme.scss +++ b/src/material/tree/_tree-theme.scss @@ -1,6 +1,5 @@ @use 'sass:map'; @use '../core/density/private/compatibility'; -@use '../core/theming/palette'; @use '../core/theming/theming'; @use '../core/typography/typography'; @use '../core/typography/typography-utils'; diff --git a/tools/stylelint/no-unused-import.ts b/tools/stylelint/no-unused-import.ts new file mode 100644 index 000000000000..4496d1775511 --- /dev/null +++ b/tools/stylelint/no-unused-import.ts @@ -0,0 +1,90 @@ +import {createPlugin, Plugin, utils} from 'stylelint'; +import {basename, join} from 'path'; +import {Result, Root} from './stylelint-postcss-types'; + +const ruleName = 'material/no-unused-import'; +const messages = utils.ruleMessages(ruleName, { + expected: (namespace: string) => `Namespace ${namespace} is not being used.`, + invalid: (rule: string) => `Failed to extract namespace from ${rule}. material/no-unused-` + + `imports Stylelint rule likely needs to be updated.` +}); + +/** Stylelint plugin that flags unused `@use` statements. */ +const factory = (isEnabled: boolean, _options: never, context: {fix: boolean}) => { + return (root: Root, result: Result) => { + if (!isEnabled) { + return; + } + + const fileContent = root.toString(); + + root.walkAtRules(rule => { + if (rule.name === 'use') { + const namespace = extractNamespaceFromUseStatement(rule.params); + + // Flag namespaces we didn't manage to parse so that we can fix the parsing logic. + if (!namespace) { + utils.report({ + result, + ruleName, + message: messages.invalid(rule.params), + node: rule + }); + } else if (!fileContent.includes(namespace + '.')) { + if (context.fix) { + rule.remove(); + } else { + utils.report({ + result, + ruleName, + message: messages.expected(namespace), + node: rule + }); + } + } + } + }); + }; +}; + +/** Extracts the namespace of an `@use` rule from its parameters. */ +function extractNamespaceFromUseStatement(params: string): string|null { + const closeQuoteIndex = Math.max(params.lastIndexOf(`"`), params.lastIndexOf(`'`)); + + if (closeQuoteIndex > -1) { + const asExpression = 'as '; + const asIndex = params.indexOf(asExpression, closeQuoteIndex); + + // If we found an ` as ` expression, we consider the rest of the text as the namespace. + if (asIndex > -1) { + return params.slice(asIndex + asExpression.length).trim(); + } + + const openQuoteIndex = Math.max(params.lastIndexOf(`"`, closeQuoteIndex - 1), + params.lastIndexOf(`'`, closeQuoteIndex - 1)); + + if (openQuoteIndex > -1) { + const importPath = params.slice(openQuoteIndex + 1, closeQuoteIndex) + // Sass allows for leading underscores to be omitted and it technically supports .scss. + .replace(/^_|(\.import)?\.scss$|\.import$/g, ''); + + // Built-in Sass imports look like `sass:map`. + if (importPath.startsWith('sass:')) { + return importPath.split('sass:')[1]; + } + + // Sass ignores `/index` and infers the namespace as the next segment in the path. + const fileName = basename(importPath); + return fileName === 'index' ? basename(join(fileName, '..')) : fileName; + } + } + + return null; +} + +// Note: We need to cast the value explicitly to `Plugin` because the stylelint types +// do not type the context parameter. https://stylelint.io/developer-guide/rules#add-autofix +const plugin = createPlugin(ruleName, factory as unknown as Plugin); +plugin.ruleName = ruleName; +plugin.messages = messages; +module.exports = plugin;