@dsh-workbench/core 0.1.17 → 0.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 (64) hide show
  1. package/client.js +1026 -554
  2. package/dist/board.css +31 -0
  3. package/dist/client/client.body.js +1026 -554
  4. package/dist/client/index.js +1027 -555
  5. package/dist/host/index.js +1175 -146
  6. package/dist/types/app/client.d.ts +111 -69
  7. package/dist/types/app/layouts/market/__tests__/add-module-stages.test.d.ts +1 -0
  8. package/dist/types/app/layouts/market/add-module-text.d.ts +16 -1
  9. package/dist/types/app/layouts/market/use-add-module.d.ts +2 -8
  10. package/dist/types/app/layouts/market/use-module-versions.d.ts +2 -1
  11. package/dist/types/app/layouts/rightbar/MarketView.d.ts +5 -1
  12. package/dist/types/app/layouts/rightbar/ModulesPage.d.ts +4 -2
  13. package/dist/types/app/layouts/rightbar/PanelModules.d.ts +2 -2
  14. package/dist/types/app/layouts/rightbar/PanelPluginRows.d.ts +9 -0
  15. package/dist/types/app/layouts/rightbar/PanelRowControls.d.ts +14 -0
  16. package/dist/types/app/layouts/rightbar/__tests__/market-row-icon.test.d.ts +1 -0
  17. package/dist/types/app/layouts/rightbar/__tests__/market-section-icon.test.d.ts +1 -0
  18. package/dist/types/app/layouts/rightbar/__tests__/market-workbench.test.d.ts +1 -0
  19. package/dist/types/app/layouts/rightbar/__tests__/panel-plugin-rows.test.d.ts +1 -0
  20. package/dist/types/app/layouts/rightbar/__tests__/panel-scope-ui.test.d.ts +1 -0
  21. package/dist/types/app/layouts/rightbar/board-selection.d.ts +11 -0
  22. package/dist/types/app/layouts/rightbar/market-act.d.ts +21 -0
  23. package/dist/types/app/layouts/rightbar/market-freshness.d.ts +1 -0
  24. package/dist/types/app/layouts/rightbar/market-mock.d.ts +6 -1
  25. package/dist/types/app/layouts/rightbar/market-plugin-rows.d.ts +3 -1
  26. package/dist/types/app/layouts/rightbar/market-row-icon.d.ts +7 -0
  27. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +35 -0
  28. package/dist/types/app/layouts/rightbar/market-rows.d.ts +8 -35
  29. package/dist/types/app/layouts/rightbar/market-section-icon.d.ts +3 -0
  30. package/dist/types/app/layouts/rightbar/market-section.d.ts +18 -0
  31. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +7 -1
  32. package/dist/types/app/layouts/rightbar/market-workbench-row.d.ts +5 -0
  33. package/dist/types/app/layouts/rightbar/panel-mock.d.ts +2 -1
  34. package/dist/types/app/layouts/rightbar/use-panels.d.ts +15 -1
  35. package/dist/types/app/units/registry.d.ts +1 -1
  36. package/dist/types/modules/panels/__tests__/plugin-panel-market-parity.test.d.ts +1 -0
  37. package/dist/types/modules/panels/__tests__/plugin-panel.test.d.ts +1 -0
  38. package/dist/types/modules/panels/__tests__/plugin-tool-units.test.d.ts +1 -0
  39. package/dist/types/modules/panels/__tests__/scope-machine.test.d.ts +1 -0
  40. package/dist/types/modules/panels/__tests__/scope-support.d.ts +51 -0
  41. package/dist/types/modules/panels/model/config.d.ts +19 -0
  42. package/dist/types/modules/panels/model/market-dispatch.d.ts +4 -0
  43. package/dist/types/modules/panels/model/market-registry.d.ts +12 -0
  44. package/dist/types/modules/panels/model/market-registry.test.d.ts +1 -0
  45. package/dist/types/modules/panels/model/market-types.d.ts +1 -0
  46. package/dist/types/modules/panels/model/market.d.ts +3 -2
  47. package/dist/types/modules/panels/model/plugin-panel.d.ts +3 -0
  48. package/dist/types/modules/panels/model/prefs.d.ts +3 -1
  49. package/dist/types/modules/panels/model/service.d.ts +5 -1
  50. package/dist/types/shared/api/bundle-install.d.ts +15 -1
  51. package/dist/types/shared/api/host/__tests__/plugin-catalog.test.d.ts +1 -0
  52. package/dist/types/shared/api/host/__tests__/plugin-login-hint.test.d.ts +1 -0
  53. package/dist/types/shared/api/host/__tests__/plugin-tools.test.d.ts +1 -0
  54. package/dist/types/shared/api/host/bundle-inspect-kind.test.d.ts +1 -0
  55. package/dist/types/shared/api/host/bundle-routes-self.test.d.ts +1 -0
  56. package/dist/types/shared/api/host/installed-module.d.ts +10 -0
  57. package/dist/types/shared/api/host/plugin-catalog.d.ts +60 -0
  58. package/dist/types/shared/api/host/plugin-login-hint.d.ts +2 -0
  59. package/dist/types/shared/api/host/plugin-tools.d.ts +10 -0
  60. package/dist/types/shared/api/host/plugin-units.d.ts +47 -0
  61. package/dist/types/shared/api/host/unit-registry.d.ts +3 -0
  62. package/package.json +2 -2
  63. package/skills/workbench-module-diy/REVIEW.md +2 -2
  64. package/skills/workbench-module-diy/TOOLS.md +4 -1
