@dsh-workbench/core 0.1.8 → 0.1.10

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 (37) hide show
  1. package/client.js +983 -391
  2. package/dist/client/client.body.js +983 -391
  3. package/dist/client/index.js +984 -392
  4. package/dist/host/index.js +366 -106
  5. package/dist/types/app/client.d.ts +140 -12
  6. package/dist/types/app/layouts/env-gate/__tests__/gate-deadline.test.d.ts +1 -0
  7. package/dist/types/app/layouts/env-gate/gate-deadline.d.ts +4 -0
  8. package/dist/types/app/layouts/rightbar/MarketStates.d.ts +7 -0
  9. package/dist/types/app/layouts/rightbar/MarketView.d.ts +2 -1
  10. package/dist/types/app/layouts/rightbar/SharedSection.d.ts +11 -0
  11. package/dist/types/app/layouts/rightbar/__tests__/market-change.test.d.ts +1 -0
  12. package/dist/types/app/layouts/rightbar/__tests__/market-live.test.d.ts +1 -0
  13. package/dist/types/app/layouts/rightbar/__tests__/market-settle.test.d.ts +1 -0
  14. package/dist/types/app/layouts/rightbar/board-plan.d.ts +2 -0
  15. package/dist/types/app/layouts/rightbar/market-change.d.ts +4 -0
  16. package/dist/types/app/layouts/rightbar/market-rows.d.ts +3 -1
  17. package/dist/types/app/layouts/rightbar/market-settle.d.ts +2 -0
  18. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +10 -0
  19. package/dist/types/app/layouts/sidebar/ProjectSwitcher.d.ts +2 -2
  20. package/dist/types/app/layouts/sidebar/Sidebar.d.ts +1 -1
  21. package/dist/types/app/layouts/sidebar/WorkspaceRenameDialog.d.ts +8 -0
  22. package/dist/types/app/layouts/sidebar/WorkspaceRowAction.d.ts +7 -0
  23. package/dist/types/app/layouts/sidebar/WorkspaceRowLabel.d.ts +8 -0
  24. package/dist/types/app/layouts/sidebar/WorkspaceSearchField.d.ts +9 -0
  25. package/dist/types/app/layouts/sidebar/__tests__/workspace-name.test.d.ts +1 -0
  26. package/dist/types/app/layouts/sidebar/workspace-items.d.ts +11 -0
  27. package/dist/types/app/layouts/sidebar/workspace-name.d.ts +16 -0
  28. package/dist/types/app/units/__tests__/registry.test.d.ts +1 -0
  29. package/dist/types/app/units/fixture-unit-mock.d.ts +3 -1
  30. package/dist/types/modules/panels/__tests__/market-registries.test.d.ts +1 -0
  31. package/dist/types/modules/panels/model/market.d.ts +2 -0
  32. package/dist/types/shared/api/host/__tests__/profile-registries.test.d.ts +1 -0
  33. package/dist/types/shared/api/host/mount-units.d.ts +13 -6
  34. package/dist/types/shared/api/host/profile-registries.d.ts +21 -0
  35. package/dist/types/shared/hooks/mock-mode.d.ts +1 -0
  36. package/docs/OPERATIONS.md +2 -0
  37. package/package.json +2 -2
package/client.js CHANGED
@@ -146,6 +146,14 @@ window.__ModuleLoader__.load({
146
146
  }] : [],
147
147
  ...capability.command === void 0 || sourceUnknown ? [] : [copyAction(t, capability.command)]
148
148
  ];
