@shortfuse/materialdesignweb 0.7.6 → 0.8.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 (114) hide show
  1. package/README.md +57 -68
  2. package/components/Badge.js +2 -2
  3. package/components/BottomAppBar.js +3 -5
  4. package/components/Box.js +33 -3
  5. package/components/Button.js +48 -21
  6. package/components/Button.md +9 -9
  7. package/components/Card.js +9 -16
  8. package/components/Checkbox.js +45 -36
  9. package/components/CheckboxIcon.js +2 -2
  10. package/components/Chip.js +1 -1
  11. package/components/Dialog.js +228 -359
  12. package/components/DialogActions.js +2 -2
  13. package/components/Divider.js +3 -3
  14. package/components/ExtendedFab.js +4 -8
  15. package/components/Fab.js +1 -2
  16. package/components/FilterChip.js +4 -4
  17. package/components/Headline.js +1 -1
  18. package/components/Icon.js +8 -8
  19. package/components/IconButton.js +9 -14
  20. package/components/Input.js +273 -1
  21. package/components/Layout.js +485 -16
  22. package/components/List.js +6 -4
  23. package/components/ListItem.js +12 -12
  24. package/components/ListOption.js +21 -5
  25. package/components/Listbox.js +239 -0
  26. package/components/Menu.js +77 -526
  27. package/components/MenuItem.js +12 -14
  28. package/components/Nav.js +0 -2
  29. package/components/NavBar.js +8 -79
  30. package/components/NavDrawer.js +12 -11
  31. package/components/NavDrawerItem.js +2 -1
  32. package/components/NavItem.js +18 -8
  33. package/components/NavRail.js +15 -7
  34. package/components/NavRailItem.js +3 -1
  35. package/components/Popup.js +20 -0
  36. package/components/Progress.js +24 -23
  37. package/components/Radio.js +42 -35
  38. package/components/RadioIcon.js +3 -3
  39. package/components/Ripple.js +2 -3
  40. package/components/Search.js +85 -0
  41. package/components/SegmentedButton.js +1 -10
  42. package/components/SegmentedButtonGroup.js +16 -10
  43. package/components/Select.js +4 -4
  44. package/components/Shape.js +1 -1
  45. package/components/Slider.js +43 -50
  46. package/components/Snackbar.js +4 -5
  47. package/components/Surface.js +3 -3
  48. package/components/Switch.js +55 -21
  49. package/components/SwitchIcon.js +10 -8
  50. package/components/Tab.js +11 -9
  51. package/components/TabContent.js +4 -3
  52. package/components/TabList.js +2 -2
  53. package/components/TabPanel.js +11 -8
  54. package/components/TextArea.js +38 -35
  55. package/components/Tooltip.js +2 -2
  56. package/components/TopAppBar.js +65 -147
  57. package/core/Composition.js +985 -628
  58. package/core/CompositionAdapter.js +315 -0
  59. package/core/CustomElement.js +153 -90
  60. package/core/DomAdapter.js +586 -0
  61. package/core/ICustomElement.d.ts +2 -2
  62. package/core/css.js +8 -7
  63. package/core/customTypes.js +53 -31
  64. package/{utils → core}/jsonMergePatch.js +36 -14
  65. package/core/observe.js +111 -57
  66. package/core/optimizations.js +23 -0
  67. package/core/template.js +17 -11
  68. package/core/test.js +126 -0
  69. package/core/typings.d.ts +11 -5
  70. package/core/uid.js +13 -0
  71. package/dist/index.min.js +83 -152
  72. package/dist/index.min.js.map +4 -4
  73. package/dist/meta.json +1 -1
  74. package/mixins/AriaReflectorMixin.js +1 -2
  75. package/mixins/AriaToolbarMixin.js +2 -3
  76. package/mixins/ControlMixin.js +25 -17
  77. package/mixins/DensityMixin.js +0 -1
  78. package/mixins/FlexableMixin.js +1 -2
  79. package/mixins/FormAssociatedMixin.js +13 -10
  80. package/mixins/InputMixin.js +2 -9
  81. package/mixins/KeyboardNavMixin.js +14 -1
  82. package/mixins/PopupMixin.js +757 -0
  83. package/mixins/RTLObserverMixin.js +0 -1
  84. package/mixins/ResizeObserverMixin.js +0 -1
  85. package/mixins/RippleMixin.js +3 -4
  86. package/mixins/ScrollListenerMixin.js +41 -32
  87. package/mixins/SemiStickyMixin.js +151 -0
  88. package/mixins/ShapeMixin.js +29 -24
  89. package/mixins/StateMixin.js +11 -6
  90. package/mixins/SurfaceMixin.js +3 -57
  91. package/mixins/TextFieldMixin.js +57 -65
  92. package/mixins/ThemableMixin.js +78 -156
  93. package/mixins/TooltipTriggerMixin.js +7 -13
  94. package/mixins/TouchTargetMixin.js +4 -3
  95. package/package.json +9 -5
  96. package/theming/index.js +1 -1
  97. package/theming/themableMixinLoader.js +12 -0
  98. package/utils/{hct → material-color}/blend.js +8 -10
  99. package/utils/{hct → material-color/hct}/Cam16.js +196 -69
  100. package/utils/{hct → material-color/hct}/Hct.js +61 -19
  101. package/utils/{hct → material-color/hct}/ViewingConditions.js +3 -3
  102. package/utils/{hct → material-color/hct}/hctSolver.js +9 -16
  103. package/utils/{hct → material-color}/helper.js +11 -18
  104. package/utils/{hct → material-color/palettes}/CorePalette.js +79 -19
  105. package/utils/{hct → material-color/palettes}/TonalPalette.js +12 -4
  106. package/utils/material-color/scheme/Scheme.js +376 -0
  107. package/utils/{hct/colorUtils.js → material-color/utils/color.js} +61 -1
  108. package/utils/popup.js +46 -25
  109. package/components/ListSelect.js +0 -220
  110. package/components/Option.js +0 -91
  111. package/components/Pane.js +0 -281
  112. package/core/identify.js +0 -40
  113. package/utils/hct/Scheme.js +0 -587
  114. /package/utils/{hct/mathUtils.js → material-color/utils/math.js} +0 -0
