@discourser/design-system 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/{chunk-SNUJBT5R.js → chunk-3HS2YGGX.js} +213 -83
  2. package/dist/chunk-3HS2YGGX.js.map +1 -0
  3. package/dist/{chunk-52D45DUF.js → chunk-NU6GI57K.js} +25 -13
  4. package/dist/chunk-NU6GI57K.js.map +1 -0
  5. package/dist/{chunk-PFWU7QSM.cjs → chunk-OZBQAALG.cjs} +213 -83
  6. package/dist/chunk-OZBQAALG.cjs.map +1 -0
  7. package/dist/{chunk-4QASRPVX.cjs → chunk-WSJLKVXZ.cjs} +25 -13
  8. package/dist/chunk-WSJLKVXZ.cjs.map +1 -0
  9. package/dist/components/Breadcrumb.d.ts +8 -3
  10. package/dist/components/Breadcrumb.d.ts.map +1 -1
  11. package/dist/components/Checkbox.d.ts +3 -3
  12. package/dist/components/Icons/TrashIcon.d.ts +6 -0
  13. package/dist/components/Icons/TrashIcon.d.ts.map +1 -0
  14. package/dist/components/Icons/index.d.ts +1 -0
  15. package/dist/components/Icons/index.d.ts.map +1 -1
  16. package/dist/components/index.cjs +69 -69
  17. package/dist/components/index.js +1 -1
  18. package/dist/figma-codex.json +2 -7
  19. package/dist/index.cjs +73 -73
  20. package/dist/index.js +2 -2
  21. package/dist/languages/transform.d.ts +1 -8
  22. package/dist/languages/transform.d.ts.map +1 -1
  23. package/dist/preset/index.cjs +2 -2
  24. package/dist/preset/index.d.ts.map +1 -1
  25. package/dist/preset/index.js +1 -1
  26. package/dist/preset/recipes/breadcrumb.d.ts.map +1 -1
  27. package/dist/preset/semantic-tokens.d.ts +186 -45
  28. package/dist/preset/semantic-tokens.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/src/__tests__/token-contract.test.ts +168 -0
  31. package/src/components/Breadcrumb.tsx +39 -13
  32. package/src/components/Icons/TrashIcon.tsx +34 -0
  33. package/src/components/Icons/index.ts +1 -0
  34. package/src/components/__tests__/Breadcrumb.test.tsx +82 -0
  35. package/src/languages/transform.ts +74 -52
  36. package/src/preset/index.ts +15 -3
  37. package/src/preset/recipes/breadcrumb.ts +22 -0
  38. package/src/preset/semantic-tokens.ts +164 -53
  39. package/dist/chunk-4QASRPVX.cjs.map +0 -1
  40. package/dist/chunk-52D45DUF.js.map +0 -1
  41. package/dist/chunk-PFWU7QSM.cjs.map +0 -1
  42. package/dist/chunk-SNUJBT5R.js.map +0 -1
@@ -1,4 +1,7 @@
1
- import type { DesignLanguageContract, TonalPalette, SemanticColors } from '../contracts/design-language.contract'
1
+ import type {
2
+ DesignLanguageContract,
3
+ TonalPalette,
4
+ } from '../contracts/design-language.contract';
2
5
  /**
3
6
  * Transforms a DesignLanguageContract into Panda CSS theme configuration
4
7
  */
@@ -6,47 +9,70 @@ export function transformToPandaTheme(language: DesignLanguageContract) {
6
9
  return {
7
10
  tokens: transformTokens(language),
8
11
  semanticTokens: transformSemanticTokens(language),
9
- textStyles: transformTextStyles(language)
12
+ textStyles: transformTextStyles(language),
10
13
  };
11
14
  }
12
15
 
