@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
@@ -436,7 +436,12 @@ var DECLARATION_REQUIRED_KEYS = [
436
436
  "host"
437
437
  ];
438
438
  var CARD_KEYS = ["titleKey", "order"];
439
- var TOOL_KEYS = ["name", "writes"];
439
+ var TOOL_KEYS = [
440
+ "name",
441
+ "writes",
442
+ "key"
443
+ ];
444
+ var TOOL_KEY_SHAPE = /^[a-z][a-zA-Z0-9]*$/;
440
445
  var HOST_KEYS = ["inject", "optional"];
441
446
  function text(value) {
442
447
  return typeof value === "string" ? value.trim() : "";
@@ -478,6 +483,7 @@ function declarationProblemsOf(subject, raw) {
478
483
  if (!Array.isArray(tools)) problems.push(`${subject}: dsh.workbench.tools 要是一串声明,现在是 ${JSON.stringify(tools)}`);
479
484
  else {
480
485
  const seen = /* @__PURE__ */ new Set();
486
+ const seenKeys = /* @__PURE__ */ new Set();
481
487
  tools.forEach((tool, index) => {
482
488
  const at = `dsh.workbench.tools[${index}]`;
483
489
  if (!isRecord(tool)) {
@@ -491,6 +497,12 @@ function declarationProblemsOf(subject, raw) {
491
497
  else if (seen.has(name)) problems.push(`${subject}: ${at}.name「${name}」与前面那条撞了 —— 工具名会进 dsh 的工具表,不许重`);
492
498
  else seen.add(name);
493
499
  if (typeof tool.writes !== "boolean") problems.push(`${subject}: ${at}.writes 要是 true / false(它是"这会写"的唯一声明,缺了审批无从认领)`);
500
+ if (tool.key !== void 0) {
501
+ const key = text(tool.key);
502
+ if (!TOOL_KEY_SHAPE.test(key)) problems.push(`${subject}: ${at}.key 要是 lowerCamelCase 的标识符(如 \`sync\` / \`podLogs\`),现在是 ${JSON.stringify(tool.key)} —— 它会变成生成物里的键名,所以不引号、不许带点或横线`);
503
+ else if (seenKeys.has(key)) problems.push(`${subject}: ${at}.key「${key}」与前面那条撞了 —— 生成物里的键只能有一个`);
504
+ else seenKeys.add(key);
505
+ }
494
506
  });
495
507
  }
496
508
  }
@@ -1075,6 +1087,50 @@ function IconBrandMark({ size = 24 }) {
1075
1087
  strokeLinecap: "round"
1076
1088
  }));
1077
1089
  }