@@ -15,15 +15,91 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import Hct from './Hct.js';
18
+ import Hct from '../hct/Hct.js';
19
+
19
20
  import TonalPalette from './TonalPalette.js';
20
21
 
22
+ /**
23
+ * Set of colors to generate a [CorePalette] from
24
+ * @typedef CorePaletteColors
25
+ * @prop {number} primary
26
+ * @prop {number} [secondary]
27
+ * @prop {number} [tertiary]
28
+ * @prop {number} [neutral]
29
+ * @prop {number} [neutralVariant]
30
+ * @prop {number} [error]
31
+ */
32
+
21
33
  /**
22
34
  * An intermediate concept between the key color for a UI theme, and a full
23
35
  * color scheme. 5 sets of tones are generated, all except one use the same hue
24
36
  * as the key color, and all vary in chroma.
25
37
  */
26
38
  export default class CorePalette {
39
+ /**
40
+ * @param {boolean} content
41
+ * @param {CorePaletteColors} colors
42
+ * @return {CorePalette}
43
+ */
44
+ static #createPaletteFromColors(content, colors) {
45
+ const palette = new CorePalette(colors.primary, content);
46
+ if (colors.secondary) {
47
+ const p = new CorePalette(colors.secondary, content);
48
+ palette.a2 = p.a1;
49
+ }
50
+ if (colors.tertiary) {
51
+ const p = new CorePalette(colors.tertiary, content);
52
+ palette.a3 = p.a1;
53
+ }
54
+ if (colors.error) {
55
+ const p = new CorePalette(colors.error, content);
56
+ palette.error = p.a1;
57
+ }
58
+ if (colors.neutral) {
59
+ const p = new CorePalette(colors.neutral, content);
60
+ palette.n1 = p.n1;
61
+ }
62
+ if (colors.neutralVariant) {
63
+ const p = new CorePalette(colors.neutralVariant, content);
64
+ palette.n2 = p.n2;
65
+ }
66
+ return palette;
67
+ }
68
+
69
+ /**
70
+ * @param {number} argb ARGB representation of a color
71
+ * @return {CorePalette}
72
+ */
73
+ static of(argb) {
74
+ return new CorePalette(argb, false);
75
+ }
76
+
77
+ /**
78
+ * @param {number} argb ARGB representation of a color
79
+ * @return {CorePalette}
80
+ */
81
+ static contentOf(argb) {
82
+ return new CorePalette(argb, true);
83
+ }
84
+
85
+ /**
86
+ * Create a [CorePalette] from a set of colors
87
+ * @param {CorePaletteColors} colors
88
+ * @return {CorePalette}
89
+ */
90
+ static fromColors(colors) {
91
+ return CorePalette.#createPaletteFromColors(false, colors);
92
+ }
93
+
94
+ /**
95
+ * Create a content [CorePalette] from a set of colors
96
+ * @param {CorePaletteColors} colors
97
+ * @return {CorePalette}
98
+ */
99
+ static contentFromColors(colors) {
100
+ return CorePalette.#createPaletteFromColors(true, colors);
101
+ }
102
+
27
103
  /** @type {TonalPalette} */
