@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
@@ -1,4 +1,4 @@
1
- import { Button, CodeBlock, DisclosureRow, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Menu, Modal, RiskConfirmation, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
1
+ import { Button, Checkbox, CodeBlock, DisclosureRow, IconArchiveOutlineRegular, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenOutlineRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPinOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Menu, Modal, RiskConfirmation, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
2
2
  //#region \0rolldown/runtime.js
3
3
  var __defProp = Object.defineProperty;
4
4
  var __exportAll = (all, no_symbols) => {
@@ -1090,6 +1090,50 @@ function IconBrandMark({ size = 24 }) {
1090
1090
  strokeLinecap: "round"
1091
1091
  }));
1092
1092
  }
1093
+ function IconOpencli({ size = 16 }) {
1094
+ return h(Shell, {
1095
+ size,
1096
+ viewBox: "0 0 64 64"
1097
+ }, h("defs", null, h("linearGradient", {
1098
+ id: "opencli-mark",
1099
+ x1: "0%",
1100
+ y1: "0%",
1101
+ x2: "100%",
1102
+ y2: "100%"
1103
+ }, h("stop", {
1104
+ offset: "0%",
1105
+ stopColor: "#00e5a0"
1106
+ }), h("stop", {
1107
+ offset: "50%",
1108
+ stopColor: "#00b4d8"
1109
+ }), h("stop", {
1110
+ offset: "100%",
1111
+ stopColor: "#7b61ff"
1112
+ }))), h("rect", {
1113
+ width: 64,
1114
+ height: 64,
1115
+ rx: 14,
1116
+ fill: "#0a0a0f"
1117
+ }), h("text", {
1118
+ x: "50%",
1119
+ y: "54%",
1120
+ dominantBaseline: "middle",
1121
+ textAnchor: "middle",
1122
+ fontFamily: "monospace",
1123
+ fontWeight: 700,
1124
+ fontSize: 28,
1125
+ fill: "url(#opencli-mark)"
1126
+ }, ">_"));
1127
+ }
1128
+ function IconNpm({ size = 16 }) {
1129
+ return h(Shell, {
1130
+ size,
1131
+ viewBox: "0 0 1024 1024"
1132
+ }, h("path", {
1133
+ 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",
1134
+ fill: "#CB3837"
1135
+ }));
1136
+ }
1093
1137
  function IconModules({ size = 16 }) {
1094
1138
  return h("svg", {
1095
1139
  width: size,
@@ -1212,7 +1256,12 @@ var en = {
1212
1256
  "time.hours": "{n} h ago",
1213
1257
  "time.days": "{n} d ago",
1214
1258
  "panels.title": "Panel modules",
1215
- "panels.reset": "Reset",
1259
+ "panels.market.defaultNote": "This default covers every workspace that has not changed this row; ones that have keep their own choice.",
1260
+ "panels.market.changedBy": "{count} workspaces have already changed this row",
1261
+ "panels.market.defaultLabel": "On by default in all workspaces",
1262
+ "panels.followGlobal": "Default",
1263
+ "panels.followGlobalHint": "This row follows the default board (the switch shows that state). Clicking the switch makes it this project's own choice.",
1264
+ "panels.followAll": "Restore the default everywhere",
1216
1265
  "panels.enabled": "enabled in this project",
1217
1266
  "panels.disabled": "not enabled in this project",
1218
1267
  "panels.choose": "Choose modules",
@@ -1231,6 +1280,7 @@ var en = {
1231
1280
  "panels.browseMarket": "Browse the module market",
1232
1281
  "panels.noneInstalled": "None of these modules has its plugin installed yet",
1233
1282
  "panels.noneInstalledHint": "Once installed they come back here, and you pick which go on the panel.",
1283
+ "panels.rowPlugin": "Plugin",
1234
1284
  "panels.market.installed": "installed",
1235
1285
  "panels.market.outdated": "needs update",
1236
1286
  "panels.market.hasNew": "New version",
@@ -1240,7 +1290,7 @@ var en = {
1240
1290
  "panels.market.sectionInstalled": "Installed modules",
1241
1291
  "panels.market.sectionPending": "Not installed",
1242
1292
  "panels.market.sectionShared": "Shared dependencies",
1243
- "panels.market.sharedUsedBy": "Used by {modules}",
1293
+ "panels.market.sharedUsedBy": "Used by module {modules}",
1244
1294
  "panels.market.listSeparator": ", ",
1245
1295
  "panels.market.sharedMissing": "not installed",
1246
1296
  "panels.market.sharedOutdated": "update available",
@@ -1272,12 +1322,13 @@ var en = {
1272
1322
  "panels.market.moduleRefused": "This module was built for an older version of the workbench, so it does not work here. Update it, or uninstall.",
1273
1323
  "panels.market.moduleRefusedDetail": "Why it cannot be used: {reason}",
1274
1324
  "panels.market.moduleRestartHint": "installed but not active — restart dsh once to bring it up",
1325
+ "panels.market.workbenchName": "Workbench",
1326
+ "panels.market.workbenchLocal": "This is the copy from your working repository; it does not come from the registry.",
1275
1327
  "panels.market.pluginKeptInUse": "Files kept for now: {names} still uses it.",
1276
1328
  "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.",
1277
1329
  "panels.market.pluginKeptHeld": "Files kept: this one is yours, and a module letting go will not remove it.",
1278
1330
  "panels.market.pluginKeptUnnamed": "Files kept for now: this one cannot be identified as a plugin, so it is unclear who needs it.",
1279
- "panels.market.pluginAlsoKnownAs": "Its package is {pkg} (updates and uninstall use that)",
1280
- "panels.market.pluginBroken": "This install is broken: it cannot be identified as a plugin. Uninstall it, or install it again by package name above.",
1331
+ "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).",
1281
1332
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
1282
1333
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
1283
1334
  "panels.market.recheck": "Check for updates",
@@ -1286,7 +1337,7 @@ var en = {
1286
1337
  "panels.market.justNow": "just now",
1287
1338
  "panels.market.minutesAgo": "{n} min ago",
1288
1339
  "panels.market.hoursAgo": "{n} h ago",
1289
- "panels.market.add.description": "Enter a package name, a Git URL, or a path to a local directory.",
1340
+ "panels.market.add.description": "Enter a module or opencli plugin package name, Git repository URL, or local directory path.",
1290
1341
  "panels.market.add.specPlaceholder": "e.g. @dsh-workbench/module-hello",
1291
1342
  "panels.market.add.guideToggle": "Install guide and examples",
1292
1343
  "panels.market.add.guideHide": "Hide guide",
@@ -1325,11 +1376,13 @@ var en = {
1325
1376
  "panels.market.add.problemInstalled": "This module is already installed",
1326
1377
  "panels.market.add.problemNotFound": "No such module found",
1327
1378
  "panels.market.add.problemNotPackage": "That path does not exist or is not a valid module package",
1328
- "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.",
1379
+ "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.",
1329
1380
  "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.",
1330
1381
  "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.",
1331
1382
  "panels.market.add.failureNotModuleOrPlugin": "This package is neither a workbench module nor an opencli plugin, so installing it would do nothing",
1332
1383
  "panels.market.add.installedPlugin": "Installed: the opencli plugin {name}",
1384
+ "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.",
1385
+ "panels.market.add.pluginAlias": "Plugin name: {name}",
1333
1386
  "panels.market.add.problemNetwork": "Cannot reach the module source; check the network and retry",
1334
1387
  "panels.market.add.problemUnknown": "Cannot fetch module information: {reason}",
1335
1388
  "panels.market.add.failureNetwork": "The network connection failed",
@@ -1540,7 +1593,12 @@ var zh = {
1540
1593
  "time.hours": "{n} 小时前",
1541
1594
  "time.days": "{n} 天前",
1542
1595
  "panels.title": "面板模块",
1543
- "panels.reset": "恢复默认",
1596
+ "panels.market.defaultNote": "这份默认给所有没在这一行改过的工作区;改过的保持自己的选择。",
1597
+ "panels.market.changedBy": "{count} 个工作区已在这一行改过",
1598
+ "panels.market.defaultLabel": "开启后所有工作区默认启用",
1599
+ "panels.followGlobal": "默认",
1600
+ "panels.followGlobalHint": "这一行跟着默认板走(右边那颗开关显示的就是默认的状态)。点一下开关 = 改成这个项目自己定。",
1601
+ "panels.followAll": "全部恢复默认",
1544
1602
  "panels.enabled": "这个项目已启用",
1545
1603
  "panels.disabled": "这个项目未启用",
1546
1604
  "panels.choose": "选择模块",
@@ -1559,6 +1617,7 @@ var zh = {
1559
1617
  "panels.browseMarket": "浏览模块市场",
1560
1618
  "panels.noneInstalled": "这些模块要的插件都还没装",
1561
1619
  "panels.noneInstalledHint": "装好之后它们会回到这里,再由你决定放哪几个上板。",
1620
+ "panels.rowPlugin": "插件",
1562
1621
  "panels.market.installed": "已安装",
1563
1622
  "panels.market.outdated": "要更新",
1564
1623
  "panels.market.hasNew": "有新版本",
@@ -1568,7 +1627,7 @@ var zh = {
1568
1627
  "panels.market.sectionInstalled": "已安装模块",
1569
1628
  "panels.market.sectionPending": "未安装",
1570
1629
  "panels.market.sectionShared": "共用依赖",
1571
- "panels.market.sharedUsedBy": "供 {modules} 使用",
1630
+ "panels.market.sharedUsedBy": "供 {modules} 模块使用",
1572
1631
  "panels.market.listSeparator": "、",
1573
1632
  "panels.market.sharedMissing": "未装",
1574
1633
  "panels.market.sharedOutdated": "有新版",
@@ -1600,12 +1659,13 @@ var zh = {
1600
1659
  "panels.market.moduleRefused": "这个模块是给旧版本的工作台写的,现在用不了。更新它,或者卸载。",
1601
1660
  "panels.market.moduleRefusedDetail": "装不上的原因:{reason}",
1602
1661
  "panels.market.moduleRestartHint": "装好了但还没生效 —— 重启一次 dsh 就会出来",
1662
+ "panels.market.workbenchName": "工作台",
1663
+ "panels.market.workbenchLocal": "这份是本仓正在开发的那一份,不从源上取。",
1603
1664
  "panels.market.pluginKeptInUse": "文件先留着:{names} 还要用它。",
1604
1665
  "panels.market.pluginKeptUnsure": "文件先留着:这台机器上还有模块看不出用了什么,说不准谁在用它。",
1605
1666
  "panels.market.pluginKeptHeld": "文件留着:你自己装的那一份,模块放手不动它。",
1606
1667
  "panels.market.pluginKeptUnnamed": "文件先留着:看不出这是哪个插件,说不准谁在用它。",
1607
- "panels.market.pluginAlsoKnownAs": "包名是 {pkg}(更新与卸载按它来)",
1608
- "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者去上面按包名再装一次。",
1668
+ "panels.market.pluginBroken": "这份装坏了:看不出它是个插件。可以卸载,或者直接跟 agent 说:用 workbench_modules 的 install-bundle 按包名再装一次。",
1609
1669
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
1610
1670
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
1611
1671
  "panels.market.recheck": "重新检查更新",
@@ -1614,7 +1674,7 @@ var zh = {
1614
1674
  "panels.market.justNow": "刚刚",
1615
1675
  "panels.market.minutesAgo": "{n} 分钟前",
1616
1676
  "panels.market.hoursAgo": "{n} 小时前",
1617
- "panels.market.add.description": "输入模块的包名、Git 仓库地址或本地目录路径。",
1677
+ "panels.market.add.description": "输入模块或 opencli 插件的包名、Git 仓库地址或本地目录路径。",
1618
1678
  "panels.market.add.specPlaceholder": "例如 @dsh-workbench/module-hello",
1619
1679
  "panels.market.add.guideToggle": "模块安装引导和示例",
1620
1680
  "panels.market.add.guideHide": "收起引导",
@@ -1653,11 +1713,13 @@ var zh = {
1653
1713
  "panels.market.add.problemInstalled": "该模块已安装",
1654
1714
  "panels.market.add.problemNotFound": "未找到相关模块",
1655
1715
  "panels.market.add.problemNotPackage": "该路径不存在或不是有效的模块包",
1656
- "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。要是它其实是个 opencli 插件,请改用包名(例如 opencli-plugin-cmdb)或者本地目录 —— 从 git 地址和 tarball 判断不出它是什么。",
1716
+ "panels.market.add.problemNotBundle": "这个包装不进这里:{reason}。这个入口按包名认工作台模块和 opencli 插件,两种都能装;但 git 地址和 tarball 判断不出它是什么 —— 要是它其实是这两样之一,请改填包名或本地目录。",
1657
1717
  "panels.market.add.problemNotWorkbenchModule": "这个包跟现在的工作台对不上,装上也用不了。换一个版本,或者找这个模块的作者。",
1658
1718
  "panels.market.add.problemNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上。换一个版本,或者找这个包的作者。",
1659
1719
  "panels.market.add.failureNotModuleOrPlugin": "这个包既不是工作台的模块,也不是 opencli 的插件,装了也用不上",
1660
1720
  "panels.market.add.installedPlugin": "装上了:opencli 插件 {name}",
1721
+ "panels.market.add.pluginPreview": "这是一份 opencli 插件:装进 opencli 的插件区,装完就能用,不用重启。",
1722
+ "panels.market.add.pluginAlias": "插件名:{name}",
1661
1723
  "panels.market.add.problemNetwork": "无法连接模块源,请检查网络后重试",
1662
1724
  "panels.market.add.problemUnknown": "无法获取模块信息:{reason}",
1663
1725
  "panels.market.add.failureNetwork": "网络连接失败",
@@ -1979,6 +2041,8 @@ var dist_exports = /* @__PURE__ */ __exportAll({
1979
2041
  IconBrandMark: () => IconBrandMark,
1980
2042
  IconConversation: () => IconConversation,
1981
2043
  IconModules: () => IconModules,
2044
+ IconNpm: () => IconNpm,
2045
+ IconOpencli: () => IconOpencli,
1982
2046
  IconPanelScreen: () => IconPanelScreen,
1983
2047
  LOCALES: () => LOCALES,
1984
2048
  LOCALE_NS: () => LOCALE_NS,
@@ -2919,8 +2983,7 @@ function buildMarketMocks(roster) {
2919
2983
  expect: {
2920
2984
  rows: 0,
2921
2985
  plugins: 1,
2922
- pluginActions: ["update-plugin", "uninstall-plugin"],
2923
- pluginNoteKey: "panels.market.pluginAlsoKnownAs"
2986
+ pluginActions: ["update-plugin", "uninstall-plugin"]
2924
2987
  }
2925
2988
  },
2926
2989
  {
@@ -2959,6 +3022,70 @@ function buildMarketMocks(roster) {
2959
3022
  notice: true
2960
3023
  }
2961
3024
  },
3025
+ {
3026
+ id: "workbench-update",
3027
+ label: "工作台有新版(这一行也给「更新」,装完面板自己换上)",
3028
+ manifests: [],
3029
+ capabilities: {},
3030
+ workbench: {
3031
+ pkg: "@dsh-workbench/core",
3032
+ installed: "0.1.18",
3033
+ latest: "0.1.19"
3034
+ },
3035
+ expect: {
3036
+ rows: 0,
3037
+ workbenchState: "outdated",
3038
+ workbenchActions: ["update-workbench"]
3039
+ }
3040
+ },
3041
+ {
3042
+ id: "workbench-current",
3043
+ label: "工作台已经最新(只显示版本,没有按钮)",
3044
+ manifests: [],
3045
+ capabilities: {},
3046
+ workbench: {
3047
+ pkg: "@dsh-workbench/core",
3048
+ installed: "0.1.19"
3049
+ },
3050
+ expect: {
3051
+ rows: 0,
3052
+ workbenchState: "installed",
3053
+ workbenchActions: []
3054
+ }
3055
+ },
3056
+ {
3057
+ id: "workbench-local",
3058
+ label: "工作台是本仓那份(link: 装的:不给更新,行上说清)",
3059
+ manifests: [],
3060
+ capabilities: {},
3061
+ workbench: {
3062
+ pkg: "@dsh-workbench/core",
3063
+ installed: "0.1.18",
3064
+ latest: "0.1.19",
3065
+ local: true
3066
+ },
3067
+ expect: {
3068
+ rows: 0,
3069
+ workbenchState: "installed",
3070
+ workbenchActions: [],
3071
+ workbenchNoteKey: "panels.market.workbenchLocal"
3072
+ }
3073
+ },
3074
+ {
3075
+ id: "workbench-updated",
3076
+ label: "工作台刚更新完(新版已经在盘上:行上就是新版,没有按钮、也不劝人重启)",
3077
+ manifests: [],
3078
+ capabilities: {},
3079
+ workbench: {
3080
+ pkg: "@dsh-workbench/core",
3081
+ installed: "0.1.19"
3082
+ },
3083
+ expect: {
3084
+ rows: 0,
3085
+ workbenchState: "installed",
3086
+ workbenchActions: []
3087
+ }
3088
+ },
2962
3089
  {
2963
3090
  id: "empty",
2964
3091
  label: "市场空态",
@@ -3028,11 +3155,13 @@ function createBoardRegistry() {
3028
3155
  //#endregion
3029
3156
  //#region src/app/units/registry.ts
3030
3157
  function toBoardModule(face, manifest) {
3158
+ const View = face.card;
3159
+ if (View === void 0) return void 0;
3031
3160
  return {
3032
3161
  id: manifest.id,
3033
3162
  titleKey: manifest.card?.titleKey ?? manifest.id,
3034
3163
  order: manifest.card?.order ?? 100,
3035
- View: face.card,
3164
+ View,
3036
3165
  ...face.steps === void 0 ? {} : { steps: face.steps }
3037
3166
  };
3038
3167
  }
@@ -3065,9 +3194,10 @@ function createClientUnitRegistry(options = {}) {
3065
3194
  function attach(entry) {
3066
3195
  const manifest = known.get(entry.unit);
3067
3196
  if (manifest === void 0) return false;
3197
+ const boardModule = toBoardModule(entry.face, manifest);
3068
3198
  entry.mounted = {
3069
3199
  manifest,
3070
- unmount: board.register(toBoardModule(entry.face, manifest))
3200
+ unmount: boardModule === void 0 ? () => {} : board.register(boardModule)
3071
3201
  };
3072
3202
  takeBackRefusal(entry.unit);
3073
3203
  return true;
@@ -3235,9 +3365,46 @@ function hasCard(roster) {
3235
3365
  function fixtureRoster(roster) {
3236
3366
  return hasCard(roster) ? roster : SAMPLE_ROSTER;
3237
3367
  }
3368
+ function boardModuleOf(face) {
3369
+ const module = toBoardModule(face, face.manifest);
3370
+ return module === void 0 ? [] : [module];
3371
+ }
3238
3372
  function fixtureSeed(roster, all, crash = false) {
3239
- const base = hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE, FIXTURE_FACE.manifest)];
3240
- return crash ? [toBoardModule(CRASH_FACE, CRASH_FACE.manifest), ...base] : base;
3373
+ const base = hasCard(roster) ? all : boardModuleOf(FIXTURE_FACE);
3374
+ return crash ? [...boardModuleOf(CRASH_FACE), ...base] : base;
3375
+ }
3376
+ //#endregion
3377
+ //#region src/app/layouts/rightbar/market-workbench-row.ts
3378
+ var WORKBENCH_ROW_ID = "workbench:self";
3379
+ var WORKBENCH_TITLE_KEY = "panels.market.workbenchName";
3380
+ function workbenchRow(version) {
3381
+ if (version === null || version === void 0 || version.installed === "") return void 0;
3382
+ const local = version.local === true;
3383
+ const latest = local ? void 0 : version.latest;
3384
+ const update = latest !== void 0 && latest !== version.installed ? {
3385
+ installed: version.installed,
3386
+ latest
3387
+ } : void 0;
3388
+ const note = local ? {
3389
+ key: "panels.market.workbenchLocal",
3390
+ params: {}
3391
+ } : void 0;
3392
+ return {
3393
+ id: WORKBENCH_ROW_ID,
3394
+ titleKey: WORKBENCH_TITLE_KEY,
3395
+ workbench: true,
3396
+ state: update === void 0 ? "installed" : "outdated",
3397
+ canInstall: false,
3398
+ canUpdate: update !== void 0,
3399
+ canUninstall: false,
3400
+ ...note === void 0 ? {} : { note },
3401
+ version: {
3402
+ installed: version.installed,
3403
+ ...latest === void 0 ? {} : { latest }
3404
+ },
3405
+ ...update === void 0 ? {} : { moduleUpdate: update },
3406
+ pkg: version.pkg
3407
+ };
3241
3408
  }
3242
3409
  //#endregion
3243
3410
  //#region src/app/layouts/rightbar/market-rows.ts
@@ -3286,7 +3453,7 @@ function mergeTitles(known, manifests) {
3286
3453
  }
3287
3454
  return next ?? known;
3288
3455
  }
3289
- function installedRows(modules, manifests, listed, known) {
3456
+ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3290
3457
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
3291
3458
  const rows = [];
3292
3459
  for (const module of modules) {
@@ -3316,12 +3483,15 @@ function installedRows(modules, manifests, listed, known) {
3316
3483
  ...outdated ? { moduleUpdate: {
3317
3484
  installed: module.installed,
3318
3485
  latest
3319
- } } : {}
3486
+ } } : {},
3487
+ defaultShown: defaults.has(module.unit),
3488
+ defaultChanged: changed[module.unit] ?? 0
3320
3489
  });
3321
3490
  }
3322
3491
  return rows;
3323
3492
  }
3324
3493
  function marketActions$1(row) {
3494
+ if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
3325
3495
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
3326
3496
  return [
3327
3497
  ...row.canInstall ? ["install"] : [],
@@ -3382,8 +3552,9 @@ function marketUpdatesOf(modules) {
3382
3552
  };
3383
3553
  return next;
3384
3554
  }
3385
- function marketHintVisible(manifests, capabilities, modules) {
3386
- return marketHasUpdates(marketRows(manifests, capabilities, marketUpdatesOf(modules)), sharedRows(manifests, capabilities));
3555
+ function marketHintVisible(manifests, capabilities, modules, workbench) {
3556
+ const self = workbenchRow(workbench);
3557
+ return marketHasUpdates([...marketRows(manifests, capabilities, marketUpdatesOf(modules)), ...self === void 0 ? [] : [self]], sharedRows(manifests, capabilities));
3387
3558
  }
3388
3559
  function marketSections(rows) {
3389
3560
  const installed = rows.filter((row) => isOnMachine(row.state));
@@ -3398,7 +3569,7 @@ function marketSections(rows) {
3398
3569
  rows: rest
3399
3570
  }]];
3400
3571
  }
3401
- function marketRows(manifests, capabilities, updates = {}) {
3572
+ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3402
3573
  const catalog = manifests.filter((manifest) => (manifest.env?.plugins ?? []).length > 0 || (manifest.env?.libs ?? []).length > 0);
3403
3574
  const rows = [];
3404
3575
  for (const manifest of catalog) {
@@ -3425,7 +3596,9 @@ function marketRows(manifests, capabilities, updates = {}) {
3425
3596
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
3426
3597
  } },
3427
3598
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
3428
- ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {}
3599
+ ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
3600
+ defaultShown: defaults.has(manifest.id),
3601
+ defaultChanged: changed[manifest.id] ?? 0
3429
3602
  });
3430
3603
  }
3431
3604
  return rows;
@@ -3514,6 +3687,7 @@ function sharedRows(manifests, capabilities) {
3514
3687
  const detail = bucket.purpose === void 0 ? void 0 : `${bucket.label} —— ${bucket.purpose}`;
3515
3688
  rows.push({
3516
3689
  id: `${bucket.kind}:${bucket.name}`,
3690
+ kind: bucket.kind,
3517
3691
  label: bucket.label,
3518
3692
  usedByKeys: bucket.users.map((unit) => byId.get(unit)?.card?.titleKey ?? unit),
3519
3693
  state,
@@ -3594,24 +3768,27 @@ function installedPluginKept(value) {
3594
3768
  names
3595
3769
  };
3596
3770
  }
3771
+ function installedPluginNotice(value, t) {
3772
+ const kept = installedPluginKept(value);
3773
+ if (kept === void 0) return null;
3774
+ return t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) });
3775
+ }
3597
3776
  function noteOf(plugin) {
3598
3777
  if (plugin.broken === true) return {
3599
3778
  key: "panels.market.pluginBroken",
3600
- params: {}
3779
+ params: {},
3780
+ tone: "alert"
3601
3781
  };
3602
3782
  if (plugin.local === true) return void 0;
3603
- if (plugin.name !== void 0 && plugin.name !== plugin.pkg) return {
3604
- key: "panels.market.pluginAlsoKnownAs",
3605
- params: { pkg: plugin.pkg }
3606
- };
3607
3783
  }
3608
- function installedPluginRows(plugins) {
3784
+ function installedPluginRows(plugins, defaults = /* @__PURE__ */ new Set(), changed = {}) {
3609
3785
  return plugins.map((plugin) => {
3786
+ const id = `plugin:${plugin.pkg}`;
3610
3787
  const name = plugin.name ?? plugin.pkg;
3611
3788
  const outdated = plugin.installed !== void 0 && plugin.latest !== void 0 && plugin.latest !== plugin.installed;
3612
3789
  const note = noteOf(plugin);
3613
3790
  return {
3614
- id: `plugin:${plugin.pkg}`,
3791
+ id,
3615
3792
  titleKey: plugin.pkg,
3616
3793
  label: name,
3617
3794
  plugin: true,
@@ -3621,7 +3798,12 @@ function installedPluginRows(plugins) {
3621
3798
  canUninstall: true,
3622
3799
  ...plugin.local === true ? { local: true } : {},
3623
3800
  ...plugin.broken === true ? { broken: true } : {},
3801
+ ...plugin.broken === true ? {} : {
3802
+ defaultShown: defaults.has(id),
3803
+ defaultChanged: changed[id] ?? 0
3804
+ },
3624
3805
  ...note === void 0 ? {} : { note },
3806
+ ...plugin.installed === void 0 ? {} : { versionLabel: `${plugin.pkg}@${plugin.installed}` },
3625
3807
  pkg: plugin.pkg,
3626
3808
  ...plugin.installed === void 0 ? {} : { version: {
3627
3809
  installed: plugin.installed,
@@ -3630,8 +3812,279 @@ function installedPluginRows(plugins) {
3630
3812
  };
3631
3813
  });
3632
3814
  }
3815
+ var MarketPage_module_default = {
3816
+ marketList: "_marketList_1v8dy_1",
3817
+ marketRow: "_marketRow_1v8dy_10",
3818
+ marketIcon: "_marketIcon_1v8dy_20",
3819
+ marketMain: "_marketMain_1v8dy_32",
3820
+ marketName: "_marketName_1v8dy_39",
3821
+ marketDesc: "_marketDesc_1v8dy_48",
3822
+ marketUsedBy: "_marketUsedBy_1v8dy_59",
3823
+ marketVersion: "_marketVersion_1v8dy_73",
3824
+ marketEnd: "_marketEnd_1v8dy_95",
3825
+ marketSwitchSeat: "_marketSwitchSeat_1v8dy_103",
3826
+ marketIconAction: "_marketIconAction_1v8dy_108",
3827
+ marketActions: "_marketActions_1v8dy_113",
3828
+ marketDefaultNote: "_marketDefaultNote_1v8dy_119",
3829
+ marketSelfDivider: "_marketSelfDivider_1v8dy_126",
3830
+ marketSection: "_marketSection_1v8dy_131",
3831
+ marketSectionHead: "_marketSectionHead_1v8dy_138",
3832
+ marketSectionIcon: "_marketSectionIcon_1v8dy_144",
3833
+ marketSectionTitle: "_marketSectionTitle_1v8dy_151",
3834
+ marketSectionCount: "_marketSectionCount_1v8dy_157",
3835
+ marketProgress: "_marketProgress_1v8dy_164",
3836
+ marketNote: "_marketNote_1v8dy_174",
3837
+ marketNotePlain: "_marketNotePlain_1v8dy_181",
3838
+ marketFailure: "_marketFailure_1v8dy_189",
3839
+ marketEmpty: "_marketEmpty_1v8dy_196",
3840
+ marketPage: "_marketPage_1v8dy_201",
3841
+ marketPageHead: "_marketPageHead_1v8dy_219",
3842
+ marketPageTitle: "_marketPageTitle_1v8dy_227",
3843
+ marketPageIntro: "_marketPageIntro_1v8dy_232",
3844
+ marketPageTools: "_marketPageTools_1v8dy_238",
3845
+ marketIconButton: "_marketIconButton_1v8dy_247",
3846
+ marketIconWrap: "_marketIconWrap_1v8dy_272",
3847
+ marketIconButtonSpinning: "_marketIconButtonSpinning_1v8dy_276",
3848
+ "wb-spin": "_wb-spin_1v8dy_1",
3849
+ marketAddButton: "_marketAddButton_1v8dy_280",
3850
+ marketChecking: "_marketChecking_1v8dy_297",
3851
+ marketEmptyTitle: "_marketEmptyTitle_1v8dy_305"
3852
+ };
3853
+ //#endregion
3854
+ //#region src/app/layouts/rightbar/MarketStates.tsx
3855
+ function MarketChecking({ t }) {
3856
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(StateDot, {
3857
+ state: "ongoing",
3858
+ size: 14
3859
+ }), t("panels.market.checking")));
3860
+ }
3861
+ function MarketEmpty({ t }) {
3862
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3863
+ }
3864
+ //#endregion
3865
+ //#region src/app/layouts/rightbar/market-section-icon.ts
3866
+ var SIZE$1 = 14;
3867
+ function marketSectionIcon(kind) {
3868
+ switch (kind) {
3869
+ case "installed": return h(IconModules, { size: SIZE$1 });
3870
+ case "pending": return h(IconDownloadOutlineRegular, { size: SIZE$1 });
3871
+ case "plugins": return h(IconCordisPluginOutlineRegular, { size: SIZE$1 });
3872
+ case "local": return h(IconFolderOpenOutlineRegular, { size: SIZE$1 });
3873
+ case "shared": return h(IconLinkOutlineRegular, { size: SIZE$1 });
3874
+ }
3875
+ }
3876
+ //#endregion
3877
+ //#region src/app/layouts/rightbar/market-row-icon.ts
3878
+ var SIZE = 18;
3879
+ function packageIcon(kind) {
3880
+ switch (kind) {
3881
+ case "module": return h(IconArchiveOutlineRegular, { size: SIZE });
3882
+ case "plugin": return h(IconOpencli, { size: SIZE });
3883
+ case "lib": return h(IconNpm, { size: SIZE });
3884
+ case "workbench": return h(IconPanelScreen, { size: SIZE });
3885
+ }
3886
+ }
3887
+ function marketRowKind(row) {
3888
+ if (row.workbench === true) return "workbench";
3889
+ if (row.plugin === true) return "plugin";
3890
+ return "module";
3891
+ }
3892
+ function sharedRowKind(row) {
3893
+ return row.kind === "plugin" ? "plugin" : "lib";
3894
+ }
3895
+ //#endregion
3896
+ //#region src/app/layouts/rightbar/market-view-text.ts
3897
+ var PROGRESS_KEY = {
3898
+ install: "panels.market.installing",
3899
+ update: "panels.market.updating",
3900
+ "update-bundle": "panels.market.updating",
3901
+ "remove-bundle": "panels.market.uninstalling",
3902
+ uninstall: "panels.market.uninstalling",
3903
+ "update-dependency": "panels.market.updating",
3904
+ "update-plugin": "panels.market.updating",
3905
+ "uninstall-plugin": "panels.market.uninstalling",
3906
+ "update-workbench": "panels.market.updating"
3907
+ };
3908
+ var ACTION_LABEL_KEY = {
3909
+ install: "panels.market.install",
3910
+ update: "panels.market.update",
3911
+ "update-bundle": "panels.market.update",
3912
+ "remove-bundle": "panels.market.uninstall",
3913
+ uninstall: "panels.market.uninstall",
3914
+ "update-dependency": "panels.market.update",
3915
+ "update-plugin": "panels.market.update",
3916
+ "uninstall-plugin": "panels.market.uninstall",
3917
+ "update-workbench": "panels.market.update"
3918
+ };
3919
+ function pendingRowOf(input) {
3920
+ const { pending, removing } = input;
3921
+ if (removing === null || pending === null) return void 0;
3922
+ if (input.rows.some((row) => row.id === removing)) return void 0;
3923
+ return {
3924
+ id: removing,
3925
+ titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
3926
+ state: "installed",
3927
+ canInstall: false,
3928
+ canUpdate: false,
3929
+ canUninstall: true,
3930
+ ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
3931
+ ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
3932
+ };
3933
+ }
3934
+ //#endregion
3935
+ //#region src/app/layouts/rightbar/SharedSection.tsx
3936
+ function SharedLine({ t, row, pending, failure, onAct }) {
3937
+ const running = pending !== null && pending.id === row.id ? pending : null;
3938
+ const locked = pending !== null;
3939
+ const actions = sharedActions(row);
3940
+ const stateText = t(SHARED_STATE_KEY[row.state]);
3941
+ const version = row.version;
3942
+ 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", {
3943
+ from: version.installed,
3944
+ to: version.latest
3945
+ }) : version.installed ?? version.latest ?? ""));
3946
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3947
+ className: MarketPage_module_default.marketIcon,
3948
+ "aria-hidden": "true"
3949
+ }, 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", {
3950
+ className: MarketPage_module_default.marketDesc,
3951
+ role: "img",
3952
+ "aria-label": stateText
3953
+ }, row.state === "checking" ? /* @__PURE__ */ h(StateDot, {
3954
+ state: "ongoing",
3955
+ size: 14
3956
+ }) : /* @__PURE__ */ h(StateDot, {
3957
+ state: SHARED_DOT[row.state],
3958
+ size: 9
3959
+ }), 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(StateDot, {
3960
+ state: "ongoing",
3961
+ size: 14
3962
+ }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(Button, {
3963
+ key: action,
3964
+ type: "button",
3965
+ size: "sm",
3966
+ variant: "outline",
3967
+ disabled: locked,
3968
+ onClick: () => onAct(action)
3969
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3970
+ }
3971
+ function SharedSection({ t, rows, pending, failureOf, act }) {
3972
+ if (rows.length === 0) return null;
3973
+ return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("span", {
3974
+ className: MarketPage_module_default.marketSectionIcon,
3975
+ "aria-hidden": "true"
3976
+ }, 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, {
3977
+ key: row.id,
3978
+ t,
3979
+ row,
3980
+ pending,
3981
+ failure: failureOf(row.id),
3982
+ onAct: (action) => void act(row.id, action)
3983
+ }))));
3984
+ }
3985
+ //#endregion
3986
+ //#region src/app/layouts/rightbar/market-section.tsx
3987
+ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
3988
+ const running = pending !== null && pending.id === row.id ? pending : null;
3989
+ const locked = pending !== null;
3990
+ const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
3991
+ const actions = marketActions$1(row);
3992
+ const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3993
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3994
+ className: MarketPage_module_default.marketIcon,
3995
+ "aria-hidden": "true"
3996
+ }, 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", {
3997
+ from: row.version.installed,
3998
+ to: row.version.latest
3999
+ }) : row.version.installed ?? row.version.latest ?? "")), quiet ? null : /* @__PURE__ */ h("span", {
4000
+ className: MarketPage_module_default.marketDesc,
4001
+ role: "img",
4002
+ "aria-label": stateText
4003
+ }, row.state === "checking" ? /* @__PURE__ */ h(StateDot, {
4004
+ state: "ongoing",
4005
+ size: 14
4006
+ }) : /* @__PURE__ */ h(StateDot, {
4007
+ state: MARKET_DOT[row.state],
4008
+ size: 9
4009
+ }), 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(Switch, {
4010
+ checked: row.defaultShown,
4011
+ disabled: boardBusy === true || locked,
4012
+ label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
4013
+ onChange: (next) => onDefault?.(next)
4014
+ }))), running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(StateDot, {
4015
+ state: "ongoing",
4016
+ size: 14
4017
+ }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
4018
+ const danger = action === "uninstall" || action === "remove-bundle" || action === "uninstall-plugin";
4019
+ const label = t(ACTION_LABEL_KEY[action]);
4020
+ if (!danger) return /* @__PURE__ */ h(Button, {
4021
+ key: action,
4022
+ type: "button",
4023
+ size: "sm",
4024
+ variant: action === "install" ? "primary" : "outline",
4025
+ disabled: locked,
4026
+ onClick: () => onAct(action)
4027
+ }, label);
4028
+ return /* @__PURE__ */ h(Tip, {
4029
+ key: action,
4030
+ label
4031
+ }, /* @__PURE__ */ h(Button, {
4032
+ type: "button",
4033
+ size: "sm",
4034
+ variant: "ghost",
4035
+ className: `wb-dangerAction ${MarketPage_module_default.marketIconAction}`,
4036
+ icon: /* @__PURE__ */ h(IconTrashOutlineRegular, { size: 14 }),
4037
+ "aria-label": t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }),
4038
+ disabled: locked,
4039
+ onClick: () => onAct(action)
4040
+ }));
4041
+ }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
4042
+ className: row.note.tone === "plain" ? MarketPage_module_default.marketNotePlain : MarketPage_module_default.marketNote,
4043
+ title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
4044
+ }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
4045
+ }
4046
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
4047
+ if (rows.length === 0) return null;
4048
+ return /* @__PURE__ */ h("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ h("span", {
4049
+ className: MarketPage_module_default.marketSectionIcon,
4050
+ "aria-hidden": "true"
4051
+ }, 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, {
4052
+ key: row.id,
4053
+ t,
4054
+ row,
4055
+ pending,
4056
+ failure: failureOf(row.id),
4057
+ onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
4058
+ onDefault: (next) => onDefault?.(row.id, next),
4059
+ boardBusy
4060
+ }))));
4061
+ }
3633
4062
  //#endregion
