@dsh-workbench/core 0.1.18 → 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 (60) hide show
  1. package/client.js +1003 -537
  2. package/dist/client/client.body.js +1003 -537
  3. package/dist/client/index.js +1004 -538
  4. package/dist/host/index.js +1162 -145
  5. package/dist/types/app/client.d.ts +99 -39
  6. package/dist/types/app/layouts/market/__tests__/add-module-stages.test.d.ts +1 -0
  7. package/dist/types/app/layouts/market/add-module-text.d.ts +16 -1
  8. package/dist/types/app/layouts/market/use-add-module.d.ts +2 -8
  9. package/dist/types/app/layouts/market/use-module-versions.d.ts +2 -1
  10. package/dist/types/app/layouts/rightbar/MarketView.d.ts +5 -1
  11. package/dist/types/app/layouts/rightbar/ModulesPage.d.ts +4 -2
  12. package/dist/types/app/layouts/rightbar/PanelModules.d.ts +2 -2
  13. package/dist/types/app/layouts/rightbar/PanelPluginRows.d.ts +9 -0
  14. package/dist/types/app/layouts/rightbar/PanelRowControls.d.ts +14 -0
  15. package/dist/types/app/layouts/rightbar/__tests__/market-row-icon.test.d.ts +1 -0
  16. package/dist/types/app/layouts/rightbar/__tests__/market-section-icon.test.d.ts +1 -0
  17. package/dist/types/app/layouts/rightbar/__tests__/market-workbench.test.d.ts +1 -0
  18. package/dist/types/app/layouts/rightbar/__tests__/panel-plugin-rows.test.d.ts +1 -0
  19. package/dist/types/app/layouts/rightbar/__tests__/panel-scope-ui.test.d.ts +1 -0
  20. package/dist/types/app/layouts/rightbar/board-selection.d.ts +11 -0
  21. package/dist/types/app/layouts/rightbar/market-act.d.ts +21 -0
  22. package/dist/types/app/layouts/rightbar/market-mock.d.ts +6 -1
  23. package/dist/types/app/layouts/rightbar/market-plugin-rows.d.ts +3 -1
  24. package/dist/types/app/layouts/rightbar/market-row-icon.d.ts +7 -0
  25. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +35 -0
  26. package/dist/types/app/layouts/rightbar/market-rows.d.ts +8 -35
  27. package/dist/types/app/layouts/rightbar/market-section-icon.d.ts +3 -0
  28. package/dist/types/app/layouts/rightbar/market-section.d.ts +18 -0
  29. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +7 -1
  30. package/dist/types/app/layouts/rightbar/market-workbench-row.d.ts +5 -0
  31. package/dist/types/app/layouts/rightbar/panel-mock.d.ts +2 -1
  32. package/dist/types/app/layouts/rightbar/use-panels.d.ts +15 -1
  33. package/dist/types/app/units/registry.d.ts +1 -1
  34. package/dist/types/modules/panels/__tests__/plugin-panel-market-parity.test.d.ts +1 -0
  35. package/dist/types/modules/panels/__tests__/plugin-panel.test.d.ts +1 -0
  36. package/dist/types/modules/panels/__tests__/plugin-tool-units.test.d.ts +1 -0
  37. package/dist/types/modules/panels/__tests__/scope-machine.test.d.ts +1 -0
  38. package/dist/types/modules/panels/__tests__/scope-support.d.ts +51 -0
  39. package/dist/types/modules/panels/model/config.d.ts +19 -0
  40. package/dist/types/modules/panels/model/market-dispatch.d.ts +4 -0
  41. package/dist/types/modules/panels/model/market-registry.d.ts +12 -0
  42. package/dist/types/modules/panels/model/market-registry.test.d.ts +1 -0
  43. package/dist/types/modules/panels/model/market-types.d.ts +1 -0
  44. package/dist/types/modules/panels/model/market.d.ts +3 -2
  45. package/dist/types/modules/panels/model/plugin-panel.d.ts +3 -0
  46. package/dist/types/modules/panels/model/prefs.d.ts +3 -1
  47. package/dist/types/modules/panels/model/service.d.ts +5 -1
  48. package/dist/types/shared/api/bundle-install.d.ts +15 -1
  49. package/dist/types/shared/api/host/__tests__/plugin-catalog.test.d.ts +1 -0
  50. package/dist/types/shared/api/host/__tests__/plugin-login-hint.test.d.ts +1 -0
  51. package/dist/types/shared/api/host/__tests__/plugin-tools.test.d.ts +1 -0
  52. package/dist/types/shared/api/host/bundle-inspect-kind.test.d.ts +1 -0
  53. package/dist/types/shared/api/host/bundle-routes-self.test.d.ts +1 -0
  54. package/dist/types/shared/api/host/installed-module.d.ts +10 -0
  55. package/dist/types/shared/api/host/plugin-catalog.d.ts +60 -0
  56. package/dist/types/shared/api/host/plugin-login-hint.d.ts +2 -0
  57. package/dist/types/shared/api/host/plugin-tools.d.ts +10 -0
  58. package/dist/types/shared/api/host/plugin-units.d.ts +47 -0
  59. package/dist/types/shared/api/host/unit-registry.d.ts +3 -0
  60. package/package.json +2 -2
@@ -1087,6 +1087,50 @@ function IconBrandMark({ size = 24 }) {
1087
1087
  strokeLinecap: "round"
1088
1088
  }));