package/client.js CHANGED
@@ -443,7 +443,12 @@ window.__ModuleLoader__.load({
443
443
  "host"
444
444
  ];
445
445
  var CARD_KEYS = ["titleKey", "order"];
446
- var TOOL_KEYS = ["name", "writes"];
446
+ var TOOL_KEYS = [
447
+ "name",
448
+ "writes",
449
+ "key"
450
+ ];
451
+ var TOOL_KEY_SHAPE = /^[a-z][a-zA-Z0-9]*$/;
447
452
  var HOST_KEYS = ["inject", "optional"];
448
453
  function text(value) {
449
454
  return typeof value === "string" ? value.trim() : "";
@@ -485,6 +490,7 @@ window.__ModuleLoader__.load({
485
490
  if (!Array.isArray(tools)) problems.push(`${subject}: dsh.workbench.tools 要是一串声明,现在是 ${JSON.stringify(tools)}`);
486
491
  else {
487
492
  const seen = /* @__PURE__ */ new Set();
493
+ const seenKeys = /* @__PURE__ */ new Set();
488
494
  tools.forEach((tool, index) => {
489
495
  const at = `dsh.workbench.tools[${index}]`;
490
496
  if (!isRecord(tool)) {
@@ -498,6 +504,12 @@ window.__ModuleLoader__.load({
498
504
  else if (seen.has(name)) problems.push(`${subject}: ${at}.name「${name}」与前面那条撞了 —— 工具名会进 dsh 的工具表,不许重`);
499
505
  else seen.add(name);
500
506
  if (typeof tool.writes !== "boolean") problems.push(`${subject}: ${at}.writes 要是 true / false(它是"这会写"的唯一声明,缺了审批无从认领)`);
507
+ if (tool.key !== void 0) {
508
+ const key = text(tool.key);
509
+ if (!TOOL_KEY_SHAPE.test(key)) problems.push(`${subject}: ${at}.key 要是 lowerCamelCase 的标识符(如 \`sync\` / \`podLogs\`),现在是 ${JSON.stringify(tool.key)} —— 它会变成生成物里的键名,所以不引号、不许带点或横线`);
510
+ else if (seenKeys.has(key)) problems.push(`${subject}: ${at}.key「${key}」与前面那条撞了 —— 生成物里的键只能有一个`);
511
+ else seenKeys.add(key);
512
+ }
501
513
  });
502
514
  }
503
515
  }
@@ -1082,6 +1094,50 @@ window.__ModuleLoader__.load({
1082
1094
  strokeLinecap: "round"
1083
1095
  }));
1084
1096
  }
1097
+ function IconOpencli({ size = 16 }) {
1098
+ return h(Shell, {
1099
+ size,
1100
+ viewBox: "0 0 64 64"
1101
+ }, h("defs", null, h("linearGradient", {
1102
+ id: "opencli-mark",
1103
+ x1: "0%",
1104
+ y1: "0%",
1105
+ x2: "100%",
1106
+ y2: "100%"
1107
+ }, h("stop", {
1108
+ offset: "0%",
1109
+ stopColor: "#00e5a0"
1110
+ }), h("stop", {
1111
+ offset: "50%",
1112
+ stopColor: "#00b4d8"
1113
+ }), h("stop", {
1114
+ offset: "100%",
1115
+ stopColor: "#7b61ff"
1116
+ }))), h("rect", {
1117
+ width: 64,
1118
+ height: 64,
1119
+ rx: 14,
1120
+ fill: "#0a0a0f"
1121
+ }), h("text", {
1122
+ x: "50%",
1123
+ y: "54%",
1124
+ dominantBaseline: "middle",
1125
+ textAnchor: "middle",
1126
+ fontFamily: "monospace",
1127
+ fontWeight: 700,
1128
+ fontSize: 28,
1129
+ fill: "url(#opencli-mark)"
1130
+ }, ">_"));
1131
+ }
1132
+ function IconNpm({ size = 16 }) {
1133
+ return h(Shell, {
1134
+ size,
1135
+ viewBox: "0 0 1024 1024"
1136
+ }, h("path", {
1137
+ d: "M64 337.76h896v298.72H512v49.792H312.896v-49.824H64z m49.792 248.928h99.552v-149.376h49.76v149.344h49.792v-199.104H113.792z m248.896-199.136v248.928h99.552v-49.792h99.552v-199.136z m99.552 49.792H512v99.584h-49.792z m149.344-49.792v199.136h99.552v-149.376h49.792v149.344h49.792v-149.344h49.792v149.344h49.792v-199.104z",
1138
+ fill: "#CB3837"
1139
+ }));
1140
+ }
1085
1141
  function IconModules({ size = 16 }) {
1086
1142
  return h("svg", {
1087
1143
  width: size,
@@ -1204,7 +1260,12 @@ window.__ModuleLoader__.load({
1204
1260
  "time.hours": "{n} h ago",
1205
1261
  "time.days": "{n} d ago",
1206
1262
  "panels.title": "Panel modules",
1207
- "panels.reset": "Reset",
1263
+ "panels.market.defaultNote": "This default covers every workspace that has not changed this row; ones that have keep their own choice.",
1264
+ "panels.market.changedBy": "{count} workspaces have already changed this row",
1265
+ "panels.market.defaultLabel": "On by default in all workspaces",
1266
+ "panels.followGlobal": "Default",
1267
+ "panels.followGlobalHint": "This row follows the default board (the switch shows that state). Clicking the switch makes it this project's own choice.",
1268
+ "panels.followAll": "Restore the default everywhere",
1208
1269
  "panels.enabled": "enabled in this project",
1209
1270
  "panels.disabled": "not enabled in this project",
1210
1271
  "panels.choose": "Choose modules",
@@ -1223,17 +1284,17 @@ window.__ModuleLoader__.load({
1223
1284
  "panels.browseMarket": "Browse the module market",
1224
1285
  "panels.noneInstalled": "None of these modules has its plugin installed yet",
1225
1286
  "panels.noneInstalledHint": "Once installed they come back here, and you pick which go on the panel.",
1287
+ "panels.rowPlugin": "Plugin",
1226
1288
  "panels.market.installed": "installed",
1227
1289
  "panels.market.outdated": "needs update",
1228
1290
  "panels.market.hasNew": "New version",
1229
1291
  "panels.market.missing": "not installed",
1230
1292
  "panels.market.unchecked": "unknown",
1231
1293
  "panels.market.checking": "checking",
1232
- "panels.market.sectionInstalled": "Installed",
1294
+ "panels.market.sectionInstalled": "Installed modules",
1233
1295
  "panels.market.sectionPending": "Not installed",
1234
1296
  "panels.market.sectionShared": "Shared dependencies",
1235
- "panels.market.sharedUsedBy": "Used by {modules}",
1236
- "panels.market.sharedFoot": "These cannot be uninstalled here: they come with modules, and would be reinstalled anyway. To stop using one, turn off the modules that use it.",
1297
+ "panels.market.sharedUsedBy": "Used by module {modules}",
1237
1298
  "panels.market.listSeparator": ", ",
1238
1299
  "panels.market.sharedMissing": "not installed",
1239
1300
  "panels.market.sharedOutdated": "update available",
@@ -1258,21 +1319,20 @@ window.__ModuleLoader__.load({
1258
1319
  "panels.market.noSource": "This module declares no install method — install it yourself",
1259
1320
  "panels.market.badSource": "The install method is incomplete — install it yourself",
1260
1321
  "panels.market.empty": "No modules available",
1261
- "panels.market.installedSection": "Installed",
1262
- "panels.market.sectionLocal": "Linked locally",
1322
+ "panels.market.sectionLocal": "Local modules",
1263
1323
  "panels.market.sectionUnlisted": "Not from the market",
1264
1324
  "panels.market.sectionPlugins": "Installed opencli plugins",
1265
1325
  "panels.market.moduleOutdated": "update available",
1266
1326
  "panels.market.moduleRefused": "This module was built for an older version of the workbench, so it does not work here. Update it, or uninstall.",
1267
1327
  "panels.market.moduleRefusedDetail": "Why it cannot be used: {reason}",
1268
1328
  "panels.market.moduleRestartHint": "installed but not active — restart dsh once to bring it up",
1269
- "panels.market.pluginLocalNoUpdate": "Installed from a local folder, so there is nowhere to check for a newer version — uninstall only",
1329
+ "panels.market.workbenchName": "Workbench",
1330
+ "panels.market.workbenchLocal": "This is the copy from your working repository; it does not come from the registry.",
1270
1331
  "panels.market.pluginKeptInUse": "Files kept for now: {names} still uses it.",
1271
1332
  "panels.market.pluginKeptUnsure": "Files kept for now: some modules on this machine do not say what they use, so it is unclear who needs it.",
1272
1333
  "panels.market.pluginKeptHeld": "Files kept: this one is yours, and a module letting go will not remove it.",
1273
1334
  "panels.market.pluginKeptUnnamed": "Files kept for now: this one cannot be identified as a plugin, so it is unclear who needs it.",
1274
- "panels.market.pluginAlsoKnownAs": "Its package is {pkg} (updates and uninstall use that)",
1275
- "panels.market.pluginBroken": "This install is broken: it cannot be identified as a plugin. Uninstall it, or install it again by package name above.",
1335
+ "panels.market.pluginBroken": "This install is broken: it cannot be identified as a plugin. Uninstall it, or tell the agent to reinstall it by package name with workbench_modules (the install-bundle action).",
1276
1336
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
1277
1337
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
1278
1338
  "panels.market.recheck": "Check for updates",
@@ -1281,7 +1341,7 @@ window.__ModuleLoader__.load({
1281
1341
  "panels.market.justNow": "just now",
1282
1342
  "panels.market.minutesAgo": "{n} min ago",
1283
1343
  "panels.market.hoursAgo": "{n} h ago",
1284
- "panels.market.add.description": "Enter a package name, a Git URL, or a path to a local directory.",
1344
+ "panels.market.add.description": "Enter a module or opencli plugin package name, Git repository URL, or local directory path.",
1285
1345
  "panels.market.add.specPlaceholder": "e.g. @dsh-workbench/module-hello",
1286
1346
  "panels.market.add.guideToggle": "Install guide and examples",
1287
1347
  "panels.market.add.guideHide": "Hide guide",
@@ -1320,11 +1380,13 @@ window.__ModuleLoader__.load({
1320
1380
  "panels.market.add.problemInstalled": "This module is already installed",
1321
1381
  "panels.market.add.problemNotFound": "No such module found",
1322
1382
  "panels.market.add.problemNotPackage": "That path does not exist or is not a valid module package",
1323
- "panels.market.add.problemNotBundle": "This package cannot be installed here: {reason}. If it is actually an opencli plugin, use its package name (for example opencli-plugin-cmdb) or a local folder — a git URL or tarball does not reveal what it is.",
1383
+ "panels.market.add.problemNotBundle": "This package cannot be installed here: {reason}. This entry recognises workbench modules and opencli plugins by package name, and installs either; but a git URL or a tarball does not reveal what it is — if it is really one of those two, use its package name or a local folder instead.",
1324
1384
  "panels.market.add.problemNotWorkbenchModule": "This package does not match the workbench you are running, so installing it would not work. Pick another version, or ask the module author.",
1325
1385
  "panels.market.add.problemNotModuleOrPlugin": "This package is neither a workbench module nor an opencli plugin, so installing it would do nothing. Pick another version, or ask the package author.",
1326
1386
  "panels.market.add.failureNotModuleOrPlugin": "This package is neither a workbench module nor an opencli plugin, so installing it would do nothing",
1327
1387
  "panels.market.add.installedPlugin": "Installed: the opencli plugin {name}",
1388
+ "panels.market.add.pluginPreview": "This is an opencli plugin: it goes into the opencli plugin area and works as soon as it is installed — no restart.",
1389
+ "panels.market.add.pluginAlias": "Plugin name: {name}",
1328
1390
  "panels.market.add.problemNetwork": "Cannot reach the module source; check the network and retry",
1329
1391
  "panels.market.add.problemUnknown": "Cannot fetch module information: {reason}",
1330
1392
  "panels.market.add.failureNetwork": "The network connection failed",
@@ -1535,7 +1597,12 @@ window.__ModuleLoader__.load({
1535
1597
  "time.hours": "{n} 小时前",
1536
1598
  "time.days": "{n} 天前",
1537
1599
  "panels.title": "面板模块",
1538
- "panels.reset": "恢复默认",
1600
+ "panels.market.defaultNote": "这份默认给所有没在这一行改过的工作区;改过的保持自己的选择。",
1601
+ "panels.market.changedBy": "{count} 个工作区已在这一行改过",
1602
+ "panels.market.defaultLabel": "开启后所有工作区默认启用",
1603
+ "panels.followGlobal": "默认",
1604
+ "panels.followGlobalHint": "这一行跟着默认板走(右边那颗开关显示的就是默认的状态)。点一下开关 = 改成这个项目自己定。",
1605
+ "panels.followAll": "全部恢复默认",
1539
1606
  "panels.enabled": "这个项目已启用",
1540
1607
  "panels.disabled": "这个项目未启用",
1541
1608
  "panels.choose": "选择模块",
@@ -1554,17 +1621,17 @@ window.__ModuleLoader__.load({
1554
1621
  "panels.browseMarket": "浏览模块市场",
1555
1622
  "panels.noneInstalled": "这些模块要的插件都还没装",
1556
1623
  "panels.noneInstalledHint": "装好之后它们会回到这里,再由你决定放哪几个上板。",
1624
+ "panels.rowPlugin": "插件",
1557
1625
  "panels.market.installed": "已安装",
1558
1626
  "panels.market.outdated": "要更新",
1559
1627
  "panels.market.hasNew": "有新版本",
1560
1628
  "panels.market.missing": "未装",
1561
1629
  "panels.market.unchecked": "状态未知",
1562
1630
  "panels.market.checking": "检测中",
1563
- "panels.market.sectionInstalled": "已安装",
1631
+ "panels.market.sectionInstalled": "已安装模块",
1564
1632
  "panels.market.sectionPending": "未安装",
1565
1633
  "panels.market.sectionShared": "共用依赖",
1566
- "panels.market.sharedUsedBy": "供 {modules} 使用",
1567
- "panels.market.sharedFoot": "这一段不给卸载:它们跟着模块来,卸掉也会被装回来。要停用一份,就去关掉正在用它的那些模块。",
1634
+ "panels.market.sharedUsedBy": "供 {modules} 模块使用",
1568
1635
  "panels.market.listSeparator": "、",
1569
1636
  "panels.market.sharedMissing": "未装",
1570
1637
  "panels.market.sharedOutdated": "有新版",
@@ -1589,21 +1656,20 @@ window.__ModuleLoader__.load({
1589
1656
  "panels.market.noSource": "这个模块没声明怎么装,只能自己动手",
1590
1657
  "panels.market.badSource": "安装方式没写全,只能自己动手",
1591
1658
  "panels.market.empty": "暂无可用模块",
1592
- "panels.market.installedSection": "已安装",
1593
- "panels.market.sectionLocal": "本地装的",
1659
+ "panels.market.sectionLocal": "本地模块",
1594
1660
  "panels.market.sectionUnlisted": "不是从市场装的",
1595
1661
  "panels.market.sectionPlugins": "已安装 opencli 插件",
1596
1662
  "panels.market.moduleOutdated": "有新版",
1597
1663
  "panels.market.moduleRefused": "这个模块是给旧版本的工作台写的,现在用不了。更新它,或者卸载。",
1598
1664
  "panels.market.moduleRefusedDetail": "装不上的原因:{reason}",
1599
1665
  "panels.market.moduleRestartHint": "装好了但还没生效 —— 重启一次 dsh 就会出来",
1600
- "panels.market.pluginLocalNoUpdate": "本地装的,没地方查新版,所以只给卸载",
1666
+ "panels.market.workbenchName": "工作台",
1667
+ "panels.market.workbenchLocal": "这份是本仓正在开发的那一份,不从源上取。",
1601
1668
  "panels.market.pluginKeptInUse": "文件先留着:{names} 还要用它。",
1602
1669
  "panels.market.pluginKeptUnsure": "文件先留着:这台机器上还有模块看不出用了什么,说不准谁在用它。",
1603
1670
  "panels.market.pluginKeptHeld": "文件留着:你自己装的那一份,模块放手不动它。",
1604
1671
  "panels.market.pluginKeptUnnamed": "文件先留着:看不出这是哪个插件,说不准谁在用它。",
1605
- "panels.market.pluginAlsoKnownAs": "包名是 {pkg}(更新与卸载按它来)",
1606
- "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者去上面按包名再装一次。",
1672
+ "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者直接跟 agent 说:用 workbench_modules 的 install-bundle 按包名再装一次。",
1607
1673
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
1608
1674
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
1609
1675
  "panels.market.recheck": "重新检查更新",
@@ -1612,7 +1678,7 @@ window.__ModuleLoader__.load({
1612
1678
  "panels.market.justNow": "刚刚",
1613
1679
  "panels.market.minutesAgo": "{n} 分钟前",
1614
1680
  "panels.market.hoursAgo": "{n} 小时前",
1615
- "panels.market.add.description": "输入模块的包名、Git 仓库地址或本地目录路径。",
1681
+ "panels.market.add.description": "输入模块或 opencli 插件的包名、Git 仓库地址或本地目录路径。",
1616
1682
  "panels.market.add.specPlaceholder": "例如 @dsh-workbench/module-hello",
1617
1683
  "panels.market.add.guideToggle": "模块安装引导和示例",
1618
1684
  "panels.market.add.guideHide": "收起引导",
@@ -1651,11 +1717,13 @@ window.__ModuleLoader__.load({
1651
1717
  "panels.market.add.problemInstalled": "该模块已安装",
1652
1718
  "panels.market.add.problemNotFound": "未找到相关模块",
1653
1719
  "panels.market.add.problemNotPackage": "该路径不存在或不是有效的模块包",
1654
- "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。要是它其实是个 opencli 插件,请改用包名(例如 opencli-plugin-cmdb)或者本地目录 —— 从 git 地址和 tarball 判断不出它是什么。",
1720
+ "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。这个入口按包名认工作台模块和 opencli 插件,两种都能装;但 git 地址和 tarball 判断不出它是什么 —— 要是它其实是这两样之一,请改填包名或本地目录。",
1655
1721
  "panels.market.add.problemNotWorkbenchModule": "这个包跟现在的工作台对不上,装上也用不了。换一个版本,或者找这个模块的作者。",
1656
1722
  "panels.market.add.problemNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上。换一个版本,或者找这个包的作者。",
1657
1723
  "panels.market.add.failureNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上",
1658
1724
  "panels.market.add.installedPlugin": "装上了:opencli 插件 {name}",
1725
+ "panels.market.add.pluginPreview": "这是一份 opencli 插件:装进 opencli 的插件区,装完就能用,不用重启。",
1726
+ "panels.market.add.pluginAlias": "插件名:{name}",
1659
1727
  "panels.market.add.problemNetwork": "无法连接模块源,请检查网络后重试",
1660
1728
  "panels.market.add.problemUnknown": "无法获取模块信息:{reason}",
1661
1729
  "panels.market.add.failureNetwork": "网络连接失败",
@@ -1977,6 +2045,8 @@ window.__ModuleLoader__.load({
1977
2045
  IconBrandMark: () => IconBrandMark,
1978
2046
  IconConversation: () => IconConversation,
1979
2047
  IconModules: () => IconModules,
2048
+ IconNpm: () => IconNpm,
2049
+ IconOpencli: () => IconOpencli,
1980
2050
  IconPanelScreen: () => IconPanelScreen,
1981
2051
  LOCALES: () => LOCALES,
1982
2052
  LOCALE_NS: () => LOCALE_NS,
@@ -2399,6 +2469,9 @@ window.__ModuleLoader__.load({
2399
2469
  //#endregion
2400
2470
  //#region src/app/layouts/rightbar/market-freshness.ts
2401
2471
  var MARKET_STALE_MS = VERSION_CHECK_TTL_MS;
2472
+ function marketSettled(freshness, installedRead) {
2473
+ return freshness.loaded && installedRead !== false;
2474
+ }
2402
2475
  function shouldProbeOnEnter(input) {
2403
2476
  if (input.checkedAt === null) return true;
2404
2477
  return input.now - input.checkedAt >= input.staleMs;
@@ -2885,7 +2958,7 @@ window.__ModuleLoader__.load({
2885
2958
  },
2886
2959
  {
2887
2960
  id: "plugin-local",
2888
- label: "本地目录装的 opencli 插件:没有版本源(只给卸载,行上说清为什么)",
2961
+ label: "本地目录装的 opencli 插件:没有版本源,只给卸载",
2889
2962
  manifests: [],
2890
2963
  capabilities: {},
2891
2964
  plugins: [{
@@ -2897,8 +2970,7 @@ window.__ModuleLoader__.load({
2897
2970
  rows: 0,
2898
2971
  plugins: 1,
2899
2972
  pluginActions: ["uninstall-plugin"],
2900
- pluginNote: true,
2901
- pluginNoteKey: "panels.market.pluginLocalNoUpdate"
2973
+ pluginNote: false
2902
2974
  }
2903
2975
  },
2904
2976
  {
@@ -2915,8 +2987,7 @@ window.__ModuleLoader__.load({
2915
2987
  expect: {
2916
2988
  rows: 0,
2917
2989
  plugins: 1,
2918
- pluginActions: ["update-plugin", "uninstall-plugin"],
2919
- pluginNoteKey: "panels.market.pluginAlsoKnownAs"
2990
+ pluginActions: ["update-plugin", "uninstall-plugin"]
2920
2991
  }
2921
2992
  },
2922
2993
  {
@@ -2955,6 +3026,70 @@ window.__ModuleLoader__.load({
2955
3026
  notice: true
2956
3027
  }
2957
3028
  },
3029
+ {
3030
+ id: "workbench-update",
3031
+ label: "工作台有新版(这一行也给「更新」,装完面板自己换上)",
3032
+ manifests: [],
3033
+ capabilities: {},
3034
+ workbench: {
3035
+ pkg: "@dsh-workbench/core",
3036
+ installed: "0.1.18",
3037
+ latest: "0.1.19"
3038
+ },
3039
+ expect: {
3040
+ rows: 0,
3041
+ workbenchState: "outdated",
3042
+ workbenchActions: ["update-workbench"]
3043
+ }
3044
+ },
3045
+ {
3046
+ id: "workbench-current",
3047
+ label: "工作台已经最新(只显示版本,没有按钮)",
3048
+ manifests: [],
3049
+ capabilities: {},
3050
+ workbench: {
3051
+ pkg: "@dsh-workbench/core",
3052
+ installed: "0.1.19"
3053
+ },
3054
+ expect: {
3055
+ rows: 0,
3056
+ workbenchState: "installed",
3057
+ workbenchActions: []
3058
+ }
3059
+ },
3060
+ {
3061
+ id: "workbench-local",
3062
+ label: "工作台是本仓那份(link: 装的:不给更新,行上说清)",
3063
+ manifests: [],
3064
+ capabilities: {},
3065
+ workbench: {
3066
+ pkg: "@dsh-workbench/core",
3067
+ installed: "0.1.18",
3068
+ latest: "0.1.19",
3069
+ local: true
3070
+ },
3071
+ expect: {
3072
+ rows: 0,
3073
+ workbenchState: "installed",
3074
+ workbenchActions: [],
3075
+ workbenchNoteKey: "panels.market.workbenchLocal"
3076
+ }
3077
+ },
3078
+ {
3079
+ id: "workbench-updated",
3080
+ label: "工作台刚更新完(新版已经在盘上:行上就是新版,没有按钮、也不劝人重启)",
3081
+ manifests: [],
3082
+ capabilities: {},
3083
+ workbench: {
3084
+ pkg: "@dsh-workbench/core",
3085
+ installed: "0.1.19"
3086
+ },
3087
+ expect: {
3088
+ rows: 0,
3089
+ workbenchState: "installed",
3090
+ workbenchActions: []
3091
+ }
3092
+ },
2958
3093
  {
2959
3094
  id: "empty",
2960
3095
  label: "市场空态",
@@ -3024,11 +3159,13 @@ window.__ModuleLoader__.load({
3024
3159
  //#endregion
3025
3160
  //#region src/app/units/registry.ts
3026
3161
  function toBoardModule(face, manifest) {
3162
+ const View = face.card;
3163
+ if (View === void 0) return void 0;
3027
3164
  return {
3028
3165
  id: manifest.id,
3029
3166
  titleKey: manifest.card?.titleKey ?? manifest.id,
3030
3167
  order: manifest.card?.order ?? 100,
3031
- View: face.card,
3168
+ View,
3032
3169
  ...face.steps === void 0 ? {} : { steps: face.steps }
3033
3170
  };
3034
3171
  }
@@ -3061,9 +3198,10 @@ window.__ModuleLoader__.load({
3061
3198
  function attach(entry) {
3062
3199
  const manifest = known.get(entry.unit);
3063
3200
  if (manifest === void 0) return false;
3201
+ const boardModule = toBoardModule(entry.face, manifest);
3064
3202
  entry.mounted = {
3065
3203
  manifest,
3066
- unmount: board.register(toBoardModule(entry.face, manifest))
3204
+ unmount: boardModule === void 0 ? () => {} : board.register(boardModule)
3067
3205
  };
3068
3206
  takeBackRefusal(entry.unit);
3069
3207
  return true;
@@ -3231,9 +3369,46 @@ window.__ModuleLoader__.load({
3231
3369
  function fixtureRoster(roster) {
3232
3370
  return hasCard(roster) ? roster : SAMPLE_ROSTER;
3233
3371
  }
3372
+ function boardModuleOf(face) {
3373
+ const module = toBoardModule(face, face.manifest);
3374
+ return module === void 0 ? [] : [module];
3375
+ }
3234
3376
  function fixtureSeed(roster, all, crash = false) {
3235
- const base = hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE, FIXTURE_FACE.manifest)];
3236
- return crash ? [toBoardModule(CRASH_FACE, CRASH_FACE.manifest), ...base] : base;
3377
+ const base = hasCard(roster) ? all : boardModuleOf(FIXTURE_FACE);
3378
+ return crash ? [...boardModuleOf(CRASH_FACE), ...base] : base;
3379
+ }
3380
+ //#endregion
3381
+ //#region src/app/layouts/rightbar/market-workbench-row.ts
3382
+ var WORKBENCH_ROW_ID = "workbench:self";
3383
+ var WORKBENCH_TITLE_KEY = "panels.market.workbenchName";
3384
+ function workbenchRow(version) {
3385
+ if (version === null || version === void 0 || version.installed === "") return void 0;
3386
+ const local = version.local === true;
3387
+ const latest = local ? void 0 : version.latest;
3388
+ const update = latest !== void 0 && latest !== version.installed ? {
3389
+ installed: version.installed,
3390
+ latest
3391
+ } : void 0;
3392
+ const note = local ? {
3393
+ key: "panels.market.workbenchLocal",
3394
+ params: {}
3395
+ } : void 0;
3396
+ return {
3397
+ id: WORKBENCH_ROW_ID,
3398
+ titleKey: WORKBENCH_TITLE_KEY,
3399
+ workbench: true,
3400
+ state: update === void 0 ? "installed" : "outdated",
3401
+ canInstall: false,
3402
+ canUpdate: update !== void 0,
3403
+ canUninstall: false,
3404
+ ...note === void 0 ? {} : { note },
3405
+ version: {
3406
+ installed: version.installed,
3407
+ ...latest === void 0 ? {} : { latest }
3408
+ },
3409
+ ...update === void 0 ? {} : { moduleUpdate: update },
3410
+ pkg: version.pkg
3411
+ };
3237
3412
  }
3238
3413
  //#endregion
3239
3414
  //#region src/app/layouts/rightbar/market-rows.ts
@@ -3282,7 +3457,7 @@ window.__ModuleLoader__.load({
3282
3457
  }
3283
3458
  return next ?? known;
3284
3459
  }
3285
- function installedRows(modules, manifests, listed, known) {
3460
+ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3286
3461
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
3287
3462
  const rows = [];
3288
3463
  for (const module of modules) {
@@ -3312,12 +3487,15 @@ window.__ModuleLoader__.load({
3312
3487
  ...outdated ? { moduleUpdate: {
3313
3488
  installed: module.installed,
3314
3489
  latest
3315
- } } : {}
3490
+ } } : {},
3491
+ defaultShown: defaults.has(module.unit),
3492
+ defaultChanged: changed[module.unit] ?? 0
3316
3493
  });
3317
3494
  }
3318
3495
  return rows;
3319
3496
  }
3320
3497
  function marketActions$1(row) {
3498
+ if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
3321
3499
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
3322
3500
  return [
3323
3501
  ...row.canInstall ? ["install"] : [],
@@ -3378,8 +3556,9 @@ window.__ModuleLoader__.load({
3378
3556
  };
3379
3557
  return next;
3380
3558
  }
3381
- function marketHintVisible(manifests, capabilities, modules) {
3382
- return marketHasUpdates(marketRows(manifests, capabilities, marketUpdatesOf(modules)), sharedRows(manifests, capabilities));
3559
+ function marketHintVisible(manifests, capabilities, modules, workbench) {
3560
+ const self = workbenchRow(workbench);
3561
+ return marketHasUpdates([...marketRows(manifests, capabilities, marketUpdatesOf(modules)), ...self === void 0 ? [] : [self]], sharedRows(manifests, capabilities));
3383
3562
  }
3384
3563
  function marketSections(rows) {
3385
3564
  const installed = rows.filter((row) => isOnMachine(row.state));
@@ -3394,7 +3573,7 @@ window.__ModuleLoader__.load({
3394
3573
  rows: rest
3395
3574
  }]];
3396
3575
  }
3397
- function marketRows(manifests, capabilities, updates = {}) {
3576
+ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3398
3577
  const catalog = manifests.filter((manifest) => (manifest.env?.plugins ?? []).length > 0 || (manifest.env?.libs ?? []).length > 0);
3399
3578
  const rows = [];
3400
3579
  for (const manifest of catalog) {
@@ -3421,7 +3600,9 @@ window.__ModuleLoader__.load({
3421
3600
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
3422
3601
  } },
3423
3602
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
3424
- ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {}
3603
+ ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
3604
+ defaultShown: defaults.has(manifest.id),
3605
+ defaultChanged: changed[manifest.id] ?? 0
3425
3606
  });
3426
3607
  }
3427
3608
  return rows;
@@ -3510,6 +3691,7 @@ window.__ModuleLoader__.load({
3510
3691
  const detail = bucket.purpose === void 0 ? void 0 : `${bucket.label} —— ${bucket.purpose}`;
3511
3692
  rows.push({
3512
3693
  id: `${bucket.kind}:${bucket.name}`,
3694
+ kind: bucket.kind,
3513
3695
  label: bucket.label,
3514
3696
  usedByKeys: bucket.users.map((unit) => byId.get(unit)?.card?.titleKey ?? unit),
3515
3697
  state,
@@ -3590,27 +3772,27 @@ window.__ModuleLoader__.load({
3590
3772
  names
3591
3773
  };
3592
3774
  }
3775
+ function installedPluginNotice(value, t) {
3776
+ const kept = installedPluginKept(value);
3777
+ if (kept === void 0) return null;
3778
+ return t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) });
3779
+ }
3593
3780
  function noteOf(plugin) {
3594
3781
  if (plugin.broken === true) return {
3595
3782
  key: "panels.market.pluginBroken",
3596
- params: {}
3597
- };
3598
- if (plugin.local === true) return {
3599
- key: "panels.market.pluginLocalNoUpdate",
3600
- params: {}
3601
- };
3602
- if (plugin.name !== void 0 && plugin.name !== plugin.pkg) return {
3603
- key: "panels.market.pluginAlsoKnownAs",
3604
- params: { pkg: plugin.pkg }
3783
+ params: {},
3784
+ tone: "alert"
3605
3785
  };
3786
+ if (plugin.local === true) return void 0;
3606
3787
  }
3607
- function installedPluginRows(plugins) {
3788
+ function installedPluginRows(plugins, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3608
3789
  return plugins.map((plugin) => {
3790
+ const id = `plugin:${plugin.pkg}`;
3609
3791
  const name = plugin.name ?? plugin.pkg;
3610
3792
  const outdated = plugin.installed !== void 0 && plugin.latest !== void 0 && plugin.latest !== plugin.installed;
3611
3793
  const note = noteOf(plugin);
3612
3794
  return {
3613
- id: `plugin:${plugin.pkg}`,
3795
+ id,
3614
3796
  titleKey: plugin.pkg,
3615
3797
  label: name,
3616
3798
  plugin: true,
@@ -3620,7 +3802,12 @@ window.__ModuleLoader__.load({
3620
3802
  canUninstall: true,
3621
3803
  ...plugin.local === true ? { local: true } : {},
3622
3804
  ...plugin.broken === true ? { broken: true } : {},
3805
+ ...plugin.broken === true ? {} : {
3806
+ defaultShown: defaults.has(id),
3807
+ defaultChanged: changed[id] ?? 0
3808
+ },
3623
3809
  ...note === void 0 ? {} : { note },
3810
+ ...plugin.installed === void 0 ? {} : { versionLabel: `${plugin.pkg}@${plugin.installed}` },
3624
3811
  pkg: plugin.pkg,
3625
3812
  ...plugin.installed === void 0 ? {} : { version: {
3626
3813
  installed: plugin.installed,
@@ -3629,8 +3816,279 @@ window.__ModuleLoader__.load({
3629
3816
  };
3630
3817
  });
3631
3818
  }
3819
+ var MarketPage_module_default = {
3820
+ marketList: "_marketList_1v8dy_1",
3821
+ marketRow: "_marketRow_1v8dy_10",
3822
+ marketIcon: "_marketIcon_1v8dy_20",
3823
+ marketMain: "_marketMain_1v8dy_32",
3824
+ marketName: "_marketName_1v8dy_39",
3825
+ marketDesc: "_marketDesc_1v8dy_48",
3826
+ marketUsedBy: "_marketUsedBy_1v8dy_59",
3827
+ marketVersion: "_marketVersion_1v8dy_73",
3828
+ marketEnd: "_marketEnd_1v8dy_95",
3829
+ marketSwitchSeat: "_marketSwitchSeat_1v8dy_103",
3830
+ marketIconAction: "_marketIconAction_1v8dy_108",
3831
+ marketActions: "_marketActions_1v8dy_113",
3832
+ marketDefaultNote: "_marketDefaultNote_1v8dy_119",
3833
+ marketSelfDivider: "_marketSelfDivider_1v8dy_126",
3834
+ marketSection: "_marketSection_1v8dy_131",
3835
+ marketSectionHead: "_marketSectionHead_1v8dy_138",
3836
+ marketSectionIcon: "_marketSectionIcon_1v8dy_144",
3837
+ marketSectionTitle: "_marketSectionTitle_1v8dy_151",
3838
+ marketSectionCount: "_marketSectionCount_1v8dy_157",
3839
+ marketProgress: "_marketProgress_1v8dy_164",
3840
+ marketNote: "_marketNote_1v8dy_174",
3841
+ marketNotePlain: "_marketNotePlain_1v8dy_181",
3842
+ marketFailure: "_marketFailure_1v8dy_189",
3843
+ marketEmpty: "_marketEmpty_1v8dy_196",
3844
+ marketPage: "_marketPage_1v8dy_201",
3845
+ marketPageHead: "_marketPageHead_1v8dy_219",
3846
+ marketPageTitle: "_marketPageTitle_1v8dy_227",
3847
+ marketPageIntro: "_marketPageIntro_1v8dy_232",
3848
+ marketPageTools: "_marketPageTools_1v8dy_238",
3849
+ marketIconButton: "_marketIconButton_1v8dy_247",
3850
+ marketIconWrap: "_marketIconWrap_1v8dy_272",
3851
+ marketIconButtonSpinning: "_marketIconButtonSpinning_1v8dy_276",
3852
+ "wb-spin": "_wb-spin_1v8dy_1",
3853
+ marketAddButton: "_marketAddButton_1v8dy_280",
3854
+ marketChecking: "_marketChecking_1v8dy_297",
3855
+ marketEmptyTitle: "_marketEmptyTitle_1v8dy_305"
3856
+ };
3857
+ //#endregion
3858
+ //#region src/app/layouts/rightbar/MarketStates.tsx
3859
+ function MarketChecking({ t }) {
3860
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3861
+ state: "ongoing",
3862
+ size: 14
3863
+ }), t("panels.market.checking")));
3864
+ }
3865
+ function MarketEmpty({ t }) {
3866
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3867
+ }
3868
+ //#endregion
3869
+ //#region src/app/layouts/rightbar/market-section-icon.ts
3870
+ var SIZE$1 = 14;
3871
+ function marketSectionIcon(kind) {
3872
+ switch (kind) {
3873
+ case "installed": return h(IconModules, { size: SIZE$1 });
3874
+ case "pending": return h(_deepseek_ai_dsh_client_ui_primitives.IconDownloadOutlineRegular, { size: SIZE$1 });
3875
+ case "plugins": return h(_deepseek_ai_dsh_client_ui_primitives.IconCordisPluginOutlineRegular, { size: SIZE$1 });
3876
+ case "local": return h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenOutlineRegular, { size: SIZE$1 });
3877
+ case "shared": return h(_deepseek_ai_dsh_client_ui_primitives.IconLinkOutlineRegular, { size: SIZE$1 });
3878
+ }
3879
+ }
3880
+ //#endregion
3881
+ //#region src/app/layouts/rightbar/market-row-icon.ts
3882
+ var SIZE = 18;
3883
+ function packageIcon(kind) {
3884
+ switch (kind) {
3885
+ case "module": return h(_deepseek_ai_dsh_client_ui_primitives.IconArchiveOutlineRegular, { size: SIZE });
3886
+ case "plugin": return h(IconOpencli, { size: SIZE });
3887
+ case "lib": return h(IconNpm, { size: SIZE });
3888
+ case "workbench": return h(IconPanelScreen, { size: SIZE });
3889
+ }
3890
+ }
3891
+ function marketRowKind(row) {
3892
+ if (row.workbench === true) return "workbench";
3893
+ if (row.plugin === true) return "plugin";
3894
+ return "module";
3895
+ }
3896
+ function sharedRowKind(row) {
3897
+ return row.kind === "plugin" ? "plugin" : "lib";
3898
+ }
3899
+ //#endregion
3900
+ //#region src/app/layouts/rightbar/market-view-text.ts
3901
+ var PROGRESS_KEY = {
3902
+ install: "panels.market.installing",
3903
+ update: "panels.market.updating",
3904
+ "update-bundle": "panels.market.updating",
3905
+ "remove-bundle": "panels.market.uninstalling",
3906
+ uninstall: "panels.market.uninstalling",
3907
+ "update-dependency": "panels.market.updating",
3908
+ "update-plugin": "panels.market.updating",
3909
+ "uninstall-plugin": "panels.market.uninstalling",
3910
+ "update-workbench": "panels.market.updating"
3911
+ };
3912
+ var ACTION_LABEL_KEY = {
3913
+ install: "panels.market.install",
3914
+ update: "panels.market.update",
3915
+ "update-bundle": "panels.market.update",
3916
+ "remove-bundle": "panels.market.uninstall",
3917
+ uninstall: "panels.market.uninstall",
3918
+ "update-dependency": "panels.market.update",
3919
+ "update-plugin": "panels.market.update",
3920
+ "uninstall-plugin": "panels.market.uninstall",
3921
+ "update-workbench": "panels.market.update"
3922
+ };
3923
+ function pendingRowOf(input) {
3924
+ const { pending, removing } = input;
3925
+ if (removing === null || pending === null) return void 0;
3926
+ if (input.rows.some((row) => row.id === removing)) return void 0;
3927
+ return {
3928
+ id: removing,
3929
+ titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
3930
+ state: "installed",
3931
+ canInstall: false,
3932
+ canUpdate: false,
3933
+ canUninstall: true,
3934
+ ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
3935
+ ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
3936
+ };
3937
+ }
3938
+ //#endregion
3939
+ //#region src/app/layouts/rightbar/SharedSection.tsx
3940
+ function SharedLine({ t, row, pending, failure, onAct }) {
3941
+ const running = pending !== null && pending.id === row.id ? pending : null;
3942
+ const locked = pending !== null;
3943
+ const actions = sharedActions(row);
3944
+ const stateText = t(SHARED_STATE_KEY[row.state]);
3945
+ const version = row.version;
3946
+ const name = /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, row.label, version === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketVersion }, version.installed !== void 0 && version.latest !== void 0 && version.installed !== version.latest ? t("panels.market.versionArrow", {
3947
+ from: version.installed,
3948
+ to: version.latest
3949
+ }) : version.installed ?? version.latest ?? ""));
3950
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3951
+ className: MarketPage_module_default.marketIcon,
3952
+ "aria-hidden": "true"
3953
+ }, packageIcon(sharedRowKind(row))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, row.detail === void 0 ? name : /* @__PURE__ */ h(Tip, { label: row.detail }, name), /* @__PURE__ */ h("span", {
3954
+ className: MarketPage_module_default.marketDesc,
3955
+ role: "img",
3956
+ "aria-label": stateText
3957
+ }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3958
+ state: "ongoing",
3959
+ size: 14
3960
+ }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3961
+ state: SHARED_DOT[row.state],
3962
+ size: 9
3963
+ }), stateText, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) })))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3964
+ state: "ongoing",
3965
+ size: 14
3966
+ }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3967
+ key: action,
3968
+ type: "button",
3969
+ size: "sm",
3970
+ variant: "outline",
3971
+ disabled: locked,
3972
+ onClick: () => onAct(action)
3973
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3974
+ }
3975
+ function SharedSection({ t, rows, pending, failureOf, act }) {
3976
+ if (rows.length === 0) return null;
3977
+ return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("span", {
3978
+ className: MarketPage_module_default.marketSectionIcon,
3979
+ "aria-hidden": "true"
3980
+ }, marketSectionIcon("shared")), /* @__PURE__ */ h("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ h(SharedLine, {
3981
+ key: row.id,
3982
+ t,
3983
+ row,
3984
+ pending,
3985
+ failure: failureOf(row.id),
3986
+ onAct: (action) => void act(row.id, action)
3987
+ }))));
3988
+ }
3989
+ //#endregion
3990
+ //#region src/app/layouts/rightbar/market-section.tsx
3991
+ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
3992
+ const running = pending !== null && pending.id === row.id ? pending : null;
3993
+ const locked = pending !== null;
3994
+ const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
3995
+ const actions = marketActions$1(row);
3996
+ const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3997
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3998
+ className: MarketPage_module_default.marketIcon,
3999
+ "aria-hidden": "true"
4000
+ }, packageIcon(marketRowKind(row))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, marketRowTitle(row, t), row.versionLabel === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketVersion }, row.versionLabel), row.version === void 0 || row.versionLabel !== void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketVersion }, row.version.installed !== void 0 && row.version.latest !== void 0 && row.version.installed !== row.version.latest ? t("panels.market.versionArrow", {
4001
+ from: row.version.installed,
4002
+ to: row.version.latest
4003
+ }) : row.version.installed ?? row.version.latest ?? "")), quiet ? null : /* @__PURE__ */ h("span", {
4004
+ className: MarketPage_module_default.marketDesc,
4005
+ role: "img",
4006
+ "aria-label": stateText
4007
+ }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4008
+ state: "ongoing",
4009
+ size: 14
4010
+ }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4011
+ state: MARKET_DOT[row.state],
4012
+ size: 9
4013
+ }), stateText, row.hint === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t(row.hint)))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, row.defaultShown === void 0 ? null : /* @__PURE__ */ h(Tip, { label: (row.defaultChanged ?? 0) === 0 ? t("panels.market.defaultLabel") : `${t("panels.market.defaultLabel")} · ${t("panels.market.changedBy", { count: row.defaultChanged ?? 0 })}` }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSwitchSeat }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Switch, {
4014
+ checked: row.defaultShown,
4015
+ disabled: boardBusy === true || locked,
4016
+ label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
4017
+ onChange: (next) => onDefault?.(next)
4018
+ }))), running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4019
+ state: "ongoing",
4020
+ size: 14
4021
+ }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
4022
+ const danger = action === "uninstall" || action === "remove-bundle" || action === "uninstall-plugin";
4023
+ const label = t(ACTION_LABEL_KEY[action]);
4024
+ if (!danger) return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
4025
+ key: action,
4026
+ type: "button",
4027
+ size: "sm",
4028
+ variant: action === "install" ? "primary" : "outline",
4029
+ disabled: locked,
4030
+ onClick: () => onAct(action)
4031
+ }, label);
4032
+ return /* @__PURE__ */ h(Tip, {
4033
+ key: action,
4034
+ label
4035
+ }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
4036
+ type: "button",
4037
+ size: "sm",
4038
+ variant: "ghost",
4039
+ className: `wb-dangerAction ${MarketPage_module_default.marketIconAction}`,
4040
+ icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 14 }),
4041
+ "aria-label": t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }),
4042
+ disabled: locked,
4043
+ onClick: () => onAct(action)
4044
+ }));
4045
+ }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
4046
+ className: row.note.tone === "plain" ? MarketPage_module_default.marketNotePlain : MarketPage_module_default.marketNote,
4047
+ title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
4048
+ }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
4049
+ }
4050
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
4051
+ if (rows.length === 0) return null;
4052
+ return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("span", {
4053
+ className: MarketPage_module_default.marketSectionIcon,
4054
+ "aria-hidden": "true"
4055
+ }, icon), /* @__PURE__ */ h("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), rows.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), rows.length === 0 ? null : /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ h(MarketLine, {
4056
+ key: row.id,
4057
+ t,
4058
+ row,
4059
+ pending,
4060
+ failure: failureOf(row.id),
4061
+ onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
4062
+ onDefault: (next) => onDefault?.(row.id, next),
4063
+ boardBusy
4064
+ }))));
4065
+ }
3632
4066
  //#endregion
3633
4067
  //#region src/app/layouts/market/add-module-text.ts
4068
+ function previewOf(inspection, fallback) {
4069
+ if (inspection.status === "plugin") return {
4070
+ kind: "plugin",
4071
+ name: inspection.pkg,
4072
+ version: inspection.version ?? "",
4073
+ description: "",
4074
+ registry: inspection.registry ?? "",
4075
+ ...inspection.pluginName === void 0 ? {} : { pluginName: inspection.pluginName }
4076
+ };
4077
+ return {
4078
+ kind: "module",
4079
+ name: inspection.name ?? fallback,
4080
+ version: inspection.version ?? "",
4081
+ description: inspection.description ?? "",
4082
+ registry: inspection.registry ?? ""
4083
+ };
4084
+ }
4085
+ function resultKindOf(input) {
4086
+ if (input.plugin) return "plugin";
4087
+ if (input.change.application === "failed") return "failed";
4088
+ if (input.change.application === "restart-required") return "restart";
4089
+ if (input.change.application === "cancelled" || input.supplyState === "not-a-module") return "quiet";
4090
+ return "took-effect";
4091
+ }
3634
4092
  var GUIDE_ITEMS = [
3635
4093
  {
3636
4094
  titleKey: "panels.market.add.guideIdTitle",
@@ -3818,48 +4276,50 @@ window.__ModuleLoader__.load({
3818
4276
  if (change === void 0 || SHIPPED.includes(change.application)) return void 0;
3819
4277
  return failureReason(failureCode(change), change.application, t);
3820
4278
  }
3821
- var MarketPage_module_default = {
3822
- marketList: "_marketList_z6vtq_1",
3823
- marketRow: "_marketRow_z6vtq_10",
3824
- marketIcon: "_marketIcon_z6vtq_20",
3825
- marketMain: "_marketMain_z6vtq_32",
3826
- marketName: "_marketName_z6vtq_39",
3827
- marketDesc: "_marketDesc_z6vtq_48",
3828
- marketUsedBy: "_marketUsedBy_z6vtq_59",
3829
- marketVersion: "_marketVersion_z6vtq_73",
3830
- marketEnd: "_marketEnd_z6vtq_95",
3831
- marketActions: "_marketActions_z6vtq_102",
3832
- marketSection: "_marketSection_z6vtq_108",
3833
- marketSectionHead: "_marketSectionHead_z6vtq_115",
3834
- marketSectionTitle: "_marketSectionTitle_z6vtq_121",
3835
- marketSectionCount: "_marketSectionCount_z6vtq_127",
3836
- marketProgress: "_marketProgress_z6vtq_133",
3837
- marketNote: "_marketNote_z6vtq_143",
3838
- marketFailure: "_marketFailure_z6vtq_150",
3839
- marketEmpty: "_marketEmpty_z6vtq_157",
3840
- marketPage: "_marketPage_z6vtq_162",
3841
- marketPageHead: "_marketPageHead_z6vtq_180",
3842
- marketPageTitle: "_marketPageTitle_z6vtq_188",
3843
- marketPageIntro: "_marketPageIntro_z6vtq_193",
3844
- marketPageTools: "_marketPageTools_z6vtq_199",
3845
- marketIconButton: "_marketIconButton_z6vtq_208",
3846
- marketIconWrap: "_marketIconWrap_z6vtq_233",
3847
- marketIconButtonSpinning: "_marketIconButtonSpinning_z6vtq_237",
3848
- "wb-spin": "_wb-spin_z6vtq_1",
3849
- marketAddButton: "_marketAddButton_z6vtq_241",
3850
- marketChecking: "_marketChecking_z6vtq_258",
3851
- marketEmptyTitle: "_marketEmptyTitle_z6vtq_266"
3852
- };
3853
4279
  //#endregion
3854
- //#region src/app/layouts/rightbar/MarketStates.tsx
3855
- function MarketChecking({ t }) {
3856
- return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3857
- state: "ongoing",
3858
- size: 14
3859
- }), t("panels.market.checking")));
3860
- }
3861
- function MarketEmpty({ t }) {
3862
- return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
4280
+ //#region src/app/layouts/rightbar/market-act.ts
4281
+ function marketActOf(options) {
4282
+ const { t, mocked, rowOf, seats, send, onChanged } = options;
4283
+ return async (id, action) => {
4284
+ if (mocked) return;
4285
+ const row = rowOf(id);
4286
+ seats.setPending({
4287
+ id,
4288
+ action,
4289
+ ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4290
+ ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4291
+ ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4292
+ });
4293
+ seats.setConfirming(null);
4294
+ seats.setFailed(null);
4295
+ if (action !== "uninstall-plugin") seats.setNotice(null);
4296
+ const outcome = await send(action === "update-dependency" ? {
4297
+ action,
4298
+ id
4299
+ } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" ? {
4300
+ action,
4301
+ name: row?.pkg ?? ""
4302
+ } : {
4303
+ action,
4304
+ unit: id
4305
+ });
4306
+ seats.setPending(null);
4307
+ if (!outcome.ok) {
4308
+ onChanged();
4309
+ seats.setFailed({
4310
+ id,
4311
+ message: t("panels.market.failed", { reason: outcome.message })
4312
+ });
4313
+ return;
4314
+ }
4315
+ if (action === "uninstall-plugin") seats.setNotice(installedPluginNotice(outcome.value, t));
4316
+ const reason = changeFailure(changeOf(outcome.value), t);
4317
+ onChanged();
4318
+ if (reason !== void 0) seats.setFailed({
4319
+ id,
4320
+ message: t("panels.market.failed", { reason })
4321
+ });
4322
+ };
3863
4323
  }
