From ff56c47bb83ec192bf087f97f02ec85d53afb5a3 Mon Sep 17 00:00:00 2001 From: Chris Friedberg Date: Thu, 30 Apr 2026 16:06:02 -0700 Subject: [PATCH 1/3] refactor: replace inferred letter-spacing flag with explicit theme parameter Surface accent letter-spacing intent at the theme call site instead of inferring it from the accent-config 2xl entry. The inference was brittle: a future theme defining letter-spacing on some sizes but not 2xl would have been miscategorized for the entire accent group. --- src/type/mixins/_theme-generator.scss | 12 ++++++++---- src/type/themes/hawaiian/index.scss | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/type/mixins/_theme-generator.scss b/src/type/mixins/_theme-generator.scss index e78602e..28784ae 100644 --- a/src/type/mixins/_theme-generator.scss +++ b/src/type/mixins/_theme-generator.scss @@ -5,7 +5,14 @@ @import "../mixins/type-generator"; // Theme generator -@mixin generate-theme($theme-name, $body-config, $display-config, $heading-config, $accent-config) { +@mixin generate-theme( + $theme-name, + $body-config, + $display-config, + $heading-config, + $accent-config, + $accent-uses-letter-spacing: true +) { // Map of all type configs for the theme $theme-configs: ( 'body': $body-config, @@ -13,9 +20,6 @@ 'heading': $heading-config, 'accent': $accent-config ); - - // Derive letter-spacing behavior from accent config data rather than theme name - $accent-uses-letter-spacing: type-property-check($accent-config, '2xl', 'letter-spacing') != null; // Generate CSS variables for the theme @include generate-theme-type-css-vars($theme-configs); diff --git a/src/type/themes/hawaiian/index.scss b/src/type/themes/hawaiian/index.scss index afaac0f..b063b6c 100644 --- a/src/type/themes/hawaiian/index.scss +++ b/src/type/themes/hawaiian/index.scss @@ -6,5 +6,6 @@ $hawaiian-type-body-config, $hawaiian-type-display-config, $hawaiian-type-heading-config, - $hawaiian-type-accent-config + $hawaiian-type-accent-config, + $accent-uses-letter-spacing: false ); From 4c20d137598937cda7ac1bfd31afa5f9b23caa1a Mon Sep 17 00:00:00 2001 From: Chris Friedberg Date: Thu, 30 Apr 2026 16:06:38 -0700 Subject: [PATCH 2/3] refactor: emit letter-spacing CSS var unconditionally in fluid-type The per-size guard on var emission and the theme-level $use-letter-spacing flag on class emission were two independent gates that could disagree. A mixed config could produce a class referencing an undefined var, causing letter-spacing to resolve to unset rather than inherit. Make the theme flag the single source of truth. --- src/type/mixins/_fluid-type.scss | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/type/mixins/_fluid-type.scss b/src/type/mixins/_fluid-type.scss index ced76a4..ad5edb6 100644 --- a/src/type/mixins/_fluid-type.scss +++ b/src/type/mixins/_fluid-type.scss @@ -9,13 +9,10 @@ // Set base properties --#{$css-ns}-#{$type}-#{$size}-family: #{type-property-check($theme-config, $size, 'family')}; --#{$css-ns}-#{$type}-#{$size}-family-fallback: #{type-property-check($theme-config, $size, 'familyFallback')}; + --#{$css-ns}-#{$type}-#{$size}-letter-spacing: #{type-property-check($theme-config, $size, 'letter-spacing')}; --#{$css-ns}-#{$type}-#{$size}-weight: #{type-property-check($theme-config, $size, 'weight')}; --#{$css-ns}-#{$type}-#{$size}-line-height: #{type-property-check($theme-config, $size, 'line-height')}; - @if type-property-check($theme-config, $size, 'letter-spacing') != null { - --#{$css-ns}-#{$type}-#{$size}-letter-spacing: #{type-property-check($theme-config, $size, 'letter-spacing')}; - } - // Get min, preferred and max values from the config $min-size: auro_map-deep-get($theme-config, 'sizes', $size, 'font-size', 'min'); $preferred-size: auro_map-deep-get($theme-config, 'sizes', $size, 'font-size', 'preferred'); From 2f492dd0698b59b602c176a6e9488345bd80771f Mon Sep 17 00:00:00 2001 From: Chris Friedberg Date: Thu, 30 Apr 2026 16:07:16 -0700 Subject: [PATCH 3/3] refactor: rename generate-theme-type-classes flag to clarify accent scope The mixin name suggests it covers all four type categories, but the $use-letter-spacing parameter only ever flowed to generate-accent-classes. Rename to $accent-use-letter-spacing so the scope is visible at the call site without stepping into the mixin body. --- src/type/mixins/_theme-generator.scss | 2 +- src/type/mixins/_type-generator.scss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/type/mixins/_theme-generator.scss b/src/type/mixins/_theme-generator.scss index 28784ae..a37f142 100644 --- a/src/type/mixins/_theme-generator.scss +++ b/src/type/mixins/_theme-generator.scss @@ -25,5 +25,5 @@ @include generate-theme-type-css-vars($theme-configs); // Generate theme type classes - @include generate-theme-type-classes($use-letter-spacing: $accent-uses-letter-spacing); + @include generate-theme-type-classes($accent-use-letter-spacing: $accent-uses-letter-spacing); } diff --git a/src/type/mixins/_type-generator.scss b/src/type/mixins/_type-generator.scss index 69779dc..3eee9af 100644 --- a/src/type/mixins/_type-generator.scss +++ b/src/type/mixins/_type-generator.scss @@ -14,9 +14,9 @@ } // Generate theme type classes -@mixin generate-theme-type-classes($use-fallback: false, $fallback-configs: null, $use-letter-spacing: true) { +@mixin generate-theme-type-classes($use-fallback: false, $fallback-configs: null, $accent-use-letter-spacing: true) { @include generate-body-classes($use-fallback, if($fallback-configs != null, map-get($fallback-configs, 'body'), null)); @include generate-display-classes($use-fallback, if($fallback-configs != null, map-get($fallback-configs, 'display'), null)); @include generate-heading-classes($use-fallback, if($fallback-configs != null, map-get($fallback-configs, 'heading'), null)); - @include generate-accent-classes($use-fallback, if($fallback-configs != null, map-get($fallback-configs, 'accent'), null), $use-letter-spacing); + @include generate-accent-classes($use-fallback, if($fallback-configs != null, map-get($fallback-configs, 'accent'), null), $accent-use-letter-spacing); }