13
16
  function transformTokens(language: DesignLanguageContract) {
14
17
  return {
15
- colors: transformColorPalettes(language.colors as unknown as Record<string, TonalPalette>),
18
+ colors: transformColorPalettes(
19
+ language.colors as unknown as Record<string, TonalPalette>,
20
+ ),
16
21
  fonts: {
17
22
  display: { value: language.typography.fonts.display },
18
23
  body: { value: language.typography.fonts.body },
19
- mono: { value: language.typography.fonts.mono }
24
+ mono: { value: language.typography.fonts.mono },
20
25
  },
21
- fontSizes: extractFontSizes(language.typography.scale as unknown as Record<string, { fontSize: string }>),
22
- lineHeights: extractLineHeights(language.typography.scale as unknown as Record<string, { lineHeight: string }>),
23
- fontWeights: extractFontWeights(language.typography.scale as unknown as Record<string, { fontWeight: string }>),
24
- letterSpacings: extractLetterSpacings(language.typography.scale as unknown as Record<string, { letterSpacing: string }>),
25
- spacing: objectToTokens(language.spacing as unknown as Record<string, string>),
26
- radii: objectToTokens(language.shape.radii as unknown as Record<string, string>),
27
- shadows: objectToTokens(language.elevation.levels as unknown as Record<string, string>),
28
- durations: objectToTokens(language.motion.durations as unknown as Record<string, string>),
29
- easings: objectToTokens(language.motion.easings as unknown as Record<string, string>),
30
- borderWidths: objectToTokens(language.border.widths as unknown as Record<string, string>)
26
+ fontSizes: extractFontSizes(
27
+ language.typography.scale as unknown as Record<
28
+ string,
29
+ { fontSize: string }
30
+ >,
31
+ ),
32
+ lineHeights: extractLineHeights(
33
+ language.typography.scale as unknown as Record<
34
+ string,
35
+ { lineHeight: string }
36
+ >,
37
+ ),
38
+ fontWeights: extractFontWeights(
39
+ language.typography.scale as unknown as Record<
40
+ string,
41
+ { fontWeight: string }
42
+ >,
43
+ ),
44
+ letterSpacings: extractLetterSpacings(
45
+ language.typography.scale as unknown as Record<
46
+ string,
47
+ { letterSpacing: string }
48
+ >,
49
+ ),
50
+ spacing: objectToTokens(
51
+ language.spacing as unknown as Record<string, string>,
52
+ ),
53
+ radii: objectToTokens(
54
+ language.shape.radii as unknown as Record<string, string>,
55
+ ),
56
+ shadows: objectToTokens(
57
+ language.elevation.levels as unknown as Record<string, string>,
58
+ ),
59
+ durations: objectToTokens(
60
+ language.motion.durations as unknown as Record<string, string>,
61
+ ),
62
+ easings: objectToTokens(
63
+ language.motion.easings as unknown as Record<string, string>,
64
+ ),
65
+ borderWidths: objectToTokens(
66
+ language.border.widths as unknown as Record<string, string>,
67
+ ),
31
68
  };
32
69
  }
33
70
 
34
- function transformSemanticTokens(language: DesignLanguageContract) {
35
- const light = language.semantic;
36
- const dark = language.semanticDark || light; // Fallback to light if no dark
37
-
71
+ function transformSemanticTokens(_language: DesignLanguageContract) {
72
+ // Semantic colors are now managed entirely by semantic-tokens.ts
73
+ // This prevents flat hex tokens from overwriting the nested semantic token structure
38
74
  return {
39
- colors: Object.fromEntries(
40
- Object.entries(light).map(([key, lightValue]) => [
41
- key,
42
- {
43
- value: {
44
- base: lightValue,
45
- _dark: dark[key as keyof SemanticColors] || lightValue
46
- }
47
- }
48
- ])
49
- )
75
+ colors: {},
50
76
  };
51
77
  }
52
78
 
@@ -62,10 +88,10 @@ function transformTextStyles(language: DesignLanguageContract) {
62
88
  fontSize: style.fontSize,
63
89
  lineHeight: style.lineHeight,
64
90
  fontWeight: style.fontWeight,
65
- letterSpacing: style.letterSpacing
66
- }
67
- }
68
- ])
91
+ letterSpacing: style.letterSpacing,
92
+ },
93
+ },
94
+ ]),
69
95
  );
70
96
  }
71
97
 
@@ -74,18 +100,15 @@ function transformColorPalettes(palettes: Record<string, TonalPalette>) {
74
100
  Object.entries(palettes).map(([name, palette]) => [
75
101
  name,
76
102
  Object.fromEntries(
77
- Object.entries(palette).map(([tone, value]) => [
78
- tone,
79
- { value }
80
- ])
81
- )
82
- ])
103
+ Object.entries(palette).map(([tone, value]) => [tone, { value }]),
104
+ ),
105
+ ]),
83
106
  );
84
107
  }
85
108
 
86
109
  function objectToTokens<T extends Record<string, string>>(obj: T) {
87
110
  return Object.fromEntries(
88
- Object.entries(obj).map(([key, value]) => [key, { value }])
111
+ Object.entries(obj).map(([key, value]) => [key, { value }]),
89
112
  );
90
113
  }