3864
4324
  var PanelFoot_module_default = {
3865
4325
  foot: "_foot_1us83_1",
@@ -3872,79 +4332,6 @@ window.__ModuleLoader__.load({
3872
4332
  return /* @__PURE__ */ h("footer", { className: PanelFoot_module_default.foot }, /* @__PURE__ */ h("span", { className: size === "md" ? PanelFoot_module_default.footTextMd : PanelFoot_module_default.footText }, text), children ?? null);
3873
4333
  }
3874
4334
  //#endregion
3875
- //#region src/app/layouts/rightbar/market-view-text.ts
3876
- var PROGRESS_KEY = {
3877
- install: "panels.market.installing",
3878
- update: "panels.market.updating",
3879
- "update-bundle": "panels.market.updating",
3880
- "remove-bundle": "panels.market.uninstalling",
3881
- uninstall: "panels.market.uninstalling",
3882
- "update-dependency": "panels.market.updating",
3883
- "update-plugin": "panels.market.updating",
3884
- "uninstall-plugin": "panels.market.uninstalling"
3885
- };
3886
- var ACTION_LABEL_KEY = {
3887
- install: "panels.market.install",
3888
- update: "panels.market.update",
3889
- "update-bundle": "panels.market.update",
3890
- "remove-bundle": "panels.market.uninstall",
3891
- uninstall: "panels.market.uninstall",
3892
- "update-dependency": "panels.market.update",
3893
- "update-plugin": "panels.market.update",
3894
- "uninstall-plugin": "panels.market.uninstall"
3895
- };
3896
- //#endregion
3897
- //#region src/app/layouts/rightbar/SharedSection.tsx
3898
- function SharedLine({ t, row, pending, failure, onAct }) {
3899
- const running = pending !== null && pending.id === row.id ? pending : null;
3900
- const locked = pending !== null;
3901
- const actions = sharedActions(row);
3902
- const stateText = t(SHARED_STATE_KEY[row.state]);
3903
- const version = row.version;
3904
- const name = /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, row.label, version === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketVersion }, version.installed !== void 0 && version.latest !== void 0 && version.installed !== version.latest ? t("panels.market.versionArrow", {
3905
- from: version.installed,
3906
- to: version.latest
3907
- }) : version.installed ?? version.latest ?? ""));
3908
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3909
- className: MarketPage_module_default.marketIcon,
3910
- "aria-hidden": "true"
3911
- }, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, row.detail === void 0 ? name : /* @__PURE__ */ h(Tip, { label: row.detail }, name), /* @__PURE__ */ h("span", {
3912
- className: MarketPage_module_default.marketDesc,
3913
- role: "img",
3914
- "aria-label": stateText
3915
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3916
- state: "ongoing",
3917
- size: 14
3918
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3919
- state: SHARED_DOT[row.state],
3920
- size: 9
3921
- }), stateText, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) })))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3922
- state: "ongoing",
3923
- size: 14
3924
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3925
- key: action,
3926
- type: "button",
3927
- size: "sm",
3928
- variant: "outline",
3929
- disabled: locked,
3930
- onClick: () => onAct(action)
3931
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3932
- }
3933
- function SharedSection({ t, rows, pending, failureOf, act }) {
3934
- if (rows.length === 0) return null;
3935
- return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ h(SharedLine, {
3936
- key: row.id,
3937
- t,
3938
- row,
3939
- pending,
3940
- failure: failureOf(row.id),
3941
- onAct: (action) => void act(row.id, action)
3942
- }))), /* @__PURE__ */ h(PanelFoot, {
3943
- size: "md",
3944
- text: t("panels.market.sharedFoot")
3945
- }));
3946
- }
3947
- //#endregion
3948
4335
  //#region src/app/layouts/rightbar/MarketView.tsx