28
104
  a1;
29
105
 
@@ -42,22 +118,6 @@ export default class CorePalette {
42
118
  /** @type {TonalPalette} */
43
119
  error;
44
120
 
45
- /**
46
- * @param {number} argb ARGB representation of a color
47
- * @return {CorePalette}
48
- */
49
- static of(argb) {
50
- return new CorePalette(argb, false);
51
- }
52
-
53
- /**
54
- * @param {number} argb ARGB representation of a color
55
- * @return {CorePalette}
56
- */
57
- static contentOf(argb) {
58
- return new CorePalette(argb, true);
59
- }
60
-
61
121
  /**
62
122
  * @param {number} argb
63
123
  * @param {boolean} isContent
@@ -70,13 +130,13 @@ export default class CorePalette {
70
130
  this.a1 = TonalPalette.fromHueAndChroma(hue, chroma);
71
131
  this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3);
72
132
  this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2);
73
- this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4));
133
+ this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 6)); // Bump from 4
74
134
  this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8));
75
135
  } else {
76
136
  this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma));
77
137
  this.a2 = TonalPalette.fromHueAndChroma(hue, 16);
78
138
  this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24);
79
- this.n1 = TonalPalette.fromHueAndChroma(hue, 4);
139
+ this.n1 = TonalPalette.fromHueAndChroma(hue, 6); // Bump from 4
80
140
  this.n2 = TonalPalette.fromHueAndChroma(hue, 8);
81
141
  }
82
142
  this.error = TonalPalette.fromHueAndChroma(25, 84);
@@ -15,16 +15,13 @@
15
15
  * limitations under the License.
16
16
  */
17
17
 
18
- import Hct from './Hct.js';
18
+ import Hct from '../hct/Hct.js';
19
19
 
20
20
  /**
21
21
  * A convenience class for retrieving colors that are constant in hue and
22
22
  * chroma, but vary in tone.
23
23
  */
24
24
  export default class TonalPalette {
25
- /** @type {Map<number, number>} */
26
- #cache = new Map();
27
-
28
25
  /**
29
26
  * @param {number} argb ARGB representation of a color
30
27
  * @return {TonalPalette} Tones matching that color's hue and chroma.
@@ -43,6 +40,9 @@ export default class TonalPalette {
43
40
  return new TonalPalette(hue, chroma);
44
41
  }
45
42
 
43
+ /** @type {Map<number, number>} */
44
+ #cache = new Map();
45
+
46
46
  /**
47
47
  * @private
48
48
  * @param {number} hue
@@ -65,4 +65,12 @@ export default class TonalPalette {
65
65
  }
66
66
  return argb;
67
67
  }
68
+
69
+ /**
70
+ * @param {number} tone HCT tone.
71
+ * @return {Hct} HCT representation of a color with that tone.
72
+ */
73
+ getHct(tone) {
74
+ return Hct.fromInt(this.tone(tone));
75
+ }
68
76
  }
@@ -0,0 +1,376 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ import CorePalette from '../palettes/CorePalette.js';
19
+
20
+ /**
21
+ * Represents a Material color scheme, a mapping of color roles to colors.
22
+ */
23
+ export default class Scheme {
24
+ /**
25
+ * @param {number} argb ARGB representation of a color.
26
+ * @return {Scheme} Light Material color scheme, based on the color's hue.
27
+ */
28
+ static light(argb) {
29
+ return Scheme.lightFromCorePalette(CorePalette.of(argb));
30
+ }
31
+
32
+ /**
33
+ * @param {number} argb ARGB representation of a color.
34
+ * @return {Scheme} Dark Material color scheme, based on the color's hue.
35
+ */
36
+ static dark(argb) {
37
+ return Scheme.darkFromCorePalette(CorePalette.of(argb));
38
+ }
39
+
40
+ /**
41
+ * @param {number} argb ARGB representation of a color.
42
+ * @return {Scheme} Light Material content color scheme, based on the color's hue.
43
+ */
44
+ static lightContent(argb) {
45
+ return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));
46
+ }
47
+
48
+ /**
49
+ * @param {number} argb ARGB representation of a color.
50
+ * @return {Scheme} Dark Material content color scheme, based on the color's hue.
51
+ */
52
+ static darkContent(argb) {
53
+ return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));
54
+ }
55
+
56
+ /**
57
+ * Light scheme from core palette
58
+ * @param {CorePalette} core
59
+ * @return {Scheme}
60
+ */
61
+ static lightFromCorePalette(core) {
62
+ return new Scheme({
63
+ primary: core.a1.tone(40),
64
+ onPrimary: core.a1.tone(100),
65
+ primaryContainer: core.a1.tone(90),
66
+ onPrimaryContainer: core.a1.tone(10),
67
+ secondary: core.a2.tone(40),
68
+ onSecondary: core.a2.tone(100),
69
+ secondaryContainer: core.a2.tone(90),
70
+ onSecondaryContainer: core.a2.tone(10),
71
+ tertiary: core.a3.tone(40),
72
+ onTertiary: core.a3.tone(100),
73
+ tertiaryContainer: core.a3.tone(90),
74
+ onTertiaryContainer: core.a3.tone(10),
75
+ error: core.error.tone(40),
76
+ onError: core.error.tone(100),
77
+ errorContainer: core.error.tone(90),
78
+ onErrorContainer: core.error.tone(10),
79
+ background: core.n1.tone(98),
80
+ onBackground: core.n1.tone(10),
81
+ surface: core.n1.tone(98),
82
+ onSurface: core.n1.tone(10),
83
+ surfaceDim: core.n1.tone(87),
84
+ surfaceBright: core.n1.tone(98),
85
+ surfaceContainerLowest: core.n1.tone(100),
86
+ surfaceContainerLow: core.n1.tone(96),
87
+ surfaceContainer: core.n1.tone(94),
88
+ surfaceContainerHigh: core.n1.tone(92),
89
+ surfaceContainerHighest: core.n1.tone(90),
90
+ surfaceVariant: core.n2.tone(90),
91
+ onSurfaceVariant: core.n2.tone(30),
92
+ outline: core.n2.tone(50),
93
+ outlineVariant: core.n2.tone(80),
94
+ shadow: core.n1.tone(0),
95
+ scrim: core.n1.tone(0),
96
+ inverseSurface: core.n1.tone(20),
97
+ inverseOnSurface: core.n1.tone(95),
98
+ inversePrimary: core.a1.tone(80),
99
+ });
100
+ }
101
+
102
+ /**
103
+ * Dark scheme from core palette
104
+ * @param {CorePalette} core
105
+ * @return {Scheme}
106
+ */
107
+ static darkFromCorePalette(core) {
108
+ return new Scheme({
109
+ primary: core.a1.tone(80),
110
+ onPrimary: core.a1.tone(20),
111
+ primaryContainer: core.a1.tone(30),
112
+ onPrimaryContainer: core.a1.tone(90),
113
+ secondary: core.a2.tone(80),
114
+ onSecondary: core.a2.tone(20),
115
+ secondaryContainer: core.a2.tone(30),
116
+ onSecondaryContainer: core.a2.tone(90),
117
+ tertiary: core.a3.tone(80),
118
+ onTertiary: core.a3.tone(20),
119
+ tertiaryContainer: core.a3.tone(30),
120
+ onTertiaryContainer: core.a3.tone(90),
121
+ error: core.error.tone(80),
122
+ onError: core.error.tone(20),
123
+ errorContainer: core.error.tone(30),
124
+ onErrorContainer: core.error.tone(90), // Fix Typo
125
+ background: core.n1.tone(6),
126
+ onBackground: core.n1.tone(90),
127
+ surface: core.n1.tone(6),
128
+ onSurface: core.n1.tone(90),
129
+ surfaceDim: core.n1.tone(6),
130
+ surfaceBright: core.n1.tone(24),
131
+ surfaceContainerLowest: core.n1.tone(4),
132
+ surfaceContainerLow: core.n1.tone(10),
133
+ surfaceContainer: core.n1.tone(12),
134
+ surfaceContainerHigh: core.n1.tone(17),
135
+ surfaceContainerHighest: core.n1.tone(22),
136
+ surfaceVariant: core.n2.tone(30),
137
+ onSurfaceVariant: core.n2.tone(80),
138
+ outline: core.n2.tone(60),
139
+ outlineVariant: core.n2.tone(30),
140
+ shadow: core.n1.tone(0),
141
+ scrim: core.n1.tone(0),
142
+ inverseSurface: core.n1.tone(90),
143
+ inverseOnSurface: core.n1.tone(20),
144
+ inversePrimary: core.a1.tone(40),
145
+ });
146
+ }
147
+
148
+ /**
149
+ * @param {Object} props
150
+ * @param {number} props.primary
151
+ * @param {number} props.onPrimary
152
+ * @param {number} props.primaryContainer
153
+ * @param {number} props.onPrimaryContainer
154
+ * @param {number} props.secondary
155
+ * @param {number} props.onSecondary
156
+ * @param {number} props.secondaryContainer
157
+ * @param {number} props.onSecondaryContainer
158
+ * @param {number} props.tertiary
159
+ * @param {number} props.onTertiary
160
+ * @param {number} props.tertiaryContainer
161
+ * @param {number} props.onTertiaryContainer
162
+ * @param {number} props.error
163
+ * @param {number} props.onError
164
+ * @param {number} props.errorContainer
165
+ * @param {number} props.onErrorContainer
166
+ * @param {number} props.background
167
+ * @param {number} props.onBackground
168
+ * @param {number} props.surface
169
+ * @param {number} props.onSurface
170
+ * @param {number} props.surfaceDim
171
+ * @param {number} props.surfaceBright
172
+ * @param {number} props.surfaceContainerLowest
173
+ * @param {number} props.surfaceContainerLow
174
+ * @param {number} props.surfaceContainer
175
+ * @param {number} props.surfaceContainerHigh
176
+ * @param {number} props.surfaceContainerHighest
177
+ * @param {number} props.surfaceVariant
178
+ * @param {number} props.onSurfaceVariant
179
+ * @param {number} props.outline
180
+ * @param {number} props.outlineVariant
181
+ * @param {number} props.shadow
182
+ * @param {number} props.scrim
183
+ * @param {number} props.inverseSurface
184
+ * @param {number} props.inverseOnSurface
185
+ * @param {number} props.inversePrimary
186
+ */
187
+ constructor(props) {
188
+ this.props = props;
189
+ }
190
+
191
+ /** @return {number} */
192
+ get primary() {
193
+ return this.props.primary;
194
+ }
195
+
196
+ /** @return {number} */
197
+ get onPrimary() {
198
+ return this.props.onPrimary;
199
+ }
200
+
201
+ /** @return {number} */
202
+ get primaryContainer() {
203
+ return this.props.primaryContainer;
204
+ }
205
+
206
+ /** @return {number} */
207
+ get onPrimaryContainer() {
208
+ return this.props.onPrimaryContainer;
209
+ }
210
+
211
+ /** @return {number} */
212
+ get secondary() {
213
+ return this.props.secondary;
214
+ }
215
+
216
+ /** @return {number} */
217
+ get onSecondary() {
218
+ return this.props.onSecondary;
219
+ }
220
+
221
+ /** @return {number} */
222
+ get secondaryContainer() {
223
+ return this.props.secondaryContainer;
224
+ }
225
+
226
+ /** @return {number} */
227
+ get onSecondaryContainer() {
228
+ return this.props.onSecondaryContainer;
229
+ }
230
+
231
+ /** @return {number} */
232
+ get tertiary() {
233
+ return this.props.tertiary;
234
+ }
235
+
236
+ /** @return {number} */
237
+ get onTertiary() {
238
+ return this.props.onTertiary;
239
+ }
240
+
241
+ /** @return {number} */
242
+ get tertiaryContainer() {
243
+ return this.props.tertiaryContainer;
244
+ }
245
+
246
+ /** @return {number} */
247
+ get onTertiaryContainer() {
248
+ return this.props.onTertiaryContainer;
249
+ }
250
+
251
+ /** @return {number} */
252
+ get error() {
253
+ return this.props.error;
254
+ }
255
+
256
+ /** @return {number} */
257
+ get onError() {
258
+ return this.props.onError;
259
+ }
260
+
261
+ /** @return {number} */
262
+ get errorContainer() {
263
+ return this.props.errorContainer;
264
+ }
265
+
266
+ /** @return {number} */
267
+ get onErrorContainer() {
268
+ return this.props.onErrorContainer;
269
+ }
270
+
271
+ /** @return {number} */
272
+ get background() {
273
+ return this.props.background;
274
+ }
275
+
276
+ /** @return {number} */
277
+ get onBackground() {
278
+ return this.props.onBackground;
279
+ }
280
+
281
+ /** @return {number} */
282
+ get surface() {
283
+ return this.props.surface;
284
+ }
285
+
286
+ /** @return {number} */
287
+ get onSurface() {
288
+ return this.props.onSurface;
289
+ }
290
+
291
+ /** @return {number} */
292
+ get surfaceDim() {
293
+ return this.props.surfaceDim;
294
+ }
295
+
296
+ /** @return {number} */
297
+ get surfaceBright() {
298
+ return this.props.surfaceBright;
299
+ }
300
+
301
+ /** @return {number} */
302
+ get surfaceContainerLowest() {
303
+ return this.props.surfaceContainerLowest;
304
+ }
305
+
306
+ /** @return {number} */
307
+ get surfaceContainerLow() {
308
+ return this.props.surfaceContainerLow;
309
+ }
310
+
311
+ /** @return {number} */
312
+ get surfaceContainer() {
313
+ return this.props.surfaceContainer;
314
+ }
315
+
316
+ /** @return {number} */
317
+ get surfaceContainerHigh() {
318
+ return this.props.surfaceContainerHigh;
319
+ }
320
+
321
+ /** @return {number} */
322
+ get surfaceContainerHighest() {
323
+ return this.props.surfaceContainerHighest;
324
+ }
325
+
326
+ /** @return {number} */
327
+ get surfaceVariant() {
328
+ return this.props.surfaceVariant;
329
+ }
330
+
331
+ /** @return {number} */
332
+ get onSurfaceVariant() {
333
+ return this.props.onSurfaceVariant;
334
+ }
335
+
336
+ /** @return {number} */
337
+ get outline() {
338
+ return this.props.outline;
339
+ }
340
+
341
+ /** @return {number} */
342
+ get outlineVariant() {
343
+ return this.props.outlineVariant;
344
+ }
345
+
346
+ /** @return {number} */
347
+ get shadow() {
348
+ return this.props.shadow;
349
+ }
350
+
351
+ /** @return {number} */
352
+ get scrim() {
353
+ return this.props.scrim;
354
+ }
355
+
356
+ /** @return {number} */
357
+ get inverseSurface() {
358
+ return this.props.inverseSurface;
359
+ }
360
+
361
+ /** @return {number} */
362
+ get inverseOnSurface() {
363
+ return this.props.inverseOnSurface;
364
+ }
365
+
366
+ /** @return {number} */
367
+ get inversePrimary() {
368
+ return this.props.inversePrimary;
369
+ }
370
+
371
+ toJSON() {
372
+ return {
373
+ ...this.props,
374
+ };
375
+ }
376
+ }
@@ -17,7 +17,7 @@
17
17
 
