@udixio/theme 1.0.0-beta.8 → 1.0.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 (199) hide show
  1. package/.eslintrc.mjs +22 -0
  2. package/CHANGELOG.md +174 -0
  3. package/README.md +6 -68
  4. package/dist/API.d.ts +14 -0
  5. package/dist/API.d.ts.map +1 -0
  6. package/dist/LICENSE +202 -0
  7. package/dist/adapter/adapter.abstract.d.ts +10 -0
  8. package/dist/adapter/adapter.abstract.d.ts.map +1 -0
  9. package/dist/adapter/config.interface.d.ts +14 -0
  10. package/dist/adapter/config.interface.d.ts.map +1 -0
  11. package/dist/adapter/define-config.d.ts +3 -0
  12. package/dist/adapter/define-config.d.ts.map +1 -0
  13. package/dist/adapter/file-adapter.mixin.d.ts +18 -0
  14. package/dist/adapter/file-adapter.mixin.d.ts.map +1 -0
  15. package/dist/adapter/index.d.ts +4 -0
  16. package/dist/adapter/index.d.ts.map +1 -0
  17. package/dist/adapters/index.d.ts +3 -0
  18. package/dist/adapters/index.d.ts.map +1 -0
  19. package/dist/adapters/node.adapter.d.ts +7 -0
  20. package/dist/adapters/node.adapter.d.ts.map +1 -0
  21. package/dist/adapters/vite.adapter.d.ts +3 -0
  22. package/dist/adapters/vite.adapter.d.ts.map +1 -0
  23. package/dist/app.container.d.ts +5 -5
  24. package/dist/app.container.d.ts.map +1 -0
  25. package/dist/app.module.d.ts +1 -0
  26. package/dist/app.module.d.ts.map +1 -0
  27. package/dist/bootstrap.d.ts +3 -0
  28. package/dist/bootstrap.d.ts.map +1 -0
  29. package/dist/color/color.api.d.ts +39 -0
  30. package/dist/color/color.api.d.ts.map +1 -0
  31. package/dist/color/color.manager.d.ts +24 -0
  32. package/dist/color/color.manager.d.ts.map +1 -0
  33. package/dist/color/color.module.d.ts +1 -0
  34. package/dist/color/color.module.d.ts.map +1 -0
  35. package/dist/color/color.utils.d.ts +8 -0
  36. package/dist/color/color.utils.d.ts.map +1 -0
  37. package/dist/color/configurable-color.d.ts +31 -0
  38. package/dist/color/configurable-color.d.ts.map +1 -0
  39. package/dist/color/default-color.d.ts +3 -0
  40. package/dist/color/default-color.d.ts.map +1 -0
  41. package/dist/color/index.d.ts +5 -4
  42. package/dist/color/index.d.ts.map +1 -0
  43. package/dist/index.cjs +3215 -0
  44. package/dist/index.d.ts +7 -4
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +3175 -7
  47. package/dist/material-color-utilities/contrastCurve.d.ts +1 -0
  48. package/dist/material-color-utilities/contrastCurve.d.ts.map +1 -0
  49. package/dist/material-color-utilities/dynamic_color.d.ts +89 -76
  50. package/dist/material-color-utilities/dynamic_color.d.ts.map +1 -0
  51. package/dist/material-color-utilities/hct_solver.d.ts +131 -0
  52. package/dist/material-color-utilities/hct_solver.d.ts.map +1 -0
  53. package/dist/material-color-utilities/htc.d.ts +77 -0
  54. package/dist/material-color-utilities/htc.d.ts.map +1 -0
  55. package/dist/material-color-utilities/index.d.ts +1 -0
  56. package/dist/material-color-utilities/index.d.ts.map +1 -0
  57. package/dist/material-color-utilities/toneDeltaPair.d.ts +19 -25
  58. package/dist/material-color-utilities/toneDeltaPair.d.ts.map +1 -0
  59. package/dist/plugin/index.d.ts +4 -0
  60. package/dist/plugin/index.d.ts.map +1 -0
  61. package/dist/plugin/plugin.abstract.d.ts +19 -5
  62. package/dist/plugin/plugin.abstract.d.ts.map +1 -0
  63. package/dist/plugin/plugin.api.d.ts +10 -0
  64. package/dist/plugin/plugin.api.d.ts.map +1 -0
  65. package/dist/plugin/plugin.module.d.ts +1 -0
  66. package/dist/plugin/plugin.module.d.ts.map +1 -0
  67. package/dist/plugins/font/font.plugin.d.ts +50 -0
  68. package/dist/plugins/font/font.plugin.d.ts.map +1 -0
  69. package/dist/plugins/font/index.d.ts +2 -0
  70. package/dist/plugins/font/index.d.ts.map +1 -0
  71. package/dist/plugins/index.d.ts +2 -0
  72. package/dist/plugins/index.d.ts.map +1 -0
  73. package/dist/theme/index.d.ts +7 -3
  74. package/dist/theme/index.d.ts.map +1 -0
  75. package/dist/theme/scheme.d.ts +20 -0
  76. package/dist/theme/scheme.d.ts.map +1 -0
  77. package/dist/theme/scheme.manager.d.ts +31 -0
  78. package/dist/theme/scheme.manager.d.ts.map +1 -0
  79. package/dist/theme/theme.api.d.ts +23 -0
  80. package/dist/theme/theme.api.d.ts.map +1 -0
  81. package/dist/theme/theme.module.d.ts +1 -0
  82. package/dist/theme/theme.module.d.ts.map +1 -0
  83. package/dist/theme/variant.d.ts +36 -0
  84. package/dist/theme/variant.d.ts.map +1 -0
  85. package/dist/theme/variant.manager.d.ts +14 -0
  86. package/dist/theme/variant.manager.d.ts.map +1 -0
  87. package/dist/theme/variants/expressive.variant.d.ts +3 -0
  88. package/dist/theme/variants/expressive.variant.d.ts.map +1 -0
  89. package/dist/theme/variants/index.d.ts +11 -0
  90. package/dist/theme/variants/index.d.ts.map +1 -0
  91. package/dist/theme/variants/neutral.variant.d.ts +3 -0
  92. package/dist/theme/variants/neutral.variant.d.ts.map +1 -0
  93. package/dist/theme/variants/tonal-spot.variant.d.ts +3 -0
  94. package/dist/theme/variants/tonal-spot.variant.d.ts.map +1 -0
  95. package/dist/theme/variants/vibrant.variant.d.ts +3 -0
  96. package/dist/theme/variants/vibrant.variant.d.ts.map +1 -0
  97. package/package.json +24 -86
  98. package/src/API.ts +23 -0
  99. package/src/adapter/adapter.abstract.ts +64 -0
  100. package/src/adapter/config.interface.ts +14 -0
  101. package/src/adapter/define-config.ts +11 -0
  102. package/src/adapter/file-adapter.mixin.ts +72 -0
  103. package/src/adapter/index.ts +3 -0
  104. package/src/adapters/index.ts +2 -0
  105. package/src/adapters/node.adapter.ts +49 -0
  106. package/src/adapters/vite.adapter.ts +79 -0
  107. package/src/app.container.ts +12 -36
  108. package/src/app.module.ts +2 -2
  109. package/src/bootstrap.ts +6 -0
  110. package/src/color/color.api.ts +75 -0
  111. package/src/color/color.manager.ts +213 -0
  112. package/src/color/color.module.ts +4 -4
  113. package/src/color/color.utils.ts +126 -0
  114. package/src/color/configurable-color.ts +67 -0
  115. package/src/color/default-color.ts +832 -0
  116. package/src/color/index.ts +4 -4
  117. package/src/index.test.ts +5 -0
  118. package/src/index.ts +6 -4
  119. package/src/material-color-utilities/dynamic_color.ts +286 -222
  120. package/src/material-color-utilities/hct_solver.ts +536 -0
  121. package/src/material-color-utilities/htc.ts +198 -0
  122. package/src/material-color-utilities/toneDeltaPair.ts +29 -11
  123. package/src/plugin/index.ts +3 -0
  124. package/src/plugin/plugin.abstract.ts +45 -4
  125. package/src/plugin/plugin.api.ts +51 -0
  126. package/src/plugin/plugin.module.ts +2 -2
  127. package/src/plugins/font/font.plugin.ts +203 -0
  128. package/src/plugins/font/index.ts +1 -0
  129. package/src/plugins/index.ts +1 -0
  130. package/src/theme/index.ts +6 -3
  131. package/src/theme/{services/scheme.service.ts → scheme.manager.ts} +39 -19
  132. package/src/theme/{entities/scheme.entity.ts → scheme.ts} +20 -4
  133. package/src/theme/{services/theme.service.ts → theme.api.ts} +23 -19
  134. package/src/theme/theme.module.ts +6 -4
  135. package/src/theme/variant.manager.ts +58 -0
  136. package/src/theme/variant.ts +53 -0
  137. package/src/theme/variants/expressive.variant.ts +81 -0
  138. package/src/theme/variants/index.ts +16 -0
  139. package/src/theme/variants/neutral.variant.ts +45 -0
  140. package/src/theme/variants/tonal-spot.variant.ts +35 -0
  141. package/src/theme/variants/vibrant.variant.ts +72 -0
  142. package/tsconfig.json +13 -0
  143. package/tsconfig.lib.json +33 -0
  144. package/tsconfig.spec.json +36 -0
  145. package/vite.config.ts +54 -0
  146. package/LICENSE +0 -21
  147. package/dist/app.service.d.ts +0 -13
  148. package/dist/color/color.interface.d.ts +0 -8
  149. package/dist/color/entities/color.entity.d.ts +0 -42
  150. package/dist/color/entities/index.d.ts +0 -1
  151. package/dist/color/models/default-color.model.d.ts +0 -3
  152. package/dist/color/models/index.d.ts +0 -1
  153. package/dist/color/services/color-manager.service.d.ts +0 -18
  154. package/dist/color/services/color.service.d.ts +0 -21
  155. package/dist/color/services/index.d.ts +0 -2
  156. package/dist/config/config.interface.d.ts +0 -14
  157. package/dist/config/config.module.d.ts +0 -2
  158. package/dist/config/config.service.d.ts +0 -12
  159. package/dist/config/index.d.ts +0 -2
  160. package/dist/main.d.ts +0 -3
  161. package/dist/plugin/plugin.service.d.ts +0 -9
  162. package/dist/theme/entities/index.d.ts +0 -2
  163. package/dist/theme/entities/scheme.entity.d.ts +0 -15
  164. package/dist/theme/entities/variant.entity.d.ts +0 -7
  165. package/dist/theme/models/index.d.ts +0 -1
  166. package/dist/theme/models/variant.model.d.ts +0 -8
  167. package/dist/theme/services/index.d.ts +0 -3
  168. package/dist/theme/services/scheme.service.d.ts +0 -17
  169. package/dist/theme/services/theme.service.d.ts +0 -22
  170. package/dist/theme/services/variant.service.d.ts +0 -13
  171. package/dist/theme.cjs.development.js +0 -1975
  172. package/dist/theme.cjs.development.js.map +0 -1
  173. package/dist/theme.cjs.production.min.js +0 -2
  174. package/dist/theme.cjs.production.min.js.map +0 -1
  175. package/dist/theme.esm.js +0 -1947
  176. package/dist/theme.esm.js.map +0 -1
  177. package/src/app.service.spec.ts +0 -15
  178. package/src/app.service.ts +0 -23
  179. package/src/color/color.interface.ts +0 -13
  180. package/src/color/entities/color.entity.ts +0 -71
  181. package/src/color/entities/index.ts +0 -1
  182. package/src/color/models/default-color.model.ts +0 -300
  183. package/src/color/models/index.ts +0 -1
  184. package/src/color/services/color-manager.service.ts +0 -191
  185. package/src/color/services/color.service.spec.ts +0 -28
  186. package/src/color/services/color.service.ts +0 -75
  187. package/src/color/services/index.ts +0 -2
  188. package/src/config/config.interface.ts +0 -15
  189. package/src/config/config.module.ts +0 -7
  190. package/src/config/config.service.ts +0 -68
  191. package/src/config/index.ts +0 -2
  192. package/src/main.ts +0 -14
  193. package/src/plugin/plugin.service.ts +0 -26
  194. package/src/theme/entities/index.ts +0 -2
  195. package/src/theme/entities/variant.entity.ts +0 -39
  196. package/src/theme/models/index.ts +0 -1
  197. package/src/theme/models/variant.model.ts +0 -63
  198. package/src/theme/services/index.ts +0 -3
  199. package/src/theme/services/variant.service.ts +0 -52