1089
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
+ }
1090
1134
  function IconModules({ size = 16 }) {
1091
1135
  return h("svg", {
1092
1136
  width: size,
@@ -1209,7 +1253,12 @@ var en = {
1209
1253
  "time.hours": "{n} h ago",
1210
1254
  "time.days": "{n} d ago",
1211
1255
  "panels.title": "Panel modules",
1212
- "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",
1213
1262
  "panels.enabled": "enabled in this project",
1214
1263
  "panels.disabled": "not enabled in this project",
1215
1264
  "panels.choose": "Choose modules",
@@ -1228,6 +1277,7 @@ var en = {
1228
1277
  "panels.browseMarket": "Browse the module market",
1229
1278
  "panels.noneInstalled": "None of these modules has its plugin installed yet",
1230
1279
  "panels.noneInstalledHint": "Once installed they come back here, and you pick which go on the panel.",
1280
+ "panels.rowPlugin": "Plugin",
1231
1281
  "panels.market.installed": "installed",
1232
1282
  "panels.market.outdated": "needs update",
1233
1283
  "panels.market.hasNew": "New version",
@@ -1237,7 +1287,7 @@ var en = {
1237
1287
  "panels.market.sectionInstalled": "Installed modules",
1238
1288
  "panels.market.sectionPending": "Not installed",
1239
1289
  "panels.market.sectionShared": "Shared dependencies",
1240
- "panels.market.sharedUsedBy": "Used by {modules}",
1290
+ "panels.market.sharedUsedBy": "Used by module {modules}",
1241
1291
  "panels.market.listSeparator": ", ",
1242
1292
  "panels.market.sharedMissing": "not installed",
1243
1293
  "panels.market.sharedOutdated": "update available",
@@ -1269,12 +1319,13 @@ var en = {
1269
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.",
1270
1320
  "panels.market.moduleRefusedDetail": "Why it cannot be used: {reason}",
1271
1321
  "panels.market.moduleRestartHint": "installed but not active — restart dsh once to bring it up",
1322
+ "panels.market.workbenchName": "Workbench",
1323
+ "panels.market.workbenchLocal": "This is the copy from your working repository; it does not come from the registry.",
1272
1324
  "panels.market.pluginKeptInUse": "Files kept for now: {names} still uses it.",
1273
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.",
1274
1326
  "panels.market.pluginKeptHeld": "Files kept: this one is yours, and a module letting go will not remove it.",
1275
1327
  "panels.market.pluginKeptUnnamed": "Files kept for now: this one cannot be identified as a plugin, so it is unclear who needs it.",
1276
- "panels.market.pluginAlsoKnownAs": "Its package is {pkg} (updates and uninstall use that)",
1277
- "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).",
1278
1329
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
1279
1330
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
1280
1331
  "panels.market.recheck": "Check for updates",
@@ -1283,7 +1334,7 @@ var en = {
1283
1334
  "panels.market.justNow": "just now",
1284
1335
  "panels.market.minutesAgo": "{n} min ago",
1285
1336
  "panels.market.hoursAgo": "{n} h ago",
1286
- "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.",
1287
1338
  "panels.market.add.specPlaceholder": "e.g. @dsh-workbench/module-hello",
1288
1339
  "panels.market.add.guideToggle": "Install guide and examples",
1289
1340
  "panels.market.add.guideHide": "Hide guide",
@@ -1322,11 +1373,13 @@ var en = {
1322
1373
  "panels.market.add.problemInstalled": "This module is already installed",
1323
1374
  "panels.market.add.problemNotFound": "No such module found",
1324
1375
  "panels.market.add.problemNotPackage": "That path does not exist or is not a valid module package",
1325
- "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.",
1326
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.",
1327
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.",
1328
1379
  "panels.market.add.failureNotModuleOrPlugin": "This package is neither a workbench module nor an opencli plugin, so installing it would do nothing",
1329
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}",
1330
1383
  "panels.market.add.problemNetwork": "Cannot reach the module source; check the network and retry",
1331
1384
  "panels.market.add.problemUnknown": "Cannot fetch module information: {reason}",
1332
1385
  "panels.market.add.failureNetwork": "The network connection failed",
@@ -1537,7 +1590,12 @@ var zh = {
1537
1590
  "time.hours": "{n} 小时前",
1538
1591
  "time.days": "{n} 天前",
1539
1592
  "panels.title": "面板模块",
1540
- "panels.reset": "恢复默认",
1593
+ "panels.market.defaultNote": "这份默认给所有没在这一行改过的工作区;改过的保持自己的选择。",
1594
+ "panels.market.changedBy": "{count} 个工作区已在这一行改过",
1595
+ "panels.market.defaultLabel": "开启后所有工作区默认启用",
1596
+ "panels.followGlobal": "默认",
1597
+ "panels.followGlobalHint": "这一行跟着默认板走(右边那颗开关显示的就是默认的状态)。点一下开关 = 改成这个项目自己定。",
1598
+ "panels.followAll": "全部恢复默认",
1541
1599
  "panels.enabled": "这个项目已启用",
1542
1600
  "panels.disabled": "这个项目未启用",
1543
1601
  "panels.choose": "选择模块",
@@ -1556,6 +1614,7 @@ var zh = {
1556
1614
  "panels.browseMarket": "浏览模块市场",
1557
1615
  "panels.noneInstalled": "这些模块要的插件都还没装",
1558
1616
  "panels.noneInstalledHint": "装好之后它们会回到这里,再由你决定放哪几个上板。",
1617
+ "panels.rowPlugin": "插件",
1559
1618
  "panels.market.installed": "已安装",
1560
1619
  "panels.market.outdated": "要更新",
1561
1620
  "panels.market.hasNew": "有新版本",
@@ -1565,7 +1624,7 @@ var zh = {
1565
1624
  "panels.market.sectionInstalled": "已安装模块",
1566
1625
  "panels.market.sectionPending": "未安装",
1567
1626
  "panels.market.sectionShared": "共用依赖",
1568
- "panels.market.sharedUsedBy": "供 {modules} 使用",
1627
+ "panels.market.sharedUsedBy": "供 {modules} 模块使用",
1569
1628
  "panels.market.listSeparator": "、",
1570
1629
  "panels.market.sharedMissing": "未装",
1571
1630
  "panels.market.sharedOutdated": "有新版",
@@ -1597,12 +1656,13 @@ var zh = {
1597
1656
  "panels.market.moduleRefused": "这个模块是给旧版本的工作台写的,现在用不了。更新它,或者卸载。",
1598
1657
  "panels.market.moduleRefusedDetail": "装不上的原因:{reason}",
1599
1658
  "panels.market.moduleRestartHint": "装好了但还没生效 —— 重启一次 dsh 就会出来",
1659
+ "panels.market.workbenchName": "工作台",
1660
+ "panels.market.workbenchLocal": "这份是本仓正在开发的那一份,不从源上取。",
1600
1661
  "panels.market.pluginKeptInUse": "文件先留着:{names} 还要用它。",
1601
1662
  "panels.market.pluginKeptUnsure": "文件先留着:这台机器上还有模块看不出用了什么,说不准谁在用它。",
1602
1663
  "panels.market.pluginKeptHeld": "文件留着:你自己装的那一份,模块放手不动它。",
1603
1664
  "panels.market.pluginKeptUnnamed": "文件先留着:看不出这是哪个插件,说不准谁在用它。",
1604
- "panels.market.pluginAlsoKnownAs": "包名是 {pkg}(更新与卸载按它来)",
1605
- "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者去上面按包名再装一次。",
1665
+ "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者直接跟 agent 说:用 workbench_modules 的 install-bundle 按包名再装一次。",
1606
1666
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
1607
1667
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
1608
1668
  "panels.market.recheck": "重新检查更新",
@@ -1611,7 +1671,7 @@ var zh = {
1611
1671
  "panels.market.justNow": "刚刚",
1612
1672
  "panels.market.minutesAgo": "{n} 分钟前",
1613
1673
  "panels.market.hoursAgo": "{n} 小时前",
1614
- "panels.market.add.description": "输入模块的包名、Git 仓库地址或本地目录路径。",
1674
+ "panels.market.add.description": "输入模块或 opencli 插件的包名、Git 仓库地址或本地目录路径。",
1615
1675
  "panels.market.add.specPlaceholder": "例如 @dsh-workbench/module-hello",
1616
1676
  "panels.market.add.guideToggle": "模块安装引导和示例",
1617
1677
  "panels.market.add.guideHide": "收起引导",
@@ -1650,11 +1710,13 @@ var zh = {
1650
1710
  "panels.market.add.problemInstalled": "该模块已安装",
1651
1711
  "panels.market.add.problemNotFound": "未找到相关模块",
1652
1712
  "panels.market.add.problemNotPackage": "该路径不存在或不是有效的模块包",
1653
- "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。要是它其实是个 opencli 插件,请改用包名(例如 opencli-plugin-cmdb)或者本地目录 —— 从 git 地址和 tarball 判断不出它是什么。",
1713
+ "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。这个入口按包名认工作台模块和 opencli 插件,两种都能装;但 git 地址和 tarball 判断不出它是什么 —— 要是它其实是这两样之一,请改填包名或本地目录。",
1654
1714
  "panels.market.add.problemNotWorkbenchModule": "这个包跟现在的工作台对不上,装上也用不了。换一个版本,或者找这个模块的作者。",
1655
1715
  "panels.market.add.problemNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上。换一个版本,或者找这个包的作者。",
1656
1716
  "panels.market.add.failureNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上",
1657
1717
  "panels.market.add.installedPlugin": "装上了:opencli 插件 {name}",
1718
+ "panels.market.add.pluginPreview": "这是一份 opencli 插件:装进 opencli 的插件区,装完就能用,不用重启。",
1719
+ "panels.market.add.pluginAlias": "插件名:{name}",
1658
1720
  "panels.market.add.problemNetwork": "无法连接模块源,请检查网络后重试",
1659
1721
  "panels.market.add.problemUnknown": "无法获取模块信息:{reason}",
1660
1722
  "panels.market.add.failureNetwork": "网络连接失败",
@@ -1976,6 +2038,8 @@ var dist_exports = /* @__PURE__ */ __exportAll({
1976
2038
  IconBrandMark: () => IconBrandMark,
1977
2039
  IconConversation: () => IconConversation,
1978
2040
  IconModules: () => IconModules,
2041
+ IconNpm: () => IconNpm,
2042
+ IconOpencli: () => IconOpencli,
1979
2043
  IconPanelScreen: () => IconPanelScreen,
1980
2044
  LOCALES: () => LOCALES,
1981
2045
  LOCALE_NS: () => LOCALE_NS,
@@ -2916,8 +2980,7 @@ function buildMarketMocks(roster) {
2916
2980
  expect: {
2917
2981
  rows: 0,
2918
2982
  plugins: 1,
2919
- pluginActions: ["update-plugin", "uninstall-plugin"],
2920
- pluginNoteKey: "panels.market.pluginAlsoKnownAs"
2983
+ pluginActions: ["update-plugin", "uninstall-plugin"]
2921
2984
  }
2922
2985
  },
2923
2986
  {
@@ -2956,6 +3019,70 @@ function buildMarketMocks(roster) {
2956
3019
  notice: true
2957
3020
  }
2958
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
+ },
2959
3086
  {
2960
3087
  id: "empty",
2961
3088
  label: "市场空态",
@@ -3025,11 +3152,13 @@ function createBoardRegistry() {
3025
3152
  //#endregion
3026
3153
  //#region src/app/units/registry.ts
3027
3154
  function toBoardModule(face, manifest) {
3155
+ const View = face.card;
3156
+ if (View === void 0) return void 0;
3028
3157
  return {
3029
3158
  id: manifest.id,
3030
3159
  titleKey: manifest.card?.titleKey ?? manifest.id,
3031
3160
  order: manifest.card?.order ?? 100,
3032
- View: face.card,
3161
+ View,
3033
3162
  ...face.steps === void 0 ? {} : { steps: face.steps }
3034
3163
  };
3035
3164
  }
@@ -3062,9 +3191,10 @@ function createClientUnitRegistry(options = {}) {
3062
3191
  function attach(entry) {
3063
3192
  const manifest = known.get(entry.unit);
3064
3193
  if (manifest === void 0) return false;
3194
+ const boardModule = toBoardModule(entry.face, manifest);
3065
3195
  entry.mounted = {
3066
3196
  manifest,
3067
- unmount: board.register(toBoardModule(entry.face, manifest))
3197
+ unmount: boardModule === void 0 ? () => {} : board.register(boardModule)
3068
3198
  };
3069
3199
  takeBackRefusal(entry.unit);
3070
3200
  return true;
@@ -3232,9 +3362,46 @@ function hasCard(roster) {
3232
3362
  function fixtureRoster(roster) {
3233
3363
  return hasCard(roster) ? roster : SAMPLE_ROSTER;
3234
3364
  }
3365
+ function boardModuleOf(face) {
3366
+ const module = toBoardModule(face, face.manifest);
3367
+ return module === void 0 ? [] : [module];
3368
+ }
3235
3369
  function fixtureSeed(roster, all, crash = false) {
3236
- const base = hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE, FIXTURE_FACE.manifest)];
3237
- 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
+ };
3238
3405
  }
3239
3406
  //#endregion
3240
3407
  //#region src/app/layouts/rightbar/market-rows.ts
@@ -3283,7 +3450,7 @@ function mergeTitles(known, manifests) {
3283
3450
  }
3284
3451
  return next ?? known;
3285
3452
  }
3286
- function installedRows(modules, manifests, listed, known) {
3453
+ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3287
3454
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
3288
3455
  const rows = [];
3289
3456
  for (const module of modules) {
@@ -3313,12 +3480,15 @@ function installedRows(modules, manifests, listed, known) {
3313
3480
  ...outdated ? { moduleUpdate: {
3314
3481
  installed: module.installed,
3315
3482
  latest
3316
- } } : {}
3483
+ } } : {},
3484
+ defaultShown: defaults.has(module.unit),
3485
+ defaultChanged: changed[module.unit] ?? 0
3317
3486
  });
3318
3487
  }
3319
3488
  return rows;
3320
3489
  }
3321
3490
  function marketActions$1(row) {
3491
+ if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
3322
3492
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
3323
3493
  return [
3324
3494
  ...row.canInstall ? ["install"] : [],
@@ -3379,8 +3549,9 @@ function marketUpdatesOf(modules) {
3379
3549
  };
3380
3550
  return next;
3381
3551
  }
3382
- function marketHintVisible(manifests, capabilities, modules) {
3383
- 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));
3384
3555
  }
3385
3556
  function marketSections(rows) {
3386
3557
  const installed = rows.filter((row) => isOnMachine(row.state));
@@ -3395,7 +3566,7 @@ function marketSections(rows) {
3395
3566
  rows: rest
3396
3567
  }]];
3397
3568
  }
3398
- function marketRows(manifests, capabilities, updates = {}) {
3569
+ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3399
3570
  const catalog = manifests.filter((manifest) => (manifest.env?.plugins ?? []).length > 0 || (manifest.env?.libs ?? []).length > 0);
3400
3571
  const rows = [];
3401
3572
  for (const manifest of catalog) {
@@ -3422,7 +3593,9 @@ function marketRows(manifests, capabilities, updates = {}) {
3422
3593
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
3423
3594
  } },
3424
3595
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
3425
- ...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
3426
3599
  });
3427
3600
  }
3428
3601
  return rows;
@@ -3511,6 +3684,7 @@ function sharedRows(manifests, capabilities) {
3511
3684
  const detail = bucket.purpose === void 0 ? void 0 : `${bucket.label} —— ${bucket.purpose}`;
3512
3685
  rows.push({
3513
3686
  id: `${bucket.kind}:${bucket.name}`,
3687
+ kind: bucket.kind,
3514
3688
  label: bucket.label,
3515
3689
  usedByKeys: bucket.users.map((unit) => byId.get(unit)?.card?.titleKey ?? unit),
3516
3690
  state,
@@ -3591,24 +3765,27 @@ function installedPluginKept(value) {
3591
3765
  names
3592
3766
  };
3593
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
+ }
3594
3773
  function noteOf(plugin) {
3595
3774
  if (plugin.broken === true) return {
3596
3775
  key: "panels.market.pluginBroken",
3597
- params: {}
3776
+ params: {},
3777
+ tone: "alert"
3598
3778
  };
3599
3779
  if (plugin.local === true) return void 0;
3600
- if (plugin.name !== void 0 && plugin.name !== plugin.pkg) return {
3601
- key: "panels.market.pluginAlsoKnownAs",
3602
- params: { pkg: plugin.pkg }
3603
- };
3604
3780
  }
3605
- function installedPluginRows(plugins) {
3781
+ function installedPluginRows(plugins, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3606
3782
  return plugins.map((plugin) => {
3783
+ const id = `plugin:${plugin.pkg}`;
3607
3784
  const name = plugin.name ?? plugin.pkg;
3608
3785
  const outdated = plugin.installed !== void 0 && plugin.latest !== void 0 && plugin.latest !== plugin.installed;
3609
3786
  const note = noteOf(plugin);
3610
3787
  return {
3611
- id: `plugin:${plugin.pkg}`,
3788
+ id,
3612
3789
  titleKey: plugin.pkg,
3613
3790
  label: name,
3614
3791
  plugin: true,
@@ -3618,7 +3795,12 @@ function installedPluginRows(plugins) {
3618
3795
  canUninstall: true,
3619
3796
  ...plugin.local === true ? { local: true } : {},
3620
3797
  ...plugin.broken === true ? { broken: true } : {},
3798
+ ...plugin.broken === true ? {} : {
3799
+ defaultShown: defaults.has(id),
3800
+ defaultChanged: changed[id] ?? 0
3801
+ },
3621
3802
  ...note === void 0 ? {} : { note },
3803
+ ...plugin.installed === void 0 ? {} : { versionLabel: `${plugin.pkg}@${plugin.installed}` },
3622
3804
  pkg: plugin.pkg,
3623
3805
  ...plugin.installed === void 0 ? {} : { version: {
3624
3806
  installed: plugin.installed,
@@ -3627,8 +3809,279 @@ function installedPluginRows(plugins) {
3627
3809
  };
3628
3810
  });
3629
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
+ }
3630
4059
  //#endregion
3631
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
+ }
3632
4085
  var GUIDE_ITEMS = [
3633
4086
  {
3634
4087
  titleKey: "panels.market.add.guideIdTitle",
@@ -3816,128 +4269,60 @@ function changeFailure(change, t) {
3816
4269
  if (change === void 0 || SHIPPED.includes(change.application)) return void 0;
3817
4270
  return failureReason(failureCode(change), change.application, t);
3818
4271
  }
3819
- var MarketPage_module_default = {
3820
- marketList: "_marketList_z6vtq_1",
3821
- marketRow: "_marketRow_z6vtq_10",
3822
- marketIcon: "_marketIcon_z6vtq_20",
3823
- marketMain: "_marketMain_z6vtq_32",
3824
- marketName: "_marketName_z6vtq_39",
3825
- marketDesc: "_marketDesc_z6vtq_48",
3826
- marketUsedBy: "_marketUsedBy_z6vtq_59",
3827
- marketVersion: "_marketVersion_z6vtq_73",
3828
- marketEnd: "_marketEnd_z6vtq_95",
3829
- marketActions: "_marketActions_z6vtq_102",
3830
- marketSection: "_marketSection_z6vtq_108",
3831
- marketSectionHead: "_marketSectionHead_z6vtq_115",
3832
- marketSectionTitle: "_marketSectionTitle_z6vtq_121",
3833
- marketSectionCount: "_marketSectionCount_z6vtq_127",
3834
- marketProgress: "_marketProgress_z6vtq_133",
3835
- marketNote: "_marketNote_z6vtq_143",
3836
- marketFailure: "_marketFailure_z6vtq_150",
3837
- marketEmpty: "_marketEmpty_z6vtq_157",
3838
- marketPage: "_marketPage_z6vtq_162",
3839
- marketPageHead: "_marketPageHead_z6vtq_180",
3840
- marketPageTitle: "_marketPageTitle_z6vtq_188",
3841
- marketPageIntro: "_marketPageIntro_z6vtq_193",
3842
- marketPageTools: "_marketPageTools_z6vtq_199",
3843
- marketIconButton: "_marketIconButton_z6vtq_208",
3844
- marketIconWrap: "_marketIconWrap_z6vtq_233",
3845
- marketIconButtonSpinning: "_marketIconButtonSpinning_z6vtq_237",
3846
- "wb-spin": "_wb-spin_z6vtq_1",
3847
- marketAddButton: "_marketAddButton_z6vtq_241",
3848
- marketChecking: "_marketChecking_z6vtq_258",
3849
- marketEmptyTitle: "_marketEmptyTitle_z6vtq_266"
3850
- };
3851
4272
  //#endregion
3852
- //#region src/app/layouts/rightbar/MarketStates.tsx
3853
- function MarketChecking({ t }) {
3854
- 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, {
3855
- state: "ongoing",
3856
- size: 14
3857
- }), t("panels.market.checking")));
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
+ };
3858
4316
  }
3859
- function MarketEmpty({ t }) {
3860
- return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3861
- }
3862
- //#endregion
3863
- //#region src/app/layouts/rightbar/market-view-text.ts
3864
- var PROGRESS_KEY = {
3865
- install: "panels.market.installing",
3866
- update: "panels.market.updating",
3867
- "update-bundle": "panels.market.updating",
3868
- "remove-bundle": "panels.market.uninstalling",
3869
- uninstall: "panels.market.uninstalling",
3870
- "update-dependency": "panels.market.updating",
3871
- "update-plugin": "panels.market.updating",
3872
- "uninstall-plugin": "panels.market.uninstalling"
3873
- };
3874
- var ACTION_LABEL_KEY = {
3875
- install: "panels.market.install",
3876
- update: "panels.market.update",
3877
- "update-bundle": "panels.market.update",
3878
- "remove-bundle": "panels.market.uninstall",
3879
- uninstall: "panels.market.uninstall",
3880
- "update-dependency": "panels.market.update",
3881
- "update-plugin": "panels.market.update",
3882
- "uninstall-plugin": "panels.market.uninstall"
3883
- };
3884
- //#endregion
3885
- //#region src/app/layouts/rightbar/SharedSection.tsx
3886
- function SharedLine({ t, row, pending, failure, onAct }) {
3887
- const running = pending !== null && pending.id === row.id ? pending : null;
3888
- const locked = pending !== null;
3889
- const actions = sharedActions(row);
3890
- const stateText = t(SHARED_STATE_KEY[row.state]);
3891
- const version = row.version;
3892
- 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", {
3893
- from: version.installed,
3894
- to: version.latest
3895
- }) : version.installed ?? version.latest ?? ""));
3896
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3897
- className: MarketPage_module_default.marketIcon,
3898
- "aria-hidden": "true"
3899
- }, /* @__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", {
3900
- className: MarketPage_module_default.marketDesc,
3901
- role: "img",
3902
- "aria-label": stateText
3903
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3904
- state: "ongoing",
3905
- size: 14
3906
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3907
- state: SHARED_DOT[row.state],
3908
- size: 9
3909
- }), 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, {
3910
- state: "ongoing",
3911
- size: 14
3912
- }), 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, {
3913
- key: action,
3914
- type: "button",
3915
- size: "sm",
3916
- variant: "outline",
3917
- disabled: locked,
3918
- onClick: () => onAct(action)
3919
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3920
- }
3921
- function SharedSection({ t, rows, pending, failureOf, act }) {
3922
- if (rows.length === 0) return null;
3923
- 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, {
3924
- key: row.id,
3925
- t,
3926
- row,
3927
- pending,
3928
- failure: failureOf(row.id),
3929
- onAct: (action) => void act(row.id, action)
3930
- }))));
3931
- }
3932
- var PanelFoot_module_default = {
3933
- foot: "_foot_1us83_1",
3934
- footText: "_footText_1us83_12",
3935
- footTextMd: "_footTextMd_1us83_17"
3936
- };
3937
- //#endregion
3938
- //#region src/shared/components/PanelFoot.tsx
3939
- function PanelFoot({ text, size = "sm", children }) {
3940
- 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);
4317
+ var PanelFoot_module_default = {
4318
+ foot: "_foot_1us83_1",
4319
+ footText: "_footText_1us83_12",
4320
+ footTextMd: "_footTextMd_1us83_17"
4321
+ };
4322
+ //#endregion
4323
+ //#region src/shared/components/PanelFoot.tsx
4324
+ function PanelFoot({ text, size = "sm", children }) {
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);
3941
4326
  }
3942
4327
  //#endregion
3943
4328
  //#region src/app/layouts/rightbar/MarketView.tsx
@@ -3947,48 +4332,6 @@ var CONFIRM_UNINSTALL = [
3947
4332
  "uninstall-plugin"
3948
4333
  ];
3949
4334
  var CONFIRM_REMOVE = ["remove-bundle"];
3950
- function MarketLine({ t, row, pending, failure, onAct }) {
3951
- const running = pending !== null && pending.id === row.id ? pending : null;
3952
- const locked = pending !== null;
3953
- const actions = marketActions$1(row);
3954
- const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3955
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3956
- className: MarketPage_module_default.marketIcon,
3957
- "aria-hidden": "true"
3958
- }, /* @__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", {
3959
- from: row.version.installed,
3960
- to: row.version.latest
3961
- }) : row.version.installed ?? row.version.latest ?? "")), /* @__PURE__ */ h("span", {
3962
- className: MarketPage_module_default.marketDesc,
3963
- role: "img",
3964
- "aria-label": stateText
3965
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3966
- state: "ongoing",
3967
- size: 14
3968
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3969
- state: MARKET_DOT[row.state],
3970
- size: 9
3971
- }), 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, {
3972
- state: "ongoing",
3973
- size: 14
3974
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
3975
- const danger = action === "uninstall" || action === "remove-bundle";
3976
- return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3977
- key: action,
3978
- type: "button",
3979
- size: "sm",
3980
- variant: action === "install" ? "primary" : "outline",
3981
- className: danger ? "wb-dangerAction" : void 0,
3982
- icon: danger ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 13 }) : void 0,
3983
- "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
3984
- disabled: locked,
3985
- onClick: () => onAct(action)
3986
- }, t(ACTION_LABEL_KEY[action]));
3987
- }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
3988
- className: MarketPage_module_default.marketNote,
3989
- title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
3990
- }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3991
- }
3992
4335
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
3993
4336
  const [acknowledged, setAcknowledged] = useState(false);
3994
4337
  return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -4005,24 +4348,33 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
4005
4348
  onConfirm
4006
4349
  });
4007
4350
  }