1090
+ function IconOpencli({ size = 16 }) {
1091
+ return h(Shell, {
1092
+ size,
1093
+ viewBox: "0 0 64 64"
1094
+ }, h("defs", null, h("linearGradient", {
1095
+ id: "opencli-mark",
1096
+ x1: "0%",
1097
+ y1: "0%",
1098
+ x2: "100%",
1099
+ y2: "100%"
1100
+ }, h("stop", {
1101
+ offset: "0%",
1102
+ stopColor: "#00e5a0"
1103
+ }), h("stop", {
1104
+ offset: "50%",
1105
+ stopColor: "#00b4d8"
1106
+ }), h("stop", {
1107
+ offset: "100%",
1108
+ stopColor: "#7b61ff"
1109
+ }))), h("rect", {
1110
+ width: 64,
1111
+ height: 64,
1112
+ rx: 14,
1113
+ fill: "#0a0a0f"
1114
+ }), h("text", {
1115
+ x: "50%",
1116
+ y: "54%",
1117
+ dominantBaseline: "middle",
1118
+ textAnchor: "middle",
1119
+ fontFamily: "monospace",
1120
+ fontWeight: 700,
1121
+ fontSize: 28,
1122
+ fill: "url(#opencli-mark)"
1123
+ }, ">_"));
1124
+ }
1125
+ function IconNpm({ size = 16 }) {
1126
+ return h(Shell, {
1127
+ size,
1128
+ viewBox: "0 0 1024 1024"
1129
+ }, h("path", {
1130
+ 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",
1131
+ fill: "#CB3837"
1132
+ }));
1133
+ }
1078
1134
  function IconModules({ size = 16 }) {
1079
1135
  return h("svg", {
1080
1136
  width: size,
@@ -1197,7 +1253,12 @@ var en = {
1197
1253
  "time.hours": "{n} h ago",
1198
1254
  "time.days": "{n} d ago",
1199
1255
  "panels.title": "Panel modules",
1200
- "panels.reset": "Reset",
1256
+ "panels.market.defaultNote": "This default covers every workspace that has not changed this row; ones that have keep their own choice.",
1257
+ "panels.market.changedBy": "{count} workspaces have already changed this row",
1258
+ "panels.market.defaultLabel": "On by default in all workspaces",
1259
+ "panels.followGlobal": "Default",
1260
+ "panels.followGlobalHint": "This row follows the default board (the switch shows that state). Clicking the switch makes it this project's own choice.",
1261
+ "panels.followAll": "Restore the default everywhere",
1201
1262
  "panels.enabled": "enabled in this project",
1202
1263
  "panels.disabled": "not enabled in this project",
1203
1264
  "panels.choose": "Choose modules",
@@ -1216,17 +1277,17 @@ var en = {
1216
1277
  "panels.browseMarket": "Browse the module market",
1217
1278
  "panels.noneInstalled": "None of these modules has its plugin installed yet",
1218
1279
  "panels.noneInstalledHint": "Once installed they come back here, and you pick which go on the panel.",
1280
+ "panels.rowPlugin": "Plugin",
1219
1281
  "panels.market.installed": "installed",
1220
1282
  "panels.market.outdated": "needs update",
1221
1283
  "panels.market.hasNew": "New version",
1222
1284
  "panels.market.missing": "not installed",
1223
1285
  "panels.market.unchecked": "unknown",
1224
1286
  "panels.market.checking": "checking",
1225
- "panels.market.sectionInstalled": "Installed",
1287
+ "panels.market.sectionInstalled": "Installed modules",
1226
1288
  "panels.market.sectionPending": "Not installed",
1227
1289
  "panels.market.sectionShared": "Shared dependencies",
1228
- "panels.market.sharedUsedBy": "Used by {modules}",
1229
- "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.",
1290
+ "panels.market.sharedUsedBy": "Used by module {modules}",
1230
1291
  "panels.market.listSeparator": ", ",
1231
1292
  "panels.market.sharedMissing": "not installed",
1232
1293
  "panels.market.sharedOutdated": "update available",
@@ -1251,21 +1312,20 @@ var en = {
1251
1312
  "panels.market.noSource": "This module declares no install method — install it yourself",
1252
1313
  "panels.market.badSource": "The install method is incomplete — install it yourself",
1253
1314
  "panels.market.empty": "No modules available",
1254
- "panels.market.installedSection": "Installed",
1255
- "panels.market.sectionLocal": "Linked locally",
1315
+ "panels.market.sectionLocal": "Local modules",
1256
1316
  "panels.market.sectionUnlisted": "Not from the market",
1257
1317
  "panels.market.sectionPlugins": "Installed opencli plugins",
1258
1318
  "panels.market.moduleOutdated": "update available",
1259
1319
  "panels.market.moduleRefused": "This module was built for an older version of the workbench, so it does not work here. Update it, or uninstall.",
1260
1320
  "panels.market.moduleRefusedDetail": "Why it cannot be used: {reason}",
1261
1321
  "panels.market.moduleRestartHint": "installed but not active — restart dsh once to bring it up",
1262
- "panels.market.pluginLocalNoUpdate": "Installed from a local folder, so there is nowhere to check for a newer version — uninstall only",
1322
+ "panels.market.workbenchName": "Workbench",
1323
+ "panels.market.workbenchLocal": "This is the copy from your working repository; it does not come from the registry.",
1263
1324
  "panels.market.pluginKeptInUse": "Files kept for now: {names} still uses it.",
1264
1325
  "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.",
1265
1326
  "panels.market.pluginKeptHeld": "Files kept: this one is yours, and a module letting go will not remove it.",
1266
1327
  "panels.market.pluginKeptUnnamed": "Files kept for now: this one cannot be identified as a plugin, so it is unclear who needs it.",
1267
- "panels.market.pluginAlsoKnownAs": "Its package is {pkg} (updates and uninstall use that)",
1268
- "panels.market.pluginBroken": "This install is broken: it cannot be identified as a plugin. Uninstall it, or install it again by package name above.",
1328
+ "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).",
1269
1329
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
1270
1330
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
1271
1331
  "panels.market.recheck": "Check for updates",
@@ -1274,7 +1334,7 @@ var en = {
1274
1334
  "panels.market.justNow": "just now",
1275
1335
  "panels.market.minutesAgo": "{n} min ago",
1276
1336
  "panels.market.hoursAgo": "{n} h ago",
1277
- "panels.market.add.description": "Enter a package name, a Git URL, or a path to a local directory.",
1337
+ "panels.market.add.description": "Enter a module or opencli plugin package name, Git repository URL, or local directory path.",
1278
1338
  "panels.market.add.specPlaceholder": "e.g. @dsh-workbench/module-hello",
1279
1339
  "panels.market.add.guideToggle": "Install guide and examples",
1280
1340
  "panels.market.add.guideHide": "Hide guide",
@@ -1313,11 +1373,13 @@ var en = {
1313
1373
  "panels.market.add.problemInstalled": "This module is already installed",
1314
1374
  "panels.market.add.problemNotFound": "No such module found",
1315
1375
  "panels.market.add.problemNotPackage": "That path does not exist or is not a valid module package",
1316
- "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.",
1376
+ "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.",
1317
1377
  "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.",
1318
1378
  "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.",
1319
1379
  "panels.market.add.failureNotModuleOrPlugin": "This package is neither a workbench module nor an opencli plugin, so installing it would do nothing",
1320
1380
  "panels.market.add.installedPlugin": "Installed: the opencli plugin {name}",
1381
+ "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.",
1382
+ "panels.market.add.pluginAlias": "Plugin name: {name}",
1321
1383
  "panels.market.add.problemNetwork": "Cannot reach the module source; check the network and retry",
1322
1384
  "panels.market.add.problemUnknown": "Cannot fetch module information: {reason}",
1323
1385
  "panels.market.add.failureNetwork": "The network connection failed",
@@ -1528,7 +1590,12 @@ var zh = {
1528
1590
  "time.hours": "{n} 小时前",
1529
1591
  "time.days": "{n} 天前",
1530
1592
  "panels.title": "面板模块",
1531
- "panels.reset": "恢复默认",
1593
+ "panels.market.defaultNote": "这份默认给所有没在这一行改过的工作区;改过的保持自己的选择。",
1594
+ "panels.market.changedBy": "{count} 个工作区已在这一行改过",
1595
+ "panels.market.defaultLabel": "开启后所有工作区默认启用",
1596
+ "panels.followGlobal": "默认",
1597
+ "panels.followGlobalHint": "这一行跟着默认板走(右边那颗开关显示的就是默认的状态)。点一下开关 = 改成这个项目自己定。",
1598
+ "panels.followAll": "全部恢复默认",
1532
1599
  "panels.enabled": "这个项目已启用",
1533
1600
  "panels.disabled": "这个项目未启用",
1534
1601
  "panels.choose": "选择模块",
@@ -1547,17 +1614,17 @@ var zh = {
1547
1614
  "panels.browseMarket": "浏览模块市场",
1548
1615
  "panels.noneInstalled": "这些模块要的插件都还没装",
1549
1616
  "panels.noneInstalledHint": "装好之后它们会回到这里,再由你决定放哪几个上板。",
1617
+ "panels.rowPlugin": "插件",
1550
1618
  "panels.market.installed": "已安装",
1551
1619
  "panels.market.outdated": "要更新",
1552
1620
  "panels.market.hasNew": "有新版本",
1553
1621
  "panels.market.missing": "未装",
1554
1622
  "panels.market.unchecked": "状态未知",
1555
1623
  "panels.market.checking": "检测中",
1556
- "panels.market.sectionInstalled": "已安装",
1624
+ "panels.market.sectionInstalled": "已安装模块",
1557
1625
  "panels.market.sectionPending": "未安装",
1558
1626
  "panels.market.sectionShared": "共用依赖",
1559
- "panels.market.sharedUsedBy": "供 {modules} 使用",
1560
- "panels.market.sharedFoot": "这一段不给卸载:它们跟着模块来,卸掉也会被装回来。要停用一份,就去关掉正在用它的那些模块。",
1627
+ "panels.market.sharedUsedBy": "供 {modules} 模块使用",
1561
1628
  "panels.market.listSeparator": "、",
1562
1629
  "panels.market.sharedMissing": "未装",
1563
1630
  "panels.market.sharedOutdated": "有新版",
@@ -1582,21 +1649,20 @@ var zh = {
1582
1649
  "panels.market.noSource": "这个模块没声明怎么装,只能自己动手",
1583
1650
  "panels.market.badSource": "安装方式没写全,只能自己动手",
1584
1651
  "panels.market.empty": "暂无可用模块",
1585
- "panels.market.installedSection": "已安装",
1586
- "panels.market.sectionLocal": "本地装的",
1652
+ "panels.market.sectionLocal": "本地模块",
1587
1653
  "panels.market.sectionUnlisted": "不是从市场装的",
1588
1654
  "panels.market.sectionPlugins": "已安装 opencli 插件",
1589
1655
  "panels.market.moduleOutdated": "有新版",
1590
1656
  "panels.market.moduleRefused": "这个模块是给旧版本的工作台写的,现在用不了。更新它,或者卸载。",
1591
1657
  "panels.market.moduleRefusedDetail": "装不上的原因:{reason}",
1592
1658
  "panels.market.moduleRestartHint": "装好了但还没生效 —— 重启一次 dsh 就会出来",
1593
- "panels.market.pluginLocalNoUpdate": "本地装的,没地方查新版,所以只给卸载",
1659
+ "panels.market.workbenchName": "工作台",
1660
+ "panels.market.workbenchLocal": "这份是本仓正在开发的那一份,不从源上取。",
1594
1661
  "panels.market.pluginKeptInUse": "文件先留着:{names} 还要用它。",
1595
1662
  "panels.market.pluginKeptUnsure": "文件先留着:这台机器上还有模块看不出用了什么,说不准谁在用它。",
1596
1663
  "panels.market.pluginKeptHeld": "文件留着:你自己装的那一份,模块放手不动它。",
1597
1664
  "panels.market.pluginKeptUnnamed": "文件先留着:看不出这是哪个插件,说不准谁在用它。",
1598
- "panels.market.pluginAlsoKnownAs": "包名是 {pkg}(更新与卸载按它来)",
1599
- "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者去上面按包名再装一次。",
1665
+ "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者直接跟 agent 说:用 workbench_modules 的 install-bundle 按包名再装一次。",
1600
1666
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
1601
1667
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
1602
1668
  "panels.market.recheck": "重新检查更新",
@@ -1605,7 +1671,7 @@ var zh = {
1605
1671
  "panels.market.justNow": "刚刚",
1606
1672
  "panels.market.minutesAgo": "{n} 分钟前",
1607
1673
  "panels.market.hoursAgo": "{n} 小时前",
1608
- "panels.market.add.description": "输入模块的包名、Git 仓库地址或本地目录路径。",
1674
+ "panels.market.add.description": "输入模块或 opencli 插件的包名、Git 仓库地址或本地目录路径。",
1609
1675
  "panels.market.add.specPlaceholder": "例如 @dsh-workbench/module-hello",
1610
1676
  "panels.market.add.guideToggle": "模块安装引导和示例",
1611
1677
  "panels.market.add.guideHide": "收起引导",
@@ -1644,11 +1710,13 @@ var zh = {
1644
1710
  "panels.market.add.problemInstalled": "该模块已安装",
1645
1711
  "panels.market.add.problemNotFound": "未找到相关模块",
1646
1712
  "panels.market.add.problemNotPackage": "该路径不存在或不是有效的模块包",
1647
- "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。要是它其实是个 opencli 插件,请改用包名(例如 opencli-plugin-cmdb)或者本地目录 —— 从 git 地址和 tarball 判断不出它是什么。",
1713
+ "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。这个入口按包名认工作台模块和 opencli 插件,两种都能装;但 git 地址和 tarball 判断不出它是什么 —— 要是它其实是这两样之一,请改填包名或本地目录。",
1648
1714
  "panels.market.add.problemNotWorkbenchModule": "这个包跟现在的工作台对不上,装上也用不了。换一个版本,或者找这个模块的作者。",
1649
1715
  "panels.market.add.problemNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上。换一个版本,或者找这个包的作者。",
1650
1716
  "panels.market.add.failureNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上",
1651
1717
  "panels.market.add.installedPlugin": "装上了:opencli 插件 {name}",
1718
+ "panels.market.add.pluginPreview": "这是一份 opencli 插件:装进 opencli 的插件区,装完就能用,不用重启。",
1719
+ "panels.market.add.pluginAlias": "插件名:{name}",
1652
1720
  "panels.market.add.problemNetwork": "无法连接模块源,请检查网络后重试",
1653
1721
  "panels.market.add.problemUnknown": "无法获取模块信息:{reason}",
1654
1722
  "panels.market.add.failureNetwork": "网络连接失败",
@@ -1970,6 +2038,8 @@ var dist_exports = /* @__PURE__ */ __exportAll({
1970
2038
  IconBrandMark: () => IconBrandMark,
1971
2039
  IconConversation: () => IconConversation,
1972
2040
  IconModules: () => IconModules,
2041
+ IconNpm: () => IconNpm,
2042
+ IconOpencli: () => IconOpencli,
1973
2043
  IconPanelScreen: () => IconPanelScreen,
1974
2044
  LOCALES: () => LOCALES,
1975
2045
  LOCALE_NS: () => LOCALE_NS,
@@ -2392,6 +2462,9 @@ function panelRowName(label, hint, t) {
2392
2462
  //#endregion
2393
2463
  //#region src/app/layouts/rightbar/market-freshness.ts
2394
2464
  var MARKET_STALE_MS = VERSION_CHECK_TTL_MS;
2465
+ function marketSettled(freshness, installedRead) {
2466
+ return freshness.loaded && installedRead !== false;
2467
+ }
2395
2468
  function shouldProbeOnEnter(input) {
2396
2469
  if (input.checkedAt === null) return true;
2397
2470
  return input.now - input.checkedAt >= input.staleMs;
@@ -2878,7 +2951,7 @@ function buildMarketMocks(roster) {
2878
2951
  },
2879
2952
  {
2880
2953
  id: "plugin-local",
2881
- label: "本地目录装的 opencli 插件:没有版本源(只给卸载,行上说清为什么)",
2954
+ label: "本地目录装的 opencli 插件:没有版本源,只给卸载",
2882
2955
  manifests: [],
2883
2956
  capabilities: {},
2884
2957
  plugins: [{
@@ -2890,8 +2963,7 @@ function buildMarketMocks(roster) {
2890
2963
  rows: 0,
2891
2964
  plugins: 1,
2892
2965
  pluginActions: ["uninstall-plugin"],
2893
- pluginNote: true,
2894
- pluginNoteKey: "panels.market.pluginLocalNoUpdate"
2966
+ pluginNote: false
2895
2967
  }
2896
2968
  },
2897
2969
  {
@@ -2908,8 +2980,7 @@ function buildMarketMocks(roster) {
2908
2980
  expect: {
2909
2981
  rows: 0,
2910
2982
  plugins: 1,
2911
- pluginActions: ["update-plugin", "uninstall-plugin"],
2912
- pluginNoteKey: "panels.market.pluginAlsoKnownAs"
2983
+ pluginActions: ["update-plugin", "uninstall-plugin"]
2913
2984
  }
2914
2985
  },
2915
2986
  {
@@ -2948,6 +3019,70 @@ function buildMarketMocks(roster) {
2948
3019
  notice: true
2949
3020
  }
2950
3021
  },
3022
+ {
3023
+ id: "workbench-update",
3024
+ label: "工作台有新版(这一行也给「更新」,装完面板自己换上)",
3025
+ manifests: [],
3026
+ capabilities: {},
3027
+ workbench: {
3028
+ pkg: "@dsh-workbench/core",
3029
+ installed: "0.1.18",
3030
+ latest: "0.1.19"
3031
+ },
3032
+ expect: {
3033
+ rows: 0,
3034
+ workbenchState: "outdated",
3035
+ workbenchActions: ["update-workbench"]
3036
+ }
3037
+ },
3038
+ {
3039
+ id: "workbench-current",
3040
+ label: "工作台已经最新(只显示版本,没有按钮)",
3041
+ manifests: [],
3042
+ capabilities: {},
3043
+ workbench: {
3044
+ pkg: "@dsh-workbench/core",
3045
+ installed: "0.1.19"
3046
+ },
3047
+ expect: {
3048
+ rows: 0,
3049
+ workbenchState: "installed",
3050
+ workbenchActions: []
3051
+ }
3052
+ },
3053
+ {
3054
+ id: "workbench-local",
3055
+ label: "工作台是本仓那份(link: 装的:不给更新,行上说清)",
3056
+ manifests: [],
3057
+ capabilities: {},
3058
+ workbench: {
3059
+ pkg: "@dsh-workbench/core",
3060
+ installed: "0.1.18",
3061
+ latest: "0.1.19",
3062
+ local: true
3063
+ },
3064
+ expect: {
3065
+ rows: 0,
3066
+ workbenchState: "installed",
3067
+ workbenchActions: [],
3068
+ workbenchNoteKey: "panels.market.workbenchLocal"
3069
+ }
3070
+ },
3071
+ {
3072
+ id: "workbench-updated",
3073
+ label: "工作台刚更新完(新版已经在盘上:行上就是新版,没有按钮、也不劝人重启)",
3074
+ manifests: [],
3075
+ capabilities: {},
3076
+ workbench: {
3077
+ pkg: "@dsh-workbench/core",
3078
+ installed: "0.1.19"
3079
+ },
3080
+ expect: {
3081
+ rows: 0,
3082
+ workbenchState: "installed",
3083
+ workbenchActions: []
3084
+ }
3085
+ },
2951
3086
  {
2952
3087
  id: "empty",
2953
3088
  label: "市场空态",
@@ -3017,11 +3152,13 @@ function createBoardRegistry() {
3017
3152
  //#endregion
3018
3153
  //#region src/app/units/registry.ts
3019
3154
  function toBoardModule(face, manifest) {
3155
+ const View = face.card;
3156
+ if (View === void 0) return void 0;
3020
3157
  return {
3021
3158
  id: manifest.id,
3022
3159
  titleKey: manifest.card?.titleKey ?? manifest.id,
3023
3160
  order: manifest.card?.order ?? 100,
3024
- View: face.card,
3161
+ View,
3025
3162
  ...face.steps === void 0 ? {} : { steps: face.steps }
3026
3163
  };
3027
3164
  }
@@ -3054,9 +3191,10 @@ function createClientUnitRegistry(options = {}) {
3054
3191
  function attach(entry) {
3055
3192
  const manifest = known.get(entry.unit);
3056
3193
  if (manifest === void 0) return false;
3194
+ const boardModule = toBoardModule(entry.face, manifest);
3057
3195
  entry.mounted = {
3058
3196
  manifest,
3059
- unmount: board.register(toBoardModule(entry.face, manifest))
3197
+ unmount: boardModule === void 0 ? () => {} : board.register(boardModule)
3060
3198
  };
3061
3199
  takeBackRefusal(entry.unit);
3062
3200
  return true;
@@ -3224,9 +3362,46 @@ function hasCard(roster) {
3224
3362
  function fixtureRoster(roster) {
3225
3363
  return hasCard(roster) ? roster : SAMPLE_ROSTER;
3226
3364
  }
3365
+ function boardModuleOf(face) {
3366
+ const module = toBoardModule(face, face.manifest);
3367
+ return module === void 0 ? [] : [module];
3368
+ }
3227
3369
  function fixtureSeed(roster, all, crash = false) {
3228
- const base = hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE, FIXTURE_FACE.manifest)];
3229
- return crash ? [toBoardModule(CRASH_FACE, CRASH_FACE.manifest), ...base] : base;
3370
+ const base = hasCard(roster) ? all : boardModuleOf(FIXTURE_FACE);
3371
+ return crash ? [...boardModuleOf(CRASH_FACE), ...base] : base;
3372
+ }
3373
+ //#endregion
3374
+ //#region src/app/layouts/rightbar/market-workbench-row.ts
3375
+ var WORKBENCH_ROW_ID = "workbench:self";
3376
+ var WORKBENCH_TITLE_KEY = "panels.market.workbenchName";
3377
+ function workbenchRow(version) {
3378
+ if (version === null || version === void 0 || version.installed === "") return void 0;
3379
+ const local = version.local === true;
3380
+ const latest = local ? void 0 : version.latest;
3381
+ const update = latest !== void 0 && latest !== version.installed ? {
3382
+ installed: version.installed,
3383
+ latest
3384
+ } : void 0;
3385
+ const note = local ? {
3386
+ key: "panels.market.workbenchLocal",
3387
+ params: {}
3388
+ } : void 0;
3389
+ return {
3390
+ id: WORKBENCH_ROW_ID,
3391
+ titleKey: WORKBENCH_TITLE_KEY,
3392
+ workbench: true,
3393
+ state: update === void 0 ? "installed" : "outdated",
3394
+ canInstall: false,
3395
+ canUpdate: update !== void 0,
3396
+ canUninstall: false,
3397
+ ...note === void 0 ? {} : { note },
3398
+ version: {
3399
+ installed: version.installed,
3400
+ ...latest === void 0 ? {} : { latest }
3401
+ },
3402
+ ...update === void 0 ? {} : { moduleUpdate: update },
3403
+ pkg: version.pkg
3404
+ };
3230
3405
  }
3231
3406
  //#endregion
3232
3407
  //#region src/app/layouts/rightbar/market-rows.ts
@@ -3275,7 +3450,7 @@ function mergeTitles(known, manifests) {
3275
3450
  }
3276
3451
  return next ?? known;
3277
3452
  }
3278
- function installedRows(modules, manifests, listed, known) {
3453
+ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3279
3454
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
3280
3455
  const rows = [];
3281
3456
  for (const module of modules) {
@@ -3305,12 +3480,15 @@ function installedRows(modules, manifests, listed, known) {
3305
3480
  ...outdated ? { moduleUpdate: {
3306
3481
  installed: module.installed,
3307
3482
  latest
3308
- } } : {}
3483
+ } } : {},
3484
+ defaultShown: defaults.has(module.unit),
3485
+ defaultChanged: changed[module.unit] ?? 0
3309
3486
  });
3310
3487
  }
3311
3488
  return rows;
3312
3489
  }
3313
3490
  function marketActions$1(row) {
3491
+ if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
3314
3492
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
3315
3493
  return [
3316
3494
  ...row.canInstall ? ["install"] : [],
@@ -3371,8 +3549,9 @@ function marketUpdatesOf(modules) {
3371
3549
  };
3372
3550
  return next;
3373
3551
  }
3374
- function marketHintVisible(manifests, capabilities, modules) {
3375
- return marketHasUpdates(marketRows(manifests, capabilities, marketUpdatesOf(modules)), sharedRows(manifests, capabilities));
3552
+ function marketHintVisible(manifests, capabilities, modules, workbench) {
3553
+ const self = workbenchRow(workbench);
3554
+ return marketHasUpdates([...marketRows(manifests, capabilities, marketUpdatesOf(modules)), ...self === void 0 ? [] : [self]], sharedRows(manifests, capabilities));
3376
3555
  }
3377
3556
  function marketSections(rows) {
3378
3557
  const installed = rows.filter((row) => isOnMachine(row.state));
@@ -3387,7 +3566,7 @@ function marketSections(rows) {
3387
3566
  rows: rest
3388
3567
  }]];
3389
3568
  }
3390
- function marketRows(manifests, capabilities, updates = {}) {
3569
+ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3391
3570
  const catalog = manifests.filter((manifest) => (manifest.env?.plugins ?? []).length > 0 || (manifest.env?.libs ?? []).length > 0);
3392
3571
  const rows = [];
3393
3572
  for (const manifest of catalog) {
@@ -3414,7 +3593,9 @@ function marketRows(manifests, capabilities, updates = {}) {
3414
3593
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
3415
3594
  } },
3416
3595
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
3417
- ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {}
3596
+ ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
3597
+ defaultShown: defaults.has(manifest.id),
3598
+ defaultChanged: changed[manifest.id] ?? 0
3418
3599
  });
3419
3600
  }
3420
3601
  return rows;
@@ -3503,6 +3684,7 @@ function sharedRows(manifests, capabilities) {
3503
3684
  const detail = bucket.purpose === void 0 ? void 0 : `${bucket.label} —— ${bucket.purpose}`;
3504
3685
  rows.push({
3505
3686
  id: `${bucket.kind}:${bucket.name}`,
3687
+ kind: bucket.kind,
3506
3688
  label: bucket.label,
3507
3689
  usedByKeys: bucket.users.map((unit) => byId.get(unit)?.card?.titleKey ?? unit),
3508
3690
  state,
@@ -3583,27 +3765,27 @@ function installedPluginKept(value) {
3583
3765
  names
3584
3766
  };
3585
3767
  }
3768
+ function installedPluginNotice(value, t) {
3769
+ const kept = installedPluginKept(value);
3770
+ if (kept === void 0) return null;
3771
+ return t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) });
3772
+ }
3586
3773
  function noteOf(plugin) {
3587
3774
  if (plugin.broken === true) return {
3588
3775
  key: "panels.market.pluginBroken",
3589
- params: {}
3590
- };
3591
- if (plugin.local === true) return {
3592
- key: "panels.market.pluginLocalNoUpdate",
3593
- params: {}
3594
- };
3595
- if (plugin.name !== void 0 && plugin.name !== plugin.pkg) return {
3596
- key: "panels.market.pluginAlsoKnownAs",
3597
- params: { pkg: plugin.pkg }
3776
+ params: {},
3777
+ tone: "alert"
3598
3778
  };
3779
+ if (plugin.local === true) return void 0;
3599
3780
  }
3600
- function installedPluginRows(plugins) {
3781
+ function installedPluginRows(plugins, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3601
3782
  return plugins.map((plugin) => {
3783
+ const id = `plugin:${plugin.pkg}`;
3602
3784
  const name = plugin.name ?? plugin.pkg;
3603
3785
  const outdated = plugin.installed !== void 0 && plugin.latest !== void 0 && plugin.latest !== plugin.installed;
3604
3786
  const note = noteOf(plugin);
3605
3787
  return {
3606
- id: `plugin:${plugin.pkg}`,
3788
+ id,
3607
3789
  titleKey: plugin.pkg,
3608
3790
  label: name,
3609
3791
  plugin: true,
@@ -3613,7 +3795,12 @@ function installedPluginRows(plugins) {
3613
3795
  canUninstall: true,
3614
3796
  ...plugin.local === true ? { local: true } : {},
3615
3797
  ...plugin.broken === true ? { broken: true } : {},
3798
+ ...plugin.broken === true ? {} : {
3799
+ defaultShown: defaults.has(id),
3800
+ defaultChanged: changed[id] ?? 0
3801
+ },
3616
3802
  ...note === void 0 ? {} : { note },
3803
+ ...plugin.installed === void 0 ? {} : { versionLabel: `${plugin.pkg}@${plugin.installed}` },
3617
3804
  pkg: plugin.pkg,
3618
3805
  ...plugin.installed === void 0 ? {} : { version: {
3619
3806
  installed: plugin.installed,
@@ -3622,8 +3809,279 @@ function installedPluginRows(plugins) {
3622
3809
  };
3623
3810
  });
3624
3811
  }
3812
+ var MarketPage_module_default = {
3813
+ marketList: "_marketList_1v8dy_1",
3814
+ marketRow: "_marketRow_1v8dy_10",
3815
+ marketIcon: "_marketIcon_1v8dy_20",
3816
+ marketMain: "_marketMain_1v8dy_32",
3817
+ marketName: "_marketName_1v8dy_39",
3818
+ marketDesc: "_marketDesc_1v8dy_48",
3819
+ marketUsedBy: "_marketUsedBy_1v8dy_59",
3820
+ marketVersion: "_marketVersion_1v8dy_73",
3821
+ marketEnd: "_marketEnd_1v8dy_95",
3822
+ marketSwitchSeat: "_marketSwitchSeat_1v8dy_103",
3823
+ marketIconAction: "_marketIconAction_1v8dy_108",
3824
+ marketActions: "_marketActions_1v8dy_113",
3825
+ marketDefaultNote: "_marketDefaultNote_1v8dy_119",
3826
+ marketSelfDivider: "_marketSelfDivider_1v8dy_126",
3827
+ marketSection: "_marketSection_1v8dy_131",
3828
+ marketSectionHead: "_marketSectionHead_1v8dy_138",
3829
+ marketSectionIcon: "_marketSectionIcon_1v8dy_144",
3830
+ marketSectionTitle: "_marketSectionTitle_1v8dy_151",
3831
+ marketSectionCount: "_marketSectionCount_1v8dy_157",
3832
+ marketProgress: "_marketProgress_1v8dy_164",
3833
+ marketNote: "_marketNote_1v8dy_174",
3834
+ marketNotePlain: "_marketNotePlain_1v8dy_181",
3835
+ marketFailure: "_marketFailure_1v8dy_189",
3836
+ marketEmpty: "_marketEmpty_1v8dy_196",
3837
+ marketPage: "_marketPage_1v8dy_201",
3838
+ marketPageHead: "_marketPageHead_1v8dy_219",
3839
+ marketPageTitle: "_marketPageTitle_1v8dy_227",
3840
+ marketPageIntro: "_marketPageIntro_1v8dy_232",
3841
+ marketPageTools: "_marketPageTools_1v8dy_238",
3842
+ marketIconButton: "_marketIconButton_1v8dy_247",
3843
+ marketIconWrap: "_marketIconWrap_1v8dy_272",
3844
+ marketIconButtonSpinning: "_marketIconButtonSpinning_1v8dy_276",
3845
+ "wb-spin": "_wb-spin_1v8dy_1",
3846
+ marketAddButton: "_marketAddButton_1v8dy_280",
3847
+ marketChecking: "_marketChecking_1v8dy_297",
3848
+ marketEmptyTitle: "_marketEmptyTitle_1v8dy_305"
3849
+ };
3850
+ //#endregion
3851
+ //#region src/app/layouts/rightbar/MarketStates.tsx
3852
+ function MarketChecking({ t }) {
3853
+ 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, {
3854
+ state: "ongoing",
3855
+ size: 14
3856
+ }), t("panels.market.checking")));
3857
+ }
3858
+ function MarketEmpty({ t }) {
3859
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3860
+ }
3861
+ //#endregion
3862
+ //#region src/app/layouts/rightbar/market-section-icon.ts
3863
+ var SIZE$1 = 14;
3864
+ function marketSectionIcon(kind) {
3865
+ switch (kind) {
3866
+ case "installed": return h(IconModules, { size: SIZE$1 });
3867
+ case "pending": return h(_deepseek_ai_dsh_client_ui_primitives.IconDownloadOutlineRegular, { size: SIZE$1 });
3868
+ case "plugins": return h(_deepseek_ai_dsh_client_ui_primitives.IconCordisPluginOutlineRegular, { size: SIZE$1 });
3869
+ case "local": return h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenOutlineRegular, { size: SIZE$1 });
3870
+ case "shared": return h(_deepseek_ai_dsh_client_ui_primitives.IconLinkOutlineRegular, { size: SIZE$1 });
3871
+ }
3872
+ }
3873
+ //#endregion
3874
+ //#region src/app/layouts/rightbar/market-row-icon.ts
3875
+ var SIZE = 18;
3876
+ function packageIcon(kind) {
3877
+ switch (kind) {
3878
+ case "module": return h(_deepseek_ai_dsh_client_ui_primitives.IconArchiveOutlineRegular, { size: SIZE });
3879
+ case "plugin": return h(IconOpencli, { size: SIZE });
3880
+ case "lib": return h(IconNpm, { size: SIZE });
3881
+ case "workbench": return h(IconPanelScreen, { size: SIZE });
3882
+ }
3883
+ }
3884
+ function marketRowKind(row) {
3885
+ if (row.workbench === true) return "workbench";
3886
+ if (row.plugin === true) return "plugin";
3887
+ return "module";
3888
+ }
3889
+ function sharedRowKind(row) {
3890
+ return row.kind === "plugin" ? "plugin" : "lib";
3891
+ }
3892
+ //#endregion
3893
+ //#region src/app/layouts/rightbar/market-view-text.ts
3894
+ var PROGRESS_KEY = {
3895
+ install: "panels.market.installing",
3896
+ update: "panels.market.updating",
3897
+ "update-bundle": "panels.market.updating",
3898
+ "remove-bundle": "panels.market.uninstalling",
3899
+ uninstall: "panels.market.uninstalling",
3900
+ "update-dependency": "panels.market.updating",
3901
+ "update-plugin": "panels.market.updating",
3902
+ "uninstall-plugin": "panels.market.uninstalling",
3903
+ "update-workbench": "panels.market.updating"
3904
+ };
3905
+ var ACTION_LABEL_KEY = {
3906
+ install: "panels.market.install",
3907
+ update: "panels.market.update",
3908
+ "update-bundle": "panels.market.update",
3909
+ "remove-bundle": "panels.market.uninstall",
3910
+ uninstall: "panels.market.uninstall",
3911
+ "update-dependency": "panels.market.update",
3912
+ "update-plugin": "panels.market.update",
3913
+ "uninstall-plugin": "panels.market.uninstall",
3914
+ "update-workbench": "panels.market.update"
3915
+ };
3916
+ function pendingRowOf(input) {
3917
+ const { pending, removing } = input;
3918
+ if (removing === null || pending === null) return void 0;
3919
+ if (input.rows.some((row) => row.id === removing)) return void 0;
3920
+ return {
3921
+ id: removing,
3922
+ titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
3923
+ state: "installed",
3924
+ canInstall: false,
3925
+ canUpdate: false,
3926
+ canUninstall: true,
3927
+ ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
3928
+ ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
3929
+ };
3930
+ }
3931
+ //#endregion
3932
+ //#region src/app/layouts/rightbar/SharedSection.tsx
3933
+ function SharedLine({ t, row, pending, failure, onAct }) {
3934
+ const running = pending !== null && pending.id === row.id ? pending : null;
3935
+ const locked = pending !== null;
3936
+ const actions = sharedActions(row);
3937
+ const stateText = t(SHARED_STATE_KEY[row.state]);
3938
+ const version = row.version;
3939
+ 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", {
3940
+ from: version.installed,
3941
+ to: version.latest
3942
+ }) : version.installed ?? version.latest ?? ""));
3943
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3944
+ className: MarketPage_module_default.marketIcon,
3945
+ "aria-hidden": "true"
3946
+ }, 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", {
3947
+ className: MarketPage_module_default.marketDesc,
3948
+ role: "img",
3949
+ "aria-label": stateText
3950
+ }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3951
+ state: "ongoing",
3952
+ size: 14
3953
+ }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3954
+ state: SHARED_DOT[row.state],
3955
+ size: 9
3956
+ }), 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, {
3957
+ state: "ongoing",
3958
+ size: 14
3959
+ }), 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, {
3960
+ key: action,
3961
+ type: "button",
3962
+ size: "sm",
3963
+ variant: "outline",
3964
+ disabled: locked,
3965
+ onClick: () => onAct(action)
3966
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3967
+ }
3968
+ function SharedSection({ t, rows, pending, failureOf, act }) {
3969
+ if (rows.length === 0) return null;
3970
+ return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("span", {
3971
+ className: MarketPage_module_default.marketSectionIcon,
3972
+ "aria-hidden": "true"
3973
+ }, 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, {
3974
+ key: row.id,
3975
+ t,
3976
+ row,
3977
+ pending,
3978
+ failure: failureOf(row.id),
3979
+ onAct: (action) => void act(row.id, action)
3980
+ }))));
3981
+ }
3982
+ //#endregion
3983
+ //#region src/app/layouts/rightbar/market-section.tsx
3984
+ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
3985
+ const running = pending !== null && pending.id === row.id ? pending : null;
3986
+ const locked = pending !== null;
3987
+ const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
3988
+ const actions = marketActions$1(row);
3989
+ const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3990
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3991
+ className: MarketPage_module_default.marketIcon,
3992
+ "aria-hidden": "true"
3993
+ }, 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", {
3994
+ from: row.version.installed,
3995
+ to: row.version.latest
3996
+ }) : row.version.installed ?? row.version.latest ?? "")), quiet ? null : /* @__PURE__ */ h("span", {
3997
+ className: MarketPage_module_default.marketDesc,
3998
+ role: "img",
3999
+ "aria-label": stateText
4000
+ }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4001
+ state: "ongoing",
4002
+ size: 14
4003
+ }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4004
+ state: MARKET_DOT[row.state],
4005
+ size: 9
4006
+ }), 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, {
4007
+ checked: row.defaultShown,
4008
+ disabled: boardBusy === true || locked,
4009
+ label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
4010
+ onChange: (next) => onDefault?.(next)
4011
+ }))), running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4012
+ state: "ongoing",
4013
+ size: 14
4014
+ }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
4015
+ const danger = action === "uninstall" || action === "remove-bundle" || action === "uninstall-plugin";
4016
+ const label = t(ACTION_LABEL_KEY[action]);
4017
+ if (!danger) return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
4018
+ key: action,
4019
+ type: "button",
4020
+ size: "sm",
4021
+ variant: action === "install" ? "primary" : "outline",
4022
+ disabled: locked,
4023
+ onClick: () => onAct(action)
4024
+ }, label);
4025
+ return /* @__PURE__ */ h(Tip, {
4026
+ key: action,
4027
+ label
4028
+ }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
4029
+ type: "button",
4030
+ size: "sm",
4031
+ variant: "ghost",
4032
+ className: `wb-dangerAction ${MarketPage_module_default.marketIconAction}`,
4033
+ icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 14 }),
4034
+ "aria-label": t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }),
4035
+ disabled: locked,
4036
+ onClick: () => onAct(action)
4037
+ }));
4038
+ }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
4039
+ className: row.note.tone === "plain" ? MarketPage_module_default.marketNotePlain : MarketPage_module_default.marketNote,
4040
+ title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
4041
+ }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
4042
+ }
4043
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
4044
+ if (rows.length === 0) return null;
4045
+ return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("span", {
4046
+ className: MarketPage_module_default.marketSectionIcon,
4047
+ "aria-hidden": "true"
4048
+ }, 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, {
4049
+ key: row.id,
4050
+ t,
4051
+ row,
4052
+ pending,
4053
+ failure: failureOf(row.id),
4054
+ onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
4055
+ onDefault: (next) => onDefault?.(row.id, next),
4056
+ boardBusy
4057
+ }))));
4058
+ }
3625
4059
  //#endregion
