@stats-organization/github-readme-stats-core 2.1.4 → 2.2.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 (182) hide show
  1. package/build/api/gist.d.ts +2 -7
  2. package/build/api/gist.d.ts.map +1 -1
  3. package/build/api/gist.js +28 -26
  4. package/build/api/index.d.ts +3 -8
  5. package/build/api/index.d.ts.map +1 -1
  6. package/build/api/index.js +32 -36
  7. package/build/api/pin.d.ts +2 -7
  8. package/build/api/pin.d.ts.map +1 -1
  9. package/build/api/pin.js +18 -33
  10. package/build/api/top-langs.d.ts +2 -7
  11. package/build/api/top-langs.d.ts.map +1 -1
  12. package/build/api/top-langs.js +32 -44
  13. package/build/api/wakatime.d.ts +2 -7
  14. package/build/api/wakatime.d.ts.map +1 -1
  15. package/build/api/wakatime.js +28 -26
  16. package/build/calculateRank.d.ts +12 -11
  17. package/build/calculateRank.d.ts.map +1 -1
  18. package/build/calculateRank.js +18 -18
  19. package/build/cards/common-options.d.ts +13 -0
  20. package/build/cards/common-options.d.ts.map +1 -0
  21. package/build/cards/common-options.js +1 -0
  22. package/build/cards/gist.d.ts +11 -16
  23. package/build/cards/gist.d.ts.map +1 -1
  24. package/build/cards/gist.js +26 -31
  25. package/build/cards/repo.d.ts +19 -16
  26. package/build/cards/repo.d.ts.map +1 -1
  27. package/build/cards/repo.js +79 -72
  28. package/build/cards/stats.d.ts +29 -44
  29. package/build/cards/stats.d.ts.map +1 -1
  30. package/build/cards/stats.js +118 -173
  31. package/build/cards/top-languages.d.ts +81 -77
  32. package/build/cards/top-languages.d.ts.map +1 -1
  33. package/build/cards/top-languages.js +186 -184
  34. package/build/cards/wakatime.d.ts +21 -11
  35. package/build/cards/wakatime.d.ts.map +1 -1
  36. package/build/cards/wakatime.js +92 -109
  37. package/build/common/Card.d.ts +41 -14
  38. package/build/common/Card.d.ts.map +1 -1
  39. package/build/common/Card.js +92 -31
  40. package/build/common/I18n.d.ts +4 -2
  41. package/build/common/I18n.d.ts.map +1 -1
  42. package/build/common/color.d.ts +91 -15
  43. package/build/common/color.d.ts.map +1 -1
  44. package/build/common/color.js +163 -17
  45. package/build/common/config.d.ts +2 -1
  46. package/build/common/config.d.ts.map +1 -1
  47. package/build/common/config.js +16 -26
  48. package/build/common/constants.d.ts +2 -1
  49. package/build/common/constants.d.ts.map +1 -1
  50. package/build/common/date.d.ts +37 -0
  51. package/build/common/date.d.ts.map +1 -0
  52. package/build/common/date.js +31 -0
  53. package/build/common/html.js +1 -1
  54. package/build/common/http.d.ts +37 -5
  55. package/build/common/http.d.ts.map +1 -1
  56. package/build/common/http.js +29 -6
  57. package/build/common/icons.d.ts +1 -0
  58. package/build/common/icons.d.ts.map +1 -1
  59. package/build/common/icons.js +1 -0
  60. package/build/common/languageColors.d.ts +11 -0
  61. package/build/common/languageColors.d.ts.map +1 -0
  62. package/build/common/languageColors.js +15 -0
  63. package/build/common/languageColors.json +10 -1
  64. package/build/common/ops.d.ts +27 -33
  65. package/build/common/ops.d.ts.map +1 -1
  66. package/build/common/ops.js +31 -48
  67. package/build/common/render.d.ts +154 -113
  68. package/build/common/render.d.ts.map +1 -1
  69. package/build/common/render.js +209 -92
  70. package/build/common/retryer.d.ts +15 -6
  71. package/build/common/retryer.d.ts.map +1 -1
  72. package/build/common/retryer.js +2 -0
  73. package/build/fetchers/gist.d.ts +6 -21
  74. package/build/fetchers/gist.d.ts.map +1 -1
  75. package/build/fetchers/gist.js +28 -64
  76. package/build/fetchers/repo.d.ts +12 -11
  77. package/build/fetchers/repo.d.ts.map +1 -1
  78. package/build/fetchers/repo.js +27 -68
  79. package/build/fetchers/stats.d.ts +24 -17
  80. package/build/fetchers/stats.d.ts.map +1 -1
  81. package/build/fetchers/stats.js +302 -184
  82. package/build/fetchers/top-languages.d.ts +10 -15
  83. package/build/fetchers/top-languages.d.ts.map +1 -1
  84. package/build/fetchers/top-languages.js +52 -103
  85. package/build/fetchers/types.d.ts +130 -0
  86. package/build/fetchers/types.d.ts.map +1 -0
  87. package/build/fetchers/types.js +1 -0
  88. package/build/fetchers/wakatime.d.ts +9 -5
  89. package/build/fetchers/wakatime.d.ts.map +1 -1
  90. package/build/fetchers/wakatime.js +8 -4
  91. package/build/graphql/contributionsDocument.d.ts +18 -0
  92. package/build/graphql/contributionsDocument.d.ts.map +1 -0
  93. package/build/graphql/contributionsDocument.js +30 -0
  94. package/build/graphql/generated/common.d.ts +42 -0
  95. package/build/graphql/generated/common.d.ts.map +1 -0
  96. package/build/graphql/generated/common.js +2 -0
  97. package/build/graphql/generated/gist.d.ts +44 -0
  98. package/build/graphql/generated/gist.d.ts.map +1 -0
  99. package/build/graphql/generated/gist.js +27 -0
  100. package/build/graphql/generated/repo.d.ts +67 -0
  101. package/build/graphql/generated/repo.d.ts.map +1 -0
  102. package/build/graphql/generated/repo.js +30 -0
  103. package/build/graphql/generated/stats.d.ts +150 -0
  104. package/build/graphql/generated/stats.d.ts.map +1 -0
  105. package/build/graphql/generated/stats.js +95 -0
  106. package/build/graphql/generated/top-languages.d.ts +54 -0
  107. package/build/graphql/generated/top-languages.d.ts.map +1 -0
  108. package/build/graphql/generated/top-languages.js +27 -0
  109. package/build/graphql/graphqlDocument.d.ts +22 -0
  110. package/build/graphql/graphqlDocument.d.ts.map +1 -0
  111. package/build/graphql/graphqlDocument.js +8 -0
  112. package/build/graphql/reposContributedToDocument.d.ts +27 -0
  113. package/build/graphql/reposContributedToDocument.d.ts.map +1 -0
  114. package/build/graphql/reposContributedToDocument.js +59 -0
  115. package/build/index.d.ts +3 -1
  116. package/build/index.d.ts.map +1 -1
  117. package/build/index.js +2 -1
  118. package/build/themes/index.d.ts +32 -0
  119. package/build/themes/index.d.ts.map +1 -1
  120. package/build/themes/index.js +28 -0
  121. package/build/translations.d.ts +17 -0
  122. package/build/translations.d.ts.map +1 -1
  123. package/build/translations.js +17 -0
  124. package/package.json +14 -8
  125. package/src/_emoji-name-map.d.ts +10 -0
  126. package/src/_github-username-regex.d.ts +4 -0
  127. package/src/api/gist.js +31 -31
  128. package/src/api/index.js +40 -42
  129. package/src/api/pin.js +20 -38
  130. package/src/api/top-langs.js +36 -49
  131. package/src/api/wakatime.js +31 -31
  132. package/src/{calculateRank.js → calculateRank.ts} +29 -19
  133. package/src/cards/common-options.ts +13 -0
  134. package/src/cards/{gist.js → gist.ts} +37 -37
  135. package/src/cards/{repo.js → repo.ts} +107 -79
  136. package/src/cards/{stats.js → stats.ts} +173 -210
  137. package/src/cards/{top-languages.js → top-languages.ts} +325 -243
  138. package/src/cards/{wakatime.js → wakatime.ts} +158 -127
  139. package/src/common/Card.ts +123 -43
  140. package/src/common/I18n.ts +6 -2
  141. package/src/common/color.ts +240 -28
  142. package/src/common/config.ts +22 -29
  143. package/src/common/constants.ts +3 -1
  144. package/src/common/date.ts +45 -0
  145. package/src/common/html.ts +1 -1
  146. package/src/common/http.ts +71 -0
  147. package/src/common/icons.ts +1 -0
  148. package/src/common/languageColors.json +10 -1
  149. package/src/common/languageColors.ts +19 -0
  150. package/src/common/ops.ts +158 -0
  151. package/src/common/render.ts +652 -0
  152. package/src/common/retryer.ts +21 -12
  153. package/src/fetchers/gist.ts +79 -0
  154. package/src/fetchers/repo.ts +114 -0
  155. package/src/fetchers/stats.ts +743 -0
  156. package/src/fetchers/top-languages.ts +135 -0
  157. package/src/fetchers/{types.d.ts → types.ts} +28 -20
  158. package/src/fetchers/{wakatime.js → wakatime.ts} +19 -5
  159. package/src/graphql/contributionsDocument.ts +44 -0
  160. package/src/graphql/generated/common.ts +26 -0
  161. package/src/graphql/generated/gist.ts +59 -0
  162. package/src/graphql/generated/repo.ts +90 -0
  163. package/src/graphql/generated/stats.ts +194 -0
  164. package/src/graphql/generated/top-languages.ts +75 -0
  165. package/src/graphql/graphqlDocument.ts +25 -0
  166. package/src/graphql/queries/gist.graphql +25 -0
  167. package/src/graphql/queries/repo.graphql +28 -0
  168. package/src/graphql/queries/stats.graphql +120 -0
  169. package/src/graphql/queries/top-languages.graphql +34 -0
  170. package/src/graphql/reposContributedToDocument.ts +86 -0
  171. package/src/index.ts +3 -1
  172. package/src/themes/index.ts +33 -0
  173. package/src/translations.ts +17 -0
  174. package/src/cards/types.d.ts +0 -78
  175. package/src/common/http.js +0 -19
  176. package/src/common/ops.js +0 -170
  177. package/src/common/render.js +0 -440
  178. package/src/fetchers/gist.js +0 -112
  179. package/src/fetchers/repo.js +0 -161
  180. package/src/fetchers/stats.js +0 -474
  181. package/src/fetchers/top-languages.js +0 -175
  182. package/src/themes/README.md +0 -229