4008
- function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmActions, onConfirming }) {
4009
- if (rows.length === 0) return null;
4010
- 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, {
4011
- 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, {
4012
4354
  t,
4013
- row,
4355
+ rows: self === void 0 ? [] : [self],
4356
+ onDefault: setDefault,
4357
+ boardBusy,
4014
4358
  pending,
4015
- failure: failureOf(row.id),
4016
- onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action)
4017
- }))));
4018
- }
4019
- function MarketBody({ t, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming }) {
4020
- const failureOf = (id) => failed?.id === id ? failed.message : null;
4021
- 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, {
4022
4371
  key: section.id,
4023
4372
  t,
4024
4373
  titleKey: section.titleKey,
4374
+ icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
4025
4375
  rows: section.rows,
4376
+ onDefault: setDefault,
4377
+ boardBusy,
4026
4378
  pending,
4027
4379
  failureOf,
4028
4380
  act,
@@ -4031,7 +4383,10 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4031
4383
  })), /* @__PURE__ */ h(MarketSection, {
4032
4384
  t,
4033
4385
  titleKey: "panels.market.sectionPlugins",
4386
+ icon: marketSectionIcon("plugins"),
4034
4387
  rows: pluginList,
4388
+ onDefault: setDefault,
4389
+ boardBusy,
4035
4390
  pending,
4036
4391
  failureOf,
4037
4392
  act,
@@ -4040,7 +4395,10 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4040
4395
  }), /* @__PURE__ */ h(MarketSection, {
4041
4396
  t,
4042
4397
  titleKey: installedList.length > 0 && installedList.every((row) => row.local === true) ? "panels.market.sectionLocal" : "panels.market.sectionUnlisted",
4398
+ icon: marketSectionIcon("local"),
4043
4399
  rows: installedList,
4400
+ onDefault: setDefault,
4401
+ boardBusy,
4044
4402
  pending,
4045
4403
  failureOf,
4046
4404
  act,
@@ -4057,7 +4415,7 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4057
4415
  act
4058
4416
  }));
