Skip to content

refactor(material/core): vendor the M3 token definitions #29468

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .ng-dev/google-sync-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"src/material/module.ts",
"src/material/core/index.ts",
"src/material/core/theming/tests/**/*",
"src/material/core/tokens/m3/definitions/unused/**/*",
"src/material/expansion/index.ts",
"src/material-experimental/theming/_format-tokens.scss",
"**/*import.scss"
Expand Down
2 changes: 1 addition & 1 deletion src/material/core/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ sass_library(
name = "core_scss_lib",
srcs = glob(
["**/_*.scss"],
exclude = ALL_THEMING_FILES,
exclude = ALL_THEMING_FILES + ["./tokens/m3/definitions/unused/**/*_.scss"],
),
deps = [
"//:mdc_sass_lib",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ describe('theming inspection api', () => {
expect(css).toMatch('font-size: 2rem;');
expect(css).toMatch('font-weight: 400;');
expect(css).toMatch('line-height: 2.5rem;');
expect(css).toMatch('letter-spacing: 0rem;');
expect(css).toMatch('letter-spacing: 0;');
});

it('should error on invalid typescale', () => {
Expand Down
26 changes: 13 additions & 13 deletions src/material/core/tokens/_m3-tokens.scss
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
@use 'sass:map';
@use '@material/tokens/v0_161' as mdc-tokens;
@use '../style/sass-utils';
@use '../m2' as m2-theming;
@use './m3';
@use './m3/definitions' as m3-token-definitions;
@use '../tokens/m2' as m2-tokens;
@use './density';
@use './format-tokens';
Expand All @@ -21,7 +21,7 @@
}

/// Creates a set of `md-ref-palette` tokens from the given palettes. (See
/// https://github.com/material-components/material-components-web/blob/master/packages/mdc-tokens/v0_161/_md-ref-palette.scss)
/// ./m3/definitions/_md-ref-palette.scss)
/// @param {Map} $primary The primary palette
/// @param {Map} $secondary The secondary palette
/// @param {Map} $tertiary The tertiary palette
Expand All @@ -40,7 +40,7 @@
}

/// Creates a set of `md-ref-typeface` tokens from the given palettes. (See
/// https://github.com/material-components/material-components-web/blob/master/packages/mdc-tokens/v0_161/_md-ref-typeface.scss)
/// ./m3/definitions/_md-ref-typeface.scss)
/// @param {List|String} $brand The font-family to use for brand text
/// @param {List|String} $plain The font-family to use for plain text
/// @param {String} $bold The font-weight to use for bold text
Expand Down Expand Up @@ -145,8 +145,8 @@ $_cached-token-slots: null;
);

$sys-colors: if($type == dark,
mdc-tokens.md-sys-color-values-dark($ref),
mdc-tokens.md-sys-color-values-light($ref));
m3-token-definitions.md-sys-color-values-dark($ref),
m3-token-definitions.md-sys-color-values-light($ref));

@each $name, $value in $sys-colors {
--#{$system-variables-prefix}-#{$name}: #{map.get($overrides, $name) or $value};
Expand All @@ -165,7 +165,7 @@ $_cached-token-slots: null;
md-ref-typeface: _generate-ref-typeface-tokens($brand, $plain, $bold, $medium, $regular)
);

$sys-typescale: mdc-tokens.md-sys-typescale-values($ref);
$sys-typescale: m3-token-definitions.md-sys-typescale-values($ref);

@each $name, $value in $sys-typescale {
--#{$system-variables-prefix}-#{$name}: #{map.get($overrides, $name) or $value};
Expand All @@ -182,8 +182,8 @@ $_cached-token-slots: null;

@function _get-sys-color($type, $ref, $prefix) {
$mdc-sys-color: if($type == dark,
mdc-tokens.md-sys-color-values-dark($ref),
mdc-tokens.md-sys-color-values-light($ref));
m3-token-definitions.md-sys-color-values-dark($ref),
m3-token-definitions.md-sys-color-values-light($ref));

@if (sass-utils.$use-system-color-variables) {
$keys: (
Expand Down Expand Up @@ -343,7 +343,7 @@ $_cached-token-slots: null;

@return create-map($keys, $prefix);
}
@return mdc-tokens.md-sys-typescale-values($ref);
@return m3-token-definitions.md-sys-typescale-values($ref);
}

/// Generates a set of namespaced color tokens for all components.
Expand All @@ -364,12 +364,12 @@ $_cached-token-slots: null;
md-sys-color: $sys-color,
// Because the elevation values are always combined with color values to create the box shadow,
// elevation needs to be part of the color dimension.
md-sys-elevation: mdc-tokens.md-sys-elevation-values(),
md-sys-elevation: m3-token-definitions.md-sys-elevation-values(),
// Because the state values are sometimes combined with color values to create rgba colors,
// state needs to be part of color dimension.
// TODO(mmalerba): If at some point we remove the need for these combined values, we can move
// state to the base dimension.
md-sys-state: mdc-tokens.md-sys-state-values(),
md-sys-state: m3-token-definitions.md-sys-state-values(),
)));
}