@@ -1,6 +1,6 @@
1
1
  import { Card } from "../common/Card.js";
2
2
  import { I18n } from "../common/I18n.js";
3
- import { getCardColors } from "../common/color.js";
3
+ import { getLightDarkColors } from "../common/color.js";
4
4
  import { kFormatter, wrapTextMultiline } from "../common/fmt.js";
5
5
  import { encodeHTML } from "../common/html.js";
6
6
  import { icons } from "../common/icons.js";
@@ -8,15 +8,17 @@ import { buildSearchFilter, clampValue, parseEmojis } from "../common/ops.js";
8
8
  import {
9
9
  countWrappedLines,
10
10
  createLanguageNode,
11
+ createTextNode,
11
12
  flexLayout,
12
13
  iconWithLabel,
13
14
  measureText,
14
15
  wrappedTextNode,
15
16
  wrappedTextStyles,
16
17
  } from "../common/render.js";
18
+ import type { RepositoryData } from "../fetchers/types.js";
17
19
  import { repoCardLocales } from "../translations.js";
18
20
 
19
- import { createTextNode } from "./stats.js";
21
+ import type { CommonOptions } from "./common-options.js";
20
22
 
21
23
  const ICON_SIZE = 16;
22
24
  const CARD_DEFAULT_WIDTH = 400;