4059
4417
  }
4060
- 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 = {} }) {
4061
4419
  const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
4062
4420
  useEffect(() => {
4063
4421
  if (mock === void 0) setTitles((known) => mergeTitles(known, manifests));
@@ -4065,87 +4423,72 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4065
4423
  const catalog = mock?.manifests ?? manifests;
4066
4424
  const effective = mock === void 0 ? capabilities : mock.capabilities;
4067
4425
  const source = liveManifests(catalog, effective, mock === void 0 && installed !== void 0 ? new Set(installed.map((item) => item.unit)) : null);
4068
- 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);
4069
4428
  const shared = sharedRows(source, effective);
4070
4429
  const [pending, setPending] = useState(mock?.pending ?? null);
4071
4430
  const provision = useHostWrite({
4072
4431
  channel: "provision",
4073
4432
  networkText: t("panels.failed")
4074
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
+ };
4075
4451
  const [confirming, setConfirming] = useState(mock?.confirming ?? null);
4076
4452
  const [failed, setFailed] = useState(mock?.failure ?? null);
4077
4453
  const [notice, setNotice] = useState(mock?.notice ?? null);
4078
4454
  const removing = pending !== null && pending.action === "remove-bundle" && failed?.id !== pending.id ? pending.id : null;
4079
- 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);
4080
- const pendingRow = removing === null || pending === null || rows.some((row) => row.id === removing) ? void 0 : {
4081
- id: removing,
4082
- titleKey: pending.titleKey ?? titles.get(removing) ?? removing,
4083
- state: "installed",
4084
- canInstall: false,
4085
- canUpdate: false,
4086
- canUninstall: true,
4087
- ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
4088
- ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
4089
- };
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
+ });
4090
4462
  const shown = pendingRow === void 0 ? rows : [...rows, pendingRow];
