@module-federation/devtools 0.22.1 → 0.23.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 (55) hide show
  1. package/dist/es/App.css +6 -5
  2. package/dist/es/App.js +191 -59
  3. package/dist/es/App.module.js +1 -1
  4. package/dist/es/App_module.css +38 -36
  5. package/dist/es/component/DependencyGraph/index.js +10 -11
  6. package/dist/es/component/DependencyGraph/index_module.css +20 -17
  7. package/dist/es/component/DependencyGraphItem/index.js +5 -3
  8. package/dist/es/component/DependencyGraphItem/index_module.css +7 -7
  9. package/dist/es/component/Form/index.js +24 -31
  10. package/dist/es/component/Form/index.module.js +1 -1
  11. package/dist/es/component/Form/index_module.css +22 -25
  12. package/dist/es/component/LanguageSwitch.js +50 -0
  13. package/dist/es/component/Layout/index.js +6 -10
  14. package/dist/es/component/Layout/index_module.css +7 -7
  15. package/dist/es/component/ModuleInfo/index.js +65 -41
  16. package/dist/es/component/ModuleInfo/index_module.css +12 -11
  17. package/dist/es/component/SharedDepsExplorer/FocusResultDisplay.js +5 -3
  18. package/dist/es/component/SharedDepsExplorer/FocusResultDisplay_module.css +5 -5
  19. package/dist/es/component/SharedDepsExplorer/index.js +64 -75
  20. package/dist/es/component/SharedDepsExplorer/index_module.css +12 -2
  21. package/dist/es/component/ThemeToggle.js +19 -0
  22. package/dist/es/component/ThemeToggle.module.js +5 -0
  23. package/dist/es/component/ThemeToggle_module.css +12 -0
  24. package/dist/es/hooks/useDevtoolsTheme.js +77 -0
  25. package/dist/es/i18n/index.js +506 -0
  26. package/dist/lib/App.css +6 -5
  27. package/dist/lib/App.js +189 -59
  28. package/dist/lib/App.module.js +1 -1
  29. package/dist/lib/App_module.css +38 -36
  30. package/dist/lib/component/DependencyGraph/index.js +10 -11
  31. package/dist/lib/component/DependencyGraph/index_module.css +20 -17
  32. package/dist/lib/component/DependencyGraphItem/index.js +5 -3
  33. package/dist/lib/component/DependencyGraphItem/index_module.css +7 -7
  34. package/dist/lib/component/Form/index.js +24 -31
  35. package/dist/lib/component/Form/index.module.js +1 -1
  36. package/dist/lib/component/Form/index_module.css +22 -25
  37. package/dist/lib/component/LanguageSwitch.js +80 -0
  38. package/dist/lib/component/Layout/index.js +6 -10
  39. package/dist/lib/component/Layout/index_module.css +7 -7
  40. package/dist/lib/component/ModuleInfo/index.js +65 -41
  41. package/dist/lib/component/ModuleInfo/index_module.css +12 -11
  42. package/dist/lib/component/SharedDepsExplorer/FocusResultDisplay.js +5 -3
  43. package/dist/lib/component/SharedDepsExplorer/FocusResultDisplay_module.css +5 -5
  44. package/dist/lib/component/SharedDepsExplorer/index.js +64 -75
  45. package/dist/lib/component/SharedDepsExplorer/index_module.css +12 -2
  46. package/dist/lib/component/ThemeToggle.js +49 -0
  47. package/dist/lib/component/ThemeToggle.module.js +25 -0
  48. package/dist/lib/component/ThemeToggle_module.css +12 -0
  49. package/dist/lib/hooks/useDevtoolsTheme.js +101 -0
  50. package/dist/lib/i18n/index.js +540 -0
  51. package/dist/types/src/component/LanguageSwitch.d.ts +2 -0
  52. package/dist/types/src/component/ThemeToggle.d.ts +8 -0
  53. package/dist/types/src/hooks/useDevtoolsTheme.d.ts +2 -0
  54. package/dist/types/src/i18n/index.d.ts +5 -0
  55. package/package.json +10 -8
@@ -39,6 +39,7 @@ import {
39
39
  Popover,
40
40
  Button
41
41
  } from "@arco-design/web-react";