3634
4063
  //#region src/app/layouts/market/add-module-text.ts
4064
+ function previewOf(inspection, fallback) {
4065
+ if (inspection.status === "plugin") return {
4066
+ kind: "plugin",
4067
+ name: inspection.pkg,
4068
+ version: inspection.version ?? "",
4069
+ description: "",
4070
+ registry: inspection.registry ?? "",
4071
+ ...inspection.pluginName === void 0 ? {} : { pluginName: inspection.pluginName }
4072
+ };
4073
+ return {
4074
+ kind: "module",
4075
+ name: inspection.name ?? fallback,
4076
+ version: inspection.version ?? "",
4077
+ description: inspection.description ?? "",
4078
+ registry: inspection.registry ?? ""
4079
+ };
4080
+ }
4081
+ function resultKindOf(input) {
4082
+ if (input.plugin) return "plugin";
4083
+ if (input.change.application === "failed") return "failed";
4084
+ if (input.change.application === "restart-required") return "restart";
4085
+ if (input.change.application === "cancelled" || input.supplyState === "not-a-module") return "quiet";
4086
+ return "took-effect";
4087
+ }
3635
4088
  var GUIDE_ITEMS = [
3636
4089
  {
3637
4090
  titleKey: "panels.market.add.guideIdTitle",
@@ -3819,128 +4272,60 @@ function changeFailure(change, t) {
3819
4272
  if (change === void 0 || SHIPPED.includes(change.application)) return void 0;
3820
4273
  return failureReason(failureCode(change), change.application, t);
3821
4274
  }
3822
- var MarketPage_module_default = {
3823
- marketList: "_marketList_z6vtq_1",
3824
- marketRow: "_marketRow_z6vtq_10",
3825
- marketIcon: "_marketIcon_z6vtq_20",
3826
- marketMain: "_marketMain_z6vtq_32",
3827
- marketName: "_marketName_z6vtq_39",
3828
- marketDesc: "_marketDesc_z6vtq_48",
3829
- marketUsedBy: "_marketUsedBy_z6vtq_59",
3830
- marketVersion: "_marketVersion_z6vtq_73",
3831
- marketEnd: "_marketEnd_z6vtq_95",
3832
- marketActions: "_marketActions_z6vtq_102",
3833
- marketSection: "_marketSection_z6vtq_108",
3834
- marketSectionHead: "_marketSectionHead_z6vtq_115",
3835
- marketSectionTitle: "_marketSectionTitle_z6vtq_121",
3836
- marketSectionCount: "_marketSectionCount_z6vtq_127",
3837
- marketProgress: "_marketProgress_z6vtq_133",
3838
- marketNote: "_marketNote_z6vtq_143",
3839
- marketFailure: "_marketFailure_z6vtq_150",
3840
- marketEmpty: "_marketEmpty_z6vtq_157",
3841
- marketPage: "_marketPage_z6vtq_162",
3842
- marketPageHead: "_marketPageHead_z6vtq_180",
3843
- marketPageTitle: "_marketPageTitle_z6vtq_188",
3844
- marketPageIntro: "_marketPageIntro_z6vtq_193",
3845
- marketPageTools: "_marketPageTools_z6vtq_199",
3846
- marketIconButton: "_marketIconButton_z6vtq_208",
3847
- marketIconWrap: "_marketIconWrap_z6vtq_233",
3848
- marketIconButtonSpinning: "_marketIconButtonSpinning_z6vtq_237",
3849
- "wb-spin": "_wb-spin_z6vtq_1",
3850
- marketAddButton: "_marketAddButton_z6vtq_241",
3851
- marketChecking: "_marketChecking_z6vtq_258",
3852
- marketEmptyTitle: "_marketEmptyTitle_z6vtq_266"
3853
- };
3854
4275
  //#endregion
3855
- //#region src/app/layouts/rightbar/MarketStates.tsx
3856
- function MarketChecking({ t }) {
3857
- return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(StateDot, {
3858
- state: "ongoing",
3859
- size: 14
3860
- }), t("panels.market.checking")));
4276
+ //#region src/app/layouts/rightbar/market-act.ts
4277
+ function marketActOf(options) {
4278
+ const { t, mocked, rowOf, seats, send, onChanged } = options;
4279
+ return async (id, action) => {
4280
+ if (mocked) return;
4281
+ const row = rowOf(id);
4282
+ seats.setPending({
4283
+ id,
4284
+ action,
4285
+ ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4286
+ ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4287
+ ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4288
+ });
4289
+ seats.setConfirming(null);
4290
+ seats.setFailed(null);
4291
+ if (action !== "uninstall-plugin") seats.setNotice(null);
4292
+ const outcome = await send(action === "update-dependency" ? {
4293
+ action,
4294
+ id
4295
+ } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" ? {
4296
+ action,
4297
+ name: row?.pkg ?? ""
4298
+ } : {
4299
+ action,
4300
+ unit: id
4301
+ });
4302
+ seats.setPending(null);
4303
+ if (!outcome.ok) {
4304
+ onChanged();
4305
+ seats.setFailed({
4306
+ id,
4307
+ message: t("panels.market.failed", { reason: outcome.message })
4308
+ });
4309
+ return;
4310
+ }
4311
+ if (action === "uninstall-plugin") seats.setNotice(installedPluginNotice(outcome.value, t));
4312
+ const reason = changeFailure(changeOf(outcome.value), t);
4313
+ onChanged();
4314
+ if (reason !== void 0) seats.setFailed({
4315
+ id,
4316
+ message: t("panels.market.failed", { reason })
4317
+ });
4318
+ };
3861
4319
  }