3626
4060
  //#region src/app/layouts/market/add-module-text.ts
4061
+ function previewOf(inspection, fallback) {
4062
+ if (inspection.status === "plugin") return {
4063
+ kind: "plugin",
4064
+ name: inspection.pkg,
4065
+ version: inspection.version ?? "",
4066
+ description: "",
4067
+ registry: inspection.registry ?? "",
4068
+ ...inspection.pluginName === void 0 ? {} : { pluginName: inspection.pluginName }
4069
+ };
4070
+ return {
4071
+ kind: "module",
4072
+ name: inspection.name ?? fallback,
4073
+ version: inspection.version ?? "",
4074
+ description: inspection.description ?? "",
4075
+ registry: inspection.registry ?? ""
4076
+ };
4077
+ }
4078
+ function resultKindOf(input) {
4079
+ if (input.plugin) return "plugin";
4080
+ if (input.change.application === "failed") return "failed";
4081
+ if (input.change.application === "restart-required") return "restart";
4082
+ if (input.change.application === "cancelled" || input.supplyState === "not-a-module") return "quiet";
4083
+ return "took-effect";
4084
+ }
3627
4085
  var GUIDE_ITEMS = [
3628
4086
  {
3629
4087
  titleKey: "panels.market.add.guideIdTitle",
@@ -3811,48 +4269,50 @@ function changeFailure(change, t) {
3811
4269
  if (change === void 0 || SHIPPED.includes(change.application)) return void 0;
3812
4270
  return failureReason(failureCode(change), change.application, t);
3813
4271
  }
3814
- var MarketPage_module_default = {
3815
- marketList: "_marketList_z6vtq_1",
3816
- marketRow: "_marketRow_z6vtq_10",
3817
- marketIcon: "_marketIcon_z6vtq_20",
3818
- marketMain: "_marketMain_z6vtq_32",
3819
- marketName: "_marketName_z6vtq_39",
3820
- marketDesc: "_marketDesc_z6vtq_48",
3821
- marketUsedBy: "_marketUsedBy_z6vtq_59",
3822
- marketVersion: "_marketVersion_z6vtq_73",
3823
- marketEnd: "_marketEnd_z6vtq_95",
3824
- marketActions: "_marketActions_z6vtq_102",
3825
- marketSection: "_marketSection_z6vtq_108",
3826
- marketSectionHead: "_marketSectionHead_z6vtq_115",
3827
- marketSectionTitle: "_marketSectionTitle_z6vtq_121",
3828
- marketSectionCount: "_marketSectionCount_z6vtq_127",
3829
- marketProgress: "_marketProgress_z6vtq_133",
3830
- marketNote: "_marketNote_z6vtq_143",
3831
- marketFailure: "_marketFailure_z6vtq_150",
3832
- marketEmpty: "_marketEmpty_z6vtq_157",
3833
- marketPage: "_marketPage_z6vtq_162",
3834
- marketPageHead: "_marketPageHead_z6vtq_180",
3835
- marketPageTitle: "_marketPageTitle_z6vtq_188",
3836
- marketPageIntro: "_marketPageIntro_z6vtq_193",
3837
- marketPageTools: "_marketPageTools_z6vtq_199",
3838
- marketIconButton: "_marketIconButton_z6vtq_208",
3839
- marketIconWrap: "_marketIconWrap_z6vtq_233",
3840
- marketIconButtonSpinning: "_marketIconButtonSpinning_z6vtq_237",
3841
- "wb-spin": "_wb-spin_z6vtq_1",
3842
- marketAddButton: "_marketAddButton_z6vtq_241",
3843
- marketChecking: "_marketChecking_z6vtq_258",
3844
- marketEmptyTitle: "_marketEmptyTitle_z6vtq_266"
3845
- };
3846
4272
  //#endregion
3847
- //#region src/app/layouts/rightbar/MarketStates.tsx
3848
- function MarketChecking({ t }) {
3849
- 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, {
3850
- state: "ongoing",
3851
- size: 14
3852
- }), t("panels.market.checking")));
3853
- }
3854
- function MarketEmpty({ t }) {
3855
- return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
4273
+ //#region src/app/layouts/rightbar/market-act.ts
4274
+ function marketActOf(options) {
4275
+ const { t, mocked, rowOf, seats, send, onChanged } = options;
4276
+ return async (id, action) => {
4277
+ if (mocked) return;
4278
+ const row = rowOf(id);
4279
+ seats.setPending({
4280
+ id,
4281
+ action,
4282
+ ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4283
+ ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4284
+ ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4285
+ });
4286
+ seats.setConfirming(null);
4287
+ seats.setFailed(null);
4288
+ if (action !== "uninstall-plugin") seats.setNotice(null);
4289
+ const outcome = await send(action === "update-dependency" ? {
4290
+ action,
4291
+ id
4292
+ } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" ? {
4293
+ action,
4294
+ name: row?.pkg ?? ""
4295
+ } : {
4296
+ action,
4297
+ unit: id
4298
+ });
4299
+ seats.setPending(null);
4300
+ if (!outcome.ok) {
4301
+ onChanged();
4302
+ seats.setFailed({
4303
+ id,
4304
+ message: t("panels.market.failed", { reason: outcome.message })
4305
+ });
4306
+ return;
4307
+ }
4308
+ if (action === "uninstall-plugin") seats.setNotice(installedPluginNotice(outcome.value, t));
4309
+ const reason = changeFailure(changeOf(outcome.value), t);
4310
+ onChanged();
4311
+ if (reason !== void 0) seats.setFailed({
4312
+ id,
4313
+ message: t("panels.market.failed", { reason })
4314
+ });
4315
+ };
3856
4316
  }