18
18
  // This file is automatically generated. Do not modify it.
19
19
 
20
- import * as mathUtils from './mathUtils.js';
20
+ import * as mathUtils from './math.js';
21
21
 
22
22
  /**
23
23
  * Color science utilities.
@@ -236,6 +236,20 @@ export function yFromLstar(lstar) {
236
236
  return 100 * labInvf((lstar + 16) / 116);
237
237
  }
238
238
 
239
+ /**
240
+ * Converts a Y value to an L* value.
241
+ *
242
+ * L* in L*a*b* and Y in XYZ measure the same quantity, luminance.
243
+ *
244
+ * L* measures perceptual luminance, a linear scale. Y in XYZ
245
+ * measures relative luminance, a logarithmic scale.
246
+ * @param {number} y Y in XYZ
247
+ * @return {number} L* in L*a*b*
248
+ */
249
+ export function lstarFromY(y) {
250
+ return labF(y / 100) * 116 - 16;
251
+ }
252
+
239
253
  /**
240
254
  * Linearizes an RGB component.
241
255
  * @param {number} rgbComponent 0 <= rgb_component <= 255, represents R/G/B
@@ -274,6 +288,52 @@ export function whitePointD65() {
274
288
  }
275
289
 
276
290
  /**
291
+ * RGBA component
292
+ * @typedef Rgba
293
+ * @prop {number} r Red value should be between 0-255
294
+ * @prop {number} g Green value should be between 0-255
295
+ * @prop {number} b Blue value should be between 0-255
296
+ * @prop {number} a Alpha value should be between 0-255
297
+ */
298
+
299
+ /**
300
+ * Return RGBA from a given int32 color
301
+ * @param {number} argb ARGB representation of a int32 color.
302
+ * @return {Rgba} RGBA representation of a int32 color.
303
+ */
304
+ export function rgbaFromArgb(argb) {
305
+ const r = redFromArgb(argb);
306
+ const g = greenFromArgb(argb);
307
+ const b = blueFromArgb(argb);
308
+ const a = alphaFromArgb(argb);
309
+ return { r, g, b, a };
310
+ }
311
+
312
+ /**
313
+ * Return int32 color from a given RGBA component
314
+ * @param {Rgba} rgba RGBA representation of a int32 color.
315
+ * @return {number} ARGB representation of a int32 color.
316
+ */
317
+ export function argbFromRgba({ r, g, b, a }) {
318
+ const rValue = clampComponent(r);
319
+ const gValue = clampComponent(g);
320
+ const bValue = clampComponent(b);
321
+ const aValue = clampComponent(a);
322
+ return (aValue << 24) | (rValue << 16) | (gValue << 8) | bValue;
323
+ }
324
+
325
+ /**
326
+ * @param {number} value
327
+ * @return {number}
328
+ */
329
+ function clampComponent(value) {
330
+ if (value < 0) return 0;
331
+ if (value > 255) return 255;
332
+ return value;
333
+ }
334
+
335
+ /**
336
+ *
277
337
  * @param {number} t
278
338
  * @return {number}
279
339
  */