From 41fc2a29bb993173a5612d839c43d68f9e5ad30c Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:00:56 -0700 Subject: [PATCH 1/6] Move action_chip_template --- .../templates/action_chip_template.dart | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/material_ui/tool/gen_defaults/{temporarily_excluded => }/templates/action_chip_template.dart (100%) diff --git a/packages/material_ui/tool/gen_defaults/temporarily_excluded/templates/action_chip_template.dart b/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart similarity index 100% rename from packages/material_ui/tool/gen_defaults/temporarily_excluded/templates/action_chip_template.dart rename to packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart From 5c868e18a8b7ab185d17e81990bf6422529fa2d5 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:19:37 -0700 Subject: [PATCH 2/6] Move action_chip_defaults_m3.g.dart --- .../src/generated/action_chip_defaults_m3.g.dart} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename packages/material_ui/{tool/gen_defaults/temporarily_excluded/generated/action_chip_defaults.g.dart => lib/src/generated/action_chip_defaults_m3.g.dart} (100%) diff --git a/packages/material_ui/tool/gen_defaults/temporarily_excluded/generated/action_chip_defaults.g.dart b/packages/material_ui/lib/src/generated/action_chip_defaults_m3.g.dart similarity index 100% rename from packages/material_ui/tool/gen_defaults/temporarily_excluded/generated/action_chip_defaults.g.dart rename to packages/material_ui/lib/src/generated/action_chip_defaults_m3.g.dart From e664fd260174cfdc507362e82960fe43697ada01 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:50:39 -0700 Subject: [PATCH 3/6] Finish migration --- .../generated/action_chip_defaults_m3.g.dart | 27 ++++---- .../tool/gen_defaults/bin/gen_defaults.dart | 2 + .../templates/action_chip_template.dart | 66 +++++++++++-------- .../tool/gen_defaults/templates/template.dart | 6 ++ 4 files changed, 60 insertions(+), 41 deletions(-) diff --git a/packages/material_ui/lib/src/generated/action_chip_defaults_m3.g.dart b/packages/material_ui/lib/src/generated/action_chip_defaults_m3.g.dart index c47780a927c..f5b548bade4 100644 --- a/packages/material_ui/lib/src/generated/action_chip_defaults_m3.g.dart +++ b/packages/material_ui/lib/src/generated/action_chip_defaults_m3.g.dart @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Do not edit by hand. The code is generated from data in the Material +// Design token database by the script: +// packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart. +part of '../action_chip.dart'; + class _ActionChipDefaultsM3 extends ChipThemeData { _ActionChipDefaultsM3(this.context, this.isEnabled, this._chipVariant) : super( @@ -16,12 +21,11 @@ class _ActionChipDefaultsM3 extends ChipThemeData { late final TextTheme _textTheme = Theme.of(context).textTheme; @override - double? get elevation => - _chipVariant == _ChipVariant.flat - ? 0.0 - : isEnabled - ? 1.0 - : 0.0; + double? get elevation => _chipVariant == _ChipVariant.flat + ? 0.0 + : isEnabled + ? 1.0 + : 0.0; @override double? get pressElevation => 1.0; @@ -52,12 +56,11 @@ class _ActionChipDefaultsM3 extends ChipThemeData { Color? get deleteIconColor => null; @override - BorderSide? get side => - _chipVariant == _ChipVariant.flat - ? isEnabled - ? BorderSide(color: _colors.outlineVariant) - : BorderSide(color: _colors.onSurface.withOpacity(0.12)) - : const BorderSide(color: Colors.transparent); + BorderSide? get side => _chipVariant == _ChipVariant.flat + ? isEnabled + ? BorderSide(color: _colors.outlineVariant) + : BorderSide(color: _colors.onSurface.withOpacity(0.12)) + : const BorderSide(color: Colors.transparent); @override IconThemeData? get iconTheme => diff --git a/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart b/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart index bcfe06fba9d..0a9b94e6eac 100644 --- a/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart +++ b/packages/material_ui/tool/gen_defaults/bin/gen_defaults.dart @@ -12,6 +12,7 @@ import 'package:args/args.dart'; +import '../templates/action_chip_template.dart'; import '../templates/app_bar_template.dart'; Future main(List args) async { @@ -21,5 +22,6 @@ Future main(List args) async { final ArgResults argResults = parser.parse(args); // TODO(elliette): Add token logger when verbose flag is used. final verbose = argResults['verbose'] as bool; + const ActionChipTemplateM3().generateFile(verbose: verbose); const AppBarTemplateM3().generateFile(verbose: verbose); } diff --git a/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart b/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart index 825985dfe4f..7098b03eec9 100644 --- a/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart +++ b/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart @@ -2,27 +2,35 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import '../data/assist_chip.dart'; import 'template.dart'; -class ActionChipTemplate extends TokenTemplate { - const ActionChipTemplate( - super.blockName, - super.fileName, - super.tokens, { - super.colorSchemePrefix = '_colors.', - super.textThemePrefix = '_textTheme.', +class ActionChipTemplateM3 extends TokenTemplateM3 { + const ActionChipTemplateM3({ + this.colorSchemePrefix = '_colors', + this.textThemePrefix = '_textTheme.', }); + final String colorSchemePrefix; + final String textThemePrefix; + static const String tokenGroup = 'md.comp.assist-chip'; static const String flatVariant = '.flat'; static const String elevatedVariant = '.elevated'; @override - String generate() => ''' -class _${blockName}DefaultsM3 extends ChipThemeData { - _${blockName}DefaultsM3(this.context, this.isEnabled, this._chipVariant) + String get name => 'Action Chip'; + + @override + String get parentFilePath => 'action_chip.dart'; + + @override + String generateContents(String className) => + ''' +class $className extends ChipThemeData { + $className(this.context, this.isEnabled, this._chipVariant) : super( - shape: ${shape("$tokenGroup.container")}, + shape: ${shape(TokenAssistChip.containerShape)}, showCheckmark: true, ); @@ -34,17 +42,17 @@ class _${blockName}DefaultsM3 extends ChipThemeData { @override double? get elevation => _chipVariant == _ChipVariant.flat - ? ${elevation("$tokenGroup$flatVariant.container")} - : isEnabled ? ${elevation("$tokenGroup$elevatedVariant.container")} : ${elevation("$tokenGroup$elevatedVariant.disabled.container")}; + ? ${TokenAssistChip.flatContainerElevation} + : isEnabled ? ${TokenAssistChip.elevatedContainerElevation} : ${TokenAssistChip.elevatedDisabledContainerElevation}; @override - double? get pressElevation => ${elevation("$tokenGroup$elevatedVariant.pressed.container")}; + double? get pressElevation => ${TokenAssistChip.elevatedPressedContainerElevation}; @override - TextStyle? get labelStyle => ${textStyle("$tokenGroup.label-text")}?.copyWith( + TextStyle? get labelStyle => _textTheme.labelLarge?.copyWith( color: isEnabled - ? ${color("$tokenGroup.label-text.color")} - : ${color("$tokenGroup.disabled.label-text.color")}, + ? ${color(TokenAssistChip.labelTextColor, colorSchemePrefix)} + : ${color(TokenAssistChip.disabledLabelTextColor, colorSchemePrefix)}, ); @override @@ -52,21 +60,21 @@ class _${blockName}DefaultsM3 extends ChipThemeData { WidgetStateProperty.resolveWith((Set states) { if (states.contains(WidgetState.disabled)) { return _chipVariant == _ChipVariant.flat - ? ${componentColor("$tokenGroup$flatVariant.disabled.container")} - : ${componentColor("$tokenGroup$elevatedVariant.disabled.container")}; + ? null + : ${colorWithOpacity(TokenAssistChip.elevatedDisabledContainerColor, TokenAssistChip.elevatedDisabledContainerOpacity, colorSchemePrefix)}; } return _chipVariant == _ChipVariant.flat - ? ${componentColor("$tokenGroup$flatVariant.container")} - : ${componentColor("$tokenGroup$elevatedVariant.container")}; + ? null + : ${color(TokenAssistChip.elevatedContainerColor, colorSchemePrefix)}; }); @override Color? get shadowColor => _chipVariant == _ChipVariant.flat - ? ${colorOrTransparent("$tokenGroup$flatVariant.container.shadow-color")} - : ${colorOrTransparent("$tokenGroup$elevatedVariant.container.shadow-color")}; + ? Colors.transparent + : ${color(TokenAssistChip.elevatedContainerShadowColor, colorSchemePrefix)}; @override - Color? get surfaceTintColor => ${colorOrTransparent("$tokenGroup.container.surface-tint-layer.color")}; + Color? get surfaceTintColor => Colors.transparent; @override Color? get checkmarkColor => null; @@ -77,16 +85,16 @@ class _${blockName}DefaultsM3 extends ChipThemeData { @override BorderSide? get side => _chipVariant == _ChipVariant.flat ? isEnabled - ? ${border('$tokenGroup$flatVariant.outline')} - : ${border('$tokenGroup$flatVariant.disabled.outline')} + ? ${border(color(TokenAssistChip.flatOutlineColor, colorSchemePrefix), width: TokenAssistChip.flatOutlineWidth)} + : ${border(colorWithOpacity(TokenAssistChip.flatDisabledOutlineColor, TokenAssistChip.flatDisabledOutlineOpacity, colorSchemePrefix))} : const BorderSide(color: Colors.transparent); @override IconThemeData? get iconTheme => IconThemeData( color: isEnabled - ? ${color("$tokenGroup.with-icon.icon.color")} - : ${color("$tokenGroup.with-icon.disabled.icon.color")}, - size: ${getToken("$tokenGroup.with-icon.icon.size")}, + ? ${color(TokenAssistChip.withIconIconColor, colorSchemePrefix)} + : ${color(TokenAssistChip.withIconDisabledIconColor, colorSchemePrefix)}, + size: ${TokenAssistChip.withIconIconSize}, ); @override diff --git a/packages/material_ui/tool/gen_defaults/templates/template.dart b/packages/material_ui/tool/gen_defaults/templates/template.dart index 54c37d2e9a7..cf1307ed4ca 100644 --- a/packages/material_ui/tool/gen_defaults/templates/template.dart +++ b/packages/material_ui/tool/gen_defaults/templates/template.dart @@ -109,6 +109,12 @@ abstract class TokenTemplate { } return '${color(role, prefix)}.withOpacity(${number(opacity)})'; } + + /// Generate a [BorderSide] for the given component. + String border(String color, {double? width}) { + final widthString = (width != null && width != 1.0) ? ', width: $width' : ''; + return 'BorderSide(color: $color$widthString)'; + } /// Generates an [OutlinedBorder] expression for a shape token. /// From 13167132f94b7b9e97af233e6f43a6fd523300cc Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:54:47 -0700 Subject: [PATCH 4/6] Delete unused fields --- .../tool/gen_defaults/templates/action_chip_template.dart | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart b/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart index 7098b03eec9..7a8198fa203 100644 --- a/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart +++ b/packages/material_ui/tool/gen_defaults/templates/action_chip_template.dart @@ -8,15 +8,9 @@ import 'template.dart'; class ActionChipTemplateM3 extends TokenTemplateM3 { const ActionChipTemplateM3({ this.colorSchemePrefix = '_colors', - this.textThemePrefix = '_textTheme.', }); final String colorSchemePrefix; - final String textThemePrefix; - - static const String tokenGroup = 'md.comp.assist-chip'; - static const String flatVariant = '.flat'; - static const String elevatedVariant = '.elevated'; @override String get name => 'Action Chip'; From 8e1924b0c5c45c88efa2e81dd867bfd26885e30b Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 16 Jul 2026 12:14:35 -0700 Subject: [PATCH 5/6] Use part file --- packages/material_ui/lib/src/action_chip.dart | 106 +----------------- 1 file changed, 2 insertions(+), 104 deletions(-) diff --git a/packages/material_ui/lib/src/action_chip.dart b/packages/material_ui/lib/src/action_chip.dart index f7f405cd373..c50a30355ef 100644 --- a/packages/material_ui/lib/src/action_chip.dart +++ b/packages/material_ui/lib/src/action_chip.dart @@ -23,6 +23,8 @@ import 'text_theme.dart'; import 'theme.dart'; import 'theme_data.dart'; +part 'generated/action_chip_defaults_m3.g.dart'; + enum _ChipVariant { flat, elevated } /// A Material Design action chip. @@ -255,107 +257,3 @@ class ActionChip extends StatelessWidget ); } } - -// BEGIN GENERATED TOKEN PROPERTIES - ActionChip - -// Do not edit by hand. The code between the "BEGIN GENERATED" and -// "END GENERATED" comments are generated from data in the Material -// Design token database by the script: -// dev/tools/gen_defaults/bin/gen_defaults.dart. - -// dart format off -class _ActionChipDefaultsM3 extends ChipThemeData { - _ActionChipDefaultsM3(this.context, this.isEnabled, this._chipVariant) - : super( - shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(8.0))), - showCheckmark: true, - ); - - final BuildContext context; - final bool isEnabled; - final _ChipVariant _chipVariant; - late final ColorScheme _colors = Theme.of(context).colorScheme; - late final TextTheme _textTheme = Theme.of(context).textTheme; - - @override - double? get elevation => _chipVariant == _ChipVariant.flat - ? 0.0 - : isEnabled ? 1.0 : 0.0; - - @override - double? get pressElevation => 1.0; - - @override - TextStyle? get labelStyle => _textTheme.labelLarge?.copyWith( - color: isEnabled - ? _colors.onSurface - : _colors.onSurface, - ); - - @override - WidgetStateProperty? get color => - WidgetStateProperty.resolveWith((Set states) { - if (states.contains(WidgetState.disabled)) { - return _chipVariant == _ChipVariant.flat - ? null - : _colors.onSurface.withOpacity(0.12); - } - return _chipVariant == _ChipVariant.flat - ? null - : _colors.surfaceContainerLow; - }); - - @override - Color? get shadowColor => _chipVariant == _ChipVariant.flat - ? Colors.transparent - : _colors.shadow; - - @override - Color? get surfaceTintColor => Colors.transparent; - - @override - Color? get checkmarkColor => null; - - @override - Color? get deleteIconColor => null; - - @override - BorderSide? get side => _chipVariant == _ChipVariant.flat - ? isEnabled - ? BorderSide(color: _colors.outlineVariant) - : BorderSide(color: _colors.onSurface.withOpacity(0.12)) - : const BorderSide(color: Colors.transparent); - - @override - IconThemeData? get iconTheme => IconThemeData( - color: isEnabled - ? _colors.primary - : _colors.onSurface, - size: 18.0, - ); - - @override - EdgeInsetsGeometry? get padding => const EdgeInsets.all(8.0); - - /// The label padding of the chip scales with the font size specified in the - /// [labelStyle], and the system font size settings that scale font sizes - /// globally. - /// - /// The chip at effective font size 14.0 starts with 8px on each side and as - /// the font size scales up to closer to 28.0, the label padding is linearly - /// interpolated from 8px to 4px. Once the label has a font size of 2 or - /// higher, label padding remains 4px. - @override - EdgeInsetsGeometry? get labelPadding { - final double fontSize = labelStyle?.fontSize ?? 14.0; - final double fontSizeRatio = MediaQuery.textScalerOf(context).scale(fontSize) / 14.0; - return EdgeInsets.lerp( - const EdgeInsets.symmetric(horizontal: 8.0), - const EdgeInsets.symmetric(horizontal: 4.0), - clampDouble(fontSizeRatio - 1.0, 0.0, 1.0), - )!; - } -} -// dart format on - -// END GENERATED TOKEN PROPERTIES - ActionChip From 130a6231c3e09881e4e373b96ceae9b6c9403e86 Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Thu, 16 Jul 2026 15:01:36 -0700 Subject: [PATCH 6/6] Add test case --- .../gen_defaults/test/gen_defaults_test.dart | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart index 90063d5cdbe..373299cf0c3 100644 --- a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart +++ b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart @@ -7,6 +7,7 @@ import 'dart:io'; import 'package:test/test.dart'; import '../data/color_role.dart'; import '../data/shape_struct.dart'; +import '../templates/action_chip_template.dart'; import '../templates/app_bar_template.dart'; import '../templates/template.dart'; import 'test_fixtures/test_templates.dart'; @@ -159,6 +160,27 @@ void main() { expect(contents, contains('static const double expandedHeight = 112.0')); expect(contents, contains('static const double expandedHeight = 152.0')); }); + + test('ActionChipTemplateM3 emits M3 ActionChip defaults from assist chip tokens', () { + final String contents = const ActionChipTemplateM3().generateContents( + '_ActionChipDefaultsM3', + ); + expect(contents, contains('class _ActionChipDefaultsM3 extends ChipThemeData')); + expect( + contents, + contains( + 'shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(8.0)))', + ), + ); + expect(contents, contains('showCheckmark: true')); + expect(contents, contains('double? get elevation => _chipVariant == _ChipVariant.flat')); + expect(contents, contains('? 0.0')); + expect(contents, contains(': isEnabled ? 1.0 : 0.0;')); + expect(contents, contains('double? get pressElevation => 1.0;')); + expect(contents, contains('_colors.onSurface.withOpacity(0.12)')); + expect(contents, contains('size: 18.0')); + }); + test('will run dart format over the generated file', () { final template = UnformattedTemplate(testPath()); template.generateFile();