3857
4317
  var PanelFoot_module_default = {
3858
4318
  foot: "_foot_1us83_1",
@@ -3865,79 +4325,6 @@ function PanelFoot({ text, size = "sm", children }) {
3865
4325
  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);
3866
4326
  }
3867
4327
  //#endregion
3868
- //#region src/app/layouts/rightbar/market-view-text.ts
3869
- var PROGRESS_KEY = {
3870
- install: "panels.market.installing",
3871
- update: "panels.market.updating",
3872
- "update-bundle": "panels.market.updating",
3873
- "remove-bundle": "panels.market.uninstalling",
3874
- uninstall: "panels.market.uninstalling",
3875
- "update-dependency": "panels.market.updating",
3876
- "update-plugin": "panels.market.updating",
3877
- "uninstall-plugin": "panels.market.uninstalling"
3878
- };
3879
- var ACTION_LABEL_KEY = {
3880
- install: "panels.market.install",
3881
- update: "panels.market.update",
3882
- "update-bundle": "panels.market.update",
3883
- "remove-bundle": "panels.market.uninstall",
3884
- uninstall: "panels.market.uninstall",
3885
- "update-dependency": "panels.market.update",
3886
- "update-plugin": "panels.market.update",
3887
- "uninstall-plugin": "panels.market.uninstall"
3888
- };
3889
- //#endregion
3890
- //#region src/app/layouts/rightbar/SharedSection.tsx
3891
- function SharedLine({ t, row, pending, failure, onAct }) {
3892
- const running = pending !== null && pending.id === row.id ? pending : null;
3893
- const locked = pending !== null;
3894
- const actions = sharedActions(row);
3895
- const stateText = t(SHARED_STATE_KEY[row.state]);
3896
- const version = row.version;
3897
- 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", {
3898
- from: version.installed,
3899
- to: version.latest
3900
- }) : version.installed ?? version.latest ?? ""));
3901
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3902
- className: MarketPage_module_default.marketIcon,
3903
- "aria-hidden": "true"
3904
- }, /* @__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", {
3905
- className: MarketPage_module_default.marketDesc,
3906
- role: "img",
3907
- "aria-label": stateText
3908
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3909
- state: "ongoing",
3910
- size: 14
3911
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3912
- state: SHARED_DOT[row.state],
3913
- size: 9
3914
- }), 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, {
3915
- state: "ongoing",
3916
- size: 14
3917
- }), 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, {
3918
- key: action,
3919
- type: "button",
3920
- size: "sm",
3921
- variant: "outline",
3922
- disabled: locked,
3923
- onClick: () => onAct(action)
3924
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3925
- }
3926
- function SharedSection({ t, rows, pending, failureOf, act }) {
3927
- if (rows.length === 0) return null;
3928
- 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, {
3929
- key: row.id,
3930
- t,
3931
- row,
3932
- pending,
3933
- failure: failureOf(row.id),
3934
- onAct: (action) => void act(row.id, action)
3935
- }))), /* @__PURE__ */ h(PanelFoot, {
3936
- size: "md",
3937
- text: t("panels.market.sharedFoot")
3938
- }));
3939
- }
3940
- //#endregion
3941
4328
  //#region src/app/layouts/rightbar/MarketView.tsx