3949
4336
  var CONFIRM_UNINSTALL = [
3950
4337
  "uninstall",
@@ -3952,48 +4339,6 @@ window.__ModuleLoader__.load({
3952
4339
  "uninstall-plugin"
3953
4340
  ];
3954
4341
  var CONFIRM_REMOVE = ["remove-bundle"];
3955
- function MarketLine({ t, row, pending, failure, onAct }) {
3956
- const running = pending !== null && pending.id === row.id ? pending : null;
3957
- const locked = pending !== null;
3958
- const actions = marketActions$1(row);
3959
- const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3960
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3961
- className: MarketPage_module_default.marketIcon,
3962
- "aria-hidden": "true"
3963
- }, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, marketRowTitle(row, t), row.version === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketVersion }, row.version.installed !== void 0 && row.version.latest !== void 0 && row.version.installed !== row.version.latest ? t("panels.market.versionArrow", {
3964
- from: row.version.installed,
3965
- to: row.version.latest
3966
- }) : row.version.installed ?? row.version.latest ?? "")), /* @__PURE__ */ h("span", {
3967
- className: MarketPage_module_default.marketDesc,
3968
- role: "img",
3969
- "aria-label": stateText
3970
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3971
- state: "ongoing",
3972
- size: 14
3973
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3974
- state: MARKET_DOT[row.state],
3975
- size: 9
3976
- }), stateText, row.hint === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t(row.hint)))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3977
- state: "ongoing",
3978
- size: 14
3979
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
3980
- const danger = action === "uninstall" || action === "remove-bundle";
3981
- return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3982
- key: action,
3983
- type: "button",
3984
- size: "sm",
3985
- variant: action === "install" ? "primary" : "outline",
3986
- className: danger ? "wb-dangerAction" : void 0,
3987
- icon: danger ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 13 }) : void 0,
3988
- "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
3989
- disabled: locked,
3990
- onClick: () => onAct(action)
3991
- }, t(ACTION_LABEL_KEY[action]));
3992
- }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
3993
- className: MarketPage_module_default.marketNote,
3994
- title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
3995
- }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3996
- }
3997
4342
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
3998
4343
  const [acknowledged, setAcknowledged] = useState(false);
3999
4344
  return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -4010,24 +4355,33 @@ window.__ModuleLoader__.load({
4010
4355
  onConfirm
4011
4356
  });
4012
4357
  }
