material-icon-theme 4.18.0 → 4.20.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 (208) 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 +1213 -1171
  15. package/CONTRIBUTING.md +62 -62
  16. package/LICENSE.md +8 -8
  17. package/README.md +208 -208
  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 +4 -4
  22. package/icons/astyle.svg +4 -4
  23. package/icons/auto.svg +10 -0
  24. package/icons/auto_light.svg +10 -0
  25. package/icons/azure.svg +9 -9
  26. package/icons/blitz.svg +4 -4
  27. package/icons/buildkite.svg +8 -8
  28. package/icons/cypress.svg +4 -4
  29. package/icons/dart_generated.svg +9 -9
  30. package/icons/dependabot.svg +4 -4
  31. package/icons/dinophp.svg +16 -16
  32. package/icons/figma.svg +10 -10
  33. package/icons/folder-angular-open.svg +2 -2
  34. package/icons/folder-angular.svg +2 -2
  35. package/icons/folder-buildkite-open.svg +8 -8
  36. package/icons/folder-buildkite.svg +7 -7
  37. package/icons/folder-cypress-open.svg +5 -5
  38. package/icons/folder-cypress.svg +5 -5
  39. package/icons/folder-gitlab-open.svg +2 -1
  40. package/icons/folder-gitlab.svg +2 -1
  41. package/icons/folder-java-open.svg +2 -2
  42. package/icons/folder-java.svg +2 -2
  43. package/icons/folder-next-open.svg +2 -2
  44. package/icons/folder-next.svg +2 -2
  45. package/icons/folder-nuxt-open.svg +2 -2
  46. package/icons/folder-nuxt.svg +2 -2
  47. package/icons/folder-queue-open.svg +2 -2
  48. package/icons/folder-queue.svg +2 -2
  49. package/icons/folder-resolver-open.svg +2 -2
  50. package/icons/folder-resolver.svg +2 -2
  51. package/icons/folder-serverless-open.svg +5 -5
  52. package/icons/folder-serverless.svg +5 -5
  53. package/icons/folder-shader-open.svg +7 -7
  54. package/icons/folder-shader.svg +6 -6
  55. package/icons/folder-target-open.svg +2 -2
  56. package/icons/folder-target.svg +2 -2
  57. package/icons/folder-unity-open.svg +2 -2
  58. package/icons/folder-unity.svg +2 -2
  59. package/icons/folder-vercel-open.svg +4 -4
  60. package/icons/folder-vercel.svg +4 -4
  61. package/icons/folder-verdaccio-open.svg +8 -8
  62. package/icons/folder-verdaccio.svg +8 -8
  63. package/icons/gitlab.svg +1 -1
  64. package/icons/gleam.svg +4 -4
  65. package/icons/gridsome.svg +4 -4
  66. package/icons/hardhat.svg +3 -3
  67. package/icons/lighthouse.svg +2 -2
  68. package/icons/mdsvex.svg +5 -0
  69. package/icons/ndst.svg +7 -7
  70. package/icons/next.svg +3 -3
  71. package/icons/next_light.svg +2 -2
  72. package/icons/nuxt.svg +5 -5
  73. package/icons/odin.svg +6 -6
  74. package/icons/otne.svg +16 -16
  75. package/icons/parcel.svg +4 -4
  76. package/icons/playwright.svg +7 -7
  77. package/icons/plop.svg +4 -4
  78. package/icons/pnpm.svg +9 -9
  79. package/icons/pnpm_light.svg +7 -7
  80. package/icons/poetry.svg +1 -1
  81. package/icons/processing.svg +10 -10
  82. package/icons/remix.svg +4 -4
  83. package/icons/remix_light.svg +4 -4
  84. package/icons/rescript-interface.svg +5 -5
  85. package/icons/rome.svg +5 -5
  86. package/icons/serverless.svg +4 -4
  87. package/icons/shader.svg +4 -4
  88. package/icons/siyuan.svg +9 -9
  89. package/icons/steadybit.svg +1 -1
  90. package/icons/svgr.svg +4 -4
  91. package/icons/tauri.svg +9 -9
  92. package/icons/template.svg +4 -4
  93. package/icons/tobi.svg +4 -4
  94. package/icons/tobimake.svg +14 -14
  95. package/icons/tree.svg +2 -0
  96. package/icons/turborepo.svg +12 -12
  97. package/icons/turborepo_light.svg +12 -12
  98. package/icons/verdaccio.svg +5 -5
  99. package/images/contributors.png +0 -0
  100. package/images/fileIcons.png +0 -0
  101. package/images/folderIcons.png +0 -0
  102. package/logo.svg +21 -21
  103. package/material-colors.yml +257 -257
  104. package/package.json +267 -264
  105. package/package.nls.de.json +35 -35
  106. package/package.nls.es.json +32 -32
  107. package/package.nls.fr.json +32 -32
  108. package/package.nls.ja.json +35 -35
  109. package/package.nls.json +35 -35
  110. package/package.nls.nl.json +35 -35
  111. package/package.nls.pl.json +35 -35
  112. package/package.nls.pt-BR.json +32 -32
  113. package/package.nls.pt-PT.json +32 -32
  114. package/package.nls.ru.json +32 -32
  115. package/package.nls.zh-CN.json +32 -32
  116. package/package.nls.zh-TW.json +32 -32
  117. package/src/commands/activate.ts +26 -26
  118. package/src/commands/explorerArrows.ts +55 -55
  119. package/src/commands/folderColor.ts +96 -96
  120. package/src/commands/folders.ts +55 -55
  121. package/src/commands/grayscale.ts +55 -55
  122. package/src/commands/iconPacks.ts +68 -68
  123. package/src/commands/index.ts +30 -30
  124. package/src/commands/opacity.ts +46 -46
  125. package/src/commands/restoreConfig.ts +14 -14
  126. package/src/commands/saturation.ts +46 -46
  127. package/src/extension.ts +42 -42
  128. package/src/helpers/changeDetection.ts +109 -73
  129. package/src/helpers/customIcons.ts +8 -8
  130. package/src/helpers/fileConfig.ts +37 -37
  131. package/src/helpers/index.ts +100 -100
  132. package/src/helpers/objects.ts +58 -58
  133. package/src/helpers/types.ts +7 -7
  134. package/src/helpers/versioning.ts +73 -73
  135. package/src/i18n/index.ts +78 -78
  136. package/src/i18n/lang-de.ts +54 -54
  137. package/src/i18n/lang-en.ts +53 -53
  138. package/src/i18n/lang-es.ts +53 -53
  139. package/src/i18n/lang-fr.ts +53 -53
  140. package/src/i18n/lang-ja.ts +54 -54
  141. package/src/i18n/lang-nl.ts +54 -54
  142. package/src/i18n/lang-pl.ts +52 -52
  143. package/src/i18n/lang-pt-br.ts +53 -53
  144. package/src/i18n/lang-pt-pt.ts +53 -53
  145. package/src/i18n/lang-ru.ts +52 -52
  146. package/src/i18n/lang-uk.ts +54 -54
  147. package/src/i18n/lang-zh-cn.ts +52 -52
  148. package/src/i18n/lang-zh-tw.ts +52 -52
  149. package/src/icons/fileIcons.ts +2095 -2046
  150. package/src/icons/folderIcons.ts +781 -773
  151. package/src/icons/generator/constants.ts +29 -29
  152. package/src/icons/generator/fileGenerator.ts +216 -216
  153. package/src/icons/generator/folderGenerator.ts +340 -340
  154. package/src/icons/generator/iconOpacity.ts +111 -111
  155. package/src/icons/generator/iconSaturation.ts +140 -140
  156. package/src/icons/generator/index.ts +7 -7
  157. package/src/icons/generator/jsonGenerator.ts +187 -187
  158. package/src/icons/generator/languageGenerator.ts +127 -127
  159. package/src/icons/index.ts +4 -4
  160. package/src/icons/languageIcons.ts +137 -136
  161. package/src/messages/outdated.ts +33 -33
  162. package/src/messages/reload.ts +32 -32
  163. package/src/messages/start.ts +12 -12
  164. package/src/messages/update.ts +48 -48
  165. package/src/messages/welcome.ts +47 -47
  166. package/src/models/helpers/index.ts +1 -1
  167. package/src/models/helpers/themeStatus.ts +5 -5
  168. package/src/models/i18n/index.ts +1 -1
  169. package/src/models/i18n/translation.ts +50 -50
  170. package/src/models/iconConfiguration.ts +37 -37
  171. package/src/models/icons/defaultIcon.ts +16 -16
  172. package/src/models/icons/files/fileIcon.ts +49 -49
  173. package/src/models/icons/files/fileTypes.ts +14 -14
  174. package/src/models/icons/files/index.ts +2 -2
  175. package/src/models/icons/folders/folderIcon.ts +34 -34
  176. package/src/models/icons/folders/folderTheme.ts +23 -23
  177. package/src/models/icons/folders/index.ts +2 -2
  178. package/src/models/icons/iconJsonOptions.ts +23 -23
  179. package/src/models/icons/iconPack.ts +12 -12
  180. package/src/models/icons/index.ts +6 -6
  181. package/src/models/icons/languages/index.ts +1 -1
  182. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  183. package/src/models/index.ts +4 -4
  184. package/src/models/scripts/contributors/contributor.ts +22 -22
  185. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  186. package/src/scripts/contributors/contributors.css +24 -24
  187. package/src/scripts/contributors/index.ts +138 -138
  188. package/src/scripts/helpers/painter.ts +5 -5
  189. package/src/scripts/helpers/screenshots.ts +32 -32
  190. package/src/scripts/helpers/similarity.ts +47 -47
  191. package/src/scripts/helpers/titleCase.ts +7 -7
  192. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  193. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  194. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  195. package/src/scripts/icons/checks/index.ts +7 -7
  196. package/src/scripts/icons/generateJson.ts +11 -11
  197. package/src/scripts/preview/index.ts +40 -40
  198. package/src/scripts/preview/preview.ts +165 -165
  199. package/src/scripts/preview/style.css +48 -48
  200. package/src/test/runTest.ts +26 -26
  201. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  202. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  203. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  204. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  205. package/src/test/spec/index.ts +36 -36
  206. package/src/web/extension.ts +10 -10
  207. package/svgo.config.js +11 -11
  208. package/tsconfig.json +23 -23