149
+ if (capability.status === "failed") return {
150
+ id: "unit-mount-failed",
151
+ severity: "block",
152
+ title: t("env.unit.failed"),
153
+ hint: t("env.unit.failedHint"),
154
+ ...capability.detail === void 0 ? {} : { detail: capability.detail },
155
+ actions: [retryAction(t)]
156
+ };
149
157
  if (capability.status === "missing-plugin") return {
150
158
  id: "unit-missing-plugin",
151
159
  severity: "block",
@@ -482,6 +490,7 @@ window.__ModuleLoader__.load({
482
490
  var react = require("react");
483
491
  var h = react.createElement;
484
492
  var Fragment = react.Fragment;
493
+ var Component = react.Component;
485
494
  var useState = react.useState;
486
495
  var useEffect = react.useEffect;
487
496
  var useLayoutEffect = react.useLayoutEffect;
@@ -524,6 +533,46 @@ window.__ModuleLoader__.load({
524
533
  }));
525
534
  }
526
535
  //#endregion
536
+ //#region ../shared/dist/components/Note.js
537
+ function Note({ tone = "muted", as, children }) {
538
+ const className = tone === "problem" ? "wb-problem" : "wb-note";
539
+ return as === "span" ? h("span", { className }, children) : h("p", { className }, children);
540
+ }
541
+ //#endregion
542
+ //#region ../shared/dist/components/CardBoundary.js
543
+ function errorReasonOf(error) {
544
+ if (error instanceof Error) return error.message;
545
+ return typeof error === "string" ? error : JSON.stringify(error) ?? String(error);
546
+ }
547
+ var CardBoundary = class extends Component {
548
+ state = { reason: null };
549
+ static getDerivedStateFromError(error) {
550
+ return { reason: errorReasonOf(error) };
551
+ }
552
+ componentDidCatch(error) {
553
+ console.error(`[dsh-workbench] 模块 ${this.props.unit} 渲染失败:${errorReasonOf(error)}`, error);
554
+ }
555
+ componentDidUpdate(previous) {
556
+ if (previous.resetKey !== this.props.resetKey && this.state.reason !== null) this.setState({ reason: null });
557
+ }
558
+ retry = () => {
559
+ this.setState({ reason: null });
560
+ };
561
+ render() {
562
+ const { reason } = this.state;
563
+ if (reason === null) return this.props.children;
564
+ return h(Note, { tone: "problem" }, h("span", null, this.props.t("panels.cardBroken", {
565
+ unit: this.props.unit,
566
+ reason
567
+ })), " ", h(_deepseek_ai_dsh_client_ui_primitives.Button, {
568
+ type: "button",
569
+ variant: "outline",
570
+ size: "sm",
571
+ onClick: this.retry
572
+ }, this.props.t("panels.cardRetry")));
573
+ }
574
+ };
575
+ //#endregion
527
576
  //#region ../shared/dist/components/ApprovalDetail.js
528
577
  function callOf(snapshot, callId) {
529
578
  if (callId === void 0) return void 0;
@@ -554,10 +603,17 @@ window.__ModuleLoader__.load({
554
603
  };
555
604
  const command = typeof args.command === "string" ? args.command : "";
556
605
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
557
- if (owner?.approval !== void 0) return h(owner.approval.render, {
558
- input,
559
- t
560
- });
606
+ if (owner?.approval !== void 0) {
607
+ const Render = owner.approval.render;
608
+ return h(CardBoundary, {
609
+ unit: owner.manifest.id,
610
+ resetKey: props.callId ?? "",
611
+ t
612
+ }, h(Render, {
613
+ input,
614
+ t
615
+ }));
616
+ }
561
617
  if (command === "") return null;
562
618
  return h(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
563
619
  code: command,
@@ -720,12 +776,6 @@ window.__ModuleLoader__.load({
720
776
  }, mock.label)));
721
777
  }
722
778
  //#endregion
723
- //#region ../shared/dist/components/Note.js
724
- function Note({ tone = "muted", as, children }) {
725
- const className = tone === "problem" ? "wb-problem" : "wb-note";
726
- return as === "span" ? h("span", { className }, children) : h("p", { className }, children);
727
- }
728
- //#endregion
729
779
  //#region ../shared/dist/components/ResourceStates.js
730
780
  function SkeletonRows({ rows = 4 }) {
731
781
  return h("div", {
@@ -936,6 +986,20 @@ window.__ModuleLoader__.load({
936
986
  "project.none": "No project",
937
987
  "project.empty": "No projects yet. Use “Add project” below.",
938
988
  "project.add": "Add project…",
989
+ "project.search.label": "Search workspaces",
990
+ "project.search.placeholder": "Search workspaces (folder / name / path)",
991
+ "project.search.empty": "No workspace matches “{query}”.",
992
+ "project.rename.row": "Rename “{name}”",
993
+ "project.rename.current": "Give this workspace a display name…",
994
+ "project.rename.title": "Give “{name}” a display name",
995
+ "project.rename.description": "Shown after the folder name. It renames the workspace itself.",
996
+ "project.rename.field": "Display name",
997
+ "project.rename.placeholder": "e.g. Workbench shell",
998
+ "project.rename.hint": "Empty = folder name only",
999
+ "project.rename.save": "Save",
1000
+ "project.rename.saving": "Saving…",
1001
+ "project.rename.cancel": "Cancel",
1002
+ "project.rename.failed": "Rename failed. Try again.",
939
1003
  "session.new": "New session",
940
1004
  "session.new.label": "Start a session in the current project",
941
1005
  "session.empty": "No sessions in this project yet.",
@@ -964,6 +1028,7 @@ window.__ModuleLoader__.load({
964
1028
  "panels.dragHint": "Drag to reorder",
965
1029
  "panels.unknownStep": "No suite provides this view",
966
1030
  "panels.labelWithHint": "{label} ({hint})",
1031
+ "panels.dep.failed": "⚠ failed to start",
967
1032
  "panels.dep.missingPlugin": "⚠ not ready yet",
968
1033
  "panels.dep.missingCommands": "⚠ needs an update",
969
1034
  "panels.dep.unchecked": "⚠ cannot check",
@@ -1008,7 +1073,7 @@ window.__ModuleLoader__.load({
1008
1073
  "panels.market.empty": "No modules available",
1009
1074
  "panels.market.installedSection": "Installed",
1010
1075
  "panels.market.moduleOutdated": "update available",
1011
- "panels.market.moduleRestartHint": "it may need a restart after installing",
1076
+ "panels.market.moduleRestartHint": "installed but not active — restart dsh once to bring it up",
1012
1077
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
1013
1078
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
1014
1079
  "panels.market.recheck": "Check for updates",
@@ -1157,6 +1222,8 @@ window.__ModuleLoader__.load({
1157
1222
  "blocker.exec.hint": "Make sure opencli is installed and on PATH (which opencli).",
1158
1223
  "blocker.unknown.title": "Something went wrong",
1159
1224
  "panels.reading": "Reading the panel setup…",
1225
+ "panels.cardBroken": "This module will not render: {unit} ({reason})",
1226
+ "panels.cardRetry": "Retry",
1160
1227
  "panels.empty": "No modules on the panel yet",
1161
1228
  "panels.emptyHint": "You can also just tell the agent: “add a module to the panel”.",
1162
1229
  "env.title": "Preparing the workbench",
@@ -1195,6 +1262,8 @@ window.__ModuleLoader__.load({
1195
1262
  "env.step.warm": "Warming up site sessions",
1196
1263
  "env.warm.done": "{n} site(s) warmed up",
1197
1264
  "env.warm.short": "Not warmed this time — harmless; the panel heals on first read",
1265
+ "env.unit.failed": "This module cannot start",
1266
+ "env.unit.failedHint": "It failed while assembling itself; other modules are unaffected.",
1198
1267
  "env.unit.missingPlugin": "This module is not ready yet",
1199
1268
  "env.unit.missingCommandsHint": "Updating it should fix this.",
1200
1269
  "env.unit.unchecked": "Cannot check: no shell channel",
@@ -1228,6 +1297,20 @@ window.__ModuleLoader__.load({
1228
1297
  "project.none": "未选择项目",
1229
1298
  "project.empty": "还没有项目。用下面的「添加项目」选一个目录。",
1230
1299
  "project.add": "添加项目…",
1300
+ "project.search.label": "搜索工作区",
1301
+ "project.search.placeholder": "搜索工作区(目录名 / 中文名 / 路径)",
1302
+ "project.search.empty": "没有匹配「{query}」的工作区。",
1303
+ "project.rename.row": "改「{name}」的中文名",
1304
+ "project.rename.current": "改当前工作区的中文名…",
1305
+ "project.rename.title": "给「{name}」配一个中文名",
1306
+ "project.rename.description": "显示在目录名后面。改的是工作区本身的名字。",
1307
+ "project.rename.field": "中文名",
1308
+ "project.rename.placeholder": "例如:工作台外壳",
1309
+ "project.rename.hint": "留空 = 只显示目录名",
1310
+ "project.rename.save": "保存",
1311
+ "project.rename.saving": "保存中…",
1312
+ "project.rename.cancel": "取消",
1313
+ "project.rename.failed": "改名失败了,再试一次。",
1231
1314
  "session.new": "新会话",
1232
1315
  "session.new.label": "在当前项目新建会话",
1233
1316
  "session.empty": "这个项目还没有会话。",
@@ -1256,6 +1339,7 @@ window.__ModuleLoader__.load({
1256
1339
  "panels.dragHint": "拖动调整顺序",
1257
1340
  "panels.unknownStep": "这一层没有套件提供",
1258
1341
  "panels.labelWithHint": "{label}({hint})",
1342
+ "panels.dep.failed": "⚠ 起不来",
1259
1343
  "panels.dep.missingPlugin": "⚠ 还没装好",
1260
1344
  "panels.dep.missingCommands": "⚠ 需要更新",
1261
1345
  "panels.dep.unchecked": "⚠ 检测不了",
@@ -1300,7 +1384,7 @@ window.__ModuleLoader__.load({
1300
1384
  "panels.market.empty": "暂无可用模块",
1301
1385
  "panels.market.installedSection": "已装",
1302
1386
  "panels.market.moduleOutdated": "有新版",
1303
- "panels.market.moduleRestartHint": "安装完成后可能需要重启才生效",
1387
+ "panels.market.moduleRestartHint": "装好了但还没生效 —— 重启一次 dsh 就会出来",
1304
1388
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
1305
1389
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
1306
1390
  "panels.market.recheck": "重新检查更新",
@@ -1449,6 +1533,8 @@ window.__ModuleLoader__.load({
1449
1533
  "blocker.exec.hint": "确认 opencli 已安装且在 PATH 里(which opencli)。",
1450
1534
  "blocker.unknown.title": "出了点问题",
1451
1535
  "panels.reading": "正在读取面板配置…",
1536
+ "panels.cardBroken": "这个模块起不来:{unit}({reason})",
1537
+ "panels.cardRetry": "重试",
1452
1538
  "panels.empty": "面板里还没有模块",
1453
1539
  "panels.emptyHint": "也可以直接跟 agent 说:「把某个模块加到面板」。",
1454
1540
  "env.title": "准备工作台",
@@ -1487,6 +1573,8 @@ window.__ModuleLoader__.load({
1487
1573
  "env.step.warm": "预热站点登录态",
1488
1574
  "env.warm.done": "已预热 {n} 个站点",
1489
1575
  "env.warm.short": "这次没热上 —— 不影响用,面板第一次读取会自己补",
1576
+ "env.unit.failed": "这个模块起不来",
1577
+ "env.unit.failedHint": "它自己装配时报了错,别的模块不受影响。",
1490
1578
  "env.unit.missingPlugin": "这个模块还没装好",
1491
1579
  "env.unit.missingCommandsHint": "更新之后就能用了。",
1492
1580
  "env.unit.unchecked": "检测不了:拿不到执行通道",
@@ -1545,6 +1633,31 @@ window.__ModuleLoader__.load({
1545
1633
  en
1546
1634
  };
1547
1635
  }
1636
+ function reasonOf(error) {
1637
+ if (error instanceof Error) return error.message;
1638
+ return typeof error === "string" ? error : String(error);
1639
+ }
1640
+ function mergeMessagesSkipping(base, contributions) {
1641
+ let dictionaries = base;
1642
+ const accepted = [];
1643
+ const problems = [];
1644
+ for (const item of contributions) {
1645
+ if (item.messages === void 0) continue;
1646
+ try {
1647
+ dictionaries = mergeMessages(base, [...accepted, item]);
1648
+ accepted.push(item);
1649
+ } catch (error) {
1650
+ problems.push({
1651
+ unit: item.unit,
1652
+ reason: reasonOf(error)
1653
+ });
1654
+ }
1655
+ }
1656
+ return {
1657
+ dictionaries,
1658
+ problems
1659
+ };
1660
+ }
1548
1661
  //#endregion
1549
1662
  //#region ../shared/dist/lib/blocker-action.js
1550
1663
  function blockerPending(busy, running) {
@@ -1620,9 +1733,11 @@ window.__ModuleLoader__.load({
1620
1733
  CODING_ISSUES_SERVICE: () => CODING_ISSUES_SERVICE,
1621
1734
  CONTEXT_MARKER_NAME: () => CONTEXT_MARKER_NAME,
1622
1735
  Card: () => Card,
1736
+ CardBoundary: () => CardBoundary,
1623
1737
  CardHead: () => CardHead,
1624
1738
  CenteredState: () => CenteredState,
1625
1739
  ChoiceGroup: () => ChoiceGroup,
1740
+ Component: () => Component,
1626
1741
  DEFAULT_WORKSPACE_TITLE: () => DEFAULT_WORKSPACE_TITLE,
1627
1742
  EVENTS_PATH: () => EVENTS_PATH,
1628
1743
  EmptyState: () => EmptyState,
@@ -1682,6 +1797,7 @@ window.__ModuleLoader__.load({
1682
1797
  dictionaries: () => dictionaries,
1683
1798
  en: () => en,
1684
1799
  encodeRef: () => encodeRef,
1800
+ errorReasonOf: () => errorReasonOf,
1685
1801
  excerpt: () => excerpt,
1686
1802
  factOfRoute: () => factOfRoute,
1687
1803
  gateOf: () => gateOf,
@@ -1693,6 +1809,7 @@ window.__ModuleLoader__.load({
1693
1809
  longTaskRunsOf: () => longTaskRunsOf,
1694
1810
  markerBody: () => markerBody,
1695
1811
  mergeMessages: () => mergeMessages,
1812
+ mergeMessagesSkipping: () => mergeMessagesSkipping,
1696
1813
  parseFactFrame: () => parseFactFrame,
1697
1814
  parseJsonLoose: () => parseJsonLoose,
1698
1815
  parseLocalTimestamp: () => parseLocalTimestamp,
@@ -1852,10 +1969,10 @@ window.__ModuleLoader__.load({
1852
1969
  }
1853
1970
  var CAPABILITY_FACT = "capability";
1854
1971
  var shared = null;
1855
- var current = null;
1972
+ var current$1 = null;
1856
1973
  var listeners$2 = /* @__PURE__ */ new Set();
1857
1974
  function capabilityValue() {
1858
- return current;
1975
+ return current$1;
1859
1976
  }
1860
1977
  function subscribeCapabilities(listener) {
1861
1978
  listeners$2.add(listener);
@@ -1869,8 +1986,8 @@ window.__ModuleLoader__.load({
1869
1986
  ...probe$2,
1870
1987
  checkedAt: Date.now()
1871
1988
  });
1872
- if (next === current) return;
1873
- current = next;
1989
+ if (next === current$1) return;
1990
+ current$1 = next;
1874
1991
  for (const listener of [...listeners$2]) listener();
1875
1992
  }
1876
1993
  function beginProbe() {
@@ -1979,10 +2096,16 @@ window.__ModuleLoader__.load({
1979
2096
  }
1980
2097
  //#endregion
1981
2098
  //#region src/shared/hooks/mock-mode.ts
1982
- var mock_mode_exports = /* @__PURE__ */ __exportAll({ mockModeOn: () => mockModeOn });
2099
+ var mock_mode_exports = /* @__PURE__ */ __exportAll({
2100
+ crashModeOn: () => crashModeOn,
2101
+ mockModeOn: () => mockModeOn
2102
+ });
1983
2103
  function mockModeOn(search) {
1984
2104
  return /(?:^|[?&])(?:wbMock|wbMarketMock)=1(?:&|$)/.test(search);
1985
2105
  }
2106
+ function crashModeOn(search) {
2107
+ return /(?:^|[?&])wbCrash=1(?:&|$)/.test(search);
2108
+ }
1986
2109
  //#endregion
1987
2110
  //#region src/shared/hooks/use-fixture-pick.ts
1988
2111
  var use_fixture_pick_exports = /* @__PURE__ */ __exportAll({ useFixturePick: () => useFixturePick });
@@ -2044,6 +2167,14 @@ window.__ModuleLoader__.load({
2044
2167
  return input.now - input.checkedAt >= input.staleMs;
2045
2168
  }
2046
2169
  //#endregion
2170
+ //#region src/app/layouts/rightbar/market-settle.ts
2171
+ var MODULE_SETTLE_MS = 15e3;
2172
+ function holdBack(installed, roster, active, previous) {
2173
+ const pending = installed.filter((unit) => !roster.has(unit));
2174
+ const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
2175
+ return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
2176
+ }
2177
+ //#endregion
2047
2178
  //#region src/app/layouts/rightbar/market-mock.ts
2048
2179
  function installable(manifest) {
2049
2180
  return {
@@ -2568,7 +2699,11 @@ window.__ModuleLoader__.load({
2568
2699
  let manifestsCache;
2569
2700
  function notify() {
2570
2701
  revision += 1;
2571
- for (const listener of listeners) listener();
2702
+ for (const listener of [...listeners]) try {
2703
+ listener();
2704
+ } catch (error) {
2705
+ console.warn(`[dsh-workbench] 套件注册的订阅者报错(不影响其它订阅者与这次注册):${String(error)}`);
2706
+ }
2572
2707
  }
2573
2708
  return {
2574
2709
  register(face) {
@@ -2603,6 +2738,7 @@ window.__ModuleLoader__.load({
2603
2738
  //#endregion
2604
2739
  //#region src/app/units/fixture-unit-mock.tsx
2605
2740
  var FIXTURE_UNIT_ID = "wb-fixture";
2741
+ var CRASH_UNIT_ID = "wb-fixture-crash";
2606
2742
  var KEY = {
2607
2743
  cardTitle: `${FIXTURE_UNIT_ID}.cardTitle`,
2608
2744
  cardMeta: `${FIXTURE_UNIT_ID}.cardMeta`,
@@ -2656,6 +2792,39 @@ window.__ModuleLoader__.load({
2656
2792
  messages,
2657
2793
  card: FixtureCard
2658
2794
  };
2795
+ var CRASH_KEY = {
2796
+ cardTitle: `${CRASH_UNIT_ID}.cardTitle`,
2797
+ cardMeta: `${CRASH_UNIT_ID}.cardMeta`
2798
+ };
2799
+ var crashMessages = {
2800
+ zh: {
2801
+ [CRASH_KEY.cardTitle]: "崩溃的卡片",
2802
+ [CRASH_KEY.cardMeta]: "夹具:渲染时抛错"
2803
+ },
2804
+ en: {
2805
+ [CRASH_KEY.cardTitle]: "Crashing card",
2806
+ [CRASH_KEY.cardMeta]: "Fixture: throws while rendering"
2807
+ }
2808
+ };
2809
+ var crashManifest = {
2810
+ id: CRASH_UNIT_ID,
2811
+ kind: "board",
2812
+ card: {
2813
+ titleKey: CRASH_KEY.cardTitle,
2814
+ order: 899,
2815
+ enabledByDefault: true
2816
+ },
2817
+ tools: [],
2818
+ host: { inject: [] }
2819
+ };
2820
+ function CrashingCard() {
2821
+ throw new Error("夹具:这张卡片按 wbCrash=1 故意渲染失败(守「一张卡片崩溃不带走面板」)");
2822
+ }
2823
+ var CRASH_FACE = {
2824
+ manifest: crashManifest,
2825
+ messages: crashMessages,
2826
+ card: CrashingCard
2827
+ };
2659
2828
  var SAMPLE_ROSTER = [manifest];
2660
2829
  function hasCard(roster) {
2661
2830
  return roster.some((item) => item.card !== null);
@@ -2663,8 +2832,9 @@ window.__ModuleLoader__.load({
2663
2832
  function fixtureRoster(roster) {
2664
2833
  return hasCard(roster) ? roster : SAMPLE_ROSTER;
2665
2834
  }
2666
- function fixtureSeed(roster, all) {
2667
- return hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE)];
2835
+ function fixtureSeed(roster, all, crash = false) {
2836
+ const base = hasCard(roster) ? all : [toBoardModule(FIXTURE_FACE)];
2837
+ return crash ? [toBoardModule(CRASH_FACE), ...base] : base;
2668
2838
  }
2669
2839
  //#endregion
2670
2840
  //#region src/app/layouts/rightbar/market-rows.ts
@@ -2684,7 +2854,17 @@ window.__ModuleLoader__.load({
2684
2854
  unchecked: "idle",
2685
2855
  unknown: "idle"
2686
2856
  };
2687
- function installedRows(modules, manifests, listed) {
2857
+ function mergeTitles(known, manifests) {
2858
+ let next = null;
2859
+ for (const manifest of manifests) {
2860
+ const titleKey = manifest.card?.titleKey;
2861
+ if (titleKey === void 0 || known.has(manifest.id)) continue;
2862
+ next ??= new Map(known);
2863
+ next.set(manifest.id, titleKey);
2864
+ }
2865
+ return next ?? known;
2866
+ }
2867
+ function installedRows(modules, manifests, listed, known) {
2688
2868
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
2689
2869
  const rows = [];
2690
2870
  for (const module of modules) {
@@ -2693,8 +2873,9 @@ window.__ModuleLoader__.load({
2693
2873
  const outdated = latest !== void 0 && latest !== module.installed;
2694
2874
  rows.push({
2695
2875
  id: module.unit,
2696
- titleKey: titles.get(module.unit) ?? module.pkg,
2876
+ titleKey: titles.get(module.unit) ?? known?.get(module.unit) ?? module.pkg,
2697
2877
  state: outdated ? "outdated" : "installed",
2878
+ hint: "panels.market.moduleRestartHint",
2698
2879
  pkg: module.pkg,
2699
2880
  canInstall: false,
2700
2881
  canUpdate: outdated,
@@ -2753,6 +2934,12 @@ window.__ModuleLoader__.load({
2753
2934
  function isOnMachine(state) {
2754
2935
  return state === "installed" || state === "outdated";
2755
2936
  }
2937
+ function liveManifests(manifests, capabilities, installed) {
2938
+ if (capabilities === null || installed === null) return manifests;
2939
+ const gone = new Set(marketRows(manifests, capabilities).filter((row) => !installed.has(row.id) && marketActions$1(row).length === 0 && (row.state === "unknown" || row.state === "unchecked")).map((row) => row.id));
2940
+ if (gone.size === 0) return manifests;
2941
+ return manifests.filter((manifest) => !gone.has(manifest.id));
2942
+ }
2756
2943
  function marketHasUpdates(rows, shared = []) {
2757
2944
  return rows.some((row) => row.state === "outdated" || row.moduleUpdate !== void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
2758
2945
  }
@@ -2882,6 +3069,7 @@ window.__ModuleLoader__.load({
2882
3069
  ...bucket.installed === void 0 ? {} : { installed: bucket.installed },
2883
3070
  ...bucket.latest === void 0 ? {} : { latest: bucket.latest }
2884
3071
  };
3072
+ const detail = bucket.purpose === void 0 && bucket.command === void 0 ? void 0 : `${bucket.label}${bucket.purpose === void 0 ? "" : ` —— ${bucket.purpose}`}${bucket.command === void 0 ? "" : ` · ${bucket.command}`}`;
2885
3073
  rows.push({
2886
3074
  id: `${bucket.kind}:${bucket.name}`,
2887
3075
  label: bucket.label,
@@ -2889,7 +3077,7 @@ window.__ModuleLoader__.load({
2889
3077
  state,
2890
3078
  canUpdate: state === "outdated" || state === "unsatisfied",
2891
3079
  ...version === void 0 ? {} : { version },
2892
- detail: `${bucket.label}${bucket.purpose === void 0 ? "" : ` —— ${bucket.purpose}`}${bucket.command === void 0 ? "" : ` · ${bucket.command}`}`
3080
+ ...detail === void 0 ? {} : { detail }
2893
3081
  });
2894
3082
  }
2895
3083
  return rows;
@@ -2946,15 +3134,188 @@ window.__ModuleLoader__.load({
2946
3134
  clear
2947
3135
  };
2948
3136
  }
2949
- var PanelFoot_module_default = {
2950
- foot: "_foot_1us83_1",
2951
- footText: "_footText_1us83_12",
2952
- footTextMd: "_footTextMd_1us83_17"
3137
+ //#endregion
3138
+ //#region src/app/layouts/market/add-module-text.ts
3139
+ var GUIDE_ITEMS = [
3140
+ {
3141
+ titleKey: "panels.market.add.guideIdTitle",
3142
+ exampleKey: "panels.market.add.guideIdExample",
3143
+ hintKey: "panels.market.add.guideIdHint"
3144
+ },
3145
+ {
3146
+ titleKey: "panels.market.add.guideGitTitle",
3147
+ exampleKey: "panels.market.add.guideGitExample",
3148
+ hintKey: "panels.market.add.guideGitHint"
3149
+ },
3150
+ {
3151
+ titleKey: "panels.market.add.guidePathTitle",
3152
+ exampleKey: "panels.market.add.guidePathExample",
3153
+ hintKey: "panels.market.add.guidePathHint"
3154
+ }
3155
+ ];
3156
+ function hostOf(url) {
3157
+ try {
3158
+ return new URL(url).host;
3159
+ } catch {
3160
+ return url;
3161
+ }
3162
+ }
3163
+ var OFFICIAL_NPM_HOST = "registry.npmjs.org";
3164
+ var KNOWN_HOSTS = {
3165
+ [OFFICIAL_NPM_HOST]: "panels.market.add.registryOfficial",
3166
+ "registry.npmmirror.com": "panels.market.add.registryMirror"
3167
+ };
3168
+ function registryNameKey(host) {
3169
+ return KNOWN_HOSTS[host];
3170
+ }
3171
+ function normalizeRegistry(url) {
3172
+ const parsed = new URL(url);
3173
+ if (!parsed.pathname.endsWith("/")) parsed.pathname += "/";
3174
+ return parsed.href;
3175
+ }
3176
+ function registryKey(url, resolved) {
3177
+ const target = url ?? resolved;
3178
+ if (target === null) return "";
3179
+ try {
3180
+ return normalizeRegistry(target);
3181
+ } catch {
3182
+ return target;
3183
+ }
3184
+ }
3185
+ function registryOptions(registries) {
3186
+ const resolved = registries === null ? null : registries.resolved;
3187
+ const entries = [
3188
+ registries === null ? null : registries.registry,
3189
+ ...registries === null ? [] : registries.fallbackRegistries,
3190
+ null
3191
+ ];
3192
+ const offered = [];
3193
+ const keys = /* @__PURE__ */ new Set();
3194
+ for (const entry of entries) {
3195
+ const key = registryKey(entry, resolved);
3196
+ if (keys.has(key)) continue;
3197
+ keys.add(key);
3198
+ const url = entry ?? resolved;
3199
+ if (url === null) {
3200
+ offered.push({
3201
+ choice: {
3202
+ kind: "default",
3203
+ value: ""
3204
+ },
3205
+ host: OFFICIAL_NPM_HOST,
3206
+ nameKey: "panels.market.add.registryDefault"
3207
+ });
3208
+ continue;
3209
+ }
3210
+ const host = hostOf(url);
3211
+ const nameKey = registryNameKey(host);
3212
+ offered.push({
3213
+ choice: entry === null ? {
3214
+ kind: "default",
3215
+ value: ""
3216
+ } : {
3217
+ kind: "url",
3218
+ value: entry
3219
+ },
3220
+ host,
3221
+ ...nameKey === void 0 ? {} : { nameKey }
3222
+ });
3223
+ }
3224
+ offered.push({ choice: {
3225
+ kind: "custom",
3226
+ value: ""
3227
+ } });
3228
+ return offered;
3229
+ }
3230
+ function customRegistryAllowed(value) {
3231
+ return /^https?:\/\//.test(value.trim());
3232
+ }
3233
+ function registryOf(choice, custom) {
3234
+ if (choice.kind === "custom") return customRegistryAllowed(custom) ? custom.trim() : void 0;
3235
+ return choice.value === "" ? void 0 : choice.value;
3236
+ }
3237
+ function registryName(option, t) {
3238
+ if (option.choice.kind === "custom") return t("panels.market.add.registryCustom");
3239
+ if (option.nameKey !== void 0) return t(option.nameKey);
3240
+ return option.host ?? t("panels.market.add.registryDefault");
3241
+ }
3242
+ function optionLabel(option, t) {
3243
+ if (option.choice.kind === "custom") return t("panels.market.add.registryCustom");
3244
+ if (option.host === void 0) return t("panels.market.add.registryDefault");
3245
+ return option.nameKey === void 0 ? option.host : t("panels.market.add.registryWithHost", {
3246
+ name: t(option.nameKey),
3247
+ host: option.host
3248
+ });
3249
+ }
3250
+ var PROBLEM_KEYS = {
3251
+ "invalid-spec": "panels.market.add.problemInvalid",
3252
+ "already-installed": "panels.market.add.problemInstalled",
3253
+ "not-found": "panels.market.add.problemNotFound",
3254
+ "not-a-package": "panels.market.add.problemNotPackage",
3255
+ "not-a-bundle": "panels.market.add.problemNotBundle",
3256
+ network: "panels.market.add.problemNetwork",
3257
+ unknown: "panels.market.add.problemUnknown"
3258
+ };
3259
+ function problemKey(problem) {
3260
+ return PROBLEM_KEYS[problem] ?? PROBLEM_KEYS.unknown;
3261
+ }
3262
+ var FAILURE_KEYS = {
3263
+ network: "panels.market.add.failureNetwork",
3264
+ "spec-host": "panels.market.add.failureNetworkHost",
3265
+ "not-found": "panels.market.add.failureNotFound",
3266
+ "no-matching-version": "panels.market.add.failureNoMatchingVersion",
3267
+ "disk-full": "panels.market.add.failureDiskFull",
3268
+ permission: "panels.market.add.failurePermission",
3269
+ "build-blocked": "panels.market.add.failureBuildBlocked",
3270
+ integrity: "panels.market.add.failureIntegrity",
3271
+ timeout: "panels.market.add.failureTimeout",
3272
+ "pnpm-missing": "panels.market.add.failurePnpmMissing",
3273
+ "operation-error": "panels.market.add.failureGeneric",
3274
+ "incompatible-version": "panels.market.add.failureGeneric",
3275
+ "not-bundle": "panels.market.add.failureGeneric",
3276
+ "invalid-spec": "panels.market.add.failureGeneric",
3277
+ "bundle-in-use": "panels.market.add.failureGeneric",
3278
+ "not-removable": "panels.market.add.failureGeneric",
3279
+ "stop-profile": "panels.market.add.failureGeneric",
3280
+ "stale-approval": "panels.market.add.failureGeneric"
3281
+ };
3282
+ function failureCode(change) {
3283
+ if (change.failedAt === "spec-host") return "spec-host";
3284
+ return change.errorCode ?? change.packageResult?.kind ?? change.application;
3285
+ }
3286
+ function failureReasonKey(code) {
3287
+ return FAILURE_KEYS[code];
3288
+ }
3289
+ function failureReason(code, application, t) {
3290
+ const key = failureReasonKey(code);
3291
+ if (key !== void 0) return t(key);
3292
+ if (code === application) return t("panels.market.add.reason.unknown");
3293
+ return code;
3294
+ }
3295
+ var SUPPLY_KEYS = {
3296
+ "pending-restart": "panels.market.add.supplyPending",
3297
+ failed: "panels.market.add.supplyFailed",
3298
+ "not-a-module": "panels.market.add.notModule",
3299
+ "no-needs": void 0
2953
3300
  };
3301
+ function supplyKey(state) {
3302
+ return SUPPLY_KEYS[state];
3303
+ }
2954
3304
  //#endregion
2955
- //#region src/shared/components/PanelFoot.tsx
2956
- function PanelFoot({ text, size = "sm", children }) {
2957
- 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);
3305
+ //#region src/app/layouts/rightbar/market-change.ts
3306
+ var SHIPPED = [
3307
+ "applied",
3308
+ "restart-required",
3309
+ "overridden"
3310
+ ];
3311
+ function changeOf(value) {
3312
+ const change = value?.change;
3313
+ if (typeof change !== "object" || change === null) return void 0;
3314
+ return typeof change.application === "string" ? change : void 0;
3315
+ }
3316
+ function changeFailure(change, t) {
3317
+ if (change === void 0 || SHIPPED.includes(change.application)) return void 0;
3318
+ return failureReason(failureCode(change), change.application, t);
2958
3319
  }
2959
3320
  var MarketPage_module_default = {
2960
3321
  marketList: "_marketList_7yq35_1",
@@ -2989,7 +3350,18 @@ window.__ModuleLoader__.load({
2989
3350
  marketEmptyTitle: "_marketEmptyTitle_7yq35_267"
2990
3351
  };
2991
3352
  //#endregion
2992
- //#region src/app/layouts/rightbar/MarketView.tsx
3353
+ //#region src/app/layouts/rightbar/MarketStates.tsx
3354
+ function MarketChecking({ t }) {
3355
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3356
+ state: "ongoing",
3357
+ size: 14
3358
+ }), t("panels.market.checking")));
3359
+ }
3360
+ function MarketEmpty({ t }) {
3361
+ return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3362
+ }
3363
+ //#endregion
3364
+ //#region src/app/layouts/rightbar/market-view-text.ts
2993
3365
  var PROGRESS_KEY = {
2994
3366
  install: "panels.market.installing",
2995
3367
  update: "panels.market.updating",
@@ -3006,18 +3378,80 @@ window.__ModuleLoader__.load({
3006
3378
  uninstall: "panels.market.uninstall",
3007
3379
  "update-dependency": "panels.market.update"
3008
3380
  };
3009
- function MarketLine({ t, row, pending, failure, onAct }) {
3381
+ //#endregion
3382
+ //#region src/app/layouts/rightbar/SharedSection.tsx
3383
+ function SharedLine({ t, row, pending, failure, onAct }) {
3010
3384
  const running = pending !== null && pending.id === row.id ? pending : null;
3011
3385
  const locked = pending !== null;
3012
- const actions = marketActions$1(row);
3013
- const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3386
+ const actions = sharedActions(row);
3387
+ const stateText = t(SHARED_STATE_KEY[row.state]);
3388
+ const version = row.version;
3389
+ 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", {
3390
+ from: version.installed,
3391
+ to: version.latest
3392
+ }) : version.installed ?? version.latest ?? ""));
3393
+ return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3394
+ className: MarketPage_module_default.marketIcon,
3395
+ "aria-hidden": "true"
3396
+ }, /* @__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", {
3397
+ className: MarketPage_module_default.marketDesc,
3398
+ role: "img",
3399
+ "aria-label": stateText
3400
+ }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3401
+ state: "ongoing",
3402
+ size: 14
3403
+ }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3404
+ state: SHARED_DOT[row.state],
3405
+ size: 9
3406
+ }), stateText, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) })))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3407
+ state: "ongoing",
3408
+ size: 14
3409
+ }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3410
+ key: action,
3411
+ type: "button",
3412
+ size: "sm",
3413
+ variant: "outline",
3414
+ disabled: locked,
3415
+ onClick: () => onAct(action)
3416
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3417
+ }
3418
+ function SharedSection({ t, rows, pending, failureOf, act }) {
3419
+ if (rows.length === 0) return null;
3420
+ 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, {
3421
+ key: row.id,
3422
+ t,
3423
+ row,
3424
+ pending,
3425
+ failure: failureOf(row.id),
3426
+ onAct: (action) => void act(row.id, action)
3427
+ }))));
3428
+ }
3429
+ var PanelFoot_module_default = {
3430
+ foot: "_foot_1us83_1",
3431
+ footText: "_footText_1us83_12",
3432
+ footTextMd: "_footTextMd_1us83_17"
3433
+ };
3434
+ //#endregion
3435
+ //#region src/shared/components/PanelFoot.tsx
3436
+ function PanelFoot({ text, size = "sm", children }) {
3437
+ 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);
3438
+ }
3439
+ //#endregion
3440
+ //#region src/app/layouts/rightbar/MarketView.tsx
3441
+ var CONFIRM_UNINSTALL = ["uninstall", "remove-bundle"];
3442
+ var CONFIRM_REMOVE = ["remove-bundle"];
3443
+ function MarketLine({ t, row, pending, failure, onAct }) {
3444
+ const running = pending !== null && pending.id === row.id ? pending : null;
3445
+ const locked = pending !== null;
3446
+ const actions = marketActions$1(row);
3447
+ const stateText = t(row.moduleUpdate === void 0 ? MARKET_STATE_KEY[row.state] : "panels.market.moduleOutdated");
3014
3448
  return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3015
3449
  className: MarketPage_module_default.marketIcon,
3016
3450
  "aria-hidden": "true"
3017
3451
  }, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketName }, t(row.titleKey), 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", {
3018
3452
  from: row.version.installed,
3019
3453
  to: row.version.latest
3020
- }) : row.version.installed ?? row.version.latest ?? "")), /* @__PURE__ */ h(Tip, { label: stateText }, /* @__PURE__ */ h("span", {
3454
+ }) : row.version.installed ?? row.version.latest ?? "")), /* @__PURE__ */ h("span", {
3021
3455
  className: MarketPage_module_default.marketDesc,
3022
3456
  role: "img",
3023
3457
  "aria-label": stateText
@@ -3027,7 +3461,7 @@ window.__ModuleLoader__.load({
3027
3461
  }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3028
3462
  state: MARKET_DOT[row.state],
3029
3463
  size: 9
3030
- }), stateText, row.hint === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t(row.hint))))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3464
+ }), stateText, row.hint === void 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t(row.hint)))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3031
3465
  state: "ongoing",
3032
3466
  size: 14
3033
3467
  }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
@@ -3045,40 +3479,6 @@ window.__ModuleLoader__.load({
3045
3479
  }, t(ACTION_LABEL_KEY[action]));
3046
3480
  }))), row.note === void 0 ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketNote }, t(row.note.key, row.note.params)), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3047
3481
  }
3048
- function SharedLine({ t, row, pending, failure, onAct }) {
3049
- const running = pending !== null && pending.id === row.id ? pending : null;
3050
- const locked = pending !== null;
3051
- const actions = sharedActions(row);
3052
- const stateText = t(SHARED_STATE_KEY[row.state]);
3053
- const version = row.version;
3054
- return /* @__PURE__ */ h("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ h("span", {
3055
- className: MarketPage_module_default.marketIcon,
3056
- "aria-hidden": "true"
3057
- }, /* @__PURE__ */ h(IconModules, { size: 18 })), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ h(Tip, { label: row.detail ?? "" }, /* @__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", {
3058
- from: version.installed,
3059
- to: version.latest
3060
- }) : version.installed ?? version.latest ?? ""))), /* @__PURE__ */ h(Tip, { label: stateText }, /* @__PURE__ */ h("span", {
3061
- className: MarketPage_module_default.marketDesc,
3062
- role: "img",
3063
- "aria-label": stateText
3064
- }, row.state === "checking" ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3065
- state: "ongoing",
3066
- size: 14
3067
- }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3068
- state: SHARED_DOT[row.state],
3069
- size: 9
3070
- }), stateText, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketUsedBy }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) }))))), /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3071
- state: "ongoing",
3072
- size: 14
3073
- }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
3074
- key: action,
3075
- type: "button",
3076
- size: "sm",
3077
- variant: "outline",
3078
- disabled: locked,
3079
- onClick: () => onAct(action)
3080
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketFailure }, failure));
3081
- }
3082
3482
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
3083
3483
  const [acknowledged, setAcknowledged] = useState(false);
3084
3484
  return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -3095,7 +3495,7 @@ window.__ModuleLoader__.load({
3095
3495
  onConfirm
3096
3496
  });
3097
3497
  }
3098
- function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmAction, onConfirming }) {
3498
+ function MarketSection({ t, titleKey, rows, pending, failureOf, act, confirmActions, onConfirming }) {
3099
3499
  if (rows.length === 0) return null;
3100
3500
  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, {
3101
3501
  key: row.id,
@@ -3103,29 +3503,50 @@ window.__ModuleLoader__.load({
3103
3503
  row,
3104
3504
  pending,
3105
3505
  failure: failureOf(row.id),
3106
- onAct: (action) => action === confirmAction ? onConfirming(row.id) : void act(row.id, action)
3506
+ onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action)
3107
3507
  }))));
3108
3508
  }
3109
- function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, mock }) {
3110
- const source = mock?.manifests ?? manifests;
3509
+ function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, settling, mock }) {
3510
+ const [titles, setTitles] = useState(/* @__PURE__ */ new Map());
3511
+ useEffect(() => {
3512
+ if (mock === void 0) setTitles((known) => mergeTitles(known, manifests));
3513
+ }, [manifests, mock]);
3514
+ const catalog = mock?.manifests ?? manifests;
3111
3515
  const effective = mock === void 0 ? capabilities : mock.capabilities;
3516
+ const source = liveManifests(catalog, effective, mock === void 0 && installed !== void 0 ? new Set(installed.map((item) => item.unit)) : null);
3112
3517
  const rows = marketRows(source, effective, mock?.updates ?? updates ?? {});
3113
3518
  const shared = sharedRows(source, effective);
3114
- const installedList = installedRows(mock?.installed ?? installed ?? [], source, new Set(rows.map((row) => row.id)));
3115
- const rowById = new Map([...rows, ...installedList].map((row) => [row.id, row]));
3116
3519
  const [pending, setPending] = useState(mock?.pending ?? null);
3117
3520
  const provision = useHostWrite({
3118
3521
  channel: "provision",
3119
3522
  networkText: t("panels.failed")
3120
3523
  });
3121
3524
  const [confirming, setConfirming] = useState(mock?.confirming ?? null);
3122
- const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
3123
3525
  const [failed, setFailed] = useState(mock?.failure ?? null);
3526
+ const removing = pending !== null && pending.action === "remove-bundle" && failed?.id !== pending.id ? pending.id : null;
3527
+ const installedList = installedRows((mock?.installed ?? installed ?? []).filter((module) => !(settling?.has(module.unit) ?? false) && module.unit !== removing), source, new Set(rows.map((row) => row.id)), titles);
3528
+ const pendingRow = removing === null || pending === null || rows.some((row) => row.id === removing) ? void 0 : {
3529
+ id: removing,
3530
+ titleKey: pending.titleKey ?? titles.get(removing) ?? removing,
3531
+ state: "installed",
3532
+ canInstall: false,
3533
+ canUpdate: false,
3534
+ canUninstall: true,
3535
+ ...pending.pkg === void 0 ? {} : { pkg: pending.pkg },
3536
+ ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
3537
+ };
3538
+ const shown = pendingRow === void 0 ? rows : [...rows, pendingRow];
3539
+ const rowById = new Map([...shown, ...installedList].map((row) => [row.id, row]));
3540
+ const confirmingRow = confirming === null ? void 0 : rowById.get(confirming);
3124
3541
  const act = async (id, action) => {
3125
3542
  if (mock !== void 0) return;
3543
+ const row = rowById.get(id);
3126
3544
  setPending({
3127
3545
  id,
3128
- action
3546
+ action,
3547
+ ...row?.titleKey === void 0 ? {} : { titleKey: row.titleKey },
3548
+ ...row?.pkg === void 0 ? {} : { pkg: row.pkg },
3549
+ ...row?.version?.installed === void 0 ? {} : { version: row.version.installed }
3129
3550
  });
3130
3551
  setConfirming(null);
3131
3552
  setFailed(null);
@@ -3142,20 +3563,23 @@ window.__ModuleLoader__.load({
3142
3563
  });
3143
3564
  setPending(null);
3144
3565
  if (!outcome.ok) {
3566
+ onChanged();
3145
3567
  setFailed({
3146
3568
  id,
3147
3569
  message: t("panels.market.failed", { reason: outcome.message })
3148
3570
  });
3149
3571
  return;
3150
3572
  }
3573
+ const reason = changeFailure(changeOf(outcome.value), t);
3151
3574
  onChanged();
3575
+ if (reason !== void 0) setFailed({
3576
+ id,
3577
+ message: t("panels.market.failed", { reason })
3578
+ });
3152
3579
  };
3153
- if (!(freshness.loaded && installedRead !== false)) return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("span", { className: MarketPage_module_default.marketChecking }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
3154
- state: "ongoing",
3155
- size: 14
3156
- }), t("panels.market.checking")));
3157
- if (rows.length === 0 && installedList.length === 0) return /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ h("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
3158
- return /* @__PURE__ */ h(Fragment, null, marketSections(rows).map((section) => /* @__PURE__ */ h(MarketSection, {
3580
+ if (!(freshness.loaded && installedRead !== false) || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketChecking, { t });
3581
+ if (shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ h(MarketEmpty, { t });
3582
+ return /* @__PURE__ */ h(Fragment, null, marketSections(shown).map((section) => /* @__PURE__ */ h(MarketSection, {
3159
3583
  key: section.id,
3160
3584
  t,
3161
3585
  titleKey: section.titleKey,
@@ -3163,7 +3587,7 @@ window.__ModuleLoader__.load({
3163
3587
  pending,
3164
3588
  failureOf: (id) => failed?.id === id ? failed.message : null,
3165
3589
  act,
3166
- confirmAction: "uninstall",
3590
+ confirmActions: CONFIRM_UNINSTALL,
3167
3591
  onConfirming: setConfirming
3168
3592
  })), /* @__PURE__ */ h(MarketSection, {
3169
3593
  t,
@@ -3172,268 +3596,100 @@ window.__ModuleLoader__.load({
3172
3596
  pending,
3173
3597
  failureOf: (id) => failed?.id === id ? failed.message : null,
3174
3598
  act,
3175
- confirmAction: "remove-bundle",
3599
+ confirmActions: CONFIRM_REMOVE,
3176
3600
  onConfirming: setConfirming
3177
3601
  }), /* @__PURE__ */ h(PanelFoot, {
3178
- size: "md",
3179
- text: t("panels.market.foot")
3180
- }), shared.length === 0 ? null : /* @__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 }, shared.length)), /* @__PURE__ */ h("ul", { className: MarketPage_module_default.marketList }, shared.map((row) => /* @__PURE__ */ h(SharedLine, {
3181
- key: row.id,
3182
- t,
3183
- row,
3184
- pending,
3185
- failure: failed?.id === row.id ? failed.message : null,
3186
- onAct: (action) => void act(row.id, action)
3187
- })))), /* @__PURE__ */ h(ConfirmUninstall, {
3188
- key: confirming ?? "",
3189
- t,
3190
- name: confirmingRow === void 0 ? null : t(confirmingRow.titleKey),
3191
- onCancel: () => setConfirming(null),
3192
- onConfirm: () => {
3193
- const id = confirming;
3194
- setConfirming(null);
3195
- if (id === null) return;
3196
- act(id, rowById.get(id)?.pkg === void 0 ? "uninstall" : "remove-bundle");
3197
- }
3198
- }));
3199
- }
3200
- //#endregion
3201
- //#region src/shared/api/bundle-install.ts
3202
- var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
3203
- var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
3204
- var MODULE_VERSIONS_ROUTE = "module-versions";
3205
- //#endregion
3206
- //#region src/shared/hooks/bundle-queries.ts
3207
- function readBundleRegistries() {
3208
- return apiGet(BUNDLE_REGISTRIES_ROUTE);
3209
- }
3210
- function readBundleInspection(spec, registry) {
3211
- return apiGet(BUNDLE_INSPECT_ROUTE, {
3212
- spec,
3213
- ...registry === void 0 || registry === "" ? {} : { registry }
3214
- });
3215
- }
3216
- function readModuleVersions(force = false) {
3217
- return apiGet(MODULE_VERSIONS_ROUTE, force ? { force: "1" } : void 0);
3218
- }
3219
- var AddModule_module_default = {
3220
- wide: "_wide_1coeb_1",
3221
- dialog: "_dialog_1coeb_8",
3222
- content: "_content_1coeb_13",
3223
- stack: "_stack_1coeb_18",
3224
- body: "_body_1coeb_25",
3225
- field: "_field_1coeb_32",
3226
- input: "_input_1coeb_39",
3227
- registryField: "_registryField_1coeb_45",
3228
- options: "_options_1coeb_51",
3229
- guideToggle: "_guideToggle_1coeb_59",
3230
- registryToggle: "_registryToggle_1coeb_78",
3231
- registryWrap: "_registryWrap_1coeb_87",
3232
- registryChosen: "_registryChosen_1coeb_121",
3233
- registry: "_registry_1coeb_45",
3234
- registryOption: "_registryOption_1coeb_143",
3235
- registryPick: "_registryPick_1coeb_159",
3236
- registryTitle: "_registryTitle_1coeb_179",
3237
- registryHint: "_registryHint_1coeb_189",
3238
- inputError: "_inputError_1coeb_197",
3239
- guide: "_guide_1coeb_59",
3240
- guideList: "_guideList_1coeb_214",
3241
- guideItem: "_guideItem_1coeb_223",
3242
- guideIndex: "_guideIndex_1coeb_230",
3243
- guideMain: "_guideMain_1coeb_244",
3244
- guideTitle: "_guideTitle_1coeb_252",
3245
- guideHint: "_guideHint_1coeb_258",
3246
- guideExample: "_guideExample_1coeb_264",
3247
- guideExampleLabel: "_guideExampleLabel_1coeb_274",
3248
- footer: "_footer_1coeb_278",
3249
- hero: "_hero_1coeb_285",
3250
- heroIcon: "_heroIcon_1coeb_294",
3251
- pendingTitle: "_pendingTitle_1coeb_311",
3252
- wizardTitle: "_wizardTitle_1coeb_319",
3253
- subject: "_subject_1coeb_326",
3254
- subjectName: "_subjectName_1coeb_337",
3255
- subjectMeta: "_subjectMeta_1coeb_343",
3256
- subjectDesc: "_subjectDesc_1coeb_344",
3257
- result: "_result_1coeb_351",
3258
- resultWarn: "_resultWarn_1coeb_352",
3259
- approval: "_approval_1coeb_365",
3260
- approvalTitle: "_approvalTitle_1coeb_375",
3261
- approvalText: "_approvalText_1coeb_382",
3262
- approvalCaution: "_approvalCaution_1coeb_388",
3263
- note: "_note_1coeb_395",
3264
- noteWarn: "_noteWarn_1coeb_402",
3265
- noteError: "_noteError_1coeb_406",
3266
- problem: "_problem_1coeb_410",
3267
- detailLabel: "_detailLabel_1coeb_417",
3268
- detail: "_detail_1coeb_417"
3269
- };
3270
- //#endregion
3271
- //#region src/app/layouts/market/add-module-text.ts
3272
- var GUIDE_ITEMS = [
3273
- {
3274
- titleKey: "panels.market.add.guideIdTitle",
3275
- exampleKey: "panels.market.add.guideIdExample",
3276
- hintKey: "panels.market.add.guideIdHint"
3277
- },
3278
- {
3279
- titleKey: "panels.market.add.guideGitTitle",
3280
- exampleKey: "panels.market.add.guideGitExample",
3281
- hintKey: "panels.market.add.guideGitHint"
3282
- },
3283
- {
3284
- titleKey: "panels.market.add.guidePathTitle",
3285
- exampleKey: "panels.market.add.guidePathExample",
3286
- hintKey: "panels.market.add.guidePathHint"
3287
- }
3288
- ];
3289
- function hostOf(url) {
3290
- try {
3291
- return new URL(url).host;
3292
- } catch {
3293
- return url;
3294
- }
3295
- }
3296
- var OFFICIAL_NPM_HOST = "registry.npmjs.org";
3297
- var KNOWN_HOSTS = {
3298
- [OFFICIAL_NPM_HOST]: "panels.market.add.registryOfficial",
3299
- "registry.npmmirror.com": "panels.market.add.registryMirror"
3300
- };
3301
- function registryNameKey(host) {
3302
- return KNOWN_HOSTS[host];
3303
- }
3304
- function normalizeRegistry(url) {
3305
- const parsed = new URL(url);
3306
- if (!parsed.pathname.endsWith("/")) parsed.pathname += "/";
3307
- return parsed.href;
3308
- }
3309
- function registryKey(url, resolved) {
3310
- const target = url ?? resolved;
3311
- if (target === null) return "";
3312
- try {
3313
- return normalizeRegistry(target);
3314
- } catch {
3315
- return target;
3316
- }
3317
- }
3318
- function registryOptions(registries) {
3319
- const resolved = registries === null ? null : registries.resolved;
3320
- const entries = [
3321
- registries === null ? null : registries.registry,
3322
- ...registries === null ? [] : registries.fallbackRegistries,
3323
- null
3324
- ];
3325
- const offered = [];
3326
- const keys = /* @__PURE__ */ new Set();
3327
- for (const entry of entries) {
3328
- const key = registryKey(entry, resolved);
3329
- if (keys.has(key)) continue;
3330
- keys.add(key);
3331
- const url = entry ?? resolved;
3332
- if (url === null) {
3333
- offered.push({
3334
- choice: {
3335
- kind: "default",
3336
- value: ""
3337
- },
3338
- host: OFFICIAL_NPM_HOST,
3339
- nameKey: "panels.market.add.registryDefault"
3340
- });
3341
- continue;
3342
- }
3343
- const host = hostOf(url);
3344
- const nameKey = registryNameKey(host);
3345
- offered.push({
3346
- choice: entry === null ? {
3347
- kind: "default",
3348
- value: ""
3349
- } : {
3350
- kind: "url",
3351
- value: entry
3352
- },
3353
- host,
3354
- ...nameKey === void 0 ? {} : { nameKey }
3355
- });
3356
- }
3357
- offered.push({ choice: {
3358
- kind: "custom",
3359
- value: ""
3360
- } });
3361
- return offered;
3362
- }
3363
- function customRegistryAllowed(value) {
3364
- return /^https?:\/\//.test(value.trim());
3365
- }
3366
- function registryOf(choice, custom) {
3367
- if (choice.kind === "custom") return customRegistryAllowed(custom) ? custom.trim() : void 0;
3368
- return choice.value === "" ? void 0 : choice.value;
3602
+ size: "md",
3603
+ text: t("panels.market.foot")
3604
+ }), /* @__PURE__ */ h(SharedSection, {
3605
+ t,
3606
+ rows: shared,
3607
+ pending,
3608
+ failureOf: (id) => failed?.id === id ? failed.message : null,
3609
+ act
3610
+ }), /* @__PURE__ */ h(ConfirmUninstall, {
3611
+ key: confirming ?? "",
3612
+ t,
3613
+ name: confirmingRow === void 0 ? null : t(confirmingRow.titleKey),
3614
+ onCancel: () => setConfirming(null),
3615
+ onConfirm: () => {
3616
+ const id = confirming;
3617
+ setConfirming(null);
3618
+ if (id === null) return;
3619
+ act(id, rowById.get(id)?.pkg === void 0 ? "uninstall" : "remove-bundle");
3620
+ }
3621
+ }));
3369
3622
  }
3370
- function registryName(option, t) {
3371
- if (option.choice.kind === "custom") return t("panels.market.add.registryCustom");
3372
- if (option.nameKey !== void 0) return t(option.nameKey);
3373
- return option.host ?? t("panels.market.add.registryDefault");
3623
+ //#endregion
3624
+ //#region src/shared/api/bundle-install.ts
3625
+ var BUNDLE_REGISTRIES_ROUTE = "bundle-registries";
3626
+ var BUNDLE_INSPECT_ROUTE = "bundle-inspect";
3627
+ var MODULE_VERSIONS_ROUTE = "module-versions";
3628
+ //#endregion
3629
+ //#region src/shared/hooks/bundle-queries.ts
3630
+ function readBundleRegistries() {
3631
+ return apiGet(BUNDLE_REGISTRIES_ROUTE);
3374
3632
  }
3375
- function optionLabel(option, t) {
3376
- if (option.choice.kind === "custom") return t("panels.market.add.registryCustom");
3377
- if (option.host === void 0) return t("panels.market.add.registryDefault");
3378
- return option.nameKey === void 0 ? option.host : t("panels.market.add.registryWithHost", {
3379
- name: t(option.nameKey),
3380
- host: option.host
3633
+ function readBundleInspection(spec, registry) {
3634
+ return apiGet(BUNDLE_INSPECT_ROUTE, {
3635
+ spec,
3636
+ ...registry === void 0 || registry === "" ? {} : { registry }
3381
3637
  });
3382
3638
  }
3383
- var PROBLEM_KEYS = {
3384
- "invalid-spec": "panels.market.add.problemInvalid",
3385
- "already-installed": "panels.market.add.problemInstalled",
3386
- "not-found": "panels.market.add.problemNotFound",
3387
- "not-a-package": "panels.market.add.problemNotPackage",
3388
- "not-a-bundle": "panels.market.add.problemNotBundle",
3389
- network: "panels.market.add.problemNetwork",
3390
- unknown: "panels.market.add.problemUnknown"
3391
- };
3392
- function problemKey(problem) {
3393
- return PROBLEM_KEYS[problem] ?? PROBLEM_KEYS.unknown;
3394
- }
3395
- var FAILURE_KEYS = {
3396
- network: "panels.market.add.failureNetwork",
3397
- "spec-host": "panels.market.add.failureNetworkHost",
3398
- "not-found": "panels.market.add.failureNotFound",
3399
- "no-matching-version": "panels.market.add.failureNoMatchingVersion",
3400
- "disk-full": "panels.market.add.failureDiskFull",
3401
- permission: "panels.market.add.failurePermission",
3402
- "build-blocked": "panels.market.add.failureBuildBlocked",
3403
- integrity: "panels.market.add.failureIntegrity",
3404
- timeout: "panels.market.add.failureTimeout",
3405
- "pnpm-missing": "panels.market.add.failurePnpmMissing",
3406
- "operation-error": "panels.market.add.failureGeneric",
3407
- "incompatible-version": "panels.market.add.failureGeneric",
3408
- "not-bundle": "panels.market.add.failureGeneric",
3409
- "invalid-spec": "panels.market.add.failureGeneric",
3410
- "bundle-in-use": "panels.market.add.failureGeneric",
3411
- "not-removable": "panels.market.add.failureGeneric",
3412
- "stop-profile": "panels.market.add.failureGeneric",
3413
- "stale-approval": "panels.market.add.failureGeneric"
3414
- };
3415
- function failureCode(change) {
3416
- if (change.failedAt === "spec-host") return "spec-host";
3417
- return change.errorCode ?? change.packageResult?.kind ?? change.application;
3418
- }
3419
- function failureReasonKey(code) {
3420
- return FAILURE_KEYS[code];
3421
- }
3422
- function failureReason(code, application, t) {
3423
- const key = failureReasonKey(code);
3424
- if (key !== void 0) return t(key);
3425
- if (code === application) return t("panels.market.add.reason.unknown");
3426
- return code;
3639
+ function readModuleVersions(force = false) {
3640
+ return apiGet(MODULE_VERSIONS_ROUTE, force ? { force: "1" } : void 0);
3427
3641
  }
3428
- var SUPPLY_KEYS = {
3429
- "pending-restart": "panels.market.add.supplyPending",
3430
- failed: "panels.market.add.supplyFailed",
3431
- "not-a-module": "panels.market.add.notModule",
3432
- "no-needs": void 0
3642
+ var AddModule_module_default = {
3643
+ wide: "_wide_1coeb_1",
3644
+ dialog: "_dialog_1coeb_8",
3645
+ content: "_content_1coeb_13",
3646
+ stack: "_stack_1coeb_18",
3647
+ body: "_body_1coeb_25",
3648
+ field: "_field_1coeb_32",
3649
+ input: "_input_1coeb_39",
3650
+ registryField: "_registryField_1coeb_45",
3651
+ options: "_options_1coeb_51",
3652
+ guideToggle: "_guideToggle_1coeb_59",
3653
+ registryToggle: "_registryToggle_1coeb_78",
3654
+ registryWrap: "_registryWrap_1coeb_87",
3655
+ registryChosen: "_registryChosen_1coeb_121",
3656
+ registry: "_registry_1coeb_45",
3657
+ registryOption: "_registryOption_1coeb_143",
3658
+ registryPick: "_registryPick_1coeb_159",
3659
+ registryTitle: "_registryTitle_1coeb_179",
3660
+ registryHint: "_registryHint_1coeb_189",
3661
+ inputError: "_inputError_1coeb_197",
3662
+ guide: "_guide_1coeb_59",
3663
+ guideList: "_guideList_1coeb_214",
3664
+ guideItem: "_guideItem_1coeb_223",
3665
+ guideIndex: "_guideIndex_1coeb_230",
3666
+ guideMain: "_guideMain_1coeb_244",
3667
+ guideTitle: "_guideTitle_1coeb_252",
3668
+ guideHint: "_guideHint_1coeb_258",
3669
+ guideExample: "_guideExample_1coeb_264",
3670
+ guideExampleLabel: "_guideExampleLabel_1coeb_274",
3671
+ footer: "_footer_1coeb_278",
3672
+ hero: "_hero_1coeb_285",
3673
+ heroIcon: "_heroIcon_1coeb_294",
3674
+ pendingTitle: "_pendingTitle_1coeb_311",
3675
+ wizardTitle: "_wizardTitle_1coeb_319",
3676
+ subject: "_subject_1coeb_326",
3677
+ subjectName: "_subjectName_1coeb_337",
3678
+ subjectMeta: "_subjectMeta_1coeb_343",
3679
+ subjectDesc: "_subjectDesc_1coeb_344",
3680
+ result: "_result_1coeb_351",
3681
+ resultWarn: "_resultWarn_1coeb_352",
3682
+ approval: "_approval_1coeb_365",
3683
+ approvalTitle: "_approvalTitle_1coeb_375",
3684
+ approvalText: "_approvalText_1coeb_382",
3685
+ approvalCaution: "_approvalCaution_1coeb_388",
3686
+ note: "_note_1coeb_395",
3687
+ noteWarn: "_noteWarn_1coeb_402",
3688
+ noteError: "_noteError_1coeb_406",
3689
+ problem: "_problem_1coeb_410",
3690
+ detailLabel: "_detailLabel_1coeb_417",
3691
+ detail: "_detail_1coeb_417"
3433
3692
  };
3434
- function supplyKey(state) {
3435
- return SUPPLY_KEYS[state];
3436
- }
3437
3693
  //#endregion
3438
3694
  //#region src/app/layouts/market/AddModuleRegistry.tsx
3439
3695
  var REGISTRY_ID = "wb-add-module-registry";
@@ -3493,7 +3749,13 @@ window.__ModuleLoader__.load({
3493
3749
  return /* @__PURE__ */ h("div", {
3494
3750
  key: `${option.choice.kind}|${option.choice.value}`,
3495
3751
  className: AddModule_module_default.registryOption,
3496
- "data-checked": active
3752
+ "data-checked": active,
3753
+ onPointerDown: () => {
3754
+ if (!active) state.setChoice(option.choice);
3755
+ },
3756
+ onFocusCapture: () => {
3757
+ if (!active) state.setChoice(option.choice);
3758
+ }
3497
3759
  }, /* @__PURE__ */ h("label", { className: AddModule_module_default.registryPick }, /* @__PURE__ */ h("input", {
3498
3760
  type: "radio",
3499
3761
  name: REGISTRY_ID,
@@ -3505,7 +3767,6 @@ window.__ModuleLoader__.load({
3505
3767
  "aria-label": t("panels.market.add.registryCustom"),
3506
3768
  placeholder: t("panels.market.add.registryCustomPlaceholder"),
3507
3769
  value: state.custom,
3508
- disabled: !active,
3509
3770
  invalid: customBad,
3510
3771
  onChange: (event) => state.setCustom(event.target.value)
3511
3772
  }), customBad ? /* @__PURE__ */ h("span", {
@@ -4097,7 +4358,7 @@ window.__ModuleLoader__.load({
4097
4358
  }, t("panels.market.add.run"))) : null, installing ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
4098
4359
  type: "button",
4099
4360
  variant: "outline",
4100
- size: "sm",
4361
+ size: "md",
4101
4362
  onClick: state.cancelInstall
4102
4363
  }, t("panels.market.add.cancel")) : null, state.phase === "result" ? /* @__PURE__ */ h(Fragment, null, failed && builds.length === 0 ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
4103
4364
  type: "button",
@@ -4167,6 +4428,7 @@ window.__ModuleLoader__.load({
4167
4428
  checking: false,
4168
4429
  checkedAt: null
4169
4430
  };
4431
+ var NO_UNITS = /* @__PURE__ */ new Set();
4170
4432
  function useLiveManifests(units) {
4171
4433
  useSyncExternalStore(useCallback((listener) => units.subscribe(listener), [units]), useCallback(() => units.version(), [units]));
4172
4434
  return units.manifests();
@@ -4189,7 +4451,7 @@ window.__ModuleLoader__.load({
4189
4451
  const [decided, setDecided] = useState(false);
4190
4452
  const [adding, setAdding] = useState(false);
4191
4453
  const [updates, setUpdates] = useState({});
4192
- const [installed, setInstalled] = useState([]);
4454
+ const [installed, setInstalled] = useState(void 0);
4193
4455
  const [installedRead, setInstalledRead] = useState(false);
4194
4456
  const loadUpdates = useCallback((force = false) => {
4195
4457
  readModuleVersions(force).then((response) => {
@@ -4225,6 +4487,24 @@ window.__ModuleLoader__.load({
4225
4487
  forceProbe,
4226
4488
  loadUpdates
4227
4489
  ]);
4490
+ const installedKey = (installed ?? []).map((module) => module.unit).join("|");
4491
+ const rosterKey = manifests.map((manifest) => manifest.id).join("|");
4492
+ const activeKey = Object.keys(capabilities ?? {}).join("|");
4493
+ const seenRef = useRef(null);
4494
+ const [settling, setSettling] = useState(NO_UNITS);
4495
+ useEffect(() => {
4496
+ const units = installedKey === "" ? [] : installedKey.split("|");
4497
+ const held = holdBack(units, new Set(rosterKey === "" ? [] : rosterKey.split("|")), new Set(activeKey === "" ? [] : activeKey.split("|")), seenRef.current);
4498
+ seenRef.current = new Set(units);
4499
+ setSettling(held.length === 0 ? NO_UNITS : new Set(held));
4500
+ if (held.length === 0) return;
4501
+ const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
4502
+ return () => clearTimeout(timer);
4503
+ }, [
4504
+ installedKey,
4505
+ rosterKey,
4506
+ activeKey
4507
+ ]);
4228
4508
  const freshness = {
4229
4509
  loaded: capabilities !== null,
4230
4510
  checking,
@@ -4274,6 +4554,7 @@ window.__ModuleLoader__.load({
4274
4554
  updates,
4275
4555
  installed,
4276
4556
  installedRead: mock === void 0 ? installedRead : mock.installedRead ?? true,
4557
+ settling: mock === void 0 ? settling : void 0,
4277
4558
  mock
4278
4559
  }), /* @__PURE__ */ h(AddModuleDialog, {
4279
4560
  t,
@@ -4372,6 +4653,14 @@ window.__ModuleLoader__.load({
4372
4653
  return { textKey: "env.bridge.unknown" };
4373
4654
  }
4374
4655
  //#endregion
4656
+ //#region src/app/layouts/env-gate/gate-deadline.ts
4657
+ function createGateDeadline(giveUpMs, expire) {
4658
+ const timer = setTimeout(expire, giveUpMs);
4659
+ return { disarm() {
4660
+ clearTimeout(timer);
4661
+ } };
4662
+ }
4663
+ //#endregion
4375
4664
  //#region src/app/layouts/env-gate/gate-dom.ts
4376
4665
  var SVG_NS = "http://www.w3.org/2000/svg";
4377
4666
  function svgIcon(kind) {
@@ -4834,7 +5123,6 @@ window.__ModuleLoader__.load({
4834
5123
  }
4835
5124
  let cancelled = false;
4836
5125
  const forcePlan = createForcePlan();
4837
- const startedAt = Date.now();
4838
5126
  let pinned = null;
4839
5127
  function close() {
4840
5128
  if (closed) return;
@@ -4842,9 +5130,11 @@ window.__ModuleLoader__.load({
4842
5130
  cancelled = true;
4843
5131
  if (timer !== void 0) clearTimeout(timer);
4844
5132
  if (ticker !== void 0) clearInterval(ticker);
5133
+ deadline.disarm();
4845
5134
  overlay.remove();
4846
5135
  if (root !== null) root.inert = previousInert;
4847
5136
  }
5137
+ const deadline = createGateDeadline(GIVE_UP_MS, close);
4848
5138
  const rows = /* @__PURE__ */ new Map();
4849
5139
  let renderedOrder = "";
4850
5140
  function ensureRow(step) {
@@ -4938,10 +5228,6 @@ window.__ModuleLoader__.load({
4938
5228
  return;
4939
5229
  }
4940
5230
  if (response.phase === "failed") return;
4941
- if (Date.now() - startedAt > GIVE_UP_MS) {
4942
- close();
4943
- return;
4944
- }
4945
5231
  timer = setTimeout(() => void poll(), POLL_MS);
4946
5232
  }
4947
5233
  function retryNow() {
@@ -5203,7 +5489,7 @@ window.__ModuleLoader__.load({
5203
5489
  };
5204
5490
  //#endregion
5205
5491
  //#region src/app/layouts/rightbar/panel-mock.ts
5206
- function row(id, titleKey, shown) {
5492
+ function row$1(id, titleKey, shown) {
5207
5493
  return {
5208
5494
  id,
5209
5495
  titleKey,
@@ -5232,10 +5518,10 @@ window.__ModuleLoader__.load({
5232
5518
  }];
5233
5519
  const titleKey = found.card?.titleKey ?? found.id;
5234
5520
  const id = found.id;
5235
- const on = row(id, titleKey, true);
5236
- const off = row(id, titleKey, false);
5237
- const twin = row(`${id}-b`, titleKey, true);
5238
- const third = row(`${id}-c`, titleKey, false);
5521
+ const on = row$1(id, titleKey, true);
5522
+ const off = row$1(id, titleKey, false);
5523
+ const twin = row$1(`${id}-b`, titleKey, true);
5524
+ const third = row$1(`${id}-c`, titleKey, false);
5239
5525
  return [
5240
5526
  {
5241
5527
  id: "one",
@@ -5317,7 +5603,7 @@ window.__ModuleLoader__.load({
5317
5603
  {
5318
5604
  id: "long",
5319
5605
  label: "超长模块名",
5320
- units: [row(id, "一个名字特别特别长的模块用来验证省略号会不会把开关挤下去", true)],
5606
+ units: [row$1(id, "一个名字特别特别长的模块用来验证省略号会不会把开关挤下去", true)],
5321
5607
  capabilities: probe(id, "ok"),
5322
5608
  expect: {
5323
5609
  rows: 1,
@@ -5383,13 +5669,14 @@ window.__ModuleLoader__.load({
5383
5669
  function available(capability) {
5384
5670
  if (capability === void 0) return true;
5385
5671
  if (capability.released === true) return false;
5386
- return capability.status === "ok" || capability.status === "unchecked";
5672
+ return capability.status === "ok" || capability.status === "unchecked" || capability.status === "failed";
5387
5673
  }
5388
5674
  function selectPanelUnits(units, capabilities) {
5389
5675
  return units.filter((unit) => available(capabilities?.[unit.id]));
5390
5676
  }
5391
5677
  function panelBadgeKey(capability) {
5392
5678
  if (capability === void 0 || capability.status === "ok") return void 0;
5679
+ if (capability.status === "failed") return "panels.dep.failed";
5393
5680
  if (capability.status === "missing-plugin") return "panels.dep.missingPlugin";
5394
5681
  if (capability.status === "missing-commands") return "panels.dep.missingCommands";
5395
5682
  return "panels.dep.unchecked";
@@ -5648,6 +5935,16 @@ window.__ModuleLoader__.load({
5648
5935
  cards: 8,
5649
5936
  empty: false
5650
5937
  }
5938
+ },
5939
+ {
5940
+ id: "crash",
5941
+ label: "坏卡 + 好卡",
5942
+ note: "一张渲染必炸的卡 + 你装的模块(配 ?wbCrash=1 才摆得出来):要看到坏的那张只剩一句\"这个模块起不来\",别的卡与面板壳都还在。",
5943
+ shape: { kind: "all" },
5944
+ expect: {
5945
+ cards: 1,
5946
+ empty: false
5947
+ }
5651
5948
  }
5652
5949
  ],
5653
5950
  EMPTY,
@@ -5692,6 +5989,15 @@ window.__ModuleLoader__.load({
5692
5989
  reading: true,
5693
5990
  repeated: false
5694
5991
  };
5992
+ if (shape.kind === "all") return {
5993
+ modules: all.map((module) => ({
5994
+ key: module.id,
5995
+ module
5996
+ })),
5997
+ empty: false,
5998
+ reading: false,
5999
+ repeated: all.length > 1
6000
+ };
5695
6001
  const seed = all[0];
5696
6002
  const modules = seed === void 0 ? [] : Array.from({ length: Math.max(0, shape.count) }, (_unused, at) => ({
5697
6003
  key: `${seed.id}#${at}`,
@@ -5902,6 +6208,9 @@ window.__ModuleLoader__.load({
5902
6208
  var Rightbar_module_default = { panel: "_panel_1oyh4_1" };
5903
6209
  //#endregion
5904
6210
  //#region src/app/layouts/rightbar/Rightbar.tsx
6211
+ function workspacePathOf(world) {
6212
+ return world.current.workspace?.path ?? "";
6213
+ }
5905
6214
  function ModuleHost({ module, step, panelToken, onPanelRefresh, onSummary, ...rest }) {
5906
6215
  const [ownToken, setOwnToken] = useState(0);
5907
6216
  return /* @__PURE__ */ h(step === void 0 ? module.View : module.steps?.[step]?.View ?? module.View, {
@@ -5952,8 +6261,13 @@ window.__ModuleLoader__.load({
5952
6261
  icon: /* @__PURE__ */ h(IconBrandMark, { size: 32 }),
5953
6262
  title: t("panels.unknownStep")
5954
6263
  });
5955
- return /* @__PURE__ */ h(ModuleHost, {
5956
- key: `${owner.id}:${top.kind}`,
6264
+ const key = `${owner.id}:${top.kind}`;
6265
+ return /* @__PURE__ */ h(CardBoundary, {
6266
+ key,
6267
+ unit: owner.id,
6268
+ resetKey: `${key}:${panelToken}:${workspacePathOf(world)}`,
6269
+ t
6270
+ }, /* @__PURE__ */ h(ModuleHost, {
5957
6271
  module: owner,
5958
6272
  step: top.kind,
5959
6273
  world,
@@ -5963,7 +6277,7 @@ window.__ModuleLoader__.load({
5963
6277
  onOpenMarket,
5964
6278
  onSummary,
5965
6279
  t
5966
- });
6280
+ }));
5967
6281
  }
5968
6282
  return /* @__PURE__ */ h(Fragment, null, plan.reading ? /* @__PURE__ */ h(CenteredState, {
5969
6283
  icon: null,
@@ -5972,8 +6286,12 @@ window.__ModuleLoader__.load({
5972
6286
  t,
5973
6287
  onOpenModules,
5974
6288
  onOpenMarket
5975
- }) : null, plan.modules.map(({ key, module }) => /* @__PURE__ */ h(ModuleHost, {
6289
+ }) : null, plan.modules.map(({ key, module }) => /* @__PURE__ */ h(CardBoundary, {
5976
6290
  key,
6291
+ unit: module.id,
6292
+ resetKey: `${key}:${panelToken}:${workspacePathOf(world)}`,
6293
+ t
6294
+ }, /* @__PURE__ */ h(ModuleHost, {
5977
6295
  module,
5978
6296
  world,
5979
6297
  panelToken,
@@ -5982,7 +6300,7 @@ window.__ModuleLoader__.load({
5982
6300
  onOpenMarket,
5983
6301
  onSummary,
5984
6302
  t
5985
- })));
6303
+ }))));
5986
6304
  }
5987
6305
  function Rightbar(props) {
5988
6306
  const units = props.units;
@@ -6005,7 +6323,7 @@ window.__ModuleLoader__.load({
6005
6323
  const plan = planBoard(fixtures.shape, {
6006
6324
  modules: visibleModules,
6007
6325
  configRead: enabledUnits !== null
6008
- }, fixtureSeed(manifests, modules.all()));
6326
+ }, fixtureSeed(manifests, modules.all(), crashModeOn(window.location.search)));
6009
6327
  const world = createSuiteWorld({
6010
6328
  workspaces,
6011
6329
  sessions,
@@ -6245,59 +6563,324 @@ window.__ModuleLoader__.load({
6245
6563
  className: "wb-panelTag"
6246
6564
  }, t(hint.labelKey))));
6247
6565
  }
6566
+ var ProjectSwitcher_module_default = {
6567
+ root: "_root_1vd78_1",
6568
+ anchor: "_anchor_1vd78_7",
6569
+ menu: "_menu_1vd78_12",
6570
+ trigger: "_trigger_1vd78_17",
6571
+ glyph: "_glyph_1vd78_44",
6572
+ glyphActive: "_glyphActive_1vd78_54",
6573
+ triggerName: "_triggerName_1vd78_58",
6574
+ dir: "_dir_1vd78_69",
6575
+ name: "_name_1vd78_77",
6576
+ chevron: "_chevron_1vd78_90",
6577
+ row: "_row_1vd78_96",
6578
+ trailing: "_trailing_1vd78_104",
6579
+ rowAction: "_rowAction_1vd78_114",
6580
+ current: "_current_1vd78_127",
6581
+ field: "_field_1vd78_134",
6582
+ searchIcon: "_searchIcon_1vd78_151",
6583
+ search: "_search_1vd78_151"
6584
+ };
6585
+ var WorkspaceRenameDialog_module_default = {
6586
+ dialog: "_dialog_1vye5_1",
6587
+ stack: "_stack_1vye5_5",
6588
+ input: "_input_1vye5_12",
6589
+ meta: "_meta_1vye5_18"
6590
+ };
6591
+ function basenameOf(value) {
6592
+ const trimmed = value.replace(/[/\\]+$/, "");
6593
+ const at = Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\"));
6594
+ return at === -1 ? trimmed : trimmed.slice(at + 1);
6595
+ }
6596
+ function displayNameOf(workspace) {
6597
+ const dir = basenameOf(workspace.path) || workspace.path;
6598
+ const title = workspace.title.trim();
6599
+ return {
6600
+ dir,
6601
+ name: title !== "" && title !== dir && title !== "default-workspace" ? title : ""
6602
+ };
6603
+ }
6604
+ function matchWorkspaces(items, query) {
6605
+ const needle = query.trim().toLowerCase();
6606
+ if (needle === "") return [...items];
6607
+ return items.filter((workspace) => {
6608
+ const { dir, name } = displayNameOf(workspace);
6609
+ return `${dir} ${name} ${workspace.path}`.toLowerCase().includes(needle);
6610
+ });
6611
+ }
6612
+ function titleFor(workspace, draft) {
6613
+ const trimmed = draft.trim();
6614
+ if (trimmed === "") return basenameOf(workspace.path) || workspace.path;
6615
+ return trimmed;
6616
+ }
6617
+ function nameTooLong(draft) {
6618
+ return draft.trim().length > 20;
6619
+ }
6620
+ //#endregion
6621
+ //#region src/app/layouts/sidebar/WorkspaceRenameDialog.tsx
6622
+ function WorkspaceRenameDialog({ workspace, t, onClose, onSubmit }) {
6623
+ const [draft, setDraft] = useState(() => displayNameOf(workspace).name);
6624
+ const [busy, setBusy] = useState(false);
6625
+ const [failed, setFailed] = useState(false);
6626
+ const dir = displayNameOf(workspace).dir;
6627
+ const tooLong = nameTooLong(draft);
6628
+ const save = () => {
6629
+ if (busy || tooLong) return;
6630
+ setBusy(true);
6631
+ setFailed(false);
6632
+ onSubmit(titleFor(workspace, draft)).then((ok) => {
6633
+ setBusy(false);
6634
+ if (ok) onClose();
6635
+ else setFailed(true);
6636
+ });
6637
+ };
6638
+ return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Modal, {
6639
+ open: true,
6640
+ onClose: () => {
6641
+ if (!busy) onClose();
6642
+ },
6643
+ title: t("project.rename.title", { name: dir }),
6644
+ description: t("project.rename.description"),
6645
+ closeLabel: t("project.rename.cancel"),
6646
+ className: WorkspaceRenameDialog_module_default.dialog,
6647
+ footer: /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
6648
+ type: "button",
6649
+ variant: "outline",
6650
+ size: "md",
6651
+ disabled: busy,
6652
+ onClick: onClose
6653
+ }, t("project.rename.cancel")), /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
6654
+ type: "button",
6655
+ variant: "primary",
6656
+ size: "md",
6657
+ disabled: busy || tooLong,
6658
+ "aria-busy": busy,
6659
+ onClick: save
6660
+ }, t(busy ? "project.rename.saving" : "project.rename.save")))
6661
+ }, /* @__PURE__ */ h("div", { className: WorkspaceRenameDialog_module_default.stack }, /* @__PURE__ */ h(TextField, {
6662
+ className: WorkspaceRenameDialog_module_default.input,
6663
+ "data-modal-autofocus": "",
6664
+ id: "wb-workspace-name",
6665
+ name: "wb-workspace-name",
6666
+ "aria-label": t("project.rename.field"),
6667
+ "aria-invalid": tooLong ? "true" : void 0,
6668
+ placeholder: t("project.rename.placeholder"),
6669
+ maxLength: 40,
6670
+ value: draft,
6671
+ onChange: (event) => setDraft(event.currentTarget.value),
6672
+ onKeyDown: (event) => {
6673
+ if (event.key !== "Enter" || event.nativeEvent.isComposing) return;
6674
+ event.preventDefault();
6675
+ save();
6676
+ }
6677
+ }), /* @__PURE__ */ h("div", { className: WorkspaceRenameDialog_module_default.meta }, /* @__PURE__ */ h(Note, { as: "span" }, t("project.rename.hint")), /* @__PURE__ */ h(Note, {
6678
+ as: "span",
6679
+ tone: tooLong ? "problem" : "muted"
6680
+ }, `${draft.trim().length}/20`)), failed ? /* @__PURE__ */ h(Note, { tone: "problem" }, t("project.rename.failed")) : null));
6681
+ }
6682
+ //#endregion
6683
+ //#region src/app/layouts/sidebar/WorkspaceSearchField.tsx
6684
+ function WorkspaceSearchField({ t, query, onQuery, onCursor, onSubmit }) {
6685
+ const boxRef = useRef(null);
6686
+ useEffect(() => {
6687
+ boxRef.current?.querySelector("input")?.focus();
6688
+ }, []);
6689
+ return /* @__PURE__ */ h("span", {
6690
+ ref: boxRef,
6691
+ className: ProjectSwitcher_module_default.field
6692
+ }, /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.searchIcon }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), /* @__PURE__ */ h(TextField, {
6693
+ className: ProjectSwitcher_module_default.search,
6694
+ id: "wb-workspace-search",
6695
+ name: "wb-workspace-search",
6696
+ "aria-label": t("project.search.label"),
6697
+ placeholder: t("project.search.placeholder"),
6698
+ value: query,
6699
+ onChange: (event) => onQuery(event.currentTarget.value),
6700
+ onKeyDown: (event) => {
6701
+ if (event.nativeEvent.isComposing) return;
6702
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
6703
+ event.stopPropagation();
6704
+ event.preventDefault();
6705
+ onCursor(event.key === "ArrowDown" ? 1 : -1);
6706
+ return;
6707
+ }
6708
+ if (event.key !== "Enter") return;
6709
+ event.stopPropagation();
6710
+ onSubmit();
6711
+ }
6712
+ }));
6713
+ }
6714
+ //#endregion
6715
+ //#region src/app/layouts/sidebar/WorkspaceRowAction.tsx
6716
+ function WorkspaceRowAction({ workspace, t, onEdit }) {
6717
+ return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
6718
+ type: "button",
6719
+ variant: "ghost",
6720
+ size: "sm",
6721
+ className: ProjectSwitcher_module_default.rowAction,
6722
+ icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconEditOutlineRegular, { size: 14 }),
6723
+ "aria-label": t("project.rename.row", { name: displayNameOf(workspace).dir }),
6724
+ onClick: (event) => {
6725
+ event.stopPropagation();
6726
+ onEdit();
6727
+ }
6728
+ });
6729
+ }
6730
+ //#endregion
6731
+ //#region src/app/layouts/sidebar/WorkspaceRowLabel.tsx
6732
+ function WorkspaceRowLabel({ workspace, current, action, onHover }) {
6733
+ const { dir, name } = displayNameOf(workspace);
6734
+ const hostRef = useRef(null);
6735
+ const hoverRef = useRef(onHover);
6736
+ useEffect(() => {
6737
+ hoverRef.current = onHover;
6738
+ });
6739
+ useEffect(() => {
6740
+ const row = hostRef.current?.closest("[role=\"menuitem\"]");
6741
+ if (row === null || row === void 0) return;
6742
+ const enter = () => hoverRef.current?.(true);
6743
+ const leave = () => hoverRef.current?.(false);
6744
+ row.addEventListener("mouseenter", enter);
6745
+ row.addEventListener("mouseleave", leave);
6746
+ return () => {
6747
+ row.removeEventListener("mouseenter", enter);
6748
+ row.removeEventListener("mouseleave", leave);
6749
+ };
6750
+ }, []);
6751
+ return /* @__PURE__ */ h("span", {
6752
+ ref: hostRef,
6753
+ className: ProjectSwitcher_module_default.row
6754
+ }, /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.dir }, dir), name === "" ? null : /* @__PURE__ */ h("span", {
6755
+ className: ProjectSwitcher_module_default.name,
6756
+ title: name
6757
+ }, name), /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.trailing }, action ?? (current ? /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.current }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 })) : null)));
6758
+ }
6759
+ //#endregion
6760
+ //#region src/app/layouts/sidebar/workspace-items.tsx
6761
+ function workspaceMenuItems(options) {
6762
+ const { results, currentId, hoverId, t, onHover, onEdit } = options;
6763
+ return results.map((workspace) => ({
6764
+ id: workspace.workspaceId,
6765
+ icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, { size: 16 }),
6766
+ label: /* @__PURE__ */ h(WorkspaceRowLabel, {
6767
+ workspace,
6768
+ current: workspace.workspaceId === currentId,
6769
+ onHover: (hovering) => onHover(hovering ? workspace.workspaceId : null),
6770
+ action: hoverId === workspace.workspaceId ? /* @__PURE__ */ h(WorkspaceRowAction, {
6771
+ workspace,
6772
+ t,
6773
+ onEdit: () => onEdit(workspace)
6774
+ }) : void 0
6775
+ })
6776
+ }));
6777
+ }
6248
6778
  //#endregion
6249
6779
  //#region src/app/layouts/sidebar/ProjectSwitcher.tsx
6250
6780
  var ADD_WORKSPACE_ID = "__wb-add-workspace__";
6251
- function ProjectSwitcher({ items, current, workspaceTitle, onPick, onAdd, t }) {
6781
+ function triggerName(current, t) {
6782
+ if (current === null) return t("project.none");
6783
+ const { dir, name } = displayNameOf(current);
6784
+ return /* @__PURE__ */ h(Fragment, null, /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.dir }, dir), name === "" ? null : /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.name }, name));
6785
+ }
6786
+ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
6252
6787
  const [open, setOpen] = useState(false);
6788
+ const [query, setQuery] = useState("");
6789
+ const [cursor, setCursor] = useState(null);
6790
+ const [hoverId, setHoverId] = useState(null);
6791
+ const [naming, setNaming] = useState(null);
6253
6792
  const triggerRef = useRef(null);
6254
- const title = current ? workspaceTitle(current.title) : t("project.none");
6793
+ const wasOpenRef = useRef(false);
6255
6794
  const currentId = current?.workspaceId ?? null;
6256
- const trigger = /* @__PURE__ */ h("button", {
6795
+ const results = useMemo(() => matchWorkspaces(items, query), [items, query]);
6796
+ const cursorId = cursor === null || results.length === 0 ? null : results[Math.min(cursor, results.length - 1)]?.workspaceId ?? null;
6797
+ useEffect(() => {
6798
+ if (open) {
6799
+ wasOpenRef.current = true;
6800
+ return;
6801
+ }
6802
+ setQuery("");
6803
+ setCursor(null);
6804
+ setHoverId(null);
6805
+ if (wasOpenRef.current && naming === null) {
6806
+ wasOpenRef.current = false;
6807
+ triggerRef.current?.focus();
6808
+ }
6809
+ }, [open, naming]);
6810
+ const close = () => setOpen(false);
6811
+ const anchor = open ? /* @__PURE__ */ h(WorkspaceSearchField, {
6812
+ t,
6813
+ query,
6814
+ onQuery: (next) => {
6815
+ setQuery(next);
6816
+ setCursor(null);
6817
+ },
6818
+ onCursor: (step) => {
6819
+ if (results.length === 0) return;
6820
+ setCursor((at) => at === null ? step === 1 ? 0 : results.length - 1 : (at + step + results.length) % results.length);
6821
+ },
6822
+ onSubmit: () => {
6823
+ const pick = results[Math.min(cursor ?? 0, results.length - 1)];
6824
+ if (pick === void 0) return;
6825
+ close();
6826
+ onPick(pick.workspaceId);
6827
+ }
6828
+ }) : /* @__PURE__ */ h("button", {
6257
6829
  type: "button",
6258
6830
  ref: triggerRef,
6259
- className: "wb-projectButton",
6831
+ className: ProjectSwitcher_module_default.trigger,
6260
6832
  "aria-haspopup": "listbox",
6261
6833
  "aria-expanded": open,
6262
6834
  "aria-label": t("project.label"),
6263
- title: current ? current.path : title,
6264
- onClick: () => {
6265
- document.documentElement.style.setProperty("--wb-project-menu-min-width", `${Math.round(triggerRef.current?.getBoundingClientRect().width ?? 0)}px`);
6266
- setOpen((value) => !value);
6267
- }
6268
- }, /* @__PURE__ */ h("span", { className: "wb-projectGlyph wb-projectGlyphActive" }, open ? /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, { size: 16 }) : /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderCloseRegular, { size: 16 })), /* @__PURE__ */ h("span", { className: "wb-projectName" }, title), /* @__PURE__ */ h("span", { className: cx("wb-projectChevron", open && "wb-projectChevronOpen") }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 })));
6269
- return /* @__PURE__ */ h("div", { className: "wb-project" }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Menu, {
6835
+ title: current?.path ?? void 0,
6836
+ onClick: () => setOpen(true)
6837
+ }, /* @__PURE__ */ h("span", { className: cx(ProjectSwitcher_module_default.glyph, ProjectSwitcher_module_default.glyphActive) }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderCloseRegular, { size: 16 })), /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.triggerName }, triggerName(current, t)), /* @__PURE__ */ h("span", { className: ProjectSwitcher_module_default.chevron }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 })));
6838
+ return /* @__PURE__ */ h("div", { className: ProjectSwitcher_module_default.root }, /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Menu, {
6270
6839
  open,
6271
6840
  portal: true,
6272
- className: "wb-projectAnchor",
6273
- anchor: trigger,
6841
+ className: ProjectSwitcher_module_default.anchor,
6842
+ listClassName: ProjectSwitcher_module_default.menu,
6843
+ anchor,
6274
6844
  align: "start",
6275
6845
  side: "bottom",
6276
- selection: "check",
6277
- selectedId: currentId ?? void 0,
6278
- items: [...items.length === 0 ? [{
6846
+ selection: "fill",
6847
+ selectedId: cursorId ?? void 0,
6848
+ items: [...results.length === 0 ? [{
6279
6849
  type: "label",
6280
6850
  id: "empty",
6281
- text: t("project.empty")
6282
- }] : [], ...items.map((workspace) => ({
6283
- id: workspace.workspaceId,
6284
- label: workspaceTitle(workspace.title),
6285
- icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderCloseRegular, { size: 16 })
6286
- }))],
6851
+ text: t("project.search.empty", { query: query.trim() })
6852
+ }] : [], ...workspaceMenuItems({
6853
+ results,
6854
+ currentId,
6855
+ hoverId,
6856
+ t,
6857
+ onHover: setHoverId,
6858
+ onEdit: (workspace) => {
6859
+ close();
6860
+ setNaming(workspace);
6861
+ }
6862
+ })],
6287
6863
  footer: [{
6288
6864
  id: ADD_WORKSPACE_ID,
6289
6865
  label: t("project.add"),
6290
6866
  icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 14 })
6291
6867
  }],
6292
6868
  onSelect: (id) => {
6293
- setOpen(false);
6294
6869
  if (id === ADD_WORKSPACE_ID) {
6870
+ close();
6295
6871
  onAdd();
6296
6872
  return;
6297
6873
  }
6874
+ close();
6298
6875
  onPick(id);
6299
6876
  },
6300
- onClose: () => setOpen(false)
6877
+ onClose: close
6878
+ }), naming === null ? null : /* @__PURE__ */ h(WorkspaceRenameDialog, {
6879
+ key: naming.workspaceId,
6880
+ workspace: naming,
6881
+ t,
6882
+ onClose: () => setNaming(null),
6883
+ onSubmit: (title) => onRename(naming.workspaceId, title)
6301
6884
  }));
6302
6885
  }
6303
6886
  //#endregion
@@ -6447,9 +7030,9 @@ window.__ModuleLoader__.load({
6447
7030
  }))), wide ? /* @__PURE__ */ h(ProjectSwitcher, {
6448
7031
  items,
6449
7032
  current,
6450
- workspaceTitle: props.workspaceDisplayTitle,
6451
7033
  onPick: pickProject,
6452
7034
  onAdd: addProject,
7035
+ onRename: props.renameWorkspace,
6453
7036
  t
6454
7037
  }) : null, /* @__PURE__ */ h(WorkspaceSection, {
6455
7038
  t,
@@ -6898,12 +7481,12 @@ window.__ModuleLoader__.load({
6898
7481
  }
6899
7482
  };
6900
7483
  function messagesOf(units) {
6901
- return mergeMessages(dictionaries, units.map((face) => ({
7484
+ return units.map((face) => ({
6902
7485
  unit: face.manifest.id,
6903
7486
  ...face.messages === void 0 ? {} : { messages: face.messages }
6904
- })));
7487
+ }));
6905
7488
  }
6906
- 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-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 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-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}\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 display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n color: var(--dsw-alias-label-secondary);\n text-decoration: none;\n white-space: nowrap;\n}\n.wb-longTaskLink:hover,\n.wb-longTaskLink:focus-visible {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n.wb-longTaskLink: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-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-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-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._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._marketList_7yq35_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 max-height: var(--wb-len-320);\n overflow-y: auto;\n}\n\n._marketRow_7yq35_12 {\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_7yq35_22 {\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_7yq35_34 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_7yq35_41 {\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_7yq35_50 {\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_7yq35_61 {\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_7yq35_61::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_7yq35_41 ._marketVersion_7yq35_75 {\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_7yq35_75 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_7yq35_75::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_7yq35_97 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._marketActions_7yq35_104 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketSection_7yq35_110 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_7yq35_117 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionTitle_7yq35_123 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_7yq35_129 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketProgress_7yq35_135 {\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_7yq35_145 {\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_7yq35_152 {\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_7yq35_159 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_7yq35_164 {\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: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_7yq35_164 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_7yq35_181 {\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_7yq35_189 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_7yq35_194 {\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_7yq35_200 {\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_7yq35_209 {\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_7yq35_209:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_7yq35_209:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_7yq35_234 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_7yq35_238 svg {\n animation: _wb-spin_7yq35_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_7yq35_242 {\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_7yq35_159 {\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_7yq35_259 {\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_7yq35_267 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_7yq35_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\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_1oyh4_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_1oyh4_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1oyh4_1[data-open] {\n visibility: visible;\n}\n._blocker_cfaak_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_cfaak_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_cfaak_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_cfaak_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_cfaak_1._blockerInline_cfaak_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_cfaak_1._blockerInline_cfaak_32 ._title_cfaak_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._hint_cfaak_23 {\n max-width: 100%;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._actions_cfaak_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._raw_cfaak_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_cfaak_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_cfaak_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_cfaak_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_cfaak_71._noticeFlat_cfaak_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_cfaak_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_cfaak_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_cfaak_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_cfaak_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_cfaak_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_cfaak_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._inlineLink_cfaak_134 {\n margin-left: var(--wb-len-2);\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n vertical-align: baseline;\n}\n\n._inlineLink_cfaak_134:hover {\n text-decoration: underline;\n}\n\n._inlineLink_cfaak_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n._rawText_cfaak_156 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
7489
+ 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 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-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}\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 display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n color: var(--dsw-alias-label-secondary);\n text-decoration: none;\n white-space: nowrap;\n}\n.wb-longTaskLink:hover,\n.wb-longTaskLink:focus-visible {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n.wb-longTaskLink: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-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._marketList_7yq35_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 max-height: var(--wb-len-320);\n overflow-y: auto;\n}\n\n._marketRow_7yq35_12 {\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_7yq35_22 {\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_7yq35_34 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_7yq35_41 {\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_7yq35_50 {\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_7yq35_61 {\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_7yq35_61::before {\n content: '·';\n margin-right: var(--wb-len-6);\n opacity: 0.8;\n}\n\n._marketName_7yq35_41 ._marketVersion_7yq35_75 {\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_7yq35_75 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_7yq35_75::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_7yq35_97 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._marketActions_7yq35_104 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketSection_7yq35_110 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_7yq35_117 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionTitle_7yq35_123 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_7yq35_129 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketProgress_7yq35_135 {\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_7yq35_145 {\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_7yq35_152 {\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_7yq35_159 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_7yq35_164 {\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: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_7yq35_164 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_7yq35_181 {\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_7yq35_189 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_7yq35_194 {\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_7yq35_200 {\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_7yq35_209 {\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_7yq35_209:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_7yq35_209:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_7yq35_234 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_7yq35_238 svg {\n animation: _wb-spin_7yq35_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_7yq35_242 {\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_7yq35_159 {\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_7yq35_259 {\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_7yq35_267 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_7yq35_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_1oyh4_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_1oyh4_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1oyh4_1[data-open] {\n visibility: visible;\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_cfaak_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_cfaak_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_cfaak_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_cfaak_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_cfaak_1._blockerInline_cfaak_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_cfaak_1._blockerInline_cfaak_32 ._title_cfaak_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._hint_cfaak_23 {\n max-width: 100%;\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._actions_cfaak_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_cfaak_1._blockerInline_cfaak_32 ._raw_cfaak_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_cfaak_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_cfaak_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_cfaak_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_cfaak_71._noticeFlat_cfaak_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_cfaak_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_cfaak_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_cfaak_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_cfaak_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_cfaak_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_cfaak_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._inlineLink_cfaak_134 {\n margin-left: var(--wb-len-2);\n padding: 0;\n border: none;\n background: transparent;\n font: inherit;\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n vertical-align: baseline;\n}\n\n._inlineLink_cfaak_134:hover {\n text-decoration: underline;\n}\n\n._inlineLink_cfaak_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n._rawText_cfaak_156 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
6907
7490
  function installStyles() {
6908
7491
  const style = document.createElement("style");
6909
7492
  style.setAttribute(STYLE_MARKER, "");
@@ -6963,7 +7546,9 @@ window.__ModuleLoader__.load({
6963
7546
  let disposeDictionary;
6964
7547
  const publish = () => {
6965
7548
  disposeDictionary?.();
6966
- disposeDictionary = ctx.locale.register(LOCALE_NS, messagesOf(units.all()));
7549
+ const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, messagesOf(units.all()));
7550
+ for (const problem of problems) console.warn(`[dsh-workbench] 套件 ${problem.unit} 的文案没并进来(只有它少了这几句):${problem.reason}`);
7551
+ disposeDictionary = ctx.locale.register(LOCALE_NS, merged);
6967
7552
  };
6968
7553
  publish();
6969
7554
  const unsubscribe = units.subscribe(publish);
@@ -7115,7 +7700,14 @@ window.__ModuleLoader__.load({
7115
7700
  inject: () => ({
7116
7701
  listPanels: () => readPanels(ctx),
7117
7702
  subscribePanels: (callback) => ctx.slots.subscribe("sidebar.panellist", callback),
7118
- workspaceDisplayTitle: (title) => title === "default-workspace" ? ctx.locale.bind("common")("workspace.defaultName") : title,
7703
+ renameWorkspace: async (workspaceId, title) => {
7704
+ try {
7705
+ await ctx.workspaces.rename(workspaceId, title);
7706
+ return true;
7707
+ } catch {
7708
+ return false;
7709
+ }
7710
+ },
7119
7711
  openWorkspace: (workspaceId) => {
7120
7712
  ctx.uiWorkspace.openWorkspace(workspaceId);
7121
7713
  },