3862
- function MarketEmpty({ t }) {
3863
- return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3864
- }
3865
- //#endregion
3866
- //#region src/app/layouts/rightbar/market-view-text.ts
3867
- var PROGRESS_KEY = {
3868
- install: "panels.market.installing",
3869
- update: "panels.market.updating",
3870
- "update-bundle": "panels.market.updating",
3871
- "remove-bundle": "panels.market.uninstalling",
3872
- uninstall: "panels.market.uninstalling",
3873
- "update-dependency": "panels.market.updating",
3874
- "update-plugin": "panels.market.updating",
3875
- "uninstall-plugin": "panels.market.uninstalling"
3876
- };
3877
- var ACTION_LABEL_KEY = {
3878
- install: "panels.market.install",
3879
- update: "panels.market.update",
3880
- "update-bundle": "panels.market.update",
3881
- "remove-bundle": "panels.market.uninstall",
3882
- uninstall: "panels.market.uninstall",
3883
- "update-dependency": "panels.market.update",
3884
- "update-plugin": "panels.market.update",
3885
- "uninstall-plugin": "panels.market.uninstall"
3886
- };
3887
- //#endregion
3888
- //#region src/app/layouts/rightbar/SharedSection.tsx
3889
- function SharedLine({ t, row, pending, failure, onAct }) {
3890
- const running = pending !== null && pending.id === row.id ? pending : null;
3891
- const locked = pending !== null;
3892
- const actions = sharedActions(row);
3893
- const stateText = t(SHARED_STATE_KEY[row.state]);
3894
- const version = row.version;
3895
- 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", {
3896
- from: version.installed,
3897
- to: version.latest
3898
- }) : version.installed ?? version.latest ?? ""));
3899
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3900
- className: MarketPage_module_default.marketIcon,
3901
- "aria-hidden": "true"
3902
- }, /* @__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", {
3903
- className: MarketPage_module_default.marketDesc,
3904
- role: "img",
3905
- "aria-label": stateText
3906
- }, row.state === "checking" ? /* @__PURE__ */ h(StateDot, {
3907
- state: "ongoing",
3908
- size: 14
3909
- }) : /* @__PURE__ */ h(StateDot, {
3910
- state: SHARED_DOT[row.state],
3911
- size: 9
3912
- }), 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(StateDot, {
3913
- state: "ongoing",
3914
- size: 14
3915
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(Button, {
3916
- key: action,
3917
- type: "button",
3918
- size: "sm",
3919
- variant: "outline",
3920
- disabled: locked,
3921
- onClick: () => onAct(action)
3922
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3923
- }
3924
- function SharedSection({ t, rows, pending, failureOf, act }) {
3925
- if (rows.length === 0) return null;
3926
- 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, {
3927
- key: row.id,
3928
- t,
3929
- row,
3930
- pending,
3931
- failure: failureOf(row.id),
3932
- onAct: (action) => void act(row.id, action)
3933
- }))));
3934
- }
3935
- var PanelFoot_module_default = {
3936
- foot: "_foot_1us83_1",
3937
- footText: "_footText_1us83_12",
3938
- footTextMd: "_footTextMd_1us83_17"
3939
- };
3940
- //#endregion
3941
- //#region src/shared/components/PanelFoot.tsx
3942
- function PanelFoot({ text, size = "sm", children }) {
3943
- 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);
4320
+ var PanelFoot_module_default = {
4321
+ foot: "_foot_1us83_1",
4322
+ footText: "_footText_1us83_12",
4323
+ footTextMd: "_footTextMd_1us83_17"
4324
+ };
4325
+ //#endregion
4326
+ //#region src/shared/components/PanelFoot.tsx
4327
+ function PanelFoot({ text, size = "sm", children }) {
4328
+ 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);
3944
4329
  }
