material-icon-theme 4.15.0 → 4.18.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 (204) hide show
  1. package/.eslintrc.json +51 -51
  2. package/.github/FUNDING.yml +3 -3
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +34 -34
  4. package/.github/ISSUE_TEMPLATE/icon_request.md +27 -27
  5. package/.github/workflows/build.yml +45 -45
  6. package/.github/workflows/color-check.yml +22 -22
  7. package/.github/workflows/release.yml +73 -73
  8. package/.prettierrc +7 -7
  9. package/.vscode/extensions.json +3 -3
  10. package/.vscode/launch.json +43 -43
  11. package/.vscode/settings.json +14 -14
  12. package/.vscode/tasks.json +32 -32
  13. package/.vscodeignore +20 -20
  14. package/CHANGELOG.md +1171 -1125
  15. package/CONTRIBUTING.md +62 -62
  16. package/LICENSE.md +8 -8
  17. package/README.md +208 -209
  18. package/build/web-extension.webpack.config.js +62 -62
  19. package/build/webpack.config.js +39 -39
  20. package/changelog.config.json +4 -4
  21. package/icons/architecture.svg +5 -0
  22. package/icons/astyle.svg +4 -4
  23. package/icons/azure.svg +10 -1
  24. package/icons/blitz.svg +4 -4
  25. package/icons/buildkite.svg +9 -1
  26. package/icons/cypress.svg +4 -4
  27. package/icons/dart_generated.svg +9 -0
  28. package/icons/dependabot.svg +4 -4
  29. package/icons/dinophp.svg +16 -16
  30. package/icons/figma.svg +10 -10
  31. package/icons/folder-angular-open.svg +2 -2
  32. package/icons/folder-angular.svg +2 -2
  33. package/icons/folder-buildkite-open.svg +9 -0
  34. package/icons/folder-buildkite.svg +8 -0
  35. package/icons/folder-cypress-open.svg +5 -5
  36. package/icons/folder-cypress.svg +5 -5
  37. package/icons/folder-java-open.svg +2 -2
  38. package/icons/folder-java.svg +2 -2
  39. package/icons/folder-lua-open.svg +1 -0
  40. package/icons/folder-lua.svg +1 -0
  41. package/icons/folder-next-open.svg +2 -2
  42. package/icons/folder-next.svg +2 -2
  43. package/icons/folder-nuxt-open.svg +2 -1
  44. package/icons/folder-nuxt.svg +2 -1
  45. package/icons/folder-queue-open.svg +2 -2
  46. package/icons/folder-queue.svg +2 -2
  47. package/icons/folder-resolver-open.svg +2 -2
  48. package/icons/folder-resolver.svg +2 -2
  49. package/icons/folder-serverless-open.svg +5 -5
  50. package/icons/folder-serverless.svg +5 -5
  51. package/icons/folder-shader-open.svg +8 -0
  52. package/icons/folder-shader.svg +7 -0
  53. package/icons/folder-target-open.svg +2 -2
  54. package/icons/folder-target.svg +2 -2
  55. package/icons/folder-unity-open.svg +2 -2
  56. package/icons/folder-unity.svg +2 -2
  57. package/icons/folder-vercel-open.svg +4 -4
  58. package/icons/folder-vercel.svg +4 -4
  59. package/icons/folder-verdaccio-open.svg +8 -0
  60. package/icons/folder-verdaccio.svg +8 -0
  61. package/icons/gleam.svg +4 -4
  62. package/icons/gridsome.svg +4 -4
  63. package/icons/hardhat.svg +3 -3
  64. package/icons/lighthouse.svg +2 -2
  65. package/icons/ndst.svg +7 -7
  66. package/icons/next.svg +3 -3
  67. package/icons/next_light.svg +2 -2
  68. package/icons/nuxt.svg +5 -1
  69. package/icons/odin.svg +6 -6
  70. package/icons/otne.svg +16 -0
  71. package/icons/parcel.svg +4 -4
  72. package/icons/playwright.svg +7 -7
  73. package/icons/plop.svg +4 -0
  74. package/icons/pnpm.svg +9 -9
  75. package/icons/pnpm_light.svg +7 -7
  76. package/icons/poetry.svg +1 -1
  77. package/icons/processing.svg +10 -10
  78. package/icons/remix.svg +4 -4
  79. package/icons/remix_light.svg +4 -4
  80. package/icons/rescript-interface.svg +5 -0
  81. package/icons/rome.svg +5 -5
  82. package/icons/serverless.svg +4 -4
  83. package/icons/shader.svg +4 -0
  84. package/icons/siyuan.svg +9 -9
  85. package/icons/steadybit.svg +1 -1
  86. package/icons/svgr.svg +4 -4
  87. package/icons/tauri.svg +9 -9
  88. package/icons/template.svg +4 -4
  89. package/icons/tobi.svg +4 -4
  90. package/icons/tobimake.svg +14 -14
  91. package/icons/turborepo.svg +12 -12
  92. package/icons/turborepo_light.svg +12 -12
  93. package/icons/verdaccio.svg +5 -0
  94. package/images/contributors.png +0 -0
  95. package/images/fileIcons.png +0 -0
  96. package/images/folderIcons.png +0 -0
  97. package/logo.svg +21 -21
  98. package/material-colors.yml +257 -257
  99. package/package.json +264 -264
  100. package/package.nls.de.json +35 -35
  101. package/package.nls.es.json +32 -32
  102. package/package.nls.fr.json +32 -32
  103. package/package.nls.ja.json +35 -35
  104. package/package.nls.json +35 -35
  105. package/package.nls.nl.json +35 -35
  106. package/package.nls.pl.json +35 -35
  107. package/package.nls.pt-BR.json +32 -32
  108. package/package.nls.pt-PT.json +32 -32
  109. package/package.nls.ru.json +32 -32
  110. package/package.nls.zh-CN.json +32 -32
  111. package/package.nls.zh-TW.json +32 -32
  112. package/src/commands/activate.ts +26 -26
  113. package/src/commands/explorerArrows.ts +55 -55
  114. package/src/commands/folderColor.ts +96 -96
  115. package/src/commands/folders.ts +55 -55
  116. package/src/commands/grayscale.ts +55 -55
  117. package/src/commands/iconPacks.ts +68 -68
  118. package/src/commands/index.ts +30 -30
  119. package/src/commands/opacity.ts +46 -46
  120. package/src/commands/restoreConfig.ts +14 -14
  121. package/src/commands/saturation.ts +46 -46
  122. package/src/extension.ts +42 -35
  123. package/src/helpers/changeDetection.ts +73 -68
  124. package/src/helpers/customIcons.ts +8 -8
  125. package/src/helpers/fileConfig.ts +37 -37
  126. package/src/helpers/index.ts +100 -100
  127. package/src/helpers/objects.ts +58 -58
  128. package/src/helpers/types.ts +7 -7
  129. package/src/helpers/versioning.ts +73 -73
  130. package/src/i18n/index.ts +78 -78
  131. package/src/i18n/lang-de.ts +54 -54
  132. package/src/i18n/lang-en.ts +53 -53
  133. package/src/i18n/lang-es.ts +53 -53
  134. package/src/i18n/lang-fr.ts +53 -53
  135. package/src/i18n/lang-ja.ts +54 -54
  136. package/src/i18n/lang-nl.ts +54 -54
  137. package/src/i18n/lang-pl.ts +52 -52
  138. package/src/i18n/lang-pt-br.ts +53 -53
  139. package/src/i18n/lang-pt-pt.ts +53 -53
  140. package/src/i18n/lang-ru.ts +52 -52
  141. package/src/i18n/lang-uk.ts +54 -54
  142. package/src/i18n/lang-zh-cn.ts +52 -52
  143. package/src/i18n/lang-zh-tw.ts +52 -52
  144. package/src/icons/fileIcons.ts +2046 -1836
  145. package/src/icons/folderIcons.ts +773 -750
  146. package/src/icons/generator/constants.ts +29 -29
  147. package/src/icons/generator/fileGenerator.ts +216 -216
  148. package/src/icons/generator/folderGenerator.ts +340 -340
  149. package/src/icons/generator/iconOpacity.ts +111 -111
  150. package/src/icons/generator/iconSaturation.ts +140 -140
  151. package/src/icons/generator/index.ts +7 -7
  152. package/src/icons/generator/jsonGenerator.ts +187 -187
  153. package/src/icons/generator/languageGenerator.ts +127 -127
  154. package/src/icons/index.ts +4 -4
  155. package/src/icons/languageIcons.ts +136 -134
  156. package/src/messages/outdated.ts +33 -33
  157. package/src/messages/reload.ts +32 -32
  158. package/src/messages/start.ts +12 -12
  159. package/src/messages/update.ts +48 -48
  160. package/src/messages/welcome.ts +47 -47
  161. package/src/models/helpers/index.ts +1 -1
  162. package/src/models/helpers/themeStatus.ts +5 -5
  163. package/src/models/i18n/index.ts +1 -1
  164. package/src/models/i18n/translation.ts +50 -50
  165. package/src/models/iconConfiguration.ts +37 -37
  166. package/src/models/icons/defaultIcon.ts +16 -16
  167. package/src/models/icons/files/fileIcon.ts +49 -49
  168. package/src/models/icons/files/fileTypes.ts +14 -14
  169. package/src/models/icons/files/index.ts +2 -2
  170. package/src/models/icons/folders/folderIcon.ts +34 -34
  171. package/src/models/icons/folders/folderTheme.ts +23 -23
  172. package/src/models/icons/folders/index.ts +2 -2
  173. package/src/models/icons/iconJsonOptions.ts +23 -23
  174. package/src/models/icons/iconPack.ts +12 -12
  175. package/src/models/icons/index.ts +6 -6
  176. package/src/models/icons/languages/index.ts +1 -1
  177. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  178. package/src/models/index.ts +4 -4
  179. package/src/models/scripts/contributors/contributor.ts +22 -22
  180. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  181. package/src/scripts/contributors/contributors.css +24 -24
  182. package/src/scripts/contributors/index.ts +138 -138
  183. package/src/scripts/helpers/painter.ts +5 -5
  184. package/src/scripts/helpers/screenshots.ts +32 -32
  185. package/src/scripts/helpers/similarity.ts +47 -47
  186. package/src/scripts/helpers/titleCase.ts +7 -7
  187. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  188. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  189. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  190. package/src/scripts/icons/checks/index.ts +7 -7
  191. package/src/scripts/icons/generateJson.ts +11 -11
  192. package/src/scripts/preview/index.ts +40 -40
  193. package/src/scripts/preview/preview.ts +165 -165
  194. package/src/scripts/preview/style.css +48 -48
  195. package/src/test/runTest.ts +26 -26
  196. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  197. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  198. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  199. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  200. package/src/test/spec/index.ts +36 -36
  201. package/src/web/extension.ts +10 -10
  202. package/svgo.config.js +11 -11
  203. package/tsconfig.json +23 -23
  204. package/icons/nuxt_light.svg +0 -1