91
114
 
@@ -93,8 +116,8 @@ function extractFontSizes(scale: Record<string, { fontSize: string }>) {
93
116
  return Object.fromEntries(
94
117
  Object.entries(scale).map(([name, style]) => [
95
118
  name,
96
- { value: style.fontSize }
97
- ])
119
+ { value: style.fontSize },
120
+ ]),
98
121
  );
99
122
  }
100
123
 
@@ -102,29 +125,28 @@ function extractLineHeights(scale: Record<string, { lineHeight: string }>) {
102
125
  return Object.fromEntries(
103
126
  Object.entries(scale).map(([name, style]) => [
104
127
  name,
105
- { value: style.lineHeight }
106
- ])
128
+ { value: style.lineHeight },
129
+ ]),
107
130
  );
108
131
  }
109
132
 
110
133
  function extractFontWeights(scale: Record<string, { fontWeight: string }>) {
111
134
  const weights = new Map<string, string>();
112
- Object.values(scale).forEach(style => {
135
+ Object.values(scale).forEach((style) => {
113
136
  weights.set(style.fontWeight, style.fontWeight);
114
137
  });
115
138
  return Object.fromEntries(
116
- Array.from(weights.entries()).map(([key, value]) => [
117
- key,
118
- { value }
119
- ])
139
+ Array.from(weights.entries()).map(([key, value]) => [key, { value }]),
120
140
  );
121
141
  }
122
142
 
123
- function extractLetterSpacings(scale: Record<string, { letterSpacing: string }>) {
143
+ function extractLetterSpacings(
144
+ scale: Record<string, { letterSpacing: string }>,
145
+ ) {
124
146
  return Object.fromEntries(
125
147
  Object.entries(scale).map(([name, style]) => [
126
148
  name,
127
- { value: style.letterSpacing }
128
- ])
149
+ { value: style.letterSpacing },
150
+ ]),
129
151
  );
130
152
  }
@@ -1,7 +1,7 @@
1
1
  import { definePreset } from '@pandacss/dev';
2
2
  import { activeLanguage, transformToPandaTheme } from '../languages';
3
3
  import { colors as m3Colors } from './colors';
4
- import { m3SemanticTokens } from './semantic-tokens';
4
+ import { semanticColorTokens, m3SemanticTokens } from './semantic-tokens';
5
5
 
6
6
  // Park UI recipes - Core
7
7
  import { button as parkButton } from './recipes/button';
@@ -97,8 +97,20 @@ export const discourserPandaPreset = definePreset({
97
97
  // Semantic tokens: M3 colors + Park UI aliases + shadows + radii
98
98
  semanticTokens: {
99
99
  colors: {
100
- // M3-to-Radix color bridges
100
+ // Non-conflicting M3 semantic tokens land here first
101
+ // (onPrimary, onSecondary, surface, outline, etc.)
102
+ ...semanticColorTokens,
103
+
104
+ // M3-to-Radix color bridges — overwrite conflicting top-level keys,
105
+ // then re-merge the M3 semantic DEFAULT+container back in
101
106
  ...m3Colors,
107
+ primary: { ...m3Colors.primary, ...semanticColorTokens.primary },
108
+ secondary: {
109
+ ...m3Colors.secondary,
110
+ ...semanticColorTokens.secondary,
111
+ },
112
+ tertiary: { ...m3Colors.tertiary, ...semanticColorTokens.tertiary },
113
+ error: { ...m3Colors.error, ...semanticColorTokens.error },
102
114
 
103
115
  // Park UI-style aliases for component compatibility
104
116
  fg: {
@@ -119,7 +131,7 @@ export const discourserPandaPreset = definePreset({
119
131
  value: { base: '{colors.gray.6}', _dark: '{colors.gray.6}' },
120
132
  },
121
133
 
122
- // M3 semantic tokens (surface, onSurface, etc.)
134
+ // DEPRECATED: m3-prefixed aliases (still needed by discourser.ai)
123
135
  ...m3SemanticTokens,
124
136
 
125
137
  // Base colors
@@ -102,6 +102,28 @@ export const breadcrumb = defineSlotRecipe({
102
102
  },
103
103
  },
104
104
 
105
+ compoundVariants: [
106
+ {
107
+ variant: 'discourser',
108
+ css: {
109
+ link: {
110
+ '&[data-disabled]': {
111
+ color: 'fg.subtle',
112
+ opacity: 0.45,
113
+ pointerEvents: 'none',
114
+ cursor: 'default',
115
+ _hover: { color: 'fg.subtle' },
116
+ },
117
+ },
118
+ item: {
119
+ '&[data-disabled]': {
120
+ opacity: 0.45,
121
+ },
122
+ },
123
+ },
124
+ },
125
+ ],
126
+
105
127
  defaultVariants: {
106
128
  variant: 'plain',
107
129
  size: 'md',
@@ -1,79 +1,190 @@
1
1
  import { defineSemanticTokens } from '@pandacss/dev';
2
2
  import { material3Language } from '../languages/material3.language';
3
3
 
4
- const semantic = material3Language.semantic;
5
- const semanticDark = material3Language.semanticDark!;
4
+ /**
5
+ * MAINTENANCE CONTRACT:
6
+ * Every key in material3Language.semantic MUST have a corresponding entry here.
7
+ * src/__tests__/token-contract.test.ts enforces this automatically.
8
+ * When adding a new semantic role to material3.language.ts:
9
+ * 1. Add the token here in semanticColorTokens
10
+ * 2. Run pnpm test to confirm the contract test passes
11
+ * 3. Update Colors.mdx to add the swatch
12
+ * 4. Bump the minor version
13
+ */
14
+
15
+ const s = material3Language.semantic;
16
+ const d = material3Language.semanticDark!;
6
17
 
7
18
  /**
8
- * M3 Semantic Tokens - layered on top of Park UI
9
- *
10
- * These provide M3-style naming (surface, onSurface, etc.)
11
- * while Park UI components use their own naming (fg, canvas, etc.)
19
+ * Clean semantic color tokens no m3 prefix.
20
+ * These are the authoritative names going forward.
12
21
  */
13
- export const m3SemanticTokens = defineSemanticTokens.colors({
14
- // M3 Surface System
15
- surface: {
16
- DEFAULT: { value: { base: semantic.surface, _dark: semanticDark.surface } },
17
- dim: { value: { base: semantic.surfaceContainerLow, _dark: semanticDark.surfaceContainerLow } },
18
- bright: { value: { base: semantic.surfaceContainerHigh, _dark: semanticDark.surfaceContainerHigh } },
22
+ export const semanticColorTokens = defineSemanticTokens.colors({
23
+ // Primary
24
+ primary: {
25
+ DEFAULT: { value: { base: s.primary, _dark: d.primary } },
19
26
  container: {
20
- DEFAULT: { value: { base: semantic.surfaceContainer, _dark: semanticDark.surfaceContainer } },
21
- low: { value: { base: semantic.surfaceContainerLow, _dark: semanticDark.surfaceContainerLow } },
22
- lowest: { value: { base: semantic.surfaceContainerLowest, _dark: semanticDark.surfaceContainerLowest } },
23
- high: { value: { base: semantic.surfaceContainerHigh, _dark: semanticDark.surfaceContainerHigh } },
24
- highest: { value: { base: semantic.surfaceContainerHighest, _dark: semanticDark.surfaceContainerHighest } },
27
+ value: { base: s.primaryContainer, _dark: d.primaryContainer },
25
28
  },
26
29
  },
27
- onSurface: {
28
- DEFAULT: { value: { base: semantic.onSurface, _dark: semanticDark.onSurface } },
29
- variant: { value: { base: semantic.onSurfaceVariant, _dark: semanticDark.onSurfaceVariant } },
30
+ onPrimary: {
31
+ DEFAULT: { value: { base: s.onPrimary, _dark: d.onPrimary } },
32
+ container: {
33
+ value: { base: s.onPrimaryContainer, _dark: d.onPrimaryContainer },
34
+ },
30
35
  },
31
36
 
32
- // M3 Primary tokens (for explicit M3 usage)
33
- m3Primary: {
34
- DEFAULT: { value: { base: semantic.primary, _dark: semanticDark.primary } },
35
- container: { value: { base: semantic.primaryContainer, _dark: semanticDark.primaryContainer } },
37
+ // Secondary
38
+ secondary: {
39
+ DEFAULT: { value: { base: s.secondary, _dark: d.secondary } },
40
+ container: {
41
+ value: { base: s.secondaryContainer, _dark: d.secondaryContainer },
42
+ },
36
43
  },
37
- onM3Primary: {
38
- DEFAULT: { value: { base: semantic.onPrimary, _dark: semanticDark.onPrimary } },
39
- container: { value: { base: semantic.onPrimaryContainer, _dark: semanticDark.onPrimaryContainer } },
44
+ onSecondary: {
45
+ DEFAULT: { value: { base: s.onSecondary, _dark: d.onSecondary } },
46
+ container: {
47
+ value: { base: s.onSecondaryContainer, _dark: d.onSecondaryContainer },
48
+ },
40
49
  },
41
50
 
42
- // M3 Secondary (prefixed to avoid conflict with Park UI Radix-scale bridge)
43
- m3Secondary: {
44
- DEFAULT: { value: { base: semantic.secondary, _dark: semanticDark.secondary } },
45
- container: { value: { base: semantic.secondaryContainer, _dark: semanticDark.secondaryContainer } },
51
+ // Tertiary
52
+ tertiary: {
53
+ DEFAULT: { value: { base: s.tertiary, _dark: d.tertiary } },
54
+ container: {
55
+ value: { base: s.tertiaryContainer, _dark: d.tertiaryContainer },
56
+ },
46
57
  },
47
- onM3Secondary: {
48
- DEFAULT: { value: { base: semantic.onSecondary, _dark: semanticDark.onSecondary } },
49
- container: { value: { base: semantic.onSecondaryContainer, _dark: semanticDark.onSecondaryContainer } },
58
+ onTertiary: {
59
+ DEFAULT: { value: { base: s.onTertiary, _dark: d.onTertiary } },
60
+ container: {
61
+ value: { base: s.onTertiaryContainer, _dark: d.onTertiaryContainer },
62
+ },
50
63
  },
51
64
 
52
- // M3 Tertiary (prefixed to avoid conflict with Park UI Radix-scale bridge)
53
- m3Tertiary: {
54
- DEFAULT: { value: { base: semantic.tertiary, _dark: semanticDark.tertiary } },
55
- container: { value: { base: semantic.tertiaryContainer, _dark: semanticDark.tertiaryContainer } },
65
+ // Error
66
+ error: {
67
+ DEFAULT: { value: { base: s.error, _dark: d.error } },
68
+ container: { value: { base: s.errorContainer, _dark: d.errorContainer } },
56
69
  },
57
- onM3Tertiary: {
58
- DEFAULT: { value: { base: semantic.onTertiary, _dark: semanticDark.onTertiary } },
59
- container: { value: { base: semantic.onTertiaryContainer, _dark: semanticDark.onTertiaryContainer } },
70
+ onError: {
71
+ DEFAULT: { value: { base: s.onError, _dark: d.onError } },
72
+ container: {
73
+ value: { base: s.onErrorContainer, _dark: d.onErrorContainer },
74
+ },
75
+ },
76
+
77
+ // Surface system
78
+ surface: {
79
+ DEFAULT: { value: { base: s.surface, _dark: d.surface } },
80
+ dim: {
81
+ value: { base: s.surfaceContainerLow, _dark: d.surfaceContainerLow },
82
+ },
83
+ bright: {
84
+ value: { base: s.surfaceContainerHigh, _dark: d.surfaceContainerHigh },
85
+ },
86
+ container: {
87
+ DEFAULT: {
88
+ value: { base: s.surfaceContainer, _dark: d.surfaceContainer },
89
+ },
90
+ low: {
91
+ value: { base: s.surfaceContainerLow, _dark: d.surfaceContainerLow },
92
+ },
93
+ lowest: {
94
+ value: {
95
+ base: s.surfaceContainerLowest,
96
+ _dark: d.surfaceContainerLowest,
97
+ },
98
+ },
99
+ high: {
100
+ value: { base: s.surfaceContainerHigh, _dark: d.surfaceContainerHigh },
101
+ },
102
+ highest: {
103
+ value: {
104
+ base: s.surfaceContainerHighest,
105
+ _dark: d.surfaceContainerHighest,
106
+ },
107
+ },
108
+ },
109
+ },
110
+ onSurface: {
111
+ DEFAULT: { value: { base: s.onSurface, _dark: d.onSurface } },
112
+ variant: { value: { base: s.onSurfaceVariant, _dark: d.onSurfaceVariant } },
60
113
  },
114
+ surfaceVariant: {
115
+ value: { base: s.surfaceVariant, _dark: d.surfaceVariant },
116
+ },
117
+
118
+ // Background
119
+ background: { value: { base: s.background, _dark: d.background } },
120
+ onBackground: { value: { base: s.onBackground, _dark: d.onBackground } },
61
121
 
62
- // M3 Outline
122
+ // Outline
63
123
  outline: {
64
- DEFAULT: { value: { base: semantic.outline, _dark: semanticDark.outline } },
65
- variant: { value: { base: semantic.outlineVariant, _dark: semanticDark.outlineVariant } },
124
+ DEFAULT: { value: { base: s.outline, _dark: d.outline } },
125
+ variant: { value: { base: s.outlineVariant, _dark: d.outlineVariant } },
66
126
  },
67
127
 
68
- // M3 Inverse
69
- inverseSurface: { value: { base: semantic.inverseSurface, _dark: semanticDark.inverseSurface } },
70
- inverseOnSurface: { value: { base: semantic.inverseOnSurface, _dark: semanticDark.inverseOnSurface } },
71
- inversePrimary: { value: { base: semantic.inversePrimary, _dark: semanticDark.inversePrimary } },
128
+ // Inverse
129
+ inverseSurface: {
130
+ value: { base: s.inverseSurface, _dark: d.inverseSurface },
131
+ },
132
+ inverseOnSurface: {
133
+ value: { base: s.inverseOnSurface, _dark: d.inverseOnSurface },
134
+ },
135
+ inversePrimary: {
136
+ value: { base: s.inversePrimary, _dark: d.inversePrimary },
137
+ },
72
138
  // Not standard M3 tokens, but follow inversePrimary's pattern:
73
139
  // light mode = dark-palette value, dark mode = light-palette value.
74
- inverseSecondary: { value: { base: semanticDark.secondary, _dark: semantic.secondary } },
75
- inverseTertiary: { value: { base: semanticDark.tertiary, _dark: semantic.tertiary } },
140
+ inverseSecondary: { value: { base: d.secondary, _dark: s.secondary } },
141
+ inverseTertiary: { value: { base: d.tertiary, _dark: s.tertiary } },
76
142
 
77
- // Scrim/Shadow
78
- scrim: { value: { base: semantic.scrim, _dark: semanticDark.scrim } },
79
- });
143
+ // Utility
144
+ scrim: { value: { base: s.scrim, _dark: d.scrim } },
145
+ shadow: { value: { base: s.shadow, _dark: d.shadow } },
146
+ });
147
+
148
+ /**
149
+ * DEPRECATED: m3-prefixed aliases — will be removed after discourser.ai token update session.
150
+ * Semantic tokens cannot reference other semantic tokens in Panda CSS, so these
151
+ * duplicate the hex values directly from the language contract.
152
+ */
153
+ export const m3SemanticTokens = defineSemanticTokens.colors({
154
+ m3Primary: {
155
+ DEFAULT: { value: { base: s.primary, _dark: d.primary } },
156
+ container: {
157
+ value: { base: s.primaryContainer, _dark: d.primaryContainer },
158
+ },
159
+ },
160
+ onM3Primary: {
161
+ DEFAULT: { value: { base: s.onPrimary, _dark: d.onPrimary } },
162
+ container: {
163
+ value: { base: s.onPrimaryContainer, _dark: d.onPrimaryContainer },
164
+ },
165
+ },
166
+ m3Secondary: {
167
+ DEFAULT: { value: { base: s.secondary, _dark: d.secondary } },
168
+ container: {
169
+ value: { base: s.secondaryContainer, _dark: d.secondaryContainer },
170
+ },
171
+ },
172
+ onM3Secondary: {
173
+ DEFAULT: { value: { base: s.onSecondary, _dark: d.onSecondary } },
174
+ container: {
175
+ value: { base: s.onSecondaryContainer, _dark: d.onSecondaryContainer },
176
+ },
177
+ },
178
+ m3Tertiary: {
179
+ DEFAULT: { value: { base: s.tertiary, _dark: d.tertiary } },
180
+ container: {
181
+ value: { base: s.tertiaryContainer, _dark: d.tertiaryContainer },
182
+ },
183
+ },
184
+ onM3Tertiary: {
185
+ DEFAULT: { value: { base: s.onTertiary, _dark: d.onTertiary } },
186
+ container: {
187
+ value: { base: s.onTertiaryContainer, _dark: d.onTertiaryContainer },
188
+ },
189
+ },
190
+ });