3945
4330
  //#endregion
3946
4331
  //#region src/app/layouts/rightbar/MarketView.tsx
@@ -3950,48 +4335,6 @@ var CONFIRM_UNINSTALL = [
3950
4335
  "uninstall-plugin"
3951
4336
  ];
3952
4337
  var CONFIRM_REMOVE = ["remove-bundle"];
3953
- function MarketLine({ t, row, pending, failure, onAct }) {
3954
- const running = pending !== null && pending.id === row.id ? pending : null;
3955
- const locked = pending !== null;
3956
- const actions = marketActions$1(row);
3957
- const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3958
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3959
- className: MarketPage_module_default.marketIcon,
3960
- "aria-hidden": "true"
3961
- }, /* @__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", {
3962
- from: row.version.installed,
3963
- to: row.version.latest
3964
- }) : row.version.installed ?? row.version.latest ?? "")), /* @__PURE__ */ h("span", {
3965
- className: MarketPage_module_default.marketDesc,
3966
- role: "img",
3967
- "aria-label": stateText
3968
- }, row.state === "checking" ? /* @__PURE__ */ h(StateDot, {
3969
- state: "ongoing",
3970
- size: 14
3971
- }) : /* @__PURE__ */ h(StateDot, {
3972
- state: MARKET_DOT[row.state],
3973
- size: 9
3974
- }), 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(StateDot, {
3975
- state: "ongoing",
3976
- size: 14
3977
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
3978
- const danger = action === "uninstall" || action === "remove-bundle";
3979
- return /* @__PURE__ */ h(Button, {
3980
- key: action,
3981
- type: "button",
3982
- size: "sm",
3983
- variant: action === "install" ? "primary" : "outline",
3984
- className: danger ? "wb-dangerAction" : void 0,
3985
- icon: danger ? /* @__PURE__ */ h(IconTrashOutlineRegular, { size: 13 }) : void 0,
3986
- "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
3987
- disabled: locked,
3988
- onClick: () => onAct(action)
3989
- }, t(ACTION_LABEL_KEY[action]));
3990
- }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", {
3991
- className: MarketPage_module_default.marketNote,
3992
- title: row.note.params.reason === void 0 ? void 0 : t("panels.market.moduleRefusedDetail", row.note.params)
3993
- }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3994
- }
3995
4338
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
3996
4339
  const [acknowledged, setAcknowledged] = useState(false);
3997
4340
  return /* @__PURE__ */ h(RiskConfirmation, {
@@ -4008,24 +4351,33 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
4008
4351
  onConfirm
4009
4352
  });
4010
4353
  }