4091
- 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);
4092
4465
  const rowById = new Map([
4093
4466
  ...shown,
4467
+ ...self === void 0 ? [] : [self],
4094
4468
  ...installedList,
4095
4469
  ...pluginList
4096
4470
  ].map((row) => [row.id, row]));
4097
4471
  const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
4098
- const act = async (id, action) => {
4099
- if (mock !== void 0) return;
4100
- const row = rowById.get(id);
4101
- setPending({
4102
- id,
4103
- action,
4104
- ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4105
- ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4106
- ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4107
- });
4108
- setConfirming(null);
4109
- setFailed(null);
4110
- if (action !== "uninstall-plugin") setNotice(null);
4111
- const dependency = action === "update-dependency";
4112
- const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin";
4113
- const outcome = await provision.send(dependency ? {
4114
- action,
4115
- id
4116
- } : byName ? {
4117
- action,
4118
- name: row?.pkg ?? ""
4119
- } : {
4120
- action,
4121
- unit: id
4122
- });
4123
- setPending(null);
4124
- if (!outcome.ok) {
4125
- onChanged();
4126
- setFailed({
4127
- id,
4128
- message: t("panels.market.failed", { reason: outcome.message })
4129
- });
4130
- return;
4131
- }
4132
- if (action === "uninstall-plugin") {
4133
- const kept = installedPluginKept(outcome.value);
4134
- setNotice(kept === void 0 ? null : t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) }));
4135
- }
4136
- const reason = changeFailure(changeOf(outcome.value), t);
4137
- onChanged();
4138
- if (reason !== void 0) setFailed({
4139
- id,
4140
- message: t("panels.market.failed", { reason })
4141
- });
4142
- };
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
+ });
4143
4485
  const settled = marketSettled(freshness, installedRead);
4144
- const nothing = shown.length === 0 && installedList.length === 0 && pluginList.length === 0;
4486
+ const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
4145
4487
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketChecking, { t });
4146
4488
  if (nothing) return /* @__PURE__ */ h(MarketEmpty, { t });
4147
4489
  return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(MarketBody, {
4148
4490
  t,
4491
+ self,
4149
4492
  shown,
4150
4493
  pluginList,
4151
4494
  installedList,
@@ -4154,7 +4497,9 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4154
4497
  failed,
4155
4498
  notice,
4156
4499
  act,
4157
- onConfirming: setConfirming
4500
+ onConfirming: setConfirming,
4501
+ setDefault,
4502
+ boardBusy
4158
4503
  }), /* @__PURE__ */ h(ConfirmUninstall, {
4159
4504
  key: confirming ?? "",
4160
4505
  t,
@@ -4170,6 +4515,182 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4170
4515
  }));
4171
4516
  }
4172
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
4173
4694
  //#region src/shared/api/bundle-install.ts
4174
4695
  var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
4175
4696
  var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
