@atlaskit/tokens 11.0.2 → 11.1.1

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 (75) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/artifacts/palettes-raw/motion-palette.js +527 -0
  3. package/dist/cjs/artifacts/replacement-mapping.js +25 -1
  4. package/dist/cjs/artifacts/theme-import-map.js +7 -1
  5. package/dist/cjs/artifacts/themes/atlassian-motion.js +12 -0
  6. package/dist/cjs/artifacts/token-default-values.js +9 -1
  7. package/dist/cjs/artifacts/token-names.js +9 -1
  8. package/dist/cjs/artifacts/tokens-raw/atlassian-motion.js +254 -0
  9. package/dist/cjs/enable-global-theme.js +4 -0
  10. package/dist/cjs/get-theme-html-attrs.js +4 -0
  11. package/dist/cjs/get-theme-styles.js +2 -0
  12. package/dist/cjs/set-global-theme.js +7 -2
  13. package/dist/cjs/theme-config.js +15 -1
  14. package/dist/cjs/theme-state-transformer.js +1 -1
  15. package/dist/cjs/utils/get-theme-preferences.js +3 -2
  16. package/dist/es2019/artifacts/palettes-raw/motion-palette.js +521 -0
  17. package/dist/es2019/artifacts/replacement-mapping.js +25 -1
  18. package/dist/es2019/artifacts/theme-import-map.js +4 -2
  19. package/dist/es2019/artifacts/themes/atlassian-motion.js +113 -0
  20. package/dist/es2019/artifacts/token-default-values.js +9 -1
  21. package/dist/es2019/artifacts/token-names.js +9 -1
  22. package/dist/es2019/artifacts/tokens-raw/atlassian-motion.js +248 -0
  23. package/dist/es2019/enable-global-theme.js +3 -0
  24. package/dist/es2019/get-theme-html-attrs.js +3 -0
  25. package/dist/es2019/get-theme-styles.js +2 -0
  26. package/dist/es2019/set-global-theme.js +4 -0
  27. package/dist/es2019/theme-config.js +15 -1
  28. package/dist/es2019/theme-state-transformer.js +1 -1
  29. package/dist/es2019/utils/get-theme-preferences.js +3 -2
  30. package/dist/esm/artifacts/palettes-raw/motion-palette.js +521 -0
  31. package/dist/esm/artifacts/replacement-mapping.js +25 -1
  32. package/dist/esm/artifacts/theme-import-map.js +5 -1
  33. package/dist/esm/artifacts/themes/atlassian-motion.js +6 -0
  34. package/dist/esm/artifacts/token-default-values.js +9 -1
  35. package/dist/esm/artifacts/token-names.js +9 -1
  36. package/dist/esm/artifacts/tokens-raw/atlassian-motion.js +248 -0
  37. package/dist/esm/enable-global-theme.js +4 -0
  38. package/dist/esm/get-theme-html-attrs.js +4 -0
  39. package/dist/esm/get-theme-styles.js +2 -0
  40. package/dist/esm/set-global-theme.js +7 -2
  41. package/dist/esm/theme-config.js +15 -1
  42. package/dist/esm/theme-state-transformer.js +1 -1
  43. package/dist/esm/utils/get-theme-preferences.js +3 -2
  44. package/dist/types/artifacts/palettes-raw/motion-palette.d.ts +34 -0
  45. package/dist/types/artifacts/replacement-mapping.d.ts +1 -1
  46. package/dist/types/artifacts/theme-import-map.d.ts +1 -1
  47. package/dist/types/artifacts/themes/atlassian-motion.d.ts +7 -0
  48. package/dist/types/artifacts/token-default-values.d.ts +9 -1
  49. package/dist/types/artifacts/token-names.d.ts +17 -1
  50. package/dist/types/artifacts/tokens-raw/atlassian-motion.d.ts +41 -0
  51. package/dist/types/enable-global-theme.d.ts +2 -1
  52. package/dist/types/entry-points/css-type-schema.codegen.d.ts +2 -1
  53. package/dist/types/get-theme-html-attrs.d.ts +2 -1
  54. package/dist/types/get-theme-styles.d.ts +1 -0
  55. package/dist/types/index.d.ts +1 -1
  56. package/dist/types/set-global-theme.d.ts +1 -0
  57. package/dist/types/theme-config.d.ts +10 -7
  58. package/dist/types/types.d.ts +30 -1
  59. package/dist/types-ts4.5/artifacts/palettes-raw/motion-palette.d.ts +34 -0
  60. package/dist/types-ts4.5/artifacts/replacement-mapping.d.ts +1 -1
  61. package/dist/types-ts4.5/artifacts/theme-import-map.d.ts +1 -1
  62. package/dist/types-ts4.5/artifacts/themes/atlassian-motion.d.ts +7 -0
  63. package/dist/types-ts4.5/artifacts/token-default-values.d.ts +9 -1
  64. package/dist/types-ts4.5/artifacts/token-names.d.ts +17 -1
  65. package/dist/types-ts4.5/artifacts/tokens-raw/atlassian-motion.d.ts +41 -0
  66. package/dist/types-ts4.5/enable-global-theme.d.ts +2 -1
  67. package/dist/types-ts4.5/entry-points/css-type-schema.codegen.d.ts +2 -1
  68. package/dist/types-ts4.5/get-theme-html-attrs.d.ts +2 -1
  69. package/dist/types-ts4.5/get-theme-styles.d.ts +1 -0
  70. package/dist/types-ts4.5/index.d.ts +1 -1
  71. package/dist/types-ts4.5/set-global-theme.d.ts +1 -0
  72. package/dist/types-ts4.5/theme-config.d.ts +11 -7
  73. package/dist/types-ts4.5/types.d.ts +30 -1
  74. package/figma/atlassian-motion.json +5 -0
  75. package/package.json +13 -10