4011
- function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmActions, onConfirming }) {
4012
- if (rows.length === 0) return null;
4013
- 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, {
4014
- key: row.id,
4354
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
4355
+ const failureOf = (id) => failed?.id === id ? failed.message : null;
4356
+ return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ h(MarketSection, {
4015
4357
  t,
4016
- row,
4358
+ rows: self === void 0 ? [] : [self],
4359
+ onDefault: setDefault,
4360
+ boardBusy,
4017
4361
  pending,
4018
- failure: failureOf(row.id),
4019
- onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action)
4020
- }))));
4021
- }
4022
- function MarketBody({ t, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming }) {
4023
- const failureOf = (id) => failed?.id === id ? failed.message : null;
4024
- return /* @__PURE__ */ h(Fragment, null, notice === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, notice), marketSections(shown).map((section) => /* @__PURE__ */ h(MarketSection, {
4362
+ failureOf,
4363
+ act,
4364
+ confirmActions: CONFIRM_UNINSTALL,
4365
+ onConfirming
4366
+ }), self === void 0 ? null : /* @__PURE__ */ h("div", {
4367
+ className: MarketPage_module_default.marketSelfDivider,
4368
+ "aria-hidden": "true"
4369
+ }), [
4370
+ ...shown,
4371
+ ...installedList,
4372
+ ...pluginList
4373
+ ].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, {
4025
4374
  key: section.id,
4026
4375
  t,
4027
4376
  titleKey: section.titleKey,
4377
+ icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
4028
4378
  rows: section.rows,
4379
+ onDefault: setDefault,
4380
+ boardBusy,
4029
4381
  pending,
4030
4382
  failureOf,
4031
4383
  act,
@@ -4034,7 +4386,10 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4034
4386
  })), /* @__PURE__ */ h(MarketSection, {
4035
4387
  t,
4036
4388
  titleKey: "panels.market.sectionPlugins",
4389
+ icon: marketSectionIcon("plugins"),
4037
4390
  rows: pluginList,
4391
+ onDefault: setDefault,
4392
+ boardBusy,
4038
4393
  pending,
4039
4394
  failureOf,
4040
4395
  act,
@@ -4043,7 +4398,10 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4043
4398
  }), /* @__PURE__ */ h(MarketSection, {
4044
4399
  t,
4045
4400
  titleKey: installedList.length > 0 && installedList.every((row) => row.local === true) ? "panels.market.sectionLocal" : "panels.market.sectionUnlisted",
4401
+ icon: marketSectionIcon("local"),
4046
4402
  rows: installedList,
4403
+ onDefault: setDefault,
4404
+ boardBusy,
4047
4405
  pending,
4048
4406
  failureOf,
4049
4407
  act,
@@ -4060,7 +4418,7 @@ function MarketBody({ t, shown, pluginList, installedList, shared, pending, fail
4060
4418
  act
4061
4419
  }));
4062
4420
  }
4063
- function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, plugins, settling, mock }) {
4421
+ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, workbench, plugins, settling, mock, defaults = [], changed = {} }) {
4064
4422
  const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
4065
4423
  useEffect(() => {
4066
4424
  if (mock === void 0) setTitles((known) => mergeTitles(known, manifests));
@@ -4068,87 +4426,72 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4068
4426
  const catalog = mock?.manifests ?? manifests;
4069
4427
  const effective = mock === void 0 ? capabilities : mock.capabilities;
4070
4428
  const source = liveManifests(catalog, effective, mock === void 0 && installed !== void 0 ? new Set(installed.map((item) => item.unit)) : null);
4071
- const rows = marketRows(source, effective, mock?.updates ?? updates ?? {});
4429
+ const byDefault = new Set(defaults);
4430
+ const rows = marketRows(source, effective, mock?.updates ?? updates ?? {}, byDefault, changed);
4072
4431
  const shared = sharedRows(source, effective);
4073
4432
  const [pending, setPending] = useState(mock?.pending ?? null);
4074
4433
  const provision = useHostWrite({
4075
4434
  channel: "provision",
4076
4435
  networkText: t("panels.failed")
4077
4436
  });
4437
+ const boardWrite = useHostWrite({
4438
+ channel: "prefs",
4439
+ resource: "panels",
4440
+ networkText: t("panels.failed")
4441
+ });
4442
+ const [boardBusy, setBoardBusy] = useState(false);
4443
+ const setDefault = async (id, next) => {
4444
+ if (mock !== void 0) return;
4445
+ setBoardBusy(true);
4446
+ const outcome = await boardWrite.send({
4447
+ action: next ? "show" : "hide",
4448
+ id,
4449
+ scope: "machine"
4450
+ });
4451
+ setBoardBusy(false);
4452
+ if (!outcome.ok) setNotice(t("panels.failed"));
4453
+ };
4078
4454
  const [confirming, setConfirming] = useState(mock?.confirming ?? null);
4079
4455
  const [failed, setFailed] = useState(mock?.failure ?? null);
4080
4456
  const [notice, setNotice] = useState(mock?.notice ?? null);
4081
4457
  const removing = pending !== null && pending.action === "remove-bundle" && failed?.id !== pending.id ? pending.id : null;
4082
- 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);
4083
- const pendingRow = removing === null || pending === null || rows.some((row) => row.id === removing) ? void 0 : {
4084
- id: removing,
4085
- titleKey: pending.titleKey ?? titles.get(removing) ?? removing,
4086
- state: "installed",
4087
- canInstall: false,
4088
- canUpdate: false,
4089
- canUninstall: true,
4090
- ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
4091
- ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
4092
- };
4458
+ 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);
4459
+ const pendingRow = pendingRowOf({
4460
+ pending,
4461
+ removing,
4462
+ rows,
4463
+ titles
4464
+ });
4093
4465
  const shown = pendingRow === void 0 ? rows : [...rows, pendingRow];
4094
- const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? []);
4466
+ const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
4467
+ const pluginList = installedPluginRows(mock?.plugins ?? plugins ?? [], byDefault, changed);
4095
4468
  const rowById = new Map([
4096
4469
  ...shown,
4470
+ ...self === void 0 ? [] : [self],
4097
4471
  ...installedList,
4098
4472
  ...pluginList
4099
4473
  ].map((row) => [row.id, row]));
4100
4474
  const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
4101
- const act = async (id, action) => {
4102
- if (mock !== void 0) return;
4103
- const row = rowById.get(id);
4104
- setPending({
4105
- id,
4106
- action,
4107
- ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
4108
- ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
4109
- ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
4110
- });
4111
- setConfirming(null);
4112
- setFailed(null);
4113
- if (action !== "uninstall-plugin") setNotice(null);
4114
- const dependency = action === "update-dependency";
4115
- const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin";
4116
- const outcome = await provision.send(dependency ? {
4117
- action,
4118
- id
4119
- } : byName ? {
4120
- action,
4121
- name: row?.pkg ?? ""
4122
- } : {
4123
- action,
4124
- unit: id
4125
- });
4126
- setPending(null);
4127
- if (!outcome.ok) {
4128
- onChanged();
4129
- setFailed({
4130
- id,
4131
- message: t("panels.market.failed", { reason: outcome.message })
4132
- });
4133
- return;
4134
- }
4135
- if (action === "uninstall-plugin") {
4136
- const kept = installedPluginKept(outcome.value);
4137
- setNotice(kept === void 0 ? null : t(kept.key, kept.names === void 0 ? {} : { names: kept.names.join(t("panels.market.listSeparator")) }));
4138
- }
4139
- const reason = changeFailure(changeOf(outcome.value), t);
4140
- onChanged();
4141
- if (reason !== void 0) setFailed({
4142
- id,
4143
- message: t("panels.market.failed", { reason })
4144
- });
4145
- };
4475
+ const act = marketActOf({
4476
+ t,
4477
+ mocked: mock !== void 0,
4478
+ rowOf: (id) => rowById.get(id),
4479
+ seats: {
4480
+ setPending,
4481
+ setConfirming,
4482
+ setFailed,
4483
+ setNotice
4484
+ },
4485
+ send: (body) => provision.send(body),
4486
+ onChanged
4487
+ });
4146
4488
  const settled = marketSettled(freshness, installedRead);
4147
- const nothing = shown.length === 0 && installedList.length === 0 && pluginList.length === 0;
4489
+ const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
4148
4490
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketChecking, { t });
4149
4491
  if (nothing) return /* @__PURE__ */ h(MarketEmpty, { t });
4150
4492
  return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(MarketBody, {
4151
4493
  t,
4494
+ self,
4152
4495
  shown,
4153
4496
  pluginList,
4154
4497
  installedList,
@@ -4157,7 +4500,9 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4157
4500
  failed,
4158
4501
  notice,
4159
4502
  act,
4160
- onConfirming: setConfirming
4503
+ onConfirming: setConfirming,
4504
+ setDefault,
4505
+ boardBusy
4161
4506
  }), /* @__PURE__ */ h(ConfirmUninstall, {
4162
4507
  key: confirming ?? "",
4163
4508
  t,
@@ -4173,6 +4518,182 @@ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates,
4173
4518
  }));
4174
4519
  }
4175
4520
  //#endregion
4521
+ //#region src/modules/sessions/model/session-node.ts
4522
+ function visiblePendingKind(kind) {
4523
+ switch (kind) {
4524
+ case "approval":
4525
+ case "plan-review":
4526
+ case "question": return kind;
4527
+ default: return;
4528
+ }
4529
+ }
4530
+ function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
4531
+ const status = statusById.get(summary.id);
4532
+ const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
4533
+ let runningSubagentCount = 0;
4534
+ for (const child of catalog ?? []) {
4535
+ const childStatus = statusById.get(child.id);
4536
+ const childRow = list.byId[child.id];
4537
+ if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
4538
+ }
4539
+ return {
4540
+ id: summary.id,
4541
+ title: summary.blank ? "" : summary.displayTitle,
4542
+ blank: summary.blank,
4543
+ running: status?.running ?? summary.running,
4544
+ runningSubagentCount,
4545
+ completed: status?.completionUnread === true,
4546
+ pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
4547
+ updatedAt: summary.updatedAt,
4548
+ pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
4549
+ };
4550
+ }
4551
+ function sessionStatuses(node, t) {
4552
+ const subagents = node.runningSubagentCount > 0 ? {
4553
+ state: "ongoing",
4554
+ label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
4555
+ } : void 0;
4556
+ let pending;
4557
+ switch (node.pendingInteraction) {
4558
+ case "approval":
4559
+ pending = {
4560
+ state: "warning",
4561
+ label: t("status.waitingApproval")
4562
+ };
4563
+ break;
4564
+ case "plan-review":
4565
+ pending = {
4566
+ state: "warning",
4567
+ label: t("status.planReview")
4568
+ };
4569
+ break;
4570
+ case "question":
4571
+ pending = {
4572
+ state: "warning",
4573
+ label: t("status.waitingAnswer")
4574
+ };
4575
+ break;
4576
+ default: pending = void 0;
4577
+ }
4578
+ if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
4579
+ if (node.running) {
4580
+ const primary = {
4581
+ state: "ongoing",
4582
+ label: t("status.running")
4583
+ };
4584
+ return subagents === void 0 ? [primary] : [primary, subagents];
4585
+ }
4586
+ if (subagents !== void 0) return [subagents];
4587
+ if (node.completed) return [{
4588
+ state: "done",
4589
+ label: t("status.completed")
4590
+ }];
4591
+ return [{
4592
+ state: "idle",
4593
+ label: t("status.idle")
4594
+ }];
4595
+ }
4596
+ function currentSessionId(list, panelActive) {
4597
+ if (panelActive) return void 0;
4598
+ return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
4599
+ }
4600
+ function orderSessionRows(rows, pinnedIds, archivedIds) {
4601
+ const placeholders = [];
4602
+ const leading = [];
4603
+ const rest = [];
4604
+ for (const row of rows) if (row.blank) placeholders.push(row);
4605
+ else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
4606
+ else rest.push(row);
4607
+ return [
4608
+ ...placeholders,
4609
+ ...leading,
4610
+ ...rest
4611
+ ];
4612
+ }
4613
+ function workspaceOfSession(workspaces, sessionId) {
4614
+ if (sessionId === void 0) return null;
4615
+ return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
4616
+ }
4617
+ function sessionRows(workspaceSessionIds, list, archivedIds, current) {
4618
+ const rows = [];
4619
+ for (const id of workspaceSessionIds) {
4620
+ if (archivedIds.has(id)) continue;
4621
+ const row = list.byId[id];
4622
+ if (row === void 0 || row.origin === "subagent") continue;
4623
+ if (row.blank && row.id !== current) continue;
4624
+ rows.push(row);
4625
+ }
4626
+ return rows;
4627
+ }
4628
+ //#endregion
4629
+ //#region src/app/layouts/project-selection.ts
4630
+ var listeners$1 = /* @__PURE__ */ new Set();
4631
+ function selectedProjectId() {
4632
+ const stored = readText(STORAGE_KEY_PROJECT);
4633
+ return stored === "" ? null : stored;
4634
+ }
4635
+ function selectProject(workspaceId) {
4636
+ writeText(STORAGE_KEY_PROJECT, workspaceId);
4637
+ for (const listener of [...listeners$1]) try {
4638
+ listener();
4639
+ } catch {}
4640
+ }
4641
+ function subscribeProject(listener) {
4642
+ listeners$1.add(listener);
4643
+ return () => {
4644
+ listeners$1.delete(listener);
4645
+ };
4646
+ }
4647
+ //#endregion
4648
+ //#region src/app/layouts/rightbar/use-panels.ts
4649
+ function shouldDropPanels(workspace, previous) {
4650
+ return workspace !== previous;
4651
+ }
4652
+ function useEnabledUnits(refreshToken, workspace) {
4653
+ const [enabled, setEnabled] = useState(null);
4654
+ const lastWorkspace = useRef(workspace);
4655
+ useEffect(() => {
4656
+ let cancelled = false;
4657
+ if (shouldDropPanels(workspace, lastWorkspace.current)) {
4658
+ lastWorkspace.current = workspace;
4659
+ setEnabled(null);
4660
+ }
4661
+ const read = async () => {
4662
+ const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
4663
+ if (cancelled) return;
4664
+ if (response?.ok === true && Array.isArray(response.units)) setEnabled({
4665
+ units: response.units,
4666
+ plugins: Array.isArray(response.plugins) ? response.plugins : [],
4667
+ defaults: Array.isArray(response.defaults) ? response.defaults : [],
4668
+ own: response.own === true,
4669
+ changed: response.changed ?? {}
4670
+ });
4671
+ };
4672
+ read();
4673
+ return () => {
4674
+ cancelled = true;
4675
+ };
4676
+ }, [
4677
+ refreshToken,
4678
+ useFactRevision("panels"),
4679
+ workspace
4680
+ ]);
4681
+ return enabled;
4682
+ }
4683
+ function useSelectedProjectId() {
4684
+ const [id, setId] = useState(() => selectedProjectId());
4685
+ useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
4686
+ return id;
4687
+ }
4688
+ function useBoardWorkspace(workspaces, sessions) {
4689
+ const projectId = useSelectedProjectId();
4690
+ const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
4691
+ return {
4692
+ workspace,
4693
+ path: workspace?.path ?? null
4694
+ };
4695
+ }
4696
+ //#endregion
4176
4697
  //#region src/shared/api/bundle-install.ts