@@ -25,41 +27,66 @@ const DESCRIPTION_FONT_SIZE = 13;
25
27
  const DESCRIPTION_LINE_HEIGHT_PX = 16;
26
28
  const DESCRIPTION_MAX_LINES = 3;
27
29
 
30
+ interface RepoCardOptions extends CommonOptions {
31
+ show_owner: boolean;
32
+ browser_rendering: boolean;
33
+ description_lines_count: number;
34
+ card_width_input: number;
35
+ show: Array<string>;
36
+ show_icons: boolean;
37
+ number_format: string;
38
+ text_bold: boolean;
39
+ line_height: number | string;
40
+ username: string;
41
+ }
42
+
43
+ interface RepoStatItem {
44
+ icon: string;
45
+ label: string;
46
+ value: number | undefined;
47
+ id: string;
48
+ link: string;
49
+ unitSymbol?: string;
50
+ }
51
+
28
52
  /**
29
53
  * Retrieves the repository description and wraps it to fit the card width.
30
54
  *
31
- * @param {string} label The repository description.
32
- * @param {string} textColor The color of the text.
33
- * @returns {string} Wrapped repo description SVG object.
55
+ * @param label The repository description.
56
+ * @param xOffset Horizontal offset of the badge.
57
+ * @returns Wrapped repo description SVG object.
34
58
  */
