1 /*
2  * Copyright 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.compose.material3.common
18 
19 import androidx.compose.material3.common.tokens.PaletteTokens
20 import androidx.compose.runtime.Stable
21 import androidx.compose.ui.graphics.Color
22 
23 /**
24  * Tonal Palette structure in Material.
25  *
26  * A tonal palette is comprised of 5 tonal ranges. Each tonal range includes the 13 stops, or tonal
27  * swatches.
28  *
29  * Tonal range names are:
30  * - Neutral (N)
31  * - Neutral variant (NV)
32  * - Primary (P)
33  * - Secondary (S)
34  * - Tertiary (T)
35  */
36 class TonalPalette(
37     // The neutral tonal range from the generated dynamic color palette.
38     // Ordered from the lightest shade [neutral100] to the darkest shade [neutral0].
39     val neutral100: Color,
40     val neutral99: Color,
41     val neutral98: Color,
42     val neutral96: Color,
43     val neutral95: Color,
44     val neutral94: Color,
45     val neutral92: Color,
46     val neutral90: Color,
47     val neutral87: Color,
48     val neutral80: Color,
49     val neutral70: Color,
50     val neutral60: Color,
51     val neutral50: Color,
52     val neutral40: Color,
53     val neutral30: Color,
54     val neutral24: Color,
55     val neutral22: Color,
56     val neutral20: Color,
57     val neutral17: Color,
58     val neutral12: Color,
59     val neutral10: Color,
60     val neutral6: Color,
61     val neutral4: Color,
62     val neutral0: Color,
63 
64     // The neutral variant tonal range, sometimes called "neutral 2",  from the
65     // generated dynamic color palette.
66     // Ordered from the lightest shade [neutralVariant100] to the darkest shade [neutralVariant0].
67     val neutralVariant100: Color,
68     val neutralVariant99: Color,
69     val neutralVariant98: Color,
70     val neutralVariant96: Color,
71     val neutralVariant95: Color,
72     val neutralVariant94: Color,
73     val neutralVariant92: Color,
74     val neutralVariant90: Color,
75     val neutralVariant87: Color,
76     val neutralVariant80: Color,
77     val neutralVariant70: Color,
78     val neutralVariant60: Color,
79     val neutralVariant50: Color,
80     val neutralVariant40: Color,
81     val neutralVariant30: Color,
82     val neutralVariant24: Color,
83     val neutralVariant22: Color,
84     val neutralVariant20: Color,
85     val neutralVariant17: Color,
86     val neutralVariant12: Color,
87     val neutralVariant10: Color,
88     val neutralVariant6: Color,
89     val neutralVariant4: Color,
90     val neutralVariant0: Color,
91 
92     // The primary tonal range from the generated dynamic color palette.
93     // Ordered from the lightest shade [primary100] to the darkest shade [primary0].
94     val primary100: Color,
95     val primary99: Color,
96     val primary95: Color,
97     val primary90: Color,
98     val primary80: Color,
99     val primary70: Color,
100     val primary60: Color,
101     val primary50: Color,
102     val primary40: Color,
103     val primary30: Color,
104     val primary20: Color,
105     val primary10: Color,
106     val primary0: Color,
107 
108     // The secondary tonal range from the generated dynamic color palette.
109     // Ordered from the lightest shade [secondary100] to the darkest shade [secondary0].
110     val secondary100: Color,
111     val secondary99: Color,
112     val secondary95: Color,
113     val secondary90: Color,
114     val secondary80: Color,
115     val secondary70: Color,
116     val secondary60: Color,
117     val secondary50: Color,
118     val secondary40: Color,
119     val secondary30: Color,
120     val secondary20: Color,
121     val secondary10: Color,
122     val secondary0: Color,
123 
124     // The tertiary tonal range from the generated dynamic color palette.
125     // Ordered from the lightest shade [tertiary100] to the darkest shade [tertiary0].
126     val tertiary100: Color,
127     val tertiary99: Color,
128     val tertiary95: Color,
129     val tertiary90: Color,
130     val tertiary80: Color,
131     val tertiary70: Color,
132     val tertiary60: Color,
133     val tertiary50: Color,
134     val tertiary40: Color,
135     val tertiary30: Color,
136     val tertiary20: Color,
137     val tertiary10: Color,
138     val tertiary0: Color
139 )
140 
141 object TonalPaletteDefaults {
142     /** Baseline colors in Material. */
143     @Stable
144     val BaselineTonalPalette =
145         TonalPalette(
146             neutral100 = PaletteTokens.Neutral100,
147             neutral99 = PaletteTokens.Neutral99,
148             neutral98 = PaletteTokens.Neutral98,
149             neutral96 = PaletteTokens.Neutral96,
150             neutral95 = PaletteTokens.Neutral95,
151             neutral94 = PaletteTokens.Neutral94,
152             neutral92 = PaletteTokens.Neutral92,
153             neutral90 = PaletteTokens.Neutral90,
154             neutral87 = PaletteTokens.Neutral87,
155             neutral80 = PaletteTokens.Neutral80,
156             neutral70 = PaletteTokens.Neutral70,
157             neutral60 = PaletteTokens.Neutral60,
158             neutral50 = PaletteTokens.Neutral50,
159             neutral40 = PaletteTokens.Neutral40,
160             neutral30 = PaletteTokens.Neutral30,
161             neutral24 = PaletteTokens.Neutral24,
162             neutral22 = PaletteTokens.Neutral22,
163             neutral20 = PaletteTokens.Neutral20,
164             neutral17 = PaletteTokens.Neutral17,
165             neutral12 = PaletteTokens.Neutral12,
166             neutral10 = PaletteTokens.Neutral10,
167             neutral6 = PaletteTokens.Neutral6,
168             neutral4 = PaletteTokens.Neutral4,
169             neutral0 = PaletteTokens.Neutral0,
170             neutralVariant100 = PaletteTokens.NeutralVariant100,
171             neutralVariant99 = PaletteTokens.NeutralVariant99,
172             neutralVariant95 = PaletteTokens.NeutralVariant95,
173             neutralVariant90 = PaletteTokens.NeutralVariant90,
174             neutralVariant80 = PaletteTokens.NeutralVariant80,
175             neutralVariant70 = PaletteTokens.NeutralVariant70,
176             neutralVariant60 = PaletteTokens.NeutralVariant60,
177             neutralVariant50 = PaletteTokens.NeutralVariant50,
178             neutralVariant40 = PaletteTokens.NeutralVariant40,
179             neutralVariant30 = PaletteTokens.NeutralVariant30,
180             neutralVariant20 = PaletteTokens.NeutralVariant20,
181             neutralVariant10 = PaletteTokens.NeutralVariant10,
182             neutralVariant0 = PaletteTokens.NeutralVariant0,
183             primary100 = PaletteTokens.Primary100,
184             primary99 = PaletteTokens.Primary99,
185             primary95 = PaletteTokens.Primary95,
186             primary90 = PaletteTokens.Primary90,
187             primary80 = PaletteTokens.Primary80,
188             primary70 = PaletteTokens.Primary70,
189             primary60 = PaletteTokens.Primary60,
190             primary50 = PaletteTokens.Primary50,
191             primary40 = PaletteTokens.Primary40,
192             primary30 = PaletteTokens.Primary30,
193             primary20 = PaletteTokens.Primary20,
194             primary10 = PaletteTokens.Primary10,
195             primary0 = PaletteTokens.Primary0,
196             secondary100 = PaletteTokens.Secondary100,
197             secondary99 = PaletteTokens.Secondary99,
198             secondary95 = PaletteTokens.Secondary95,
199             secondary90 = PaletteTokens.Secondary90,
200             secondary80 = PaletteTokens.Secondary80,
201             secondary70 = PaletteTokens.Secondary70,
202             secondary60 = PaletteTokens.Secondary60,
203             secondary50 = PaletteTokens.Secondary50,
204             secondary40 = PaletteTokens.Secondary40,
205             secondary30 = PaletteTokens.Secondary30,
206             secondary20 = PaletteTokens.Secondary20,
207             secondary10 = PaletteTokens.Secondary10,
208             secondary0 = PaletteTokens.Secondary0,
209             tertiary100 = PaletteTokens.Tertiary100,
210             tertiary99 = PaletteTokens.Tertiary99,
211             tertiary95 = PaletteTokens.Tertiary95,
212             tertiary90 = PaletteTokens.Tertiary90,
213             tertiary80 = PaletteTokens.Tertiary80,
214             tertiary70 = PaletteTokens.Tertiary70,
215             tertiary60 = PaletteTokens.Tertiary60,
216             tertiary50 = PaletteTokens.Tertiary50,
217             tertiary40 = PaletteTokens.Tertiary40,
218             tertiary30 = PaletteTokens.Tertiary30,
219             tertiary20 = PaletteTokens.Tertiary20,
220             tertiary10 = PaletteTokens.Tertiary10,
221             tertiary0 = PaletteTokens.Tertiary0,
222 
223             // Currently unused baseline palette values
224             neutralVariant98 = Color.Unspecified,
225             neutralVariant96 = Color.Unspecified,
226             neutralVariant94 = Color.Unspecified,
227             neutralVariant92 = Color.Unspecified,
228             neutralVariant87 = Color.Unspecified,
229             neutralVariant24 = Color.Unspecified,
230             neutralVariant22 = Color.Unspecified,
231             neutralVariant17 = Color.Unspecified,
232             neutralVariant12 = Color.Unspecified,
233             neutralVariant6 = Color.Unspecified,
234             neutralVariant4 = Color.Unspecified
235         )
236 }
237