4177
4698
  var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
4178
4699
  var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
@@ -4202,10 +4723,11 @@ function readInstalledPlugins(force = false) {
4202
4723
  var state = {
4203
4724
  modules: null,
4204
4725
  plugins: null,
4726
+ workbench: null,
4205
4727
  read: false,
4206
4728
  checkedAt: null
4207
4729
  };
4208
- var listeners$1 = /* @__PURE__ */ new Set();
4730
+ var listeners = /* @__PURE__ */ new Set();
4209
4731
  var inFlight = null;
4210
4732
  var readSeq = 0;
4211
4733
  var newestForceSeq = -1;
@@ -4213,14 +4735,14 @@ function moduleVersionsValue() {
4213
4735
  return state;
4214
4736
  }
4215
4737
  function subscribeModuleVersions(listener) {
4216
- listeners$1.add(listener);
4738
+ listeners.add(listener);
4217
4739
  return () => {
4218
- listeners$1.delete(listener);
4740
+ listeners.delete(listener);
4219
4741
  };
4220
4742
  }
4221
4743
  function publish(next) {
4222
4744
  state = next;
4223
- for (const listener of [...listeners$1]) listener();
4745
+ for (const listener of [...listeners]) listener();
4224
4746
  }
4225
4747
  function runModuleVersionsRead(force = false) {
4226
4748
  if (inFlight !== null && inFlight.force === force) return inFlight.promise;
@@ -4233,6 +4755,7 @@ function runModuleVersionsRead(force = false) {
4233
4755
  publish({
4234
4756
  modules: versions?.ok === true ? versions.modules : state.modules,
4235
4757
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
4758
+ workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
4236
4759
  read: true,
4237
4760
  checkedAt: Date.now()
4238
4761
  });
@@ -4265,6 +4788,7 @@ function useModuleVersions() {
4265
4788
  return {
4266
4789
  modules: value.modules,
4267
4790
  plugins: value.plugins,
4791
+ workbench: value.workbench,
4268
4792
  read: value.read,
4269
4793
  checkedAt: value.checkedAt,
4270
4794
  reload
@@ -4489,7 +5013,9 @@ function AddModulePreview({ t, state }) {
4489
5013
  const preview = state.preview;
4490
5014
  if (preview === null) return null;
4491
5015
  const source = preview.registry === "" ? t("panels.market.add.registryDefault") : preview.registry;
4492
- 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)));
5016
+ const plugin = preview.kind === "plugin";
5017
+ const pluginName = plugin ? preview.pluginName : void 0;
5018
+ 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);
4493
5019
  }
4494
5020
  function AddModuleResult({ t, state }) {
4495
5021
  const outcome = state.outcome;
@@ -4497,26 +5023,27 @@ function AddModuleResult({ t, state }) {
4497
5023
  const reason = failureReason(failureCode(outcome.change), outcome.change.application, t);
4498
5024
  const supply = supplyKey(outcome.supply.state);
4499
5025
  const builds = state.builds;
4500
- const failed = outcome.change.application === "failed";
4501
- const restart = outcome.change.application === "restart-required";
4502
- const cancelled = outcome.change.application === "cancelled";
4503
- const notModule = outcome.supply.state === "not-a-module";
4504
5026
  const plugin = outcome.plugin;
5027
+ const kind = resultKindOf({
5028
+ change: outcome.change,
5029
+ supplyState: outcome.supply.state,
5030
+ plugin: plugin !== void 0
5031
+ });
4505
5032
  const name = outcome.module.kind === "module" ? outcome.module.unit : outcome.module.pkg;
4506
5033
  return /* @__PURE__ */ h("div", { className: AddModule_module_default.body }, /* @__PURE__ */ h("div", { className: AddModule_module_default.hero }, /* @__PURE__ */ h("span", {
4507
5034
  className: AddModule_module_default.heroIcon,
4508
- "data-state": failed ? "error" : cancelled ? "idle" : "done",
5035
+ "data-state": kind === "failed" ? "error" : kind === "cancelled" ? "idle" : "done",
4509
5036
  "aria-hidden": "true"
4510
- }, failed ? /* @__PURE__ */ h(IconWarningOutlineRegular, { size: 28 }) : cancelled ? /* @__PURE__ */ h(StateDot, {
5037
+ }, kind === "failed" ? /* @__PURE__ */ h(IconWarningOutlineRegular, { size: 28 }) : kind === "cancelled" ? /* @__PURE__ */ h(StateDot, {
4511
5038
  state: "idle",
4512
5039
  size: 28
4513
5040
  }) : /* @__PURE__ */ h(IconCheckCircleFillRegular, { size: 28 })), /* @__PURE__ */ h("h2", {
4514
5041
  className: AddModule_module_default.wizardTitle,
4515
- role: failed ? "alert" : "status"
4516
- }, 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", {
5042
+ role: kind === "failed" ? "alert" : "status"
5043
+ }, 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", {
4517
5044
  className: AddModule_module_default.resultWarn,
4518
5045
  role: "alert"
4519
- }, 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)));
5046
+ }, 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)));
4520
5047
  }
4521
5048
  //#endregion
4522
5049
  //#region src/app/layouts/market/add-module-mock.ts
@@ -4593,6 +5120,7 @@ var ADD_MODULE_MOCKS = [
4593
5120
  phase: "preview",
4594
5121
  spec: "@dsh-workbench/module-hello",
4595
5122
  preview: {
5123
+ kind: "module",
4596
5124
  name: "@dsh-workbench/module-hello",
4597
5125
  version: "0.1.2",
4598
5126
  description: "最小样本模块:一枚「你好」卡片",
@@ -4605,12 +5133,27 @@ var ADD_MODULE_MOCKS = [
4605
5133
  phase: "preview",
4606
5134
  spec: "@dsh-workbench/module-hello",
4607
5135
  preview: {
5136
+ kind: "module",
4608
5137
  name: "@dsh-workbench/module-hello",
4609
5138
  version: "",
4610
5139
  description: "",
4611
5140
  registry: ""
4612
5141
  }
4613
5142
  },
5143
+ {
5144
+ id: "preview-plugin",
5145
+ label: "预览(opencli 插件)",
5146
+ phase: "preview",
5147
+ spec: "opencli-plugin-grafana",
5148
+ preview: {
5149
+ kind: "plugin",
5150
+ name: "opencli-plugin-grafana",
5151
+ version: "1.0.16",
5152
+ description: "",
5153
+ registry: "registry.npmmirror.com",
5154
+ pluginName: "grafana"
5155
+ }
5156
+ },
4614
5157
  {
4615
5158
  id: "installing",
4616
5159
  label: "正在安装(可取消)",
@@ -4900,12 +5443,7 @@ function useAddModule(options) {
4900
5443
  setPhase("idle");
4901
5444
  return;
4902
5445
  }
4903
- setPreview({
4904
- name: inspection.name ?? wanted,
4905
- version: inspection.version ?? "",
4906
- description: inspection.description ?? "",
4907
- registry: inspection.registry ?? ""
4908
- });
5446
+ setPreview(previewOf(inspection, wanted));
4909
5447
  setPhase("preview");
4910
5448
  });
4911
5449
  }, [spec, registry]);