3942
4329
  var CONFIRM_UNINSTALL = [
3943
4330
  "uninstall",
@@ -3945,48 +4332,6 @@ var CONFIRM_UNINSTALL = [
3945
4332
  "uninstall-plugin"
3946
4333
  ];
3947
4334
  var CONFIRM_REMOVE = ["remove-bundle"];
3948
- function MarketLine({ t, row, pending, failure, onAct }) {
3949
- const running = pending !== null && pending.id === row.id ? pending : null;
3950
- const locked = pending !== null;
3951
- const actions = marketActions$1(row);
3952
- const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3953
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3954
- className: MarketPage_module_default.marketIcon,
3955
- "aria-hidden": "true"
3956
- }, /* @__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", {
3957
- from: row.version.installed,
3958
- to: row.version.latest
3959
- }) : row.version.installed ?? row.version.latest ?? "")), /* @__PURE__ */ h("span", {
3960
- className: MarketPage_module_default.marketDesc,
3961
- role: "img",
3962
- "aria-label": stateText
3963
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3964
- state: "ongoing",
3965
- size: 14
3966
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3967
- state: MARKET_DOT[row.state],
3968
- size: 9
3969
- }), 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, {
3970
- state: "ongoing",
3971
- size: 14
3972
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
3973
- const danger = action === "uninstall" || action === "remove-bundle";
3974
- return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3975
- key: action,
3976
- type: "button",
3977
- size: "sm",
3978
- variant: action === "install" ? "primary" : "outline",
3979
- className: danger ? "wb-dangerAction" : void 0,
3980
- icon: danger ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 13 }) : void 0,
3981
- "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
3982
- disabled: locked,
3983
- onClick: () => onAct(action)
3984
- }, t(ACTION_LABEL_KEY[action]));
3985
- }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
3986
- className: MarketPage_module_default.marketNote,
3987
- title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
3988
- }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3989
- }
3990
4335
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
3991
4336
  const [acknowledged, setAcknowledged] = useState(false);
3992
4337
  return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -4003,24 +4348,33 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
4003
4348
  onConfirm
4004
4349
  });
4005
4350
  }
4006
- function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmActions, onConfirming }) {
4007
- if (rows.length === 0) return null;
4008
- 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, {
4009
- key: row.id,
4351
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
4352
+ const failureOf = (id) => failed?.id === id ? failed.message : null;
4353
+ return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ h(MarketSection, {
4010
4354
  t,
4011
- row,
4355
+ rows: self === void 0 ? [] : [self],
4356
+ onDefault: setDefault,
4357
+ boardBusy,
4012
4358
  pending,
4013
- failure: failureOf(row.id),
4014
- onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action)
4015
- }))));
4016
- }
4017
- function MarketBody({ t, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming }) {
4018
- const failureOf = (id) => failed?.id === id ? failed.message : null;
4019
- return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), marketSections(shown).map((section) => /* @__PURE__ */ h(MarketSection, {
4359
+ failureOf,
4360
+ act,
4361
+ confirmActions: CONFIRM_UNINSTALL,
4362
+ onConfirming
4363
+ }), self === void 0 ? null : /* @__PURE__ */ h("div", {
4364
+ className: MarketPage_module_default.marketSelfDivider,
4365
+ "aria-hidden": "true"
4366
+ }), [
4367
+ ...shown,
4368
+ ...installedList,
4369
+ ...pluginList
4370
+ ].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, {
4020
4371
  key: section.id,
4021
4372
  t,
4022
4373
  titleKey: section.titleKey,
4374
+ icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
4023
4375
  rows: section.rows,
4376
+ onDefault: setDefault,
4377
+ boardBusy,
4024
4378
  pending,
4025
4379
  failureOf,
4026
4380
  act,
@@ -4029,7 +4383,10 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4029
4383
  })), /* @__PURE__ */ h(MarketSection, {
4030
4384
  t,
4031
4385
  titleKey: "panels.market.sectionPlugins",
4386
+ icon: marketSectionIcon("plugins"),
4032
4387
  rows: pluginList,
4388
+ onDefault: setDefault,
4389
+ boardBusy,
4033
4390
  pending,
4034
4391
  failureOf,
4035
4392
  act,
@@ -4038,7 +4395,10 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4038
4395
  }), /* @__PURE__ */ h(MarketSection, {
4039
4396
  t,
4040
4397
  titleKey: installedList.length > 0 && installedList.every((row) => row.local === true) ? "panels.market.sectionLocal" : "panels.market.sectionUnlisted",
4398
+ icon: marketSectionIcon("local"),
4041
4399
  rows: installedList,
4400
+ onDefault: setDefault,
4401
+ boardBusy,
4042
4402
  pending,
4043
4403
  failureOf,
4044
4404
  act,
@@ -4055,7 +4415,7 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4055
4415
  act
4056
4416
  }));
4057
4417
  }
4058
- function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, plugins, settling, mock }) {
4418
+ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, workbench, plugins, settling, mock, defaults = [], changed = {} }) {
4059
4419
  const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
4060
4420
  useEffect(() => {
4061
4421
  if (mock === void 0) setTitles((known) => mergeTitles(known, manifests));
@@ -4063,87 +4423,72 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4063
4423
  const catalog = mock?.manifests ?? manifests;
4064
4424
  const effective = mock === void 0 ? capabilities : mock.capabilities;
4065
4425
  const source = liveManifests(catalog, effective, mock === void 0 && installed !== void 0 ? new Set(installed.map((item) => item.unit)) : null);
4066
- const rows = marketRows(source, effective, mock?.updates ?? updates ?? {});
4426
+ const byDefault = new Set(defaults);
4427
+ const rows = marketRows(source, effective, mock?.updates ?? updates ?? {}, byDefault, changed);
4067
4428
  const shared = sharedRows(source, effective);
4068
4429
  const [pending, setPending] = useState(mock?.pending ?? null);
4069
4430
  const provision = useHostWrite({
4070
4431
  channel: "provision",
4071
4432
  networkText: t("panels.failed")
4072
4433
  });
4434
+ const boardWrite = useHostWrite({
4435
+ channel: "prefs",
4436
+ resource: "panels",
4437
+ networkText: t("panels.failed")
4438
+ });
4439
+ const [boardBusy, setBoardBusy] = useState(false);
4440
+ const setDefault = async (id, next) => {
4441
+ if (mock !== void 0) return;
4442
+ setBoardBusy(true);
4443
+ const outcome = await boardWrite.send({
4444
+ action: next ? "show" : "hide",
4445
+ id,
4446
+ scope: "machine"
4447
+ });
4448
+ setBoardBusy(false);
4449
+ if (!outcome.ok) setNotice(t("panels.failed"));
4450
+ };
4073
4451
  const [confirming, setConfirming] = useState(mock?.confirming ?? null);
4074
4452
  const [failed, setFailed] = useState(mock?.failure ?? null);
4075
4453
  const [notice, setNotice] = useState(mock?.notice ?? null);
4076
4454
  const removing = pending !== null && pending.action === "remove-bundle" && failed?.id !== pending.id ? pending.id : null;
4077
- 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);
4078
- const pendingRow = removing === null || pending === null || rows.some((row) => row.id === removing) ? void 0 : {
4079
- id: removing,
4080
- titleKey: pending.titleKey ?? titles.get(removing) ?? removing,
4081
- state: "installed",
4082
- canInstall: false,
4083
- canUpdate: false,
4084
- canUninstall: true,
4085
- ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
4086
- ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
4087
- };
4455
+ 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);
4456
+ const pendingRow = pendingRowOf({
4457
+ pending,
4458
+ removing,
4459
+ rows,
4460
+ titles
4461
+ });
4088
4462
  const shown = pendingRow === void 0 ? rows : [...rows, pendingRow];
4089
- const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? []);
4463
+ const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
4464
+ const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? [], byDefault, changed);
4090
4465
  const rowById = new Map([
4091
4466
  ...shown,
4467
+ ...self === void 0 ? [] : [self],
4092
4468
  ...installedList,
4093
4469
  ...pluginList
4094
4470
  ].map((row) => [row.id, row]));
4095
4471
  const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
4096
- const act = async (id, action) => {
4097
- if (mock !== void 0) return;
4098
- const row = rowById.get(id);
4099
- setPending({
4100
- id,
4101
- action,
4102
- ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4103
- ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4104
- ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4105
- });
4106
- setConfirming(null);
4107
- setFailed(null);
4108
- if (action !== "uninstall-plugin") setNotice(null);
4109
- const dependency = action === "update-dependency";
4110
- const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin";
4111
- const outcome = await provision.send(dependency ? {
4112
- action,
4113
- id
4114
- } : byName ? {
4115
- action,
4116
- name: row?.pkg ?? ""
4117
- } : {
4118
- action,
4119
- unit: id
4120
- });
4121
- setPending(null);
4122
- if (!outcome.ok) {
4123
- onChanged();
4124
- setFailed({
4125
- id,
4126
- message: t("panels.market.failed", { reason: outcome.message })
4127
- });
4128
- return;
4129
- }
4130
- if (action === "uninstall-plugin") {
4131
- const kept = installedPluginKept(outcome.value);
4132
- setNotice(kept === void 0 ? null : t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) }));
4133
- }
4134
- const reason = changeFailure(changeOf(outcome.value), t);
4135
- onChanged();
4136
- if (reason !== void 0) setFailed({
4137
- id,
4138
- message: t("panels.market.failed", { reason })
4139
- });
4140
- };
4141
- const settled = freshness.loaded && installedRead !== false;
4142
- const nothing = shown.length === 0 && installedList.length === 0 && pluginList.length === 0;
4472
+ const act = marketActOf({
4473
+ t,
4474
+ mocked: mock !== void 0,
4475
+ rowOf: (id) => rowById.get(id),
4476
+ seats: {
4477
+ setPending,
4478
+ setConfirming,
4479
+ setFailed,
4480
+ setNotice
4481
+ },
4482
+ send: (body) => provision.send(body),
4483
+ onChanged
4484
+ });
4485
+ const settled = marketSettled(freshness, installedRead);
4486
+ const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
4143
4487
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketChecking, { t });
4144
4488
  if (nothing) return /* @__PURE__ */ h(MarketEmpty, { t });
4145
4489
  return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(MarketBody, {
4146
4490
  t,
4491
+ self,
4147
4492
  shown,
4148
4493
  pluginList,
4149
4494
  installedList,
@@ -4152,7 +4497,9 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4152
4497
  failed,
4153
4498
  notice,
4154
4499
  act,
4155
- onConfirming: setConfirming
4500
+ onConfirming: setConfirming,
4501
+ setDefault,
4502
+ boardBusy
4156
4503
  }), /* @__PURE__ */ h(ConfirmUninstall, {
4157
4504
  key: confirming ?? "",
4158
4505
  t,
@@ -4168,6 +4515,182 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4168
4515
  }));
4169
4516
  }
4170
4517
  //#endregion