@@ -1,40 +1,40 @@
1
- import { fileIcons } from './../../icons/fileIcons';
2
- import { folderIcons } from './../../icons/folderIcons';
3
- import { languageIcons } from './../../icons/languageIcons';
4
- import { generatePreview } from './preview';
5
-
6
- const filterDuplicates = (icons: string[]) => {
7
- return [...new Set(icons)];
8
- };
9
-
10
- const basicFileIcons = filterDuplicates(
11
- fileIcons.icons
12
- .map((i) => i.name)
13
- // merge language icons
14
- .concat(languageIcons.map((i) => i.icon.name))
15
- ).map((i) => ({ iconName: i, label: i }));
16
-
17
- const folderThemes = filterDuplicates(
18
- folderIcons
19
- .map((theme) => {
20
- const folders = [];
21
- if (theme.icons && theme.icons.length > 0) {
22
- folders.push(...theme.icons.map((i) => i.name));
23
- }
24
- return [...folders];
25
- })
26
- .reduce((a, b) => a.concat(b))
27
- ).map((i) => ({ iconName: i, label: i.replace('folder-', '') }));
28
-
29
- generatePreview('fileIcons', basicFileIcons, 5, [
30
- 'virtual',
31
- 'powerpoint',
32
- 'word',
33
- 'credits',
34
- ]);
35
- generatePreview('folderIcons', folderThemes, 5, [
36
- 'folder-aurelia',
37
- 'folder-phpmailer',
38
- 'folder-syntax',
39
- 'folder-ansible',
40
- ]);
1
+ import { fileIcons } from './../../icons/fileIcons';
2
+ import { folderIcons } from './../../icons/folderIcons';
3
+ import { languageIcons } from './../../icons/languageIcons';
4
+ import { generatePreview } from './preview';
5
+
6
+ const filterDuplicates = (icons: string[]) => {
7
+ return [...new Set(icons)];
8
+ };
9
+
10
+ const basicFileIcons = filterDuplicates(
11
+ fileIcons.icons
12
+ .map((i) => i.name)
13
+ // merge language icons
14
+ .concat(languageIcons.map((i) => i.icon.name))
15
+ ).map((i) => ({ iconName: i, label: i }));
16
+
17
+ const folderThemes = filterDuplicates(
18
+ folderIcons
19
+ .map((theme) => {
20
+ const folders = [];
21
+ if (theme.icons && theme.icons.length > 0) {
22
+ folders.push(...theme.icons.map((i) => i.name));
23
+ }
24
+ return [...folders];
25
+ })
26
+ .reduce((a, b) => a.concat(b))
27
+ ).map((i) => ({ iconName: i, label: i.replace('folder-', '') }));
28
+
29
+ generatePreview('fileIcons', basicFileIcons, 5, [
30
+ 'virtual',
31
+ 'powerpoint',
32
+ 'word',
33
+ 'credits',
34
+ ]);
35
+ generatePreview('folderIcons', folderThemes, 5, [
36
+ 'folder-aurelia',
37
+ 'folder-phpmailer',
38
+ 'folder-syntax',
39
+ 'folder-ansible',
40
+ ]);
@@ -1,165 +1,165 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { createScreenshot } from '../helpers/screenshots';
4
- import * as painter from './../helpers/painter';
5
- import { toTitleCase } from './../helpers/titleCase';
6
-
7
- const htmlDoctype = '<!DOCTYPE html>';
8
- const cssFilePath = path.join('style.css');
9
- const styling = `<link rel="stylesheet" href="${cssFilePath}">`;
10
-
11
- const createHTMLTableHeadRow = (amount: number) => {
12
- const pair = `
13
- <th class="icon">Icon</th>
14
- <th class="iconName">Name</th>
15
- `;
16
- const columns = [...Array(amount)].map(() => pair).join('');
17
- return `
18
- <tr>
19
- ${columns}
20
- </tr>
21
- `;
22
- };
23
-
24
- const createHTMLTableBodyRows = (items: IconDefinition[][]) => {
25
- let rows = '';
26
- items.forEach((row) => {
27
- const columns = row
28
- .map(
29
- (icon) => `
30
- <td class="icon">
31
- <img src="./../../../icons/${icon.iconName}.svg" alt="${
32
- icon.label
33
- }">
34
- </td>
35
- <td class="iconName">${toTitleCase(icon.label)}</td>
36
- `
37
- )
38
- .join('');
39
- const tableRow = `
40
- <tr>
41
- ${columns}
42
- </tr>
43
- `;
44
- rows = rows + tableRow;
45
- });
46
- return rows;
47
- };
48
-
49
- const createHTMLTable = (headRow: string, bodyRows: string) => `
50
- <table>
51
- ${headRow}
52
- ${bodyRows}
53
- </table>
54
- `;
55
-
56
- const createPreviewTable = (icons: IconDefinition[][], size: number) => {
57
- const table =
58
- htmlDoctype +
59
- styling +
60
- createHTMLTable(
61
- createHTMLTableHeadRow(size),
62
- createHTMLTableBodyRows(icons)
63
- );
64
- return table;
65
- };
66
-
67
- const savePreview = (
68
- fileName: string,
69
- size: number,
70
- icons: IconDefinition[][]
71
- ) => {
72
- const filePath = path.join(__dirname, fileName + '.html');
73
-
74
- // write the html file with the icon table
75
- fs.writeFileSync(filePath, createPreviewTable(icons, size));
76
-
77
- // create the image
78
- createScreenshot(filePath, fileName)
79
- .then(() => {
80
- console.log(
81
- '> Material Icon Theme:',
82
- painter.green(`Successfully created ${fileName} preview image!`)
83
- );
84
- })
85
- .catch(() => {
86
- throw Error(
87
- painter.red(`Error while creating ${fileName} preview image`)
88
- );
89
- });
90
- };
91
-
92
- const getIconDefinitionsMatrix = (
93
- icons: IconDefinition[],
94
- size: number,
95
- excluded: string[] = []
96
- ): IconDefinition[][] => {
97
- const iconList = icons.sort((a, b) => a.label.localeCompare(b.label));
98
- trimIconListToSize(iconList, size, excluded);
99
-
100
- // list for the columns with the icons
101
- const matrix: IconDefinition[][] = [];
102
-
103
- // calculate the amount of icons per column
104
- const itemsPerColumn = Math.floor(iconList.length / size);
105
-
106
- // create the columns with the icons
107
- let counter = 0;
108
- for (let c = 0; c < itemsPerColumn; c++) {
109
- matrix[c] = [];
110
- }
111
- for (let s = 0; s < size; s++) {
112
- for (let i = 0; i < itemsPerColumn; i++) {
113
- matrix[i][s] = iconList[counter];
114
- counter++;
115
- }
116
- }
117
-
118
- return matrix;
119
- };
120
-
121
- /**
122
- * Function that generates the preview image for specific icons.
123
- * @param name name of the preview
124
- * @param icons icons for the preview
125
- * @param size amount of table columns
126
- * @param trimmableIcons List of icons that can possibly be trimmed
127
- */
128
- export const generatePreview = (
129
- name: string,
130
- icons: IconDefinition[],
131
- size: number,
132
- trimmableIcons: string[] = []
133
- ) => {
134
- savePreview(
135
- name,
136
- size,
137
- getIconDefinitionsMatrix(icons, size, trimmableIcons)
138
- );
139
- };
140
-
141
- interface IconDefinition {
142
- iconName: string;
143
- label: string;
144
- }
145
-
146
- /**
147
- * Trim the list of icons into the matrix
148
- * @param iconList List of icons
149
- * @param size Amount of columns
150
- * @param trimmableIcons List of icons that can possibly be trimmed
151
- */
152
- const trimIconListToSize = (
153
- iconList: IconDefinition[],
154
- size: number,
155
- trimmableIcons: string[]
156
- ) => {
157
- while (iconList.length % size !== 0) {
158
- iconList.splice(
159
- iconList.findIndex(
160
- (i) => i.iconName === trimmableIcons[iconList.length % size]
161
- ),
162
- 1
163
- );
164
- }
165
- };
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { createScreenshot } from '../helpers/screenshots';
4
+ import * as painter from './../helpers/painter';
5
+ import { toTitleCase } from './../helpers/titleCase';
6
+
7
+ const htmlDoctype = '<!DOCTYPE html>';
8
+ const cssFilePath = path.join('style.css');
9
+ const styling = `<link rel="stylesheet" href="${cssFilePath}">`;
10
+
11
+ const createHTMLTableHeadRow = (amount: number) => {
12
+ const pair = `
13
+ <th class="icon">Icon</th>
14
+ <th class="iconName">Name</th>
15
+ `;
16
+ const columns = [...Array(amount)].map(() => pair).join('');
17
+ return `
18
+ <tr>
19
+ ${columns}
20
+ </tr>
21
+ `;
22
+ };
23
+
24
+ const createHTMLTableBodyRows = (items: IconDefinition[][]) => {
25
+ let rows = '';
26
+ items.forEach((row) => {
27
+ const columns = row
28
+ .map(
29
+ (icon) => `
30
+ <td class="icon">
31
+ <img src="./../../../icons/${icon.iconName}.svg" alt="${
32
+ icon.label
33
+ }">
34
+ </td>
35
+ <td class="iconName">${toTitleCase(icon.label)}</td>
36
+ `
37
+ )
38
+ .join('');
39
+ const tableRow = `
40
+ <tr>
41
+ ${columns}
42
+ </tr>
43
+ `;
44
+ rows = rows + tableRow;
45
+ });
46
+ return rows;
47
+ };
48
+
49
+ const createHTMLTable = (headRow: string, bodyRows: string) => `
50
+ <table>
51
+ ${headRow}
52
+ ${bodyRows}
53
+ </table>
54
+ `;
55
+
56
+ const createPreviewTable = (icons: IconDefinition[][], size: number) => {
57
+ const table =
58
+ htmlDoctype +
59
+ styling +
60
+ createHTMLTable(
61
+ createHTMLTableHeadRow(size),
62
+ createHTMLTableBodyRows(icons)
63
+ );
64
+ return table;
65
+ };
66
+
67
+ const savePreview = (
68
+ fileName: string,
69
+ size: number,
70
+ icons: IconDefinition[][]
71
+ ) => {
72
+ const filePath = path.join(__dirname, fileName + '.html');
73
+
74
+ // write the html file with the icon table
75
+ fs.writeFileSync(filePath, createPreviewTable(icons, size));
76
+
77
+ // create the image
78
+ createScreenshot(filePath, fileName)
79
+ .then(() => {
80
+ console.log(
81
+ '> Material Icon Theme:',
82
+ painter.green(`Successfully created ${fileName} preview image!`)
83
+ );
84
+ })
85
+ .catch(() => {
86
+ throw Error(
87
+ painter.red(`Error while creating ${fileName} preview image`)
88
+ );
89
+ });
90
+ };
91
+
92
+ const getIconDefinitionsMatrix = (
93
+ icons: IconDefinition[],
94
+ size: number,
95
+ excluded: string[] = []
96
+ ): IconDefinition[][] => {
97
+ const iconList = icons.sort((a, b) => a.label.localeCompare(b.label));
98
+ trimIconListToSize(iconList, size, excluded);
99
+
100
+ // list for the columns with the icons
101
+ const matrix: IconDefinition[][] = [];
102
+
103
+ // calculate the amount of icons per column
104
+ const itemsPerColumn = Math.floor(iconList.length / size);
105
+
106
+ // create the columns with the icons
107
+ let counter = 0;
108
+ for (let c = 0; c < itemsPerColumn; c++) {
109
+ matrix[c] = [];
110
+ }
111
+ for (let s = 0; s < size; s++) {
112
+ for (let i = 0; i < itemsPerColumn; i++) {
113
+ matrix[i][s] = iconList[counter];
114
+ counter++;
115
+ }
116
+ }
117
+
118
+ return matrix;
119
+ };
120
+
121
+ /**
122
+ * Function that generates the preview image for specific icons.
123
+ * @param name name of the preview
124
+ * @param icons icons for the preview
125
+ * @param size amount of table columns
126
+ * @param trimmableIcons List of icons that can possibly be trimmed
127
+ */
128
+ export const generatePreview = (
129
+ name: string,
130
+ icons: IconDefinition[],
131
+ size: number,
132
+ trimmableIcons: string[] = []
133
+ ) => {
134
+ savePreview(
135
+ name,
136
+ size,
137
+ getIconDefinitionsMatrix(icons, size, trimmableIcons)
138
+ );
139
+ };
140
+
141
+ interface IconDefinition {
142
+ iconName: string;
143
+ label: string;
144
+ }
145
+
146
+ /**
147
+ * Trim the list of icons into the matrix
148
+ * @param iconList List of icons
149
+ * @param size Amount of columns
150
+ * @param trimmableIcons List of icons that can possibly be trimmed
151
+ */
152
+ const trimIconListToSize = (
153
+ iconList: IconDefinition[],
154
+ size: number,
155
+ trimmableIcons: string[]
156
+ ) => {
157
+ while (iconList.length % size !== 0) {
158
+ iconList.splice(
159
+ iconList.findIndex(
160
+ (i) => i.iconName === trimmableIcons[iconList.length % size]
161
+ ),
162
+ 1
163
+ );
164
+ }
165
+ };
@@ -1,48 +1,48 @@
1
- :root {
2
- --main-bg-color: #1e1e1e;
3
- }
4
-
5
- body {
6
- margin: 0;
7
- padding: 0;
8
- }
9
-
10
- table {
11
- font-family: arial, sans-serif;
12
- border-collapse: collapse;
13
- width: 100%;
14
- background: var(--main-bg-color);
15
- color: rgb(250, 250, 250);
16
- font-size: 1rem;
17
- }
18
-
19
- td,
20
- th {
21
- border: 0px solid #dddddd;
22
- text-align: left;
23
- padding: 8px;
24
- }
25
-
26
- tr:last-child {
27
- border-bottom: 0.5rem solid var(--main-bg-color);
28
- }
29
-
30
- tr:first-child {
31
- border-top: 0.5rem solid var(--main-bg-color);
32
- border-bottom: 0.5rem solid var(--main-bg-color);
33
- }
34
-
35
- .icon {
36
- width: 2rem;
37
- text-align: center;
38
- padding: 0.5rem 1rem 0.5rem 1rem;
39
- }
40
-
41
- .iconName {
42
- min-width: 9rem;
43
- }
44
-
45
- img {
46
- width: 30px;
47
- height: auto;
48
- }
1
+ :root {
2
+ --main-bg-color: #1e1e1e;
3
+ }
4
+
5
+ body {
6
+ margin: 0;
7
+ padding: 0;
8
+ }
9
+
10
+ table {
11
+ font-family: arial, sans-serif;
12
+ border-collapse: collapse;
13
+ width: 100%;
14
+ background: var(--main-bg-color);
15
+ color: rgb(250, 250, 250);
16
+ font-size: 1rem;
17
+ }
18
+
19
+ td,
20
+ th {
21
+ border: 0px solid #dddddd;
22
+ text-align: left;
23
+ padding: 8px;
24
+ }
25
+
26
+ tr:last-child {
27
+ border-bottom: 0.5rem solid var(--main-bg-color);
28
+ }
29
+
30
+ tr:first-child {
31
+ border-top: 0.5rem solid var(--main-bg-color);
32
+ border-bottom: 0.5rem solid var(--main-bg-color);
33
+ }
34
+
35
+ .icon {
36
+ width: 2rem;
37
+ text-align: center;
38
+ padding: 0.5rem 1rem 0.5rem 1rem;
39
+ }
40
+
41
+ .iconName {
42
+ min-width: 9rem;
43
+ }
44
+
45
+ img {
46
+ width: 30px;
47
+ height: auto;
48
+ }
@@ -1,26 +1,26 @@
1
- import * as path from 'path';
2
- import { runTests } from 'vscode-test';
3
-
4
- const main = async () => {
5
- try {
6
- // The folder containing the Extension Manifest package.json
7
- // Passed to `--extensionDevelopmentPath`
8
- const extensionDevelopmentPath = path.resolve(__dirname, '../../');
9
-
10
- // The path to the extension test script
11
- // Passed to --extensionTestsPath
12
- const extensionTestsPath = path.resolve(__dirname, './spec/index');
13
-
14
- // Download VS Code, unzip it and run the integration test
15
- await runTests({
16
- extensionDevelopmentPath,
17
- extensionTestsPath,
18
- launchArgs: ['--disable-gpu', '--disable-workspace-trust'],
19
- });
20
- } catch (err) {
21
- console.error('Failed to run tests');
22
- process.exit(1);
23
- }
24
- };
25
-
26
- main();
1
+ import * as path from 'path';
2
+ import { runTests } from 'vscode-test';
3
+
4
+ const main = async () => {
5
+ try {
6
+ // The folder containing the Extension Manifest package.json
7
+ // Passed to `--extensionDevelopmentPath`
8
+ const extensionDevelopmentPath = path.resolve(__dirname, '../../');
9
+
10
+ // The path to the extension test script
11
+ // Passed to --extensionTestsPath
12
+ const extensionTestsPath = path.resolve(__dirname, './spec/index');
13
+
14
+ // Download VS Code, unzip it and run the integration test
15
+ await runTests({
16
+ extensionDevelopmentPath,
17
+ extensionTestsPath,
18
+ launchArgs: ['--disable-gpu', '--disable-workspace-trust'],
19
+ });
20
+ } catch (err) {
21
+ console.error('Failed to run tests');
22
+ process.exit(1);
23
+ }
24
+ };
25
+
26
+ main();
@@ -1,61 +1,61 @@
1
- import * as assert from 'assert';
2
- import { getObjectPropertyValue } from '../../../helpers/objects';
3
- import * as i18n from '../../../i18n';
4
- import { Translation } from '../../../models';
5
-
6
- describe('i18n', () => {
7
- it('should initialize translations', () => {
8
- return i18n.initTranslations();
9
- });
10
-
11
- it('should translate key', () => {
12
- assert.equal(
13
- i18n.getTranslationValue('activate', { activate: 'b' } as Translation),
14
- 'b'
15
- );
16
- });
17
-
18
- it('should return undefined if translation is not defined', () => {
19
- assert.equal(
20
- i18n.getTranslationValue(
21
- 'activate',
22
- {} as Translation,
23
- {} as Translation
24
- ),
25
- undefined
26
- );
27
- });
28
-
29
- it('should use fallback if translation is not defined', () => {
30
- assert.equal(
31
- i18n.getTranslationValue(
32
- 'activate',
33
- {} as Translation,
34
- { activate: 'fb' } as Translation
35
- ),
36
- 'fb'
37
- );
38
- });
39
-
40
- it('should get the correct translation value of the translation object', () => {
41
- const translation = {
42
- a: {
43
- b: {
44
- c: 'c',
45
- },
46
- },
47
- };
48
- assert.equal(getObjectPropertyValue(translation, 'a.b.c'), 'c');
49
- });
50
-
51
- it('should use placeholder in translation', () => {
52
- assert.equal(
53
- i18n.replace('%0 with placeholder', 'test'),
54
- 'test with placeholder'
55
- );
56
- assert.equal(
57
- i18n.replace('%0 with %1', 'test', 'placeholder'),
58
- 'test with placeholder'
59
- );
60
- });
61
- });
1
+ import * as assert from 'assert';
2
+ import { getObjectPropertyValue } from '../../../helpers/objects';
3
+ import * as i18n from '../../../i18n';
4
+ import { Translation } from '../../../models';
5
+
6
+ describe('i18n', () => {
7
+ it('should initialize translations', () => {
8
+ return i18n.initTranslations();
9
+ });
10
+
11
+ it('should translate key', () => {
12
+ assert.equal(
13
+ i18n.getTranslationValue('activate', { activate: 'b' } as Translation),
14
+ 'b'
15
+ );
16
+ });
17
+
18
+ it('should return undefined if translation is not defined', () => {
19
+ assert.equal(
20
+ i18n.getTranslationValue(
21
+ 'activate',
22
+ {} as Translation,
23
+ {} as Translation
24
+ ),
25
+ undefined
26
+ );
27
+ });
28
+
29
+ it('should use fallback if translation is not defined', () => {
30
+ assert.equal(
31
+ i18n.getTranslationValue(
32
+ 'activate',
33
+ {} as Translation,
34
+ { activate: 'fb' } as Translation
35
+ ),
36
+ 'fb'
37
+ );
38
+ });
39
+
40
+ it('should get the correct translation value of the translation object', () => {
41
+ const translation = {
42
+ a: {
43
+ b: {
44
+ c: 'c',
45
+ },
46
+ },
47
+ };
48
+ assert.equal(getObjectPropertyValue(translation, 'a.b.c'), 'c');
49
+ });
50
+
51
+ it('should use placeholder in translation', () => {
52
+ assert.equal(
53
+ i18n.replace('%0 with placeholder', 'test'),
54
+ 'test with placeholder'
55
+ );
56
+ assert.equal(
57
+ i18n.replace('%0 with %1', 'test', 'placeholder'),
58
+ 'test with placeholder'
59
+ );
60
+ });
61
+ });