@@ -5127,8 +5665,8 @@ function makeMarketEntryIcon(units) {
5127
5665
  return function MarketEntryIcon({ size = 16 }) {
5128
5666
  const manifests = useLiveManifests(units);
5129
5667
  const { capabilities } = useCapabilityMap(0);
5130
- const { modules } = useModuleVersions();
5131
- const hasUpdates = marketHintVisible(manifests, capabilities, modules);
5668
+ const { modules, workbench } = useModuleVersions();
5669
+ const hasUpdates = marketHintVisible(manifests, capabilities, modules, workbench);
5132
5670
  useEffect(() => {
5133
5671
  publishPanelHint(MARKET_PANEL_ID, hasUpdates ? { labelKey: "panels.market.hasNew" } : null);
5134
5672
  return () => publishPanelHint(MARKET_PANEL_ID, null);
@@ -5139,8 +5677,10 @@ function makeMarketEntryIcon(units) {
5139
5677
  function MarketPanel({ t, units }) {
5140
5678
  const manifests = useLiveManifests(units);
5141
5679
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
5142
- const { modules, plugins, read: installedRead, reload: reloadVersions } = useModuleVersions();
5680
+ const { modules, plugins, workbench, read: installedRead, reload: reloadVersions } = useModuleVersions();
5681
+ const machineBoard = useEnabledUnits(0, null);
5143
5682
  const [adding, setAdding] = useState(false);
5683
+ const openAddModule = useCallback(() => setAdding(true), []);
5144
5684
  const updates = useMemo(() => marketUpdatesOf(modules), [modules]);
5145
5685
  const installed = modules === null ? void 0 : withClientRefusals(modules, units.refusals());
5146
5686
  const reload = useCallback(() => {
@@ -5220,7 +5760,7 @@ function MarketPanel({ t, units }) {
5220
5760
  className: MarketPage_module_default.marketAddButton,
5221
5761
  icon: /* @__PURE__ */ h(IconPlusOutlineRegular, { size: 13 }),
5222
5762
  disabled: busy,
5223
- onClick: () => setAdding(true)
5763
+ onClick: openAddModule
5224
5764
  }, t("panels.market.add.open")))), fixturePick.enabled ? /* @__PURE__ */ h(MockStrip, {
5225
5765
  mocks: marketMocks,
5226
5766
  index: fixturePick.index,
@@ -5235,9 +5775,12 @@ function MarketPanel({ t, units }) {
5235
5775
  updates,
5236
5776
  installed,
5237
5777
  installedRead: shownRead,
5778
+ workbench,
5238
5779
  plugins,
5239
5780
  settling: mock === void 0 ? settling : void 0,
5240
- mock
5781
+ mock,
5782
+ defaults: machineBoard?.defaults ?? [],
5783
+ changed: machineBoard?.changed ?? {}
5241
5784
  }), /* @__PURE__ */ h(AddModuleDialog, {
5242
5785
  t,
5243
5786
  open: adding,
@@ -5262,25 +5805,6 @@ function registerMarketPanel(ctx, units) {
5262
5805
  }, MarketPanel));
5263
5806
  }
5264
5807
  //#endregion
5265
- //#region src/app/layouts/project-selection.ts
5266
- var listeners = /* @__PURE__ */ new Set();
5267
- function selectedProjectId() {
5268
- const stored = readText(STORAGE_KEY_PROJECT);
5269
- return stored === "" ? null : stored;
5270
- }
5271
- function selectProject(workspaceId) {
5272
- writeText(STORAGE_KEY_PROJECT, workspaceId);
5273
- for (const listener of [...listeners]) try {
5274
- listener();
5275
- } catch {}
5276
- }
5277
- function subscribeProject(listener) {
5278
- listeners.add(listener);
5279
- return () => {
5280
- listeners.delete(listener);
5281
- };
5282
- }
5283
- //#endregion
5284
5808
  //#region src/shared/api/diy.ts
5285
5809
  var DIY_PRESET_ID = "workbench-diy";
5286
5810
  var WORKSHOP_TITLE = "工作台DIY";
@@ -6218,20 +6742,26 @@ function BoardMockStrip({ fixtures, show }) {
6218
6742
  });
6219
6743
  }
6220
6744
  var ModulesPage_module_default = {
6221
- trigger: "_trigger_1weg4_1",
6222
- pop: "_pop_1weg4_7",
6223
- head: "_head_1weg4_21",
6224
- title: "_title_1weg4_29",
6225
- reset: "_reset_1weg4_37",
6226
- list: "_list_1weg4_59",
6227
- row: "_row_1weg4_68",
6228
- rowOver: "_rowOver_1weg4_83",
6229
- ghost: "_ghost_1weg4_93",
6230
- grip: "_grip_1weg4_108",
6231
- label: "_label_1weg4_116",
6232
- name: "_name_1weg4_123",
6233
- error: "_error_1weg4_134",
6234
- dep: "_dep_1weg4_142"
6745
+ trigger: "_trigger_1yptb_1",
6746
+ pop: "_pop_1yptb_6",
6747
+ head: "_head_1yptb_20",
6748
+ title: "_title_1yptb_28",
6749
+ rowControls: "_rowControls_1yptb_36",
6750
+ followBox: "_followBox_1yptb_43",
6751
+ switchFollowing: "_switchFollowing_1yptb_49",
6752
+ reset: "_reset_1yptb_53",
6753
+ list: "_list_1yptb_75",
6754
+ row: "_row_1yptb_36",
6755
+ rowOver: "_rowOver_1yptb_99",
6756
+ ghost: "_ghost_1yptb_109",
6757
+ grip: "_grip_1yptb_124",
6758
+ label: "_label_1yptb_132",
6759
+ name: "_name_1yptb_139",
6760
+ error: "_error_1yptb_150",
6761
+ dep: "_dep_1yptb_158",
6762
+ pluginList: "_pluginList_1yptb_166",
6763
+ pluginRow: "_pluginRow_1yptb_171",
6764
+ plugin: "_plugin_1yptb_166"
6235
6765
  };
6236
6766
  //#endregion
6237
6767
  //#region src/app/layouts/rightbar/panel-mock.ts
@@ -6244,6 +6774,23 @@ function row$1(id, titleKey, shown) {
6244
6774
  hasCard: true
6245
6775
  };
6246
6776
  }
6777
+ function plugin(id, pkg, title, shown) {
6778
+ return {
6779
+ id,
6780
+ pkg,
6781
+ title,
6782
+ shown,
6783
+ source: "user"
6784
+ };
6785
+ }
6786
+ var PLUGIN_MOCK = {
6787
+ id: "plugin",
6788
+ label: "opencli 插件行(标出是插件,能开能关)",
6789
+ units: [],
6790
+ plugins: [plugin("plugin:opencli-plugin-cmdb", "opencli-plugin-cmdb", "cmdb", true), plugin("plugin:opencli-plugin-notes", "opencli-plugin-notes", "notes", false)],
6791
+ capabilities: {},
6792
+ expect: { rows: 0 }
6793
+ };
6247
6794
  function probe(unit, status) {
6248
6795
  return { [unit]: {
6249
6796
  unit,
@@ -6261,7 +6808,7 @@ function buildPanelMocks(roster) {
6261
6808
  units: [],
6262
6809
  capabilities: {},
6263
6810
  expect: { rows: 0 }
6264
- }];
6811
+ }, PLUGIN_MOCK];
6265
6812
  const titleKey = found.card?.titleKey ?? found.id;
6266
6813
  const id = found.id;
6267
6814
  const on = row$1(id, titleKey, true);
@@ -6407,7 +6954,8 @@ function buildPanelMocks(roster) {
6407
6954
  rows: 3,
6408
6955
  on: true
6409
6956
  }
6410
- }
6957
+ },
6958
+ PLUGIN_MOCK
6411
6959
  ];
6412
6960
  }
6413
6961
  //#endregion
@@ -6427,6 +6975,29 @@ function panelBadgeKey(capability) {
6427
6975
  if (capability.status === "missing-commands") return "panels.dep.missingCommands";
6428
6976
  return "panels.dep.unchecked";
6429
6977
  }
6978
+ function moduleRow(unit, capability) {
6979
+ const badge = panelBadgeKey(capability);
6980
+ return {
6981
+ id: unit.id,
6982
+ titleKey: unit.titleKey,
6983
+ plugin: false,
6984
+ ...badge === void 0 ? {} : { badgeKey: badge },
6985
+ shown: unit.shown,
6986
+ source: unit.source
6987
+ };
6988
+ }
6989
+ function pluginRow(plugin) {
6990
+ return {
6991
+ id: plugin.id,
6992
+ title: plugin.title,
6993
+ plugin: true,
6994
+ shown: plugin.shown,
6995
+ source: plugin.source
6996
+ };
6997
+ }
6998
+ function selectPanelRows(units, plugins, capabilities) {
6999
+ return [...selectPanelUnits(units, capabilities).map((unit) => moduleRow(unit, capabilities?.[unit.id])), ...plugins.map(pluginRow)];
7000
+ }
6430
7001
  function selectBoardModules(units, byId, capabilities) {
6431
7002
  if (units === null) return [];
6432
7003
  return units.filter((unit) => unit.shown && available(capabilities?.[unit.id])).map((unit) => byId(unit.id)).filter((module) => module !== void 0);
@@ -6440,13 +7011,56 @@ function aggregateSummaries(summaries) {
6440
7011
  };
6441
7012
  }
6442
7013
  //#endregion