4013
- function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmActions, onConfirming }) {
4014
- if (rows.length === 0) return null;
4015
- return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ h(MarketLine, {
4016
- key: row.id,
4358
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
4359
+ const failureOf = (id) => failed?.id === id ? failed.message : null;
4360
+ return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ h(MarketSection, {
4017
4361
  t,
4018
- row,
4362
+ rows: self === void 0 ? [] : [self],
4363
+ onDefault: setDefault,
4364
+ boardBusy,
4019
4365
  pending,
4020
- failure: failureOf(row.id),
4021
- onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action)
4022
- }))));
4023
- }
4024
- function MarketBody({ t, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming }) {
4025
- const failureOf = (id) => failed?.id === id ? failed.message : null;
4026
- return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), marketSections(shown).map((section) => /* @__PURE__ */ h(MarketSection, {
4366
+ failureOf,
4367
+ act,
4368
+ confirmActions: CONFIRM_UNINSTALL,
4369
+ onConfirming
4370
+ }), self === void 0 ? null : /* @__PURE__ */ h("div", {
4371
+ className: MarketPage_module_default.marketSelfDivider,
4372
+ "aria-hidden": "true"
4373
+ }), [
4374
+ ...shown,
4375
+ ...installedList,
4376
+ ...pluginList
4377
+ ].some((row) => row.defaultShown !== void 0) ? /* @__PURE__ */ h("p", { className: MarketPage_module_default.marketDefaultNote }, t("panels.market.defaultNote")) : null, marketSections(shown).map((section) => /* @__PURE__ */ h(MarketSection, {
4027
4378
  key: section.id,
4028
4379
  t,
4029
4380
  titleKey: section.titleKey,
4381
+ icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
4030
4382
  rows: section.rows,
4383
+ onDefault: setDefault,
4384
+ boardBusy,
4031
4385
  pending,
4032
4386
  failureOf,
4033
4387
  act,
@@ -4036,7 +4390,10 @@ window.__ModuleLoader__.load({
4036
4390
  })), /* @__PURE__ */ h(MarketSection, {
4037
4391
  t,
4038
4392
  titleKey: "panels.market.sectionPlugins",
4393
+ icon: marketSectionIcon("plugins"),
4039
4394
  rows: pluginList,
4395
+ onDefault: setDefault,
4396
+ boardBusy,
4040
4397
  pending,
4041
4398
  failureOf,
4042
4399
  act,
@@ -4045,7 +4402,10 @@ window.__ModuleLoader__.load({
4045
4402
  }), /* @__PURE__ */ h(MarketSection, {
4046
4403
  t,
4047
4404
  titleKey: installedList.length > 0 && installedList.every((row) => row.local === true) ? "panels.market.sectionLocal" : "panels.market.sectionUnlisted",
4405
+ icon: marketSectionIcon("local"),
4048
4406
  rows: installedList,
4407
+ onDefault: setDefault,
4408
+ boardBusy,
4049
4409
  pending,
4050
4410
  failureOf,
4051
4411
  act,
@@ -4062,7 +4422,7 @@ window.__ModuleLoader__.load({
4062
4422
  act
4063
4423
  }));
4064
4424
  }
4065
- function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, plugins, settling, mock }) {
4425
+ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, workbench, plugins, settling, mock, defaults = [], changed = {} }) {
4066
4426
  const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
4067
4427
  useEffect(() => {
4068
4428
  if (mock === void 0) setTitles((known) => mergeTitles(known, manifests));
@@ -4070,87 +4430,72 @@ window.__ModuleLoader__.load({
4070
4430
  const catalog = mock?.manifests ?? manifests;
4071
4431
  const effective = mock === void 0 ? capabilities : mock.capabilities;
4072
4432
  const source = liveManifests(catalog, effective, mock === void 0 && installed !== void 0 ? new Set(installed.map((item) => item.unit)) : null);
4073
- const rows = marketRows(source, effective, mock?.updates ?? updates ?? {});
4433
+ const byDefault = new Set(defaults);
4434
+ const rows = marketRows(source, effective, mock?.updates ?? updates ?? {}, byDefault, changed);
4074
4435
  const shared = sharedRows(source, effective);
4075
4436
  const [pending, setPending] = useState(mock?.pending ?? null);
4076
4437
  const provision = useHostWrite({
4077
4438
  channel: "provision",
4078
4439
  networkText: t("panels.failed")
4079
4440
  });
4441
+ const boardWrite = useHostWrite({
4442
+ channel: "prefs",
4443
+ resource: "panels",
4444
+ networkText: t("panels.failed")
4445
+ });
4446
+ const [boardBusy, setBoardBusy] = useState(false);
4447
+ const setDefault = async (id, next) => {
4448
+ if (mock !== void 0) return;
4449
+ setBoardBusy(true);
4450
+ const outcome = await boardWrite.send({
4451
+ action: next ? "show" : "hide",
4452
+ id,
4453
+ scope: "machine"
4454
+ });
4455
+ setBoardBusy(false);
4456
+ if (!outcome.ok) setNotice(t("panels.failed"));
4457
+ };
4080
4458
  const [confirming, setConfirming] = useState(mock?.confirming ?? null);
4081
4459
  const [failed, setFailed] = useState(mock?.failure ?? null);
4082
4460
  const [notice, setNotice] = useState(mock?.notice ?? null);
4083
4461
  const removing = pending !== null && pending.action === "remove-bundle" && failed?.id !== pending.id ? pending.id : null;
4084
- const installedList = installedRows((mock?.installed ?? installed ?? []).filter((module) => !(settling?.has(module.unit) ?? false) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles);
4085
- const pendingRow = removing === null || pending === null || rows.some((row) => row.id === removing) ? void 0 : {
4086
- id: removing,
4087
- titleKey: pending.titleKey ?? titles.get(removing) ?? removing,
4088
- state: "installed",
4089
- canInstall: false,
4090
- canUpdate: false,
4091
- canUninstall: true,
4092
- ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
4093
- ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
4094
- };
4462
+ const installedList = installedRows((mock?.installed ?? installed ?? []).filter((module) => !(settling?.has(module.unit) ?? false) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles, byDefault, changed);
4463
+ const pendingRow = pendingRowOf({
4464
+ pending,
4465
+ removing,
4466
+ rows,
4467
+ titles
4468
+ });
4095
4469
  const shown = pendingRow === void 0 ? rows : [...rows, pendingRow];
4096
- const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? []);
4470
+ const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
4471
+ const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? [], byDefault, changed);
4097
4472
  const rowById = new Map([
4098
4473
  ...shown,
4474
+ ...self === void 0 ? [] : [self],
4099
4475
  ...installedList,
4100
4476
  ...pluginList
4101
4477
  ].map((row) => [row.id, row]));
4102
4478
  const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
4103
- const act = async (id, action) => {
4104
- if (mock !== void 0) return;
4105
- const row = rowById.get(id);
4106
- setPending({
4107
- id,
4108
- action,
4109
- ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4110
- ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4111
- ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4112
- });
4113
- setConfirming(null);
4114
- setFailed(null);
4115
- if (action !== "uninstall-plugin") setNotice(null);
4116
- const dependency = action === "update-dependency";
4117
- const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin";
4118
- const outcome = await provision.send(dependency ? {
4119
- action,
4120
- id
4121
- } : byName ? {
4122
- action,
4123
- name: row?.pkg ?? ""
4124
- } : {
4125
- action,
4126
- unit: id
4127
- });
4128
- setPending(null);
4129
- if (!outcome.ok) {
4130
- onChanged();
4131
- setFailed({
4132
- id,
4133
- message: t("panels.market.failed", { reason: outcome.message })
4134
- });
4135
- return;
4136
- }
4137
- if (action === "uninstall-plugin") {
4138
- const kept = installedPluginKept(outcome.value);
4139
- setNotice(kept === void 0 ? null : t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) }));
4140
- }
4141
- const reason = changeFailure(changeOf(outcome.value), t);
4142
- onChanged();
4143
- if (reason !== void 0) setFailed({
4144
- id,
4145
- message: t("panels.market.failed", { reason })
4146
- });
4147
- };
4148
- const settled = freshness.loaded && installedRead !== false;
4149
- const nothing = shown.length === 0 && installedList.length === 0 && pluginList.length === 0;
4479
+ const act = marketActOf({
4480
+ t,
4481
+ mocked: mock !== void 0,
4482
+ rowOf: (id) => rowById.get(id),
4483
+ seats: {
4484
+ setPending,
4485
+ setConfirming,
4486
+ setFailed,
4487
+ setNotice
4488
+ },
4489
+ send: (body) => provision.send(body),
4490
+ onChanged
4491
+ });
4492
+ const settled = marketSettled(freshness, installedRead);
4493
+ const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
4150
4494
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketChecking, { t });
4151
4495
  if (nothing) return /* @__PURE__ */ h(MarketEmpty, { t });
4152
4496
  return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(MarketBody, {
4153
4497
  t,
4498
+ self,
4154
4499
  shown,
4155
4500
  pluginList,
4156
4501
  installedList,
@@ -4159,7 +4504,9 @@ window.__ModuleLoader__.load({
4159
4504
  failed,
4160
4505
  notice,
4161
4506
  act,
4162
- onConfirming: setConfirming
4507
+ onConfirming: setConfirming,
4508
+ setDefault,
4509
+ boardBusy
4163
4510
  }), /* @__PURE__ */ h(ConfirmUninstall, {
4164
4511
  key: confirming ?? "",
4165
4512
  t,
@@ -4175,6 +4522,182 @@ window.__ModuleLoader__.load({
4175
4522
  }));
4176
4523
  }
4177
4524
  //#endregion
4525
+ //#region src/modules/sessions/model/session-node.ts
4526
+ function visiblePendingKind(kind) {
4527
+ switch (kind) {
4528
+ case "approval":
4529
+ case "plan-review":
4530
+ case "question": return kind;
4531
+ default: return;
4532
+ }
4533
+ }
4534
+ function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
4535
+ const status = statusById.get(summary.id);
4536
+ const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
4537
+ let runningSubagentCount = 0;
4538
+ for (const child of catalog ?? []) {
4539
+ const childStatus = statusById.get(child.id);
4540
+ const childRow = list.byId[child.id];
4541
+ if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
4542
+ }
4543
+ return {
4544
+ id: summary.id,
4545
+ title: summary.blank ? "" : summary.displayTitle,
4546
+ blank: summary.blank,
4547
+ running: status?.running ?? summary.running,
4548
+ runningSubagentCount,
4549
+ completed: status?.completionUnread === true,
4550
+ pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
4551
+ updatedAt: summary.updatedAt,
4552
+ pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
4553
+ };
4554
+ }
4555
+ function sessionStatuses(node, t) {
4556
+ const subagents = node.runningSubagentCount > 0 ? {
4557
+ state: "ongoing",
4558
+ label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
4559
+ } : void 0;
4560
+ let pending;
4561
+ switch (node.pendingInteraction) {
4562
+ case "approval":
4563
+ pending = {
4564
+ state: "warning",
4565
+ label: t("status.waitingApproval")
4566
+ };
4567
+ break;
4568
+ case "plan-review":
4569
+ pending = {
4570
+ state: "warning",
4571
+ label: t("status.planReview")
4572
+ };
4573
+ break;
4574
+ case "question":
4575
+ pending = {
4576
+ state: "warning",
4577
+ label: t("status.waitingAnswer")
4578
+ };
4579
+ break;
4580
+ default: pending = void 0;
4581
+ }
4582
+ if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
4583
+ if (node.running) {
4584
+ const primary = {
4585
+ state: "ongoing",
4586
+ label: t("status.running")
4587
+ };
4588
+ return subagents === void 0 ? [primary] : [primary, subagents];
4589
+ }
4590
+ if (subagents !== void 0) return [subagents];
4591
+ if (node.completed) return [{
4592
+ state: "done",
4593
+ label: t("status.completed")
4594
+ }];
4595
+ return [{
4596
+ state: "idle",
4597
+ label: t("status.idle")
4598
+ }];
4599
+ }
4600
+ function currentSessionId(list, panelActive) {
4601
+ if (panelActive) return void 0;
4602
+ return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
4603
+ }
4604
+ function orderSessionRows(rows, pinnedIds, archivedIds) {
4605
+ const placeholders = [];
4606
+ const leading = [];
4607
+ const rest = [];
4608
+ for (const row of rows) if (row.blank) placeholders.push(row);
4609
+ else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
4610
+ else rest.push(row);
4611
+ return [
4612
+ ...placeholders,
4613
+ ...leading,
4614
+ ...rest
4615
+ ];
4616
+ }
4617
+ function workspaceOfSession(workspaces, sessionId) {
4618
+ if (sessionId === void 0) return null;
4619
+ return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
4620
+ }
4621
+ function sessionRows(workspaceSessionIds, list, archivedIds, current) {
4622
+ const rows = [];
4623
+ for (const id of workspaceSessionIds) {
4624
+ if (archivedIds.has(id)) continue;
4625
+ const row = list.byId[id];
4626
+ if (row === void 0 || row.origin === "subagent") continue;
4627
+ if (row.blank && row.id !== current) continue;
4628
+ rows.push(row);
4629
+ }
4630
+ return rows;
4631
+ }
4632
+ //#endregion
4633
+ //#region src/app/layouts/project-selection.ts
4634
+ var listeners$1 = /* @__PURE__ */ new Set();
4635
+ function selectedProjectId() {
4636
+ const stored = readText(STORAGE_KEY_PROJECT);
4637
+ return stored === "" ? null : stored;
4638
+ }
4639
+ function selectProject(workspaceId) {
4640
+ writeText(STORAGE_KEY_PROJECT, workspaceId);
4641
+ for (const listener of [...listeners$1]) try {
4642
+ listener();
4643
+ } catch {}
4644
+ }
4645
+ function subscribeProject(listener) {
4646
+ listeners$1.add(listener);
4647
+ return () => {
4648
+ listeners$1.delete(listener);
4649
+ };
4650
+ }
4651
+ //#endregion
4652
+ //#region src/app/layouts/rightbar/use-panels.ts
4653
+ function shouldDropPanels(workspace, previous) {
4654
+ return workspace !== previous;
4655
+ }
4656
+ function useEnabledUnits(refreshToken, workspace) {
4657
+ const [enabled, setEnabled] = useState(null);
4658
+ const lastWorkspace = useRef(workspace);
4659
+ useEffect(() => {
4660
+ let cancelled = false;
4661
+ if (shouldDropPanels(workspace, lastWorkspace.current)) {
4662
+ lastWorkspace.current = workspace;
4663
+ setEnabled(null);
4664
+ }
4665
+ const read = async () => {
4666
+ const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
4667
+ if (cancelled) return;
4668
+ if (response?.ok === true && Array.isArray(response.units)) setEnabled({
4669
+ units: response.units,
4670
+ plugins: Array.isArray(response.plugins) ? response.plugins : [],
4671
+ defaults: Array.isArray(response.defaults) ? response.defaults : [],
4672
+ own: response.own === true,
4673
+ changed: response.changed ?? {}
4674
+ });
4675
+ };
4676
+ read();
4677
+ return () => {
4678
+ cancelled = true;
4679
+ };
4680
+ }, [
4681
+ refreshToken,
4682
+ useFactRevision("panels"),
4683
+ workspace
4684
+ ]);
4685
+ return enabled;
4686
+ }
4687
+ function useSelectedProjectId() {
4688
+ const [id, setId] = useState(() => selectedProjectId());
4689
+ useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
4690
+ return id;
4691
+ }
4692
+ function useBoardWorkspace(workspaces, sessions) {
4693
+ const projectId = useSelectedProjectId();
4694
+ const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
4695
+ return {
4696
+ workspace,
4697
+ path: workspace?.path ?? null
4698
+ };
4699
+ }
4700
+ //#endregion
4178
4701
  //#region src/shared/api/bundle-install.ts
4179
4702
  var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
4180
4703
  var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
@@ -4204,10 +4727,11 @@ window.__ModuleLoader__.load({
4204
4727
  var state = {
4205
4728
  modules: null,
4206
4729
  plugins: null,
4730
+ workbench: null,
4207
4731
  read: false,
4208
4732
  checkedAt: null
4209
4733
  };
4210
- var listeners$1 = /* @__PURE__ */ new Set();
4734
+ var listeners = /* @__PURE__ */ new Set();
4211
4735
  var inFlight = null;
4212
4736
  var readSeq = 0;
4213
4737
  var newestForceSeq = -1;
@@ -4215,14 +4739,14 @@ window.__ModuleLoader__.load({
4215
4739
  return state;
4216
4740
  }
4217
4741
  function subscribeModuleVersions(listener) {
4218
- listeners$1.add(listener);
4742
+ listeners.add(listener);
4219
4743
  return () => {
4220
- listeners$1.delete(listener);
4744
+ listeners.delete(listener);
4221
4745
  };
4222
4746
  }
4223
4747
  function publish(next) {
4224
4748
  state = next;
4225
- for (const listener of [...listeners$1]) listener();
4749
+ for (const listener of [...listeners]) listener();
4226
4750
  }
4227
4751
  function runModuleVersionsRead(force = false) {
4228
4752
  if (inFlight !== null && inFlight.force === force) return inFlight.promise;
@@ -4235,6 +4759,7 @@ window.__ModuleLoader__.load({
4235
4759
  publish({
4236
4760
  modules: versions?.ok === true ? versions.modules : state.modules,
4237
4761
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
4762
+ workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
4238
4763
  read: true,
4239
4764
  checkedAt: Date.now()
4240
4765
  });
@@ -4267,6 +4792,7 @@ window.__ModuleLoader__.load({
4267
4792
  return {
4268
4793
  modules: value.modules,
4269
4794
  plugins: value.plugins,
4795
+ workbench: value.workbench,
4270
4796
  read: value.read,
4271
4797
  checkedAt: value.checkedAt,
4272
4798
  reload
@@ -4491,7 +5017,9 @@ window.__ModuleLoader__.load({
4491
5017
  const preview = state.preview;
4492
5018
  if (preview === null) return null;
4493
5019
  const source = preview.registry === "" ? t("panels.market.add.registryDefault") : preview.registry;
4494
- return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.subject }, /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectName }, preview.name), preview.version === "" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.installVersion", { version: preview.version })), preview.description === "" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectDesc }, preview.description), /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, source)));
5020
+ const plugin = preview.kind === "plugin";
5021
+ const pluginName = plugin ? preview.pluginName : void 0;
5022
+ return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.subject }, /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectName }, preview.name), preview.version === "" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.installVersion", { version: preview.version })), pluginName === void 0 || pluginName === preview.name ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.pluginAlias", { name: pluginName })), preview.description === "" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectDesc }, preview.description), /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, source)), plugin ? /* @__PURE__ */ h("p", { className: AddModule_module_default.result }, t("panels.market.add.pluginPreview")) : null);
4495
5023
  }
4496
5024
  function AddModuleResult({ t, state }) {
4497
5025
  const outcome = state.outcome;
@@ -4499,26 +5027,27 @@ window.__ModuleLoader__.load({
4499
5027
  const reason = failureReason(failureCode(outcome.change), outcome.change.application, t);
4500
5028
  const supply = supplyKey(outcome.supply.state);
4501
5029
  const builds = state.builds;
4502
- const failed = outcome.change.application === "failed";
4503
- const restart = outcome.change.application === "restart-required";
4504
- const cancelled = outcome.change.application === "cancelled";
4505
- const notModule = outcome.supply.state === "not-a-module";
4506
5030
  const plugin = outcome.plugin;
5031
+ const kind = resultKindOf({
5032
+ change: outcome.change,
5033
+ supplyState: outcome.supply.state,
5034
+ plugin: plugin !== void 0
5035
+ });
4507
5036
  const name = outcome.module.kind === "module" ? outcome.module.unit : outcome.module.pkg;
4508
5037
  return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.hero }, /* @__PURE__ */ h("span", {
4509
5038
  className: AddModule_module_default.heroIcon,
4510
- "data-state": failed ? "error" : cancelled ? "idle" : "done",
5039
+ "data-state": kind === "failed" ? "error" : kind === "cancelled" ? "idle" : "done",
4511
5040
  "aria-hidden": "true"
4512
- }, failed ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, { size: 28 }) : cancelled ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
5041
+ }, kind === "failed" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, { size: 28 }) : kind === "cancelled" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4513
5042
  state: "idle",
4514
5043
  size: 28
4515
5044
  }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconCheckCircleFillRegular, { size: 28 })), /* @__PURE__ */ h("h2", {
4516
5045
  className: AddModule_module_default.wizardTitle,
4517
- role: failed ? "alert" : "status"
4518
- }, failed ? t("panels.market.add.failedTitle") : cancelled ? t("panels.market.add.cancelledTitle") : t("panels.market.add.installedTitle"))), /* @__PURE__ */ h("div", { className: AddModule_module_default.subject }, /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectName }, outcome.module.pkg), name === outcome.module.pkg ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, name), outcome.module.version === void 0 ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.installVersion", { version: outcome.module.version }))), plugin !== void 0 ? /* @__PURE__ */ h("p", { className: AddModule_module_default.result }, t("panels.market.add.installedPlugin", { name: plugin.name ?? plugin.pkg })) : failed ? /* @__PURE__ */ h("p", {
5046
+ role: kind === "failed" ? "alert" : "status"
5047
+ }, kind === "failed" ? t("panels.market.add.failedTitle") : kind === "cancelled" ? t("panels.market.add.cancelledTitle") : t("panels.market.add.installedTitle"))), /* @__PURE__ */ h("div", { className: AddModule_module_default.subject }, /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectName }, outcome.module.pkg), name === outcome.module.pkg ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, name), outcome.module.version === void 0 ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.subjectMeta }, t("panels.market.add.installVersion", { version: outcome.module.version }))), kind === "plugin" && plugin !== void 0 ? /* @__PURE__ */ h("p", { className: AddModule_module_default.result }, t("panels.market.add.installedPlugin", { name: plugin.name ?? plugin.pkg })) : kind === "failed" ? /* @__PURE__ */ h("p", {
4519
5048
  className: AddModule_module_default.resultWarn,
4520
5049
  role: "alert"
4521
- }, t("panels.market.add.failed", { reason })) : restart ? /* @__PURE__ */ h("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")) : cancelled || notModule ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ h("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalCaution }, t("panels.market.add.approveCaution"))), supply === void 0 || outcome.supply.state !== "failed" && (failed || cancelled) ? null : /* @__PURE__ */ h("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ h("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)));
5050
+ }, t("panels.market.add.failed", { reason })) : kind === "restart" ? /* @__PURE__ */ h("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")) : kind === "quiet" ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ h("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ h("p", { className: AddModule_module_default.approvalCaution }, t("panels.market.add.approveCaution"))), supply === void 0 || outcome.supply.state !== "failed" && (kind === "failed" || kind === "cancelled") ? null : /* @__PURE__ */ h("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ h("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ h("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)));
4522
5051
  }