42
+ import { useTranslation } from "react-i18next";
42
43
  import {
43
44
  normalizeShareData,
44
45
  computeShareStats,
@@ -49,21 +50,22 @@ import {
49
50
  import FocusResultDisplay from "./FocusResultDisplay";
50
51
  import styles from "./index.module";
51
52
  const ALL_VALUE = "__all__";
52
- function loadedStatusLabel(status) {
53
- if (status === "loaded") {
54
- return "Loaded";
55
- }
56
- if (status === "loading") {
57
- return "Loading";
58
- }
59
- return "Not Loaded";
60
- }
61
53
  function SharedDepsExplorer({
62
54
  shareData: shareDataProp
63
55
  }) {
56
+ const { t } = useTranslation();
64
57
  const [normalized, setNormalized] = useState([]);
65
58
  const [loadingState, setLoadingState] = useState("idle");
66
59
  const [errorMessage, setErrorMessage] = useState(null);
60
+ const loadedStatusLabelLocal = (status) => {
61
+ if (status === "loaded") {
62
+ return t("sharedDeps.status.loaded");
63
+ }
64
+ if (status === "loading") {
65
+ return t("sharedDeps.status.loading");
66
+ }
67
+ return t("sharedDeps.status.notLoaded");
68
+ };
67
69
  const [selectedProvider, setSelectedProvider] = useState("");
68
70
  const [selectedPackage, setSelectedPackage] = useState("");
69
71
  const [selectedVersion, setSelectedVersion] = useState("");
@@ -178,7 +180,7 @@ function SharedDepsExplorer({
178
180
  const hasData = normalized.length > 0;
179
181
  const columns = [
180
182
  {
181
- title: "Package / Version",
183
+ title: t("sharedDeps.table.columns.packageVersion"),
182
184
  width: "28%",
183
185
  render: (_, item) => /* @__PURE__ */ jsxs("div", { className: styles.cellCol, children: [
184
186
  /* @__PURE__ */ jsx("div", { className: styles.packageName, children: item.packageName }),
@@ -189,21 +191,15 @@ function SharedDepsExplorer({
189
191
  ] })
190
192
  },
191
193
  {
192
- title: "Provider / Scope",
194
+ title: t("sharedDeps.table.columns.providerScope"),
193
195
  width: "20%",
194
196
  render: (_, item) => /* @__PURE__ */ jsxs("div", { className: styles.cellColGap, children: [
195
- /* @__PURE__ */ jsxs("span", { className: styles.truncate, title: item.from, children: [
196
- "Provider: ",
197
- item.from
198
- ] }),
199
- /* @__PURE__ */ jsxs("span", { className: styles.scopeText, children: [
200
- "scope: ",
201
- item.scope
202
- ] })
197
+ /* @__PURE__ */ jsx("span", { className: styles.truncate, title: item.from, children: t("sharedDeps.table.providerPrefix", { name: item.from }) }),
198
+ /* @__PURE__ */ jsx("span", { className: styles.scopeText, children: t("sharedDeps.table.scopePrefix", { scope: item.scope }) })
203
199
  ] })
204
200
  },
205
201
  {
206
- title: "Status",
202
+ title: t("sharedDeps.table.columns.status"),
207
203
  width: "22%",
208
204
  render: (_, item) => /* @__PURE__ */ jsxs("div", { className: styles.cellColGap, children: [
209
205
  ["loaded", "loading"].includes(item.loadedStatus) ? /* @__PURE__ */ jsx(
@@ -211,7 +207,7 @@ function SharedDepsExplorer({
211
207
  {
212
208
  size: "small",
213
209
  className: `${styles.tagContainer} loaded-status-tag`,
214
- children: loadedStatusLabel(item.loadedStatus)
210
+ children: loadedStatusLabelLocal(item.loadedStatus)
215
211
  }
216
212
  ) : null,
217
213
  /* @__PURE__ */ jsxs("div", { className: styles.configTags, children: [
@@ -226,7 +222,7 @@ function SharedDepsExplorer({
226
222
  ] })
227
223
  },
228
224
  {
229
- title: "Consumers",
225
+ title: t("sharedDeps.table.columns.consumers"),
230
226
  width: "18%",
231
227
  render: (_, item) => /* @__PURE__ */ jsx(
232
228
  Popover,
@@ -234,70 +230,71 @@ function SharedDepsExplorer({
234
230
  trigger: "click",
235
231
  position: "right",
236
232
  content: /* @__PURE__ */ jsxs("div", { className: styles.popoverContent, children: [
237
- /* @__PURE__ */ jsx("div", { className: styles.popoverTitle, children: "Consumer List" }),
238
- item.useIn.length === 0 ? /* @__PURE__ */ jsx("p", { className: styles.scopeText, children: "No applications are consuming this shared dependency version." }) : /* @__PURE__ */ jsx("ul", { className: styles.consumerList, children: item.useIn.map((c) => /* @__PURE__ */ jsxs("li", { className: styles.consumerItem, children: [
233
+ /* @__PURE__ */ jsx("div", { className: styles.popoverTitle, children: t("sharedDeps.consumersPopover.title") }),
234
+ item.useIn.length === 0 ? /* @__PURE__ */ jsx("p", { className: styles.scopeText, children: t("sharedDeps.consumersPopover.empty") }) : /* @__PURE__ */ jsx("ul", { className: styles.consumerList, children: item.useIn.map((c) => /* @__PURE__ */ jsxs("li", { className: styles.consumerItem, children: [
239
235
  /* @__PURE__ */ jsx("span", { className: styles.dot }),
240
236
  /* @__PURE__ */ jsx("span", { className: styles.packageName, children: c })
241
237
  ] }, c)) })
242
238
  ] }),
243
239
  children: /* @__PURE__ */ jsx(Button, { size: "mini", type: "secondary", children: /* @__PURE__ */ jsxs("div", { className: styles.btnContent, children: [
244
240
  /* @__PURE__ */ jsx(Network, { className: styles.mr1, size: 12 }),
245
- /* @__PURE__ */ jsxs("span", { children: [
246
- item.useIn.length || 0,
247
- " Apps"
248
- ] })
241
+ /* @__PURE__ */ jsx("span", { children: t("sharedDeps.consumersPopover.button", {
242
+ count: item.useIn.length || 0
243
+ }) })
249
244
  ] }) })
250
245
  }
251
246
  )
252
247
  },
253
248
  {
254
- title: "Strategy",
249
+ title: t("sharedDeps.table.columns.strategy"),
255
250
  width: "12%",
256
251
  render: (_, item) => {
257
252
  var _a;
258
- return /* @__PURE__ */ jsx(Tag, { size: "small", color: "gray", children: (_a = item.strategy) != null ? _a : "-" });
253
+ return /* @__PURE__ */ jsx(Tag, { size: "small", color: "gray", children: (_a = item.strategy) != null ? _a : t("sharedDeps.table.strategyFallback") });
259
254
  }
260
255
  }
261
256
  ];
262
257
  return /* @__PURE__ */ jsxs("div", { className: styles.container, children: [
263
258
  /* @__PURE__ */ jsxs("section", { className: styles.heroSection, children: [
264
- /* @__PURE__ */ jsx("p", { className: styles.heroSubtitle, children: "Module Federation · Shared Dependencies" }),
265
- /* @__PURE__ */ jsx("h1", { className: styles.heroTitle, children: "Overview of Shared Dependencies Usage" })
259
+ /* @__PURE__ */ jsx("p", { className: styles.heroSubtitle, children: t("sharedDeps.hero.subtitle") }),
260
+ /* @__PURE__ */ jsx("h1", { className: styles.heroTitle, children: t("sharedDeps.hero.title") })
266
261
  ] }),
267
262
  /* @__PURE__ */ jsx("section", { children: /* @__PURE__ */ jsxs("div", { className: styles.statsGrid, children: [
268
263
  /* @__PURE__ */ jsxs(Card, { className: styles.cardWithPadding, children: [
269
264
  /* @__PURE__ */ jsx("div", { className: styles.cardHeader, children: /* @__PURE__ */ jsxs("div", { className: styles.statSpace, children: [
270
- /* @__PURE__ */ jsx("div", { className: styles.statLabel, children: "Number of Providers" }),
265
+ /* @__PURE__ */ jsx("div", { className: styles.statLabel, children: t("sharedDeps.stats.providers.title") }),
271
266
  /* @__PURE__ */ jsxs("div", { className: styles.statValue, children: [
272
267
  /* @__PURE__ */ jsx(Server, { className: styles.icon }),
273
268
  /* @__PURE__ */ jsx("span", { children: stats.totalProviders })
274
269
  ] })
275
270
  ] }) }),
276
- /* @__PURE__ */ jsx("p", { className: styles.statDescription, children: "Number of applications/build versions exposing shared dependencies." })
271
+ /* @__PURE__ */ jsx("p", { className: styles.statDescription, children: t("sharedDeps.stats.providers.description") })
277
272
  ] }),
278
273
  /* @__PURE__ */ jsxs(Card, { className: styles.cardWithPadding, children: [
279
274
  /* @__PURE__ */ jsx("div", { className: styles.cardHeader, children: /* @__PURE__ */ jsxs("div", { className: styles.statSpace, children: [
280
- /* @__PURE__ */ jsx("div", { className: styles.statLabel, children: "Share Scope / Package" }),
275
+ /* @__PURE__ */ jsx("div", { className: styles.statLabel, children: t("sharedDeps.stats.scopes.title") }),
281
276
  /* @__PURE__ */ jsxs("div", { className: styles.statValue, children: [
282
277
  /* @__PURE__ */ jsx(Layers, { className: styles.icon }),
283
278
  /* @__PURE__ */ jsx("span", { children: stats.totalScopes }),
284
- /* @__PURE__ */ jsx("span", { className: styles.statSubtext, children: "scope" })
279
+ /* @__PURE__ */ jsx("span", { className: styles.statSubtext, children: t("sharedDeps.stats.scopes.badge") })
285
280
  ] })
286
281
  ] }) }),
287
282
  /* @__PURE__ */ jsxs("div", { className: styles.cardFooter, children: [
288
- /* @__PURE__ */ jsx("span", { className: `${styles.truncate} ${styles.mr2}`, children: "Shared spaces under Scope dimension." }),
283
+ /* @__PURE__ */ jsx("span", { className: `${styles.truncate} ${styles.mr2}`, children: t("sharedDeps.stats.scopes.description") }),
289
284
  /* @__PURE__ */ jsxs("span", { className: styles.badgeGroup, children: [
290
285
  /* @__PURE__ */ jsx(Box, { className: styles.iconSmall }),
291
286
  /* @__PURE__ */ jsxs("span", { children: [
292
287
  stats.totalPackages,
293
- " packages"
288
+ t("sharedDeps.stats.scopes.packagesBadge", {
289
+ count: stats.totalPackages
290
+ })
294
291
  ] })
295
292
  ] })
296
293
  ] })
297
294
  ] }),
298
295
  /* @__PURE__ */ jsxs(Card, { className: styles.cardWithPadding, children: [
299
296
  /* @__PURE__ */ jsx("div", { className: styles.cardHeader, children: /* @__PURE__ */ jsxs("div", { className: styles.statSpace, children: [
300
- /* @__PURE__ */ jsx("div", { className: styles.statLabel, children: "Version Loading & Reuse" }),
297
+ /* @__PURE__ */ jsx("div", { className: styles.statLabel, children: t("sharedDeps.stats.versions.title") }),
301
298
  /* @__PURE__ */ jsxs("div", { className: styles.statValue, children: [
302
299
  /* @__PURE__ */ jsx(Package2, { className: styles.icon }),
303
300
  /* @__PURE__ */ jsx("span", { children: stats.totalVersions })
@@ -306,12 +303,12 @@ function SharedDepsExplorer({
306
303
  /* @__PURE__ */ jsx("div", { className: styles.statusTags, children: /* @__PURE__ */ jsxs("div", { className: styles.tagRow, children: [
307
304
  /* @__PURE__ */ jsx(Tag, { className: `${styles.tagContent} loaded-status-tag`, children: /* @__PURE__ */ jsxs("div", { className: styles.tagContent, children: [
308
305
  /* @__PURE__ */ jsx(Network, { className: `${styles.iconSmall} ${styles.mr1}` }),
309
- /* @__PURE__ */ jsx("span", { children: "Loaded" }),
306
+ /* @__PURE__ */ jsx("span", { children: t("sharedDeps.stats.versions.loadedLabel") }),
310
307
  /* @__PURE__ */ jsx("span", { className: styles.tagValue, children: stats.loadedCount })
311
308
  ] }) }),
312
309
  /* @__PURE__ */ jsx(Tag, { className: `${styles.tagContent} reused-status-tag`, children: /* @__PURE__ */ jsxs("div", { className: styles.tagContent, children: [
313
310
  /* @__PURE__ */ jsx(Repeat, { className: `${styles.iconSmall} ${styles.mr1}` }),
314
- /* @__PURE__ */ jsx("span", { children: "Reused" }),
311
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx("span", { children: t("sharedDeps.stats.versions.reusedLabel") }) }),
315
312
  /* @__PURE__ */ jsx("span", { className: styles.tagValue, children: stats.reusedCount })
316
313
  ] }) })
317
314
  ] }) })
@@ -323,14 +320,12 @@ function SharedDepsExplorer({
323
320
  className: styles.card,
324
321
  title: /* @__PURE__ */ jsxs("div", { className: styles.cardTitle, children: [
325
322
  /* @__PURE__ */ jsx(Box, { className: styles.iconMedium }),
326
- "Who provides the current shared: '",
327
- focusPackage,
328
- "'?"
323
+ t("sharedDeps.focusPanel.title", { package: focusPackage })
329
324
  ] }),
330
325
  children: [
331
326
  /* @__PURE__ */ jsxs("div", { className: styles.controlsGrid, children: [
332
327
  /* @__PURE__ */ jsxs("div", { className: styles.inputGroup, children: [
333
- /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: "Package Name" }),
328
+ /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: t("sharedDeps.focusPanel.packageLabel") }),
334
329
  /* @__PURE__ */ jsx(
335
330
  Select,
336
331
  {
@@ -340,24 +335,24 @@ function SharedDepsExplorer({
340
335
  setFocusPackage(value);
341
336
  setFocusVersion("");
342
337
  },
343
- placeholder: "Select Shared Dependency Package Name",
338
+ placeholder: t("sharedDeps.focusPanel.packagePlaceholder"),
344
339
  className: styles.fullWidth,
345
340
  children: filterOptions.packages.map((name) => /* @__PURE__ */ jsx(Select.Option, { value: name, children: name }, name))
346
341
  }
347
342
  )
348
343
  ] }),
349
344
  /* @__PURE__ */ jsxs("div", { className: styles.inputGroup, children: [
350
- /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: "Version (Optional, inferred if empty)" }),
345
+ /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: t("sharedDeps.focusPanel.versionLabel") }),
351
346
  /* @__PURE__ */ jsxs(
352
347
  Select,
353
348
  {
354
349
  showSearch: true,
355
350
  value: focusVersion || ALL_VALUE,
356
351
  onChange: (value) => setFocusVersion(value === ALL_VALUE ? "" : value),
357
- placeholder: "All Versions",
352
+ placeholder: t("sharedDeps.focusPanel.versionPlaceholder"),
358
353
  className: styles.fullWidth,
359
354
  children: [
360
- /* @__PURE__ */ jsx(Select.Option, { value: ALL_VALUE, children: "All Versions" }),
355
+ /* @__PURE__ */ jsx(Select.Option, { value: ALL_VALUE, children: t("sharedDeps.focusPanel.versionAllOption") }),
361
356
  focusVersionsForPackage.map((v) => /* @__PURE__ */ jsx(Select.Option, { value: v, children: v }, v))
362
357
  ]
363
358
  }
@@ -369,7 +364,7 @@ function SharedDepsExplorer({
369
364
  {
370
365
  focusResult,
371
366
  hasData,
372
- loadedStatusLabel
367
+ loadedStatusLabel: loadedStatusLabelLocal
373
368
  }
374
369
  ) })
375
370
  ]
@@ -381,18 +376,18 @@ function SharedDepsExplorer({
381
376
  className: styles.card,
382
377
  title: /* @__PURE__ */ jsxs("div", { className: styles.cardTitle, children: [
383
378
  /* @__PURE__ */ jsx(Search, { className: styles.iconMedium }),
384
- "Filter / Search"
379
+ t("sharedDeps.filters.cardTitle")
385
380
  ] }),
386
381
  children: [
387
382
  /* @__PURE__ */ jsxs("div", { className: styles.filterGrid, children: [
388
383
  /* @__PURE__ */ jsxs("div", { className: `${styles.inputGroup} ${styles.padding2}`, children: [
389
- /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: "Provider" }),
384
+ /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: t("sharedDeps.filters.providerLabel") }),
390
385
  /* @__PURE__ */ jsx(
391
386
  Select,
392
387
  {
393
388
  value: selectedProvider || void 0,
394
389
  onChange: (value) => setSelectedProvider(value === ALL_VALUE ? "" : value),
395
- placeholder: "All Providers",
390
+ placeholder: t("sharedDeps.filters.providerPlaceholder"),
396
391
  className: styles.fullWidth,
397
392
  allowClear: true,
398
393
  children: filterOptions.providers.map((p) => /* @__PURE__ */ jsx(Select.Option, { value: p, children: p }, p))
@@ -400,13 +395,13 @@ function SharedDepsExplorer({
400
395
  )
401
396
  ] }),
402
397
  /* @__PURE__ */ jsxs("div", { className: `${styles.inputGroup} ${styles.padding2}`, children: [
403
- /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: "Package Name" }),
398
+ /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: t("sharedDeps.filters.packageLabel") }),
404
399
  /* @__PURE__ */ jsx(
405
400
  Select,
406
401
  {
407
402
  value: selectedPackage || void 0,
408
403
  onChange: (value) => setSelectedPackage(value === ALL_VALUE ? "" : value),
409
- placeholder: "All Packages",
404
+ placeholder: t("sharedDeps.filters.packagePlaceholder"),
410
405
  className: styles.fullWidth,
411
406
  allowClear: true,
412
407
  children: filterOptions.packages.map((name) => /* @__PURE__ */ jsx(Select.Option, { value: name, children: name }, name))
@@ -414,13 +409,13 @@ function SharedDepsExplorer({
414
409
  )
415
410
  ] }),
416
411
  /* @__PURE__ */ jsxs("div", { className: `${styles.inputGroup} ${styles.padding2}`, children: [
417
- /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: "Version" }),
412
+ /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: t("sharedDeps.filters.versionLabel") }),
418
413
  /* @__PURE__ */ jsx(
419
414
  Select,
420
415
  {
421
416
  value: selectedVersion || void 0,
422
417
  onChange: (value) => setSelectedVersion(value === ALL_VALUE ? "" : value),
423
- placeholder: "All Versions",
418
+ placeholder: t("sharedDeps.filters.versionPlaceholder"),
424
419
  className: styles.fullWidth,
425
420
  disabled: !selectedPackage,
426
421
  allowClear: true,
@@ -431,30 +426,26 @@ function SharedDepsExplorer({
431
426
  ] }),
432
427
  /* @__PURE__ */ jsxs("div", { className: styles.searchGrid, children: [
433
428
  /* @__PURE__ */ jsxs("div", { className: styles.inputGroup, children: [
434
- /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: "Package Name Keyword (Fuzzy Match)" }),
429
+ /* @__PURE__ */ jsx("div", { className: styles.inputLabel, children: t("sharedDeps.filters.keywordLabel") }),
435
430
  /* @__PURE__ */ jsx(
436
431
  Input,
437
432
  {
438
433
  prefix: /* @__PURE__ */ jsx(Search, { className: styles.iconMedium }),
439
434
  className: styles.searchInput,
440
- placeholder: "e.g., react / axios",
435
+ placeholder: t("sharedDeps.filters.keywordPlaceholder"),
441
436
  value: searchText,
442
437
  onChange: (val) => setSearchText(val)
443
438
  }
444
439
  )
445
440
  ] }),
446
441
  /* @__PURE__ */ jsx("div", { className: styles.matchCount, children: /* @__PURE__ */ jsxs("span", { children: [
447
- "Currently Matched Versions:",
442
+ t("sharedDeps.filters.matchCountLabel"),
448
443
  /* @__PURE__ */ jsx("span", { className: styles.matchValue, children: filteredVersions.length })
449
444
  ] }) })
450
445
  ] }),
451
- !hasData && loadingState === "loading" && /* @__PURE__ */ jsx("div", { className: styles.loadingText, children: "Parsing shared dependency data..." }),
452
- loadingState === "error" && /* @__PURE__ */ jsxs("div", { className: styles.errorText, children: [
453
- "Failed to load shared dependency data:",
454
- " ",
455
- errorMessage != null ? errorMessage : "Unknown Error"
456
- ] }),
457
- hasData && Object.keys(tree).length === 0 && /* @__PURE__ */ jsx("div", { className: styles.noMatchText, children: "No matching shared dependency versions under current filter conditions, try relaxing the filter conditions." }),
446
+ !hasData && loadingState === "loading" && /* @__PURE__ */ jsx("div", { className: styles.loadingText, children: t("sharedDeps.messages.loading") }),
447
+ loadingState === "error" && /* @__PURE__ */ jsx("div", { className: styles.errorText, children: errorMessage ? t("sharedDeps.messages.error", { message: errorMessage }) : t("sharedDeps.messages.errorUnknown") }),
448
+ hasData && Object.keys(tree).length === 0 && /* @__PURE__ */ jsx("div", { className: styles.noMatchText, children: t("sharedDeps.messages.noMatch") }),
458
449
  hasData && Object.keys(tree).length > 0 && /* @__PURE__ */ jsx("div", { className: styles.treeContainer, children: /* @__PURE__ */ jsx("div", { className: styles.collapseWrapper, children: /* @__PURE__ */ jsx(Collapse, { children: Object.entries(tree).map(([provider, scopes]) => /* @__PURE__ */ jsx(
459
450
  Collapse.Item,
460
451
  {
@@ -464,20 +455,18 @@ function SharedDepsExplorer({
464
455
  /* @__PURE__ */ jsx(Server, { className: styles.iconMedium }),
465
456
  /* @__PURE__ */ jsx("span", { children: provider })
466
457
  ] }),
467
- /* @__PURE__ */ jsx("div", { className: styles.providerMeta, children: /* @__PURE__ */ jsxs("span", { children: [
468
- "Scope Count: ",
469
- Object.keys(scopes).length
470
- ] }) })
458
+ /* @__PURE__ */ jsx("div", { className: styles.providerMeta, children: /* @__PURE__ */ jsx("span", { children: t("sharedDeps.filters.scopeCount", {
459
+ count: Object.keys(scopes).length
460
+ }) }) })
471
461
  ] }),
472
462
  children: /* @__PURE__ */ jsx("div", { className: styles.scopeList, children: Object.entries(scopes).map(([scopeName, packages]) => {
473
463
  const list = Object.values(packages).flat();
474
464
  return /* @__PURE__ */ jsxs("div", { className: styles.scopeItem, children: [
475
465
  /* @__PURE__ */ jsxs("div", { className: styles.scopeHeader, children: [
476
466
  /* @__PURE__ */ jsx(Layers, { className: styles.iconSmall }),
477
- /* @__PURE__ */ jsxs("span", { children: [
478
- "Scope: ",
479
- scopeName
480
- ] })
467
+ /* @__PURE__ */ jsx("span", { children: t("sharedDeps.filters.scopePrefix", {
468
+ name: scopeName
469
+ }) })
481
470
  ] }),
482
471
  /* @__PURE__ */ jsx("div", { className: styles.tableContainer, children: /* @__PURE__ */ jsx(
483
472
  Table,
@@ -227,7 +227,7 @@
227
227
  .resultBox_967de {
228
228
  border-radius: 6px;
229
229
  border: 1px dashed #e4e4e7;
230
- background-color: #f9fafb;
230
+ background-color: var(--color-bg-1, #f9fafb) !important;
231
231
  padding: 8px 12px;
232
232
  font-size: 12px;
233
233
  }
@@ -366,6 +366,16 @@
366
366
  border: 1px solid #e4e4e7;
367
367
  background-color: rgba(249, 250, 251, 0.4);
368
368
  }
369
+ .tableContainer_967de .arco-table-hover .arco-table-tr:not(.arco-table-empty-row):hover .arco-table-td:not(.arco-table-col-fixed-left):not(.arco-table-col-fixed-right) {
370
+ background-color: var(--color-fill-2, #f2f3f5) !important;
371
+ }
372
+ .arco-theme-dark .tableContainer_967de .arco-table-hover
373
+ .arco-table-tr:not(.arco-table-empty-row):hover
374
+ .arco-table-td:not(.arco-table-col-fixed-left):not(
375
+ .arco-table-col-fixed-right
376
+ ) {
377
+ background-color: var(--color-bg-4) !important;
378
+ }
369
379
 
370
380
  .cellCol_967de {
371
381
  display: flex;
@@ -376,7 +386,7 @@
376
386
  word-break: break-all;
377
387
  font-family: monospace;
378
388
  font-size: 11px;
379
- color: #27272a;
389
+ color: var(--color-neutral-10, #27272a) !important;
380
390
  }
381
391
 
382
392
  .version_967de {
@@ -0,0 +1,19 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Button } from "@arco-design/web-react";
3
+ import { IconMoon, IconSun } from "@arco-design/web-react/icon";
4
+ import styles from "./ThemeToggle.module";
5
+ const ThemeToggle = ({ theme, onToggle }) => {
6
+ return /* @__PURE__ */ jsx(
7
+ Button,
8
+ {
9
+ className: styles.themeToggle,
10
+ size: "default",
11
+ onClick: onToggle,
12
+ icon: theme === "dark" ? /* @__PURE__ */ jsx(IconSun, {}) : /* @__PURE__ */ jsx(IconMoon, {})
13
+ }
14
+ );
15
+ };
16
+ var ThemeToggle_default = ThemeToggle;
17
+ export {
18
+ ThemeToggle_default as default
19
+ };
@@ -0,0 +1,5 @@
1
+ import "./ThemeToggle_module.css";
2
+ var ThemeToggle_module_default = { "themeToggle": "themeToggle_2452c" };
3
+ export {
4
+ ThemeToggle_module_default as default
5
+ };
@@ -0,0 +1,12 @@
1
+ .themeToggle_2452c {
2
+ background-color: transparent !important;
3
+ border-color: transparent !important;
4
+ margin: 0 6px !important;
5
+ padding: 0 !important;
6
+ }
7
+ .themeToggle_2452c:hover {
8
+ background-color: var(--color-fill-3, #fafafa) !important;
9
+ }
10
+ .arco-theme-dark .themeToggle_2452c :hover {
11
+ background-color: var(--color-bg-1) !important;
12
+ }
@@ -0,0 +1,77 @@
1
+ import { useEffect, useState } from "react";
2
+ const DARK_MEDIA_QUERY = "(prefers-color-scheme: dark)";
3
+ function resolveThemeFromDevtools() {
4
+ var _a, _b;
5
+ if (typeof window === "undefined") {
6
+ return null;
7
+ }
8
+ const devtools = (_a = window.chrome) == null ? void 0 : _a.devtools;
9
+ const themeName = (_b = devtools == null ? void 0 : devtools.panels) == null ? void 0 : _b.themeName;
10
+ if (typeof themeName === "string") {
11
+ return themeName.toLowerCase().includes("dark") ? "dark" : "light";
12
+ }
13
+ return null;
14
+ }
15
+ function resolveThemeFromMedia() {
16
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
17
+ return null;
18
+ }
19
+ return window.matchMedia(DARK_MEDIA_QUERY).matches ? "dark" : "light";
20
+ }
21
+ function getInitialTheme() {
22
+ var _a, _b;
23
+ return (_b = (_a = resolveThemeFromDevtools()) != null ? _a : resolveThemeFromMedia()) != null ? _b : "light";
24
+ }
25
+ const useDevtoolsTheme = () => {
26
+ const [theme, setTheme] = useState(() => getInitialTheme());
27
+ useEffect(() => {
28
+ var _a;
29
+ if (typeof window === "undefined") {
30
+ return;
31
+ }
32
+ const devtools = (_a = window.chrome) == null ? void 0 : _a.devtools;
33
+ const panels = devtools == null ? void 0 : devtools.panels;
34
+ const onThemeChanged = panels == null ? void 0 : panels.onThemeChanged;
35
+ const handleThemeChange = (newThemeName) => {
36
+ if (typeof newThemeName !== "string") {
37
+ return;
38
+ }
39
+ const next = newThemeName.toLowerCase().includes("dark") ? "dark" : "light";
40
+ setTheme(next);
41
+ };
42
+ const fromDevtools = resolveThemeFromDevtools();
43
+ if (fromDevtools) {
44
+ setTheme(fromDevtools);
45
+ }
46
+ let mediaQuery = null;
47
+ const handleMediaQueryChange = (event) => {
48
+ setTheme(event.matches ? "dark" : "light");
49
+ };
50
+ if (onThemeChanged && typeof onThemeChanged.addListener === "function") {
51
+ onThemeChanged.addListener(handleThemeChange);
52
+ } else if (typeof window.matchMedia === "function") {
53
+ mediaQuery = window.matchMedia(DARK_MEDIA_QUERY);
54
+ if (typeof mediaQuery.addEventListener === "function") {
55
+ mediaQuery.addEventListener("change", handleMediaQueryChange);
56
+ } else if (typeof mediaQuery.addListener === "function") {
57
+ mediaQuery.addListener(handleMediaQueryChange);
58
+ }
59
+ }
60
+ return () => {
61
+ if (onThemeChanged && typeof onThemeChanged.removeListener === "function") {
62
+ onThemeChanged.removeListener(handleThemeChange);
63
+ }
64
+ if (mediaQuery) {
65
+ if (typeof mediaQuery.removeEventListener === "function") {
66
+ mediaQuery.removeEventListener("change", handleMediaQueryChange);
67
+ } else if (typeof mediaQuery.removeListener === "function") {
68
+ mediaQuery.removeListener(handleMediaQueryChange);
69
+ }
70
+ }
71
+ };
72
+ }, []);
73
+ return theme;
74
+ };
75
+ export {
76
+ useDevtoolsTheme
77
+ };