35
- const getBadgeSVG = (label, textColor, xOffset = 0) => `
36
- <g data-testid="badge" class="badge" transform="translate(${320 + xOffset}, -18)">
37
- <rect stroke="${textColor}" stroke-width="1" width="70" height="20" x="-12" y="-14" ry="10" rx="10"></rect>
38
- <text
39
- x="23" y="-5"
40
- alignment-baseline="central"
41
- dominant-baseline="central"
42
- text-anchor="middle"
43
- fill="${textColor}"
44
- >
45
- ${label}
46
- </text>
47
- </g>
48
- `;
59
+ const getBadgeSVG = (label: string, xOffset = 0): string => {
60
+ if (!Number.isFinite(xOffset)) {
61
+ throw new Error(`Invalid xOffset: "${xOffset}"`);
62
+ }
49
63
 
50
- /**
51
- * @typedef {import("../fetchers/types").RepositoryData} RepositoryData Repository data.
52
- * @typedef {import("./types").RepoCardOptions} RepoCardOptions Repo card options.
53
- */
64
+ return `
65
+ <g data-testid="badge" class="badge" transform="translate(${320 + xOffset}, -18)">
66
+ <rect stroke-width="1" width="70" height="20" x="-12" y="-14" ry="10" rx="10"></rect>
67
+ <text
68
+ x="23" y="-5"
69
+ alignment-baseline="central"
70
+ dominant-baseline="central"
71
+ text-anchor="middle"
72
+ >
73
+ ${encodeHTML(label)}
74
+ </text>
75
+ </g>
76
+ `;
77
+ };
54
78
 
55
79
  /**
56
80
  * Renders repository card details.
57
81
  *
58
- * @param {RepositoryData} repo Repository data.
59
- * @param {Partial<RepoCardOptions>} options Card options.
60
- * @returns {string} Repository card SVG object.
82
+ * @param repo Repository data.
83
+ * @param options Card options.
84
+ * @returns Repository card SVG object.
61
85
  */