4523
5052
  //#endregion
4524
5053
  //#region src/app/layouts/market/add-module-mock.ts
@@ -4595,6 +5124,7 @@ window.__ModuleLoader__.load({
4595
5124
  phase: "preview",
4596
5125
  spec: "@dsh-workbench/module-hello",
4597
5126
  preview: {
5127
+ kind: "module",
4598
5128
  name: "@dsh-workbench/module-hello",
4599
5129
  version: "0.1.2",
4600
5130
  description: "最小样本模块:一枚「你好」卡片",
@@ -4607,12 +5137,27 @@ window.__ModuleLoader__.load({
4607
5137
  phase: "preview",
4608
5138
  spec: "@dsh-workbench/module-hello",
4609
5139
  preview: {
5140
+ kind: "module",
4610
5141
  name: "@dsh-workbench/module-hello",
4611
5142
  version: "",
4612
5143
  description: "",
4613
5144
  registry: ""
4614
5145
  }
4615
5146
  },
5147
+ {
5148
+ id: "preview-plugin",
5149
+ label: "预览(opencli 插件)",
5150
+ phase: "preview",
5151
+ spec: "opencli-plugin-grafana",
5152
+ preview: {
5153
+ kind: "plugin",
5154
+ name: "opencli-plugin-grafana",
5155
+ version: "1.0.16",
5156
+ description: "",
5157
+ registry: "registry.npmmirror.com",
5158
+ pluginName: "grafana"
5159
+ }
5160
+ },
4616
5161
  {
4617
5162
  id: "installing",
4618
5163
  label: "正在安装(可取消)",
@@ -4902,12 +5447,7 @@ window.__ModuleLoader__.load({
4902
5447
  setPhase("idle");
4903
5448
  return;
4904
5449
  }
4905
- setPreview({
4906
- name: inspection.name ?? wanted,
4907
- version: inspection.version ?? "",
4908
- description: inspection.description ?? "",
4909
- registry: inspection.registry ?? ""
4910
- });
5450
+ setPreview(previewOf(inspection, wanted));
4911
5451
  setPhase("preview");
4912
5452
  });
4913
5453
  }, [spec, registry]);
@@ -5129,8 +5669,8 @@ window.__ModuleLoader__.load({
5129
5669
  return function MarketEntryIcon({ size = 16 }) {
5130
5670
  const manifests = useLiveManifests(units);
5131
5671
  const { capabilities } = useCapabilityMap(0);
5132
- const { modules } = useModuleVersions();
5133
- const hasUpdates = marketHintVisible(manifests, capabilities, modules);
5672
+ const { modules, workbench } = useModuleVersions();
5673
+ const hasUpdates = marketHintVisible(manifests, capabilities, modules, workbench);
5134
5674
  useEffect(() => {
5135
5675
  publishPanelHint(MARKET_PANEL_ID, hasUpdates ? { labelKey: "panels.market.hasNew" } : null);
5136
5676
  return () => publishPanelHint(MARKET_PANEL_ID, null);
@@ -5141,8 +5681,10 @@ window.__ModuleLoader__.load({
5141
5681
  function MarketPanel({ t, units }) {
5142
5682
  const manifests = useLiveManifests(units);
5143
5683
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
5144
- const { modules, plugins, read: installedRead, reload: reloadVersions } = useModuleVersions();
5684
+ const { modules, plugins, workbench, read: installedRead, reload: reloadVersions } = useModuleVersions();
5685
+ const machineBoard = useEnabledUnits(0, null);
5145
5686
  const [adding, setAdding] = useState(false);
5687
+ const openAddModule = useCallback(() => setAdding(true), []);
5146
5688
  const updates = useMemo(() => marketUpdatesOf(modules), [modules]);
5147
5689
  const installed = modules === null ? void 0 : withClientRefusals(modules, units.refusals());
5148
5690
  const reload = useCallback(() => {
@@ -5201,11 +5743,14 @@ window.__ModuleLoader__.load({
5201
5743
  });
5202
5744
  const mock = fixturePick.enabled ? fixturePick.current : void 0;
5203
5745
  const mockNonce = fixturePick.nonce;
5746
+ const shownFreshness = mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS;
5747
+ const shownRead = mock === void 0 ? installedRead : mock.installedRead ?? true;
5748
+ const busy = !marketSettled(shownFreshness, shownRead) || shownFreshness.checking;
5204
5749
  return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketPage }, /* @__PURE__ */ h("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ h("div", null, /* @__PURE__ */ h("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ h("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketPageTools }, /* @__PURE__ */ h(Tip, { label: t("panels.market.recheck") }, /* @__PURE__ */ h("button", {
5205
5750
  type: "button",
5206
- className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
5751
+ className: `${MarketPage_module_default.marketIconButton}${shownFreshness.checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
5207
5752
  "aria-label": t("panels.market.checkUpdates"),
5208
- disabled: checking,
5753
+ disabled: busy,
5209
5754
  onClick: () => {
5210
5755
  forceProbe();
5211
5756
  reloadVersions({ force: true });
@@ -5218,7 +5763,8 @@ window.__ModuleLoader__.load({
5218
5763
  size: "sm",
5219
5764
  className: MarketPage_module_default.marketAddButton,
5220
5765
  icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
5221
- onClick: () => setAdding(true)
5766
+ disabled: busy,
5767
+ onClick: openAddModule
5222
5768
  }, t("panels.market.add.open")))), fixturePick.enabled ? /* @__PURE__ */ h(MockStrip, {
5223
5769
  mocks: marketMocks,
5224
5770
  index: fixturePick.index,
@@ -5228,14 +5774,17 @@ window.__ModuleLoader__.load({
5228
5774
  t,
5229
5775
  manifests,
5230
5776
  capabilities,
5231
- freshness: mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS,
5777
+ freshness: shownFreshness,
5232
5778
  onChanged: reload,
5233
5779
  updates,
5234
5780
  installed,
5235
- installedRead: mock === void 0 ? installedRead : mock.installedRead ?? true,
5781
+ installedRead: shownRead,
5782
+ workbench,
5236
5783
  plugins,
5237
5784
  settling: mock === void 0 ? settling : void 0,
5238
- mock
5785
+ mock,
5786
+ defaults: machineBoard?.defaults ?? [],
5787
+ changed: machineBoard?.changed ?? {}
5239
5788
  }), /* @__PURE__ */ h(AddModuleDialog, {
5240
5789
  t,
5241
5790
  open: adding,
@@ -5260,25 +5809,6 @@ window.__ModuleLoader__.load({
5260
5809
  }, MarketPanel));
5261
5810
  }
5262
5811
  //#endregion
5263
- //#region src/app/layouts/project-selection.ts
5264
- var listeners = /* @__PURE__ */ new Set();
5265
- function selectedProjectId() {
5266
- const stored = readText(STORAGE_KEY_PROJECT);
5267
- return stored === "" ? null : stored;
5268
- }
5269
- function selectProject(workspaceId) {
5270
- writeText(STORAGE_KEY_PROJECT, workspaceId);
5271
- for (const listener of [...listeners]) try {
5272
- listener();
5273
- } catch {}
5274
- }
5275
- function subscribeProject(listener) {
5276
- listeners.add(listener);
5277
- return () => {
5278
- listeners.delete(listener);
5279
- };
5280
- }
5281
- //#endregion
5282
5812
  //#region src/shared/api/diy.ts
5283
5813
  var DIY_PRESET_ID = "workbench-diy";
5284
5814
  var WORKSHOP_TITLE = "工作台DIY";
@@ -6216,20 +6746,26 @@ window.__ModuleLoader__.load({
6216
6746
  });
6217
6747
  }
6218
6748
  var ModulesPage_module_default = {
6219
- trigger: "_trigger_1weg4_1",
6220
- pop: "_pop_1weg4_7",
6221
- head: "_head_1weg4_21",
6222
- title: "_title_1weg4_29",
6223
- reset: "_reset_1weg4_37",
6224
- list: "_list_1weg4_59",
6225
- row: "_row_1weg4_68",
6226
- rowOver: "_rowOver_1weg4_83",
6227
- ghost: "_ghost_1weg4_93",
6228
- grip: "_grip_1weg4_108",
6229
- label: "_label_1weg4_116",
6230
- name: "_name_1weg4_123",
6231
- error: "_error_1weg4_134",
6232
- dep: "_dep_1weg4_142"
6749
+ trigger: "_trigger_1yptb_1",
6750
+ pop: "_pop_1yptb_6",
6751
+ head: "_head_1yptb_20",
6752
+ title: "_title_1yptb_28",
6753
+ rowControls: "_rowControls_1yptb_36",
6754
+ followBox: "_followBox_1yptb_43",
6755
+ switchFollowing: "_switchFollowing_1yptb_49",
6756
+ reset: "_reset_1yptb_53",
6757
+ list: "_list_1yptb_75",
6758
+ row: "_row_1yptb_36",
6759
+ rowOver: "_rowOver_1yptb_99",
6760
+ ghost: "_ghost_1yptb_109",
6761
+ grip: "_grip_1yptb_124",
6762
+ label: "_label_1yptb_132",
6763
+ name: "_name_1yptb_139",
6764
+ error: "_error_1yptb_150",
6765
+ dep: "_dep_1yptb_158",
6766
+ pluginList: "_pluginList_1yptb_166",
6767
+ pluginRow: "_pluginRow_1yptb_171",
6768
+ plugin: "_plugin_1yptb_166"
6233
6769
  };
6234
6770
  //#endregion
6235
6771
  //#region src/app/layouts/rightbar/panel-mock.ts
@@ -6242,6 +6778,23 @@ window.__ModuleLoader__.load({
6242
6778
  hasCard: true
6243
6779
  };
6244
6780
  }
6781
+ function plugin(id, pkg, title, shown) {
6782
+ return {
6783
+ id,
6784
+ pkg,
6785
+ title,
6786
+ shown,
6787
+ source: "user"
6788
+ };
6789
+ }
6790
+ var PLUGIN_MOCK = {
6791
+ id: "plugin",
6792
+ label: "opencli 插件行(标出是插件,能开能关)",
6793
+ units: [],
6794
+ plugins: [plugin("plugin:opencli-plugin-cmdb", "opencli-plugin-cmdb", "cmdb", true), plugin("plugin:opencli-plugin-notes", "opencli-plugin-notes", "notes", false)],
6795
+ capabilities: {},
6796
+ expect: { rows: 0 }
6797
+ };
6245
6798
  function probe(unit, status) {
6246
6799
  return { [unit]: {
6247
6800
  unit,
@@ -6259,7 +6812,7 @@ window.__ModuleLoader__.load({
6259
6812
  units: [],
6260
6813
  capabilities: {},
6261
6814
  expect: { rows: 0 }
6262
- }];
6815
+ }, PLUGIN_MOCK];
6263
6816
  const titleKey = found.card?.titleKey ?? found.id;
6264
6817
  const id = found.id;
6265
6818
  const on = row$1(id, titleKey, true);
@@ -6405,7 +6958,8 @@ window.__ModuleLoader__.load({
6405
6958
  rows: 3,
6406
6959
  on: true
6407
6960
  }
6408
- }
6961
+ },
6962
+ PLUGIN_MOCK
6409
6963
  ];
6410
6964
  }
6411
6965
  //#endregion
@@ -6425,6 +6979,29 @@ window.__ModuleLoader__.load({
6425
6979
  if (capability.status === "missing-commands") return "panels.dep.missingCommands";
6426
6980
  return "panels.dep.unchecked";
6427
6981
  }
6982
+ function moduleRow(unit, capability) {
6983
+ const badge = panelBadgeKey(capability);
6984
+ return {
6985
+ id: unit.id,
6986
+ titleKey: unit.titleKey,
6987
+ plugin: false,
6988
+ ...badge === void 0 ? {} : { badgeKey: badge },
6989
+ shown: unit.shown,
6990
+ source: unit.source
6991
+ };
6992
+ }
6993
+ function pluginRow(plugin) {
6994
+ return {
6995
+ id: plugin.id,
6996
+ title: plugin.title,
6997
+ plugin: true,
6998
+ shown: plugin.shown,
6999
+ source: plugin.source
7000
+ };
7001
+ }
7002
+ function selectPanelRows(units, plugins, capabilities) {
7003
+ return [...selectPanelUnits(units, capabilities).map((unit) => moduleRow(unit, capabilities?.[unit.id])), ...plugins.map(pluginRow)];
7004
+ }
6428
7005
  function selectBoardModules(units, byId, capabilities) {
6429
7006
  if (units === null) return [];
6430
7007
  return units.filter((unit) => unit.shown && available(capabilities?.[unit.id])).map((unit) => byId(unit.id)).filter((module) => module !== void 0);
@@ -6438,13 +7015,56 @@ window.__ModuleLoader__.load({
6438
7015
  };
6439
7016
  }
6440
7017
  //#endregion
7018
+ //#region src/app/layouts/rightbar/PanelRowControls.tsx
7019
+ function PanelRowControls({ t, unit, label, busy, onWrite }) {
7020
+ return /* @__PURE__ */ h("span", { className: ModulesPage_module_default.rowControls }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Checkbox, {
7021
+ checked: unit.source !== "user",
7022
+ disabled: busy,
7023
+ label: t("panels.followGlobal"),
7024
+ title: t("panels.followGlobalHint"),
7025
+ className: ModulesPage_module_default.followBox,
7026
+ onChange: (next) => onWrite(next ? {
7027
+ action: "follow",
7028
+ id: unit.id
7029
+ } : {
7030
+ action: unit.shown ? "show" : "hide",
7031
+ id: unit.id
7032
+ })
7033
+ }), /* @__PURE__ */ h("span", { className: unit.source === "user" ? void 0 : ModulesPage_module_default.switchFollowing }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Switch, {
7034
+ checked: unit.shown,
7035
+ label: `${label} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
7036
+ disabled: busy,
7037
+ onChange: (next) => onWrite({
7038
+ action: next ? "show" : "hide",
7039
+ id: unit.id
7040
+ })
7041
+ })));
7042
+ }
7043
+ //#endregion
7044
+ //#region src/app/layouts/rightbar/PanelPluginRows.tsx
7045
+ function PanelPluginRows({ t, rows, busy, onWrite }) {
7046
+ if (rows.length === 0) return null;
7047
+ return /* @__PURE__ */ h("ul", { className: `${ModulesPage_module_default.list} ${ModulesPage_module_default.pluginList}` }, rows.map((row) => /* @__PURE__ */ h("li", {
7048
+ className: `${ModulesPage_module_default.row} ${ModulesPage_module_default.pluginRow}`,
7049
+ key: row.id
7050
+ }, /* @__PURE__ */ h("span", { "aria-hidden": "true" }), /* @__PURE__ */ h("span", { className: ModulesPage_module_default.label }, /* @__PURE__ */ h("span", { className: ModulesPage_module_default.name }, row.title ?? t(row.titleKey ?? row.id)), /* @__PURE__ */ h("span", { className: ModulesPage_module_default.plugin }, t("panels.rowPlugin"))), /* @__PURE__ */ h(PanelRowControls, {
7051
+ t,
7052
+ unit: row,
7053
+ label: row.title ?? row.id,
7054
+ busy,
7055
+ onWrite
7056
+ }))));
7057
+ }
7058
+ //#endregion
6441
7059
  //#region src/app/layouts/rightbar/ModulesPage.tsx
6442
7060
  var BLANK_DRAG_IMAGE = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
6443
- function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpenMarket, mocked = false, mock }) {
7061
+ function ModulesPage({ t, units, plugins = [], workspace, capabilities, loading = false, onOpenMarket, mocked = false, mock, own = false }) {
6444
7062
  const [drag, setDrag] = useState(mock?.drag ?? null);
6445
7063
  const [busy, setBusy] = useState(mock?.busy ?? false);
6446
7064
  const [failed, setFailed] = useState(mock?.failed ?? false);
6447
- const rows = selectPanelUnits(units, capabilities);
7065
+ const rows = selectPanelRows(units, plugins, capabilities);
7066
+ const modules = rows.filter((row) => !row.plugin);
7067
+ const pluginRows = rows.filter((row) => row.plugin);
6448
7068
  const empty = !loading && rows.length === 0;
6449
7069
  const prefWrite = useHostWrite({
6450
7070
  channel: "prefs",
@@ -6462,9 +7082,10 @@ window.__ModuleLoader__.load({
6462
7082
  setBusy(false);
6463
7083
  if (!outcome.ok) setFailed(true);
6464
7084
  };
7085
+ const writeRow = (body) => void write(body);
6465
7086
  const drop = () => {
6466
7087
  if (drag === null) return;
6467
- const moved = rows[drag.from];
7088
+ const moved = modules[drag.from];
6468
7089
  setDrag(null);
6469
7090
  if (moved === void 0 || drag.from === drag.over) return;
6470
7091
  write({
@@ -6473,14 +7094,14 @@ window.__ModuleLoader__.load({
6473
7094
  index: drag.over
6474
7095
  });
6475
7096
  };
6476
- const dragging = drag === null ? void 0 : rows[drag.from];
7097
+ const dragging = drag === null ? void 0 : modules[drag.from];
6477
7098
  return /* @__PURE__ */ h(Fragment, null, drag?.at === void 0 || dragging === void 0 ? null : /* @__PURE__ */ h("div", {
6478
7099
  className: ModulesPage_module_default.ghost,
6479
7100
  style: {
6480
7101
  left: `${drag.at.x + 12}px`,
6481
7102
  top: `${drag.at.y - 12}px`
6482
7103
  }
6483
- }, t(dragging.titleKey)), empty ? /* @__PURE__ */ h(CenteredState, {
7104
+ }, t(dragging.titleKey ?? dragging.id)), empty ? /* @__PURE__ */ h(CenteredState, {
6484
7105
  compact: true,
6485
7106
  icon: null,
6486
7107
  title: t("panels.noneInstalled"),
@@ -6491,60 +7112,59 @@ window.__ModuleLoader__.load({
6491
7112
  variant: "outline",
6492
7113
  onClick: onOpenMarket
6493
7114
  }, t("panels.browseMarket"))
6494
- }) : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, rows.map((unit, index) => {
6495
- const badge = panelBadgeKey(capabilities?.[unit.id]);
6496
- const dep = badge === void 0 ? void 0 : t(badge);
6497
- return /* @__PURE__ */ h("li", {
6498
- className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
6499
- key: unit.id,
6500
- draggable: true,
6501
- onDragStart: (event) => {
6502
- const blank = new Image();
6503
- blank.src = BLANK_DRAG_IMAGE;
6504
- event.dataTransfer.setDragImage(blank, 0, 0);
6505
- setDrag({
6506
- from: index,
6507
- over: index,
6508
- at: {
6509
- x: event.clientX,
6510
- y: event.clientY
6511
- }
6512
- });
6513
- },
6514
- onDragOver: (event) => {
6515
- event.preventDefault();
6516
- if (drag !== null) setDrag({
6517
- from: drag.from,
6518
- over: index,
6519
- at: {
6520
- x: event.clientX,
6521
- y: event.clientY
6522
- }
6523
- });
6524
- },
6525
- onDragEnd: drop,
6526
- onDrop: (event) => {
6527
- event.preventDefault();
6528
- drop();
6529
- }
6530
- }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
6531
- className: ModulesPage_module_default.grip,
6532
- "aria-hidden": "true"
6533
- }, "⠿")), /* @__PURE__ */ h("span", { className: ModulesPage_module_default.label }, /* @__PURE__ */ h("span", { className: ModulesPage_module_default.name }, t(unit.titleKey)), dep === void 0 ? null : /* @__PURE__ */ h("span", { className: ModulesPage_module_default.dep }, dep)), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Switch, {
6534
- checked: unit.shown,
6535
- label: `${t(unit.titleKey)} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
6536
- disabled: busy,
6537
- onChange: (next) => void write({
6538
- action: next ? "show" : "hide",
6539
- id: unit.id
6540
- })
6541
- }));
6542
- })), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, /* @__PURE__ */ h("button", {
7115
+ }) : null, modules.length === 0 ? null : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, modules.map((row, index) => /* @__PURE__ */ h("li", {
7116
+ className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
7117
+ key: row.id,
7118
+ draggable: true,
7119
+ onDragStart: (event) => {
7120
+ const blank = new Image();
7121
+ blank.src = BLANK_DRAG_IMAGE;
7122
+ event.dataTransfer.setDragImage(blank, 0, 0);
7123
+ setDrag({
7124
+ from: index,
7125
+ over: index,
7126
+ at: {
7127
+ x: event.clientX,
7128
+ y: event.clientY
7129
+ }
7130
+ });
7131
+ },
7132
+ onDragOver: (event) => {
7133
+ event.preventDefault();
7134
+ if (drag !== null) setDrag({
7135
+ from: drag.from,
7136
+ over: index,
7137
+ at: {
7138
+ x: event.clientX,
7139
+ y: event.clientY
7140
+ }
7141
+ });
7142
+ },
7143
+ onDragEnd: drop,
7144
+ onDrop: (event) => {
7145
+ event.preventDefault();
7146
+ drop();
7147
+ }
7148
+ }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
7149
+ className: ModulesPage_module_default.grip,
7150
+ "aria-hidden": "true"
7151
+ }, "⠿")), /* @__PURE__ */ h("span", { className: ModulesPage_module_default.label }, /* @__PURE__ */ h("span", { className: ModulesPage_module_default.name }, t(row.titleKey ?? row.id)), row.badgeKey === void 0 ? null : /* @__PURE__ */ h("span", { className: ModulesPage_module_default.dep }, t(row.badgeKey))), /* @__PURE__ */ h(PanelRowControls, {
7152
+ t,
7153
+ unit: row,
7154
+ label: t(row.titleKey ?? row.id),
7155
+ busy,
7156
+ onWrite: writeRow
7157
+ })))), /* @__PURE__ */ h(PanelPluginRows, {
7158
+ t,
7159
+ rows: pluginRows,
7160
+ busy,
7161
+ onWrite: writeRow
7162
+ }), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, own ? /* @__PURE__ */ h("button", {
6543
7163
  type: "button",
6544
7164
  className: ModulesPage_module_default.reset,
6545
7165
  disabled: busy,
6546
7166
  onClick: () => void write({ action: "reset" })
6547
- }, t("panels.reset"))), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
7167
+ }, t("panels.followAll")) : null), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
6548
7168
  }
6549
7169
  //#endregion
6550
7170
  //#region src/app/layouts/rightbar/PanelModules.tsx
@@ -6576,7 +7196,7 @@ window.__ModuleLoader__.load({
6576
7196
  const panelMock = fixturePick.enabled ? fixturePick.current : void 0;
6577
7197
  const mockNonce = fixturePick.nonce;
6578
7198
  (0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(root, open, onOpenChange);
6579
- const units = enabledUnits ?? [];
7199
+ const units = enabledUnits?.units ?? [];
6580
7200
  return /* @__PURE__ */ h("div", {
6581
7201
  className: ModulesPage_module_default.trigger,
6582
7202
  ref: root
@@ -6601,8 +7221,10 @@ window.__ModuleLoader__.load({
6601
7221
  key: `${panelMock?.id ?? "real-modules"}-${mockNonce}`,
6602
7222
  t,
6603
7223
  units: panelMock?.units ?? units,
7224
+ plugins: panelMock?.plugins ?? enabledUnits?.plugins ?? [],
6604
7225
  capabilities: panelMock === void 0 ? fixturePick.enabled ? null : capabilities : panelMock.capabilities,
6605
7226
  loading: enabledUnits === null,
7227
+ own: enabledUnits?.own === true,
6606
7228
  onOpenMarket,
6607
7229
  mocked: fixturePick.enabled,
6608
7230
  workspace,
@@ -6779,114 +7401,6 @@ window.__ModuleLoader__.load({
6779
7401
  };
6780
7402
  }
6781
7403
  //#endregion
6782
- //#region src/modules/sessions/model/session-node.ts
6783
- function visiblePendingKind(kind) {
6784
- switch (kind) {
6785
- case "approval":
6786
- case "plan-review":
6787
- case "question": return kind;
6788
- default: return;
6789
- }
6790
- }
6791
- function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
6792
- const status = statusById.get(summary.id);
6793
- const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
6794
- let runningSubagentCount = 0;
6795
- for (const child of catalog ?? []) {
6796
- const childStatus = statusById.get(child.id);
6797
- const childRow = list.byId[child.id];
6798
- if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
6799
- }
6800
- return {
6801
- id: summary.id,
6802
- title: summary.blank ? "" : summary.displayTitle,
6803
- blank: summary.blank,
6804
- running: status?.running ?? summary.running,
6805
- runningSubagentCount,
6806
- completed: status?.completionUnread === true,
6807
- pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
6808
- updatedAt: summary.updatedAt,
6809
- pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
6810
- };
6811
- }
6812
- function sessionStatuses(node, t) {
6813
- const subagents = node.runningSubagentCount > 0 ? {
6814
- state: "ongoing",
6815
- label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
6816
- } : void 0;
6817
- let pending;
6818
- switch (node.pendingInteraction) {
6819
- case "approval":
6820
- pending = {
6821
- state: "warning",
6822
- label: t("status.waitingApproval")
6823
- };
6824
- break;
6825
- case "plan-review":
6826
- pending = {
6827
- state: "warning",
6828
- label: t("status.planReview")
6829
- };
6830
- break;
6831
- case "question":
6832
- pending = {
6833
- state: "warning",
6834
- label: t("status.waitingAnswer")
6835
- };
6836
- break;
6837
- default: pending = void 0;
6838
- }
6839
- if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
6840
- if (node.running) {
6841
- const primary = {
6842
- state: "ongoing",
6843
- label: t("status.running")
6844
- };
6845
- return subagents === void 0 ? [primary] : [primary, subagents];
6846
- }
6847
- if (subagents !== void 0) return [subagents];
6848
- if (node.completed) return [{
6849
- state: "done",
6850
- label: t("status.completed")
6851
- }];
6852
- return [{
6853
- state: "idle",
6854
- label: t("status.idle")
6855
- }];
6856
- }
6857
- function currentSessionId(list, panelActive) {
6858
- if (panelActive) return void 0;
6859
- return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
6860
- }
6861
- function orderSessionRows(rows, pinnedIds, archivedIds) {
6862
- const placeholders = [];
6863
- const leading = [];
6864
- const rest = [];
6865
- for (const row of rows) if (row.blank) placeholders.push(row);
6866
- else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
6867
- else rest.push(row);
6868
- return [
6869
- ...placeholders,
6870
- ...leading,
6871
- ...rest
6872
- ];
6873
- }
6874
- function workspaceOfSession(workspaces, sessionId) {
6875
- if (sessionId === void 0) return null;
6876
- return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
6877
- }
6878
- function sessionRows(workspaceSessionIds, list, archivedIds, current) {
6879
- const rows = [];
6880
- for (const id of workspaceSessionIds) {
6881
- if (archivedIds.has(id)) continue;
6882
- const row = list.byId[id];
6883
- if (row === void 0 || row.origin === "subagent") continue;
6884
- if (row.blank && row.id !== current) continue;
6885
- rows.push(row);
6886
- }
6887
- return rows;
6888
- }
6889
- //#endregion
6890
7404
  //#region src/app/layouts/rightbar/suite-world.ts
6891
7405
  function createSuiteWorld(input) {
6892
7406
  const sessionId = currentSessionId(input.sessions, false);
@@ -6902,49 +7416,6 @@ window.__ModuleLoader__.load({
6902
7416
  }
6903
7417
  };
6904
7418
  }
6905
- //#endregion
6906
- //#region src/app/layouts/rightbar/use-panels.ts
6907
- function shouldDropPanels(workspace, previous) {
6908
- return workspace !== previous;
6909
- }
6910
- function useEnabledUnits(refreshToken, workspace) {
6911
- const [enabled, setEnabled] = useState(null);
6912
- const lastWorkspace = useRef(workspace);
6913
- useEffect(() => {
6914
- let cancelled = false;
6915
- if (shouldDropPanels(workspace, lastWorkspace.current)) {
6916
- lastWorkspace.current = workspace;
6917
- setEnabled(null);
6918
- }
6919
- const read = async () => {
6920
- const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
6921
- if (cancelled) return;
6922
- if (response?.ok === true && Array.isArray(response.units)) setEnabled(response.units);
6923
- };
6924
- read();
6925
- return () => {
6926
- cancelled = true;
6927
- };
6928
- }, [
6929
- refreshToken,
6930
- useFactRevision("panels"),
6931
- workspace
6932
- ]);
6933
- return enabled;
6934
- }
6935
- function useSelectedProjectId() {
6936
- const [id, setId] = useState(() => selectedProjectId());
6937
- useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
6938
- return id;
6939
- }
6940
- function useBoardWorkspace(workspaces, sessions) {
6941
- const projectId = useSelectedProjectId();
6942
- const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
6943
- return {
6944
- workspace,
6945
- path: workspace?.path ?? null
6946
- };
6947
- }
6948
7419
  var Rightbar_module_default = {
6949
7420
  panel: "_panel_135e7_1",
6950
7421
  columns: "_columns_135e7_18",
@@ -7069,13 +7540,14 @@ window.__ModuleLoader__.load({
7069
7540
  const { capabilities } = useCapabilityMap(panelToken);
7070
7541
  const board = useBoardWorkspace(workspaces, sessions);
7071
7542
  const boardWorkspace = board.path;
7072
- const enabledUnits = useEnabledUnits(panelToken, boardWorkspace);
7543
+ const panelBoard = useEnabledUnits(panelToken, boardWorkspace);
7544
+ const enabledUnits = panelBoard?.units ?? null;
7073
7545
  const [modulesOpen, setModulesOpen] = useState(false);
7074
7546
  const fixtures = useBoardMock(fixtureRoster(manifests));
7075
7547
  const visibleModules = selectBoardModules(enabledUnits, (id) => modules.byId(id), capabilities);
7076
7548
  const plan = planBoard(fixtures.shape, {
7077
7549
  modules: visibleModules,
7078
- configRead: enabledUnits !== null
7550
+ configRead: panelBoard !== null
7079
7551
  }, fixtureSeed(manifests, modules.all(), crashModeOn(window.location.search)));
7080
7552
  const world = createSuiteWorld({
7081
7553
  workspaces,
@@ -7136,7 +7608,7 @@ window.__ModuleLoader__.load({
7136
7608
  onRefresh: refreshPanel,
7137
7609
  modulesOpen,
7138
7610
  onModulesOpenChange: setModulesOpen,
7139
- enabledUnits,
7611
+ enabledUnits: panelBoard,
7140
7612
  manifests,
7141
7613
  workspace: boardWorkspace,
7142
7614
  refreshToken: panelToken,
@@ -8218,7 +8690,7 @@ window.__ModuleLoader__.load({
8218
8690
  ...face.messages === void 0 ? {} : { messages: face.messages }
8219
8691
  }));
8220
8692
  }
8221
- var COMPONENT_CSS_MARKER = "\n.wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-len-20);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}\n\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12);\n}\n.wb-cardBody > :not([data-wb-bleed]) {\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-8);\n}\n\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: transparent;\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-30);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n opacity: 0.5;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n.wb-mockStrip {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-12);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n flex: none;\n}\n\n.wb-mockNote {\n flex: 1 0 100%;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-mockChip {\n flex: none;\n padding: var(--wb-len-2) var(--wb-len-7);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: transparent;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-mockChip:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-mockChipOn {\n border-color: transparent;\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-label-primary-foreground);\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n\n.wb-row:has(> [data-wb-dot]) {\n grid-template-columns: 84px minmax(0, 1fr);\n}\n.wb-rows {\n display: flex;\n flex-direction: column;\n}\n.wb-row {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-formActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-32);\n padding: var(--wb-len-6) var(--wb-len-12);\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n._marketList_z6vtq_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_z6vtq_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_z6vtq_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-40);\n height: var(--wb-len-40);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_z6vtq_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_z6vtq_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketDesc_z6vtq_48 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketUsedBy_z6vtq_59 {\n margin-left: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.75;\n}\n\n._marketUsedBy_z6vtq_59::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_z6vtq_39 ._marketVersion_z6vtq_73 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_z6vtq_73 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_z6vtq_73::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketEnd_z6vtq_95 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._marketActions_z6vtq_102 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketSection_z6vtq_108 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_z6vtq_115 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionTitle_z6vtq_121 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_z6vtq_127 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketProgress_z6vtq_133 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_z6vtq_143 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_z6vtq_150 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_z6vtq_157 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_z6vtq_162 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_z6vtq_162 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_z6vtq_180 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_z6vtq_188 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_z6vtq_193 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_z6vtq_199 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketIconButton_z6vtq_208 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_z6vtq_208:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_z6vtq_208:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_z6vtq_233 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_z6vtq_237 svg {\n animation: _wb-spin_z6vtq_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_z6vtq_241 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_z6vtq_157 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketChecking_z6vtq_258 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketEmptyTitle_z6vtq_266 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_z6vtq_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._foot_1us83_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1us83_12 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1us83_17 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1coeb_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1coeb_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1coeb_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1coeb_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1coeb_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1coeb_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1coeb_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1coeb_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1coeb_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1coeb_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1coeb_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1coeb_59 svg,\n._registryToggle_1coeb_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1coeb_59[aria-expanded='true'] svg,\n._registryToggle_1coeb_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1coeb_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1coeb_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1coeb_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1coeb_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1coeb_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1coeb_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1coeb_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1coeb_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1coeb_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1coeb_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1coeb_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1coeb_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1coeb_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1coeb_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1coeb_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1coeb_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1coeb_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1coeb_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1coeb_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1coeb_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1coeb_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1coeb_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1coeb_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1coeb_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1coeb_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1coeb_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1coeb_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1coeb_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1coeb_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1coeb_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1coeb_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1coeb_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1coeb_343,\n._subjectDesc_1coeb_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1coeb_351,\n._resultWarn_1coeb_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1coeb_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._approval_1coeb_365 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1coeb_375 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1coeb_382 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1coeb_388 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1coeb_395 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1coeb_402 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1coeb_406 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1coeb_410 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1coeb_417 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1coeb_417 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._actions_jlw8j_1[hidden],\n._progress_jlw8j_2[hidden],\n._commandRow_jlw8j_3[hidden],\n._bridge_jlw8j_4[hidden],\n._raw_jlw8j_5[hidden] {\n display: none;\n}\n\n._gate_jlw8j_9 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_jlw8j_20 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_jlw8j_20:has(._actions_jlw8j_1:not([hidden])),\n._card_jlw8j_20:has(._bridge_jlw8j_4:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_jlw8j_35 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_jlw8j_50 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_jlw8j_50 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_jlw8j_50[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_jlw8j_77 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_jlw8j_50[data-status='ok'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_jlw8j_50[data-status='warn'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_jlw8j_50[data-status='failed'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_jlw8j_102 {\n flex: none;\n}\n\n._detail_jlw8j_106 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_jlw8j_2 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_jlw8j_124 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_jlw8j_132 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_jlw8j_3 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_jlw8j_158 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_jlw8j_158:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_jlw8j_3 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_jlw8j_191 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_jlw8j_198 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_jlw8j_191 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_jlw8j_191:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_jlw8j_191:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_jlw8j_1,\n._bridge_jlw8j_4 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_jlw8j_249 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_jlw8j_1 ._hint_jlw8j_43,\n._bridge_jlw8j_4 ._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_jlw8j_1 ._commandRow_jlw8j_3,\n._bridge_jlw8j_4 ._commandRow_jlw8j_3 {\n margin: 0;\n}\n\n._actions_jlw8j_1 ._buttons_jlw8j_191,\n._bridge_jlw8j_4 ._buttons_jlw8j_191 {\n justify-content: flex-start;\n}\n\n._raw_jlw8j_5 {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_jlw8j_282 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_jlw8j_1 ._error_jlw8j_132,\n._bridge_jlw8j_4 ._error_jlw8j_132 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_jlw8j_292 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_jlw8j_292 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_jlw8j_309 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_jlw8j_309::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_jlw8j_309:hover {\n text-decoration: underline;\n}\n\n._loading_jlw8j_323 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_jlw8j_323[hidden] {\n display: none;\n}\n\n._loadingMotion_jlw8j_332 {\n transform-origin: center;\n animation: _wb-spin_jlw8j_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_jlw8j_337,\n._loadingArc_jlw8j_338 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_jlw8j_337 {\n opacity: 0.25;\n}\n\n._loadingArc_jlw8j_338 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_jlw8j_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_jlw8j_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_jlw8j_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_jlw8j_332,\n ._loadingArc_jlw8j_338 {\n animation: none;\n }\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_1weg4_1 {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n._pop_1weg4_7 {\n position: absolute;\n top: calc(100% + var(--wb-len-8));\n right: 0;\n z-index: var(--wb-z-30);\n width: var(--wb-len-360);\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_1weg4_21 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_1weg4_29 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_1weg4_37:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1weg4_37:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_1weg4_59 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_1weg4_68 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: grab;\n}\n\n._row_1weg4_68:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOver_1weg4_83::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_1weg4_93 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_1weg4_108 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n}\n\n._label_1weg4_116 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_1weg4_123 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_1weg4_134 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_1weg4_142 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n._panel_135e7_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_135e7_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_135e7_1[data-open] {\n visibility: visible;\n}\n\n._columns_135e7_18 {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n align-items: start;\n gap: var(--wb-len-12);\n}\n\n._columns_135e7_18[data-two] {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n._column_135e7_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._root_1vd78_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._anchor_1vd78_7 {\n display: block;\n width: 100%;\n}\n\n._menu_1vd78_12 {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n}\n\n._trigger_1vd78_17 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n._trigger_1vd78_17:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._trigger_1vd78_17:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._glyph_1vd78_44 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1vd78_54 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1vd78_58 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1vd78_69 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1vd78_77 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1vd78_58 ._name_1vd78_77 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._chevron_1vd78_90 {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n._row_1vd78_96 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1vd78_104 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1vd78_104 ._rowAction_1vd78_114 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1vd78_96 ._name_1vd78_77 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1vd78_127 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n\n._field_1vd78_134 {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n box-sizing: border-box;\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._field_1vd78_134:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n}\n\n._searchIcon_1vd78_151 {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._field_1vd78_134 ._search_1vd78_151 {\n flex: 1;\n min-width: 0;\n height: var(--wb-len-24);\n border: none;\n background: transparent;\n}\n\n._field_1vd78_134 ._search_1vd78_151:focus {\n border-color: transparent;\n box-shadow: none;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
8693
+ var COMPONENT_CSS_MARKER = "\n.wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-len-20);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh.wb-spinning svg {\n animation: wb-spin var(--wb-dur-0-9) linear infinite;\n}\n\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12);\n}\n.wb-cardBody > :not([data-wb-bleed]) {\n padding-left: var(--wb-len-8);\n padding-right: var(--wb-len-8);\n}\n\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: transparent;\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-30);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n opacity: 0.5;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n.wb-mockStrip {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-12);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n flex: none;\n}\n\n.wb-mockNote {\n flex: 1 0 100%;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-mockChip {\n flex: none;\n padding: var(--wb-len-2) var(--wb-len-7);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: transparent;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-14);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-mockChip:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-mockChipOn {\n border-color: transparent;\n background: var(--dsw-alias-brand-primary);\n color: var(--dsw-alias-label-primary-foreground);\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n\n.wb-row:has(> [data-wb-dot]) {\n grid-template-columns: 84px minmax(0, 1fr);\n}\n.wb-rows {\n display: flex;\n flex-direction: column;\n}\n.wb-row {\n display: grid;\n grid-template-columns: 56px minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-formActions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-32);\n padding: var(--wb-len-6) var(--wb-len-12);\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n._marketList_1v8dy_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_1v8dy_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_1v8dy_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-40);\n height: var(--wb-len-40);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_1v8dy_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_1v8dy_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketDesc_1v8dy_48 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketUsedBy_1v8dy_59 {\n margin-left: var(--wb-len-8);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n opacity: 0.75;\n}\n\n._marketUsedBy_1v8dy_59::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_1v8dy_39 ._marketVersion_1v8dy_73 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_1v8dy_73 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_1v8dy_73::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketEnd_1v8dy_95 {\n flex: none;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: var(--wb-len-4);\n}\n\n._marketSwitchSeat_1v8dy_103 {\n display: inline-flex;\n align-items: center;\n}\n\n._marketIconAction_1v8dy_108 {\n width: var(--wb-len-28);\n padding: 0;\n}\n\n._marketActions_1v8dy_113 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketDefaultNote_1v8dy_119 {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._marketSelfDivider_1v8dy_126 {\n height: 0;\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_1v8dy_131 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_1v8dy_138 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_1v8dy_144 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_1v8dy_151 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_1v8dy_157 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n\n._marketProgress_1v8dy_164 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_1v8dy_174 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketNotePlain_1v8dy_181 {\n grid-column: 2 / -1;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_1v8dy_189 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_1v8dy_196 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_1v8dy_201 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_1v8dy_201 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_1v8dy_219 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_1v8dy_227 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_1v8dy_232 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_1v8dy_238 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketIconButton_1v8dy_247 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_1v8dy_247:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_1v8dy_247:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_1v8dy_272 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_1v8dy_276 svg {\n animation: _wb-spin_1v8dy_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_1v8dy_280 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_1v8dy_196 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketChecking_1v8dy_297 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketEmptyTitle_1v8dy_305 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_1v8dy_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n._foot_1us83_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1us83_12 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1us83_17 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1coeb_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1coeb_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1coeb_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1coeb_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1coeb_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1coeb_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1coeb_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1coeb_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1coeb_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1coeb_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1coeb_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1coeb_59 svg,\n._registryToggle_1coeb_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1coeb_59[aria-expanded='true'] svg,\n._registryToggle_1coeb_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1coeb_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1coeb_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1coeb_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1coeb_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1coeb_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1coeb_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1coeb_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1coeb_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1coeb_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1coeb_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1coeb_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1coeb_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1coeb_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1coeb_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1coeb_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1coeb_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1coeb_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1coeb_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1coeb_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1coeb_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1coeb_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1coeb_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1coeb_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1coeb_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1coeb_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1coeb_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1coeb_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1coeb_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1coeb_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1coeb_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1coeb_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1coeb_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1coeb_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1coeb_343,\n._subjectDesc_1coeb_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1coeb_351,\n._resultWarn_1coeb_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1coeb_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._approval_1coeb_365 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1coeb_375 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1coeb_382 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1coeb_388 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1coeb_395 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1coeb_402 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1coeb_406 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1coeb_410 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1coeb_417 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1coeb_417 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._actions_jlw8j_1[hidden],\n._progress_jlw8j_2[hidden],\n._commandRow_jlw8j_3[hidden],\n._bridge_jlw8j_4[hidden],\n._raw_jlw8j_5[hidden] {\n display: none;\n}\n\n._gate_jlw8j_9 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_jlw8j_20 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_jlw8j_20:has(._actions_jlw8j_1:not([hidden])),\n._card_jlw8j_20:has(._bridge_jlw8j_4:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_jlw8j_35 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_jlw8j_50 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_jlw8j_50 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_jlw8j_50[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_jlw8j_77 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_jlw8j_50[data-status='ok'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_jlw8j_50[data-status='warn'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_jlw8j_50[data-status='failed'] ._mark_jlw8j_77 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_jlw8j_102 {\n flex: none;\n}\n\n._detail_jlw8j_106 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_jlw8j_2 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_jlw8j_124 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_jlw8j_132 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_jlw8j_3 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_jlw8j_158 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_jlw8j_158:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_jlw8j_3 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_jlw8j_191 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_jlw8j_198 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_jlw8j_191 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_jlw8j_191:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_jlw8j_191:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_jlw8j_1,\n._bridge_jlw8j_4 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_jlw8j_249 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_jlw8j_1 ._hint_jlw8j_43,\n._bridge_jlw8j_4 ._hint_jlw8j_43 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_jlw8j_1 ._commandRow_jlw8j_3,\n._bridge_jlw8j_4 ._commandRow_jlw8j_3 {\n margin: 0;\n}\n\n._actions_jlw8j_1 ._buttons_jlw8j_191,\n._bridge_jlw8j_4 ._buttons_jlw8j_191 {\n justify-content: flex-start;\n}\n\n._raw_jlw8j_5 {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_jlw8j_282 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_jlw8j_1 ._error_jlw8j_132,\n._bridge_jlw8j_4 ._error_jlw8j_132 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_jlw8j_292 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_jlw8j_292 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_jlw8j_309 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_jlw8j_309::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_jlw8j_309:hover {\n text-decoration: underline;\n}\n\n._loading_jlw8j_323 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_jlw8j_323[hidden] {\n display: none;\n}\n\n._loadingMotion_jlw8j_332 {\n transform-origin: center;\n animation: _wb-spin_jlw8j_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_jlw8j_337,\n._loadingArc_jlw8j_338 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_jlw8j_337 {\n opacity: 0.25;\n}\n\n._loadingArc_jlw8j_338 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_jlw8j_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_jlw8j_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_jlw8j_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_jlw8j_332,\n ._loadingArc_jlw8j_338 {\n animation: none;\n }\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_1yptb_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_1yptb_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_1yptb_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_1yptb_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_1yptb_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._followBox_1yptb_43 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._switchFollowing_1yptb_49 {\n opacity: 0.55;\n}\n\n._reset_1yptb_53 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_1yptb_53:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_1yptb_53:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_1yptb_75 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_1yptb_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: grab;\n}\n\n._row_1yptb_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOver_1yptb_99::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_1yptb_109 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_1yptb_124 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n}\n\n._label_1yptb_132 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_1yptb_139 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_1yptb_150 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_1yptb_158 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._pluginList_1yptb_166 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._pluginRow_1yptb_171 {\n cursor: default;\n}\n\n._plugin_1yptb_166 {\n flex: none;\n padding: 0 var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-interactive-bg-hover);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n._panel_135e7_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_135e7_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_135e7_1[data-open] {\n visibility: visible;\n}\n\n._columns_135e7_18 {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n align-items: start;\n gap: var(--wb-len-12);\n}\n\n._columns_135e7_18[data-two] {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n._column_135e7_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._root_1vd78_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._anchor_1vd78_7 {\n display: block;\n width: 100%;\n}\n\n._menu_1vd78_12 {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n}\n\n._trigger_1vd78_17 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n border-radius: var(--dsw-radius-md);\n background: transparent;\n color: var(--dsw-alias-label-primary);\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n\n._trigger_1vd78_17:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._trigger_1vd78_17:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._glyph_1vd78_44 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1vd78_54 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1vd78_58 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1vd78_69 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1vd78_77 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1vd78_58 ._name_1vd78_77 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._chevron_1vd78_90 {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n._row_1vd78_96 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1vd78_104 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1vd78_104 ._rowAction_1vd78_114 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1vd78_96 ._name_1vd78_77 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1vd78_127 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n\n._field_1vd78_134 {\n display: flex;\n align-items: center;\n gap: var(--wb-gap-xs);\n box-sizing: border-box;\n width: 100%;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._field_1vd78_134:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n}\n\n._searchIcon_1vd78_151 {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._field_1vd78_134 ._search_1vd78_151 {\n flex: 1;\n min-width: 0;\n height: var(--wb-len-24);\n border: none;\n background: transparent;\n}\n\n._field_1vd78_134 ._search_1vd78_151:focus {\n border-color: transparent;\n box-shadow: none;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
8222
8694
  function workbenchCss() {
8223
8695
  return `${tokens_default}\n${palette_default}\n${scale_default}\n${sidebar_default}\n${sidebar_app_default}\n${rightbar_default}\n${chrome_default}\n${board_default}\n${motion_default}\n${COMPONENT_CSS_MARKER}`;
8224
8696
  }