dshmarket 1.7.0 → 1.8.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.
- package/client/client.js +203 -74
- package/client/client.js.map +1 -1
- package/data/registry-snapshot.json +9180 -3442
- package/package.json +1 -1
- package/src/client/Market.module.css +2 -0
- package/src/client/MarketSection.tsx +38 -1
- package/src/client/market-data.ts +107 -0
package/client/client.js
CHANGED
|
@@ -454,6 +454,97 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
454
454
|
pick(["--dsw-alias-label-primary"]) || (dark ? "#e5e7eb" : "#1f2328")
|
|
455
455
|
];
|
|
456
456
|
}
|
|
457
|
+
/**
|
|
458
|
+
* Image hosts screenshots may load from (#61) — GitHub's own hosting only.
|
|
459
|
+
* Any other host is dropped BEFORE an <img> is created: a screenshot URL is
|
|
460
|
+
* a request carrying the user's IP, so registry data and README content are
|
|
461
|
+
* both treated as untrusted here, matching the upstream build gate.
|
|
462
|
+
*/
|
|
463
|
+
const SCREENSHOT_HOSTS = /* @__PURE__ */ new Set([
|
|
464
|
+
"raw.githubusercontent.com",
|
|
465
|
+
"user-images.githubusercontent.com",
|
|
466
|
+
"camo.githubusercontent.com",
|
|
467
|
+
"github.com"
|
|
468
|
+
]);
|
|
469
|
+
const MAX_SCREENSHOTS = 6;
|
|
470
|
+
/** Keep only https URLs on allowlisted image hosts; SVG dropped (logos/badges). */
|
|
471
|
+
function safeScreenshots(urls) {
|
|
472
|
+
if (!Array.isArray(urls)) return [];
|
|
473
|
+
const safe = [];
|
|
474
|
+
for (const value of urls) {
|
|
475
|
+
if (typeof value !== "string") continue;
|
|
476
|
+
let parsed = null;
|
|
477
|
+
try {
|
|
478
|
+
parsed = new URL(value);
|
|
479
|
+
} catch {
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
if (parsed.protocol !== "https:" || !SCREENSHOT_HOSTS.has(parsed.hostname)) continue;
|
|
483
|
+
if (/\.svg$/i.test(parsed.pathname)) continue;
|
|
484
|
+
if (!safe.includes(value)) safe.push(value);
|
|
485
|
+
if (safe.length >= MAX_SCREENSHOTS) break;
|
|
486
|
+
}
|
|
487
|
+
return safe;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Image URLs extracted from a repo README, in document order — the fallback
|
|
491
|
+
* when an entry has no curated screenshots (#61). Markdown and <img> forms;
|
|
492
|
+
* relative paths resolve against the README's directory on
|
|
493
|
+
* raw.githubusercontent.com; badges fall out naturally (shields.io etc. are
|
|
494
|
+
* not allowlisted) and SVG is skipped as logo/badge noise.
|
|
495
|
+
*/
|
|
496
|
+
function extractReadmeImages(markdown, owner, repo, subpath) {
|
|
497
|
+
const base = `https://raw.githubusercontent.com/${owner}/${repo}/HEAD/${subpath === null ? "" : subpath + "/"}`;
|
|
498
|
+
const found = [];
|
|
499
|
+
const push = (raw) => {
|
|
500
|
+
const src = raw.trim().replace(/^<|>$/g, "");
|
|
501
|
+
if (src === "" || src.startsWith("data:")) return;
|
|
502
|
+
let absolute;
|
|
503
|
+
if (/^https?:\/\//i.test(src)) absolute = src;
|
|
504
|
+
else if (src.startsWith("/")) absolute = `https://raw.githubusercontent.com/${owner}/${repo}/HEAD${src}`;
|
|
505
|
+
else try {
|
|
506
|
+
absolute = new URL(src, base).href;
|
|
507
|
+
} catch {
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
found.push(absolute);
|
|
511
|
+
};
|
|
512
|
+
for (const m of markdown.matchAll(/!\[[^\]]*\]\(\s*([^)\s]+)(?:\s+"[^"]*")?\s*\)|<img[^>]*\ssrc=["']([^"']+)["']/gi)) push(m[1] ?? m[2]);
|
|
513
|
+
return safeScreenshots(found);
|
|
514
|
+
}
|
|
515
|
+
const readmeShotsCache = /* @__PURE__ */ new Map();
|
|
516
|
+
/**
|
|
517
|
+
* Screenshots for a plugin: the registry's curated list when present,
|
|
518
|
+
* otherwise lazily extracted from the repo README. Only ever called AFTER
|
|
519
|
+
* the user opens the detail dialog — browsing the list must make zero
|
|
520
|
+
* external requests. Failures resolve to [] (silent degradation).
|
|
521
|
+
*/
|
|
522
|
+
function pluginScreenshots(plugin) {
|
|
523
|
+
const curated = safeScreenshots(plugin.screenshots);
|
|
524
|
+
if (curated.length > 0) return Promise.resolve(curated);
|
|
525
|
+
const m = /^https:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\/tree\/[^/]+\/(.+?))?\/?$/.exec(plugin.url);
|
|
526
|
+
if (m === null) return Promise.resolve([]);
|
|
527
|
+
const [, owner, repo, subpath = null] = m;
|
|
528
|
+
const cacheKey = plugin.url;
|
|
529
|
+
const cached = readmeShotsCache.get(cacheKey);
|
|
530
|
+
if (cached !== void 0) return cached;
|
|
531
|
+
const fetchReadme = async (path) => {
|
|
532
|
+
try {
|
|
533
|
+
const res = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/${path === null ? "" : path + "/"}README.md`);
|
|
534
|
+
return res.ok ? await res.text() : null;
|
|
535
|
+
} catch {
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
const task = (async () => {
|
|
540
|
+
const sub = subpath === null ? null : await fetchReadme(subpath);
|
|
541
|
+
if (sub !== null) return extractReadmeImages(sub, owner, repo, subpath);
|
|
542
|
+
const root = await fetchReadme(null);
|
|
543
|
+
return root === null ? [] : extractReadmeImages(root, owner, repo, null);
|
|
544
|
+
})().catch(() => []);
|
|
545
|
+
readmeShotsCache.set(cacheKey, task);
|
|
546
|
+
return task;
|
|
547
|
+
}
|
|
457
548
|
//#endregion
|
|
458
549
|
//#region src/client/InstallToast.tsx
|
|
459
550
|
/**
|
|
@@ -482,7 +573,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
482
573
|
}
|
|
483
574
|
//#endregion
|
|
484
575
|
//#region \0dsh-css:/home/runner/work/dsh-market/dsh-market/src/client/Market.module.css.mjs
|
|
485
|
-
const css = ".eGUBIq_root{min-width:0;height:100%;color:var(--dsw-alias-label-primary,#1f2328);flex-direction:column;display:flex;position:relative}.eGUBIq_head{flex-direction:column;gap:12px;padding:4px 4px 12px;display:flex}.eGUBIq_title{margin:0;font-size:16px;font-weight:500;line-height:24px}.eGUBIq_sub{color:var(--dsw-alias-label-tertiary,#8b93a1);margin:0;font-size:14px;line-height:22px}.eGUBIq_searchInline{flex-shrink:0;width:200px;margin-bottom:6px}.eGUBIq_tabs{border-bottom:1px solid var(--dsw-alias-border-l2,#e5e7eb);align-items:flex-end;gap:2px;display:flex}.eGUBIq_tab{font:inherit;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:7px 12px;font-size:13px}.eGUBIq_tab.eGUBIq_on{color:var(--dsw-alias-brand-primary,#4f6ef7);border-bottom-color:var(--dsw-alias-brand-primary,#4f6ef7);font-weight:600}.eGUBIq_restart{background:var(--dsw-alias-bg-layer-2,#fdf3e3);border:1px solid var(--dsw-alias-border-l2,#f3e3c3);border-radius:8px;align-items:center;gap:8px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_body{flex:1;padding:12px 4px 24px;overflow-x:hidden;overflow-y:auto}.eGUBIq_cats{z-index:5;background:var(--dsw-alias-bg-layer-2,#f7f8fa);margin:-12px -4px 2px;padding:12px 4px 4px;position:sticky;top:-13px}.eGUBIq_catsRow{align-items:flex-start;gap:8px;display:flex;position:relative}.eGUBIq_filterWrap{flex-shrink:0;position:relative}.eGUBIq_filterBtn{border:1px solid var(--dsw-alias-border-l1,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-primary,#1f2328);font:inherit;cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:5px;padding:5px 11px;font-size:12px;line-height:18px;display:flex}.eGUBIq_filterBtn:hover,.eGUBIq_filterBtnOn{color:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_filterPanel{z-index:30;background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:10px;flex-direction:column;gap:10px;width:250px;padding:8px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 28px #00000024}.eGUBIq_filterGroup{flex-direction:column;gap:2px;display:flex}.eGUBIq_filterTitle{color:var(--dsw-alias-label-secondary,#6b7280);padding:4px 8px 2px;font-size:11px;font-weight:600}.eGUBIq_filterOption{cursor:pointer;color:var(--dsw-alias-label-primary,#1f2328);border-radius:6px;align-items:center;gap:8px;padding:5px 8px;font-size:12px;line-height:18px;display:flex}.eGUBIq_filterOption:hover{background:var(--dsw-alias-bg-layer-2,#f3f4f6)}.eGUBIq_filterOption input{margin:0}.eGUBIq_star{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_top{z-index:20;border:1px solid var(--dsw-alias-border-l1,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);width:38px;height:38px;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;border-radius:99px;font-size:16px;position:absolute;bottom:18px;right:18px;box-shadow:0 4px 14px #0000001f}.eGUBIq_top:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_tag{border:1px solid var(--dsw-alias-border-l3,#d9dde3);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:11px;line-height:16px}.eGUBIq_okState{color:var(--dsw-alias-state-success-primary,#16a34a);white-space:nowrap;font-size:12px;font-weight:600}.eGUBIq_dangerBtn.eGUBIq_dangerBtn{border-color:var(--dsw-alias-state-error-primary,#dc2626);color:var(--dsw-alias-state-error-primary,#dc2626)}.eGUBIq_dangerArmed.eGUBIq_dangerArmed{background:var(--dsw-alias-state-error-primary,#dc2626);color:#fff}.eGUBIq_warnBtn.eGUBIq_warnBtn{background:var(--dsw-alias-state-warn-primary,#ea580c);color:#fff}.eGUBIq_catsWrap{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_catsCollapsed{max-height:62px;overflow:hidden}.eGUBIq_catsToggle.eGUBIq_catsToggle{height:26px;min-height:26px;color:var(--dsw-alias-label-secondary,#6b7280);padding:0 6px}.eGUBIq_cmdDetails{margin:0}.eGUBIq_cmdSummary{cursor:pointer;width:fit-content;color:var(--dsw-alias-label-secondary,#6b7280);border-radius:6px;align-items:center;gap:6px;margin-left:-4px;padding:2px 4px;font-size:12px;font-weight:500;line-height:18px;list-style:none;display:flex}.eGUBIq_cmdSummary::-webkit-details-marker{display:none}.eGUBIq_cmdSummary:before{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;width:5px;height:5px;transition:transform .12s;transform:rotate(-45deg)translate(-1px,-1px)}.eGUBIq_cmdDetails[open]>.eGUBIq_cmdSummary:before{transform:rotate(45deg)translate(-1px,-1px)}.eGUBIq_cmdSummary:hover{color:var(--dsw-alias-label-primary,#1f2328)}.eGUBIq_cmd{background:var(--dsw-alias-bg-layer-2,#f3f4f6);word-break:break-all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:18px}.eGUBIq_warnLine{color:var(--dsw-alias-state-warn-primary,#b45309);margin:0;font-size:12px;font-weight:600;line-height:18px}.eGUBIq_modalNote{color:var(--dsw-alias-label-tertiary,#8b93a1);margin:12px 0 0;font-size:12px;line-height:18px}.eGUBIq_grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_sect{color:var(--dsw-alias-label-secondary,#6b7280);margin:14px 2px 8px;font-size:12px;font-weight:600}.eGUBIq_sect:first-child{margin-top:2px}.eGUBIq_swatches{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:8px;gap:0;height:34px;display:flex;overflow:hidden}.eGUBIq_themesGrid{margin-bottom:12px}.eGUBIq_swatches i{flex:1}.eGUBIq_card{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:12px;padding:12px 14px;display:flex}.eGUBIq_row1{align-items:center;gap:10px;min-width:0;display:flex}.eGUBIq_av{color:#fff;object-fit:cover;background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:14px;font-weight:700;display:grid}.eGUBIq_nm{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.eGUBIq_owner{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_desc{color:var(--dsw-alias-label-tertiary,#8b93a1);min-height:36px;margin:0;font-size:12px;line-height:18px}.eGUBIq_foot{align-items:center;gap:8px;margin-top:auto;display:flex}.eGUBIq_grow{flex:1}.eGUBIq_titleRow{align-items:center;gap:10px;display:flex}.eGUBIq_descTight{min-height:0}.eGUBIq_src{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px;text-decoration:none}.eGUBIq_src:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_dot{vertical-align:2px;margin-left:5px}.eGUBIq_act{flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;font-size:11px;display:flex}.eGUBIq_actLive{color:var(--dsw-alias-state-success-primary,#16a34a);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWarn{color:var(--dsw-alias-state-warn-primary,#b45309);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actBroken{color:var(--dsw-alias-state-error-primary,#dc2626);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWhy{margin:0}.eGUBIq_actWhy summary{cursor:pointer;color:var(--dsw-alias-label-secondary,#6b7280);font-size:11px}.eGUBIq_loading{color:var(--dsw-alias-label-secondary,#9ca3af);flex-direction:column;align-items:center;gap:12px;padding:48px;font-size:13px;display:flex}.eGUBIq_spin{border:3px solid var(--dsw-alias-border-l1,#e5e7eb);border-top-color:var(--dsw-alias-brand-primary,#4f6ef7);border-radius:99px;width:22px;height:22px;animation:.8s linear infinite eGUBIq_sp}@keyframes eGUBIq_sp{to{transform:rotate(360deg)}}.eGUBIq_progress{background:var(--dsw-alias-bg-layer-2,#f3f4f6);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:8px;flex-wrap:wrap;align-items:center;gap:9px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_bar{background:var(--dsw-alias-border-l1,#e5e7eb);border-radius:99px;width:100%;height:4px;overflow:hidden}.eGUBIq_barFill{background:var(--dsw-alias-brand-primary,#4f6ef7);border-radius:99px;height:100%;transition:width .6s}.eGUBIq_barWave{width:30%;animation:1.2s ease-in-out infinite eGUBIq_dshmSlide}@keyframes eGUBIq_dshmSlide{0%{margin-left:-30%}to{margin-left:100%}}.eGUBIq_irow .eGUBIq_progress{margin-top:8px}.eGUBIq_progress .eGUBIq_spin{border-width:2px;flex-shrink:0;width:14px;height:14px}.eGUBIq_progress code{text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.eGUBIq_empty{color:var(--dsw-alias-label-secondary,#9ca3af);text-align:center;padding:32px;font-size:13px}.eGUBIq_err{color:var(--dsw-alias-state-error-primary,#dc2626);white-space:pre-wrap;word-break:break-all;margin:8px 0;font-size:12px}.eGUBIq_irow{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;align-items:center;gap:10px;margin-bottom:8px;padding:12px 14px;display:flex}.eGUBIq_irowMissing{filter:grayscale();opacity:.5}.eGUBIq_irow>.eGUBIq_src,.eGUBIq_irow>.eGUBIq_owner,.eGUBIq_dangerBtn.eGUBIq_dangerBtn,.eGUBIq_warnBtn.eGUBIq_warnBtn,.eGUBIq_dangerArmed.eGUBIq_dangerArmed{white-space:nowrap;flex-shrink:0}.eGUBIq_spec{color:var(--dsw-alias-label-secondary,#9ca3af);font-family:ui-monospace,Menlo,monospace;font-size:11px}.eGUBIq_staleAction{margin-top:8px}.eGUBIq_pct{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0;font-size:11px;font-weight:600}.eGUBIq_cancelBtn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-secondary,#6b7280);font:inherit;cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:11px;line-height:16px}.eGUBIq_cancelBtn:hover{color:var(--dsw-alias-state-error-primary,#dc2626);border-color:var(--dsw-alias-state-error-primary,#dc2626)}.eGUBIq_pager{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 4px;display:flex}.eGUBIq_pagerPages{flex-wrap:wrap;flex:1;justify-content:center;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_pagerSize{flex-shrink:0;align-items:center;gap:4px;display:flex}.eGUBIq_sizeLabel{color:var(--dsw-alias-label-secondary,#6b7280);font-size:12px}.eGUBIq_sizeBtn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-secondary,#6b7280);font:inherit;cursor:pointer;border-radius:6px;padding:3px 8px;font-size:12px;line-height:18px}.eGUBIq_sizeBtn:hover{color:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_sizeOn{background:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;font-weight:600}.eGUBIq_pageBtn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-secondary,#6b7280);font:inherit;cursor:pointer;border-radius:6px;min-width:28px;padding:4px 10px;font-size:12px;line-height:18px}.eGUBIq_pageBtn:hover:not(:disabled){color:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_pageBtn:disabled{opacity:.45;cursor:default}.eGUBIq_pageOn{background:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;font-weight:600}.eGUBIq_pageEllipsis{color:var(--dsw-alias-label-secondary,#9ca3af);padding:0 2px;font-size:12px}.eGUBIq_pageInfo{color:var(--dsw-alias-label-secondary,#6b7280);white-space:nowrap;font-size:12px}.eGUBIq_backupGrid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_backupCard{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.eGUBIq_backupCard h3{margin:0;font-size:14px}.eGUBIq_backupCard p{color:var(--dsw-alias-label-secondary,#6b7280);margin:0;font-size:12px;line-height:18px}.eGUBIq_backupActions{flex-wrap:wrap;gap:8px;display:flex}.eGUBIq_backupButton{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);color:var(--dsw-alias-label-primary,#1f2328);cursor:pointer;border-radius:6px;align-items:center;padding:4px 10px;font-size:12px;line-height:18px;text-decoration:none;display:inline-flex;position:relative}.eGUBIq_backupButton[aria-disabled=true]{opacity:.5;pointer-events:none}.eGUBIq_backupButton input{opacity:0;width:1px;height:1px;position:absolute}.eGUBIq_backupPrimary{background:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff}.eGUBIq_backupInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);width:100%;color:var(--dsw-alias-label-primary,#1f2328);font:inherit;border-radius:8px;padding:7px 9px;font-size:12px}.eGUBIq_backupCheck{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.eGUBIq_backupWarn{margin:0;font-size:12px;line-height:18px;color:var(--dsw-alias-state-warn-primary,#b45309)!important}.eGUBIq_backupMessage{color:var(--dsw-alias-label-secondary,#6b7280);grid-column:1/-1;font-size:12px}";
|
|
576
|
+
const css = ".eGUBIq_root{min-width:0;height:100%;color:var(--dsw-alias-label-primary,#1f2328);flex-direction:column;display:flex;position:relative}.eGUBIq_head{flex-direction:column;gap:12px;padding:4px 4px 12px;display:flex}.eGUBIq_title{margin:0;font-size:16px;font-weight:500;line-height:24px}.eGUBIq_sub{color:var(--dsw-alias-label-tertiary,#8b93a1);margin:0;font-size:14px;line-height:22px}.eGUBIq_searchInline{flex-shrink:0;width:200px;margin-bottom:6px}.eGUBIq_tabs{border-bottom:1px solid var(--dsw-alias-border-l2,#e5e7eb);align-items:flex-end;gap:2px;display:flex}.eGUBIq_tab{font:inherit;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:7px 12px;font-size:13px}.eGUBIq_tab.eGUBIq_on{color:var(--dsw-alias-brand-primary,#4f6ef7);border-bottom-color:var(--dsw-alias-brand-primary,#4f6ef7);font-weight:600}.eGUBIq_restart{background:var(--dsw-alias-bg-layer-2,#fdf3e3);border:1px solid var(--dsw-alias-border-l2,#f3e3c3);border-radius:8px;align-items:center;gap:8px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_body{flex:1;padding:12px 4px 24px;overflow-x:hidden;overflow-y:auto}.eGUBIq_cats{z-index:5;background:var(--dsw-alias-bg-layer-2,#f7f8fa);margin:-12px -4px 2px;padding:12px 4px 4px;position:sticky;top:-13px}.eGUBIq_catsRow{align-items:flex-start;gap:8px;display:flex;position:relative}.eGUBIq_filterWrap{flex-shrink:0;position:relative}.eGUBIq_filterBtn{border:1px solid var(--dsw-alias-border-l1,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-primary,#1f2328);font:inherit;cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:5px;padding:5px 11px;font-size:12px;line-height:18px;display:flex}.eGUBIq_filterBtn:hover,.eGUBIq_filterBtnOn{color:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_filterPanel{z-index:30;background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:10px;flex-direction:column;gap:10px;width:250px;padding:8px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 8px 28px #00000024}.eGUBIq_filterGroup{flex-direction:column;gap:2px;display:flex}.eGUBIq_filterTitle{color:var(--dsw-alias-label-secondary,#6b7280);padding:4px 8px 2px;font-size:11px;font-weight:600}.eGUBIq_filterOption{cursor:pointer;color:var(--dsw-alias-label-primary,#1f2328);border-radius:6px;align-items:center;gap:8px;padding:5px 8px;font-size:12px;line-height:18px;display:flex}.eGUBIq_filterOption:hover{background:var(--dsw-alias-bg-layer-2,#f3f4f6)}.eGUBIq_filterOption input{margin:0}.eGUBIq_star{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_top{z-index:20;border:1px solid var(--dsw-alias-border-l1,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);width:38px;height:38px;color:var(--dsw-alias-label-secondary,#6b7280);cursor:pointer;border-radius:99px;font-size:16px;position:absolute;bottom:18px;right:18px;box-shadow:0 4px 14px #0000001f}.eGUBIq_top:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_tag{border:1px solid var(--dsw-alias-border-l3,#d9dde3);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:11px;line-height:16px}.eGUBIq_okState{color:var(--dsw-alias-state-success-primary,#16a34a);white-space:nowrap;font-size:12px;font-weight:600}.eGUBIq_dangerBtn.eGUBIq_dangerBtn{border-color:var(--dsw-alias-state-error-primary,#dc2626);color:var(--dsw-alias-state-error-primary,#dc2626)}.eGUBIq_dangerArmed.eGUBIq_dangerArmed{background:var(--dsw-alias-state-error-primary,#dc2626);color:#fff}.eGUBIq_warnBtn.eGUBIq_warnBtn{background:var(--dsw-alias-state-warn-primary,#ea580c);color:#fff}.eGUBIq_catsWrap{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_catsCollapsed{max-height:62px;overflow:hidden}.eGUBIq_catsToggle.eGUBIq_catsToggle{height:26px;min-height:26px;color:var(--dsw-alias-label-secondary,#6b7280);padding:0 6px}.eGUBIq_shots{-webkit-overflow-scrolling:touch;scrollbar-width:thin;gap:8px;margin:0 0 8px;padding:2px 0 6px;display:flex;overflow-x:auto}.eGUBIq_shot{object-fit:cover;border:1px solid var(--dsw-alias-border-default,#e5e7eb);background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex:none;max-width:260px;height:150px}.eGUBIq_cmdDetails{margin:0}.eGUBIq_cmdSummary{cursor:pointer;width:fit-content;color:var(--dsw-alias-label-secondary,#6b7280);border-radius:6px;align-items:center;gap:6px;margin-left:-4px;padding:2px 4px;font-size:12px;font-weight:500;line-height:18px;list-style:none;display:flex}.eGUBIq_cmdSummary::-webkit-details-marker{display:none}.eGUBIq_cmdSummary:before{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;width:5px;height:5px;transition:transform .12s;transform:rotate(-45deg)translate(-1px,-1px)}.eGUBIq_cmdDetails[open]>.eGUBIq_cmdSummary:before{transform:rotate(45deg)translate(-1px,-1px)}.eGUBIq_cmdSummary:hover{color:var(--dsw-alias-label-primary,#1f2328)}.eGUBIq_cmd{background:var(--dsw-alias-bg-layer-2,#f3f4f6);word-break:break-all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;line-height:18px}.eGUBIq_warnLine{color:var(--dsw-alias-state-warn-primary,#b45309);margin:0;font-size:12px;font-weight:600;line-height:18px}.eGUBIq_modalNote{color:var(--dsw-alias-label-tertiary,#8b93a1);margin:12px 0 0;font-size:12px;line-height:18px}.eGUBIq_grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_sect{color:var(--dsw-alias-label-secondary,#6b7280);margin:14px 2px 8px;font-size:12px;font-weight:600}.eGUBIq_sect:first-child{margin-top:2px}.eGUBIq_swatches{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:8px;gap:0;height:34px;display:flex;overflow:hidden}.eGUBIq_themesGrid{margin-bottom:12px}.eGUBIq_swatches i{flex:1}.eGUBIq_card{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:12px;padding:12px 14px;display:flex}.eGUBIq_row1{align-items:center;gap:10px;min-width:0;display:flex}.eGUBIq_av{color:#fff;object-fit:cover;background:var(--dsw-alias-bg-layer-2,#f3f4f6);border-radius:8px;flex-shrink:0;place-items:center;width:32px;height:32px;font-size:14px;font-weight:700;display:grid}.eGUBIq_nm{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;overflow:hidden}.eGUBIq_owner{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px}.eGUBIq_desc{color:var(--dsw-alias-label-tertiary,#8b93a1);min-height:36px;margin:0;font-size:12px;line-height:18px}.eGUBIq_foot{align-items:center;gap:8px;margin-top:auto;display:flex}.eGUBIq_grow{flex:1}.eGUBIq_titleRow{align-items:center;gap:10px;display:flex}.eGUBIq_descTight{min-height:0}.eGUBIq_src{color:var(--dsw-alias-label-secondary,#9ca3af);font-size:11px;text-decoration:none}.eGUBIq_src:hover{color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_dot{vertical-align:2px;margin-left:5px}.eGUBIq_act{flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;font-size:11px;display:flex}.eGUBIq_actLive{color:var(--dsw-alias-state-success-primary,#16a34a);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWarn{color:var(--dsw-alias-state-warn-primary,#b45309);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actBroken{color:var(--dsw-alias-state-error-primary,#dc2626);align-items:center;gap:4px;font-weight:600;display:inline-flex}.eGUBIq_actWhy{margin:0}.eGUBIq_actWhy summary{cursor:pointer;color:var(--dsw-alias-label-secondary,#6b7280);font-size:11px}.eGUBIq_loading{color:var(--dsw-alias-label-secondary,#9ca3af);flex-direction:column;align-items:center;gap:12px;padding:48px;font-size:13px;display:flex}.eGUBIq_spin{border:3px solid var(--dsw-alias-border-l1,#e5e7eb);border-top-color:var(--dsw-alias-brand-primary,#4f6ef7);border-radius:99px;width:22px;height:22px;animation:.8s linear infinite eGUBIq_sp}@keyframes eGUBIq_sp{to{transform:rotate(360deg)}}.eGUBIq_progress{background:var(--dsw-alias-bg-layer-2,#f3f4f6);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:8px;flex-wrap:wrap;align-items:center;gap:9px;margin:0;padding:8px 12px;font-size:12px;display:flex}.eGUBIq_bar{background:var(--dsw-alias-border-l1,#e5e7eb);border-radius:99px;width:100%;height:4px;overflow:hidden}.eGUBIq_barFill{background:var(--dsw-alias-brand-primary,#4f6ef7);border-radius:99px;height:100%;transition:width .6s}.eGUBIq_barWave{width:30%;animation:1.2s ease-in-out infinite eGUBIq_dshmSlide}@keyframes eGUBIq_dshmSlide{0%{margin-left:-30%}to{margin-left:100%}}.eGUBIq_irow .eGUBIq_progress{margin-top:8px}.eGUBIq_progress .eGUBIq_spin{border-width:2px;flex-shrink:0;width:14px;height:14px}.eGUBIq_progress code{text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.eGUBIq_empty{color:var(--dsw-alias-label-secondary,#9ca3af);text-align:center;padding:32px;font-size:13px}.eGUBIq_err{color:var(--dsw-alias-state-error-primary,#dc2626);white-space:pre-wrap;word-break:break-all;margin:8px 0;font-size:12px}.eGUBIq_irow{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;align-items:center;gap:10px;margin-bottom:8px;padding:12px 14px;display:flex}.eGUBIq_irowMissing{filter:grayscale();opacity:.5}.eGUBIq_irow>.eGUBIq_src,.eGUBIq_irow>.eGUBIq_owner,.eGUBIq_dangerBtn.eGUBIq_dangerBtn,.eGUBIq_warnBtn.eGUBIq_warnBtn,.eGUBIq_dangerArmed.eGUBIq_dangerArmed{white-space:nowrap;flex-shrink:0}.eGUBIq_spec{color:var(--dsw-alias-label-secondary,#9ca3af);font-family:ui-monospace,Menlo,monospace;font-size:11px}.eGUBIq_staleAction{margin-top:8px}.eGUBIq_pct{color:var(--dsw-alias-label-secondary,#6b7280);flex-shrink:0;font-size:11px;font-weight:600}.eGUBIq_cancelBtn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-secondary,#6b7280);font:inherit;cursor:pointer;white-space:nowrap;border-radius:6px;flex-shrink:0;padding:2px 10px;font-size:11px;line-height:16px}.eGUBIq_cancelBtn:hover{color:var(--dsw-alias-state-error-primary,#dc2626);border-color:var(--dsw-alias-state-error-primary,#dc2626)}.eGUBIq_pager{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 4px;display:flex}.eGUBIq_pagerPages{flex-wrap:wrap;flex:1;justify-content:center;align-items:center;gap:6px;min-width:0;display:flex}.eGUBIq_pagerSize{flex-shrink:0;align-items:center;gap:4px;display:flex}.eGUBIq_sizeLabel{color:var(--dsw-alias-label-secondary,#6b7280);font-size:12px}.eGUBIq_sizeBtn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-secondary,#6b7280);font:inherit;cursor:pointer;border-radius:6px;padding:3px 8px;font-size:12px;line-height:18px}.eGUBIq_sizeBtn:hover{color:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_sizeOn{background:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;font-weight:600}.eGUBIq_pageBtn{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);color:var(--dsw-alias-label-secondary,#6b7280);font:inherit;cursor:pointer;border-radius:6px;min-width:28px;padding:4px 10px;font-size:12px;line-height:18px}.eGUBIq_pageBtn:hover:not(:disabled){color:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7)}.eGUBIq_pageBtn:disabled{opacity:.45;cursor:default}.eGUBIq_pageOn{background:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff;font-weight:600}.eGUBIq_pageEllipsis{color:var(--dsw-alias-label-secondary,#9ca3af);padding:0 2px;font-size:12px}.eGUBIq_pageInfo{color:var(--dsw-alias-label-secondary,#6b7280);white-space:nowrap;font-size:12px}.eGUBIq_backupGrid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;display:grid}.eGUBIq_backupCard{background:var(--dsw-alias-bg-layer-1,#fff);border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:12px;flex-direction:column;gap:10px;padding:16px;display:flex}.eGUBIq_backupCard h3{margin:0;font-size:14px}.eGUBIq_backupCard p{color:var(--dsw-alias-label-secondary,#6b7280);margin:0;font-size:12px;line-height:18px}.eGUBIq_backupActions{flex-wrap:wrap;gap:8px;display:flex}.eGUBIq_backupButton{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);color:var(--dsw-alias-label-primary,#1f2328);cursor:pointer;border-radius:6px;align-items:center;padding:4px 10px;font-size:12px;line-height:18px;text-decoration:none;display:inline-flex;position:relative}.eGUBIq_backupButton[aria-disabled=true]{opacity:.5;pointer-events:none}.eGUBIq_backupButton input{opacity:0;width:1px;height:1px;position:absolute}.eGUBIq_backupPrimary{background:var(--dsw-alias-brand-primary,#4f6ef7);border-color:var(--dsw-alias-brand-primary,#4f6ef7);color:#fff}.eGUBIq_backupInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-1,#fff);width:100%;color:var(--dsw-alias-label-primary,#1f2328);font:inherit;border-radius:8px;padding:7px 9px;font-size:12px}.eGUBIq_backupCheck{cursor:pointer;align-items:center;gap:6px;font-size:12px;display:flex}.eGUBIq_backupWarn{margin:0;font-size:12px;line-height:18px;color:var(--dsw-alias-state-warn-primary,#b45309)!important}.eGUBIq_backupMessage{color:var(--dsw-alias-label-secondary,#6b7280);grid-column:1/-1;font-size:12px}";
|
|
486
577
|
const tagId = "dshmarket/Market.module.css";
|
|
487
578
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
488
579
|
const tag = document.createElement("style");
|
|
@@ -493,95 +584,97 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
493
584
|
}
|
|
494
585
|
var Market_module_css_default = {
|
|
495
586
|
"actLive": "eGUBIq_actLive",
|
|
496
|
-
"
|
|
497
|
-
"backupCard": "eGUBIq_backupCard",
|
|
498
|
-
"pageInfo": "eGUBIq_pageInfo",
|
|
499
|
-
"title": "eGUBIq_title",
|
|
500
|
-
"backupButton": "eGUBIq_backupButton",
|
|
501
|
-
"descTight": "eGUBIq_descTight",
|
|
502
|
-
"err": "eGUBIq_err",
|
|
503
|
-
"sp": "eGUBIq_sp",
|
|
504
|
-
"catsRow": "eGUBIq_catsRow",
|
|
505
|
-
"warnLine": "eGUBIq_warnLine",
|
|
506
|
-
"src": "eGUBIq_src",
|
|
507
|
-
"actWhy": "eGUBIq_actWhy",
|
|
508
|
-
"filterGroup": "eGUBIq_filterGroup",
|
|
509
|
-
"actBroken": "eGUBIq_actBroken",
|
|
510
|
-
"empty": "eGUBIq_empty",
|
|
511
|
-
"sizeOn": "eGUBIq_sizeOn",
|
|
512
|
-
"dangerBtn": "eGUBIq_dangerBtn",
|
|
513
|
-
"backupMessage": "eGUBIq_backupMessage",
|
|
514
|
-
"owner": "eGUBIq_owner",
|
|
515
|
-
"tabs": "eGUBIq_tabs",
|
|
516
|
-
"cancelBtn": "eGUBIq_cancelBtn",
|
|
517
|
-
"pager": "eGUBIq_pager",
|
|
518
|
-
"card": "eGUBIq_card",
|
|
587
|
+
"okState": "eGUBIq_okState",
|
|
519
588
|
"filterWrap": "eGUBIq_filterWrap",
|
|
520
|
-
"row1": "eGUBIq_row1",
|
|
521
|
-
"dot": "eGUBIq_dot",
|
|
522
589
|
"foot": "eGUBIq_foot",
|
|
523
|
-
"
|
|
524
|
-
"
|
|
525
|
-
"cats": "eGUBIq_cats",
|
|
526
|
-
"sub": "eGUBIq_sub",
|
|
527
|
-
"spec": "eGUBIq_spec",
|
|
528
|
-
"restart": "eGUBIq_restart",
|
|
529
|
-
"catsToggle": "eGUBIq_catsToggle",
|
|
530
|
-
"titleRow": "eGUBIq_titleRow",
|
|
531
|
-
"sizeBtn": "eGUBIq_sizeBtn",
|
|
532
|
-
"barFill": "eGUBIq_barFill",
|
|
533
|
-
"okState": "eGUBIq_okState",
|
|
534
|
-
"av": "eGUBIq_av",
|
|
535
|
-
"desc": "eGUBIq_desc",
|
|
590
|
+
"tab": "eGUBIq_tab",
|
|
591
|
+
"tabs": "eGUBIq_tabs",
|
|
536
592
|
"loading": "eGUBIq_loading",
|
|
593
|
+
"barFill": "eGUBIq_barFill",
|
|
594
|
+
"searchInline": "eGUBIq_searchInline",
|
|
595
|
+
"pageBtn": "eGUBIq_pageBtn",
|
|
596
|
+
"sub": "eGUBIq_sub",
|
|
597
|
+
"tag": "eGUBIq_tag",
|
|
598
|
+
"backupGrid": "eGUBIq_backupGrid",
|
|
599
|
+
"dangerBtn": "eGUBIq_dangerBtn",
|
|
600
|
+
"barWave": "eGUBIq_barWave",
|
|
537
601
|
"pct": "eGUBIq_pct",
|
|
538
|
-
"
|
|
539
|
-
"filterBtn": "eGUBIq_filterBtn",
|
|
540
|
-
"grow": "eGUBIq_grow",
|
|
541
|
-
"on": "eGUBIq_on",
|
|
542
|
-
"themesGrid": "eGUBIq_themesGrid",
|
|
543
|
-
"dshmSlide": "eGUBIq_dshmSlide",
|
|
544
|
-
"irowMissing": "eGUBIq_irowMissing",
|
|
545
|
-
"filterOption": "eGUBIq_filterOption",
|
|
602
|
+
"filterPanel": "eGUBIq_filterPanel",
|
|
546
603
|
"filterTitle": "eGUBIq_filterTitle",
|
|
547
|
-
"
|
|
548
|
-
"
|
|
549
|
-
"cmd": "eGUBIq_cmd",
|
|
550
|
-
"head": "eGUBIq_head",
|
|
551
|
-
"root": "eGUBIq_root",
|
|
552
|
-
"sect": "eGUBIq_sect",
|
|
553
|
-
"progress": "eGUBIq_progress",
|
|
554
|
-
"pagerSize": "eGUBIq_pagerSize",
|
|
604
|
+
"desc": "eGUBIq_desc",
|
|
605
|
+
"actWarn": "eGUBIq_actWarn",
|
|
555
606
|
"sizeLabel": "eGUBIq_sizeLabel",
|
|
556
|
-
"
|
|
557
|
-
"
|
|
558
|
-
"
|
|
559
|
-
"
|
|
560
|
-
"
|
|
607
|
+
"sp": "eGUBIq_sp",
|
|
608
|
+
"sizeBtn": "eGUBIq_sizeBtn",
|
|
609
|
+
"backupCard": "eGUBIq_backupCard",
|
|
610
|
+
"head": "eGUBIq_head",
|
|
611
|
+
"src": "eGUBIq_src",
|
|
612
|
+
"empty": "eGUBIq_empty",
|
|
613
|
+
"on": "eGUBIq_on",
|
|
614
|
+
"av": "eGUBIq_av",
|
|
615
|
+
"pager": "eGUBIq_pager",
|
|
616
|
+
"backupButton": "eGUBIq_backupButton",
|
|
561
617
|
"backupInput": "eGUBIq_backupInput",
|
|
562
|
-
"
|
|
618
|
+
"swatches": "eGUBIq_swatches",
|
|
619
|
+
"sect": "eGUBIq_sect",
|
|
620
|
+
"filterBtn": "eGUBIq_filterBtn",
|
|
621
|
+
"catsWrap": "eGUBIq_catsWrap",
|
|
622
|
+
"root": "eGUBIq_root",
|
|
623
|
+
"top": "eGUBIq_top",
|
|
624
|
+
"title": "eGUBIq_title",
|
|
563
625
|
"backupCheck": "eGUBIq_backupCheck",
|
|
564
626
|
"irow": "eGUBIq_irow",
|
|
565
|
-
"
|
|
627
|
+
"filterOption": "eGUBIq_filterOption",
|
|
628
|
+
"grow": "eGUBIq_grow",
|
|
629
|
+
"cancelBtn": "eGUBIq_cancelBtn",
|
|
630
|
+
"pagerSize": "eGUBIq_pagerSize",
|
|
566
631
|
"modalNote": "eGUBIq_modalNote",
|
|
567
|
-
"
|
|
632
|
+
"dshmSlide": "eGUBIq_dshmSlide",
|
|
633
|
+
"filterGroup": "eGUBIq_filterGroup",
|
|
634
|
+
"card": "eGUBIq_card",
|
|
635
|
+
"catsCollapsed": "eGUBIq_catsCollapsed",
|
|
636
|
+
"body": "eGUBIq_body",
|
|
637
|
+
"cmdSummary": "eGUBIq_cmdSummary",
|
|
638
|
+
"actWhy": "eGUBIq_actWhy",
|
|
639
|
+
"star": "eGUBIq_star",
|
|
640
|
+
"cats": "eGUBIq_cats",
|
|
641
|
+
"bar": "eGUBIq_bar",
|
|
642
|
+
"irowMissing": "eGUBIq_irowMissing",
|
|
643
|
+
"sizeOn": "eGUBIq_sizeOn",
|
|
644
|
+
"backupPrimary": "eGUBIq_backupPrimary",
|
|
645
|
+
"backupActions": "eGUBIq_backupActions",
|
|
568
646
|
"nm": "eGUBIq_nm",
|
|
647
|
+
"warnBtn": "eGUBIq_warnBtn",
|
|
648
|
+
"pageEllipsis": "eGUBIq_pageEllipsis",
|
|
649
|
+
"warnLine": "eGUBIq_warnLine",
|
|
650
|
+
"spec": "eGUBIq_spec",
|
|
651
|
+
"staleAction": "eGUBIq_staleAction",
|
|
569
652
|
"grid": "eGUBIq_grid",
|
|
570
|
-
"
|
|
571
|
-
"
|
|
572
|
-
"
|
|
573
|
-
"
|
|
653
|
+
"descTight": "eGUBIq_descTight",
|
|
654
|
+
"dot": "eGUBIq_dot",
|
|
655
|
+
"shot": "eGUBIq_shot",
|
|
656
|
+
"backupMessage": "eGUBIq_backupMessage",
|
|
574
657
|
"filterBtnOn": "eGUBIq_filterBtnOn",
|
|
658
|
+
"cmdDetails": "eGUBIq_cmdDetails",
|
|
659
|
+
"pageOn": "eGUBIq_pageOn",
|
|
660
|
+
"restart": "eGUBIq_restart",
|
|
661
|
+
"backupWarn": "eGUBIq_backupWarn",
|
|
662
|
+
"themesGrid": "eGUBIq_themesGrid",
|
|
663
|
+
"owner": "eGUBIq_owner",
|
|
664
|
+
"pageInfo": "eGUBIq_pageInfo",
|
|
665
|
+
"catsRow": "eGUBIq_catsRow",
|
|
575
666
|
"act": "eGUBIq_act",
|
|
576
|
-
"
|
|
577
|
-
"top": "eGUBIq_top",
|
|
578
|
-
"staleAction": "eGUBIq_staleAction",
|
|
579
|
-
"catsWrap": "eGUBIq_catsWrap",
|
|
580
|
-
"tab": "eGUBIq_tab",
|
|
667
|
+
"catsToggle": "eGUBIq_catsToggle",
|
|
581
668
|
"spin": "eGUBIq_spin",
|
|
669
|
+
"progress": "eGUBIq_progress",
|
|
670
|
+
"err": "eGUBIq_err",
|
|
582
671
|
"pagerPages": "eGUBIq_pagerPages",
|
|
583
|
-
"
|
|
584
|
-
"
|
|
672
|
+
"dangerArmed": "eGUBIq_dangerArmed",
|
|
673
|
+
"shots": "eGUBIq_shots",
|
|
674
|
+
"row1": "eGUBIq_row1",
|
|
675
|
+
"titleRow": "eGUBIq_titleRow",
|
|
676
|
+
"actBroken": "eGUBIq_actBroken",
|
|
677
|
+
"cmd": "eGUBIq_cmd"
|
|
585
678
|
};
|
|
586
679
|
//#endregion
|
|
587
680
|
//#region src/client/MarketSection.tsx
|
|
@@ -639,6 +732,41 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
639
732
|
});
|
|
640
733
|
}
|
|
641
734
|
/**
|
|
735
|
+
* AppStore-style screenshot strip in the install detail dialog (#61).
|
|
736
|
+
* Curated registry screenshots win; otherwise images are extracted from the
|
|
737
|
+
* repo README. Requests start only once the dialog opens; failures — no
|
|
738
|
+
* README, no images, broken links — degrade to rendering nothing at all.
|
|
739
|
+
*/
|
|
740
|
+
function ScreenshotStrip({ plugin }) {
|
|
741
|
+
const [shots, setShots] = (0, react.useState)([]);
|
|
742
|
+
const [broken, setBroken] = (0, react.useState)([]);
|
|
743
|
+
(0, react.useEffect)(() => {
|
|
744
|
+
let live = true;
|
|
745
|
+
setShots([]);
|
|
746
|
+
setBroken([]);
|
|
747
|
+
pluginScreenshots(plugin).then((list) => {
|
|
748
|
+
if (live) setShots(list);
|
|
749
|
+
});
|
|
750
|
+
return () => {
|
|
751
|
+
live = false;
|
|
752
|
+
};
|
|
753
|
+
}, [plugin]);
|
|
754
|
+
const visible = shots.filter((src) => !broken.includes(src));
|
|
755
|
+
if (visible.length === 0) return null;
|
|
756
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
757
|
+
className: Market_module_css_default.shots,
|
|
758
|
+
children: visible.map((src) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
759
|
+
className: Market_module_css_default.shot,
|
|
760
|
+
src,
|
|
761
|
+
alt: "",
|
|
762
|
+
loading: "lazy",
|
|
763
|
+
decoding: "async",
|
|
764
|
+
referrerPolicy: "no-referrer",
|
|
765
|
+
onError: () => setBroken((prev) => prev.includes(src) ? prev : prev.concat(src))
|
|
766
|
+
}, src))
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
642
770
|
* Official-style market glyph: the shared block-grid brand mark converted to
|
|
643
771
|
* the official monochrome icon form (16×16, fill="currentColor") so it
|
|
644
772
|
* follows the active theme. Mirrors the settings-nav glyph used for the
|
|
@@ -2334,6 +2462,7 @@ window.__ModuleLoader__.load({ id: "dshmarket", factory: (require) => {
|
|
|
2334
2462
|
children: t("confirm")
|
|
2335
2463
|
})] }),
|
|
2336
2464
|
children: [
|
|
2465
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScreenshotStrip, { plugin: confirming }),
|
|
2337
2466
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
|
|
2338
2467
|
className: Market_module_css_default.cmdDetails,
|
|
2339
2468
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", {
|