4518
+ //#region src/modules/sessions/model/session-node.ts
4519
+ function visiblePendingKind(kind) {
4520
+ switch (kind) {
4521
+ case "approval":
4522
+ case "plan-review":
4523
+ case "question": return kind;
4524
+ default: return;
4525
+ }
4526
+ }
4527
+ function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
4528
+ const status = statusById.get(summary.id);
4529
+ const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
4530
+ let runningSubagentCount = 0;
4531
+ for (const child of catalog ?? []) {
4532
+ const childStatus = statusById.get(child.id);
4533
+ const childRow = list.byId[child.id];
4534
+ if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
4535
+ }
4536
+ return {
4537
+ id: summary.id,
4538
+ title: summary.blank ? "" : summary.displayTitle,
4539
+ blank: summary.blank,
4540
+ running: status?.running ?? summary.running,
4541
+ runningSubagentCount,
4542
+ completed: status?.completionUnread === true,
4543
+ pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
4544
+ updatedAt: summary.updatedAt,
4545
+ pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
4546
+ };
4547
+ }
4548
+ function sessionStatuses(node, t) {
4549
+ const subagents = node.runningSubagentCount > 0 ? {
4550
+ state: "ongoing",
4551
+ label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
4552
+ } : void 0;
4553
+ let pending;
4554
+ switch (node.pendingInteraction) {
4555
+ case "approval":
4556
+ pending = {
4557
+ state: "warning",
4558
+ label: t("status.waitingApproval")
4559
+ };
4560
+ break;
4561
+ case "plan-review":
4562
+ pending = {
4563
+ state: "warning",
4564
+ label: t("status.planReview")
4565
+ };
4566
+ break;
4567
+ case "question":
4568
+ pending = {
4569
+ state: "warning",
4570
+ label: t("status.waitingAnswer")
4571
+ };
4572
+ break;
4573
+ default: pending = void 0;
4574
+ }
4575
+ if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
4576
+ if (node.running) {
4577
+ const primary = {
4578
+ state: "ongoing",
4579
+ label: t("status.running")
4580
+ };
4581
+ return subagents === void 0 ? [primary] : [primary, subagents];
4582
+ }
4583
+ if (subagents !== void 0) return [subagents];
4584
+ if (node.completed) return [{
4585
+ state: "done",
4586
+ label: t("status.completed")
4587
+ }];
4588
+ return [{
4589
+ state: "idle",
4590
+ label: t("status.idle")
4591
+ }];
4592
+ }
4593
+ function currentSessionId(list, panelActive) {
4594
+ if (panelActive) return void 0;
4595
+ return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
4596
+ }
4597
+ function orderSessionRows(rows, pinnedIds, archivedIds) {
4598
+ const placeholders = [];
4599
+ const leading = [];
4600
+ const rest = [];
4601
+ for (const row of rows) if (row.blank) placeholders.push(row);
4602
+ else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
4603
+ else rest.push(row);
4604
+ return [
4605
+ ...placeholders,
4606
+ ...leading,
4607
+ ...rest
4608
+ ];
4609
+ }
4610
+ function workspaceOfSession(workspaces, sessionId) {
4611
+ if (sessionId === void 0) return null;
4612
+ return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
4613
+ }
4614
+ function sessionRows(workspaceSessionIds, list, archivedIds, current) {
4615
+ const rows = [];
4616
+ for (const id of workspaceSessionIds) {
4617
+ if (archivedIds.has(id)) continue;
4618
+ const row = list.byId[id];
4619
+ if (row === void 0 || row.origin === "subagent") continue;
4620
+ if (row.blank && row.id !== current) continue;
4621
+ rows.push(row);
4622
+ }
4623
+ return rows;
4624
+ }
4625
+ //#endregion
4626
+ //#region src/app/layouts/project-selection.ts
4627
+ var listeners$1 = /* @__PURE__ */ new Set();
4628
+ function selectedProjectId() {
4629
+ const stored = readText(STORAGE_KEY_PROJECT);
4630
+ return stored === "" ? null : stored;
4631
+ }
4632
+ function selectProject(workspaceId) {
4633
+ writeText(STORAGE_KEY_PROJECT, workspaceId);
4634
+ for (const listener of [...listeners$1]) try {
4635
+ listener();
4636
+ } catch {}
4637
+ }
4638
+ function subscribeProject(listener) {
4639
+ listeners$1.add(listener);
4640
+ return () => {
4641
+ listeners$1.delete(listener);
4642
+ };
4643
+ }
4644
+ //#endregion
4645
+ //#region src/app/layouts/rightbar/use-panels.ts
4646
+ function shouldDropPanels(workspace, previous) {
4647
+ return workspace !== previous;
4648
+ }
4649
+ function useEnabledUnits(refreshToken, workspace) {
4650
+ const [enabled, setEnabled] = useState(null);
4651
+ const lastWorkspace = useRef(workspace);
4652
+ useEffect(() => {
4653
+ let cancelled = false;
4654
+ if (shouldDropPanels(workspace, lastWorkspace.current)) {
4655
+ lastWorkspace.current = workspace;
4656
+ setEnabled(null);
4657
+ }
4658
+ const read = async () => {
4659
+ const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
4660
+ if (cancelled) return;
4661
+ if (response?.ok === true && Array.isArray(response.units)) setEnabled({
4662
+ units: response.units,
4663
+ plugins: Array.isArray(response.plugins) ? response.plugins : [],
4664
+ defaults: Array.isArray(response.defaults) ? response.defaults : [],
4665
+ own: response.own === true,
4666
+ changed: response.changed ?? {}
4667
+ });
4668
+ };
4669
+ read();
4670
+ return () => {
4671
+ cancelled = true;
4672
+ };
4673
+ }, [
4674
+ refreshToken,
4675
+ useFactRevision("panels"),
4676
+ workspace
4677
+ ]);
4678
+ return enabled;
4679
+ }
4680
+ function useSelectedProjectId() {
4681
+ const [id, setId] = useState(() => selectedProjectId());
4682
+ useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
4683
+ return id;
4684
+ }
4685
+ function useBoardWorkspace(workspaces, sessions) {
4686
+ const projectId = useSelectedProjectId();
4687
+ const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
4688
+ return {
4689
+ workspace,
4690
+ path: workspace?.path ?? null
4691
+ };
4692
+ }
4693
+ //#endregion
4171
4694
  //#region src/shared/api/bundle-install.ts
4172
4695
  var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
4173
4696
  var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
@@ -4197,10 +4720,11 @@ function readInstalledPlugins(force = false) {
4197
4720
  var state = {
4198
4721
  modules: null,
4199
4722
  plugins: null,
4723
+ workbench: null,
4200
4724
  read: false,
4201
4725
  checkedAt: null
4202
4726
  };
4203
- var listeners$1 = /* @__PURE__ */ new Set();
4727
+ var listeners = /* @__PURE__ */ new Set();
4204
4728
  var inFlight = null;
4205
4729
  var readSeq = 0;
4206
4730
  var newestForceSeq = -1;
@@ -4208,14 +4732,14 @@ function moduleVersionsValue() {
4208
4732
  return state;
4209
4733
  }
4210
4734
  function subscribeModuleVersions(listener) {
4211
- listeners$1.add(listener);
4735
+ listeners.add(listener);
4212
4736
  return () => {
4213
- listeners$1.delete(listener);
4737
+ listeners.delete(listener);
4214
4738
  };
4215
4739
  }
4216
4740
  function publish(next) {
4217
4741
  state = next;
4218
- for (const listener of [...listeners$1]) listener();
4742
+ for (const listener of [...listeners]) listener();
4219
4743
  }
4220
4744
  function runModuleVersionsRead(force = false) {
4221
4745
  if (inFlight !== null && inFlight.force === force) return inFlight.promise;
@@ -4228,6 +4752,7 @@ function runModuleVersionsRead(force = false) {
4228
4752
  publish({
4229
4753
  modules: versions?.ok === true ? versions.modules : state.modules,
4230
4754
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
4755
+ workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
4231
4756
  read: true,
4232
4757
  checkedAt: Date.now()
4233
4758
  });
@@ -4260,6 +4785,7 @@ function useModuleVersions() {
4260
4785
  return {
4261
4786
  modules: value.modules,
4262
4787
  plugins: value.plugins,
4788
+ workbench: value.workbench,
4263
4789
  read: value.read,
4264
4790
  checkedAt: value.checkedAt,
4265
4791
  reload
@@ -4484,7 +5010,9 @@ function AddModulePreview({ t, state }) {
4484
5010
  const preview = state.preview;
4485
5011
  if (preview === null) return null;
4486
5012
  const source = preview.registry === "" ? t("panels.market.add.registryDefault") : preview.registry;
4487
- 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)));
5013
+ const plugin = preview.kind === "plugin";
5014
+ const pluginName = plugin ? preview.pluginName : void 0;
5015
+ 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);
4488
5016
  }
4489
5017
  function AddModuleResult({ t, state }) {
4490
5018
  const outcome = state.outcome;
@@ -4492,26 +5020,27 @@ function AddModuleResult({ t, state }) {
4492
5020
  const reason = failureReason(failureCode(outcome.change), outcome.change.application, t);
4493
5021
  const supply = supplyKey(outcome.supply.state);
4494
5022
  const builds = state.builds;
4495
- const failed = outcome.change.application === "failed";
4496
- const restart = outcome.change.application === "restart-required";
4497
- const cancelled = outcome.change.application === "cancelled";
4498
- const notModule = outcome.supply.state === "not-a-module";
4499
5023
  const plugin = outcome.plugin;
5024
+ const kind = resultKindOf({
5025
+ change: outcome.change,
5026
+ supplyState: outcome.supply.state,
5027
+ plugin: plugin !== void 0
5028
+ });
4500
5029
  const name = outcome.module.kind === "module" ? outcome.module.unit : outcome.module.pkg;
4501
5030
  return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.hero }, /* @__PURE__ */ h("span", {
4502
5031
  className: AddModule_module_default.heroIcon,
4503
- "data-state": failed ? "error" : cancelled ? "idle" : "done",
5032
+ "data-state": kind === "failed" ? "error" : kind === "cancelled" ? "idle" : "done",
4504
5033
  "aria-hidden": "true"
4505
- }, failed ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, { size: 28 }) : cancelled ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
5034
+ }, kind === "failed" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, { size: 28 }) : kind === "cancelled" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
4506
5035
  state: "idle",
4507
5036
  size: 28
4508
5037
  }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconCheckCircleFillRegular, { size: 28 })), /* @__PURE__ */ h("h2", {
4509
5038
  className: AddModule_module_default.wizardTitle,
4510
- role: failed ? "alert" : "status"
4511
- }, 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", {
5039
+ role: kind === "failed" ? "alert" : "status"
5040
+ }, 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", {
4512
5041
  className: AddModule_module_default.resultWarn,
4513
5042
  role: "alert"
4514
- }, 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)));
5043
+ }, 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)));
4515
5044
  }
4516
5045
  //#endregion
4517
5046
  //#region src/app/layouts/market/add-module-mock.ts
@@ -4588,6 +5117,7 @@ var ADD_MODULE_MOCKS = [
4588
5117
  phase: "preview",
4589
5118
  spec: "@dsh-workbench/module-hello",
4590
5119
  preview: {
5120
+ kind: "module",
4591
5121
  name: "@dsh-workbench/module-hello",
4592
5122
  version: "0.1.2",
4593
5123
  description: "最小样本模块:一枚「你好」卡片",
@@ -4600,12 +5130,27 @@ var ADD_MODULE_MOCKS = [
4600
5130
  phase: "preview",
4601
5131
  spec: "@dsh-workbench/module-hello",
4602
5132
  preview: {
5133
+ kind: "module",
4603
5134
  name: "@dsh-workbench/module-hello",
4604
5135
  version: "",
4605
5136
  description: "",
4606
5137
  registry: ""
4607
5138
  }
4608
5139
  },
5140
+ {
5141
+ id: "preview-plugin",
5142
+ label: "预览(opencli 插件)",
5143
+ phase: "preview",
5144
+ spec: "opencli-plugin-grafana",
5145
+ preview: {
5146
+ kind: "plugin",
5147
+ name: "opencli-plugin-grafana",
5148
+ version: "1.0.16",
5149
+ description: "",
5150
+ registry: "registry.npmmirror.com",
5151
+ pluginName: "grafana"
5152
+ }
5153
+ },
4609
5154
  {
4610
5155
  id: "installing",
4611
5156
  label: "正在安装(可取消)",
@@ -4895,12 +5440,7 @@ function useAddModule(options) {
4895
5440
  setPhase("idle");
4896
5441
  return;
4897
5442
  }
4898
- setPreview({
4899
- name: inspection.name ?? wanted,
4900
- version: inspection.version ?? "",
4901
- description: inspection.description ?? "",
4902
- registry: inspection.registry ?? ""
4903
- });
5443
+ setPreview(previewOf(inspection, wanted));
4904
5444
  setPhase("preview");
4905
5445
  });
4906
5446
  }, [spec, registry]);