@@ -4199,10 +4720,11 @@ function readInstalledPlugins(force = false) {
4199
4720
  var state = {
4200
4721
  modules: null,
4201
4722
  plugins: null,
4723
+ workbench: null,
4202
4724
  read: false,
4203
4725
  checkedAt: null
4204
4726
  };
4205
- var listeners$1 = /* @__PURE__ */ new Set();
4727
+ var listeners = /* @__PURE__ */ new Set();
4206
4728
  var inFlight = null;
4207
4729
  var readSeq = 0;
4208
4730
  var newestForceSeq = -1;
@@ -4210,14 +4732,14 @@ function moduleVersionsValue() {
4210
4732
  return state;
4211
4733
  }
4212
4734
  function subscribeModuleVersions(listener) {
4213
- listeners$1.add(listener);
4735
+ listeners.add(listener);
4214
4736
  return () => {
4215
- listeners$1.delete(listener);
4737
+ listeners.delete(listener);
4216
4738
  };
4217
4739
  }
4218
4740
  function publish(next) {
4219
4741
  state = next;
4220
- for (const listener of [...listeners$1]) listener();
4742
+ for (const listener of [...listeners]) listener();
4221
4743
  }
4222
4744
  function runModuleVersionsRead(force = false) {
4223
4745
  if (inFlight !== null && inFlight.force === force) return inFlight.promise;
@@ -4230,6 +4752,7 @@ function runModuleVersionsRead(force = false) {
4230
4752
  publish({
4231
4753
  modules: versions?.ok === true ? versions.modules : state.modules,
4232
4754
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
4755
+ workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
4233
4756
  read: true,
4234
4757
  checkedAt: Date.now()
4235
4758
  });
@@ -4262,6 +4785,7 @@ function useModuleVersions() {
4262
4785
  return {
4263
4786
  modules: value.modules,
4264
4787
  plugins: value.plugins,
4788
+ workbench: value.workbench,
4265
4789
  read: value.read,
4266
4790
  checkedAt: value.checkedAt,
4267
4791
  reload
@@ -4486,7 +5010,9 @@ function AddModulePreview({ t, state }) {
4486
5010
  const preview = state.preview;
4487
5011
  if (preview === null) return null;
4488
5012
  const source = preview.registry === "" ? t("panels.market.add.registryDefault") : preview.registry;
4489
- 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);
4490
5016
  }
4491
5017
  function AddModuleResult({ t, state }) {
4492
5018
  const outcome = state.outcome;
@@ -4494,26 +5020,27 @@ function AddModuleResult({ t, state }) {
4494
5020
  const reason = failureReason(failureCode(outcome.change), outcome.change.application, t);
4495
5021
  const supply = supplyKey(outcome.supply.state);
4496
5022
  const builds = state.builds;
4497
- const failed = outcome.change.application === "failed";
4498
- const restart = outcome.change.application === "restart-required";
4499
- const cancelled = outcome.change.application === "cancelled";
4500
- const notModule = outcome.supply.state === "not-a-module";
4501
5023
  const plugin = outcome.plugin;
5024
+ const kind = resultKindOf({
5025
+ change: outcome.change,
5026
+ supplyState: outcome.supply.state,
5027
+ plugin: plugin !== void 0
5028
+ });
4502
5029
  const name = outcome.module.kind === "module" ? outcome.module.unit : outcome.module.pkg;
4503
5030
  return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.hero }, /* @__PURE__ */ h("span", {
4504
5031
  className: AddModule_module_default.heroIcon,
4505
- "data-state": failed ? "error" : cancelled ? "idle" : "done",
5032
+ "data-state": kind === "failed" ? "error" : kind === "cancelled" ? "idle" : "done",
4506
5033
  "aria-hidden": "true"
4507
- }, 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, {
4508
5035
  state: "idle",
4509
5036
  size: 28
4510
5037
  }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconCheckCircleFillRegular, { size: 28 })), /* @__PURE__ */ h("h2", {
4511
5038
  className: AddModule_module_default.wizardTitle,
4512
- role: failed ? "alert" : "status"
4513
- }, 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", {
4514
5041
  className: AddModule_module_default.resultWarn,
4515
5042
  role: "alert"
4516
- }, 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)));
4517
5044
  }
4518
5045
  //#endregion
4519
5046
  //#region src/app/layouts/market/add-module-mock.ts
@@ -4590,6 +5117,7 @@ var ADD_MODULE_MOCKS = [
4590
5117
  phase: "preview",
4591
5118
  spec: "@dsh-workbench/module-hello",
4592
5119
  preview: {
5120
+ kind: "module",
4593
5121
  name: "@dsh-workbench/module-hello",
4594
5122
  version: "0.1.2",
4595
5123
  description: "最小样本模块:一枚「你好」卡片",
@@ -4602,12 +5130,27 @@ var ADD_MODULE_MOCKS = [
4602
5130
  phase: "preview",
4603
5131
  spec: "@dsh-workbench/module-hello",
4604
5132
  preview: {
5133
+ kind: "module",
4605
5134
  name: "@dsh-workbench/module-hello",
4606
5135
  version: "",
4607
5136
  description: "",
4608
5137
  registry: ""
4609
5138
  }
4610
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
+ },
4611
5154
  {
4612
5155
  id: "installing",
4613
5156
  label: "正在安装(可取消)",
@@ -4897,12 +5440,7 @@ function useAddModule(options) {
4897
5440
  setPhase("idle");
4898
5441
  return;
4899
5442
  }
4900
- setPreview({
4901
- name: inspection.name ?? wanted,
4902
- version: inspection.version ?? "",
4903
- description: inspection.description ?? "",
4904
- registry: inspection.registry ?? ""
4905
- });
5443
+ setPreview(previewOf(inspection, wanted));
4906
5444
  setPhase("preview");
4907
5445
  });
4908
5446
  }, [spec, registry]);
@@ -5124,8 +5662,8 @@ function makeMarketEntryIcon(units) {
5124
5662
  return function MarketEntryIcon({ size = 16 }) {
5125
5663
  const manifests = useLiveManifests(units);
5126
5664
  const { capabilities } = useCapabilityMap(0);
5127
- const { modules } = useModuleVersions();
5128
- const hasUpdates = marketHintVisible(manifests, capabilities, modules);
5665
+ const { modules, workbench } = useModuleVersions();
5666
+ const hasUpdates = marketHintVisible(manifests, capabilities, modules, workbench);
5129
5667
  useEffect(() => {
5130
5668
  publishPanelHint(MARKET_PANEL_ID, hasUpdates ? { labelKey: "panels.market.hasNew" } : null);
5131
5669
  return () => publishPanelHint(MARKET_PANEL_ID, null);
@@ -5136,8 +5674,10 @@ function makeMarketEntryIcon(units) {
5136
5674
  function MarketPanel({ t, units }) {
5137
5675
  const manifests = useLiveManifests(units);
5138
5676
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
5139
- const { modules, plugins, read: installedRead, reload: reloadVersions } = useModuleVersions();
5677
+ const { modules, plugins, workbench, read: installedRead, reload: reloadVersions } = useModuleVersions();
5678
+ const machineBoard = useEnabledUnits(0, null);
5140
5679
  const [adding, setAdding] = useState(false);
5680
+ const openAddModule = useCallback(() => setAdding(true), []);
5141
5681
  const updates = useMemo(() => marketUpdatesOf(modules), [modules]);
5142
5682
  const installed = modules === null ? void 0 : withClientRefusals(modules, units.refusals());
5143
5683
  const reload = useCallback(() => {
@@ -5217,7 +5757,7 @@ function MarketPanel({ t, units }) {
5217
5757
  className: MarketPage_module_default.marketAddButton,
5218
5758
  icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
5219
5759
  disabled: busy,
5220
- onClick: () => setAdding(true)
5760
+ onClick: openAddModule
5221
5761
  }, t("panels.market.add.open")))), fixturePick.enabled ? /* @__PURE__ */ h(MockStrip, {
5222
5762
  mocks: marketMocks,
5223
5763
  index: fixturePick.index,
@@ -5232,9 +5772,12 @@ function MarketPanel({ t, units }) {
5232
5772
  updates,
5233
5773
  installed,
5234
5774
  installedRead: shownRead,
5775
+ workbench,
5235
5776
  plugins,
5236
5777
  settling: mock === void 0 ? settling : void 0,
5237
- mock
5778
+ mock,
5779
+ defaults: machineBoard?.defaults ?? [],
5780
+ changed: machineBoard?.changed ?? {}
5238
5781
  }), /* @__PURE__ */ h(AddModuleDialog, {
5239
5782
  t,
5240
5783
  open: adding,
@@ -5259,25 +5802,6 @@ function registerMarketPanel(ctx, units) {
5259
5802
  }, MarketPanel));
5260
5803
  }
5261
5804
  //#endregion
5262
- //#region src/app/layouts/project-selection.ts
5263
- var listeners = /* @__PURE__ */ new Set();
5264
- function selectedProjectId() {
5265
- const stored = readText(STORAGE_KEY_PROJECT);
5266
- return stored === "" ? null : stored;
5267
- }
5268
- function selectProject(workspaceId) {
5269
- writeText(STORAGE_KEY_PROJECT, workspaceId);
5270
- for (const listener of [...listeners]) try {
5271
- listener();
5272
- } catch {}
5273
- }
5274
- function subscribeProject(listener) {
5275
- listeners.add(listener);
5276
- return () => {
5277
- listeners.delete(listener);
5278
- };
5279
- }
5280
- //#endregion
5281
5805
  //#region src/shared/api/diy.ts
5282
5806
  var DIY_PRESET_ID = "workbench-diy";
5283
5807
  var WORKSHOP_TITLE = "工作台DIY";
@@ -6215,20 +6739,26 @@ function BoardMockStrip({ fixtures, show }) {
6215
6739
  });
6216
6740
  }
6217
6741
  var ModulesPage_module_default = {
6218
- trigger: "_trigger_1weg4_1",
6219
- pop: "_pop_1weg4_7",
6220
- head: "_head_1weg4_21",
6221
- title: "_title_1weg4_29",
6222
- reset: "_reset_1weg4_37",
6223
- list: "_list_1weg4_59",
6224
- row: "_row_1weg4_68",
6225
- rowOver: "_rowOver_1weg4_83",
6226
- ghost: "_ghost_1weg4_93",
6227
- grip: "_grip_1weg4_108",
6228
- label: "_label_1weg4_116",
6229
- name: "_name_1weg4_123",
6230
- error: "_error_1weg4_134",
6231
- 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"
6232
6762
  };
6233
6763
  //#endregion
6234
6764
  //#region src/app/layouts/rightbar/panel-mock.ts
@@ -6241,6 +6771,23 @@ function row$1(id, titleKey, shown) {
6241
6771
  hasCard: true
6242
6772
  };
6243
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
+ };
6244
6791
  function probe(unit, status) {
6245
6792
  return { [unit]: {
6246
6793
  unit,
@@ -6258,7 +6805,7 @@ function buildPanelMocks(roster) {
6258
6805
  units: [],
6259
6806
  capabilities: {},
6260
6807
  expect: { rows: 0 }
6261
- }];
6808
+ }, PLUGIN_MOCK];
6262
6809
  const titleKey = found.card?.titleKey ?? found.id;
6263
6810
  const id = found.id;
6264
6811
  const on = row$1(id, titleKey, true);
@@ -6404,7 +6951,8 @@ function buildPanelMocks(roster) {
6404
6951
  rows: 3,
6405
6952
  on: true
6406
6953
  }
6407
- }
6954
+ },
6955
+ PLUGIN_MOCK
6408
6956
  ];