@@ -0,0 +1,832 @@
1
+ import { ToneDeltaPair } from '../material-color-utilities';
2
+ import { DynamicColor } from '../material-color-utilities/dynamic_color';
3
+ import { highestSurface } from './color.manager';
4
+ import { AddColorsOptions, ColorApi } from './color.api';
5
+ import { Hct } from '../material-color-utilities/htc';
6
+ import { ColorOptions } from './configurable-color';
7
+ import { Scheme } from '../theme';
8
+ import { DynamicColorKey, getCurve, tMaxC, tMinC } from './color.utils';
9
+
10
+ export const defaultColors: AddColorsOptions = (colorService: ColorApi) => {
11
+ const getColor = (key: DynamicColorKey) => {
12
+ return colorService.getColor(key).getMaterialColor();
13
+ };
14
+
15
+ const colors: Record<
16
+ DynamicColorKey,
17
+ | (Partial<ColorOptions> & { alias?: never })
18
+ | { alias: string; palette?: never; tone?: never }
19
+ > = {
20
+ ////////////////////////////////////////////////////////////////
21
+ // Surfaces [S] //
22
+ ////////////////////////////////////////////////////////////////
23
+ surface: {
24
+ palette: (s) => s.getPalette('neutral'),
25
+ tone: (s) => {
26
+ if (s.isDark) {
27
+ return 4;
28
+ } else {
29
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
30
+ return 99;
31
+ } else if (s.variant === 'vibrant') {
32
+ return 97;
33
+ } else {
34
+ return 98;
35
+ }
36
+ }
37
+ },
38
+ isBackground: true,
39
+ },
40
+ surfaceDim: {
41
+ palette: (s) => s.getPalette('neutral'),
42
+ tone: (s) => {
43
+ if (s.isDark) {
44
+ return 4;
45
+ } else {
46
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
47
+ return 90;
48
+ } else if (s.variant === 'vibrant') {
49
+ return 85;
50
+ } else {
51
+ return 87;
52
+ }
53
+ }
54
+ },
55
+ isBackground: true,
56
+ chromaMultiplier: (s) => {
57
+ if (!s.isDark) {
58
+ if (s.variant === 'neutral') {
59
+ return 2.5;
60
+ } else if (s.variant === 'tonalSpot') {
61
+ return 1.7;
62
+ } else if (s.variant === 'expressive') {
63
+ return Hct.isYellow(s.getPalette('neutral').hue) ? 2.7 : 1.75;
64
+ } else if (s.variant === 'vibrant') {
65
+ return 1.36;
66
+ }
67
+ }
68
+ return 1;
69
+ },
70
+ },
71
+ surfaceBright: {
72
+ palette: (s) => s.getPalette('neutral'),
73
+ tone: (s) => {
74
+ if (s.isDark) {
75
+ return 18;
76
+ } else {
77
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
78
+ return 99;
79
+ } else if (s.variant === 'vibrant') {
80
+ return 97;
81
+ } else {
82
+ return 98;
83
+ }
84
+ }
85
+ },
86
+ isBackground: true,
87
+ chromaMultiplier: (s) => {
88
+ if (s.isDark) {
89
+ if (s.variant === 'neutral') {
90
+ return 2.5;
91
+ } else if (s.variant === 'tonalSpot') {
92
+ return 1.7;
93
+ } else if (s.variant === 'expressive') {
94
+ return Hct.isYellow(s.getPalette('neutral').hue) ? 2.7 : 1.75;
95
+ } else if (s.variant === 'vibrant') {
96
+ return 1.36;
97
+ }
98
+ }
99
+ return 1;
100
+ },
101
+ },
102
+ surfaceContainerLowest: {
103
+ palette: (s) => s.getPalette('neutral'),
104
+ tone: (s) => (s.isDark ? 0 : 100),
105
+ isBackground: true,
106
+ },
107
+ surfaceContainerLow: {
108
+ palette: (s) => s.getPalette('neutral'),
109
+ tone: (s) => {
110
+ if (s.isDark) {
111
+ return 6;
112
+ } else {
113
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
114
+ return 98;
115
+ } else if (s.variant === 'vibrant') {
116
+ return 95;
117
+ } else {
118
+ return 96;
119
+ }
120
+ }
121
+ },
122
+ isBackground: true,
123
+ chromaMultiplier: (s) => {
124
+ if (s.variant === 'neutral') {
125
+ return 1.3;
126
+ } else if (s.variant === 'tonalSpot') {
127
+ return 1.25;
128
+ } else if (s.variant === 'expressive') {
129
+ return Hct.isYellow(s.getPalette('neutral').hue) ? 1.3 : 1.15;
130
+ } else if (s.variant === 'vibrant') {
131
+ return 1.08;
132
+ }
133
+ return 1;
134
+ },
135
+ },
136
+ surfaceContainer: {
137
+ palette: (s) => s.getPalette('neutral'),
138
+ tone: (s) => {
139
+ if (s.isDark) {
140
+ return 9;
141
+ } else {
142
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
143
+ return 96;
144
+ } else if (s.variant === 'vibrant') {
145
+ return 92;
146
+ } else {
147
+ return 94;
148
+ }
149
+ }
150
+ },
151
+ isBackground: true,
152
+ chromaMultiplier: (s) => {
153
+ if (s.variant === 'neutral') {
154
+ return 1.6;
155
+ } else if (s.variant === 'tonalSpot') {
156
+ return 1.4;
157
+ } else if (s.variant === 'expressive') {
158
+ return Hct.isYellow(s.getPalette('neutral').hue) ? 1.6 : 1.3;
159
+ } else if (s.variant === 'vibrant') {
160
+ return 1.15;
161
+ }
162
+ return 1;
163
+ },
164
+ },
165
+ surfaceContainerHigh: {
166
+ palette: (s) => s.getPalette('neutral'),
167
+ tone: (s) => {
168
+ if (s.isDark) {
169
+ return 12;
170
+ } else {
171
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
172
+ return 94;
173
+ } else if (s.variant === 'vibrant') {
174
+ return 90;
175
+ } else {
176
+ return 92;
177
+ }
178
+ }
179
+ },
180
+ isBackground: true,
181
+ chromaMultiplier: (s) => {
182
+ if (s.variant === 'neutral') {
183
+ return 1.9;
184
+ } else if (s.variant === 'tonalSpot') {
185
+ return 1.5;
186
+ } else if (s.variant === 'expressive') {
187
+ return Hct.isYellow(s.getPalette('neutral').hue) ? 1.95 : 1.45;
188
+ } else if (s.variant === 'vibrant') {
189
+ return 1.22;
190
+ }
191
+ return 1;
192
+ },
193
+ },
194
+ surfaceContainerHighest: {
195
+ palette: (s) => s.getPalette('neutral'),
196
+ tone: (s) => {
197
+ if (s.isDark) {
198
+ return 15;
199
+ } else {
200
+ if (Hct.isYellow(s.getPalette('neutral').hue)) {
201
+ return 92;
202
+ } else if (s.variant === 'vibrant') {
203
+ return 88;
204
+ } else {
205
+ return 90;
206
+ }
207
+ }
208
+ },
209
+ isBackground: true,
210
+ chromaMultiplier: (s) => {
211
+ if (s.variant === 'neutral') {
212
+ return 2.2;
213
+ } else if (s.variant === 'tonalSpot') {
214
+ return 1.7;
215
+ } else if (s.variant === 'expressive') {
216
+ return Hct.isYellow(s.getPalette('neutral').hue) ? 2.3 : 1.6;
217
+ } else if (s.variant === 'vibrant') {
218
+ return 1.29;
219
+ } else {
220
+ // default
221
+ return 1;
222
+ }
223
+ },
224
+ },
225
+ onSurface: {
226
+ palette: (s) => s.getPalette('neutral'),
227
+ tone: (s) => {
228
+ if (s.variant === 'vibrant') {
229
+ return tMaxC(s.getPalette('neutral'), 0, 100, 1.1);
230
+ } else {
231
+ // For all other variants, the initial tone should be the default
232
+ // tone, which is the same as the background color.
233
+ return DynamicColor.getInitialToneFromBackground((s) =>
234
+ highestSurface(s, colorService),
235
+ )(s);
236
+ }
237
+ },
238
+ chromaMultiplier: (s) => {
239
+ if (s.variant === 'neutral') {
240
+ return 2.2;
241
+ } else if (s.variant === 'tonalSpot') {
242
+ return 1.7;
243
+ } else if (s.variant === 'expressive') {
244
+ return Hct.isYellow(s.getPalette('neutral').hue)
245
+ ? s.isDark
246
+ ? 3.0
247
+ : 2.3
248
+ : 1.6;
249
+ }
250
+
251
+ return 1;
252
+ },
253
+ background: (s) => highestSurface(s, colorService),
254
+ contrastCurve: (s) => (s.isDark ? getCurve(11) : getCurve(9)),
255
+ },
256
+ onSurfaceVariant: {
257
+ palette: (s) => s.getPalette('neutralVariant'),
258
+ chromaMultiplier: (s) => {
259
+ if (s.variant === 'neutral') {
260
+ return 2.2;
261
+ } else if (s.variant === 'tonalSpot') {
262
+ return 1.7;
263
+ } else if (s.variant === 'expressive') {
264
+ return Hct.isYellow(s.getPalette('neutral').hue)
265
+ ? s.isDark
266
+ ? 3.0
267
+ : 2.3
268
+ : 1.6;
269
+ }
270
+ return 1;
271
+ },
272
+ background: (s) => highestSurface(s, colorService),
273
+ contrastCurve: (s) => (s.isDark ? getCurve(6) : getCurve(4.5)),
274
+ },
275
+ outline: {
276
+ palette: (s) => s.getPalette('neutralVariant'),
277
+ chromaMultiplier: (s) => {
278
+ if (s.variant === 'neutral') {
279
+ return 2.2;
280
+ } else if (s.variant === 'tonalSpot') {
281
+ return 1.7;
282
+ } else if (s.variant === 'expressive') {
283
+ return Hct.isYellow(s.getPalette('neutral').hue)
284
+ ? s.isDark
285
+ ? 3.0
286
+ : 2.3
287
+ : 1.6;
288
+ }
289
+ return 1;
290
+ },
291
+ background: (s) => highestSurface(s, colorService),
292
+ contrastCurve: (s) => getCurve(3),
293
+ },
294
+ outlineVariant: {
295
+ palette: (s) => s.getPalette('neutralVariant'),
296
+ chromaMultiplier: (s) => {
297
+ if (s.variant === 'neutral') {
298
+ return 2.2;
299
+ } else if (s.variant === 'tonalSpot') {
300
+ return 1.7;
301
+ } else if (s.variant === 'expressive') {
302
+ return Hct.isYellow(s.getPalette('neutral').hue)
303
+ ? s.isDark
304
+ ? 3.0
305
+ : 2.3
306
+ : 1.6;
307
+ }
308
+
309
+ return 1;
310
+ },
311
+ background: (s) => highestSurface(s, colorService),
312
+ contrastCurve: (s) => getCurve(1.5),
313
+ },
314
+ inverseSurface: {
315
+ palette: (s) => s.getPalette('neutral'),
316
+ tone: (s) => (s.isDark ? 98 : 4),
317
+ isBackground: true,
318
+ },
319
+ inverseOnSurface: {
320
+ palette: (s) => s.getPalette('neutral'),
321
+ tone: (s) => (s.isDark ? 20 : 95),
322
+ background: (s) =>
323
+ colorService.getColor('inverseSurface').getMaterialColor(),
324
+ contrastCurve: (s) => getCurve(7),
325
+ },
326
+ ////////////////////////////////////////////////////////////////
327
+ // Primaries [P] //
328
+ ////////////////////////////////////////////////////////////////
329
+ primary: {
330
+ palette: (s) => s.getPalette('primary'),
331
+ tone: (s) => {
332
+ if (s.variant === 'neutral') {
333
+ return s.isDark ? 80 : 40;
334
+ } else if (s.variant === 'tonalSpot') {
335
+ if (s.isDark) {
336
+ return 80;
337
+ } else {
338
+ return tMaxC(s.getPalette('primary'));
339
+ }
340
+ } else if (s.variant === 'expressive') {
341
+ return tMaxC(
342
+ s.getPalette('primary'),
343
+ 0,
344
+ Hct.isYellow(s.getPalette('primary').hue)
345
+ ? 25
346
+ : Hct.isCyan(s.getPalette('primary').hue)
347
+ ? 88
348
+ : 98,
349
+ );
350
+ } else {
351
+ return tMaxC(
352
+ s.getPalette('primary'),
353
+ 0,
354
+ Hct.isCyan(s.getPalette('primary').hue) ? 88 : 98,
355
+ );
356
+ }
357
+ },
358
+ isBackground: true,
359
+ background: (s) => highestSurface(s, colorService),
360
+ contrastCurve: (s) => getCurve(4.5),
361
+ toneDeltaPair: (s) =>
362
+ new ToneDeltaPair(
363
+ colorService.getColor('primaryContainer').getMaterialColor(),
364
+ colorService.getColor('primary').getMaterialColor(),
365
+ 5,
366
+ 'relative_lighter',
367
+ true,
368
+ 'farther',
369
+ ),
370
+ },
371
+ primaryDim: {
372
+ palette: (s) => s.getPalette('primary'),
373
+ tone: (s) => {
374
+ if (s.variant === 'neutral') {
375
+ return 85;
376
+ } else if (s.variant === 'tonalSpot') {
377
+ return tMaxC(s.getPalette('primary'), 0, 90);
378
+ } else {
379
+ return tMaxC(s.getPalette('primary'));
380
+ }
381
+ },
382
+ isBackground: true,
383
+ background: (s) => getColor('surfaceContainerHigh'),
384
+ contrastCurve: (s) => getCurve(4.5),
385
+ toneDeltaPair: (s) =>
386
+ new ToneDeltaPair(
387
+ colorService.getColor('primaryDim').getMaterialColor(),
388
+ colorService.getColor('primary').getMaterialColor(),
389
+ 5,
390
+ 'darker',
391
+ true,
392
+ 'farther',
393
+ ),
394
+ },
395
+ onPrimary: {
396
+ palette: (s) => s.getPalette('primary'),
397
+ background: (s) => colorService.getColor('primary').getMaterialColor(),
398
+ contrastCurve: (s) => getCurve(6),
399
+ },
400
+ primaryContainer: {
401
+ palette: (s) => s.getPalette('primary'),
402
+ tone: (s) => {
403
+ if (s.variant === 'neutral') {
404
+ return s.isDark ? 30 : 90;
405
+ } else if (s.variant === 'tonalSpot') {
406
+ return s.isDark
407
+ ? tMinC(s.getPalette('primary'), 35, 93)
408
+ : tMaxC(s.getPalette('primary'), 0, 90);
409
+ } else if (s.variant === 'expressive') {
410
+ return s.isDark
411
+ ? tMaxC(s.getPalette('primary'), 30, 93)
412
+ : tMaxC(
413
+ s.getPalette('primary'),
414
+ 78,
415
+ Hct.isCyan(s.getPalette('primary').hue) ? 88 : 90,
416
+ );
417
+ } else {
418
+ // VIBRANT
419
+ return s.isDark
420
+ ? tMinC(s.getPalette('primary'), 66, 93)
421
+ : tMaxC(
422
+ s.getPalette('primary'),
423
+ 66,
424
+ Hct.isCyan(s.getPalette('primary').hue) ? 88 : 93,
425
+ );
426
+ }
427
+ },
428
+ isBackground: true,
429
+ background: (s) => highestSurface(s, colorService),
430
+ toneDeltaPair: (s) => undefined,
431
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
432
+ },
433
+ onPrimaryContainer: {
434
+ palette: (s) => s.getPalette('primary'),
435
+ background: (s) =>
436
+ colorService.getColor('primaryContainer').getMaterialColor(),
437
+ contrastCurve: (s) => getCurve(6),
438
+ },
439
+
440
+ primaryFixed: {
441
+ palette: (s) => s.getPalette('primary'),
442
+ tone: (s) => {
443
+ const tempS = new Scheme({
444
+ ...s.options,
445
+ isDark: false,
446
+ contrastLevel: 0,
447
+ });
448
+ return getColor('primaryContainer').getTone(tempS);
449
+ },
450
+ isBackground: true,
451
+ background: (s) => highestSurface(s, colorService),
452
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
453
+ },
454
+
455
+ primaryFixedDim: {
456
+ palette: (s) => s.getPalette('primary'),
457
+ tone: (s) =>
458
+ colorService.getColor('primaryFixed').getMaterialColor().getTone(s),
459
+ isBackground: true,
460
+ toneDeltaPair: (s) =>
461
+ new ToneDeltaPair(
462
+ getColor('primaryFixedDim'),
463
+ getColor('primaryFixed'),
464
+ 5,
465
+ 'darker',
466
+ true,
467
+ 'exact',
468
+ ),
469
+ },
470
+
471
+ onPrimaryFixed: {
472
+ palette: (s) => s.getPalette('primary'),
473
+ background: (s) =>
474
+ colorService.getColor('primaryFixedDim').getMaterialColor(),
475
+ contrastCurve: (s) => getCurve(7),
476
+ },
477
+
478
+ onPrimaryFixedVariant: {
479
+ palette: (s) => s.getPalette('primary'),
480
+ background: (s) =>
481
+ colorService.getColor('primaryFixedDim').getMaterialColor(),
482
+ contrastCurve: (s) => getCurve(4.5),
483
+ },
484
+
485
+ inversePrimary: {
486
+ palette: (s) => s.getPalette('primary'),
487
+ tone: (s) => tMaxC(s.getPalette('primary')),
488
+ background: (s) =>
489
+ colorService.getColor('inverseSurface').getMaterialColor(),
490
+ contrastCurve: (s) => getCurve(6),
491
+ },
492
+ ////////////////////////////////////////////////////////////////
493
+ // Secondaries [Q] //
494
+ ////////////////////////////////////////////////////////////////
495
+ secondary: {
496
+ palette: (s) => s.getPalette('secondary'),
497
+ tone: (s) => {
498
+ if (s.variant === 'neutral') {
499
+ return s.isDark
500
+ ? tMinC(s.getPalette('secondary'), 0, 98)
501
+ : tMaxC(s.getPalette('secondary'));
502
+ } else if (s.variant === 'vibrant') {
503
+ return tMaxC(s.getPalette('secondary'), 0, s.isDark ? 90 : 98);
504
+ } else {
505
+ // EXPRESSIVE and TONAL_SPOT
506
+ return s.isDark ? 80 : tMaxC(s.getPalette('secondary'));
507
+ }
508
+ },
509
+ isBackground: true,
510
+ background: (s) => highestSurface(s, colorService),
511
+ contrastCurve: (s) => getCurve(4.5),
512
+ toneDeltaPair: (s) =>
513
+ new ToneDeltaPair(
514
+ getColor('secondaryContainer'),
515
+ getColor('secondary'),
516
+ 5,
517
+ 'relative_lighter',
518
+ true,
519
+ 'farther',
520
+ ),
521
+ },
522
+ secondaryDim: {
523
+ palette: (s) => s.getPalette('secondary'),
524
+ tone: (s) => {
525
+ if (s.variant === 'neutral') {
526
+ return 85;
527
+ } else {
528
+ return tMaxC(s.getPalette('secondary'), 0, 90);
529
+ }
530
+ },
531
+ isBackground: true,
532
+ background: (s) => getColor('surfaceContainerHigh'),
533
+ contrastCurve: (s) => getCurve(4.5),
534
+ toneDeltaPair: (s) =>
535
+ new ToneDeltaPair(
536
+ getColor('secondaryDim'),
537
+ getColor('secondary'),
538
+ 5,
539
+ 'darker',
540
+ true,
541
+ 'farther',
542
+ ),
543
+ },
544
+ onSecondary: {
545
+ palette: (s) => s.getPalette('secondary'),
546
+ background: (s) => getColor('secondary'),
547
+ contrastCurve: (s) => getCurve(6),
548
+ },
549
+ secondaryContainer: {
550
+ palette: (s) => s.getPalette('secondary'),
551
+ tone: (s) => {
552
+ if (s.variant === 'vibrant') {
553
+ return s.isDark
554
+ ? tMinC(s.getPalette('secondary'), 30, 40)
555
+ : tMaxC(s.getPalette('secondary'), 84, 90);
556
+ } else if (s.variant === 'expressive') {
557
+ return s.isDark ? 15 : tMaxC(s.getPalette('secondary'), 90, 95);
558
+ } else {
559
+ return s.isDark ? 25 : 90;
560
+ }
561
+ },
562
+ isBackground: true,
563
+ background: (s) => highestSurface(s, colorService),
564
+ toneDeltaPair: (s) => undefined,
565
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
566
+ },
567
+ onSecondaryContainer: {
568
+ palette: (s) => s.getPalette('secondary'),
569
+ background: (s) => getColor('secondaryContainer'),
570
+ contrastCurve: (s) => getCurve(6),
571
+ },
572
+
573
+ secondaryFixed: {
574
+ palette: (s) => s.getPalette('secondary'),
575
+ tone: (s) => {
576
+ const tempS = new Scheme({
577
+ ...s.options,
578
+ isDark: false,
579
+ contrastLevel: 0,
580
+ });
581
+ return getColor('secondaryContainer').getTone(tempS);
582
+ },
583
+ isBackground: true,
584
+ background: (s) => highestSurface(s, colorService),
585
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
586
+ },
587
+
588
+ secondaryFixedDim: {
589
+ palette: (s) => s.getPalette('secondary'),
590
+ tone: (s) => getColor('secondaryFixed').getTone(s),
591
+ isBackground: true,
592
+ toneDeltaPair: (s) =>
593
+ new ToneDeltaPair(
594
+ getColor('secondaryFixedDim'),
595
+ getColor('secondaryFixed'),
596
+ 5,
597
+ 'darker',
598
+ true,
599
+ 'exact',
600
+ ),
601
+ },
602
+
603
+ onSecondaryFixed: {
604
+ palette: (s) => s.getPalette('secondary'),
605
+ background: (s) => getColor('secondaryFixedDim'),
606
+ contrastCurve: (s) => getCurve(7),
607
+ },
608
+
609
+ onSecondaryFixedVariant: {
610
+ palette: (s) => s.getPalette('secondary'),
611
+ background: (s) => getColor('secondaryFixedDim'),
612
+ contrastCurve: (s) => getCurve(4.5),
613
+ },
614
+
615
+ ////////////////////////////////////////////////////////////////
616
+ // Tertiaries [T] //
617
+ ////////////////////////////////////////////////////////////////
618
+ tertiary: {
619
+ palette: (s) => s.getPalette('tertiary'),
620
+ tone: (s) => {
621
+ if (s.variant === 'expressive' || s.variant === 'vibrant') {
622
+ return tMaxC(
623
+ s.getPalette('tertiary'),
624
+ 0,
625
+ Hct.isCyan(s.getPalette('tertiary').hue) ? 88 : s.isDark ? 98 : 100,
626
+ );
627
+ } else {
628
+ // NEUTRAL and TONAL_SPOT
629
+ return s.isDark
630
+ ? tMaxC(s.getPalette('tertiary'), 0, 98)
631
+ : tMaxC(s.getPalette('tertiary'));
632
+ }
633
+ },
634
+ isBackground: true,
635
+ background: (s) => highestSurface(s, colorService),
636
+ contrastCurve: (s) => getCurve(4.5),
637
+ toneDeltaPair: (s) =>
638
+ new ToneDeltaPair(
639
+ getColor('tertiaryContainer'),
640
+ getColor('tertiary'),
641
+ 5,
642
+ 'relative_lighter',
643
+ true,
644
+ 'farther',
645
+ ),
646
+ },
647
+ tertiaryDim: {
648
+ palette: (s) => s.getPalette('tertiary'),
649
+ tone: (s) => {
650
+ if (s.variant === 'tonalSpot') {
651
+ return tMaxC(s.getPalette('tertiary'), 0, 90);
652
+ } else {
653
+ return tMaxC(s.getPalette('tertiary'));
654
+ }
655
+ },
656
+ isBackground: true,
657
+ background: (s) => getColor('surfaceContainerHigh'),
658
+ contrastCurve: (s) => getCurve(4.5),
659
+ toneDeltaPair: (s) =>
660
+ new ToneDeltaPair(
661
+ getColor('tertiaryDim'),
662
+ getColor('tertiary'),
663
+ 5,
664
+ 'darker',
665
+ true,
666
+ 'farther',
667
+ ),
668
+ },
669
+ onTertiary: {
670
+ palette: (s) => s.getPalette('tertiary'),
671
+ background: (s) => getColor('tertiary'),
672
+ contrastCurve: (s) => getCurve(6),
673
+ },
674
+ tertiaryContainer: {
675
+ palette: (s) => s.getPalette('tertiary'),
676
+ tone: (s) => {
677
+ if (s.variant === 'neutral') {
678
+ return s.isDark
679
+ ? tMaxC(s.getPalette('tertiary'), 0, 93)
680
+ : tMaxC(s.getPalette('tertiary'), 0, 96);
681
+ } else if (s.variant === 'tonalSpot') {
682
+ return tMaxC(s.getPalette('tertiary'), 0, s.isDark ? 93 : 100);
683
+ } else if (s.variant === 'expressive') {
684
+ return tMaxC(
685
+ s.getPalette('tertiary'),
686
+ 75,
687
+ Hct.isCyan(s.getPalette('tertiary').hue) ? 88 : s.isDark ? 93 : 100,
688
+ );
689
+ } else {
690
+ // VIBRANT
691
+ return s.isDark
692
+ ? tMaxC(s.getPalette('tertiary'), 0, 93)
693
+ : tMaxC(s.getPalette('tertiary'), 72, 100);
694
+ }
695
+ },
696
+ isBackground: true,
697
+ background: (s) => highestSurface(s, colorService),
698
+ toneDeltaPair: (s) => undefined,
699
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
700
+ },
701
+ onTertiaryContainer: {
702
+ palette: (s) => s.getPalette('tertiary'),
703
+ background: (s) => getColor('tertiaryContainer'),
704
+ contrastCurve: (s) => getCurve(6),
705
+ },
706
+
707
+ tertiaryFixed: {
708
+ palette: (s) => s.getPalette('tertiary'),
709
+ tone: (s) => {
710
+ const tempS = new Scheme({
711
+ ...s.options,
712
+ isDark: false,
713
+ contrastLevel: 0,
714
+ });
715
+ return getColor('tertiaryContainer').getTone(tempS);
716
+ },
717
+ isBackground: true,
718
+ background: (s) => highestSurface(s, colorService),
719
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
720
+ },
721
+
722
+ tertiaryFixedDim: {
723
+ palette: (s) => s.getPalette('tertiary'),
724
+ tone: (s) => getColor('tertiaryFixed').getTone(s),
725
+ isBackground: true,
726
+ toneDeltaPair: (s) =>
727
+ new ToneDeltaPair(
728
+ getColor('tertiaryFixedDim'),
729
+ getColor('tertiaryFixed'),
730
+ 5,
731
+ 'darker',
732
+ true,
733
+ 'exact',
734
+ ),
735
+ },
736
+
737
+ onTertiaryFixed: {
738
+ palette: (s) => s.getPalette('tertiary'),
739
+ background: (s) => getColor('tertiaryFixedDim'),
740
+ contrastCurve: (s) => getCurve(7),
741
+ },
742
+
743
+ onTertiaryFixedVariant: {
744
+ palette: (s) => s.getPalette('tertiary'),
745
+ background: (s) => getColor('tertiaryFixedDim'),
746
+ contrastCurve: (s) => getCurve(4.5),
747
+ },
748
+
749
+ ////////////////////////////////////////////////////////////////
750
+ // Errors [E] //
751
+ ////////////////////////////////////////////////////////////////
752
+
753
+ error: {
754
+ palette: (s) => s.getPalette('error'),
755
+ tone: (s) => {
756
+ return s.isDark
757
+ ? tMinC(s.getPalette('error'), 0, 98)
758
+ : tMaxC(s.getPalette('error'));
759
+ },
760
+ isBackground: true,
761
+ background: (s) => highestSurface(s, colorService),
762
+ contrastCurve: (s) => getCurve(4.5),
763
+ toneDeltaPair: (s) =>
764
+ new ToneDeltaPair(
765
+ colorService.getColor('errorContainer').getMaterialColor(),
766
+ colorService.getColor('error').getMaterialColor(),
767
+ 5,
768
+ 'relative_lighter',
769
+ true,
770
+ 'farther',
771
+ ),
772
+ },
773
+ errorDim: {
774
+ palette: (s) => s.getPalette('error'),
775
+ tone: (s) => tMinC(s.getPalette('error')),
776
+ isBackground: true,
777
+ background: (s) => getColor('surfaceContainerHigh'),
778
+ contrastCurve: (s) => getCurve(4.5),
779
+ toneDeltaPair: (s) =>
780
+ new ToneDeltaPair(
781
+ getColor('errorDim'),
782
+ getColor('error'),
783
+ 5,
784
+ 'darker',
785
+ true,
786
+ 'farther',
787
+ ),
788
+ },
789
+ onError: {
790
+ palette: (s) => s.getPalette('error'),
791
+ background: (s) => colorService.getColor('error').getMaterialColor(),
792
+ contrastCurve: (s) => getCurve(6),
793
+ },
794
+ errorContainer: {
795
+ palette: (s) => s.getPalette('error'),
796
+ tone: (s) => {
797
+ return s.isDark
798
+ ? tMinC(s.getPalette('error'), 30, 93)
799
+ : tMaxC(s.getPalette('error'), 0, 90);
800
+ },
801
+ isBackground: true,
802
+ background: (s) => highestSurface(s, colorService),
803
+ toneDeltaPair: (s) => undefined,
804
+ contrastCurve: (s) => (s.contrastLevel > 0 ? getCurve(1.5) : undefined),
805
+ },
806
+ onErrorContainer: {
807
+ palette: (s) => s.getPalette('error'),
808
+ background: (s) =>
809
+ colorService.getColor('errorContainer').getMaterialColor(),
810
+ contrastCurve: (s) => getCurve(4.5),
811
+ },
812
+
813
+ /////////////////////////////////////////////////////////////////
814
+ // Remapped Colors //
815
+ /////////////////////////////////////////////////////////////////
816
+ surfaceVariant: {
817
+ alias: 'surfaceContainerHighest',
818
+ },
819
+ surfaceTint: {
820
+ alias: 'primary',
821
+ },
822
+ background: {
823
+ alias: 'surface',
824
+ },
825
+ onBackground: {
826
+ alias: 'onSurface',
827
+ },
828
+ };
829
+ return {
830
+ colors,
831
+ };
832
+ };