@@ -5122,8 +5662,8 @@ function makeMarketEntryIcon(units) {
5122
5662
  return function MarketEntryIcon({ size = 16 }) {
5123
5663
  const manifests = useLiveManifests(units);
5124
5664
  const { capabilities } = useCapabilityMap(0);
5125
- const { modules } = useModuleVersions();
5126
- const hasUpdates = marketHintVisible(manifests, capabilities, modules);
5665
+ const { modules, workbench } = useModuleVersions();
5666
+ const hasUpdates = marketHintVisible(manifests, capabilities, modules, workbench);
5127
5667
  useEffect(() => {
5128
5668
  publishPanelHint(MARKET_PANEL_ID, hasUpdates ? { labelKey: "panels.market.hasNew" } : null);
5129
5669
  return () => publishPanelHint(MARKET_PANEL_ID, null);
@@ -5134,8 +5674,10 @@ function makeMarketEntryIcon(units) {
5134
5674
  function MarketPanel({ t, units }) {
5135
5675
  const manifests = useLiveManifests(units);
5136
5676
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
5137
- const { modules, plugins, read: installedRead, reload: reloadVersions } = useModuleVersions();
5677
+ const { modules, plugins, workbench, read: installedRead, reload: reloadVersions } = useModuleVersions();
5678
+ const machineBoard = useEnabledUnits(0, null);
5138
5679
  const [adding, setAdding] = useState(false);
5680
+ const openAddModule = useCallback(() => setAdding(true), []);
5139
5681
  const updates = useMemo(() => marketUpdatesOf(modules), [modules]);
5140
5682
  const installed = modules === null ? void 0 : withClientRefusals(modules, units.refusals());
5141
5683
  const reload = useCallback(() => {
@@ -5194,11 +5736,14 @@ function MarketPanel({ t, units }) {
5194
5736
  });
5195
5737
  const mock = fixturePick.enabled ? fixturePick.current : void 0;
5196
5738
  const mockNonce = fixturePick.nonce;
5739
+ const shownFreshness = mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS;
5740
+ const shownRead = mock === void 0 ? installedRead : mock.installedRead ?? true;
5741
+ const busy = !marketSettled(shownFreshness, shownRead) || shownFreshness.checking;
5197
5742
  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", {
5198
5743
  type: "button",
5199
- className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
5744
+ className: `${MarketPage_module_default.marketIconButton}${shownFreshness.checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
5200
5745
  "aria-label": t("panels.market.checkUpdates"),
5201
- disabled: checking,
5746
+ disabled: busy,
5202
5747
  onClick: () => {
5203
5748
  forceProbe();
5204
5749
  reloadVersions({ force: true });
@@ -5211,7 +5756,8 @@ function MarketPanel({ t, units }) {
5211
5756
  size: "sm",
5212
5757
  className: MarketPage_module_default.marketAddButton,
5213
5758
  icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
5214
- onClick: () => setAdding(true)
5759
+ disabled: busy,
5760
+ onClick: openAddModule
5215
5761
  }, t("panels.market.add.open")))), fixturePick.enabled ? /* @__PURE__ */ h(MockStrip, {
5216
5762
  mocks: marketMocks,
5217
5763
  index: fixturePick.index,
@@ -5221,14 +5767,17 @@ function MarketPanel({ t, units }) {
5221
5767
  t,
5222
5768
  manifests,
5223
5769
  capabilities,
5224
- freshness: mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS,
5770
+ freshness: shownFreshness,
5225
5771
  onChanged: reload,
5226
5772
  updates,
5227
5773
  installed,
5228
- installedRead: mock === void 0 ? installedRead : mock.installedRead ?? true,
5774
+ installedRead: shownRead,
5775
+ workbench,
5229
5776
  plugins,
5230
5777
  settling: mock === void 0 ? settling : void 0,
5231
- mock
5778
+ mock,
5779
+ defaults: machineBoard?.defaults ?? [],
5780
+ changed: machineBoard?.changed ?? {}
5232
5781
  }), /* @__PURE__ */ h(AddModuleDialog, {
5233
5782
  t,
5234
5783
  open: adding,
@@ -5253,25 +5802,6 @@ function registerMarketPanel(ctx, units) {
5253
5802
  }, MarketPanel));
5254
5803
  }
5255
5804
  //#endregion
5256
- //#region src/app/layouts/project-selection.ts
5257
- var listeners = /* @__PURE__ */ new Set();
5258
- function selectedProjectId() {
5259
- const stored = readText(STORAGE_KEY_PROJECT);
5260
- return stored === "" ? null : stored;
5261
- }
5262
- function selectProject(workspaceId) {
5263
- writeText(STORAGE_KEY_PROJECT, workspaceId);
5264
- for (const listener of [...listeners]) try {
5265
- listener();
5266
- } catch {}
5267
- }
5268
- function subscribeProject(listener) {
5269
- listeners.add(listener);
5270
- return () => {
5271
- listeners.delete(listener);
5272
- };
5273
- }
5274
- //#endregion
5275
5805
  //#region src/shared/api/diy.ts
5276
5806
  var DIY_PRESET_ID = "workbench-diy";
5277
5807
  var WORKSHOP_TITLE = "工作台DIY";
@@ -6209,20 +6739,26 @@ function BoardMockStrip({ fixtures, show }) {
6209
6739
  });
6210
6740
  }
6211
6741
  var ModulesPage_module_default = {
6212
- trigger: "_trigger_1weg4_1",
6213
- pop: "_pop_1weg4_7",
6214
- head: "_head_1weg4_21",
6215
- title: "_title_1weg4_29",
6216
- reset: "_reset_1weg4_37",
6217
- list: "_list_1weg4_59",
6218
- row: "_row_1weg4_68",
6219
- rowOver: "_rowOver_1weg4_83",
6220
- ghost: "_ghost_1weg4_93",
6221
- grip: "_grip_1weg4_108",
6222
- label: "_label_1weg4_116",
6223
- name: "_name_1weg4_123",
6224
- error: "_error_1weg4_134",
6225
- dep: "_dep_1weg4_142"
6742
+ trigger: "_trigger_1yptb_1",
6743
+ pop: "_pop_1yptb_6",
6744
+ head: "_head_1yptb_20",
6745
+ title: "_title_1yptb_28",
6746
+ rowControls: "_rowControls_1yptb_36",
6747
+ followBox: "_followBox_1yptb_43",
6748
+ switchFollowing: "_switchFollowing_1yptb_49",
6749
+ reset: "_reset_1yptb_53",
6750
+ list: "_list_1yptb_75",
6751
+ row: "_row_1yptb_36",
6752
+ rowOver: "_rowOver_1yptb_99",
6753
+ ghost: "_ghost_1yptb_109",
6754
+ grip: "_grip_1yptb_124",
6755
+ label: "_label_1yptb_132",
6756
+ name: "_name_1yptb_139",
6757
+ error: "_error_1yptb_150",
6758
+ dep: "_dep_1yptb_158",
6759
+ pluginList: "_pluginList_1yptb_166",
6760
+ pluginRow: "_pluginRow_1yptb_171",
6761
+ plugin: "_plugin_1yptb_166"
6226
6762
  };
6227
6763
  //#endregion
6228
6764
  //#region src/app/layouts/rightbar/panel-mock.ts
@@ -6235,6 +6771,23 @@ function row$1(id, titleKey, shown) {
6235
6771
  hasCard: true
6236
6772
  };
6237
6773
  }
6774
+ function plugin(id, pkg, title, shown) {
6775
+ return {
6776
+ id,
6777
+ pkg,
6778
+ title,
6779
+ shown,
6780
+ source: "user"
6781
+ };
6782
+ }
6783
+ var PLUGIN_MOCK = {
6784
+ id: "plugin",
6785
+ label: "opencli 插件行(标出是插件,能开能关)",
6786
+ units: [],
6787
+ plugins: [plugin("plugin:opencli-plugin-cmdb", "opencli-plugin-cmdb", "cmdb", true), plugin("plugin:opencli-plugin-notes", "opencli-plugin-notes", "notes", false)],
6788
+ capabilities: {},
6789
+ expect: { rows: 0 }
6790
+ };
6238
6791
  function probe(unit, status) {
6239
6792
  return { [unit]: {
6240
6793
  unit,
@@ -6252,7 +6805,7 @@ function buildPanelMocks(roster) {
6252
6805
  units: [],
6253
6806
  capabilities: {},
6254
6807
  expect: { rows: 0 }
6255
- }];
6808
+ }, PLUGIN_MOCK];
6256
6809
  const titleKey = found.card?.titleKey ?? found.id;
6257
6810
  const id = found.id;
6258
6811
  const on = row$1(id, titleKey, true);
@@ -6398,7 +6951,8 @@ function buildPanelMocks(roster) {
6398
6951
  rows: 3,
6399
6952
  on: true
6400
6953
  }
6401
- }
6954
+ },
6955
+ PLUGIN_MOCK
6402
6956
  ];
6403
6957
  }
6404
6958
  //#endregion
@@ -6418,6 +6972,29 @@ function panelBadgeKey(capability) {
6418
6972
  if (capability.status === "missing-commands") return "panels.dep.missingCommands";
6419
6973
  return "panels.dep.unchecked";
6420
6974
  }
6975
+ function moduleRow(unit, capability) {
6976
+ const badge = panelBadgeKey(capability);
6977
+ return {
6978
+ id: unit.id,
6979
+ titleKey: unit.titleKey,
6980
+ plugin: false,
6981
+ ...badge === void 0 ? {} : { badgeKey: badge },
6982
+ shown: unit.shown,
6983
+ source: unit.source
6984
+ };
6985
+ }
6986
+ function pluginRow(plugin) {
6987
+ return {
6988
+ id: plugin.id,
6989
+ title: plugin.title,
6990
+ plugin: true,
6991
+ shown: plugin.shown,
6992
+ source: plugin.source
6993
+ };
6994
+ }
6995
+ function selectPanelRows(units, plugins, capabilities) {
6996
+ return [...selectPanelUnits(units, capabilities).map((unit) => moduleRow(unit, capabilities?.[unit.id])), ...plugins.map(pluginRow)];
6997
+ }
6421
6998
  function selectBoardModules(units, byId, capabilities) {
6422
6999
  if (units === null) return [];
6423
7000
  return units.filter((unit) => unit.shown && available(capabilities?.[unit.id])).map((unit) => byId(unit.id)).filter((module) => module !== void 0);
@@ -6431,13 +7008,56 @@ function aggregateSummaries(summaries) {
6431
7008
  };
6432
7009
  }
6433
7010
  //#endregion
7011
+ //#region src/app/layouts/rightbar/PanelRowControls.tsx
7012
+ function PanelRowControls({ t, unit, label, busy, onWrite }) {
7013
+ return /* @__PURE__ */ h("span", { className: ModulesPage_module_default.rowControls }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Checkbox, {
7014
+ checked: unit.source !== "user",
7015
+ disabled: busy,
7016
+ label: t("panels.followGlobal"),
7017
+ title: t("panels.followGlobalHint"),
7018
+ className: ModulesPage_module_default.followBox,
7019
+ onChange: (next) => onWrite(next ? {
7020
+ action: "follow",
7021
+ id: unit.id
7022
+ } : {
7023
+ action: unit.shown ? "show" : "hide",
7024
+ id: unit.id
7025
+ })
7026
+ }), /* @__PURE__ */ h("span", { className: unit.source === "user" ? void 0 : ModulesPage_module_default.switchFollowing }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Switch, {
7027
+ checked: unit.shown,
7028
+ label: `${label} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
7029
+ disabled: busy,
7030
+ onChange: (next) => onWrite({
7031
+ action: next ? "show" : "hide",
7032
+ id: unit.id
7033
+ })
7034
+ })));
7035
+ }
7036
+ //#endregion
7037
+ //#region src/app/layouts/rightbar/PanelPluginRows.tsx
7038
+ function PanelPluginRows({ t, rows, busy, onWrite }) {
7039
+ if (rows.length === 0) return null;
7040
+ return /* @__PURE__ */ h("ul", { className: `${ModulesPage_module_default.list} ${ModulesPage_module_default.pluginList}` }, rows.map((row) => /* @__PURE__ */ h("li", {
7041
+ className: `${ModulesPage_module_default.row} ${ModulesPage_module_default.pluginRow}`,
7042
+ key: row.id
7043
+ }, /* @__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, {
7044
+ t,
7045
+ unit: row,
7046
+ label: row.title ?? row.id,
7047
+ busy,
7048
+ onWrite
7049
+ }))));
7050
+ }
7051
+ //#endregion
6434
7052
  //#region src/app/layouts/rightbar/ModulesPage.tsx
6435
7053
  var BLANK_DRAG_IMAGE = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
6436
- function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpenMarket, mocked = false, mock }) {
7054
+ function ModulesPage({ t, units, plugins = [], workspace, capabilities, loading = false, onOpenMarket, mocked = false, mock, own = false }) {
6437
7055
  const [drag, setDrag] = useState(mock?.drag ?? null);
6438
7056
  const [busy, setBusy] = useState(mock?.busy ?? false);
6439
7057
  const [failed, setFailed] = useState(mock?.failed ?? false);
6440
- const rows = selectPanelUnits(units, capabilities);
7058
+ const rows = selectPanelRows(units, plugins, capabilities);
7059
+ const modules = rows.filter((row) => !row.plugin);
7060
+ const pluginRows = rows.filter((row) => row.plugin);
6441
7061
  const empty = !loading && rows.length === 0;
6442
7062
  const prefWrite = useHostWrite({
6443
7063
  channel: "prefs",
@@ -6455,9 +7075,10 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6455
7075
  setBusy(false);
6456
7076
  if (!outcome.ok) setFailed(true);
6457
7077
  };
7078
+ const writeRow = (body) => void write(body);
6458
7079
  const drop = () => {
6459
7080
  if (drag === null) return;
6460
- const moved = rows[drag.from];
7081
+ const moved = modules[drag.from];
6461
7082
  setDrag(null);
6462
7083
  if (moved === void 0 || drag.from === drag.over) return;
6463
7084
  write({
@@ -6466,14 +7087,14 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6466
7087
  index: drag.over
6467
7088
  });
6468
7089
  };
6469
- const dragging = drag === null ? void 0 : rows[drag.from];
7090
+ const dragging = drag === null ? void 0 : modules[drag.from];
6470
7091
  return /* @__PURE__ */ h(Fragment, null, drag?.at === void 0 || dragging === void 0 ? null : /* @__PURE__ */ h("div", {
6471
7092
  className: ModulesPage_module_default.ghost,
6472
7093
  style: {
6473
7094
  left: `${drag.at.x + 12}px`,
6474
7095
  top: `${drag.at.y - 12}px`
6475
7096
  }
6476
- }, t(dragging.titleKey)), empty ? /* @__PURE__ */ h(CenteredState, {
7097
+ }, t(dragging.titleKey ?? dragging.id)), empty ? /* @__PURE__ */ h(CenteredState, {
6477
7098
  compact: true,
6478
7099
  icon: null,
6479
7100
  title: t("panels.noneInstalled"),
@@ -6484,60 +7105,59 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6484
7105
  variant: "outline",
6485
7106
  onClick: onOpenMarket
6486
7107
  }, t("panels.browseMarket"))
6487
- }) : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, rows.map((unit, index) => {
6488
- const badge = panelBadgeKey(capabilities?.[unit.id]);
6489
- const dep = badge === void 0 ? void 0 : t(badge);
6490
- return /* @__PURE__ */ h("li", {
6491
- className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
6492
- key: unit.id,
6493
- draggable: true,
6494
- onDragStart: (event) => {
6495
- const blank = new Image();
6496
- blank.src = BLANK_DRAG_IMAGE;
6497
- event.dataTransfer.setDragImage(blank, 0, 0);
6498
- setDrag({
6499
- from: index,
6500
- over: index,
6501
- at: {
6502
- x: event.clientX,
6503
- y: event.clientY
6504
- }
6505
- });
6506
- },
6507
- onDragOver: (event) => {
6508
- event.preventDefault();
6509
- if (drag !== null) setDrag({
6510
- from: drag.from,
6511
- over: index,
6512
- at: {
6513
- x: event.clientX,
6514
- y: event.clientY
6515
- }
6516
- });
6517
- },
6518
- onDragEnd: drop,
6519
- onDrop: (event) => {
6520
- event.preventDefault();
6521
- drop();
6522
- }
6523
- }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
6524
- className: ModulesPage_module_default.grip,
6525
- "aria-hidden": "true"
6526
- }, "⠿")), /* @__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, {
6527
- checked: unit.shown,
6528
- label: `${t(unit.titleKey)} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
6529
- disabled: busy,
6530
- onChange: (next) => void write({
6531
- action: next ? "show" : "hide",
6532
- id: unit.id
6533
- })
6534
- }));
6535
- })), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, /* @__PURE__ */ h("button", {
7108
+ }) : null, modules.length === 0 ? null : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, modules.map((row, index) => /* @__PURE__ */ h("li", {
7109
+ className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
7110
+ key: row.id,
7111
+ draggable: true,
7112
+ onDragStart: (event) => {
7113
+ const blank = new Image();
7114
+ blank.src = BLANK_DRAG_IMAGE;
7115
+ event.dataTransfer.setDragImage(blank, 0, 0);
7116
+ setDrag({
7117
+ from: index,
7118
+ over: index,
7119
+ at: {
7120
+ x: event.clientX,
7121
+ y: event.clientY
7122
+ }
7123
+ });
7124
+ },
7125
+ onDragOver: (event) => {
7126
+ event.preventDefault();
7127
+ if (drag !== null) setDrag({
7128
+ from: drag.from,
7129
+ over: index,
7130
+ at: {
7131
+ x: event.clientX,
7132
+ y: event.clientY
7133
+ }
7134
+ });
7135
+ },
7136
+ onDragEnd: drop,
7137
+ onDrop: (event) => {
7138
+ event.preventDefault();
7139
+ drop();
7140
+ }
7141
+ }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
7142
+ className: ModulesPage_module_default.grip,
7143
+ "aria-hidden": "true"
7144
+ }, "⠿")), /* @__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, {
7145
+ t,
7146
+ unit: row,
7147
+ label: t(row.titleKey ?? row.id),
7148
+ busy,
7149
+ onWrite: writeRow
7150
+ })))), /* @__PURE__ */ h(PanelPluginRows, {
7151
+ t,
7152
+ rows: pluginRows,
7153
+ busy,
7154
+ onWrite: writeRow
7155
+ }), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, own ? /* @__PURE__ */ h("button", {
6536
7156
  type: "button",
6537
7157
  className: ModulesPage_module_default.reset,
6538
7158
  disabled: busy,
6539
7159
  onClick: () => void write({ action: "reset" })
6540
- }, t("panels.reset"))), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
7160
+ }, t("panels.followAll")) : null), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
6541
7161
  }