7014
+ //#region src/app/layouts/rightbar/PanelRowControls.tsx
7015
+ function PanelRowControls({ t, unit, label, busy, onWrite }) {
7016
+ return /* @__PURE__ */ h("span", { className: ModulesPage_module_default.rowControls }, /* @__PURE__ */ h(Checkbox, {
7017
+ checked: unit.source !== "user",
7018
+ disabled: busy,
7019
+ label: t("panels.followGlobal"),
7020
+ title: t("panels.followGlobalHint"),
7021
+ className: ModulesPage_module_default.followBox,
7022
+ onChange: (next) => onWrite(next ? {
7023
+ action: "follow",
7024
+ id: unit.id
7025
+ } : {
7026
+ action: unit.shown ? "show" : "hide",
7027
+ id: unit.id
7028
+ })
7029
+ }), /* @__PURE__ */ h("span", { className: unit.source === "user" ? void 0 : ModulesPage_module_default.switchFollowing }, /* @__PURE__ */ h(Switch, {
7030
+ checked: unit.shown,
7031
+ label: `${label} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
7032
+ disabled: busy,
7033
+ onChange: (next) => onWrite({
7034
+ action: next ? "show" : "hide",
7035
+ id: unit.id
7036
+ })
7037
+ })));
7038
+ }
7039
+ //#endregion
7040
+ //#region src/app/layouts/rightbar/PanelPluginRows.tsx
7041
+ function PanelPluginRows({ t, rows, busy, onWrite }) {
7042
+ if (rows.length === 0) return null;
7043
+ return /* @__PURE__ */ h("ul", { className: `${ModulesPage_module_default.list} ${ModulesPage_module_default.pluginList}` }, rows.map((row) => /* @__PURE__ */ h("li", {
7044
+ className: `${ModulesPage_module_default.row} ${ModulesPage_module_default.pluginRow}`,
7045
+ key: row.id
7046
+ }, /* @__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, {
7047
+ t,
7048
+ unit: row,
7049
+ label: row.title ?? row.id,
7050
+ busy,
7051
+ onWrite
7052
+ }))));
7053
+ }
7054
+ //#endregion
6443
7055
  //#region src/app/layouts/rightbar/ModulesPage.tsx
6444
7056
  var BLANK_DRAG_IMAGE = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
6445
- function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpenMarket, mocked = false, mock }) {
7057
+ function ModulesPage({ t, units, plugins = [], workspace, capabilities, loading = false, onOpenMarket, mocked = false, mock, own = false }) {
6446
7058
  const [drag, setDrag] = useState(mock?.drag ?? null);
6447
7059
  const [busy, setBusy] = useState(mock?.busy ?? false);
6448
7060
  const [failed, setFailed] = useState(mock?.failed ?? false);
6449
- const rows = selectPanelUnits(units, capabilities);
7061
+ const rows = selectPanelRows(units, plugins, capabilities);
7062
+ const modules = rows.filter((row) => !row.plugin);
7063
+ const pluginRows = rows.filter((row) => row.plugin);
6450
7064
  const empty = !loading && rows.length === 0;
6451
7065
  const prefWrite = useHostWrite({
6452
7066
  channel: "prefs",
@@ -6464,9 +7078,10 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6464
7078
  setBusy(false);
6465
7079
  if (!outcome.ok) setFailed(true);
6466
7080
  };
7081
+ const writeRow = (body) => void write(body);
6467
7082
  const drop = () => {
6468
7083
  if (drag === null) return;
6469
- const moved = rows[drag.from];
7084
+ const moved = modules[drag.from];
6470
7085
  setDrag(null);
6471
7086
  if (moved === void 0 || drag.from === drag.over) return;
6472
7087
  write({
@@ -6475,14 +7090,14 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6475
7090
  index: drag.over
6476
7091
  });
6477
7092
  };
6478
- const dragging = drag === null ? void 0 : rows[drag.from];
7093
+ const dragging = drag === null ? void 0 : modules[drag.from];
6479
7094
  return /* @__PURE__ */ h(Fragment, null, drag?.at === void 0 || dragging === void 0 ? null : /* @__PURE__ */ h("div", {
6480
7095
  className: ModulesPage_module_default.ghost,
6481
7096
  style: {
6482
7097
  left: `${drag.at.x + 12}px`,
6483
7098
  top: `${drag.at.y - 12}px`
6484
7099
  }
6485
- }, t(dragging.titleKey)), empty ? /* @__PURE__ */ h(CenteredState, {
7100
+ }, t(dragging.titleKey ?? dragging.id)), empty ? /* @__PURE__ */ h(CenteredState, {
6486
7101
  compact: true,
6487
7102
  icon: null,
6488
7103
  title: t("panels.noneInstalled"),
@@ -6493,60 +7108,59 @@ function ModulesPage({ t, units, workspace, capabilities, loading = false, onOpe
6493
7108
  variant: "outline",
6494
7109
  onClick: onOpenMarket
6495
7110
  }, t("panels.browseMarket"))
6496
- }) : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, rows.map((unit, index) => {
6497
- const badge = panelBadgeKey(capabilities?.[unit.id]);
6498
- const dep = badge === void 0 ? void 0 : t(badge);
6499
- return /* @__PURE__ */ h("li", {
6500
- className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
6501
- key: unit.id,
6502
- draggable: true,
6503
- onDragStart: (event) => {
6504
- const blank = new Image();
6505
- blank.src = BLANK_DRAG_IMAGE;
6506
- event.dataTransfer.setDragImage(blank, 0, 0);
6507
- setDrag({
6508
- from: index,
6509
- over: index,
6510
- at: {
6511
- x: event.clientX,
6512
- y: event.clientY
6513
- }
6514
- });
6515
- },
6516
- onDragOver: (event) => {
6517
- event.preventDefault();
6518
- if (drag !== null) setDrag({
6519
- from: drag.from,
6520
- over: index,
6521
- at: {
6522
- x: event.clientX,
6523
- y: event.clientY
6524
- }
6525
- });
6526
- },
6527
- onDragEnd: drop,
6528
- onDrop: (event) => {
6529
- event.preventDefault();
6530
- drop();
6531
- }
6532
- }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
6533
- className: ModulesPage_module_default.grip,
6534
- "aria-hidden": "true"
6535
- }, "⠿")), /* @__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(Switch, {
6536
- checked: unit.shown,
6537
- label: `${t(unit.titleKey)} · ${unit.shown ? t("panels.enabled") : t("panels.disabled")}`,
6538
- disabled: busy,
6539
- onChange: (next) => void write({
6540
- action: next ? "show" : "hide",
6541
- id: unit.id
6542
- })
6543
- }));
6544
- })), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, /* @__PURE__ */ h("button", {
7111
+ }) : null, modules.length === 0 ? null : /* @__PURE__ */ h("ul", { className: ModulesPage_module_default.list }, modules.map((row, index) => /* @__PURE__ */ h("li", {
7112
+ className: `${ModulesPage_module_default.row}${drag?.over === index ? ` ${ModulesPage_module_default.rowOver}` : ""}`,
7113
+ key: row.id,
7114
+ draggable: true,
7115
+ onDragStart: (event) => {
7116
+ const blank = new Image();
7117
+ blank.src = BLANK_DRAG_IMAGE;
7118
+ event.dataTransfer.setDragImage(blank, 0, 0);
7119
+ setDrag({
7120
+ from: index,
7121
+ over: index,
7122
+ at: {
7123
+ x: event.clientX,
7124
+ y: event.clientY
7125
+ }
7126
+ });
7127
+ },
7128
+ onDragOver: (event) => {
7129
+ event.preventDefault();
7130
+ if (drag !== null) setDrag({
7131
+ from: drag.from,
7132
+ over: index,
7133
+ at: {
7134
+ x: event.clientX,
7135
+ y: event.clientY
7136
+ }
7137
+ });
7138
+ },
7139
+ onDragEnd: drop,
7140
+ onDrop: (event) => {
7141
+ event.preventDefault();
7142
+ drop();
7143
+ }
7144
+ }, /* @__PURE__ */ h(Tip, { label: t("panels.dragHint") }, /* @__PURE__ */ h("span", {
7145
+ className: ModulesPage_module_default.grip,
7146
+ "aria-hidden": "true"
7147
+ }, "⠿")), /* @__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, {
7148
+ t,
7149
+ unit: row,
7150
+ label: t(row.titleKey ?? row.id),
7151
+ busy,
7152
+ onWrite: writeRow
7153
+ })))), /* @__PURE__ */ h(PanelPluginRows, {
7154
+ t,
7155
+ rows: pluginRows,
7156
+ busy,
7157
+ onWrite: writeRow
7158
+ }), /* @__PURE__ */ h(PanelFoot, { text: t("panels.hintEffect") }, own ? /* @__PURE__ */ h("button", {
6545
7159
  type: "button",
6546
7160
  className: ModulesPage_module_default.reset,
6547
7161
  disabled: busy,
6548
7162
  onClick: () => void write({ action: "reset" })
6549
- }, t("panels.reset"))), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
7163
+ }, t("panels.followAll")) : null), failed ? /* @__PURE__ */ h("p", { className: ModulesPage_module_default.error }, t("panels.failed")) : null);
6550
7164
  }
6551
7165
  //#endregion
6552
7166
  //#region src/app/layouts/rightbar/PanelModules.tsx
@@ -6578,7 +7192,7 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
6578
7192
  const panelMock = fixturePick.enabled ? fixturePick.current : void 0;
6579
7193
  const mockNonce = fixturePick.nonce;
6580
7194
  useDismissOnOutsidePointer(root, open, onOpenChange);
6581
- const units = enabledUnits ?? [];
7195
+ const units = enabledUnits?.units ?? [];
6582
7196
  return /* @__PURE__ */ h("div", {
6583
7197
  className: ModulesPage_module_default.trigger,
6584
7198
  ref: root
@@ -6603,8 +7217,10 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
6603
7217
  key: `${panelMock?.id ?? "real-modules"}-${mockNonce}`,
6604
7218
  t,
6605
7219
  units: panelMock?.units ?? units,
7220
+ plugins: panelMock?.plugins ?? enabledUnits?.plugins ?? [],
6606
7221
  capabilities: panelMock === void 0 ? fixturePick.enabled ? null : capabilities : panelMock.capabilities,
6607
7222
  loading: enabledUnits === null,
7223
+ own: enabledUnits?.own === true,
6608
7224
  onOpenMarket,
6609
7225
  mocked: fixturePick.enabled,
6610
7226
  workspace,
@@ -6781,114 +7397,6 @@ function rightbarPresentation(input) {
6781
7397
  };
6782
7398
  }
6783
7399
  //#endregion
6784
- //#region src/modules/sessions/model/session-node.ts
6785
- function visiblePendingKind(kind) {
6786
- switch (kind) {
6787
- case "approval":
6788
- case "plan-review":
6789
- case "question": return kind;
6790
- default: return;
6791
- }
6792
- }
6793
- function sessionNode(summary, statusById, list, pinnedIds, archivedIds) {
6794
- const status = statusById.get(summary.id);
6795
- const catalog = list.projectionsBySession[summary.id]?.values?.subagentCatalog;
6796
- let runningSubagentCount = 0;
6797
- for (const child of catalog ?? []) {
6798
- const childStatus = statusById.get(child.id);
6799
- const childRow = list.byId[child.id];
6800
- if ((childStatus?.running ?? childRow?.running) === true) runningSubagentCount += 1;
6801
- }
6802
- return {
6803
- id: summary.id,
6804
- title: summary.blank ? "" : summary.displayTitle,
6805
- blank: summary.blank,
6806
- running: status?.running ?? summary.running,
6807
- runningSubagentCount,
6808
- completed: status?.completionUnread === true,
6809
- pinned: !archivedIds.has(summary.id) && pinnedIds.has(summary.id),
6810
- updatedAt: summary.updatedAt,
6811
- pendingInteraction: visiblePendingKind(status?.pendingInteraction?.kind)
6812
- };
6813
- }
6814
- function sessionStatuses(node, t) {
6815
- const subagents = node.runningSubagentCount > 0 ? {
6816
- state: "ongoing",
6817
- label: t(node.runningSubagentCount === 1 ? "status.subagentsRunning.one" : "status.subagentsRunning.other", { n: node.runningSubagentCount })
6818
- } : void 0;
6819
- let pending;
6820
- switch (node.pendingInteraction) {
6821
- case "approval":
6822
- pending = {
6823
- state: "warning",
6824
- label: t("status.waitingApproval")
6825
- };
6826
- break;
6827
- case "plan-review":
6828
- pending = {
6829
- state: "warning",
6830
- label: t("status.planReview")
6831
- };
6832
- break;
6833
- case "question":
6834
- pending = {
6835
- state: "warning",
6836
- label: t("status.waitingAnswer")
6837
- };
6838
- break;
6839
- default: pending = void 0;
6840
- }
6841
- if (pending !== void 0) return subagents === void 0 ? [pending] : [pending, subagents];
6842
- if (node.running) {
6843
- const primary = {
6844
- state: "ongoing",
6845
- label: t("status.running")
6846
- };
6847
- return subagents === void 0 ? [primary] : [primary, subagents];
6848
- }
6849
- if (subagents !== void 0) return [subagents];
6850
- if (node.completed) return [{
6851
- state: "done",
6852
- label: t("status.completed")
6853
- }];
6854
- return [{
6855
- state: "idle",
6856
- label: t("status.idle")
6857
- }];
6858
- }
6859
- function currentSessionId(list, panelActive) {
6860
- if (panelActive) return void 0;
6861
- return Object.values(list.byId).find((session) => (session.retainedBy?.mainView ?? 0) > 0)?.id;
6862
- }
6863
- function orderSessionRows(rows, pinnedIds, archivedIds) {
6864
- const placeholders = [];
6865
- const leading = [];
6866
- const rest = [];
6867
- for (const row of rows) if (row.blank) placeholders.push(row);
6868
- else if (!archivedIds.has(row.id) && pinnedIds.has(row.id)) leading.push(row);
6869
- else rest.push(row);
6870
- return [
6871
- ...placeholders,
6872
- ...leading,
6873
- ...rest
6874
- ];
6875
- }
6876
- function workspaceOfSession(workspaces, sessionId) {
6877
- if (sessionId === void 0) return null;
6878
- return workspaces.find((workspace) => workspace.sessionIds.includes(sessionId)) ?? null;
6879
- }
6880
- function sessionRows(workspaceSessionIds, list, archivedIds, current) {
6881
- const rows = [];
6882
- for (const id of workspaceSessionIds) {
6883
- if (archivedIds.has(id)) continue;
6884
- const row = list.byId[id];
6885
- if (row === void 0 || row.origin === "subagent") continue;
6886
- if (row.blank && row.id !== current) continue;
6887
- rows.push(row);
6888
- }
6889
- return rows;
6890
- }
6891
- //#endregion
6892
7400
  //#region src/app/layouts/rightbar/suite-world.ts
6893
7401
  function createSuiteWorld(input) {
6894
7402
  const sessionId = currentSessionId(input.sessions, false);
@@ -6904,49 +7412,6 @@ function createSuiteWorld(input) {
6904
7412
  }
6905
7413
  };
6906
7414
  }
6907
- //#endregion
6908
- //#region src/app/layouts/rightbar/use-panels.ts
6909
- function shouldDropPanels(workspace, previous) {
6910
- return workspace !== previous;
6911
- }
6912
- function useEnabledUnits(refreshToken, workspace) {
6913
- const [enabled, setEnabled] = useState(null);
6914
- const lastWorkspace = useRef(workspace);
6915
- useEffect(() => {
6916
- let cancelled = false;
6917
- if (shouldDropPanels(workspace, lastWorkspace.current)) {
6918
- lastWorkspace.current = workspace;
6919
- setEnabled(null);
6920
- }
6921
- const read = async () => {
6922
- const response = await apiGet("panels", workspace === null ? {} : { path: workspace }).catch(() => null);
6923
- if (cancelled) return;
6924
- if (response?.ok === true && Array.isArray(response.units)) setEnabled(response.units);
6925
- };
6926
- read();
6927
- return () => {
6928
- cancelled = true;
6929
- };
6930
- }, [
6931
- refreshToken,
6932
- useFactRevision("panels"),
6933
- workspace
6934
- ]);
6935
- return enabled;
6936
- }
6937
- function useSelectedProjectId() {
6938
- const [id, setId] = useState(() => selectedProjectId());
6939
- useEffect(() => subscribeProject(() => setId(selectedProjectId())), []);
6940
- return id;
6941
- }
6942
- function useBoardWorkspace(workspaces, sessions) {
6943
- const projectId = useSelectedProjectId();
6944
- const workspace = workspaces.items.find((item) => item.workspaceId === projectId) ?? workspaceOfSession(workspaces.items, currentSessionId(sessions, false));
6945
- return {
6946
- workspace,
6947
- path: workspace?.path ?? null
6948
- };
6949
- }
6950
7415
  var Rightbar_module_default = {
6951
7416
  panel: "_panel_135e7_1",
6952
7417
  columns: "_columns_135e7_18",
@@ -7071,13 +7536,14 @@ function Rightbar(props) {
7071
7536
  const { capabilities } = useCapabilityMap(panelToken);
7072
7537
  const board = useBoardWorkspace(workspaces, sessions);
7073
7538
  const boardWorkspace = board.path;
7074
- const enabledUnits = useEnabledUnits(panelToken, boardWorkspace);
7539
+ const panelBoard = useEnabledUnits(panelToken, boardWorkspace);
7540
+ const enabledUnits = panelBoard?.units ?? null;
7075
7541
  const [modulesOpen, setModulesOpen] = useState(false);
7076
7542
  const fixtures = useBoardMock(fixtureRoster(manifests));
7077
7543
  const visibleModules = selectBoardModules(enabledUnits, (id) => modules.byId(id), capabilities);
7078
7544
  const plan = planBoard(fixtures.shape, {
7079
7545
  modules: visibleModules,
7080
- configRead: enabledUnits !== null
7546
+ configRead: panelBoard !== null
7081
7547
  }, fixtureSeed(manifests, modules.all(), crashModeOn(window.location.search)));
7082
7548
  const world = createSuiteWorld({
7083
7549
  workspaces,
@@ -7138,7 +7604,7 @@ function Rightbar(props) {
7138
7604
  onRefresh: refreshPanel,
7139
7605
  modulesOpen,
7140
7606
  onModulesOpenChange: setModulesOpen,
7141
- enabledUnits,
7607
+ enabledUnits: panelBoard,
7142
7608
  manifests,
7143
7609
  workspace: boardWorkspace,
7144
7610
  refreshToken: panelToken,
@@ -8220,7 +8686,7 @@ function messagesOf(units) {
8220
8686
  ...face.messages === void 0 ? {} : { messages: face.messages }
8221
8687
  }));
8222
8688
  }
8223
- 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*/";
8689
+ 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*/";
8224
8690
  function workbenchCss() {
8225
8691
  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}`;
8226
8692
  }