62
- const renderRepoCard = (repo, options = {}) => {
86
+ const renderRepoCard = (
87
+ repo: RepositoryData,
88
+ options: Partial<RepoCardOptions> = {},
89
+ ): string => {
63
90
  const {
64
91
  name,
65
92
  nameWithOwner,
@@ -67,7 +94,7 @@ const renderRepoCard = (repo, options = {}) => {
67
94
  primaryLanguage,
68
95
  isArchived,
69
96
  isTemplate,
70
- starCount,
97
+ stargazerCount,
71
98
  forkCount,
72
99
  totalPRsAuthored,
73
100
  totalPRsCommented,
@@ -77,10 +104,6 @@ const renderRepoCard = (repo, options = {}) => {
77
104
  } = repo;
78
105
  const {
79
106
  hide_border = false,
80
- title_color,
81
- icon_color,
82
- text_color,
83
- bg_color,
84
107
  card_width_input,
85
108
  show_owner = false,
86
109
  browser_rendering = false,
@@ -92,7 +115,6 @@ const renderRepoCard = (repo, options = {}) => {
92
115
  username,
93
116
  theme = "default_repocard",
94
117
  border_radius,
95
- border_color,
96
118
  locale,
97
119
  description_lines_count,
98
120
  } = options;
@@ -109,68 +131,69 @@ const renderRepoCard = (repo, options = {}) => {
109
131
  translations: repoCardLocales,
110
132
  });
111
133
 
112
- let repoFilter = encodeURIComponent(buildSearchFilter([nameWithOwner], []));
113
- const STATS = {};
134
+ const repoFilter = encodeURIComponent(buildSearchFilter([nameWithOwner], []));
135
+ const encodedUsername = encodeURIComponent(username ?? "");
136
+ const STATS: Record<string, RepoStatItem> = {};
114
137
  if (show.includes("prs_authored")) {
115
- STATS.prs_authored = {
138
+ STATS["prs_authored"] = {
116
139
  icon: icons.prs,
117
140
  label: i18n.t("repocard.prs-authored"),
118
141
  value: totalPRsAuthored,
119
142
  id: "prs_authored",
120
- link: `https://github.com/search?q=${repoFilter}author%3A${username}&amp;type=pullrequests`,
143
+ link: `https://github.com/search?q=${repoFilter}author%3A${encodedUsername}&amp;type=pullrequests`,
121
144
  };
122
145
  }
123
146
  if (show.includes("prs_commented")) {
124
- STATS.prs_commented = {
147
+ STATS["prs_commented"] = {
125
148
  icon: icons.comments,
126
149
  label: i18n.t("repocard.prs-commented"),
127
150
  value: totalPRsCommented,
128
151
  id: "prs_commented",
129
- link: `https://github.com/search?q=${repoFilter}commenter%3A${username}+-author%3A${username}&amp;type=pullrequests`,
152
+ link: `https://github.com/search?q=${repoFilter}commenter%3A${encodedUsername}+-author%3A${encodedUsername}&amp;type=pullrequests`,
130
153
  };
131
154
  }
132
155
  if (show.includes("prs_reviewed")) {
133
- STATS.prs_reviewed = {
156
+ STATS["prs_reviewed"] = {
134
157
  icon: icons.reviews,
135
158
  label: i18n.t("repocard.prs-reviewed"),
136
159
  value: totalPRsReviewed,
137
160
  id: "prs_reviewed",
138
- link: `https://github.com/search?q=${repoFilter}reviewed-by%3A${username}+-author%3A${username}&amp;type=pullrequests`,
161
+ link: `https://github.com/search?q=${repoFilter}reviewed-by%3A${encodedUsername}+-author%3A${encodedUsername}&amp;type=pullrequests`,
139
162
  };
140
163
  }
141
164
  if (show.includes("issues_authored")) {
142
- STATS.issues_authored = {
165
+ STATS["issues_authored"] = {
143
166
  icon: icons.issues,
144
167
  label: i18n.t("repocard.issues-authored"),
145
168
  value: totalIssuesAuthored,
146
169
  id: "issues_authored",
147
- link: `https://github.com/search?q=${repoFilter}author%3A${username}&amp;type=issues`,
170
+ link: `https://github.com/search?q=${repoFilter}author%3A${encodedUsername}&amp;type=issues`,
148
171
  };
149
172
  }
150
173
  if (show.includes("issues_commented")) {
151
- STATS.issues_commented = {
174
+ STATS["issues_commented"] = {
152
175
  icon: icons.discussions_started,
153
176
  label: i18n.t("repocard.issues-commented"),
154
177
  value: totalIssuesCommented,
155
178
  id: "issues_commented",
156
- link: `https://github.com/search?q=${repoFilter}commenter%3A${username}+-author%3A${username}&amp;type=issues`,
179
+ link: `https://github.com/search?q=${repoFilter}commenter%3A${encodedUsername}+-author%3A${encodedUsername}&amp;type=issues`,
157
180
  };
158
181
  }
159
182
 
160
- const statItems = Object.keys(STATS).map((key, index) =>
183
+ const statItems = Object.values(STATS).map((stat, index) =>
161
184
  // create the text nodes, and pass index so that we can calculate the line spacing
162
185
  createTextNode({
163
- icon: STATS[key].icon,
164
- label: STATS[key].label,
165
- value: STATS[key].value,
166
- id: STATS[key].id,
167
- unitSymbol: STATS[key].unitSymbol,
186
+ icon: stat.icon,
187
+ label: stat.label,
188
+ value: stat.value ?? 0,
189
+ id: stat.id,
190
+ unitSymbol: stat.unitSymbol,
168
191
  index,
169
192
  showIcons: show_icons,
170
193
  shiftValuePos: 14.01,
171
194
  bold: text_bold,
172
195
  numberFormat: number_format,
173
- link: STATS[key].link,
196
+ link: stat.link,
174
197
  labelXOffset: 23,
175
198
  }),
176
199
  );
@@ -183,7 +206,8 @@ const renderRepoCard = (repo, options = {}) => {
183
206
  const desc = parseEmojis(description || "No description provided");
184
207
  const descriptionBoxWidth = card_width - 2 * X_OFFSET;
185
208
 
186
- let descriptionLinesCount, descriptionSvg;
209
+ let descriptionLinesCount: number;
210
+ let descriptionSvg: string;
187
211
  if (browser_rendering) {
188
212
  // The browser performs the actual text wrapping inside the foreignObject;
189
213
  // we only estimate the line count server-side so the SVG can reserve enough
@@ -239,21 +263,13 @@ const renderRepoCard = (repo, options = {}) => {
239
263
  descriptionLinesCount * lineHeight +
240
264
  extraHeight;
241
265
 
242
- // returns theme based colors with proper overrides and defaults
243
- const colors = getCardColors({
244
- title_color,
245
- icon_color,
246
- text_color,
247
- bg_color,
248
- border_color,
249
- theme,
250
- });
266
+ const { lightColors, darkColors } = getLightDarkColors({ ...options, theme });
251
267
 
252
268
  const svgLanguage = primaryLanguage
253
269
  ? createLanguageNode(langName, langColor)
254
270
  : "";
255
271
 
256
- const totalStars = kFormatter(starCount);
272
+ const totalStars = kFormatter(stargazerCount);
257
273
  const totalForks = kFormatter(forkCount);
258
274
  const svgStars = iconWithLabel(
259
275
  icons.star,
@@ -278,7 +294,7 @@ const renderRepoCard = (repo, options = {}) => {
278
294
  gap: 25,
279
295
  }).join("");
280
296
 
281
- let extraRows = [];
297
+ const extraRows: Array<string> = [];
282
298
  for (let i = 0; i < statItems.length; i += 2) {
283
299
  extraRows.push(
284
300
  flexLayout({
@@ -304,22 +320,24 @@ const renderRepoCard = (repo, options = {}) => {
304
320
  width: card_width,
305
321
  height,
306
322
  border_radius,
307
- colors,
323
+ colors: { light: lightColors, dark: darkColors },
308
324
  });
309
325
 
310
326
  card.disableAnimations();
311
327
  card.setHideBorder(hide_border);
312
328
  card.setHideTitle(false);
313
- card.setCSS(`
329
+ card.setCSS({
330
+ light: `
314
331
  .description {
315
- font: 400 ${DESCRIPTION_FONT_SIZE}px 'Segoe UI', Ubuntu, Sans-Serif;fill: ${colors.textColor};
316
- ${browser_rendering ? wrappedTextStyles(colors.textColor) : ""}
332
+ font: 400 ${DESCRIPTION_FONT_SIZE}px 'Segoe UI', Ubuntu, Sans-Serif;fill: ${lightColors.textColor};
333
+ ${browser_rendering ? wrappedTextStyles(lightColors.textColor) : ""}
317
334
  }
318
- .gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${colors.textColor} }
335
+ .gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${lightColors.textColor} }
319
336
  .badge { font: 600 11px 'Segoe UI', Ubuntu, Sans-Serif; }
320
- .badge rect { opacity: 0.2 }
337
+ .badge rect { opacity: 0.2; stroke: ${lightColors.textColor} }
338
+ .badge text { fill: ${lightColors.textColor} }
321
339
 
322
- .stat { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${colors.textColor} }
340
+ .stat { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: ${lightColors.textColor} }
323
341
  .stagger {
324
342
  opacity: 0;
325
343
  animation: fadeInAnimation 0.3s ease-in-out forwards;
@@ -327,25 +345,35 @@ const renderRepoCard = (repo, options = {}) => {
327
345
  .not_bold { font-weight: 400 }
328
346
  .bold { font-weight: 700 }
329
347
  .icon {
330
- fill: ${colors.iconColor};
348
+ fill: ${lightColors.iconColor};
331
349
  display: block;
332
350
  }
333
- `);
351
+ `,
352
+ dark: darkColors
353
+ ? `
354
+ .description {
355
+ fill: ${darkColors.textColor};
356
+ ${browser_rendering ? wrappedTextStyles(darkColors.textColor) : ""}
357
+ }
358
+ .gray { fill: ${darkColors.textColor} }
359
+ .badge rect { stroke: ${darkColors.textColor} }
360
+ .badge text { fill: ${darkColors.textColor} }
361
+ .stat { fill: ${darkColors.textColor} }
362
+ .icon { fill: ${darkColors.iconColor}; }
363
+ `
364
+ : null,
365
+ });
334
366
 
335
367
  return card.render(`
336
368
  ${
337
369
  isTemplate
338
- ? // @ts-ignore
339
- getBadgeSVG(
370
+ ? getBadgeSVG(
340
371
  i18n.t("repocard.template"),
341
- colors.textColor,
342
372
  card_width - CARD_DEFAULT_WIDTH,
343
373
  )
344
374
  : isArchived
345
- ? // @ts-ignore
346
- getBadgeSVG(
375
+ ? getBadgeSVG(
347
376
  i18n.t("repocard.archived"),
348
- colors.textColor,
349
377
  card_width - CARD_DEFAULT_WIDTH,
350
378
  )
351
379
  : ""