Expand Down Expand Up @@ -405,7 +405,7 @@ $system-variables-prefix) {
@function generate-base-tokens() {
// TODO(mmalerba): Exclude density tokens once implemented.
@return _generate-tokens((
md-sys-motion: mdc-tokens.md-sys-motion-values(),
md-sys-shape: mdc-tokens.md-sys-shape-values(),
md-sys-motion: m3-token-definitions.md-sys-motion-values(),
md-sys-shape: m3-token-definitions.md-sys-shape-values(),
), $include-non-systemized: true);
}
5 changes: 3 additions & 2 deletions src/material/core/tokens/_token-utils.scss
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
@use 'sass:string';
@use 'sass:color';
@use 'sass:math';
@use '@material/tokens/v0_161' as mdc-tokens;
@use '../style/elevation';
@use '../style/sass-utils';
@use '../m2/palette' as m2-palette;
@use '../m2/theming' as m2-theming;
@use '../m2/typography' as m2-typography;
@use './m3/definitions' as m3-token-definitions;

// Indicates whether we're building internally. Used for backwards compatibility.
$private-is-internal-build: false;
Expand Down Expand Up @@ -162,7 +162,8 @@ $_component-prefix: null;
/// @param {Boolean} $exclude-hardcoded Whether to exclude hardcoded token values
/// @return {List} Map of token names to values
@function get-mdc-tokens($component, $systems, $exclude-hardcoded) {
$fn: meta.get-function($name: 'md-comp-' + $component + '-values', $module: 'mdc-tokens');
$full-name: 'md-comp-' + $component + '-values';
$fn: meta.get-function($name: $full-name, $module: 'm3-token-definitions');
@return meta.call($fn, $systems, $exclude-hardcoded);
}

Expand Down
7 changes: 7 additions & 0 deletions src/material/core/tokens/m3/definitions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
This package contains the definitions for the Material Design 3 tokens. It has been forked off from
[`@material/tokens`](https://www.npmjs.com/package/@material/tokens) on July 22nd 2024. It is using
the `v0_161` of the tokens.

It includes the following changes from the original package:
* Tokens that aren't used by the package have been moved into the `unused` directory.
* Formatting has been fixed to match the lint rules of this repository.
94 changes: 94 additions & 0 deletions src/material/core/tokens/m3/definitions/_index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
@forward './md-comp-checkbox' as md-comp-checkbox-*;
@forward './md-comp-circular-progress-indicator' as md-comp-circular-progress-indicator-*;
@forward './md-comp-data-table' as md-comp-data-table-*;
@forward './md-comp-dialog' as md-comp-dialog-*;
@forward './md-comp-elevated-button' as md-comp-elevated-button-*;
@forward './md-comp-elevated-card' as md-comp-elevated-card-*;
@forward './md-comp-extended-fab-primary' as md-comp-extended-fab-primary-*;
@forward './md-comp-extended-fab-secondary' as md-comp-extended-fab-secondary-*;
@forward './md-comp-extended-fab-tertiary' as md-comp-extended-fab-tertiary-*;
@forward './md-comp-fab-primary-small' as md-comp-fab-primary-small-*;
@forward './md-comp-fab-primary' as md-comp-fab-primary-*;
@forward './md-comp-fab-secondary-small' as md-comp-fab-secondary-small-*;
@forward './md-comp-fab-secondary' as md-comp-fab-secondary-*;
@forward './md-comp-fab-tertiary-small' as md-comp-fab-tertiary-small-*;
@forward './md-comp-fab-tertiary' as md-comp-fab-tertiary-*;
@forward './md-comp-filled-button' as md-comp-filled-button-*;
@forward './md-comp-filled-card' as md-comp-filled-card-*;
@forward './md-comp-filled-icon-button' as md-comp-filled-icon-button-*;
@forward './md-comp-filled-text-field' as md-comp-filled-text-field-*;
@forward './md-comp-icon-button' as md-comp-icon-button-*;
@forward './md-comp-linear-progress-indicator' as md-comp-linear-progress-indicator-*;
@forward './md-comp-list' as md-comp-list-*;
@forward './md-comp-outlined-button' as md-comp-outlined-button-*;
@forward './md-comp-outlined-card' as md-comp-outlined-card-*;
@forward './md-comp-outlined-icon-button' as md-comp-outlined-icon-button-*;
@forward './md-comp-outlined-text-field' as md-comp-outlined-text-field-*;
@forward './md-comp-plain-tooltip' as md-comp-plain-tooltip-*;
@forward './md-comp-radio-button' as md-comp-radio-button-*;
@forward './md-comp-secondary-navigation-tab' as md-comp-secondary-navigation-tab-*;
@forward './md-comp-slider' as md-comp-slider-*;
@forward './md-comp-snackbar' as md-comp-snackbar-*;
@forward './md-comp-switch' as md-comp-switch-*;
@forward './md-comp-text-button' as md-comp-text-button-*;
@forward './md-ref-palette' as md-ref-palette-*;
@forward './md-ref-typeface' as md-ref-typeface-*;
@forward './md-sys-color' as md-sys-color-*;
@forward './md-sys-elevation' as md-sys-elevation-*;
@forward './md-sys-motion' as md-sys-motion-*;
@forward './md-sys-shape' as md-sys-shape-*;
@forward './md-sys-state' as md-sys-state-*;
@forward './md-sys-typescale' as md-sys-typescale-*;

// Tokens that are in the spec, but are currently unused.
// @forward './unused/md-comp-assist-chip' as md-comp-assist-chip-*;
// @forward './unused/md-comp-badge' as md-comp-badge-*;
// @forward './unused/md-comp-banner' as md-comp-banner-*;
// @forward './unused/md-comp-bottom-app-bar' as md-comp-bottom-app-bar-*;
// @forward './unused/md-comp-carousel-item' as md-comp-carousel-item-*;
// @forward './unused/md-comp-date-input-modal' as md-comp-date-input-modal-*;
// @forward './unused/md-comp-date-picker-docked' as md-comp-date-picker-docked-*;
// @forward './unused/md-comp-date-picker-modal' as md-comp-date-picker-modal-*;
// @forward './unused/md-comp-divider' as md-comp-divider-*;
// @forward './unused/md-comp-extended-fab-branded' as md-comp-extended-fab-branded-*;
// @forward './unused/md-comp-extended-fab-surface' as md-comp-extended-fab-surface-*;
// @forward './unused/md-comp-fab-branded-large' as md-comp-fab-branded-large-*;
// @forward './unused/md-comp-fab-branded' as md-comp-fab-branded-*;
// @forward './unused/md-comp-fab-primary-large' as md-comp-fab-primary-large-*;
// @forward './unused/md-comp-fab-secondary-large' as md-comp-fab-secondary-large-*;
// @forward './unused/md-comp-fab-surface-large' as md-comp-fab-surface-large-*;
// @forward './unused/md-comp-fab-surface-small' as md-comp-fab-surface-small-*;
// @forward './unused/md-comp-fab-surface' as md-comp-fab-surface-*;
// @forward './unused/md-comp-fab-tertiary-large' as md-comp-fab-tertiary-large-*;
// @forward './unused/md-comp-filled-autocomplete' as md-comp-filled-autocomplete-*;
// @forward './unused/md-comp-filled-menu-button' as md-comp-filled-menu-button-*;
// @forward './unused/md-comp-filled-select' as md-comp-filled-select-*;
// @forward './unused/md-comp-filled-tonal-button' as md-comp-filled-tonal-button-*;
// @forward './unused/md-comp-filled-tonal-icon-button' as md-comp-filled-tonal-icon-button-*;
// @forward './unused/md-comp-filter-chip' as md-comp-filter-chip-*;
// @forward './unused/md-comp-full-screen-dialog' as md-comp-full-screen-dialog-*;
// @forward './unused/md-comp-input-chip' as md-comp-input-chip-*;
// @forward './unused/md-comp-menu' as md-comp-menu-*;
// @forward './unused/md-comp-navigation-bar' as md-comp-navigation-bar-*;
// @forward './unused/md-comp-navigation-drawer' as md-comp-navigation-drawer-*;
// @forward './unused/md-comp-navigation-rail' as md-comp-navigation-rail-*;
// @forward './unused/md-comp-outlined-autocomplete' as md-comp-outlined-autocomplete-*;
// @forward './unused/md-comp-outlined-menu-button' as md-comp-outlined-menu-button-*;
// @forward './unused/md-comp-outlined-segmented-button' as md-comp-outlined-segmented-button-*;
// @forward './unused/md-comp-outlined-select' as md-comp-outlined-select-*;
// @forward './unused/md-comp-primary-navigation-tab' as md-comp-primary-navigation-tab-*;
// @forward './unused/md-comp-rich-tooltip' as md-comp-rich-tooltip-*;
// @forward './unused/md-comp-scrim' as md-comp-scrim-*;
// @forward './unused/md-comp-search-bar' as md-comp-search-bar-*;
// @forward './unused/md-comp-search-view' as md-comp-search-view-*;
// @forward './unused/md-comp-sheet-bottom' as md-comp-sheet-bottom-*;
// @forward './unused/md-comp-sheet-floating' as md-comp-sheet-floating-*;
// @forward './unused/md-comp-sheet-side' as md-comp-sheet-side-*;
// @forward './unused/md-comp-standard-menu-button' as md-comp-standard-menu-button-*;
// @forward './unused/md-comp-suggestion-chip' as md-comp-suggestion-chip-*;
// @forward './unused/md-comp-time-input' as md-comp-time-input-*;
// @forward './unused/md-comp-time-picker' as md-comp-time-picker-*;
// @forward './unused/md-comp-top-app-bar-large' as md-comp-top-app-bar-large-*;
// @forward './unused/md-comp-top-app-bar-medium' as md-comp-top-app-bar-medium-*;
// @forward './unused/md-comp-top-app-bar-small-centered' as md-comp-top-app-bar-small-centered-*;
// @forward './unused/md-comp-top-app-bar-small' as md-comp-top-app-bar-small-*;
120 changes: 120 additions & 0 deletions src/material/core/tokens/m3/definitions/_md-comp-checkbox.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
//
// Design system display name: Material 3
// Design system version: v0.161
//

@use 'sass:map';

@use './md-sys-color';

@use './md-sys-shape';

@use './md-sys-state';

$_default: (
'md-sys-color': md-sys-color.values-light(),
'md-sys-shape': md-sys-shape.values(),
'md-sys-state': md-sys-state.values(),
);

@function values($deps: $_default, $exclude-hardcoded-values: false) {
@return (
'container-shape': if($exclude-hardcoded-values, null, 2px),
'container-size': if($exclude-hardcoded-values, null, 18px),
'error-focus-state-layer-color': map.get($deps, 'md-sys-color', 'error'),
'error-focus-state-layer-opacity':
map.get($deps, 'md-sys-state', 'focus-state-layer-opacity'),
'error-hover-state-layer-color': map.get($deps, 'md-sys-color', 'error'),
'error-hover-state-layer-opacity':
map.get($deps, 'md-sys-state', 'hover-state-layer-opacity'),
'error-pressed-state-layer-color': map.get($deps, 'md-sys-color', 'error'),
'error-pressed-state-layer-opacity':
map.get($deps, 'md-sys-state', 'pressed-state-layer-opacity'),
'icon-size': if($exclude-hardcoded-values, null, 18px),
'selected-container-color': map.get($deps, 'md-sys-color', 'primary'),
'selected-disabled-container-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'selected-disabled-container-opacity':
if($exclude-hardcoded-values, null, 0.38),
'selected-disabled-container-outline-width':
if($exclude-hardcoded-values, null, 0),
'selected-disabled-icon-color': map.get($deps, 'md-sys-color', 'surface'),
'selected-error-container-color': map.get($deps, 'md-sys-color', 'error'),
'selected-error-focus-container-color':
map.get($deps, 'md-sys-color', 'error'),
'selected-error-focus-icon-color':
map.get($deps, 'md-sys-color', 'on-error'),
'selected-error-hover-container-color':
map.get($deps, 'md-sys-color', 'error'),
'selected-error-hover-icon-color':
map.get($deps, 'md-sys-color', 'on-error'),
'selected-error-icon-color': map.get($deps, 'md-sys-color', 'on-error'),
'selected-error-pressed-container-color':
map.get($deps, 'md-sys-color', 'error'),
'selected-error-pressed-icon-color':
map.get($deps, 'md-sys-color', 'on-error'),
'selected-focus-container-color': map.get($deps, 'md-sys-color', 'primary'),
'selected-focus-icon-color': map.get($deps, 'md-sys-color', 'on-primary'),
'selected-focus-outline-width': if($exclude-hardcoded-values, null, 0),
'selected-focus-state-layer-color':
map.get($deps, 'md-sys-color', 'primary'),
'selected-focus-state-layer-opacity':
map.get($deps, 'md-sys-state', 'focus-state-layer-opacity'),
'selected-hover-container-color': map.get($deps, 'md-sys-color', 'primary'),
'selected-hover-icon-color': map.get($deps, 'md-sys-color', 'on-primary'),
'selected-hover-outline-width': if($exclude-hardcoded-values, null, 0),
'selected-hover-state-layer-color':
map.get($deps, 'md-sys-color', 'primary'),
'selected-hover-state-layer-opacity':
map.get($deps, 'md-sys-state', 'hover-state-layer-opacity'),
'selected-icon-color': map.get($deps, 'md-sys-color', 'on-primary'),
'selected-outline-width': if($exclude-hardcoded-values, null, 0),
'selected-pressed-container-color':
map.get($deps, 'md-sys-color', 'primary'),
'selected-pressed-icon-color': map.get($deps, 'md-sys-color', 'on-primary'),
'selected-pressed-outline-width': if($exclude-hardcoded-values, null, 0),
'selected-pressed-state-layer-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'selected-pressed-state-layer-opacity':
map.get($deps, 'md-sys-state', 'pressed-state-layer-opacity'),
'state-layer-shape': map.get($deps, 'md-sys-shape', 'corner-full'),
'state-layer-size': if($exclude-hardcoded-values, null, 40px),
'unselected-disabled-container-opacity':
if($exclude-hardcoded-values, null, 0.38),
'unselected-disabled-outline-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'unselected-disabled-outline-width':
if($exclude-hardcoded-values, null, 2px),
'unselected-error-focus-outline-color':
map.get($deps, 'md-sys-color', 'error'),
'unselected-error-hover-outline-color':
map.get($deps, 'md-sys-color', 'error'),
'unselected-error-outline-color': map.get($deps, 'md-sys-color', 'error'),
'unselected-error-pressed-outline-color':
map.get($deps, 'md-sys-color', 'error'),
'unselected-focus-outline-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'unselected-focus-outline-width': if($exclude-hardcoded-values, null, 2px),
'unselected-focus-state-layer-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'unselected-focus-state-layer-opacity':
map.get($deps, 'md-sys-state', 'focus-state-layer-opacity'),
'unselected-hover-outline-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'unselected-hover-outline-width': if($exclude-hardcoded-values, null, 2px),
'unselected-hover-state-layer-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'unselected-hover-state-layer-opacity':
map.get($deps, 'md-sys-state', 'hover-state-layer-opacity'),
'unselected-outline-color':
map.get($deps, 'md-sys-color', 'on-surface-variant'),
'unselected-outline-width': if($exclude-hardcoded-values, null, 2px),
'unselected-pressed-outline-color':
map.get($deps, 'md-sys-color', 'on-surface'),
'unselected-pressed-outline-width': if($exclude-hardcoded-values, null, 2px),
'unselected-pressed-state-layer-color':
map.get($deps, 'md-sys-color', 'primary'),
'unselected-pressed-state-layer-opacity':
map.get($deps, 'md-sys-state', 'pressed-state-layer-opacity')
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
@use 'sass:map';

@use './md-sys-color';

@use './md-sys-shape';

$_default: (
'md-sys-color': md-sys-color.values-light(),
'md-sys-shape': md-sys-shape.values(),
);

@function values($deps: $_default, $exclude-hardcoded-values: false) {
@return (
'active-indicator-color': map.get($deps, 'md-sys-color', 'primary'),
'active-indicator-shape': map.get($deps, 'md-sys-shape', 'corner-none'),
'active-indicator-width': if($exclude-hardcoded-values, null, 4px),
'four-color-active-indicator-four-color':
map.get($deps, 'md-sys-color', 'tertiary-container'),
'four-color-active-indicator-one-color':
map.get($deps, 'md-sys-color', 'primary'),
'four-color-active-indicator-three-color':
map.get($deps, 'md-sys-color', 'tertiary'),
'four-color-active-indicator-two-color':
map.get($deps, 'md-sys-color', 'primary-container'),
'size': if($exclude-hardcoded-values, null, 48px)
);
}
Loading
Loading