6409
6957
  }
6410
6958
  //#endregion
@@ -6424,6 +6972,29 @@ function panelBadgeKey(capability) {
6424
6972
  if (capability.status === "missing-commands") return "panels.dep.missingCommands";
6425
6973
  return "panels.dep.unchecked";
6426
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
+ }
6427
6998
  function selectBoardModules(units, byId, capabilities) {
6428
6999
  if (units === null) return [];
6429
7000
  return units.filter((unit) => unit.shown && available(capabilities?.[unit.id])).map((unit) => byId(unit.id)).filter((module) => module !== void 0);
@@ -6437,13 +7008,56 @@ function aggregateSummaries(summaries) {
6437
7008
  };
6438
7009
  }
6439
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
6440
7052
  //#region src/app/layouts/rightbar/ModulesPage.tsx
6441
7053
  var BLANK_DRAG_IMAGE = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
6442
- 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 }) {
6443
7055
  const [drag, setDrag] = useState(mock?.drag ?? null);
6444
7056
  const [busy, setBusy] = useState(mock?.busy ?? false);
6445
7057
  const [failed, setFailed] = useState(mock?.failed ?? false);
6446
- 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);
6447
7061
  const empty = !loading && rows.length === 0;
6448
7062
  const prefWrite = useHostWrite({
6449
7063
  channel: "prefs",
@@ -6461,9 +7075,10 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6461
7075
  setBusy(false);
6462
7076
  if (!outcome.ok) setFailed(true);
6463
7077
  };
7078
+ const writeRow = (body) => void write(body);
6464
7079
  const drop = () => {
6465
7080
  if (drag === null) return;
6466
- const moved = rows[drag.from];
7081
+ const moved = modules[drag.from];
6467
7082
  setDrag(null);
6468
7083
  if (moved === void 0 || drag.from === drag.over) return;
6469
7084
  write({
@@ -6472,14 +7087,14 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6472
7087
  index: drag.over
6473
7088
  });
6474
7089
  };
6475
- const dragging = drag === null ? void 0 : rows[drag.from];
7090
+ const dragging = drag === null ? void 0 : modules[drag.from];
6476
7091
  return /* @__PURE__ */ h(Fragment, null, drag?.at === void 0 || dragging === void 0 ? null : /* @__PURE__ */ h("div", {
6477
7092
  className: ModulesPage_module_default.ghost,
6478
7093
  style: {
6479
7094
  left: `${drag.at.x + 12}px`,
6480
7095
  top: `${drag.at.y - 12}px`
6481
7096
  }
6482
- }, t(dragging.titleKey)), empty ? /* @__PURE__ */ h(CenteredState, {
7097
+ }, t(dragging.titleKey ?? dragging.id)), empty ? /* @__PURE__ */ h(CenteredState, {
6483
7098
  compact: true,
6484
7099
  icon: null,
6485
7100
  title: t("panels.noneInstalled"),
@@ -6490,60 +7105,59 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6490
7105
  variant: "outline",
6491
7106
  onClick: onOpenMarket
6492
7107
  }, t("panels.browseMarket"))
6493
- }) : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, rows.map((unit, index) => {
6494
- const badge = panelBadgeKey(capabilities?.[unit.id]);
6495
- const dep = badge === void 0 ? void 0 : t(badge);
6496
- return /* @__PURE__ */ h("li", {
6497
- className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
6498
- key: unit.id,
6499
- draggable: true,
6500
- onDragStart: (event) => {
6501
- const blank = new Image();
6502
- blank.src = BLANK_DRAG_IMAGE;
6503
- event.dataTransfer.setDragImage(blank, 0, 0);
6504
- setDrag({
6505
- from: index,
6506
- over: index,
6507
- at: {
6508
- x: event.clientX,
6509
- y: event.clientY
6510
- }
6511
- });
6512
- },
6513
- onDragOver: (event) => {
6514
- event.preventDefault();
6515
- if (drag !== null) setDrag({
6516
- from: drag.from,
6517
- over: index,
6518
- at: {
6519
- x: event.clientX,
6520
- y: event.clientY
6521
- }
6522
- });
6523
- },
6524
- onDragEnd: drop,
6525
- onDrop: (event) => {
6526
- event.preventDefault();
6527
- drop();
6528
- }
6529
- }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
6530
- className: ModulesPage_module_default.grip,
6531
- "aria-hidden": "true"
6532
- }, "⠿")), /* @__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, {
6533
- checked: unit.shown,
6534
- label: `${t(unit.titleKey)} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
6535
- disabled: busy,
6536
- onChange: (next) => void write({
6537
- action: next ? "show" : "hide",
6538
- id: unit.id
6539
- })
6540
- }));
6541
- })), /* @__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", {
6542
7156
  type: "button",
6543
7157
  className: ModulesPage_module_default.reset,
6544
7158
  disabled: busy,
6545
7159
  onClick: () => void write({ action: "reset" })
6546
- }, 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);
6547
7161
  }
6548
7162
  //#endregion
6549
7163
  //#region src/app/layouts/rightbar/PanelModules.tsx
@@ -6575,7 +7189,7 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
6575
7189
  const panelMock = fixturePick.enabled ? fixturePick.current : void 0;
6576
7190
  const mockNonce = fixturePick.nonce;
6577
7191
  (0, _deepseek_ai_dsh_client_ui_primitives.useDismissOnOutsidePointer)(root, open, onOpenChange);
6578
- const units = enabledUnits ?? [];
7192
+ const units = enabledUnits?.units ?? [];
6579
7193
  return /* @__PURE__ */ h("div", {
6580
7194
  className: ModulesPage_module_default.trigger,
6581
7195
  ref: root
@@ -6600,8 +7214,10 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
6600
7214
  key: `${panelMock?.id ?? "real-modules"}-${mockNonce}`,
6601
7215
  t,
6602
7216
  units: panelMock?.units ?? units,
7217
+ plugins: panelMock?.plugins ?? enabledUnits?.plugins ?? [],
6603
7218
  capabilities: panelMock === void 0 ? fixturePick.enabled ? null : capabilities : panelMock.capabilities,
6604
7219
  loading: enabledUnits === null,
7220
+ own: enabledUnits?.own === true,
6605
7221
  onOpenMarket,
6606
7222
  mocked: fixturePick.enabled,
6607
7223
  workspace,
@@ -6778,114 +7394,6 @@ function rightbarPresentation(input) {
6778
7394
  };
6779
7395
  }
6780
7396
  //#endregion
6781
- //#region src/modules/sessions/model/session-node.ts
6782
- function visiblePendingKind(kind) {
6783
- switch (kind) {
6784
- case "approval":
6785
- case "plan-review":
6786
- case "question": return kind;
6787
- default: return;
6788
- }
6789
- }
6790
- function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
6791
- const status = statusById.get(summary.id);
6792
- const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
6793
- let runningSubagentCount = 0;
6794
- for (const child of catalog ?? []) {
6795
- const childStatus = statusById.get(child.id);
6796
- const childRow = list.byId[child.id];
6797
- if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
6798
- }
6799
- return {
6800
- id: summary.id,
6801
- title: summary.blank ? "" : summary.displayTitle,
6802
- blank: summary.blank,
6803
- running: status?.running ?? summary.running,
6804
- runningSubagentCount,
6805
- completed: status?.completionUnread === true,
6806
- pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
6807
- updatedAt: summary.updatedAt,
6808
- pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
6809
- };
6810
- }
6811
- function sessionStatuses(node, t) {
6812
- const subagents = node.runningSubagentCount > 0 ? {
6813
- state: "ongoing",
6814
- label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
6815
- } : void 0;
6816
- let pending;
6817
- switch (node.pendingInteraction) {
6818
- case "approval":
6819
- pending = {
6820
- state: "warning",
6821
- label: t("status.waitingApproval")
6822
- };
6823
- break;
6824
- case "plan-review":
6825
- pending = {
6826
- state: "warning",
6827
- label: t("status.planReview")
6828
- };
6829
- break;
6830
- case "question":
6831
- pending = {
6832
- state: "warning",
6833
- label: t("status.waitingAnswer")
6834
- };
6835
- break;
6836
- default: pending = void 0;
6837
- }
6838
- if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
6839
- if (node.running) {
6840
- const primary = {
6841
- state: "ongoing",
6842
- label: t("status.running")
6843
- };
6844
- return subagents === void 0 ? [primary] : [primary, subagents];
6845
- }
6846
- if (subagents !== void 0) return [subagents];
6847
- if (node.completed) return [{
6848
- state: "done",
6849
- label: t("status.completed")
6850
- }];
6851
- return [{
6852
- state: "idle",
6853
- label: t("status.idle")
6854
- }];
6855
- }
6856
- function currentSessionId(list, panelActive) {
6857
- if (panelActive) return void 0;
6858
- return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
6859
- }
6860
- function orderSessionRows(rows, pinnedIds, archivedIds) {
6861
- const placeholders = [];
6862
- const leading = [];
6863
- const rest = [];
6864
- for (const row of rows) if (row.blank) placeholders.push(row);
6865
- else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
6866
- else rest.push(row);
6867
- return [
6868
- ...placeholders,
6869
- ...leading,
6870
- ...rest
6871
- ];
6872
- }
6873
- function workspaceOfSession(workspaces, sessionId) {
6874
- if (sessionId === void 0) return null;
6875
- return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
6876
- }
6877
- function sessionRows(workspaceSessionIds, list, archivedIds, current) {
6878
- const rows = [];
6879
- for (const id of workspaceSessionIds) {
6880
- if (archivedIds.has(id)) continue;
6881
- const row = list.byId[id];
6882
- if (row === void 0 || row.origin === "subagent") continue;
6883
- if (row.blank && row.id !== current) continue;
6884
- rows.push(row);
6885
- }
6886
- return rows;
6887
- }
6888
- //#endregion
6889
7397
  //#region src/app/layouts/rightbar/suite-world.ts
