@1e0zj/dsh-plugin-mall 0.1.4 → 0.1.6

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/client.js +43 -32
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1e0zj/dsh-plugin-mall",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "dsh 插件市场:搜索 GitHub dsh-plugin 话题下的插件仓库,一键安装到本地 dsh profile(agent 工具 + 设置页插件市场 tab)",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/client.js CHANGED
@@ -30,8 +30,6 @@ window.__ModuleLoader__.load({
30
30
  ".mkt_btnDanger:hover:not(:disabled){border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}",
31
31
  ".mkt_btnSm{padding:3px 10px;font-size:12px}",
32
32
  ".mkt_error{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}",
33
- ".mkt_columns{display:grid;grid-template-columns:1fr 320px;gap:14px;align-items:start}",
34
- "@media (max-width:860px){.mkt_columns{grid-template-columns:1fr}}",
35
33
  ".mkt_list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;align-items:stretch;min-width:0}",
36
34
  "@media (max-width:820px){.mkt_list{grid-template-columns:minmax(0,1fr)}}",
37
35
  ".mkt_listHead{grid-column:1/-1;font-size:12px;color:var(--dsw-alias-label-tertiary)}",
@@ -41,16 +39,18 @@ window.__ModuleLoader__.load({
41
39
  ".mkt_meta{font-size:12px;color:var(--dsw-alias-label-tertiary)}",
42
40
  ".mkt_desc{font-size:12.5px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}",
43
41
  ".mkt_cardActions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:auto;padding-top:4px}",
44
- ".mkt_rail{display:flex;flex-direction:column;gap:10px;min-width:0}",
42
+ ".mkt_infoCard{max-width:640px}",
45
43
  ".mkt_panelTitle{font-size:13px;font-weight:600;color:var(--dsw-alias-label-primary);margin:0}",
44
+ ".mkt_panelRow{display:flex;align-items:center;gap:8px}",
45
+ ".mkt_panelRow .mkt_link{margin-left:auto}",
46
46
  ".mkt_pre{font-family:Consolas,Monaco,monospace;font-size:11.5px;line-height:16px;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-secondary,#f6f7f8);border-radius:6px;padding:8px;max-height:220px;overflow:auto;white-space:pre-wrap;word-break:break-all}",
47
47
  ".mkt_ok{color:var(--dsw-alias-state-success-primary,#2f855a)}",
48
48
  ".mkt_badge{display:inline-block;border-radius:999px;padding:1px 8px;font-size:11px;border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary)}",
49
49
  ".mkt_link{color:var(--dsw-alias-state-business-primary);font-size:12px;text-decoration:none;cursor:pointer}",
50
50
  ".mkt_installedHead{display:flex;align-items:center;gap:8px;width:100%;background:none;border:0;padding:0;margin:0;cursor:pointer;font:inherit;text-align:left}",
51
51
  ".mkt_installedHead:hover .mkt_panelTitle{color:var(--dsw-alias-state-business-primary)}",
52
- ".mkt_depList{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 14px;margin-top:8px}",
53
- "@media (max-width:820px){.mkt_depList{grid-template-columns:minmax(0,1fr)}}",
52
+ ".mkt_installedToggle{margin-left:auto}",
53
+ ".mkt_depList{display:flex;flex-direction:column;gap:6px;margin-top:8px}",
54
54
  ".mkt_depRow{display:flex;justify-content:space-between;align-items:center;gap:8px}",
55
55
  ].join("\n");
56
56
  var tagId = "@1e0zj/dsh-plugin-mall/market-tab.css";
@@ -154,8 +154,11 @@ window.__ModuleLoader__.load({
154
154
  var info = props.info;
155
155
  if (!info) return null;
156
156
  var data = info.data;
157
- return h("div", { className: "mkt_card" },
158
- h("p", { className: "mkt_panelTitle" }, "仓库详情"),
157
+ return h("div", { className: "mkt_card mkt_infoCard", ref: props.panelRef },
158
+ h("div", { className: "mkt_panelRow" },
159
+ h("p", { className: "mkt_panelTitle" }, "仓库详情"),
160
+ props.onClose ? h("span", { className: "mkt_link", onClick: props.onClose }, "✕ 关闭") : null
161
+ ),
159
162
  info.loading ? h("div", { className: "mkt_meta" }, "加载中…")
160
163
  : info.error ? h("div", { className: "mkt_error" }, info.error)
161
164
  : !data ? null
@@ -220,7 +223,7 @@ window.__ModuleLoader__.load({
220
223
  },
221
224
  h("span", { className: "mkt_panelTitle" }, "已装插件"),
222
225
  h("span", { className: "mkt_badge" }, count + " 个"),
223
- h("span", { className: "mkt_meta" }, open ? "收起 ▲" : "展开 ▼")
226
+ h("span", { className: "mkt_meta mkt_installedToggle" }, open ? "收起 ▲" : "展开 ▼")
224
227
  ),
225
228
  installed.error
226
229
  ? h("div", { className: "mkt_error" }, installed.error)
@@ -271,6 +274,7 @@ window.__ModuleLoader__.load({
271
274
  var _removing = useState({});
272
275
  var removing = _removing[0];
273
276
  var setRemoving = _removing[1];
277
+ var infoRef = useRef(null);
274
278
 
275
279
  var call = useCallback(function (endpoint, payload) {
276
280
  return rpc.call("/market", endpoint, payload || {}).then(function (res) {
@@ -300,6 +304,17 @@ window.__ModuleLoader__.load({
300
304
  });
301
305
  }, [call]);
302
306
 
307
+ var doCloseInfo = useCallback(function () {
308
+ setInfo(null);
309
+ }, []);
310
+
311
+ // 详情面板在列表上方;点"详情"时平滑滚到面板,免得用户找不到。
312
+ useEffect(function () {
313
+ if (info && infoRef.current && typeof infoRef.current.scrollIntoView === "function") {
314
+ infoRef.current.scrollIntoView({ behavior: "smooth", block: "nearest" });
315
+ }
316
+ }, [info]);
317
+
303
318
  var refreshInstalled = useCallback(function () {
304
319
  call("installed", {}).then(function (value) {
305
320
  setInstalled(value);
@@ -388,30 +403,26 @@ window.__ModuleLoader__.load({
388
403
  ),
389
404
  error ? h("div", { className: "mkt_error" }, error) : null,
390
405
  h(InstalledPanel, { installed: installed, removing: removing, onUninstall: doUninstall }),
391
- h("div", { className: "mkt_columns" },
392
- h("div", { className: "mkt_list" },
393
- results == null
394
- ? h("div", { className: "mkt_meta mkt_listHead" }, loading ? "正在加载最热插件…" : "—")
395
- : results.items.length === 0
396
- ? h("div", { className: "mkt_meta mkt_listHead" }, "没有匹配的仓库。")
397
- : h(React.Fragment, null,
398
- h("div", { className: "mkt_meta mkt_listHead" }, "共 " + results.total + " 个仓库(显示 " + results.items.length + " 个)"),
399
- results.items.map(function (item) {
400
- return h(RepoCard, {
401
- key: item.fullName,
402
- item: item,
403
- installing: installing[item.fullName] === true,
404
- onInstall: doInstall,
405
- onInfo: doInfo,
406
- });
407
- })
408
- )
409
- ),
410
- h("div", { className: "mkt_rail" },
411
- h(InfoPanel, { info: info, onInstall: doInstall }),
412
- h(JobsPanel, { jobs: jobs })
413
- )
414
- )
406
+ h(InfoPanel, { info: info, onInstall: doInstall, onClose: doCloseInfo, panelRef: infoRef }),
407
+ h("div", { className: "mkt_list" },
408
+ results == null
409
+ ? h("div", { className: "mkt_meta mkt_listHead" }, loading ? "正在加载最热插件…" : "—")
410
+ : results.items.length === 0
411
+ ? h("div", { className: "mkt_meta mkt_listHead" }, "没有匹配的仓库。")
412
+ : h(React.Fragment, null,
413
+ h("div", { className: "mkt_meta mkt_listHead" }, "共 " + results.total + " 个仓库(显示 " + results.items.length + " 个)"),
414
+ results.items.map(function (item) {
415
+ return h(RepoCard, {
416
+ key: item.fullName,
417
+ item: item,
418
+ installing: installing[item.fullName] === true,
419
+ onInstall: doInstall,
420
+ onInfo: doInfo,
421
+ });
422
+ })
423
+ )
424
+ ),
425
+ h(JobsPanel, { jobs: jobs })
415
426
  );
416
427
  }
417
428