@@ -1,9 +1,17 @@
1
1
  /**
2
2
  * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
3
- * @codegen <<SignedSource::71ab6af4453c6807be4d4249ca7614bc>>
3
+ * @codegen <<SignedSource::f76d5451a0ccdab4ce74bc3e952aec8c>>
4
4
  * @codegenCommand yarn build tokens
5
5
  */
6
6
  const tokens = {
7
+ 'motion.content.enter.long': '--ds-content-enter-long',
8
+ 'motion.content.enter.medium': '--ds-content-enter-medium',
9
+ 'motion.content.enter.short': '--ds-content-enter-short',
10
+ 'motion.content.exit.long': '--ds-content-exit-long',
11
+ 'motion.content.exit.medium': '--ds-content-exit-medium',
12
+ 'motion.content.exit.short': '--ds-content-exit-short',
13
+ 'motion.dialog.enter': '--ds-dialog-enter',
14
+ 'motion.dialog.exit': '--ds-dialog-exit',
7
15
  'color.text': '--ds-text',
8
16
  'color.text.accent.lime': '--ds-text-accent-lime',
9
17
  'color.text.accent.lime.bolder': '--ds-text-accent-lime-bolder',
@@ -0,0 +1,248 @@
1
+ /**
2
+ * THIS FILE WAS CREATED VIA CODEGEN DO NOT MODIFY {@see http://go/af-codegen}
3
+ * @codegen <<SignedSource::2a5ddbfd4356a65a3955ab62d7341a46>>
4
+ * @codegenCommand yarn build tokens
5
+ */
6
+
7
+ const tokens = [{
8
+ "attributes": {
9
+ "group": "motion",
10
+ "state": "experimental",
11
+ "introduced": "11.1.0",
12
+ "description": ""
13
+ },
14
+ "value": {
15
+ "duration": 400,
16
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
17
+ "keyframes": ["FadeIn"]
18
+ },
19
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
20
+ "isSource": true,
21
+ "original": {
22
+ "attributes": {
23
+ "group": "motion",
24
+ "state": "experimental",
25
+ "introduced": "11.1.0",
26
+ "description": ""
27
+ },
28
+ "value": {
29
+ "duration": "Duration400",
30
+ "curve": "CubicEaseInOut",
31
+ "keyframes": ["FadeIn"]
32
+ }
33
+ },
34
+ "name": "motion.content.enter.long",
35
+ "path": ["motion", "content", "enter", "long"],
36
+ "cleanName": "motion.content.enter.long"
37
+ }, {
38
+ "attributes": {
39
+ "group": "motion",
40
+ "state": "experimental",
41
+ "introduced": "11.1.0",
42
+ "description": ""
43
+ },
44
+ "value": {
45
+ "duration": 200,
46
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
47
+ "keyframes": ["FadeIn"]
48
+ },
49
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
50
+ "isSource": true,
51
+ "original": {
52
+ "attributes": {
53
+ "group": "motion",
54
+ "state": "experimental",
55
+ "introduced": "11.1.0",
56
+ "description": ""
57
+ },
58
+ "value": {
59
+ "duration": "Duration200",
60
+ "curve": "CubicEaseInOut",
61
+ "keyframes": ["FadeIn"]
62
+ }
63
+ },
64
+ "name": "motion.content.enter.medium",
65
+ "path": ["motion", "content", "enter", "medium"],
66
+ "cleanName": "motion.content.enter.medium"
67
+ }, {
68
+ "attributes": {
69
+ "group": "motion",
70
+ "state": "experimental",
71
+ "introduced": "11.1.0",
72
+ "description": ""
73
+ },
74
+ "value": {
75
+ "duration": 100,
76
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
77
+ "keyframes": ["FadeIn"]
78
+ },
79
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
80
+ "isSource": true,
81
+ "original": {
82
+ "attributes": {
83
+ "group": "motion",
84
+ "state": "experimental",
85
+ "introduced": "11.1.0",
86
+ "description": ""
87
+ },
88
+ "value": {
89
+ "duration": "Duration100",
90
+ "curve": "CubicEaseInOut",
91
+ "keyframes": ["FadeIn"]
92
+ }
93
+ },
94
+ "name": "motion.content.enter.short",
95
+ "path": ["motion", "content", "enter", "short"],
96
+ "cleanName": "motion.content.enter.short"
97
+ }, {
98
+ "attributes": {
99
+ "group": "motion",
100
+ "state": "experimental",
101
+ "introduced": "11.1.0",
102
+ "description": ""
103
+ },
104
+ "value": {
105
+ "duration": 200,
106
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
107
+ "keyframes": ["FadeOut"]
108
+ },
109
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
110
+ "isSource": true,
111
+ "original": {
112
+ "attributes": {
113
+ "group": "motion",
114
+ "state": "experimental",
115
+ "introduced": "11.1.0",
116
+ "description": ""
117
+ },
118
+ "value": {
119
+ "duration": "Duration200",
120
+ "curve": "CubicEaseInOut",
121
+ "keyframes": ["FadeOut"]
122
+ }
123
+ },
124
+ "name": "motion.content.exit.long",
125
+ "path": ["motion", "content", "exit", "long"],
126
+ "cleanName": "motion.content.exit.long"
127
+ }, {
128
+ "attributes": {
129
+ "group": "motion",
130
+ "state": "experimental",
131
+ "introduced": "11.1.0",
132
+ "description": ""
133
+ },
134
+ "value": {
135
+ "duration": 100,
136
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
137
+ "keyframes": ["FadeOut"]
138
+ },
139
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
140
+ "isSource": true,
141
+ "original": {
142
+ "attributes": {
143
+ "group": "motion",
144
+ "state": "experimental",
145
+ "introduced": "11.1.0",
146
+ "description": ""
147
+ },
148
+ "value": {
149
+ "duration": "Duration100",
150
+ "curve": "CubicEaseInOut",
151
+ "keyframes": ["FadeOut"]
152
+ }
153
+ },
154
+ "name": "motion.content.exit.medium",
155
+ "path": ["motion", "content", "exit", "medium"],
156
+ "cleanName": "motion.content.exit.medium"
157
+ }, {
158
+ "attributes": {
159
+ "group": "motion",
160
+ "state": "experimental",
161
+ "introduced": "11.1.0",
162
+ "description": ""
163
+ },
164
+ "value": {
165
+ "duration": 50,
166
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
167
+ "keyframes": ["FadeOut"]
168
+ },
169
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
170
+ "isSource": true,
171
+ "original": {
172
+ "attributes": {
173
+ "group": "motion",
174
+ "state": "experimental",
175
+ "introduced": "11.1.0",
176
+ "description": ""
177
+ },
178
+ "value": {
179
+ "duration": "Duration050",
180
+ "curve": "CubicEaseInOut",
181
+ "keyframes": ["FadeOut"]
182
+ }
183
+ },
184
+ "name": "motion.content.exit.short",
185
+ "path": ["motion", "content", "exit", "short"],
186
+ "cleanName": "motion.content.exit.short"
187
+ }, {
188
+ "attributes": {
189
+ "group": "motion",
190
+ "state": "experimental",
191
+ "introduced": "11.1.0",
192
+ "description": ""
193
+ },
194
+ "value": {
195
+ "duration": 350,
196
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
197
+ "keyframes": ["ScaleIn80", "FadeIn"]
198
+ },
199
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
200
+ "isSource": true,
201
+ "original": {
202
+ "attributes": {
203
+ "group": "motion",
204
+ "state": "experimental",
205
+ "introduced": "11.1.0",
206
+ "description": ""
207
+ },
208
+ "value": {
209
+ "duration": "Duration350",
210
+ "curve": "CubicEaseInOut",
211
+ "keyframes": ["ScaleIn80", "FadeIn"]
212
+ }
213
+ },
214
+ "name": "motion.dialog.enter",
215
+ "path": ["motion", "dialog", "enter"],
216
+ "cleanName": "motion.dialog.enter"
217
+ }, {
218
+ "attributes": {
219
+ "group": "motion",
220
+ "state": "experimental",
221
+ "introduced": "11.1.0",
222
+ "description": ""
223
+ },
224
+ "value": {
225
+ "duration": 350,
226
+ "curve": "cubic-bezier(0.66, 0, 0.34, 1)",
227
+ "keyframes": ["ScaleOut80", "FadeOut"]
228
+ },
229
+ "filePath": "schema/themes/atlassian-motion/motion.tsx",
230
+ "isSource": true,
231
+ "original": {
232
+ "attributes": {
233
+ "group": "motion",
234
+ "state": "experimental",
235
+ "introduced": "11.1.0",
236
+ "description": ""
237
+ },
238
+ "value": {
239
+ "duration": "Duration350",
240
+ "curve": "CubicEaseInOut",
241
+ "keyframes": ["ScaleOut80", "FadeOut"]
242
+ }
243
+ },
244
+ "name": "motion.dialog.exit",
245
+ "path": ["motion", "dialog", "exit"],
246
+ "cleanName": "motion.dialog.exit"
247
+ }];
248
+ export default tokens;
@@ -10,6 +10,7 @@ import { getThemePreferences } from './utils/get-theme-preferences';
10
10
  * @param {string} themeState.colorMode Determines which color theme is applied. If set to `auto`, the theme applied will be determined by the OS setting.
11
11
  * @param {string} themeState.dark The color theme to be applied when the color mode resolves to 'dark'.
12
12
  * @param {string} themeState.light The color theme to be applied when the color mode resolves to 'light'.
13
+ * @param {string} themeState.motion The motion theme to be applied.
13
14
  * @param {string} themeState.shape The shape theme to be applied.
14
15
  * @param {string} themeState.spacing The spacing theme to be applied.
15
16
  * @param {string} themeState.typography The typography theme to be applied.
@@ -28,6 +29,7 @@ const enableGlobalTheme = ({
28
29
  contrastMode = themeStateDefaults['contrastMode'],
29
30
  dark = themeStateDefaults['dark'],
30
31
  light = themeStateDefaults['light'],
32
+ motion = themeStateDefaults['motion'](),
31
33
  shape = themeStateDefaults['shape'](),
32
34
  spacing = themeStateDefaults['spacing'],
33
35
  typography = themeStateDefaults['typography'],
@@ -38,6 +40,7 @@ const enableGlobalTheme = ({
38
40
  contrastMode,
39
41
  dark,
40
42
  light,
43
+ motion,
41
44
  shape,
42
45
  spacing,
43
46
  typography,
@@ -15,6 +15,7 @@ const defaultContrastMode = 'no-preference';
15
15
  * @param {string} themeState.colorMode Determines which color theme is applied. If set to `auto`, the theme applied will be determined by the OS setting.
16
16
  * @param {string} themeState.dark The color theme to be applied when the color mode resolves to 'dark'.
17
17
  * @param {string} themeState.light The color theme to be applied when the color mode resolves to 'light'.
18
+ * @param {string} themeState.motion The motion theme to be applied.
18
19
  * @param {string} themeState.spacing The spacing theme to be applied.
19
20
  * @param {string} themeState.typography The typography theme to be applied.
20
21
  * @param {Object} themeState.UNSAFE_themeOptions The custom branding options to be used for custom theme generation
@@ -26,6 +27,7 @@ const getThemeHtmlAttrs = ({
26
27
  dark = themeStateDefaults['dark'],
27
28
  light = themeStateDefaults['light'],
28
29
  contrastMode = themeStateDefaults['contrastMode'],
30
+ motion = themeStateDefaults['motion'](),
29
31
  shape = themeStateDefaults['shape'](),
30
32
  spacing = themeStateDefaults['spacing'],
31
33
  typography = themeStateDefaults['typography'],
@@ -34,6 +36,7 @@ const getThemeHtmlAttrs = ({
34
36
  const themeAttribute = themeObjectToString({
35
37
  dark,
36
38
  light,
39
+ motion,
37
40
  shape,
38
41
  spacing,
39
42
  typography
@@ -11,6 +11,7 @@ import { loadThemeCss } from './utils/theme-loading';
11
11
  * @param {string} themeState.colorMode Determines which color theme is applied. If set to `auto`, the theme applied will be determined by the OS setting.
12
12
  * @param {string} themeState.dark The color theme to be applied when the color mode resolves to 'dark'.
13
13
  * @param {string} themeState.light The color theme to be applied when the color mode resolves to 'light'.
14
+ * @param {string} themeState.motion The motion theme to be applied.
14
15
  * @param {string} themeState.shape The shape theme to be applied.
15
16
  * @param {string} themeState.spacing The spacing theme to be applied.
16
17
  * @param {string} themeState.typography The typography theme to be applied.
@@ -35,6 +36,7 @@ const getThemeStyles = async preferences => {
35
36
  contrastMode: (preferences === null || preferences === void 0 ? void 0 : preferences.contrastMode) || themeStateDefaults['contrastMode'],
36
37
  dark: (preferences === null || preferences === void 0 ? void 0 : preferences.dark) || themeStateDefaults['dark'],
37
38
  light: (preferences === null || preferences === void 0 ? void 0 : preferences.light) || themeStateDefaults['light'],
39
+ motion: (preferences === null || preferences === void 0 ? void 0 : preferences.motion) || themeStateDefaults['motion'](),
38
40
  shape: (preferences === null || preferences === void 0 ? void 0 : preferences.shape) || themeStateDefaults['shape'](),
39
41
  spacing: (preferences === null || preferences === void 0 ? void 0 : preferences.spacing) || themeStateDefaults['spacing'],
40
42
  typography: (preferences === null || preferences === void 0 ? void 0 : preferences.typography) || themeStateDefaults['typography']
@@ -15,6 +15,7 @@ import { loadAndAppendThemeCss } from './utils/theme-loading';
15
15
  * @param {string} themeState.contrastMode The contrast mode theme to be applied. If set to `auto`, the theme applied will be determined by the OS setting.set to `auto`, the theme applied will be determined by the OS setting.
16
16
  * @param {string} themeState.dark The color theme to be applied when the color mode resolves to 'dark'.
17
17
  * @param {string} themeState.light The color theme to be applied when the color mode resolves to 'light'.
18
+ * @param {string} themeState.motion The motion theme to be applied.
18
19
  * @param {string} themeState.shape The shape theme to be applied.
19
20
  * @param {string} themeState.spacing The spacing theme to be applied.
20
21
  * @param {string} themeState.typography The typography theme to be applied.
@@ -37,11 +38,13 @@ const setGlobalTheme = async (nextThemeState = {}, themeLoader) => {
37
38
  shape = themeStateDefaults['shape'](),
38
39
  spacing = themeStateDefaults['spacing'],
39
40
  typography = themeStateDefaults['typography'],
41
+ motion = themeStateDefaults['motion'](),
40
42
  UNSAFE_themeOptions = themeStateDefaults['UNSAFE_themeOptions']
41
43
  } = typeof nextThemeState === 'function' ? nextThemeState({
42
44
  ...themeStateDefaults,
43
45
  typography: themeStateDefaults['typography'],
44
46
  shape: themeStateDefaults['shape'](),
47
+ motion: themeStateDefaults['motion'](),
45
48
  ...getGlobalTheme()
46
49
  }) : nextThemeState;
47
50
 
@@ -63,6 +66,7 @@ const setGlobalTheme = async (nextThemeState = {}, themeLoader) => {
63
66
  shape,
64
67
  spacing,
65
68
  typography,
69
+ motion,
66
70
  UNSAFE_themeOptions: themeLoader ? undefined : UNSAFE_themeOptions
67
71
  };
68
72
 
@@ -40,7 +40,7 @@ const themeContrastModes = ['more', 'no-preference', 'auto'];
40
40
  *
41
41
  * These ids must be kebab case
42
42
  */
43
- export const themeIds = ['light-increased-contrast', 'light', 'light-future', 'dark', 'dark-future', 'dark-increased-contrast', 'spacing', 'shape', 'typography'];
43
+ export const themeIds = ['light-increased-contrast', 'light', 'light-future', 'dark', 'dark-future', 'dark-increased-contrast', 'spacing', 'shape', 'typography', 'motion'];
44
44
  /**
45
45
  * Theme override ids: the equivalent of themeIds for theme overrides.
46
46
  * Theme overrides are temporary and there may not be any defined at times.
@@ -149,6 +149,14 @@ const themeConfig = {
149
149
  attributes: {
150
150
  type: 'shape'
151
151
  }
152
+ },
153
+ 'atlassian-motion': {
154
+ id: 'motion',
155
+ displayName: 'Motion',
156
+ palette: 'motionPalette',
157
+ attributes: {
158
+ type: 'motion'
159
+ }
152
160
  }
153
161
  };
154
162
 
@@ -181,6 +189,12 @@ export const themeStateDefaults = {
181
189
  },
182
190
  spacing: 'spacing',
183
191
  typography: 'typography',
192
+ motion: () => {
193
+ if (fg('platform-dst-motion-theme-default')) {
194
+ return 'motion';
195
+ }
196
+ return undefined;
197
+ },
184
198
  UNSAFE_themeOptions: undefined
185
199
  };
186
200
 
@@ -1,5 +1,5 @@
1
1
  import { themeIds } from './theme-config';
2
- const themeKinds = ['light', 'dark', 'spacing', 'typography', 'shape'];
2
+ const themeKinds = ['light', 'dark', 'spacing', 'typography', 'shape', 'motion'];
3
3
  const customThemeOptions = 'UNSAFE_themeOptions';
4
4
  const isThemeKind = themeKind => {
5
5
  return themeKinds.find(kind => kind === themeKind) !== undefined;
@@ -8,7 +8,8 @@ export const getThemePreferences = themeState => {
8
8
  light,
9
9
  shape,
10
10
  spacing,
11
- typography
11
+ typography,
12
+ motion
12
13
  } = themeState;
13
14
  const autoColorModeThemes = [light, dark];
14
15
  const themePreferences = [];
@@ -31,7 +32,7 @@ export const getThemePreferences = themeState => {
31
32
  }
32
33
  }
33
34
  }
34
- [shape, spacing, typography].forEach(themeId => {
35
+ [shape, spacing, typography, motion].forEach(themeId => {
35
36
  if (themeId) {
36
37
  themePreferences.push(themeId);
37
38
  }