@@ -1,418 +1,418 @@
1
- import * as assert from 'assert';
2
- import merge from 'lodash.merge';
3
- import {
4
- getDefaultIconOptions,
5
- loadFolderIconDefinitions,
6
- } from '../../../icons/index';
7
- import {
8
- FolderTheme,
9
- IconConfiguration,
10
- IconPack,
11
- } from '../../../models/index';
12
-
13
- describe('folder icons', () => {
14
- let folderIcons: FolderTheme[];
15
- let expectedConfig: IconConfiguration;
16
-
17
- before(() => {
18
- folderIcons = [
19
- {
20
- name: 'specific',
21
- defaultIcon: { name: 'folder' },
22
- rootFolder: { name: 'folder-root' },
23
- icons: [
24
- { name: 'folder-src', folderNames: ['src', 'source'] },
25
- {
26
- name: 'folder-angular',
27
- folderNames: ['angular', 'ng'],
28
- enabledFor: [IconPack.Angular, IconPack.Ngrx],
29
- },
30
- ],
31
- },
32
- {
33
- name: 'blue',
34
- defaultIcon: { name: 'folder-blue' },
35
- icons: [{ name: 'folder-blue-src', folderNames: ['src', 'source'] }],
36
- },
37
- { name: 'classic', defaultIcon: { name: 'folder' } },
38
- { name: 'none', defaultIcon: { name: '' } },
39
- ];
40
- });
41
-
42
- beforeEach(() => {
43
- expectedConfig = merge({}, new IconConfiguration(), {
44
- options: getDefaultIconOptions(),
45
- });
46
- });
47
-
48
- it('should configure icon definitions', () => {
49
- const options = getDefaultIconOptions();
50
- const iconConfig = merge({}, new IconConfiguration(), { options });
51
- const iconDefinitions = loadFolderIconDefinitions(
52
- folderIcons,
53
- iconConfig,
54
- options
55
- );
56
-
57
- expectedConfig.iconDefinitions = {
58
- folder: {
59
- iconPath: './../icons/folder.svg',
60
- },
61
- 'folder-open': {
62
- iconPath: './../icons/folder-open.svg',
63
- },
64
- 'folder-root': {
65
- iconPath: './../icons/folder-root.svg',
66
- },
67
- 'folder-root-open': {
68
- iconPath: './../icons/folder-root-open.svg',
69
- },
70
- 'folder-src': {
71
- iconPath: './../icons/folder-src.svg',
72
- },
73
- 'folder-src-open': {
74
- iconPath: './../icons/folder-src-open.svg',
75
- },
76
- 'folder-angular': {
77
- iconPath: './../icons/folder-angular.svg',
78
- },
79
- 'folder-angular-open': {
80
- iconPath: './../icons/folder-angular-open.svg',
81
- },
82
- };
83
- expectedConfig.folder = 'folder';
84
- expectedConfig.folderExpanded = 'folder-open';
85
- expectedConfig.rootFolder = 'folder-root';
86
- expectedConfig.rootFolderExpanded = 'folder-root-open';
87
- expectedConfig.folderNames = {
88
- src: 'folder-src',
89
- source: 'folder-src',
90
- angular: 'folder-angular',
91
- ng: 'folder-angular',
92
- };
93
- expectedConfig.folderNamesExpanded = {
94
- src: 'folder-src-open',
95
- source: 'folder-src-open',
96
- angular: 'folder-angular-open',
97
- ng: 'folder-angular-open',
98
- };
99
- expectedConfig.hidesExplorerArrows = false;
100
-
101
- assert.deepStrictEqual(iconDefinitions, expectedConfig);
102
- });
103
-
104
- it('should deactivate folder icons', () => {
105
- const options = getDefaultIconOptions();
106
- options.folders.theme = 'none';
107
- const iconConfig = merge({}, new IconConfiguration(), { options });
108
- const iconDefinitions = loadFolderIconDefinitions(
109
- folderIcons,
110
- iconConfig,
111
- options
112
- );
113
-
114
- expectedConfig.iconDefinitions = {};
115
- expectedConfig.folderNames = {};
116
- expectedConfig.folderNamesExpanded = {};
117
- expectedConfig.hidesExplorerArrows = false;
118
- expectedConfig.options!.folders!.theme = 'none';
119
-
120
- assert.deepStrictEqual(iconDefinitions, expectedConfig);
121
- });
122
-
123
- it('should enable folder theme', () => {
124
- const options = getDefaultIconOptions();
125
- options.folders.theme = 'blue';
126
- const iconConfig = merge({}, new IconConfiguration(), { options });
127
- const iconDefinitions = loadFolderIconDefinitions(
128
- folderIcons,
129
- iconConfig,
130
- options
131
- );
132
-
133
- expectedConfig.iconDefinitions = {
134
- 'folder-blue': {
135
- iconPath: './../icons/folder-blue.svg',
136
- },
137
- 'folder-blue-open': {
138
- iconPath: './../icons/folder-blue-open.svg',
139
- },
140
- 'folder-blue-src': {
141
- iconPath: './../icons/folder-blue-src.svg',
142
- },
143
- 'folder-blue-src-open': {
144
- iconPath: './../icons/folder-blue-src-open.svg',
145
- },
146
- };
147
- expectedConfig.folder = 'folder-blue';
148
- expectedConfig.folderExpanded = 'folder-blue-open';
149
- expectedConfig.rootFolder = 'folder-blue';
150
- expectedConfig.rootFolderExpanded = 'folder-blue-open';
151
- expectedConfig.folderNames = {
152
- src: 'folder-blue-src',
153
- source: 'folder-blue-src',
154
- };
155
- expectedConfig.folderNamesExpanded = {
156
- src: 'folder-blue-src-open',
157
- source: 'folder-blue-src-open',
158
- };
159
- expectedConfig.hidesExplorerArrows = false;
160
- expectedConfig.options!.folders!.theme = 'blue';
161
-
162
- assert.deepStrictEqual(iconDefinitions, expectedConfig);
163
- });
164
-
165
- it('should configure custom icon associations', () => {
166
- const options = getDefaultIconOptions();
167
- options.folders.associations = {
168
- sample: 'src',
169
- };
170
- const iconConfig = merge({}, new IconConfiguration(), { options });
171
- const iconDefinitions = loadFolderIconDefinitions(
172
- folderIcons,
173
- iconConfig,
174
- options
175
- );
176
- expectedConfig.iconDefinitions = {
177
- folder: {
178
- iconPath: './../icons/folder.svg',
179
- },
180
- 'folder-open': {
181
- iconPath: './../icons/folder-open.svg',
182
- },
183
- 'folder-root': {
184
- iconPath: './../icons/folder-root.svg',
185
- },
186
- 'folder-root-open': {
187
- iconPath: './../icons/folder-root-open.svg',
188
- },
189
- 'folder-src': {
190
- iconPath: './../icons/folder-src.svg',
191
- },
192
- 'folder-src-open': {
193
- iconPath: './../icons/folder-src-open.svg',
194
- },
195
- 'folder-angular': {
196
- iconPath: './../icons/folder-angular.svg',
197
- },
198
- 'folder-angular-open': {
199
- iconPath: './../icons/folder-angular-open.svg',
200
- },
201
- };
202
- expectedConfig.folder = 'folder';
203
- expectedConfig.folderExpanded = 'folder-open';
204
- expectedConfig.rootFolder = 'folder-root';
205
- expectedConfig.rootFolderExpanded = 'folder-root-open';
206
- expectedConfig.folderNames = {
207
- src: 'folder-src',
208
- source: 'folder-src',
209
- angular: 'folder-angular',
210
- ng: 'folder-angular',
211
- sample: 'folder-src',
212
- };
213
- expectedConfig.folderNamesExpanded = {
214
- src: 'folder-src-open',
215
- source: 'folder-src-open',
216
- angular: 'folder-angular-open',
217
- ng: 'folder-angular-open',
218
- sample: 'folder-src-open',
219
- };
220
- expectedConfig.hidesExplorerArrows = false;
221
- expectedConfig.options!.folders!.associations = {
222
- sample: 'src',
223
- };
224
-
225
- assert.deepStrictEqual(iconDefinitions, expectedConfig);
226
- });
227
-
228
- it('should disable icon packs', () => {
229
- const options = getDefaultIconOptions();
230
- options.activeIconPack = '';
231
- const iconConfig = merge({}, new IconConfiguration(), { options });
232
- const iconDefinitions = loadFolderIconDefinitions(
233
- folderIcons,
234
- iconConfig,
235
- options
236
- );
237
- expectedConfig.iconDefinitions = {
238
- folder: {
239
- iconPath: './../icons/folder.svg',
240
- },
241
- 'folder-open': {
242
- iconPath: './../icons/folder-open.svg',
243
- },
244
- 'folder-root': {
245
- iconPath: './../icons/folder-root.svg',
246
- },
247
- 'folder-root-open': {
248
- iconPath: './../icons/folder-root-open.svg',
249
- },
250
- 'folder-src': {
251
- iconPath: './../icons/folder-src.svg',
252
- },
253
- 'folder-src-open': {
254
- iconPath: './../icons/folder-src-open.svg',
255
- },
256
- };
257
- expectedConfig.folder = 'folder';
258
- expectedConfig.folderExpanded = 'folder-open';
259
- expectedConfig.rootFolder = 'folder-root';
260
- expectedConfig.rootFolderExpanded = 'folder-root-open';
261
- expectedConfig.folderNames = {
262
- src: 'folder-src',
263
- source: 'folder-src',
264
- };
265
- expectedConfig.folderNamesExpanded = {
266
- src: 'folder-src-open',
267
- source: 'folder-src-open',
268
- };
269
- expectedConfig.hidesExplorerArrows = false;
270
-
271
- // disable default icon pack by using empty string
272
- expectedConfig.options!.activeIconPack = '';
273
-
274
- assert.deepStrictEqual(iconDefinitions, expectedConfig);
275
- });
276
-
277
- it('should configure folder icons for light and high contrast', () => {
278
- const options = getDefaultIconOptions();
279
- const lightHighContrastFolderIcons: FolderTheme[] = [
280
- {
281
- name: 'specific',
282
- defaultIcon: { name: 'folder', light: true, highContrast: true },
283
- rootFolder: { name: 'folder-root', light: true, highContrast: true },
284
- icons: [
285
- {
286
- name: 'folder-src',
287
- folderNames: ['src', 'source'],
288
- light: true,
289
- highContrast: true,
290
- },
291
- ],
292
- },
293
- ];
294
- const iconConfig = merge({}, new IconConfiguration(), { options });
295
- const iconDefinitions = loadFolderIconDefinitions(
296
- lightHighContrastFolderIcons,
297
- iconConfig,
298
- options
299
- );
300
- /* eslint-disable camelcase */
301
- expectedConfig.iconDefinitions = {
302
- folder: {
303
- iconPath: './../icons/folder.svg',
304
- },
305
- 'folder-open': {
306
- iconPath: './../icons/folder-open.svg',
307
- },
308
- folder_light: {
309
- iconPath: './../icons/folder_light.svg',
310
- },
311
- 'folder-open_light': {
312
- iconPath: './../icons/folder-open_light.svg',
313
- },
314
- folder_highContrast: {
315
- iconPath: './../icons/folder_highContrast.svg',
316
- },
317
- 'folder-open_highContrast': {
318
- iconPath: './../icons/folder-open_highContrast.svg',
319
- },
320
- 'folder-root': {
321
- iconPath: './../icons/folder-root.svg',
322
- },
323
- 'folder-root-open': {
324
- iconPath: './../icons/folder-root-open.svg',
325
- },
326
- 'folder-root_light': {
327
- iconPath: './../icons/folder-root_light.svg',
328
- },
329
- 'folder-root-open_light': {
330
- iconPath: './../icons/folder-root-open_light.svg',
331
- },
332
- 'folder-root_highContrast': {
333
- iconPath: './../icons/folder-root_highContrast.svg',
334
- },
335
- 'folder-root-open_highContrast': {
336
- iconPath: './../icons/folder-root-open_highContrast.svg',
337
- },
338
- 'folder-src': {
339
- iconPath: './../icons/folder-src.svg',
340
- },
341
- 'folder-src-open': {
342
- iconPath: './../icons/folder-src-open.svg',
343
- },
344
- 'folder-src_light': {
345
- iconPath: './../icons/folder-src_light.svg',
346
- },
347
- 'folder-src-open_light': {
348
- iconPath: './../icons/folder-src-open_light.svg',
349
- },
350
- 'folder-src_highContrast': {
351
- iconPath: './../icons/folder-src_highContrast.svg',
352
- },
353
- 'folder-src-open_highContrast': {
354
- iconPath: './../icons/folder-src-open_highContrast.svg',
355
- },
356
- };
357
- expectedConfig.folder = 'folder';
358
- expectedConfig.folderExpanded = 'folder-open';
359
- expectedConfig.rootFolder = 'folder-root';
360
- expectedConfig.rootFolderExpanded = 'folder-root-open';
361
- expectedConfig.folderNames = {
362
- src: 'folder-src',
363
- source: 'folder-src',
364
- };
365
- expectedConfig.folderNamesExpanded = {
366
- src: 'folder-src-open',
367
- source: 'folder-src-open',
368
- };
369
- expectedConfig.light = {
370
- fileExtensions: {},
371
- fileNames: {},
372
- folder: 'folder_light',
373
- folderExpanded: 'folder-open_light',
374
- rootFolder: 'folder-root_light',
375
- rootFolderExpanded: 'folder-root-open_light',
376
- folderNames: {
377
- src: 'folder-src_light',
378
- source: 'folder-src_light',
379
- },
380
- folderNamesExpanded: {
381
- src: 'folder-src-open_light',
382
- source: 'folder-src-open_light',
383
- },
384
- };
385
- expectedConfig.highContrast = {
386
- fileExtensions: {},
387
- fileNames: {},
388
- folder: 'folder_highContrast',
389
- folderExpanded: 'folder-open_highContrast',
390
- rootFolder: 'folder-root_highContrast',
391
- rootFolderExpanded: 'folder-root-open_highContrast',
392
- folderNames: {
393
- src: 'folder-src_highContrast',
394
- source: 'folder-src_highContrast',
395
- },
396
- folderNamesExpanded: {
397
- src: 'folder-src-open_highContrast',
398
- source: 'folder-src-open_highContrast',
399
- },
400
- };
401
- expectedConfig.hidesExplorerArrows = false;
402
- /* eslint-enable camelcase */
403
- assert.deepStrictEqual(iconDefinitions, expectedConfig);
404
- });
405
-
406
- it('should hide explorer arrows', () => {
407
- const options = getDefaultIconOptions();
408
- options.hidesExplorerArrows = true;
409
- const iconConfig = merge({}, new IconConfiguration(), { options });
410
- const iconDefinitions = loadFolderIconDefinitions(
411
- folderIcons,
412
- iconConfig,
413
- options
414
- );
415
-
416
- assert.deepStrictEqual(iconDefinitions.hidesExplorerArrows, true);
417
- });
418
- });
1
+ import * as assert from 'assert';
2
+ import merge from 'lodash.merge';
3
+ import {
4
+ getDefaultIconOptions,
5
+ loadFolderIconDefinitions,
6
+ } from '../../../icons/index';
7
+ import {
8
+ FolderTheme,
9
+ IconConfiguration,
10
+ IconPack,
11
+ } from '../../../models/index';
12
+
13
+ describe('folder icons', () => {
14
+ let folderIcons: FolderTheme[];
15
+ let expectedConfig: IconConfiguration;
16
+
17
+ before(() => {
18
+ folderIcons = [
19
+ {
20
+ name: 'specific',
21
+ defaultIcon: { name: 'folder' },
22
+ rootFolder: { name: 'folder-root' },
23
+ icons: [
24
+ { name: 'folder-src', folderNames: ['src', 'source'] },
25
+ {
26
+ name: 'folder-angular',
27
+ folderNames: ['angular', 'ng'],
28
+ enabledFor: [IconPack.Angular, IconPack.Ngrx],
29
+ },
30
+ ],
31
+ },
32
+ {
33
+ name: 'blue',
34
+ defaultIcon: { name: 'folder-blue' },
35
+ icons: [{ name: 'folder-blue-src', folderNames: ['src', 'source'] }],
36
+ },
37
+ { name: 'classic', defaultIcon: { name: 'folder' } },
38
+ { name: 'none', defaultIcon: { name: '' } },
39
+ ];
40
+ });
41
+
42
+ beforeEach(() => {
43
+ expectedConfig = merge({}, new IconConfiguration(), {
44
+ options: getDefaultIconOptions(),
45
+ });
46
+ });
47
+
48
+ it('should configure icon definitions', () => {
49
+ const options = getDefaultIconOptions();
50
+ const iconConfig = merge({}, new IconConfiguration(), { options });
51
+ const iconDefinitions = loadFolderIconDefinitions(
52
+ folderIcons,
53
+ iconConfig,
54
+ options
55
+ );
56
+
57
+ expectedConfig.iconDefinitions = {
58
+ folder: {
59
+ iconPath: './../icons/folder.svg',
60
+ },
61
+ 'folder-open': {
62
+ iconPath: './../icons/folder-open.svg',
63
+ },
64
+ 'folder-root': {
65
+ iconPath: './../icons/folder-root.svg',
66
+ },
67
+ 'folder-root-open': {
68
+ iconPath: './../icons/folder-root-open.svg',
69
+ },
70
+ 'folder-src': {
71
+ iconPath: './../icons/folder-src.svg',
72
+ },
73
+ 'folder-src-open': {
74
+ iconPath: './../icons/folder-src-open.svg',
75
+ },
76
+ 'folder-angular': {
77
+ iconPath: './../icons/folder-angular.svg',
78
+ },
79
+ 'folder-angular-open': {
80
+ iconPath: './../icons/folder-angular-open.svg',
81
+ },
82
+ };
83
+ expectedConfig.folder = 'folder';
84
+ expectedConfig.folderExpanded = 'folder-open';
85
+ expectedConfig.rootFolder = 'folder-root';
86
+ expectedConfig.rootFolderExpanded = 'folder-root-open';
87
+ expectedConfig.folderNames = {
88
+ src: 'folder-src',
89
+ source: 'folder-src',
90
+ angular: 'folder-angular',
91
+ ng: 'folder-angular',
92
+ };
93
+ expectedConfig.folderNamesExpanded = {
94
+ src: 'folder-src-open',
95
+ source: 'folder-src-open',
96
+ angular: 'folder-angular-open',
97
+ ng: 'folder-angular-open',
98
+ };
99
+ expectedConfig.hidesExplorerArrows = false;
100
+
101
+ assert.deepStrictEqual(iconDefinitions, expectedConfig);
102
+ });
103
+
104
+ it('should deactivate folder icons', () => {
105
+ const options = getDefaultIconOptions();
106
+ options.folders.theme = 'none';
107
+ const iconConfig = merge({}, new IconConfiguration(), { options });
108
+ const iconDefinitions = loadFolderIconDefinitions(
109
+ folderIcons,
110
+ iconConfig,
111
+ options
112
+ );
113
+
114
+ expectedConfig.iconDefinitions = {};
115
+ expectedConfig.folderNames = {};
116
+ expectedConfig.folderNamesExpanded = {};
117
+ expectedConfig.hidesExplorerArrows = false;
118
+ expectedConfig.options!.folders!.theme = 'none';
119
+
120
+ assert.deepStrictEqual(iconDefinitions, expectedConfig);
121
+ });
122
+
123
+ it('should enable folder theme', () => {
124
+ const options = getDefaultIconOptions();
125
+ options.folders.theme = 'blue';
126
+ const iconConfig = merge({}, new IconConfiguration(), { options });
127
+ const iconDefinitions = loadFolderIconDefinitions(
128
+ folderIcons,
129
+ iconConfig,
130
+ options
131
+ );
132
+
133
+ expectedConfig.iconDefinitions = {
134
+ 'folder-blue': {
135
+ iconPath: './../icons/folder-blue.svg',
136
+ },
137
+ 'folder-blue-open': {
138
+ iconPath: './../icons/folder-blue-open.svg',
139
+ },
140
+ 'folder-blue-src': {
141
+ iconPath: './../icons/folder-blue-src.svg',
142
+ },
143
+ 'folder-blue-src-open': {
144
+ iconPath: './../icons/folder-blue-src-open.svg',
145
+ },
146
+ };
147
+ expectedConfig.folder = 'folder-blue';
148
+ expectedConfig.folderExpanded = 'folder-blue-open';
149
+ expectedConfig.rootFolder = 'folder-blue';
150
+ expectedConfig.rootFolderExpanded = 'folder-blue-open';
151
+ expectedConfig.folderNames = {
152
+ src: 'folder-blue-src',
153
+ source: 'folder-blue-src',
154
+ };
155
+ expectedConfig.folderNamesExpanded = {
156
+ src: 'folder-blue-src-open',
157
+ source: 'folder-blue-src-open',
158
+ };
159
+ expectedConfig.hidesExplorerArrows = false;
160
+ expectedConfig.options!.folders!.theme = 'blue';
161
+
162
+ assert.deepStrictEqual(iconDefinitions, expectedConfig);
163
+ });
164
+
165
+ it('should configure custom icon associations', () => {
166
+ const options = getDefaultIconOptions();
167
+ options.folders.associations = {
168
+ sample: 'src',
169
+ };
170
+ const iconConfig = merge({}, new IconConfiguration(), { options });
171
+ const iconDefinitions = loadFolderIconDefinitions(
172
+ folderIcons,
173
+ iconConfig,
174
+ options
175
+ );
176
+ expectedConfig.iconDefinitions = {
177
+ folder: {
178
+ iconPath: './../icons/folder.svg',
179
+ },
180
+ 'folder-open': {
181
+ iconPath: './../icons/folder-open.svg',
182
+ },
183
+ 'folder-root': {
184
+ iconPath: './../icons/folder-root.svg',
185
+ },
186
+ 'folder-root-open': {
187
+ iconPath: './../icons/folder-root-open.svg',
188
+ },
189
+ 'folder-src': {
190
+ iconPath: './../icons/folder-src.svg',
191
+ },
192
+ 'folder-src-open': {
193
+ iconPath: './../icons/folder-src-open.svg',
194
+ },
195
+ 'folder-angular': {
196
+ iconPath: './../icons/folder-angular.svg',
197
+ },
198
+ 'folder-angular-open': {
199
+ iconPath: './../icons/folder-angular-open.svg',
200
+ },
201
+ };
202
+ expectedConfig.folder = 'folder';
203
+ expectedConfig.folderExpanded = 'folder-open';
204
+ expectedConfig.rootFolder = 'folder-root';
205
+ expectedConfig.rootFolderExpanded = 'folder-root-open';
206
+ expectedConfig.folderNames = {
207
+ src: 'folder-src',
208
+ source: 'folder-src',
209
+ angular: 'folder-angular',
210
+ ng: 'folder-angular',
211
+ sample: 'folder-src',
212
+ };
213
+ expectedConfig.folderNamesExpanded = {
214
+ src: 'folder-src-open',
215
+ source: 'folder-src-open',
216
+ angular: 'folder-angular-open',
217
+ ng: 'folder-angular-open',
218
+ sample: 'folder-src-open',
219
+ };
220
+ expectedConfig.hidesExplorerArrows = false;
221
+ expectedConfig.options!.folders!.associations = {
222
+ sample: 'src',
223
+ };
224
+
225
+ assert.deepStrictEqual(iconDefinitions, expectedConfig);
226
+ });
227
+
228
+ it('should disable icon packs', () => {
229
+ const options = getDefaultIconOptions();
230
+ options.activeIconPack = '';
231
+ const iconConfig = merge({}, new IconConfiguration(), { options });
232
+ const iconDefinitions = loadFolderIconDefinitions(
233
+ folderIcons,
234
+ iconConfig,
235
+ options
236
+ );
237
+ expectedConfig.iconDefinitions = {
238
+ folder: {
239
+ iconPath: './../icons/folder.svg',
240
+ },
241
+ 'folder-open': {
242
+ iconPath: './../icons/folder-open.svg',
243
+ },
244
+ 'folder-root': {
245
+ iconPath: './../icons/folder-root.svg',
246
+ },
247
+ 'folder-root-open': {
248
+ iconPath: './../icons/folder-root-open.svg',
249
+ },
250
+ 'folder-src': {
251
+ iconPath: './../icons/folder-src.svg',
252
+ },
253
+ 'folder-src-open': {
254
+ iconPath: './../icons/folder-src-open.svg',
255
+ },
256
+ };
257
+ expectedConfig.folder = 'folder';
258
+ expectedConfig.folderExpanded = 'folder-open';
259
+ expectedConfig.rootFolder = 'folder-root';
260
+ expectedConfig.rootFolderExpanded = 'folder-root-open';
261
+ expectedConfig.folderNames = {
262
+ src: 'folder-src',
263
+ source: 'folder-src',
264
+ };
265
+ expectedConfig.folderNamesExpanded = {
266
+ src: 'folder-src-open',
267
+ source: 'folder-src-open',
268
+ };
269
+ expectedConfig.hidesExplorerArrows = false;
270
+
271
+ // disable default icon pack by using empty string
272
+ expectedConfig.options!.activeIconPack = '';
273
+
274
+ assert.deepStrictEqual(iconDefinitions, expectedConfig);
275
+ });
276
+
277
+ it('should configure folder icons for light and high contrast', () => {
278
+ const options = getDefaultIconOptions();
279
+ const lightHighContrastFolderIcons: FolderTheme[] = [
280
+ {
281
+ name: 'specific',
282
+ defaultIcon: { name: 'folder', light: true, highContrast: true },
283
+ rootFolder: { name: 'folder-root', light: true, highContrast: true },
284
+ icons: [
285
+ {
286
+ name: 'folder-src',
287
+ folderNames: ['src', 'source'],
288
+ light: true,
289
+ highContrast: true,
290
+ },
291
+ ],
292
+ },
293
+ ];
294
+ const iconConfig = merge({}, new IconConfiguration(), { options });
295
+ const iconDefinitions = loadFolderIconDefinitions(
296
+ lightHighContrastFolderIcons,
297
+ iconConfig,
298
+ options
299
+ );
300
+ /* eslint-disable camelcase */
301
+ expectedConfig.iconDefinitions = {
302
+ folder: {
303
+ iconPath: './../icons/folder.svg',
304
+ },
305
+ 'folder-open': {
306
+ iconPath: './../icons/folder-open.svg',
307
+ },
308
+ folder_light: {
309
+ iconPath: './../icons/folder_light.svg',
310
+ },
311
+ 'folder-open_light': {
312
+ iconPath: './../icons/folder-open_light.svg',
313
+ },
314
+ folder_highContrast: {
315
+ iconPath: './../icons/folder_highContrast.svg',
316
+ },
317
+ 'folder-open_highContrast': {
318
+ iconPath: './../icons/folder-open_highContrast.svg',
319
+ },
320
+ 'folder-root': {
321
+ iconPath: './../icons/folder-root.svg',
322
+ },
323
+ 'folder-root-open': {
324
+ iconPath: './../icons/folder-root-open.svg',
325
+ },
326
+ 'folder-root_light': {
327
+ iconPath: './../icons/folder-root_light.svg',
328
+ },
329
+ 'folder-root-open_light': {
330
+ iconPath: './../icons/folder-root-open_light.svg',
331
+ },
332
+ 'folder-root_highContrast': {
333
+ iconPath: './../icons/folder-root_highContrast.svg',
334
+ },
335
+ 'folder-root-open_highContrast': {
336
+ iconPath: './../icons/folder-root-open_highContrast.svg',
337
+ },
338
+ 'folder-src': {
339
+ iconPath: './../icons/folder-src.svg',
340
+ },
341
+ 'folder-src-open': {
342
+ iconPath: './../icons/folder-src-open.svg',
343
+ },
344
+ 'folder-src_light': {
345
+ iconPath: './../icons/folder-src_light.svg',
346
+ },
347
+ 'folder-src-open_light': {
348
+ iconPath: './../icons/folder-src-open_light.svg',
349
+ },
350
+ 'folder-src_highContrast': {
351
+ iconPath: './../icons/folder-src_highContrast.svg',
352
+ },
353
+ 'folder-src-open_highContrast': {
354
+ iconPath: './../icons/folder-src-open_highContrast.svg',
355
+ },
356
+ };
357
+ expectedConfig.folder = 'folder';
358
+ expectedConfig.folderExpanded = 'folder-open';
359
+ expectedConfig.rootFolder = 'folder-root';
360
+ expectedConfig.rootFolderExpanded = 'folder-root-open';
361
+ expectedConfig.folderNames = {
362
+ src: 'folder-src',
363
+ source: 'folder-src',
364
+ };
365
+ expectedConfig.folderNamesExpanded = {
366
+ src: 'folder-src-open',
367
+ source: 'folder-src-open',
368
+ };
369
+ expectedConfig.light = {
370
+ fileExtensions: {},
371
+ fileNames: {},
372
+ folder: 'folder_light',
373
+ folderExpanded: 'folder-open_light',
374
+ rootFolder: 'folder-root_light',
375
+ rootFolderExpanded: 'folder-root-open_light',
376
+ folderNames: {
377
+ src: 'folder-src_light',
378
+ source: 'folder-src_light',
379
+ },
380
+ folderNamesExpanded: {
381
+ src: 'folder-src-open_light',
382
+ source: 'folder-src-open_light',
383
+ },
384
+ };
385
+ expectedConfig.highContrast = {
386
+ fileExtensions: {},
387
+ fileNames: {},
388
+ folder: 'folder_highContrast',
389
+ folderExpanded: 'folder-open_highContrast',
390
+ rootFolder: 'folder-root_highContrast',
391
+ rootFolderExpanded: 'folder-root-open_highContrast',
392
+ folderNames: {
393
+ src: 'folder-src_highContrast',
394
+ source: 'folder-src_highContrast',
395
+ },
396
+ folderNamesExpanded: {
397
+ src: 'folder-src-open_highContrast',
398
+ source: 'folder-src-open_highContrast',
399
+ },
400
+ };
401
+ expectedConfig.hidesExplorerArrows = false;
402
+ /* eslint-enable camelcase */
403
+ assert.deepStrictEqual(iconDefinitions, expectedConfig);
404
+ });
405
+
406
+ it('should hide explorer arrows', () => {
407
+ const options = getDefaultIconOptions();
408
+ options.hidesExplorerArrows = true;
409
+ const iconConfig = merge({}, new IconConfiguration(), { options });
410
+ const iconDefinitions = loadFolderIconDefinitions(
411
+ folderIcons,
412
+ iconConfig,
413
+ options
414
+ );
415
+
416
+ assert.deepStrictEqual(iconDefinitions.hidesExplorerArrows, true);
417
+ });
418
+ });