6542
7162
  //#endregion
6543
7163
  //#region src/app/layouts/rightbar/PanelModules.tsx
@@ -6569,7 +7189,7 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
6569
7189
  const panelMock = fixturePick.enabled ? fixturePick.current : void 0;
6570
7190
  const mockNonce = fixturePick.nonce;
6571
7191
  (0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(root, open, onOpenChange);
6572
- const units = enabledUnits ?? [];
7192
+ const units = enabledUnits?.units ?? [];
6573
7193
  return /* @__PURE__ */ h("div", {
6574
7194
  className: ModulesPage_module_default.trigger,
6575
7195
  ref: root
@@ -6594,8 +7214,10 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
6594
7214
  key: `${panelMock?.id ?? "real-modules"}-${mockNonce}`,
6595
7215
  t,
6596
7216
  units: panelMock?.units ?? units,
7217
+ plugins: panelMock?.plugins ?? enabledUnits?.plugins ?? [],
6597
7218
  capabilities: panelMock === void 0 ? fixturePick.enabled ? null : capabilities : panelMock.capabilities,
6598
7219
  loading: enabledUnits === null,
7220
+ own: enabledUnits?.own === true,
6599
7221
  onOpenMarket,
6600
7222
  mocked: fixturePick.enabled,
6601
7223
  workspace,
@@ -6772,114 +7394,6 @@ function rightbarPresentation(input) {
6772
7394
  };
6773
7395
  }
6774
7396
  //#endregion
6775
- //#region src/modules/sessions/model/session-node.ts
6776
- function visiblePendingKind(kind) {
6777
- switch (kind) {
6778
- case "approval":
6779
- case "plan-review":
6780
- case "question": return kind;
6781
- default: return;
6782
- }
6783
- }
6784
- function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
6785
- const status = statusById.get(summary.id);
6786
- const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
6787
- let runningSubagentCount = 0;
6788
- for (const child of catalog ?? []) {
6789
- const childStatus = statusById.get(child.id);
6790
- const childRow = list.byId[child.id];
6791
- if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
6792
- }
6793
- return {
6794
- id: summary.id,
6795
- title: summary.blank ? "" : summary.displayTitle,
6796
- blank: summary.blank,
6797
- running: status?.running ?? summary.running,
6798
- runningSubagentCount,
6799
- completed: status?.completionUnread === true,
6800
- pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
6801
- updatedAt: summary.updatedAt,
6802
- pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
6803
- };
6804
- }
6805
- function sessionStatuses(node, t) {
6806
- const subagents = node.runningSubagentCount > 0 ? {
6807
- state: "ongoing",
6808
- label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
6809
- } : void 0;
6810
- let pending;
6811
- switch (node.pendingInteraction) {
6812
- case "approval":
6813
- pending = {
6814
- state: "warning",
6815
- label: t("status.waitingApproval")
6816
- };
6817
- break;
6818
- case "plan-review":
6819
- pending = {
6820
- state: "warning",
6821
- label: t("status.planReview")
6822
- };
6823
- break;
6824
- case "question":
6825
- pending = {
6826
- state: "warning",
6827
- label: t("status.waitingAnswer")
6828
- };
6829
- break;
6830
- default: pending = void 0;
6831
- }
6832
- if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
6833
- if (node.running) {
6834
- const primary = {
6835
- state: "ongoing",
6836
- label: t("status.running")
6837
- };
6838
- return subagents === void 0 ? [primary] : [primary, subagents];
6839
- }
6840
- if (subagents !== void 0) return [subagents];
6841
- if (node.completed) return [{
6842
- state: "done",
6843
- label: t("status.completed")
6844
- }];
6845
- return [{
6846
- state: "idle",
6847
- label: t("status.idle")
6848
- }];
6849
- }
6850
- function currentSessionId(list, panelActive) {
6851
- if (panelActive) return void 0;
6852
- return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
6853
- }
6854
- function orderSessionRows(rows, pinnedIds, archivedIds) {
6855
- const placeholders = [];
6856
- const leading = [];
6857
- const rest = [];
6858
- for (const row of rows) if (row.blank) placeholders.push(row);
6859
- else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
6860
- else rest.push(row);
6861
- return [
6862
- ...placeholders,
6863
- ...leading,
6864
- ...rest
6865
- ];
6866
- }
6867
- function workspaceOfSession(workspaces, sessionId) {
6868
- if (sessionId === void 0) return null;
6869
- return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
6870
- }
6871
- function sessionRows(workspaceSessionIds, list, archivedIds, current) {
6872
- const rows = [];
6873
- for (const id of workspaceSessionIds) {
6874
- if (archivedIds.has(id)) continue;
6875
- const row = list.byId[id];
6876
- if (row === void 0 || row.origin === "subagent") continue;
6877
- if (row.blank && row.id !== current) continue;
6878
- rows.push(row);
6879
- }
6880
- return rows;
6881
- }
6882
- //#endregion
6883
7397
  //#region src/app/layouts/rightbar/suite-world.ts
6884
7398
  function createSuiteWorld(input) {
6885
7399
  const sessionId = currentSessionId(input.sessions, false);
@@ -6895,49 +7409,6 @@ function createSuiteWorld(input) {
6895
7409
  }
6896
7410
  };
6897
7411
  }
6898
- //#endregion
6899
- //#region src/app/layouts/rightbar/use-panels.ts
6900
- function shouldDropPanels(workspace, previous) {
6901
- return workspace !== previous;
6902
- }
6903
- function useEnabledUnits(refreshToken, workspace) {
6904
- const [enabled, setEnabled] = useState(null);
6905
- const lastWorkspace = useRef(workspace);
6906
- useEffect(() => {
6907
- let cancelled = false;
6908
- if (shouldDropPanels(workspace, lastWorkspace.current)) {
6909
- lastWorkspace.current = workspace;
6910
- setEnabled(null);
6911
- }
6912
- const read = async () => {
6913
- const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
6914
- if (cancelled) return;
6915
- if (response?.ok === true && Array.isArray(response.units)) setEnabled(response.units);
6916
- };
6917
- read();
6918
- return () => {
6919
- cancelled = true;
6920
- };
6921
- }, [
6922
- refreshToken,
6923
- useFactRevision("panels"),
6924
- workspace
6925
- ]);
6926
- return enabled;
6927
- }
6928
- function useSelectedProjectId() {
6929
- const [id, setId] = useState(() => selectedProjectId());
6930
- useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
6931
- return id;
6932
- }
6933
- function useBoardWorkspace(workspaces, sessions) {
6934
- const projectId = useSelectedProjectId();
6935
- const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
6936
- return {
6937
- workspace,
6938
- path: workspace?.path ?? null
6939
- };
6940
- }
6941
7412
  var Rightbar_module_default = {
6942
7413
  panel: "_panel_135e7_1",
6943
7414
  columns: "_columns_135e7_18",
@@ -7062,13 +7533,14 @@ function Rightbar(props) {
7062
7533
  const { capabilities } = useCapabilityMap(panelToken);
7063
7534
  const board = useBoardWorkspace(workspaces, sessions);
7064
7535
  const boardWorkspace = board.path;
7065
- const enabledUnits = useEnabledUnits(panelToken, boardWorkspace);
7536
+ const panelBoard = useEnabledUnits(panelToken, boardWorkspace);
7537
+ const enabledUnits = panelBoard?.units ?? null;
7066
7538
  const [modulesOpen, setModulesOpen] = useState(false);
7067
7539
  const fixtures = useBoardMock(fixtureRoster(manifests));
7068
7540
  const visibleModules = selectBoardModules(enabledUnits, (id) => modules.byId(id), capabilities);
7069
7541
  const plan = planBoard(fixtures.shape, {
7070
7542
  modules: visibleModules,
7071
- configRead: enabledUnits !== null
7543
+ configRead: panelBoard !== null
7072
7544
  }, fixtureSeed(manifests, modules.all(), crashModeOn(window.location.search)));
7073
7545
  const world = createSuiteWorld({
7074
7546
  workspaces,
@@ -7129,7 +7601,7 @@ function Rightbar(props) {
7129
7601
  onRefresh: refreshPanel,
7130
7602
  modulesOpen,
7131
7603
  onModulesOpenChange: setModulesOpen,
7132
- enabledUnits,
7604
+ enabledUnits: panelBoard,
7133
7605
  manifests,
7134
7606
  workspace: boardWorkspace,
7135
7607
  refreshToken: panelToken,
@@ -8211,7 +8683,7 @@ function messagesOf(units) {
8211
8683
  ...face.messages === void 0 ? {} : { messages: face.messages }
8212
8684
  }));
8213
8685
  }
8214
- 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*/";
8686
+ 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*/";
8215
8687
  function workbenchCss() {
8216
8688
  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}`;
8217
8689
  }