6890
7398
  function createSuiteWorld(input) {
6891
7399
  const sessionId = currentSessionId(input.sessions, false);
@@ -6901,49 +7409,6 @@ function createSuiteWorld(input) {
6901
7409
  }
6902
7410
  };
6903
7411
  }
6904
- //#endregion
6905
- //#region src/app/layouts/rightbar/use-panels.ts
6906
- function shouldDropPanels(workspace, previous) {
6907
- return workspace !== previous;
6908
- }
6909
- function useEnabledUnits(refreshToken, workspace) {
6910
- const [enabled, setEnabled] = useState(null);
6911
- const lastWorkspace = useRef(workspace);
6912
- useEffect(() => {
6913
- let cancelled = false;
6914
- if (shouldDropPanels(workspace, lastWorkspace.current)) {
6915
- lastWorkspace.current = workspace;
6916
- setEnabled(null);
6917
- }
6918
- const read = async () => {
6919
- const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
6920
- if (cancelled) return;
6921
- if (response?.ok === true && Array.isArray(response.units)) setEnabled(response.units);
6922
- };
6923
- read();
6924
- return () => {
6925
- cancelled = true;
6926
- };
6927
- }, [
6928
- refreshToken,
6929
- useFactRevision("panels"),
6930
- workspace
6931
- ]);
6932
- return enabled;
6933
- }
6934
- function useSelectedProjectId() {
6935
- const [id, setId] = useState(() => selectedProjectId());
6936
- useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
6937
- return id;
6938
- }
6939
- function useBoardWorkspace(workspaces, sessions) {
6940
- const projectId = useSelectedProjectId();
6941
- const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
6942
- return {
6943
- workspace,
6944
- path: workspace?.path ?? null
6945
- };
6946
- }
6947
7412
  var Rightbar_module_default = {
6948
7413
  panel: "_panel_135e7_1",
6949
7414
  columns: "_columns_135e7_18",
@@ -7068,13 +7533,14 @@ function Rightbar(props) {
7068
7533
  const { capabilities } = useCapabilityMap(panelToken);
7069
7534
  const board = useBoardWorkspace(workspaces, sessions);
7070
7535
  const boardWorkspace = board.path;
7071
- const enabledUnits = useEnabledUnits(panelToken, boardWorkspace);
7536
+ const panelBoard = useEnabledUnits(panelToken, boardWorkspace);
7537
+ const enabledUnits = panelBoard?.units ?? null;
7072
7538
  const [modulesOpen, setModulesOpen] = useState(false);
7073
7539
  const fixtures = useBoardMock(fixtureRoster(manifests));
7074
7540
  const visibleModules = selectBoardModules(enabledUnits, (id) => modules.byId(id), capabilities);
7075
7541
  const plan = planBoard(fixtures.shape, {
7076
7542
  modules: visibleModules,
7077
- configRead: enabledUnits !== null
7543
+ configRead: panelBoard !== null
7078
7544
  }, fixtureSeed(manifests, modules.all(), crashModeOn(window.location.search)));
7079
7545
  const world = createSuiteWorld({
7080
7546
  workspaces,
@@ -7135,7 +7601,7 @@ function Rightbar(props) {
7135
7601
  onRefresh: refreshPanel,
7136
7602
  modulesOpen,
7137
7603
  onModulesOpenChange: setModulesOpen,
7138
- enabledUnits,
7604
+ enabledUnits: panelBoard,
7139
7605
  manifests,
7140
7606
  workspace: boardWorkspace,
7141
7607
  refreshToken: panelToken,
@@ -8217,7 +8683,7 @@ function messagesOf(units) {
8217
8683
  ...face.messages === void 0 ? {} : { messages: face.messages }
8218
8684
  }));
8219
8685
  }
8220
- 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*/";
8221
8687
  function workbenchCss() {
8222
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}`;
8223
8689
  }