@dsh-workbench/core 1.0.1 → 1.1.1

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 (39) hide show
  1. package/README.md +3 -0
  2. package/client.js +849 -460
  3. package/dist/client/client.body.js +849 -460
  4. package/dist/client/index.js +720 -331
  5. package/dist/host/index.js +448 -41
  6. package/dist/types/app/layouts/market/discover-search.d.ts +8 -0
  7. package/dist/types/app/layouts/market/discover-sources-dialog.d.ts +4 -0
  8. package/dist/types/app/layouts/market/discover-states.d.ts +3 -0
  9. package/dist/types/app/layouts/market/use-add-module.d.ts +0 -1
  10. package/dist/types/app/layouts/market/use-discover.d.ts +1 -0
  11. package/dist/types/app/layouts/rightbar/MarketView.d.ts +3 -1
  12. package/dist/types/app/layouts/rightbar/market-names.d.ts +8 -0
  13. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +11 -3
  14. package/dist/types/app/layouts/rightbar/market-rows.d.ts +6 -4
  15. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +4 -3
  16. package/dist/types/app/units/unit-titles.d.ts +3 -0
  17. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  18. package/dist/types/kernel/contract/market-index.d.ts +1 -1
  19. package/dist/types/modules/panels/model/diy-tools.d.ts +1 -1
  20. package/dist/types/modules/panels/model/market-dispatch.d.ts +8 -0
  21. package/dist/types/modules/panels/model/market-follow-up.d.ts +16 -0
  22. package/dist/types/modules/panels/model/market-sources-act.d.ts +2 -0
  23. package/dist/types/modules/panels/model/market-types.d.ts +5 -0
  24. package/dist/types/modules/panels/model/market.d.ts +2 -0
  25. package/dist/types/modules/panels/model/publish-preview-routes.d.ts +1 -1
  26. package/dist/types/shared/api/host/diy-publish-preview.d.ts +11 -0
  27. package/dist/types/shared/api/host/follow-up-dismiss.d.ts +2 -0
  28. package/dist/types/shared/api/host/migrate-workbench.d.ts +20 -0
  29. package/dist/types/shared/api/host/migration-follow-up.d.ts +12 -0
  30. package/dist/types/shared/hooks/market-queries.d.ts +3 -2
  31. package/dist/types/shared/hooks/resource-view.d.ts +14 -0
  32. package/dist/types/shared/hooks/use-api-resource.d.ts +3 -7
  33. package/package.json +3 -3
  34. package/skills/workbench-module-diy/FAMILY.md +1 -1
  35. package/skills/workbench-module-diy/REVIEW.md +2 -2
  36. package/skills/workbench-module-diy/SKILL.md +1 -0
  37. package/skills/workbench-module-diy/TOOLS.md +1 -1
  38. package/skills/workbench-module-diy/WIRING.md +3 -1
  39. package/skills/workbench-module-diy/WRITES.md +1 -1
@@ -781,7 +781,7 @@ async function apiPost(route, body) {
781
781
  //#endregion
782
782
  //#region ../shared/dist/lib/react.js
783
783
  var react$1 = require("react");
784
- var h$62 = react$1.createElement;
784
+ var h$63 = react$1.createElement;
785
785
  var Fragment$20 = react$1.Fragment;
786
786
  var Component = react$1.Component;
787
787
  react$1.createContext;
@@ -791,7 +791,7 @@ var useEffect$28 = react$1.useEffect;
791
791
  react$1.useLayoutEffect;
792
792
  var useMemo$9 = react$1.useMemo;
793
793
  react$1.useCallback;
794
- var useRef$21 = react$1.useRef;
794
+ var useRef$22 = react$1.useRef;
795
795
  react$1.useSyncExternalStore;
796
796
  //#endregion
797
797
  //#region ../shared/dist/components/Activity.js
@@ -802,7 +802,7 @@ react$1.useSyncExternalStore;
802
802
  * @returns 一个 div。
803
803
  */
804
804
  function ActivityBlock({ head, children }) {
805
- return h$62("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$62("div", { className: "wb-activityBlockHead" }, head), children);
805
+ return h$63("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$63("div", { className: "wb-activityBlockHead" }, head), children);
806
806
  }
807
807
  /**
808
808
  * 一条活动:状态点 + 正文 + 时间,行尾可挂动作;时间一律用它,别自己拼。
@@ -813,7 +813,7 @@ function ActivityBlock({ head, children }) {
813
813
  * @returns 一行。
814
814
  */
815
815
  function ActivityLine({ dot, text, at, actions }) {
816
- return h$62("div", { className: "wb-activityLine" }, dot, h$62("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$62("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$62("span", { className: "wb-activityLineActions" }, actions));
816
+ return h$63("div", { className: "wb-activityLine" }, dot, h$63("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$63("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$63("span", { className: "wb-activityLineActions" }, actions));
817
817
  }
818
818
  /**
819
819
  * 活动行尾那颗动作:给 `href` 就是外链,否则是图标钮并带上 tooltip。
@@ -827,7 +827,7 @@ function ActivityLine({ dot, text, at, actions }) {
827
827
  */
828
828
  function ActivityAction({ label, hint, icon, href, onClick, failed }) {
829
829
  const tip = hint ?? label;
830
- if (href !== void 0) return h$62("a", {
830
+ if (href !== void 0) return h$63("a", {
831
831
  className: "wb-iconButton",
832
832
  href,
833
833
  target: "_blank",
@@ -835,13 +835,13 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
835
835
  title: tip,
836
836
  "aria-label": label
837
837
  }, icon);
838
- return h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
838
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
839
839
  side: "bottom",
840
840
  align: "end",
841
841
  gap: 6,
842
842
  portal: true,
843
843
  label: tip
844
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
844
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
845
845
  type: "button",
846
846
  variant: "ghost",
847
847
  size: "sm",
@@ -863,10 +863,10 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
863
863
  */
864
864
  function Note({ tone = "muted", as, role, children }) {
865
865
  const className = tone === "problem" ? "wb-problem" : "wb-note";
866
- return as === "span" ? h$62("span", {
866
+ return as === "span" ? h$63("span", {
867
867
  className,
868
868
  role
869
- }, children) : h$62("p", {
869
+ }, children) : h$63("p", {
870
870
  className,
871
871
  role
872
872
  }, children);
@@ -910,10 +910,10 @@ var CardBoundary = class extends Component {
910
910
  render() {
911
911
  const { reason } = this.state;
912
912
  if (reason === null) return this.props.children;
913
- return h$62(Note, { tone: "problem" }, h$62("span", null, this.props.t("panels.cardBroken", {
913
+ return h$63(Note, { tone: "problem" }, h$63("span", null, this.props.t("panels.cardBroken", {
914
914
  unit: this.props.unit,
915
915
  reason
916
- })), " ", h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
916
+ })), " ", h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
917
917
  type: "button",
918
918
  variant: "outline",
919
919
  size: "sm",
@@ -963,19 +963,19 @@ function ApprovalDetail(props) {
963
963
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
964
964
  if (owner?.approval !== void 0) {
965
965
  const Render = owner.approval.render;
966
- return h$62(CardBoundary, {
966
+ return h$63(CardBoundary, {
967
967
  unit: owner.unit,
968
968
  resetKey: props.callId ?? "",
969
969
  t
970
- }, h$62(Render, {
970
+ }, h$63(Render, {
971
971
  input,
972
972
  t
973
973
  }));
974
974
  }
975
975
  const shell = props.renderShell?.(input, t);
976
- if (shell !== void 0 && shell !== null) return h$62(Fragment$20, null, shell);
976
+ if (shell !== void 0 && shell !== null) return h$63(Fragment$20, null, shell);
977
977
  if (command === "") return null;
978
- return h$62(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
978
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
979
979
  code: command,
980
980
  className: "wb-approvalCommand",
981
981
  copyLabel: t("blocker.copy"),
@@ -993,10 +993,10 @@ function ApprovalDetail(props) {
993
993
  * @returns 一个 div。
994
994
  */
995
995
  function ApprovalPlan({ rows, hint, warn, children }) {
996
- return h$62("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$62("p", { className: "wb-approvalHint" }, hint), h$62("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$62("div", {
996
+ return h$63("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$63("p", { className: "wb-approvalHint" }, hint), h$63("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$63("div", {
997
997
  className: "wb-approvalRow",
998
998
  key: String(index)
999
- }, h$62("dt", { className: "wb-approvalLabel" }, row.label), h$62("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$62("p", { className: "wb-approvalWarn" }, warn));
999
+ }, h$63("dt", { className: "wb-approvalLabel" }, row.label), h$63("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$63("p", { className: "wb-approvalWarn" }, warn));
1000
1000
  }
1001
1001
  //#endregion
1002
1002
  //#region ../shared/dist/components/CardHead.js
@@ -1013,47 +1013,47 @@ function ApprovalPlan({ rows, hint, warn, children }) {
1013
1013
  function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
1014
1014
  const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
1015
1015
  const platformLabel = platformTitle ?? platform ?? t("rightbar.openPlatform");
1016
- return h$62("header", { className: "wb-cardHead" }, h$62("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$62("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1016
+ return h$63("header", { className: "wb-cardHead" }, h$63("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$63("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1017
1017
  side: "bottom",
1018
1018
  align: "end",
1019
1019
  gap: 6,
1020
1020
  portal: true,
1021
1021
  label: platformLabel
1022
- }, h$62("a", {
1022
+ }, h$63("a", {
1023
1023
  className: "wb-iconButton wb-cardOpen",
1024
1024
  href: platformHref,
1025
1025
  target: "_blank",
1026
1026
  rel: "noreferrer noopener",
1027
1027
  "aria-label": platform ?? platformLabel
1028
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1028
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1029
1029
  side: "bottom",
1030
1030
  align: "end",
1031
1031
  gap: 6,
1032
1032
  portal: true,
1033
1033
  label: refreshLabel
1034
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
1034
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
1035
1035
  type: "button",
1036
1036
  size: "sm",
1037
1037
  variant: "ghost",
1038
1038
  className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
1039
1039
  "aria-label": refreshLabel,
1040
1040
  disabled: refreshing,
1041
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1041
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1042
1042
  onClick: onRefresh
1043
- })), gear === void 0 || onToggleGear === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1043
+ })), gear === void 0 || onToggleGear === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1044
1044
  side: "bottom",
1045
1045
  align: "end",
1046
1046
  gap: 6,
1047
1047
  portal: true,
1048
1048
  label: gear
1049
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
1049
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
1050
1050
  type: "button",
1051
1051
  size: "sm",
1052
1052
  variant: "ghost",
1053
1053
  className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
1054
1054
  "aria-label": gear,
1055
1055
  "aria-expanded": gearOpen === true,
1056
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1056
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1057
1057
  onClick: onToggleGear
1058
1058
  })));
1059
1059
  }
@@ -1070,13 +1070,13 @@ function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onTog
1070
1070
  * @returns 一个 `<section>`。
1071
1071
  */
1072
1072
  function Card({ t, title, refreshing, onRefresh, meta, head, children }) {
1073
- return h$62("section", { className: "wb-card" }, head === void 0 ? h$62(CardHead, {
1073
+ return h$63("section", { className: "wb-card" }, head === void 0 ? h$63(CardHead, {
1074
1074
  t,
1075
1075
  title,
1076
1076
  refreshing,
1077
1077
  onRefresh,
1078
1078
  meta
1079
- }) : head, h$62("div", { className: "wb-cardBody" }, children));
1079
+ }) : head, h$63("div", { className: "wb-cardBody" }, children));
1080
1080
  }
1081
1081
  var CardAnchor_module_default = { anchor: "_anchor_yq4s2_1" };
1082
1082
  //#endregion
@@ -1096,7 +1096,7 @@ function cardIdOf(unit) {
1096
1096
  * @returns 带 id 的占位 div。
1097
1097
  */
1098
1098
  function CardAnchor({ unit, children }) {
1099
- return h$62("div", {
1099
+ return h$63("div", {
1100
1100
  id: cardIdOf(unit),
1101
1101
  className: CardAnchor_module_default.anchor
1102
1102
  }, children);
@@ -1110,13 +1110,13 @@ function CardAnchor({ unit, children }) {
1110
1110
  * @returns 一枚 `StateDot state="ongoing"`,自身不带文字。
1111
1111
  */
1112
1112
  function Spinner({ size = 14, label }) {
1113
- return h$62("span", {
1113
+ return h$63("span", {
1114
1114
  className: "wb-spinner",
1115
1115
  ...label === void 0 ? { "aria-hidden": true } : {
1116
1116
  role: "status",
1117
1117
  "aria-label": label
1118
1118
  }
1119
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1119
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1120
1120
  state: "ongoing",
1121
1121
  size
1122
1122
  }));
@@ -1124,24 +1124,24 @@ function Spinner({ size = 14, label }) {
1124
1124
  //#endregion
1125
1125
  //#region ../shared/dist/components/ChoiceGroup.js
1126
1126
  function ChoiceMenu(input) {
1127
- const body = input.loading ? h$62("span", {
1127
+ const body = input.loading ? h$63("span", {
1128
1128
  className: "wb-choiceLoading",
1129
1129
  role: "status"
1130
- }, h$62(Spinner, { size: 14 }), h$62("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$62("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1130
+ }, h$63(Spinner, { size: 14 }), h$63("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$63("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1131
1131
  const row = input.rowOf(option.value);
1132
- return h$62(Fragment$20, { key: option.value }, h$62("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$62("input", {
1132
+ return h$63(Fragment$20, { key: option.value }, h$63("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$63("input", {
1133
1133
  className: input.multi ? "wb-checkbox" : "wb-radio",
1134
1134
  type: input.multi ? "checkbox" : "radio",
1135
1135
  name: input.name,
1136
1136
  checked: row.checked,
1137
1137
  disabled: input.disabled,
1138
1138
  onChange: row.onSelect
1139
- }), input.multi ? h$62("span", {
1139
+ }), input.multi ? h$63("span", {
1140
1140
  className: "wb-checkboxBox",
1141
1141
  "aria-hidden": "true"
1142
- }, row.checked ? h$62(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$62("span", { className: "wb-choiceLabel" }, h$62("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$62("span", { className: "wb-choiceDescription" }, option.description))));
1142
+ }, row.checked ? h$63(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$63("span", { className: "wb-choiceLabel" }, h$63("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$63("span", { className: "wb-choiceDescription" }, option.description))));
1143
1143
  });
1144
- return h$62("div", {
1144
+ return h$63("div", {
1145
1145
  className: "wb-choiceMenu",
1146
1146
  "data-variant": input.variant,
1147
1147
  role: input.multi ? "group" : "radiogroup",
@@ -1175,7 +1175,7 @@ function ChoiceGroup(props) {
1175
1175
  if (props.multi === true) {
1176
1176
  const values = props.values;
1177
1177
  const onChange = props.onChange;
1178
- return h$62(ChoiceMenu, {
1178
+ return h$63(ChoiceMenu, {
1179
1179
  label: common.label,
1180
1180
  name: common.name,
1181
1181
  options: common.options,
@@ -1195,7 +1195,7 @@ function ChoiceGroup(props) {
1195
1195
  }
1196
1196
  const value = props.value;
1197
1197
  const onChange = props.onChange;
1198
- return h$62(ChoiceMenu, {
1198
+ return h$63(ChoiceMenu, {
1199
1199
  label: common.label,
1200
1200
  name: common.name,
1201
1201
  options: common.options,
@@ -1248,17 +1248,17 @@ function variantOf(kind) {
1248
1248
  function FormActions({ actions }) {
1249
1249
  if (actions.length === 0) return null;
1250
1250
  reportExtraPrimaries(actions);
1251
- return h$62("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1251
+ return h$63("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1252
1252
  const kind = kindOf(action);
1253
1253
  const busy = action.busy === true;
1254
- return h$62(_deepseek_ai_dsh_client_ui_primitives.Button, {
1254
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.Button, {
1255
1255
  key: action.key,
1256
1256
  type: "button",
1257
1257
  size: "sm",
1258
1258
  variant: variantOf(kind),
1259
1259
  className: kind === "danger" ? "wb-formActionDanger" : void 0,
1260
1260
  disabled: busy || action.disabled === true,
1261
- icon: busy ? h$62(Spinner, { size: 12 }) : void 0,
1261
+ icon: busy ? h$63(Spinner, { size: 12 }) : void 0,
1262
1262
  onClick: action.onClick
1263
1263
  }, action.label);
1264
1264
  }));
@@ -1271,7 +1271,7 @@ function FormActions({ actions }) {
1271
1271
  * @returns 竖排的 div。
1272
1272
  */
1273
1273
  function Rows({ children }) {
1274
- return h$62("div", { className: "wb-rows" }, children);
1274
+ return h$63("div", { className: "wb-rows" }, children);
1275
1275
  }
1276
1276
  /**
1277
1277
  * 一行键值:左边名字、右边值;要成对说明一项数据就用它,别自己写两栏。
@@ -1280,7 +1280,7 @@ function Rows({ children }) {
1280
1280
  * @returns 一行两格。
1281
1281
  */
1282
1282
  function Row({ label, value }) {
1283
- return h$62("div", { className: "wb-row" }, h$62("span", { className: "wb-rowKey" }, label), h$62("span", { className: "wb-rowValue" }, value));
1283
+ return h$63("div", { className: "wb-row" }, h$63("span", { className: "wb-rowKey" }, label), h$63("span", { className: "wb-rowValue" }, value));
1284
1284
  }
1285
1285
  //#endregion
1286
1286
  //#region ../shared/dist/components/ConfirmBar.js
@@ -1297,19 +1297,19 @@ function Row({ label, value }) {
1297
1297
  * @returns 一个 `role="group"` 的条;`actions` 空数组时最后那一块不渲染。
1298
1298
  */
1299
1299
  function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1300
- return h$62("div", {
1300
+ return h$63("div", {
1301
1301
  className: "wb-confirmBar",
1302
1302
  role: "group",
1303
1303
  "aria-label": label ?? (typeof title === "string" ? title : void 0),
1304
1304
  "aria-busy": busy
1305
- }, h$62("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$62("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$62(Rows, null, rows.map((row) => h$62(Row, {
1305
+ }, h$63("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$63("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$63(Rows, null, rows.map((row) => h$63(Row, {
1306
1306
  key: row.key,
1307
1307
  label: row.label,
1308
1308
  value: row.value
1309
- }))), problem === void 0 ? null : h$62(Note, {
1309
+ }))), problem === void 0 ? null : h$63(Note, {
1310
1310
  tone: "problem",
1311
1311
  role: "alert"
1312
- }, problem), h$62(FormActions, { actions }));
1312
+ }, problem), h$63(FormActions, { actions }));
1313
1313
  }
1314
1314
  //#endregion
1315
1315
  //#region ../shared/dist/components/Field.js
@@ -1321,7 +1321,7 @@ function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1321
1321
  * @returns 一个 `<label>`,点标签会聚焦里面的控件。
1322
1322
  */
1323
1323
  function Field({ label, hint, children }) {
1324
- return h$62("label", { className: "wb-field" }, h$62("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$62("span", { className: "wb-fieldHint" }, hint));
1324
+ return h$63("label", { className: "wb-field" }, h$63("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$63("span", { className: "wb-fieldHint" }, hint));
1325
1325
  }
1326
1326
  //#endregion
1327
1327
  //#region ../shared/dist/components/FormRows.js
@@ -1331,7 +1331,7 @@ function Field({ label, hint, children }) {
1331
1331
  * @returns 竖排的 div。
1332
1332
  */
1333
1333
  function FormRows({ children }) {
1334
- return h$62("div", { className: "wb-formRows" }, children);
1334
+ return h$63("div", { className: "wb-formRows" }, children);
1335
1335
  }
1336
1336
  /**
1337
1337
  * 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
@@ -1344,14 +1344,14 @@ function FormRows({ children }) {
1344
1344
  * @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
1345
1345
  */
1346
1346
  function FormRow({ label, htmlFor, hint, problem, layout = "inline", children }) {
1347
- return h$62("div", {
1347
+ return h$63("div", {
1348
1348
  className: "wb-formRow",
1349
1349
  "data-layout": layout,
1350
1350
  "data-wb-problem": problem === void 0 ? void 0 : ""
1351
- }, h$62("label", {
1351
+ }, h$63("label", {
1352
1352
  className: "wb-formLabel",
1353
1353
  htmlFor
1354
- }, label), h$62("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$62("span", { className: "wb-formHint" }, hint) : h$62("span", { className: "wb-formProblem" }, problem));
1354
+ }, label), h$63("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$63("span", { className: "wb-formHint" }, hint) : h$63("span", { className: "wb-formProblem" }, problem));
1355
1355
  }
1356
1356
  //#endregion
1357
1357
  //#region ../shared/dist/components/FormNodes.js
@@ -1498,7 +1498,7 @@ function formActionsOf(args) {
1498
1498
  * @returns `FormRow` 组成的数组;没有可画的格子时给空数组。
1499
1499
  */
1500
1500
  function formRowsOf(args) {
1501
- return args.fields.map((field) => h$62(FormRow, {
1501
+ return args.fields.map((field) => h$63(FormRow, {
1502
1502
  key: field.key,
1503
1503
  label: field.label,
1504
1504
  htmlFor: controlIdOf(field.key),
@@ -1576,7 +1576,7 @@ function Form(props) {
1576
1576
  const { fields, onSubmit, submit, cancel, extra, busy = false, disabled = false, problem } = props;
1577
1577
  const [done, setDone] = useState$35(false);
1578
1578
  const [reveal, setReveal] = useState$35(0);
1579
- const rootRef = useRef$21(null);
1579
+ const rootRef = useRef$22(null);
1580
1580
  const shown = visibleFieldsOf(fields);
1581
1581
  const problems = formProblemsOf(shown, done);
1582
1582
  reportDuplicateKeys(shown);
@@ -1595,7 +1595,7 @@ function Form(props) {
1595
1595
  }
1596
1596
  onSubmit(outcome.values);
1597
1597
  };
1598
- return h$62("form", {
1598
+ return h$63("form", {
1599
1599
  className: "wb-form",
1600
1600
  ref: rootRef,
1601
1601
  noValidate: true,
@@ -1603,15 +1603,15 @@ function Form(props) {
1603
1603
  event.preventDefault();
1604
1604
  submitForm();
1605
1605
  }
1606
- }, h$62(FormRows, null, formRowsOf({
1606
+ }, h$63(FormRows, null, formRowsOf({
1607
1607
  fields: shown,
1608
1608
  problems,
1609
1609
  showProblem: done,
1610
1610
  busy
1611
- })), problem === void 0 ? null : h$62(Note, {
1611
+ })), problem === void 0 ? null : h$63(Note, {
1612
1612
  tone: "problem",
1613
1613
  role: "alert"
1614
- }, problem), h$62(FormActions, { actions: formActionsOf({
1614
+ }, problem), h$63(FormActions, { actions: formActionsOf({
1615
1615
  extra,
1616
1616
  cancel,
1617
1617
  submit,
@@ -1632,7 +1632,7 @@ function Form(props) {
1632
1632
  * @returns 一个 `<a>`。
1633
1633
  */
1634
1634
  function Link({ href, children, title, external = true, className }) {
1635
- return h$62("a", {
1635
+ return h$63("a", {
1636
1636
  className: className === void 0 ? "wb-link" : `wb-link ${className}`,
1637
1637
  href,
1638
1638
  ...title === void 0 ? {} : { title },
@@ -1640,7 +1640,7 @@ function Link({ href, children, title, external = true, className }) {
1640
1640
  target: "_blank",
1641
1641
  rel: "noopener noreferrer"
1642
1642
  } : {}
1643
- }, children, external ? h$62(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1643
+ }, children, external ? h$63(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1644
1644
  }
1645
1645
  //#endregion
1646
1646
  //#region ../shared/dist/contract/long-task.js
@@ -1732,7 +1732,7 @@ var LONG_TASK_STOP_ARM_MS = 3e3;
1732
1732
  //#endregion
1733
1733
  //#region ../shared/dist/components/LongTaskRow.js
1734
1734
  function RowLink({ href, text }) {
1735
- return h$62(Link, {
1735
+ return h$63(Link, {
1736
1736
  href,
1737
1737
  className: "wb-longTaskLink"
1738
1738
  }, text);
@@ -1781,14 +1781,14 @@ function LongTaskRow(props) {
1781
1781
  setArmed(false);
1782
1782
  stop.onStop();
1783
1783
  };
1784
- return h$62("div", { className: "wb-longTask" }, h$62("p", { className: "wb-longTaskHead" }, h$62(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1784
+ return h$63("div", { className: "wb-longTask" }, h$63("p", { className: "wb-longTaskHead" }, h$63(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1785
1785
  state: longTaskDot(props.status),
1786
1786
  size: 10
1787
- }), h$62("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$62(RowLink, {
1787
+ }), h$63("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$63(RowLink, {
1788
1788
  href: link.href,
1789
1789
  key: `${link.text}@${link.href}`,
1790
1790
  text: link.text
1791
- })), stop === void 0 ? null : h$62("button", {
1791
+ })), stop === void 0 ? null : h$63("button", {
1792
1792
  type: "button",
1793
1793
  className: `wb-longTaskStop${armed ? " wb-longTaskStopArmed" : ""}`,
1794
1794
  "data-stop-state": longTaskStopStage({
@@ -1799,31 +1799,31 @@ function LongTaskRow(props) {
1799
1799
  disabled: busy,
1800
1800
  onClick: onStopPress,
1801
1801
  onBlur: () => setArmed(false)
1802
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$62("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$62("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$62("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$62(Fragment$20, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1802
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$63("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$63("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$63("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$63(Fragment$20, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1803
1803
  className: "wb-longTaskDump",
1804
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1804
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1805
1805
  title: props.stepsTitle,
1806
1806
  open: stepsOpen,
1807
1807
  expandable: true,
1808
1808
  expandOnRowClick: true,
1809
1809
  previewChevron: true,
1810
1810
  onToggle: () => setStepsOpen(!stepsOpen)
1811
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1811
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1812
1812
  code: steps.join("\n"),
1813
1813
  className: "wb-longTaskDump",
1814
1814
  showHeader: props.copyLabel !== void 0,
1815
1815
  copyLabel: props.copyLabel ?? "",
1816
1816
  copiedLabel: props.copiedLabel ?? ""
1817
- })), raw === "" || props.rawTitle === void 0 ? null : h$62(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1817
+ })), raw === "" || props.rawTitle === void 0 ? null : h$63(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1818
1818
  className: "wb-longTaskDump",
1819
- icon: h$62(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1819
+ icon: h$63(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1820
1820
  title: props.rawTitle,
1821
1821
  open: rawOpen,
1822
1822
  expandable: true,
1823
1823
  expandOnRowClick: true,
1824
1824
  previewChevron: true,
1825
1825
  onToggle: () => setRawOpen(!rawOpen)
1826
- }, h$62(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1826
+ }, h$63(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1827
1827
  code: raw,
1828
1828
  className: "wb-longTaskDump",
1829
1829
  showHeader: props.copyLabel !== void 0,
@@ -1839,13 +1839,13 @@ function LongTaskRow(props) {
1839
1839
  * @returns 一叠占位条。
1840
1840
  */
1841
1841
  function SkeletonRows({ rows = 4 }) {
1842
- return h$62("div", {
1842
+ return h$63("div", {
1843
1843
  className: "wb-skeleton",
1844
1844
  "aria-hidden": "true"
1845
- }, Array.from({ length: rows }, (_, index) => h$62("span", {
1845
+ }, Array.from({ length: rows }, (_, index) => h$63("span", {
1846
1846
  key: index,
1847
1847
  className: "wb-skeletonRow"
1848
- }, h$62("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$62("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1848
+ }, h$63("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$63("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1849
1849
  }
1850
1850
  /**
1851
1851
  * 居中一屏:要他先选一个 / 正在读 / 读不到时用它占住卡片版面。
@@ -1858,13 +1858,13 @@ function SkeletonRows({ rows = 4 }) {
1858
1858
  * @returns 一个 `role="status"` 的居中块。
1859
1859
  */
1860
1860
  function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1861
- return h$62("div", {
1861
+ return h$63("div", {
1862
1862
  className: compact ? "wb-centered wb-centeredCompact" : "wb-centered",
1863
1863
  role: "status"
1864
- }, icon === null ? null : h$62("span", {
1864
+ }, icon === null ? null : h$63("span", {
1865
1865
  className: "wb-centeredHero",
1866
1866
  "aria-hidden": "true"
1867
- }, icon), h$62("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$62("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$62("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$62("div", { className: "wb-centeredAction" }, action));
1867
+ }, icon), h$63("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$63("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$63("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$63("div", { className: "wb-centeredAction" }, action));
1868
1868
  }
1869
1869
  /**
1870
1870
  * 就绪但空:它只是 `CenteredState` 的简写,标题就是那句空态文案。
@@ -1874,7 +1874,7 @@ function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1874
1874
  * @returns 一个居中块。
1875
1875
  */
1876
1876
  function EmptyState({ text, icon = null, compact = false }) {
1877
- return h$62(CenteredState, {
1877
+ return h$63(CenteredState, {
1878
1878
  icon,
1879
1879
  title: text,
1880
1880
  compact
@@ -1892,7 +1892,7 @@ function EmptyState({ text, icon = null, compact = false }) {
1892
1892
  * @returns 一组按钮。
1893
1893
  */
1894
1894
  function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1895
- return h$62(FormActions, { actions: [{
1895
+ return h$63(FormActions, { actions: [{
1896
1896
  key: "cancel",
1897
1897
  label: labels.cancel,
1898
1898
  kind: "default",
@@ -1925,7 +1925,7 @@ function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1925
1925
  * @returns 一颗 `<button>`。
1926
1926
  */
1927
1927
  function selectTriggerNode(args) {
1928
- return h$62("button", {
1928
+ return h$63("button", {
1929
1929
  type: "button",
1930
1930
  id: args.id,
1931
1931
  className: args.className,
@@ -1936,7 +1936,7 @@ function selectTriggerNode(args) {
1936
1936
  "aria-label": args.ariaLabel,
1937
1937
  title: args.title,
1938
1938
  onClick: args.onOpen
1939
- }, args.iconOnly ? h$62("span", { className: "wb-selectIcon" }, args.icon) : h$62(Fragment$20, null, args.icon === void 0 ? null : h$62("span", { className: "wb-selectIcon" }, args.icon), h$62("span", { className: "wb-selectValue" }, args.value), h$62("span", { className: "wb-selectChevron" }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1939
+ }, args.iconOnly ? h$63("span", { className: "wb-selectIcon" }, args.icon) : h$63(Fragment$20, null, args.icon === void 0 ? null : h$63("span", { className: "wb-selectIcon" }, args.icon), h$63("span", { className: "wb-selectValue" }, args.value), h$63("span", { className: "wb-selectChevron" }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1940
1940
  }
1941
1941
  /**
1942
1942
  * 名单还没读到时的触发器:禁用 + `aria-busy` 的按钮,`SelectField` 在 `loading` 那档画它。
@@ -1948,7 +1948,7 @@ function selectTriggerNode(args) {
1948
1948
  * @returns 一颗禁用且 `aria-busy` 的按钮。
1949
1949
  */
1950
1950
  function selectLoadingNode(args) {
1951
- return h$62("button", {
1951
+ return h$63("button", {
1952
1952
  type: "button",
1953
1953
  id: args.id,
1954
1954
  className: `${args.className} wb-selectLoading`,
@@ -1957,7 +1957,7 @@ function selectLoadingNode(args) {
1957
1957
  "aria-invalid": args.invalid || void 0,
1958
1958
  "aria-label": args.ariaLabel,
1959
1959
  title: args.loadingText
1960
- }, h$62("span", { className: "wb-selectValue" }, h$62(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$62("span", { className: "wb-selectChevron" }, h$62(Spinner, { size: 14 })));
1960
+ }, h$63("span", { className: "wb-selectValue" }, h$63(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$63("span", { className: "wb-selectChevron" }, h$63(Spinner, { size: 14 })));
1961
1961
  }
1962
1962
  //#endregion
1963
1963
  //#region ../shared/dist/components/TextField.js
@@ -1967,7 +1967,7 @@ function selectLoadingNode(args) {
1967
1967
  * @returns 输入框元素;`className` 是追加在基础类名之后,而不是替换它。
1968
1968
  */
1969
1969
  function TextField({ invalid = false, className, ...rest }) {
1970
- return h$62("input", {
1970
+ return h$63("input", {
1971
1971
  ...rest,
1972
1972
  className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
1973
1973
  "aria-invalid": invalid || void 0
@@ -1990,7 +1990,7 @@ function itemOf(option, revealId) {
1990
1990
  ...option.icon === void 0 ? {} : { icon: option.icon },
1991
1991
  ...option.disabled === true ? { disabled: true } : {}
1992
1992
  };
1993
- const revealed = (node) => h$62("span", {
1993
+ const revealed = (node) => h$63("span", {
1994
1994
  className: "wb-selectReveal",
1995
1995
  "data-wb-select-reveal": ""
1996
1996
  }, node);
@@ -2012,14 +2012,14 @@ function useRevealOnOpen(open, revealId) {
2012
2012
  }, [open, revealId]);
2013
2013
  }
2014
2014
  function selectValueNode(current, renderValue, placeholder) {
2015
- if (current === void 0) return h$62("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2015
+ if (current === void 0) return h$63("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2016
2016
  return renderValue === void 0 ? current.label : renderValue(current);
2017
2017
  }
2018
2018
  function searchNode(args) {
2019
- return h$62("span", {
2019
+ return h$63("span", {
2020
2020
  ref: args.boxRef,
2021
2021
  className: args.className
2022
- }, h$62("span", { className: "wb-selectSearchIcon" }, h$62(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$62(TextField, {
2022
+ }, h$63("span", { className: "wb-selectSearchIcon" }, h$63(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$63(TextField, {
2023
2023
  id: args.id,
2024
2024
  name: args.name,
2025
2025
  className: "wb-selectSearchInput",
@@ -2034,7 +2034,7 @@ function searchNode(args) {
2034
2034
  }));
2035
2035
  }
2036
2036
  function menuNode(args) {
2037
- return h$62(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2037
+ return h$63(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2038
2038
  open: args.open,
2039
2039
  portal: true,
2040
2040
  className: "wb-selectAnchor",
@@ -2051,11 +2051,11 @@ function menuNode(args) {
2051
2051
  });
2052
2052
  }
2053
2053
  function framed(label, hint, className, control) {
2054
- const inner = label === void 0 ? hint === void 0 ? control : h$62("span", { className: "wb-select" }, control, h$62("span", { className: "wb-selectHint" }, hint)) : h$62(Field, {
2054
+ const inner = label === void 0 ? hint === void 0 ? control : h$63("span", { className: "wb-select" }, control, h$63("span", { className: "wb-selectHint" }, hint)) : h$63(Field, {
2055
2055
  label,
2056
2056
  hint
2057
2057
  }, control);
2058
- return className === void 0 ? inner : h$62("div", { className }, inner);
2058
+ return className === void 0 ? inner : h$63("div", { className }, inner);
2059
2059
  }
2060
2060
  /** 算候选项用来匹配搜索的文本:有 `searchText` 就用它,否则取字符串标签;标签不是字符串又没给它是空串(这项搜不到)。 */
2061
2061
  function searchTextOf(option) {
@@ -2110,11 +2110,11 @@ function useSelectState(props) {
2110
2110
  const [openState, setOpenState] = useState$35(false);
2111
2111
  const [query, setQuery] = useState$35("");
2112
2112
  const [cursor, setCursor] = useState$35(null);
2113
- const boxRef = useRef$21(null);
2114
- const triggerRef = useRef$21(null);
2115
- const wasOpenRef = useRef$21(false);
2116
- const pickedRef = useRef$21(false);
2117
- const closedByUsRef = useRef$21(false);
2113
+ const boxRef = useRef$22(null);
2114
+ const triggerRef = useRef$22(null);
2115
+ const wasOpenRef = useRef$22(false);
2116
+ const pickedRef = useRef$22(false);
2117
+ const closedByUsRef = useRef$22(false);
2118
2118
  const open = openProp ?? openState;
2119
2119
  const setOpen = (next) => {
2120
2120
  if (openProp === void 0) setOpenState(next);
@@ -2194,7 +2194,7 @@ function SelectField(props) {
2194
2194
  ariaLabel,
2195
2195
  loadingText
2196
2196
  }));
2197
- if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$62(TextField, {
2197
+ if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$63(TextField, {
2198
2198
  id,
2199
2199
  name,
2200
2200
  className: "wb-selectFallback",
@@ -2277,11 +2277,11 @@ function SelectField(props) {
2277
2277
  * @returns 一个 `role="group"` 的 section。
2278
2278
  */
2279
2279
  function SettingsSection({ label, title, action, children }) {
2280
- return h$62("section", {
2280
+ return h$63("section", {
2281
2281
  className: "wb-settings",
2282
2282
  role: "group",
2283
2283
  "aria-label": label
2284
- }, h$62("header", { className: "wb-settingsHead" }, h$62("span", { className: "wb-settingsTitle" }, title), action), children);
2284
+ }, h$63("header", { className: "wb-settingsHead" }, h$63("span", { className: "wb-settingsTitle" }, title), action), children);
2285
2285
  }
2286
2286
  //#endregion
2287
2287
  //#region ../shared/dist/components/Stack.js
@@ -2291,7 +2291,7 @@ function SettingsSection({ label, title, action, children }) {
2291
2291
  * @returns 竖排的 div。
2292
2292
  */
2293
2293
  function Stack({ children }) {
2294
- return h$62("div", { className: "wb-stack" }, children);
2294
+ return h$63("div", { className: "wb-stack" }, children);
2295
2295
  }
2296
2296
  //#endregion
2297
2297
  //#region ../shared/dist/components/StateBlock.js
@@ -2306,12 +2306,12 @@ function Stack({ children }) {
2306
2306
  * @returns 一个 div。
2307
2307
  */
2308
2308
  function StateBlock({ title, dot, hint, actions, resolving, children }) {
2309
- return h$62("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$62("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$62("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$62("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$62("div", { className: "wb-stateBlockActions" }, actions));
2309
+ return h$63("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$63("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$63("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$63("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$63("div", { className: "wb-stateBlockActions" }, actions));
2310
2310
  }
2311
2311
  //#endregion
2312
2312
  //#region ../shared/dist/components/icons.js
2313
2313
  function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2314
- return h$62("svg", {
2314
+ return h$63("svg", {
2315
2315
  width: size,
2316
2316
  height: size,
2317
2317
  viewBox,
@@ -2328,10 +2328,10 @@ function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2328
2328
  * @returns 一枚 `aria-hidden` 的 svg。
2329
2329
  */
2330
2330
  function IconConversation({ size = 16 }) {
2331
- return h$62(Shell, {
2331
+ return h$63(Shell, {
2332
2332
  size,
2333
2333
  strokeWidth: 1.3
2334
- }, h$62("path", {
2334
+ }, h$63("path", {
2335
2335
  d: "M2.5 7.2c0-2.3 2.1-4.2 4.8-4.2h1.4c2.7 0 4.8 1.9 4.8 4.2s-2.1 4.2-4.8 4.2H7.5l-3.2 2v-2.3c-1.1-.8-1.8-2-1.8-3.9Z",
2336
2336
  stroke: "currentColor",
2337
2337
  strokeLinejoin: "round"
@@ -2346,30 +2346,30 @@ var BRAND_TAIL_TRANSFORM = "translate(14.6263 10.5853) scale(1.95)";
2346
2346
  * @returns 一枚 `aria-hidden` 的 svg。
2347
2347
  */
2348
2348
  function IconBrandMark({ size = 24 }) {
2349
- return h$62(Shell, {
2349
+ return h$63(Shell, {
2350
2350
  size,
2351
2351
  viewBox: "0 0 64 64"
2352
- }, h$62("path", {
2352
+ }, h$63("path", {
2353
2353
  d: BRAND_FRAME,
2354
2354
  fill: "currentColor",
2355
2355
  fillRule: "evenodd"
2356
- }), h$62("rect", {
2356
+ }), h$63("rect", {
2357
2357
  x: 27.5,
2358
2358
  y: 48,
2359
2359
  width: 9,
2360
2360
  height: 4.75,
2361
2361
  fill: "currentColor"
2362
- }), h$62("rect", {
2362
+ }), h$63("rect", {
2363
2363
  x: 19,
2364
2364
  y: 52.75,
2365
2365
  width: 26,
2366
2366
  height: 4.75,
2367
2367
  rx: 2.375,
2368
2368
  fill: "currentColor"
2369
- }), h$62("g", { transform: BRAND_TAIL_TRANSFORM }, h$62("path", {
2369
+ }), h$63("g", { transform: BRAND_TAIL_TRANSFORM }, h$63("path", {
2370
2370
  d: BRAND_TAIL,
2371
2371
  fill: "currentColor"
2372
- }), h$62("circle", {
2372
+ }), h$63("circle", {
2373
2373
  cx: 6.885,
2374
2374
  cy: 13.742,
2375
2375
  r: 1.95,
@@ -2382,30 +2382,30 @@ function IconBrandMark({ size = 24 }) {
2382
2382
  * @returns 一枚 `aria-hidden` 的 svg。
2383
2383
  */
2384
2384
  function IconOpencli({ size = 16 }) {
2385
- return h$62(Shell, {
2385
+ return h$63(Shell, {
2386
2386
  size,
2387
2387
  viewBox: "0 0 64 64"
2388
- }, h$62("defs", null, h$62("linearGradient", {
2388
+ }, h$63("defs", null, h$63("linearGradient", {
2389
2389
  id: "opencli-mark",
2390
2390
  x1: "0%",
2391
2391
  y1: "0%",
2392
2392
  x2: "100%",
2393
2393
  y2: "100%"
2394
- }, h$62("stop", {
2394
+ }, h$63("stop", {
2395
2395
  offset: "0%",
2396
2396
  stopColor: "#00e5a0"
2397
- }), h$62("stop", {
2397
+ }), h$63("stop", {
2398
2398
  offset: "50%",
2399
2399
  stopColor: "#00b4d8"
2400
- }), h$62("stop", {
2400
+ }), h$63("stop", {
2401
2401
  offset: "100%",
2402
2402
  stopColor: "#7b61ff"
2403
- }))), h$62("rect", {
2403
+ }))), h$63("rect", {
2404
2404
  width: 64,
2405
2405
  height: 64,
2406
2406
  rx: 14,
2407
2407
  fill: "#0a0a0f"
2408
- }), h$62("text", {
2408
+ }), h$63("text", {
2409
2409
  x: "50%",
2410
2410
  y: "54%",
2411
2411
  dominantBaseline: "middle",
@@ -2422,10 +2422,10 @@ function IconOpencli({ size = 16 }) {
2422
2422
  * @returns 一枚 `aria-hidden` 的 svg。
2423
2423
  */
2424
2424
  function IconNpm({ size = 16 }) {
2425
- return h$62(Shell, {
2425
+ return h$63(Shell, {
2426
2426
  size,
2427
2427
  viewBox: "0 0 1024 1024"
2428
- }, h$62("path", {
2428
+ }, h$63("path", {
2429
2429
  d: "M64 337.76h896v298.72H512v49.792H312.896v-49.824H64z m49.792 248.928h99.552v-149.376h49.76v149.344h49.792v-199.104H113.792z m248.896-199.136v248.928h99.552v-49.792h99.552v-199.136z m99.552 49.792H512v99.584h-49.792z m149.344-49.792v199.136h99.552v-149.376h49.792v149.344h49.792v-149.344h49.792v149.344h49.792v-199.104z",
2430
2430
  fill: "#CB3837"
2431
2431
  }));
@@ -2436,37 +2436,37 @@ function IconNpm({ size = 16 }) {
2436
2436
  * @returns 一枚 `aria-hidden` 的 svg。
2437
2437
  */
2438
2438
  function IconModuleMark({ size = 16 }) {
2439
- return h$62(Shell, {
2439
+ return h$63(Shell, {
2440
2440
  size,
2441
2441
  viewBox: "0 0 24 24"
2442
- }, h$62("defs", null, h$62("linearGradient", {
2442
+ }, h$63("defs", null, h$63("linearGradient", {
2443
2443
  id: "workbench-module-mark",
2444
2444
  x1: "0%",
2445
2445
  y1: "0%",
2446
2446
  x2: "100%",
2447
2447
  y2: "100%"
2448
- }, h$62("stop", {
2448
+ }, h$63("stop", {
2449
2449
  offset: "0%",
2450
2450
  stopColor: "#3b82f6"
2451
- }), h$62("stop", {
2451
+ }), h$63("stop", {
2452
2452
  offset: "55%",
2453
2453
  stopColor: "#8b5cf6"
2454
- }), h$62("stop", {
2454
+ }), h$63("stop", {
2455
2455
  offset: "100%",
2456
2456
  stopColor: "#14b8a6"
2457
- }))), h$62("rect", {
2457
+ }))), h$63("rect", {
2458
2458
  width: 24,
2459
2459
  height: 24,
2460
2460
  rx: 7,
2461
2461
  fill: "url(#workbench-module-mark)"
2462
- }), h$62("rect", {
2462
+ }), h$63("rect", {
2463
2463
  x: "4.6",
2464
2464
  y: "4.6",
2465
2465
  width: "6.2",
2466
2466
  height: "6.2",
2467
2467
  rx: "1.9",
2468
2468
  fill: "#ffffff"
2469
- }), h$62("rect", {
2469
+ }), h$63("rect", {
2470
2470
  x: "13.2",
2471
2471
  y: "4.6",
2472
2472
  width: "6.2",
@@ -2474,7 +2474,7 @@ function IconModuleMark({ size = 16 }) {
2474
2474
  rx: "1.9",
2475
2475
  fill: "#ffffff",
2476
2476
  fillOpacity: .78
2477
- }), h$62("rect", {
2477
+ }), h$63("rect", {
2478
2478
  x: "4.6",
2479
2479
  y: "13.2",
2480
2480
  width: "6.2",
@@ -2482,7 +2482,7 @@ function IconModuleMark({ size = 16 }) {
2482
2482
  rx: "1.9",
2483
2483
  fill: "#ffffff",
2484
2484
  fillOpacity: .78
2485
- }), h$62("rect", {
2485
+ }), h$63("rect", {
2486
2486
  x: "13.2",
2487
2487
  y: "13.2",
2488
2488
  width: "6.2",
@@ -2497,7 +2497,7 @@ function IconModuleMark({ size = 16 }) {
2497
2497
  * @returns 一枚 `aria-hidden` 的 svg。
2498
2498
  */
2499
2499
  function IconPanelScreen({ size = 16 }) {
2500
- return h$62("svg", {
2500
+ return h$63("svg", {
2501
2501
  width: size,
2502
2502
  height: size,
2503
2503
  viewBox: "0 0 1024 1024",
@@ -2508,7 +2508,7 @@ function IconPanelScreen({ size = 16 }) {
2508
2508
  display: "block",
2509
2509
  overflow: "hidden"
2510
2510
  }
2511
- }, h$62("path", { d: "M939 112c17.673 0 32 14.327 32 32v554.667c0 17.673-14.327 32-32 32l-394.5-0.001v96c0 3.74-0.642 7.331-1.82 10.668H768.4c17.673 0 32 14.326 32 32 0 17.496-14.042 31.712-31.47 31.995l-0.53 0.004H256.6c-17.673 0-32-14.327-32-32 0-17.496 14.042-31.713 31.47-31.995l0.53-0.005h225.721a31.923 31.923 0 0 1-1.817-10.137l-0.004-0.53v-96H86c-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V144c0-17.673 14.327-32 32-32z m-32 64H118v490.666h789V176zM341.9 432c17.496 0 31.713 14.042 31.996 31.47l0.004 0.53v85.333c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V464c0-17.673 14.327-32 32-32z m170.6-85.333c17.496 0 31.713 14.041 31.996 31.47l0.004 0.53v170.666c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V378.667c0-17.673 14.327-32 32-32z m170.6-85.334c17.496 0 31.713 14.042 31.996 31.471l0.004 0.53v256c0 17.672-14.327 32-32 32-17.496 0-31.713-14.042-31.996-31.471l-0.004-0.53v-256c0-17.673 14.327-32 32-32z" }));
2511
+ }, h$63("path", { d: "M939 112c17.673 0 32 14.327 32 32v554.667c0 17.673-14.327 32-32 32l-394.5-0.001v96c0 3.74-0.642 7.331-1.82 10.668H768.4c17.673 0 32 14.326 32 32 0 17.496-14.042 31.712-31.47 31.995l-0.53 0.004H256.6c-17.673 0-32-14.327-32-32 0-17.496 14.042-31.713 31.47-31.995l0.53-0.005h225.721a31.923 31.923 0 0 1-1.817-10.137l-0.004-0.53v-96H86c-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V144c0-17.673 14.327-32 32-32z m-32 64H118v490.666h789V176zM341.9 432c17.496 0 31.713 14.042 31.996 31.47l0.004 0.53v85.333c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V464c0-17.673 14.327-32 32-32z m170.6-85.333c17.496 0 31.713 14.041 31.996 31.47l0.004 0.53v170.666c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V378.667c0-17.673 14.327-32 32-32z m170.6-85.334c17.496 0 31.713 14.042 31.996 31.471l0.004 0.53v256c0 17.672-14.327 32-32 32-17.496 0-31.713-14.042-31.996-31.471l-0.004-0.53v-256c0-17.673 14.327-32 32-32z" }));
2512
2512
  }
2513
2513
  //#endregion
2514
2514
  //#region ../shared/dist/config/storage.js
@@ -2723,6 +2723,32 @@ var SIDEBAR_EDITION_RESOURCE = "sidebarEdition";
2723
2723
  //#region ../shared/dist/contract/protocol/unit-manifests.js
2724
2724
  var UNIT_MANIFESTS_ROUTE = "unit-manifests";
2725
2725
  //#endregion
2726
+ //#region ../shared/dist/contract/unit.js
2727
+ /**
2728
+ * 外壳替模块名合成的词表键:模块自己不必写名字键,名字直接从清单里的 title 注册进来。
2729
+ * @param unit 单元 id。
2730
+ * @returns 该单元名字在词表里的键。
2731
+ */
2732
+ function unitTitleKey(unit) {
2733
+ return `dsh-workbench.unit.${unit}.title`;
2734
+ }
2735
+ /**
2736
+ * 模块声明的全部环境需要(没写就是空表)。
2737
+ * @param manifest 模块清单。
2738
+ * @returns need 列表。
2739
+ */
2740
+ function needsOf(manifest) {
2741
+ return manifest.needs ?? [];
2742
+ }
2743
+ /**
2744
+ * 市场门槛要看的那些需要:声明了 extension / lib 就算(不要求写了来源)。
2745
+ * @param manifest 模块清单。
2746
+ * @returns extension / lib 的 need 列表。
2747
+ */
2748
+ function supplyNeedsOf(manifest) {
2749
+ return needsOf(manifest).filter((need) => need.kind === "extension" || need.kind === "lib");
2750
+ }
2751
+ //#endregion
2726
2752
  //#region ../shared/dist/contract/needs.js
2727
2753
  function text(value) {
2728
2754
  return typeof value === "string" ? value.trim() : "";
@@ -2785,24 +2811,6 @@ Object.freeze({
2785
2811
  })
2786
2812
  });
2787
2813
  //#endregion
2788
- //#region ../shared/dist/contract/unit.js
2789
- /**
2790
- * 模块声明的全部环境需要(没写就是空表)。
2791
- * @param manifest 模块清单。
2792
- * @returns need 列表。
2793
- */
2794
- function needsOf(manifest) {
2795
- return manifest.needs ?? [];
2796
- }
2797
- /**
2798
- * 市场门槛要看的那些需要:声明了 extension / lib 就算(不要求写了来源)。
2799
- * @param manifest 模块清单。
2800
- * @returns extension / lib 的 need 列表。
2801
- */
2802
- function supplyNeedsOf(manifest) {
2803
- return needsOf(manifest).filter((need) => need.kind === "extension" || need.kind === "lib");
2804
- }
2805
- //#endregion
2806
2814
  //#region ../shared/dist/i18n/settings.js
2807
2815
  /** 「工作台设置」这一组的词条:配置同步 / 新建工作台。 */
2808
2816
  var zhSettings = {
@@ -3071,15 +3079,14 @@ var en = {
3071
3079
  "panels.market.update": "Update",
3072
3080
  "panels.market.swapSlow": "Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.",
3073
3081
  "panels.market.removeSlow": "Not removed yet — maybe a slow network or an uninstall that did not finish. Check again in a moment; if it stays like this, restart dsh.",
3074
- "panels.market.updateNoChange": "Not updated: you were on {from}, and after the run the disk still has that version; the newest on the registry is {latest}.",
3082
+ "panels.market.updateNoChange": "Update failed: still {from}. The newest on the registry is {latest} — press Update again.",
3075
3083
  "panels.market.updateUnknownVersion": "(unknown)",
3076
- "panels.market.updateGone": "Not updated: after the run the module cannot be read from disk.",
3077
- "panels.market.updateRestored": "Not updated: the new version was missing from disk, so {version} was put back.",
3084
+ "panels.market.updateGone": "Update failed: the module is gone after the update.",
3085
+ "panels.market.updateRestored": "Update failed: the new version could not be found after the update, so {version} was put back.",
3078
3086
  "panels.market.updateBehind": "Installed {installed}, but the newest on the registry is {latest} — not the latest; you can update once more.",
3079
- "panels.market.selfUpdateFailed": "Self-update failed: {reason}",
3087
+ "panels.market.selfUpdateFailed": "Workbench update failed: {reason}",
3080
3088
  "panels.market.selfUpdateUnknown": "the outside process left no reason (see ~/.dsh/workbench/self-update.log)",
3081
- "panels.market.selfUpdateRolledBack": "Not swapped; rolled back to {version}.",
3082
- "panels.market.selfUpdateNeedsMigrate": "Workbench updated. Old sessions and projects are not merged automatically: quit every dsh, then run dsh-workbench migrate (--force to merge again).",
3089
+ "panels.market.selfUpdateRolledBack": "Workbench update failed; rolled back to {version}.",
3083
3090
  "panels.market.uninstall": "Uninstall",
3084
3091
  "panels.market.uninstallLabel": "Uninstall {name}",
3085
3092
  "panels.market.installing": "Installing…",
@@ -3101,9 +3108,27 @@ var en = {
3101
3108
  "panels.market.empty": "No modules available",
3102
3109
  "panels.market.sectionPlugins": "Installed opencli plugins",
3103
3110
  "panels.market.moduleOutdated": "update available",
3111
+ "panels.market.updateNeedsWorkbench": "this version needs a newer workbench first",
3112
+ "panels.market.updateIncompatible": "the new version does not match this workbench, so it cannot be installed now",
3104
3113
  "panels.market.moduleRefused": "This module does not match this workbench, so it cannot be used for now.",
3105
3114
  "panels.market.moduleRestartHint": "restart dsh once to bring it up",
3106
3115
  "panels.market.pendingRestart": "restart required",
3116
+ "panels.market.pendingFollowUp": "old data to migrate",
3117
+ "panels.market.migrationHint": "old sessions and projects are not merged yet",
3118
+ "panels.market.migrateAction": "Migrate old data",
3119
+ "panels.market.migrating": "Migrating…",
3120
+ "panels.market.migrateConfirmTitle": "Migrate old data?",
3121
+ "panels.market.migrateConfirmDetail": "Quit dsh web / Desktop first. Only missing data is added; nothing is overwritten.",
3122
+ "panels.market.migrateConfirmAck": "I've quit dsh web / Desktop",
3123
+ "panels.market.migrateConfirmYes": "Start migration",
3124
+ "panels.market.migrateDone": "Migration complete: {added} projects added; restart the workbench and dsh web to see them.",
3125
+ "panels.market.dismissFollowUp": "Don't remind me",
3126
+ "panels.market.dismissing": "Dismissing…",
3127
+ "panels.market.dismissFollowUpTitle": "Stop reminding about this?",
3128
+ "panels.market.dismissFollowUpDetail": "The reminder will be hidden from the market, but old data will not be migrated or deleted. Old sessions and projects stay in the old directory and won't appear in the new version; you can still run dsh-workbench migrate later.",
3129
+ "panels.market.dismissFollowUpAck": "I understand the old data won't appear automatically",
3130
+ "panels.market.dismissFollowUpYes": "Don't remind me",
3131
+ "panels.market.dismissed": "No longer reminded; old data stays in the old directory and can still be migrated with dsh-workbench migrate.",
3107
3132
  "panels.market.workbenchName": "Workbench",
3108
3133
  "panels.market.pluginBroken": "This plugin install is broken: it cannot be identified. Uninstall it first, then ask the agent to reinstall it by package name.",
3109
3134
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
@@ -3187,7 +3212,7 @@ var en = {
3187
3212
  "panels.market.add.exampleTitle": "Examples",
3188
3213
  "panels.market.add.exampleFill": "Fill in an example",
3189
3214
  "panels.market.add.registryLabel": "Source",
3190
- "panels.market.add.registryProfile": "This profile's registry",
3215
+ "panels.market.add.registryProfile": "This workbench's registry",
3191
3216
  "panels.market.add.registryPnpm": "pnpm's own registry",
3192
3217
  "panels.market.add.check": "Check",
3193
3218
  "panels.market.add.checking": "Checking…",
@@ -3208,14 +3233,19 @@ var en = {
3208
3233
  "panels.market.tabs": "The two faces of the module market",
3209
3234
  "panels.tab.discover": "Discover",
3210
3235
  "panels.discover.loading": "Reading the index",
3236
+ "panels.discover.slowHint": "Slow to load: finish any authorization prompt, or switch sources.",
3211
3237
  "panels.discover.lead": "Browse modules from an index source; install and go.",
3212
3238
  "panels.discover.addSource": "Add",
3213
3239
  "panels.discover.addingSource": "Adding…",
3214
3240
  "panels.discover.addFirstSource": "Add index source",
3215
3241
  "panels.discover.removeSource": "Remove",
3216
3242
  "panels.discover.removeSourceNamed": "Remove {url}",
3243
+ "panels.discover.useSource": "Use",
3244
+ "panels.discover.useSourceNamed": "Use {label}",
3245
+ "panels.discover.sourceCurrent": "In use",
3217
3246
  "panels.discover.refresh": "Refresh",
3218
3247
  "panels.discover.search": "Search modules",
3248
+ "panels.discover.clearSearch": "Clear search",
3219
3249
  "panels.discover.all": "All",
3220
3250
  "panels.discover.sourceLabel": "Name",
3221
3251
  "panels.discover.sourceKind": "Type",
@@ -3225,8 +3255,8 @@ var en = {
3225
3255
  "panels.discover.sourcePlaceholder": "https://example.com/index.json or git@git.example.com:wb/market.git",
3226
3256
  "panels.discover.sourceRef": "Branch",
3227
3257
  "panels.discover.sourcePath": "Index file",
3228
- "panels.discover.sourceLocal": "Local clone (optional)",
3229
- "panels.discover.sourceLocalHint": "Leave empty to clone into ~/.dsh/workbench/market-index/.",
3258
+ "panels.discover.sourceLocal": "Local copy folder (optional)",
3259
+ "panels.discover.sourceLocalHint": "Leave empty to keep it in ~/.dsh/workbench/market-index/.",
3230
3260
  "panels.discover.save": "Save and refresh",
3231
3261
  "panels.discover.cancel": "Cancel",
3232
3262
  "panels.discover.retry": "Retry",
@@ -3239,9 +3269,9 @@ var en = {
3239
3269
  "panels.discover.missingIndex": "This repository has no {path} yet.",
3240
3270
  "panels.discover.initTitle": "Initialize this repository as a module market index?",
3241
3271
  "panels.discover.initCta": "Initialize market index",
3242
- "panels.discover.initWhat": "It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their artifacts under packages/<unit>/. The repository stays owned by its owner.",
3272
+ "panels.discover.initWhat": "It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their build files under packages/<unit>/. The repository stays owned by its owner.",
3243
3273
  "panels.discover.initBranch": "Branch",
3244
- "panels.discover.initBranchHint": "The index and artifacts go to this branch; an empty repository gets it created.",
3274
+ "panels.discover.initBranchHint": "The index and build files go to this branch; an empty repository gets it created.",
3245
3275
  "panels.discover.initBranchBad": "Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.",
3246
3276
  "panels.discover.initOk": "Initialize",
3247
3277
  "panels.discover.initBusy": "Initializing…",
@@ -3345,11 +3375,11 @@ var en = {
3345
3375
  "panels.market.add.doneApplied": "Installed and live.",
3346
3376
  "panels.market.add.doneRestart": "Installed — restart once to pick it up.",
3347
3377
  "panels.market.add.restartWhy": "Why this needs a restart: {reason}",
3348
- "panels.market.add.restartWhy.no-hmr": "this configuration only applies changes at startup (hot reload is off)",
3378
+ "panels.market.add.restartWhy.no-hmr": "this configuration is only read at startup, so a restart is needed",
3349
3379
  "panels.market.add.restartWhy.package-moved": "an installed package now resolves to another directory, or the change replaced something dsh itself provides",
3350
3380
  "panels.market.add.restartWhy.host-module": "the change reaches modules dsh itself loaded",
3351
- "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin running outside the plugin list",
3352
- "panels.market.add.restartWhy.module-comparison": "dsh could not compare loaded plugins with their files",
3381
+ "panels.market.add.restartWhy.unmanaged-plugin": "the change reaches a plugin that is running but not on the install list",
3382
+ "panels.market.add.restartWhy.module-comparison": "dsh could not confirm that the running plugin is the copy installed on this machine",
3353
3383
  "panels.market.add.cancelled": "Cancelled.",
3354
3384
  "panels.market.add.failed": "Didn't work: {reason}",
3355
3385
  "panels.market.add.removed": "It has been removed.",
@@ -3359,10 +3389,10 @@ var en = {
3359
3389
  "panels.market.add.removedRestart": "Removed — restart once to finish.",
3360
3390
  "panels.market.add.remove": "Remove it",
3361
3391
  "panels.market.add.problem.invalidSpec": "That is not a spec we accept: it cannot be empty or start with a dash.",
3362
- "panels.market.add.problem.alreadyInstalled": "That package is already in the profile (add @version to switch versions).",
3392
+ "panels.market.add.problem.alreadyInstalled": "That package is already in this workbench (add @version to switch versions).",
3363
3393
  "panels.market.add.problem.notFound": "No such package on that source. Try another name or version.",
3364
3394
  "panels.market.add.problem.notAPackage": "There is no package at that location. Pick a folder that contains a package.json.",
3365
- "panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (it is missing the dsh wiring declaration).",
3395
+ "panels.market.add.problem.notABundle": "It is an npm package, but not a dsh plugin (dsh cannot find what to load inside it).",
3366
3396
  "panels.market.add.problem.network": "The source is unreachable. Check the network and retry.",
3367
3397
  "panels.market.add.problem.unknown": "The check did not pass (reason unknown). Open the install details for the raw output, or retry.",
3368
3398
  "panels.market.add.reason.invalidSpec": "the spec is not accepted",
@@ -3370,7 +3400,7 @@ var en = {
3370
3400
  "panels.market.add.reason.notBundle": "it is not a dsh plugin package",
3371
3401
  "panels.market.add.reason.notRemovable": "it ships with the installation and cannot be removed",
3372
3402
  "panels.market.add.reason.bundleInUse": "something is still using it",
3373
- "panels.market.add.reason.stopProfile": "this configuration has no hot reload, so stop the process first",
3403
+ "panels.market.add.reason.stopProfile": "this configuration needs a restart, so stop the workbench first",
3374
3404
  "panels.market.add.reason.staleApproval": "the scripts to allow changed — start over",
3375
3405
  "panels.market.add.reason.operationError": "pnpm failed (see the install output)",
3376
3406
  "panels.market.add.reason.buildBlocked": "pnpm blocked install scripts",
@@ -3400,8 +3430,8 @@ var en = {
3400
3430
  "blocker.forbidden.titleGeneric": "No access",
3401
3431
  "blocker.forbidden.hint": "You are signed in, but this project/repo is not permitted for your account.",
3402
3432
  "blocker.forbidden.open": "Open permissions page",
3403
- "blocker.timeout.hint": "The headless browser may not have started; retrying usually helps.",
3404
- "blocker.exec.hint": "Make sure opencli is installed and on PATH (which opencli).",
3433
+ "blocker.timeout.hint": "The background browser may not have started; retrying usually helps.",
3434
+ "blocker.exec.hint": "Make sure opencli is installed and runs from your terminal (which opencli).",
3405
3435
  "blocker.unknown.title": "Something went wrong",
3406
3436
  "panels.reading": "Reading the panel setup…",
3407
3437
  "panels.cardBroken": "This module will not render: {unit} ({reason})",
@@ -3415,7 +3445,7 @@ var en = {
3415
3445
  "env.elapsed": "Waiting {seconds}s",
3416
3446
  "env.stepFailed.install": "install failed",
3417
3447
  "env.stepFailed.path": "installed but not found",
3418
- "env.stepFailed.shell": "no shell channel",
3448
+ "env.stepFailed.shell": "cannot reach the command line",
3419
3449
  "env.toolchain.ok": "Looks good",
3420
3450
  "env.toolchain.warn": "Almost ready",
3421
3451
  "env.opencli.ok": "Ready",
@@ -3432,10 +3462,10 @@ var en = {
3432
3462
  "env.fix.title": "How to fix it",
3433
3463
  "env.fix.why": "The workbench uses its own background tool (installed separately from the one in your terminal), and it is not set up on this machine yet.",
3434
3464
  "env.fix.whyPath": "The background tool is installed, but this environment cannot find it — usually a PATH or shell-session issue.",
3435
- "env.fix.whyShell": "The workbench has no shell channel, so it cannot fetch data — you cannot install this from here; someone needs to fix the background environment.",
3465
+ "env.fix.whyShell": "The workbench cannot reach the command line on this machine, so it cannot fetch data — you cannot install this from here; someone needs to fix the background environment.",
3436
3466
  "env.fix.step": "Run this in a terminal, then hit Retry:",
3437
3467
  "env.fix.stepPath": "Open a new terminal window (or make sure npm’s global bin directory is on PATH), then hit Retry.",
3438
- "env.fix.stepShell": "Restart the workbench (or dsh); if it keeps happening, the shell channel is not wired up.",
3468
+ "env.fix.stepShell": "Restart the workbench (or dsh); if it keeps happening, the workbench still cannot reach the command line.",
3439
3469
  "env.fix.permission": "Permission denied: rerun with sudo, or point npm’s global directory at your home.",
3440
3470
  "env.fix.network": "Network unreachable: check your network or proxy, then retry.",
3441
3471
  "env.fix.details": "Details (for troubleshooting)",
@@ -3464,9 +3494,9 @@ var en = {
3464
3494
  "env.warm.done": "Ready ({n} sites)",
3465
3495
  "env.warm.short": "Could not sign in early this time — nothing breaks; the first read fills it in",
3466
3496
  "env.unit.failed": "This module cannot start",
3467
- "env.unit.failedHint": "It failed while assembling itself; other modules are unaffected.",
3468
- "env.unit.unchecked": "Cannot check: no shell channel",
3469
- "env.unit.uncheckedHint": "The module is not the problem — the shell channel is unavailable. Restart the workbench.",
3497
+ "env.unit.failedHint": "It failed while starting up; other modules are unaffected.",
3498
+ "env.unit.unchecked": "Cannot check: no command line",
3499
+ "env.unit.uncheckedHint": "The module is not the problem — the workbench cannot reach the command line. Restart the workbench.",
3470
3500
  "adapterSet.not-configured": "No adapter set configured; using the default.",
3471
3501
  "adapterSet.no-profile": "No profile found, so the adapter set cannot load; using the default.",
3472
3502
  "adapterSet.malformed": "An adapter set must be a package name (for example @acme/adapters-set); using the default.",
@@ -3509,7 +3539,7 @@ var en = {
3509
3539
  "sidebarEdition.official": "Official",
3510
3540
  "sidebarEdition.officialHint": "Matches dsh exactly and stays stable: search, view options, show more, archive, add workspace — no waiting for us to catch up. Pick it to keep things simple.",
3511
3541
  "sidebarEdition.custom": "Custom",
3512
- "sidebarEdition.customHint": "Built for multi-project work: one project per dropdown, recency-first sessions, edge fades, marquee, DIY new session. Easier when you juggle projects.",
3542
+ "sidebarEdition.customHint": "Built for multi-project work: one project per dropdown, recency-first sessions, long names scroll, edges fade, DIY new session. Easier when you juggle projects.",
3513
3543
  "sidebarEdition.saving": "Configuring…",
3514
3544
  "sidebarEdition.reloadRequired": "Saved. Reload the page to apply — no workbench restart needed.",
3515
3545
  "sidebarEdition.reload": "Reload page",
@@ -3538,25 +3568,25 @@ var en = {
3538
3568
  "record.act.halt": "Halt",
3539
3569
  "approval.record.site": "Site",
3540
3570
  "approval.record.what": "Records",
3541
- "approval.record.lands": "Lands in",
3571
+ "approval.record.lands": "Saves to",
3542
3572
  "approval.record.noUrl": "no site given (this call gets refused)",
3543
3573
  "approval.record.oneAction": "one action",
3544
3574
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3545
- "approval.longTask.what": "Stops",
3546
- "approval.longTask.signal": "stopping only sends an interrupt signal — how the platform-side run finishes is up to the module",
3575
+ "approval.longTask.what": "Task to stop",
3576
+ "approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
3547
3577
  "approval.publish.module": "Module",
3548
3578
  "approval.publish.target": "Target",
3549
3579
  "approval.publish.version": "Version",
3550
3580
  "approval.publish.author": "Author",
3551
- "approval.publish.authorMissing": "unsigned (commits use the local git identity)",
3581
+ "approval.publish.authorMissing": "unsigned",
3552
3582
  "approval.publish.registry": "Registry",
3553
3583
  "approval.publish.repo": "Repository",
3554
3584
  "approval.publish.branch": "Branch",
3555
3585
  "approval.publish.defaultBranch": "default branch",
3556
- "approval.publish.artifacts": "Artifacts",
3586
+ "approval.publish.artifacts": "Build files",
3557
3587
  "approval.publish.index": "Index",
3558
3588
  "approval.publish.commits": "Commits",
3559
- "approval.publish.twoCommits": "artifacts + market.json in 2 commits, one push",
3589
+ "approval.publish.twoCommits": "build files + market.json in 2 commits, one push",
3560
3590
  "approval.publish.reading": "Reading…",
3561
3591
  "approval.publish.changelog": "Changelog for {version}",
3562
3592
  "approval.publish.changelogMissing": "No changelog entry for {version}; publishing will be blocked",
@@ -3704,15 +3734,14 @@ var dictionaries = {
3704
3734
  "panels.market.update": "更新",
3705
3735
  "panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
3706
3736
  "panels.market.removeSlow": "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。",
3707
- "panels.market.updateNoChange": "没换成:点下去是 {from},跑完盘上还是这一版;源上最新是 {latest}。",
3737
+ "panels.market.updateNoChange": "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。",
3708
3738
  "panels.market.updateUnknownVersion": "(问不到)",
3709
- "panels.market.updateGone": "没换成:更新跑完盘上读不到这个模块。",
3710
- "panels.market.updateRestored": "没换成:盘上已经读不到新版本,已把 {version} 装回去。",
3739
+ "panels.market.updateGone": "更新失败:更新后找不到这个模块。",
3740
+ "panels.market.updateRestored": "更新失败:更新后找不到新版本,已把 {version} 装回去。",
3711
3741
  "panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。",
3712
- "panels.market.selfUpdateFailed": "自更新没成:{reason}",
3742
+ "panels.market.selfUpdateFailed": "工作台更新失败:{reason}",
3713
3743
  "panels.market.selfUpdateUnknown": "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)",
3714
- "panels.market.selfUpdateRolledBack": "没换成,已回滚到 {version}。",
3715
- "panels.market.selfUpdateNeedsMigrate": "工作台已更新。旧会话 / 项目不会自动并:先退出所有 dsh,再运行 dsh-workbench migrate(--force 可补并)。",
3744
+ "panels.market.selfUpdateRolledBack": "工作台更新失败,已回滚到 {version}。",
3716
3745
  "panels.market.uninstall": "卸载",
3717
3746
  "panels.market.uninstallLabel": "卸载 {name}",
3718
3747
  "panels.market.installing": "正在安装…",
@@ -3734,9 +3763,27 @@ var dictionaries = {
3734
3763
  "panels.market.empty": "暂无可用模块",
3735
3764
  "panels.market.sectionPlugins": "已安装 opencli 插件",
3736
3765
  "panels.market.moduleOutdated": "有新版",
3766
+ "panels.market.updateNeedsWorkbench": "新版本要先把工作台升级才能用",
3767
+ "panels.market.updateIncompatible": "新版本和当前的工作台不匹配,暂时不能更新",
3737
3768
  "panels.market.moduleRefused": "模块版本与工作台不匹配,暂时无法使用",
3738
3769
  "panels.market.moduleRestartHint": "重启后生效",
3739
3770
  "panels.market.pendingRestart": "重启后生效",
3771
+ "panels.market.pendingFollowUp": "旧数据待迁移",
3772
+ "panels.market.migrationHint": "旧会话和项目还没搬过来",
3773
+ "panels.market.migrateAction": "迁移旧数据",
3774
+ "panels.market.migrating": "正在迁移…",
3775
+ "panels.market.migrateConfirmTitle": "迁移旧数据?",
3776
+ "panels.market.migrateConfirmDetail": "先退出 dsh web / Desktop。迁移只补缺、不覆盖;旧目录保留。",
3777
+ "panels.market.migrateConfirmAck": "我已经退出 dsh web / Desktop",
3778
+ "panels.market.migrateConfirmYes": "开始迁移",
3779
+ "panels.market.migrateDone": "迁移完成:补了 {added} 个项目;重启工作台和 dsh web 后出现。",
3780
+ "panels.market.dismissFollowUp": "不再提醒",
3781
+ "panels.market.dismissing": "正在收起…",
3782
+ "panels.market.dismissFollowUpTitle": "不再提醒这件事?",
3783
+ "panels.market.dismissFollowUpDetail": "提示会从模块市场收起,但不会迁移或删除旧数据。旧会话和项目仍留在旧目录,新版本里看不到;以后需要时仍可运行 dsh-workbench migrate。",
3784
+ "panels.market.dismissFollowUpAck": "我知道旧数据不会自动出现",
3785
+ "panels.market.dismissFollowUpYes": "不再提醒",
3786
+ "panels.market.dismissed": "已不再提醒;旧数据仍在旧目录,需要时仍可运行 dsh-workbench migrate。",
3740
3787
  "panels.market.workbenchName": "工作台",
3741
3788
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3742
3789
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
@@ -3820,7 +3867,7 @@ var dictionaries = {
3820
3867
  "panels.market.add.exampleTitle": "示例",
3821
3868
  "panels.market.add.exampleFill": "填入示例",
3822
3869
  "panels.market.add.registryLabel": "安装源",
3823
- "panels.market.add.registryProfile": "这个 profile 配的源",
3870
+ "panels.market.add.registryProfile": "这份工作台配的源",
3824
3871
  "panels.market.add.registryPnpm": "pnpm 自己配的源",
3825
3872
  "panels.market.add.check": "预检",
3826
3873
  "panels.market.add.checking": "正在预检…",
@@ -3841,14 +3888,19 @@ var dictionaries = {
3841
3888
  "panels.market.tabs": "模块市场的两个面",
3842
3889
  "panels.tab.discover": "发现",
3843
3890
  "panels.discover.loading": "正在读取索引",
3891
+ "panels.discover.slowHint": "读取较慢:如有授权提示,先完成它,或换一个索引源。",
3844
3892
  "panels.discover.lead": "从索引源浏览模块;装上就能用。",
3845
3893
  "panels.discover.addSource": "添加",
3846
3894
  "panels.discover.addingSource": "正在添加…",
3847
3895
  "panels.discover.addFirstSource": "添加索引源",
3848
3896
  "panels.discover.removeSource": "移除",
3849
3897
  "panels.discover.removeSourceNamed": "移除 {url}",
3898
+ "panels.discover.useSource": "使用",
3899
+ "panels.discover.useSourceNamed": "使用 {label}",
3900
+ "panels.discover.sourceCurrent": "当前使用",
3850
3901
  "panels.discover.refresh": "刷新",
3851
3902
  "panels.discover.search": "搜索模块",
3903
+ "panels.discover.clearSearch": "清除搜索",
3852
3904
  "panels.discover.all": "全部",
3853
3905
  "panels.discover.sourceLabel": "名字",
3854
3906
  "panels.discover.sourceKind": "类型",
@@ -3858,8 +3910,8 @@ var dictionaries = {
3858
3910
  "panels.discover.sourcePlaceholder": "https://example.com/index.json 或 git@git.example.com:wb/market.git",
3859
3911
  "panels.discover.sourceRef": "分支",
3860
3912
  "panels.discover.sourcePath": "索引文件",
3861
- "panels.discover.sourceLocal": "本地 clone(可选)",
3862
- "panels.discover.sourceLocalHint": "不填就 clone 到 ~/.dsh/workbench/market-index/。",
3913
+ "panels.discover.sourceLocal": "本地副本目录(可选)",
3914
+ "panels.discover.sourceLocalHint": "不填就放到 ~/.dsh/workbench/market-index/。",
3863
3915
  "panels.discover.save": "保存并刷新",
3864
3916
  "panels.discover.cancel": "取消",
3865
3917
  "panels.discover.retry": "重试",
@@ -3872,9 +3924,9 @@ var dictionaries = {
3872
3924
  "panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
3873
3925
  "panels.discover.initTitle": "把这个仓库初始化成模块市场索引?",
3874
3926
  "panels.discover.initCta": "初始化成市场索引",
3875
- "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把产物提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3927
+ "panels.discover.initWhat": "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 packages/<unit>/。仓库的写权限归它的所有者。",
3876
3928
  "panels.discover.initBranch": "分支",
3877
- "panels.discover.initBranchHint": "索引与产物都发到这个分支;空仓库会新建它。",
3929
+ "panels.discover.initBranchHint": "索引和打包文件都发到这个分支;空仓库会新建它。",
3878
3930
  "panels.discover.initBranchBad": "分支名只能用字母、数字、点、下划线、斜杠或短横线",
3879
3931
  "panels.discover.initOk": "初始化",
3880
3932
  "panels.discover.initBusy": "正在初始化…",
@@ -3978,11 +4030,11 @@ var dictionaries = {
3978
4030
  "panels.market.add.doneApplied": "装好了,已经生效。",
3979
4031
  "panels.market.add.doneRestart": "装好了,重启一次才生效。",
3980
4032
  "panels.market.add.restartWhy": "为什么这一版要重启:{reason}",
3981
- "panels.market.add.restartWhy.no-hmr": "这个配置只在启动时应用改动(没开热更新)",
4033
+ "panels.market.add.restartWhy.no-hmr": "这份配置只在启动时读一次,改了得重启",
3982
4034
  "panels.market.add.restartWhy.package-moved": "某个已经装着的包换到了新的目录,或者这一下换掉了 dsh 自己提供的那份",
3983
4035
  "panels.market.add.restartWhy.host-module": "这一下动到了 dsh 自己加载的模块",
3984
- "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了插件清单之外正在跑的插件",
3985
- "panels.market.add.restartWhy.module-comparison": "dsh 没能把已加载的插件与盘上的文件对上",
4036
+ "panels.market.add.restartWhy.unmanaged-plugin": "这一下动到了没登记过、正在运行的插件",
4037
+ "panels.market.add.restartWhy.module-comparison": "dsh 没法确认正在跑的插件就是这台机器上装好的那一份",
3986
4038
  "panels.market.add.cancelled": "已取消。",
3987
4039
  "panels.market.add.failed": "没成功:{reason}",
3988
4040
  "panels.market.add.removed": "已经移除了。",
@@ -3992,10 +4044,10 @@ var dictionaries = {
3992
4044
  "panels.market.add.removedRestart": "卸掉了,重启一次才彻底生效。",
3993
4045
  "panels.market.add.remove": "移除它",
3994
4046
  "panels.market.add.problem.invalidSpec": "这个写法不认:不能是空的,也不能以横杠开头。",
3995
- "panels.market.add.problem.alreadyInstalled": "这个包已经在 profile 里了(要换版本请带上 @版本)。",
4047
+ "panels.market.add.problem.alreadyInstalled": "这个包已经在这份工作台里了(要换版本请带上 @版本)。",
3996
4048
  "panels.market.add.problem.notFound": "源上没有这个包。换个包名或版本再试。",
3997
4049
  "panels.market.add.problem.notAPackage": "这个位置没有包。选一个包含 package.json 的目录。",
3998
- "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(缺 dsh 的接线声明)。",
4050
+ "panels.market.add.problem.notABundle": "它是一个 npm 包,但不是 dsh 插件包(dsh 在里面找不到该加载什么)。",
3999
4051
  "panels.market.add.problem.network": "源连不上。检查网络后重试。",
4000
4052
  "panels.market.add.problem.unknown": "预检没通过(原因未知)。展开安装详情看原始输出,或重试。",
4001
4053
  "panels.market.add.reason.invalidSpec": "写法不认",
@@ -4003,7 +4055,7 @@ var dictionaries = {
4003
4055
  "panels.market.add.reason.notBundle": "它不是一个 dsh 插件包",
4004
4056
  "panels.market.add.reason.notRemovable": "它是安装自带的组合包,不能卸",
4005
4057
  "panels.market.add.reason.bundleInUse": "还有东西在用它,卸不掉",
4006
- "panels.market.add.reason.stopProfile": "这个配置没开热更新,得先停掉进程",
4058
+ "panels.market.add.reason.stopProfile": "这份配置改了要重启,得先停掉工作台",
4007
4059
  "panels.market.add.reason.staleApproval": "要允许的安装脚本已经变了,重新来一次",
4008
4060
  "panels.market.add.reason.operationError": "pnpm 执行出错(详情见安装输出)",
4009
4061
  "panels.market.add.reason.buildBlocked": "pnpm 拦下了安装脚本",
@@ -4026,15 +4078,15 @@ var dictionaries = {
4026
4078
  "blocker.market.open": "去模块市场",
4027
4079
  "blocker.login.title": "需要登录 {platform}",
4028
4080
  "blocker.login.titleGeneric": "需要登录",
4029
- "blocker.login.hint": "工作台用你的浏览器登录态;登录一次就行,之后不用再登。",
4081
+ "blocker.login.hint": "工作台借你浏览器里的登录状态;登录一次就行,之后不用再登。",
4030
4082
  "blocker.login.go": "去登录",
4031
4083
  "blocker.login.manual": "在终端执行该插件的登录命令(见插件的文档),按提示完成登录后重试。",
4032
4084
  "blocker.forbidden.title": "没有权限访问 {platform}",
4033
4085
  "blocker.forbidden.titleGeneric": "没有权限",
4034
4086
  "blocker.forbidden.hint": "账号已登录,但没有这个项目/仓库的权限;申请之后再试。",
4035
4087
  "blocker.forbidden.open": "打开权限页",
4036
- "blocker.timeout.hint": "无头浏览器可能没起来,重试一次通常就好。",
4037
- "blocker.exec.hint": "确认 opencli 已安装且在 PATH 里(which opencli)。",
4088
+ "blocker.timeout.hint": "后台浏览器没起来,重试一次通常就好。",
4089
+ "blocker.exec.hint": "确认 opencli 已经装好、在终端里能直接运行(which opencli)。",
4038
4090
  "blocker.unknown.title": "出了点问题",
4039
4091
  "panels.reading": "正在读取面板配置…",
4040
4092
  "panels.cardBroken": "这个模块起不来:{unit}({reason})",
@@ -4048,7 +4100,7 @@ var dictionaries = {
4048
4100
  "env.elapsed": "已等待 {seconds} 秒",
4049
4101
  "env.stepFailed.install": "装不上",
4050
4102
  "env.stepFailed.path": "装了但还找不到",
4051
- "env.stepFailed.shell": "执行通道不可用",
4103
+ "env.stepFailed.shell": "连不上命令行",
4052
4104
  "env.toolchain.ok": "正常",
4053
4105
  "env.toolchain.warn": "还没完全准备好",
4054
4106
  "env.opencli.ok": "已就绪",
@@ -4065,10 +4117,10 @@ var dictionaries = {
4065
4117
  "env.fix.title": "怎么解决",
4066
4118
  "env.fix.why": "工作台用它自己那份后台工具(与你在终端里那套分开装,互不影响),这台机器上还没装好它。",
4067
4119
  "env.fix.whyPath": "后台工具装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。",
4068
- "env.fix.whyShell": "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4120
+ "env.fix.whyShell": "工作台拿不到这台机器的命令行,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。",
4069
4121
  "env.fix.step": "在终端里运行下面这条命令,装好之后点「重试」:",
4070
4122
  "env.fix.stepPath": "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。",
4071
- "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。",
4123
+ "env.fix.stepShell": "重启一次工作台(或 dsh);如果反复出现,说明工作台还是拿不到命令行。",
4072
4124
  "env.fix.permission": "权限不够:在命令前加 sudo 重跑,或先把 npm 的全局目录配到你的用户目录。",
4073
4125
  "env.fix.network": "网络不通:检查网络或代理设置后重试。",
4074
4126
  "env.fix.details": "详细输出(排障用)",
@@ -4097,9 +4149,9 @@ var dictionaries = {
4097
4149
  "env.warm.done": "已就绪({n} 个站点)",
4098
4150
  "env.warm.short": "这次没提前连上 —— 不影响用,第一次取数会自己补",
4099
4151
  "env.unit.failed": "这个模块起不来",
4100
- "env.unit.failedHint": "它自己装配时报了错,别的模块不受影响。",
4101
- "env.unit.unchecked": "检测不了:拿不到执行通道",
4102
- "env.unit.uncheckedHint": "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。",
4152
+ "env.unit.failedHint": "它自己启动时报了错,别的模块不受影响。",
4153
+ "env.unit.unchecked": "检测不了:拿不到命令行",
4154
+ "env.unit.uncheckedHint": "不是这个模块的问题,是工作台拿不到命令行 —— 重启一次工作台再试。",
4103
4155
  "adapterSet.not-configured": "没配置适配器集合,用默认的。",
4104
4156
  "adapterSet.no-profile": "找不到 profile,没法加载适配器集合;先用默认的。",
4105
4157
  "adapterSet.malformed": "适配器集合要写包名(如 @acme/adapters-set);先用默认的。",
@@ -4142,7 +4194,7 @@ var dictionaries = {
4142
4194
  "sidebarEdition.official": "官方",
4143
4195
  "sidebarEdition.officialHint": "跟 dsh 官方一致、最稳:搜索、视图选项、显示更多、归档、添加工作区都齐,升级也不等我们适配。想省心就选它。",
4144
4196
  "sidebarEdition.custom": "自定义",
4145
- "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,两端淡出、跑马灯、工坊 DIY 新会话。项目多时更顺手。",
4197
+ "sidebarEdition.customHint": "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,名字自动滚动、两侧渐隐,工坊 DIY 新会话。项目多时更顺手。",
4146
4198
  "sidebarEdition.saving": "配置中…",
4147
4199
  "sidebarEdition.reloadRequired": "已写入。刷新页面后生效(不用重启工作台)。",
4148
4200
  "sidebarEdition.reload": "刷新页面",
@@ -4171,25 +4223,25 @@ var dictionaries = {
4171
4223
  "record.act.halt": "停",
4172
4224
  "approval.record.site": "站点",
4173
4225
  "approval.record.what": "录制功能",
4174
- "approval.record.lands": "落点",
4226
+ "approval.record.lands": "保存到",
4175
4227
  "approval.record.noUrl": "没给站点地址(这次会被当场拒)",
4176
4228
  "approval.record.oneAction": "一次操作",
4177
4229
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4178
- "approval.longTask.what": "要停的那一趟",
4179
- "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 平台侧那趟活儿的收尾看模块自己",
4230
+ "approval.longTask.what": "要停的那次任务",
4231
+ "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4180
4232
  "approval.publish.module": "模块",
4181
4233
  "approval.publish.target": "目标",
4182
4234
  "approval.publish.version": "版本",
4183
4235
  "approval.publish.author": "作者",
4184
- "approval.publish.authorMissing": "未署名(提交用本机 git 身份)",
4236
+ "approval.publish.authorMissing": "未署名",
4185
4237
  "approval.publish.registry": "源",
4186
4238
  "approval.publish.repo": "仓库",
4187
4239
  "approval.publish.branch": "分支",
4188
4240
  "approval.publish.defaultBranch": "默认分支",
4189
- "approval.publish.artifacts": "产物",
4241
+ "approval.publish.artifacts": "打包文件",
4190
4242
  "approval.publish.index": "索引",
4191
4243
  "approval.publish.commits": "提交",
4192
- "approval.publish.twoCommits": "产物 + market.json 两个 commit,一次 push",
4244
+ "approval.publish.twoCommits": "打包文件 + market.json 两次提交,一次推送",
4193
4245
  "approval.publish.reading": "读取中…",
4194
4246
  "approval.publish.changelog": "{version} 的更新日志",
4195
4247
  "approval.publish.changelogMissing": "这一版还没有更新日志({version}),发布会被拦下",
@@ -4947,7 +4999,11 @@ function sharedRows(manifests, capabilities) {
4947
4999
  id: `${bucket.kind}:${bucket.name}`,
4948
5000
  kind: bucket.kind,
4949
5001
  label: bucket.label,
4950
- usedByKeys: bucket.users.map((unit) => byId.get(unit)?.card?.titleKey ?? unit),
5002
+ usedByKeys: bucket.users.map((unit) => {
5003
+ const manifest = byId.get(unit);
5004
+ if (manifest === void 0) return unit;
5005
+ return manifest.titleKey;
5006
+ }),
4951
5007
  state,
4952
5008
  canUpdate: state === "outdated" || state === "unsatisfied",
4953
5009
  ...version === void 0 ? {} : { version }
@@ -4965,6 +5021,7 @@ var MARKET_STATE_KEY = {
4965
5021
  broken: "panels.market.broken",
4966
5022
  outdated: "panels.market.moduleOutdated",
4967
5023
  "pending-restart": "panels.market.pendingRestart",
5024
+ "pending-followup": "panels.market.pendingFollowUp",
4968
5025
  missing: "panels.market.missing",
4969
5026
  unchecked: "panels.market.unchecked",
4970
5027
  unknown: "panels.market.unchecked"
@@ -4977,6 +5034,7 @@ var MARKET_DOT = {
4977
5034
  broken: "error",
4978
5035
  outdated: "warning",
4979
5036
  "pending-restart": "warning",
5037
+ "pending-followup": "warning",
4980
5038
  missing: "idle",
4981
5039
  unchecked: "idle",
4982
5040
  unknown: "idle"
@@ -5001,35 +5059,32 @@ function refusalReasons(host, client) {
5001
5059
  if (reported.length > 0) return reported;
5002
5060
  return [...new Set(client ?? [])];
5003
5061
  }
5004
- function mergeTitles(known, manifests) {
5005
- let next = null;
5006
- for (const manifest of manifests) {
5007
- const titleKey = manifest.card?.titleKey;
5008
- if (titleKey === void 0 || known.has(manifest.id)) continue;
5009
- next ??= new Map(known);
5010
- next.set(manifest.id, titleKey);
5011
- }
5012
- return next ?? known;
5062
+ function updateBlockHintOf(block) {
5063
+ return block === "needs-workbench" ? "panels.market.updateNeedsWorkbench" : "panels.market.updateIncompatible";
5013
5064
  }
5014
5065
  function installedIdSet(installed) {
5015
5066
  if (installed === void 0) return null;
5016
5067
  return new Set(installed.map((item) => item.unit));
5017
5068
  }
5018
- function installedRows(modules, manifests, listed, known, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5019
- const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.card?.titleKey]));
5069
+ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5070
+ const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
5020
5071
  const rows = [];
5021
5072
  for (const module of modules) {
5022
5073
  if (listed.has(module.unit)) continue;
5023
5074
  const latest = module.local === true ? void 0 : module.latest;
5024
5075
  const outdated = latest !== void 0 && latest !== module.installed;
5076
+ const blocked = outdated ? module.latestBlocked : void 0;
5025
5077
  const loaded = titles.has(module.unit);
5026
5078
  const refused = refusalReasons(module.refused, module.clientRefused);
5027
5079
  const pending = !loaded && refused.length === 0;
5080
+ const titleKey = titles.get(module.unit);
5081
+ const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
5028
5082
  rows.push({
5029
5083
  id: module.unit,
5030
- titleKey: titles.get(module.unit) ?? known?.get(module.unit) ?? module.pkg,
5084
+ titleKey: titleKey ?? module.unit,
5085
+ ...remembered === void 0 ? {} : { label: remembered },
5031
5086
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5032
- ...pending ? { hint: "panels.market.moduleRestartHint" } : {},
5087
+ ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5033
5088
  ...refused.length === 0 ? {} : { note: {
5034
5089
  key: "panels.market.moduleRefused",
5035
5090
  params: {}
@@ -5037,7 +5092,7 @@ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE_
5037
5092
  ...module.local === true ? { local: true } : {},
5038
5093
  pkg: module.pkg,
5039
5094
  canInstall: false,
5040
- canUpdate: outdated,
5095
+ canUpdate: outdated && blocked === void 0,
5041
5096
  canUninstall: true,
5042
5097
  version: {
5043
5098
  installed: module.installed,
@@ -5045,7 +5100,8 @@ function installedRows(modules, manifests, listed, known, defaults = /* @__PURE_
5045
5100
  },
5046
5101
  ...outdated ? { moduleUpdate: {
5047
5102
  installed: module.installed,
5048
- latest
5103
+ latest,
5104
+ ...blocked === void 0 ? {} : { blocked }
5049
5105
  } } : {},
5050
5106
  defaultShown: defaults.has(module.unit),
5051
5107
  defaultChanged: changed[module.unit] ?? 0
@@ -5058,11 +5114,14 @@ function marketSwitchLocked(row) {
5058
5114
  return SWITCH_LOCKED.has(row.state);
5059
5115
  }
5060
5116
  function marketActions$1(row) {
5061
- if (row.workbench === true) return row.canUpdate ? ["update-workbench"] : [];
5117
+ if (row.workbench === true) {
5118
+ if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
5119
+ return row.canUpdate ? ["update-workbench"] : [];
5120
+ }
5062
5121
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5063
5122
  return [
5064
5123
  ...row.canInstall ? ["install"] : [],
5065
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : ["update-bundle"],
5124
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5066
5125
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5067
5126
  ];
5068
5127
  }
@@ -5140,7 +5199,7 @@ function liveManifests(manifests, capabilities, installed) {
5140
5199
  return manifests.filter((manifest) => !gone.has(manifest.id));
5141
5200
  }
5142
5201
  function marketHasUpdates(rows, shared = []) {
5143
- return rows.some((row) => row.state === "outdated" || row.moduleUpdate !== void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
5202
+ return rows.some((row) => row.moduleUpdate === void 0 ? row.state === "outdated" : row.moduleUpdate.blocked === void 0) || shared.some((row) => row.state === "outdated" || row.state === "unsatisfied");
5144
5203
  }
5145
5204
  function marketUpdatesOf(modules) {
5146
5205
  if (modules === null) return {};
@@ -5150,6 +5209,7 @@ function marketUpdatesOf(modules) {
5150
5209
  next[module.unit] = {
5151
5210
  installed: module.installed,
5152
5211
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5212
+ ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5153
5213
  ...local ? { local: true } : {}
5154
5214
  };
5155
5215
  }
@@ -5188,17 +5248,19 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
5188
5248
  const reAdopt = capability?.released === true && !installDeclared;
5189
5249
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5190
5250
  installed: entry.installed,
5191
- latest: entry.latest
5251
+ latest: entry.latest,
5252
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5192
5253
  };
5193
5254
  const shown = moduleUpdate === void 0 ? state : "outdated";
5255
+ const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
5194
5256
  rows.push({
5195
5257
  id: manifest.id,
5196
- titleKey: manifest.card?.titleKey ?? manifest.id,
5258
+ titleKey: manifest.titleKey,
5197
5259
  state: shown,
5198
5260
  canInstall: state !== "installed" && (install || reAdopt),
5199
5261
  canUpdate: onMachine && isOutdated(capability),
5200
5262
  canUninstall: onMachine,
5201
- ...shown === "unknown" || shown === "unchecked" ? { hint: "panels.market.uncheckedHint" } : {},
5263
+ ...hint === void 0 ? {} : { hint },
5202
5264
  ...entry === void 0 ? {} : { version: {
5203
5265
  installed: entry.installed,
5204
5266
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
@@ -5263,11 +5325,14 @@ function workbenchRow(version) {
5263
5325
  installed: version.installed,
5264
5326
  latest
5265
5327
  } : void 0;
5328
+ const stale = !local && version.running !== void 0 && version.running !== version.installed;
5329
+ const followUp = version.followUp;
5330
+ const followUpState = !stale && followUp !== void 0;
5266
5331
  return {
5267
5332
  id: WORKBENCH_ROW_ID,
5268
5333
  titleKey: WORKBENCH_TITLE_KEY,
5269
5334
  workbench: true,
5270
- state: !local && version.running !== void 0 && version.running !== version.installed ? "pending-restart" : update === void 0 ? "installed" : "outdated",
5335
+ state: stale ? "pending-restart" : followUpState ? "pending-followup" : update === void 0 ? "installed" : "outdated",
5271
5336
  canInstall: false,
5272
5337
  canUpdate: update !== void 0,
5273
5338
  canUninstall: false,
@@ -5277,6 +5342,8 @@ function workbenchRow(version) {
5277
5342
  ...latest === void 0 ? {} : { latest }
5278
5343
  },
5279
5344
  ...update === void 0 ? {} : { moduleUpdate: update },
5345
+ ...followUp === void 0 ? {} : { followUp },
5346
+ ...followUpState ? { hint: "panels.market.migrationHint" } : {},
5280
5347
  pkg: version.pkg
5281
5348
  };
5282
5349
  }
@@ -5284,6 +5351,7 @@ function workbenchRow(version) {
5284
5351
  //#region src/app/layouts/rightbar/market-hint.ts
5285
5352
  var PROBLEM_KEY = "panels.market.hasProblem";
5286
5353
  var RESTART_KEY = "panels.market.pendingRestart";
5354
+ var FOLLOWUP_KEY = "panels.market.pendingFollowUp";
5287
5355
  var UNKNOWN_KEY = "panels.market.unchecked";
5288
5356
  var UPDATES_KEY = "panels.market.hasNew";
5289
5357
  function isProblem(row) {
@@ -5314,12 +5382,14 @@ function marketHintOf(input) {
5314
5382
  ];
5315
5383
  const problem = rows.some(isProblem);
5316
5384
  const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5385
+ const followUp = rows.some((row) => row.state === "pending-followup");
5317
5386
  const rosterRead = input.modules !== null;
5318
5387
  const unknown = rows.some((row) => isUnknown(row, rosterRead));
5319
5388
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5320
5389
  const more = [];
5321
5390
  if (problem) {
5322
5391
  if (restart) more.push(RESTART_KEY);
5392
+ if (followUp) more.push(FOLLOWUP_KEY);
5323
5393
  if (unknown) more.push(UNKNOWN_KEY);
5324
5394
  if (updates) more.push(UPDATES_KEY);
5325
5395
  return {
@@ -5329,6 +5399,7 @@ function marketHintOf(input) {
5329
5399
  };
5330
5400
  }
5331
5401
  if (restart) {
5402
+ if (followUp) more.push(FOLLOWUP_KEY);
5332
5403
  if (unknown) more.push(UNKNOWN_KEY);
5333
5404
  if (updates) more.push(UPDATES_KEY);
5334
5405
  return {
@@ -5337,6 +5408,15 @@ function marketHintOf(input) {
5337
5408
  ...more.length === 0 ? {} : { moreKeys: more }
5338
5409
  };
5339
5410
  }
5411
+ if (followUp) {
5412
+ if (unknown) more.push(UNKNOWN_KEY);
5413
+ if (updates) more.push(UPDATES_KEY);
5414
+ return {
5415
+ labelKey: FOLLOWUP_KEY,
5416
+ tone: "warning",
5417
+ ...more.length === 0 ? {} : { moreKeys: more }
5418
+ };
5419
+ }
5340
5420
  if (unknown) {
5341
5421
  if (updates) more.push(UPDATES_KEY);
5342
5422
  return {
@@ -5632,114 +5712,121 @@ function useMarketTransient(input) {
5632
5712
  };
5633
5713
  }
5634
5714
  var MarketPage_module_default = {
5635
- marketList: "_marketList_9dzu9_1",
5636
- marketRow: "_marketRow_9dzu9_10",
5637
- marketIcon: "_marketIcon_9dzu9_20",
5638
- marketMain: "_marketMain_9dzu9_32",
5639
- marketName: "_marketName_9dzu9_39",
5640
- marketStatus: "_marketStatus_9dzu9_48",
5641
- marketStateText: "_marketStateText_9dzu9_58",
5642
- marketSep: "_marketSep_9dzu9_62",
5643
- marketReason: "_marketReason_9dzu9_66",
5644
- marketVersion: "_marketVersion_9dzu9_72",
5645
- marketLocalTag: "_marketLocalTag_9dzu9_94",
5646
- marketEnd: "_marketEnd_9dzu9_105",
5647
- marketSwitchSeat: "_marketSwitchSeat_9dzu9_112",
5648
- marketActions: "_marketActions_9dzu9_125",
5649
- marketUpdateAction: "_marketUpdateAction_9dzu9_131",
5650
- marketSelfDivider: "_marketSelfDivider_9dzu9_137",
5651
- marketSection: "_marketSection_9dzu9_143",
5652
- marketSectionHead: "_marketSectionHead_9dzu9_150",
5653
- marketSectionIcon: "_marketSectionIcon_9dzu9_156",
5654
- marketSectionTitle: "_marketSectionTitle_9dzu9_163",
5655
- marketSectionCount: "_marketSectionCount_9dzu9_169",
5656
- marketSectionQuiet: "_marketSectionQuiet_9dzu9_175",
5657
- marketProgress: "_marketProgress_9dzu9_188",
5658
- marketNote: "_marketNote_9dzu9_198",
5659
- marketFailure: "_marketFailure_9dzu9_205",
5660
- marketEmpty: "_marketEmpty_9dzu9_212",
5661
- marketPage: "_marketPage_9dzu9_217",
5662
- marketPageHead: "_marketPageHead_9dzu9_235",
5663
- marketPageTitle: "_marketPageTitle_9dzu9_243",
5664
- marketPageIntro: "_marketPageIntro_9dzu9_248",
5665
- marketPageTools: "_marketPageTools_9dzu9_254",
5666
- marketPanel: "_marketPanel_9dzu9_263",
5667
- marketTabs: "_marketTabs_9dzu9_273",
5668
- marketTabList: "_marketTabList_9dzu9_278",
5669
- marketIconButton: "_marketIconButton_9dzu9_283",
5670
- marketIconWrap: "_marketIconWrap_9dzu9_308",
5671
- marketIconButtonSpinning: "_marketIconButtonSpinning_9dzu9_312",
5672
- "wb-spin": "_wb-spin_9dzu9_1",
5673
- marketAddButton: "_marketAddButton_9dzu9_316",
5674
- marketEmptyTitle: "_marketEmptyTitle_9dzu9_333",
5675
- discoverPage: "_discoverPage_9dzu9_347",
5676
- discoverBar: "_discoverBar_9dzu9_354",
5677
- discoverTools: "_discoverTools_9dzu9_361",
5678
- discoverMarket: "_discoverMarket_9dzu9_367",
5679
- discoverMarketButton: "_discoverMarketButton_9dzu9_372",
5680
- discoverMarketName: "_discoverMarketName_9dzu9_379",
5681
- discoverLabels: "_discoverLabels_9dzu9_385",
5682
- discoverSort: "_discoverSort_9dzu9_390",
5683
- discoverRefresh: "_discoverRefresh_9dzu9_395",
5684
- discoverSearch: "_discoverSearch_9dzu9_399",
5685
- discoverChips: "_discoverChips_9dzu9_440",
5686
- discoverList: "_discoverList_9dzu9_447",
5687
- discoverCard: "_discoverCard_9dzu9_456",
5688
- discoverArtwork: "_discoverArtwork_9dzu9_470",
5689
- discoverArtworkImage: "_discoverArtworkImage_9dzu9_482",
5690
- discoverMain: "_discoverMain_9dzu9_486",
5691
- discoverTitleRow: "_discoverTitleRow_9dzu9_494",
5692
- discoverCardOpen: "_discoverCardOpen_9dzu9_502",
5693
- discoverStrong: "_discoverStrong_9dzu9_533",
5694
- discoverDesc: "_discoverDesc_9dzu9_539",
5695
- discoverMeta: "_discoverMeta_9dzu9_548",
5696
- discoverMuted: "_discoverMuted_9dzu9_555",
5697
- discoverEnd: "_discoverEnd_9dzu9_561",
5698
- discoverBlocked: "_discoverBlocked_9dzu9_570",
5699
- discoverEmpty: "_discoverEmpty_9dzu9_575",
5700
- discoverEmptyTitle: "_discoverEmptyTitle_9dzu9_584",
5701
- discoverDetail: "_discoverDetail_9dzu9_594",
5702
- discoverCrumb: "_discoverCrumb_9dzu9_600",
5703
- discoverCrumbIcon: "_discoverCrumbIcon_9dzu9_623",
5704
- discoverDetailHead: "_discoverDetailHead_9dzu9_627",
5705
- discoverDetailTitle: "_discoverDetailTitle_9dzu9_633",
5706
- discoverDetailText: "_discoverDetailText_9dzu9_639",
5707
- discoverDetailPanel: "_discoverDetailPanel_9dzu9_646",
5708
- discoverDetailTabs: "_discoverDetailTabs_9dzu9_653",
5709
- discoverDetailTabList: "_discoverDetailTabList_9dzu9_658",
5710
- discoverDocBody: "_discoverDocBody_9dzu9_663",
5711
- discoverDocNotice: "_discoverDocNotice_9dzu9_668",
5712
- discoverSection: "_discoverSection_9dzu9_674",
5713
- discoverSectionTitle: "_discoverSectionTitle_9dzu9_681",
5714
- discoverFacts: "_discoverFacts_9dzu9_687",
5715
- discoverFactRow: "_discoverFactRow_9dzu9_692",
5716
- discoverFactKind: "_discoverFactKind_9dzu9_702",
5717
- discoverFactValue: "_discoverFactValue_9dzu9_708",
5718
- discoverCode: "_discoverCode_9dzu9_716",
5719
- discoverTags: "_discoverTags_9dzu9_725",
5720
- discoverLink: "_discoverLink_9dzu9_732",
5721
- discoverVersions: "_discoverVersions_9dzu9_742",
5722
- discoverVersionRow: "_discoverVersionRow_9dzu9_750",
5723
- discoverVersionName: "_discoverVersionName_9dzu9_758",
5724
- discoverError: "_discoverError_9dzu9_763",
5725
- discoverFailure: "_discoverFailure_9dzu9_772",
5726
- discoverNotice: "_discoverNotice_9dzu9_778",
5727
- discoverMore: "_discoverMore_9dzu9_796",
5728
- discoverDialog: "_discoverDialog_9dzu9_800",
5729
- discoverDialogBody: "_discoverDialogBody_9dzu9_804",
5730
- discoverSourceList: "_discoverSourceList_9dzu9_810",
5731
- discoverSourceRow: "_discoverSourceRow_9dzu9_818",
5732
- discoverSourceError: "_discoverSourceError_9dzu9_826",
5733
- discoverSourceForm: "_discoverSourceForm_9dzu9_832",
5734
- discoverGrow: "_discoverGrow_9dzu9_838",
5735
- discoverField: "_discoverField_9dzu9_843",
5736
- discoverFieldLabel: "_discoverFieldLabel_9dzu9_849",
5737
- discoverConfirmHead: "_discoverConfirmHead_9dzu9_854",
5738
- discoverSkeletonFill: "_discoverSkeletonFill_9dzu9_860",
5739
- "wb-skeleton": "_wb-skeleton_9dzu9_1",
5740
- discoverSkeletonBar: "_discoverSkeletonBar_9dzu9_869",
5741
- discoverSkeletonTitle: "_discoverSkeletonTitle_9dzu9_876",
5742
- discoverSkeletonDesc: "_discoverSkeletonDesc_9dzu9_880"
5715
+ marketList: "_marketList_1idrk_1",
5716
+ marketRow: "_marketRow_1idrk_10",
5717
+ marketIcon: "_marketIcon_1idrk_20",
5718
+ marketMain: "_marketMain_1idrk_32",
5719
+ marketName: "_marketName_1idrk_39",
5720
+ marketStatus: "_marketStatus_1idrk_48",
5721
+ marketStateText: "_marketStateText_1idrk_58",
5722
+ marketSep: "_marketSep_1idrk_62",
5723
+ marketReason: "_marketReason_1idrk_66",
5724
+ marketVersion: "_marketVersion_1idrk_72",
5725
+ marketLocalTag: "_marketLocalTag_1idrk_94",
5726
+ marketEnd: "_marketEnd_1idrk_105",
5727
+ marketSwitchSeat: "_marketSwitchSeat_1idrk_112",
5728
+ marketActions: "_marketActions_1idrk_125",
5729
+ marketUpdateAction: "_marketUpdateAction_1idrk_131",
5730
+ marketSelfDivider: "_marketSelfDivider_1idrk_137",
5731
+ marketSection: "_marketSection_1idrk_143",
5732
+ marketSectionHead: "_marketSectionHead_1idrk_150",
5733
+ marketSectionIcon: "_marketSectionIcon_1idrk_156",
5734
+ marketSectionTitle: "_marketSectionTitle_1idrk_163",
5735
+ marketSectionCount: "_marketSectionCount_1idrk_169",
5736
+ marketSectionQuiet: "_marketSectionQuiet_1idrk_175",
5737
+ marketProgress: "_marketProgress_1idrk_188",
5738
+ marketNote: "_marketNote_1idrk_198",
5739
+ marketFailure: "_marketFailure_1idrk_205",
5740
+ marketEmpty: "_marketEmpty_1idrk_212",
5741
+ marketPage: "_marketPage_1idrk_217",
5742
+ marketPageHead: "_marketPageHead_1idrk_235",
5743
+ marketPageTitle: "_marketPageTitle_1idrk_243",
5744
+ marketPageIntro: "_marketPageIntro_1idrk_248",
5745
+ marketPageTools: "_marketPageTools_1idrk_254",
5746
+ marketPanel: "_marketPanel_1idrk_263",
5747
+ marketTabs: "_marketTabs_1idrk_273",
5748
+ marketTabList: "_marketTabList_1idrk_278",
5749
+ marketIconButton: "_marketIconButton_1idrk_283",
5750
+ marketIconWrap: "_marketIconWrap_1idrk_308",
5751
+ marketIconButtonSpinning: "_marketIconButtonSpinning_1idrk_312",
5752
+ "wb-spin": "_wb-spin_1idrk_1",
5753
+ marketAddButton: "_marketAddButton_1idrk_316",
5754
+ marketEmptyTitle: "_marketEmptyTitle_1idrk_333",
5755
+ discoverPage: "_discoverPage_1idrk_347",
5756
+ discoverBar: "_discoverBar_1idrk_354",
5757
+ discoverTools: "_discoverTools_1idrk_361",
5758
+ discoverMarket: "_discoverMarket_1idrk_367",
5759
+ discoverMarketButton: "_discoverMarketButton_1idrk_372",
5760
+ discoverMarketName: "_discoverMarketName_1idrk_379",
5761
+ discoverLabels: "_discoverLabels_1idrk_385",
5762
+ discoverSort: "_discoverSort_1idrk_390",
5763
+ discoverRefresh: "_discoverRefresh_1idrk_395",
5764
+ discoverSearch: "_discoverSearch_1idrk_399",
5765
+ discoverSearchField: "_discoverSearchField_1idrk_407",
5766
+ discoverSearchFieldFilled: "_discoverSearchFieldFilled_1idrk_412",
5767
+ discoverSearchClear: "_discoverSearchClear_1idrk_421",
5768
+ discoverChips: "_discoverChips_1idrk_472",
5769
+ discoverList: "_discoverList_1idrk_479",
5770
+ discoverCard: "_discoverCard_1idrk_488",
5771
+ discoverArtwork: "_discoverArtwork_1idrk_502",
5772
+ discoverArtworkImage: "_discoverArtworkImage_1idrk_514",
5773
+ discoverMain: "_discoverMain_1idrk_518",
5774
+ discoverTitleRow: "_discoverTitleRow_1idrk_526",
5775
+ discoverCardOpen: "_discoverCardOpen_1idrk_534",
5776
+ discoverStrong: "_discoverStrong_1idrk_565",
5777
+ discoverDesc: "_discoverDesc_1idrk_571",
5778
+ discoverMeta: "_discoverMeta_1idrk_580",
5779
+ discoverMuted: "_discoverMuted_1idrk_587",
5780
+ discoverEnd: "_discoverEnd_1idrk_593",
5781
+ discoverBlocked: "_discoverBlocked_1idrk_602",
5782
+ discoverEmpty: "_discoverEmpty_1idrk_607",
5783
+ discoverEmptyTitle: "_discoverEmptyTitle_1idrk_616",
5784
+ discoverDetail: "_discoverDetail_1idrk_626",
5785
+ discoverCrumb: "_discoverCrumb_1idrk_632",
5786
+ discoverCrumbIcon: "_discoverCrumbIcon_1idrk_655",
5787
+ discoverDetailHead: "_discoverDetailHead_1idrk_659",
5788
+ discoverDetailTitle: "_discoverDetailTitle_1idrk_665",
5789
+ discoverDetailText: "_discoverDetailText_1idrk_671",
5790
+ discoverDetailPanel: "_discoverDetailPanel_1idrk_678",
5791
+ discoverDetailTabs: "_discoverDetailTabs_1idrk_685",
5792
+ discoverDetailTabList: "_discoverDetailTabList_1idrk_690",
5793
+ discoverDocBody: "_discoverDocBody_1idrk_695",
5794
+ discoverDocNotice: "_discoverDocNotice_1idrk_700",
5795
+ discoverSection: "_discoverSection_1idrk_706",
5796
+ discoverSectionTitle: "_discoverSectionTitle_1idrk_713",
5797
+ discoverFacts: "_discoverFacts_1idrk_719",
5798
+ discoverFactRow: "_discoverFactRow_1idrk_724",
5799
+ discoverFactKind: "_discoverFactKind_1idrk_734",
5800
+ discoverFactValue: "_discoverFactValue_1idrk_740",
5801
+ discoverCode: "_discoverCode_1idrk_748",
5802
+ discoverTags: "_discoverTags_1idrk_757",
5803
+ discoverLink: "_discoverLink_1idrk_764",
5804
+ discoverVersions: "_discoverVersions_1idrk_774",
5805
+ discoverVersionRow: "_discoverVersionRow_1idrk_782",
5806
+ discoverVersionName: "_discoverVersionName_1idrk_790",
5807
+ discoverError: "_discoverError_1idrk_795",
5808
+ discoverFailure: "_discoverFailure_1idrk_804",
5809
+ discoverLoading: "_discoverLoading_1idrk_810",
5810
+ discoverNotice: "_discoverNotice_1idrk_819",
5811
+ discoverMore: "_discoverMore_1idrk_837",
5812
+ discoverDialog: "_discoverDialog_1idrk_841",
5813
+ discoverDialogBody: "_discoverDialogBody_1idrk_845",
5814
+ discoverSourceList: "_discoverSourceList_1idrk_851",
5815
+ discoverSourceRow: "_discoverSourceRow_1idrk_859",
5816
+ discoverSourceCurrent: "_discoverSourceCurrent_1idrk_868",
5817
+ discoverSourceLoading: "_discoverSourceLoading_1idrk_875",
5818
+ discoverSourceHint: "_discoverSourceHint_1idrk_885",
5819
+ discoverSourceError: "_discoverSourceError_1idrk_899",
5820
+ discoverSourceForm: "_discoverSourceForm_1idrk_905",
5821
+ discoverGrow: "_discoverGrow_1idrk_911",
5822
+ discoverField: "_discoverField_1idrk_916",
5823
+ discoverFieldLabel: "_discoverFieldLabel_1idrk_922",
5824
+ discoverConfirmHead: "_discoverConfirmHead_1idrk_927",
5825
+ discoverSkeletonFill: "_discoverSkeletonFill_1idrk_933",
5826
+ "wb-skeleton": "_wb-skeleton_1idrk_1",
5827
+ discoverSkeletonBar: "_discoverSkeletonBar_1idrk_942",
5828
+ discoverSkeletonTitle: "_discoverSkeletonTitle_1idrk_949",
5829
+ discoverSkeletonDesc: "_discoverSkeletonDesc_1idrk_953"
5743
5830
  };
5744
5831
  //#endregion
5745
5832
  //#region src/app/layouts/market/discover-states.tsx
@@ -5763,6 +5850,13 @@ function DiscoverSkeleton({ label }) {
5763
5850
  function DiscoverEmptyText({ text }) {
5764
5851
  return /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.discoverMuted }, text);
5765
5852
  }
5853
+ function DiscoverLoading({ label }) {
5854
+ return /* @__PURE__ */ (0, react.createElement)("p", {
5855
+ className: MarketPage_module_default.discoverLoading,
5856
+ role: "status",
5857
+ "aria-live": "polite"
5858
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), label);
5859
+ }
5766
5860
  function DiscoverFailure({ t, text, onRetry }) {
5767
5861
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverFailure }, /* @__PURE__ */ (0, react.createElement)("p", {
5768
5862
  className: MarketPage_module_default.discoverError,
@@ -5831,6 +5925,18 @@ function sharedRowKind(row) {
5831
5925
  return row.kind === "extension" ? "plugin" : "lib";
5832
5926
  }
5833
5927
  //#endregion
5928
+ //#region src/app/layouts/rightbar/market-names.ts
5929
+ function namesOf(t, modules, titleOf) {
5930
+ const shown = /* @__PURE__ */ new Map();
5931
+ for (const module of modules) {
5932
+ const key = unitTitleKey(module.unit);
5933
+ const live = t(key);
5934
+ const name = live !== key && live !== "" ? live : titleOf(module.title);
5935
+ if (name !== "") shown.set(module.unit, name);
5936
+ }
5937
+ return shown;
5938
+ }
5939
+ //#endregion
5834
5940
  //#region src/app/layouts/rightbar/market-view-text.ts
5835
5941
  var PROGRESS_KEY = {
5836
5942
  install: "panels.market.installing",
@@ -5841,7 +5947,9 @@ var PROGRESS_KEY = {
5841
5947
  "update-dependency": "panels.market.updating",
5842
5948
  "update-plugin": "panels.market.updating",
5843
5949
  "uninstall-plugin": "panels.market.uninstalling",
5844
- "update-workbench": "panels.market.updating"
5950
+ "update-workbench": "panels.market.updating",
5951
+ "migrate-workbench": "panels.market.migrating",
5952
+ "dismiss-followup": "panels.market.dismissing"
5845
5953
  };
5846
5954
  var ACTION_LABEL_KEY = {
5847
5955
  install: "panels.market.install",
@@ -5852,7 +5960,9 @@ var ACTION_LABEL_KEY = {
5852
5960
  "update-dependency": "panels.market.update",
5853
5961
  "update-plugin": "panels.market.update",
5854
5962
  "uninstall-plugin": "panels.market.uninstall",
5855
- "update-workbench": "panels.market.update"
5963
+ "update-workbench": "panels.market.update",
5964
+ "migrate-workbench": "panels.market.migrateAction",
5965
+ "dismiss-followup": "panels.market.dismissFollowUp"
5856
5966
  };
5857
5967
  function holdOf(pending, application) {
5858
5968
  if (pending === null || pending.row === void 0) return void 0;
@@ -5900,12 +6010,9 @@ function withPinnedRow(rows, pinned) {
5900
6010
  function marketFootVisible(shown, installed) {
5901
6011
  return shown.length > 0 || installed.length > 0;
5902
6012
  }
5903
- function useMarketTitles(manifests, mocked) {
5904
- const [titles, setTitles] = (0, react.useState)(/* @__PURE__ */ new Map());
5905
- (0, react.useEffect)(() => {
5906
- if (!mocked) setTitles((known) => mergeTitles(known, manifests));
5907
- }, [manifests, mocked]);
5908
- return titles;
6013
+ var NO_NAMES = /* @__PURE__ */ new Map();
6014
+ function marketNamesOf(t, modules, titleOf, mocked) {
6015
+ return mocked ? NO_NAMES : namesOf(t, modules, titleOf);
5909
6016
  }
5910
6017
  function useHeldRow(pending, backInRoster) {
5911
6018
  const [held, setHeld] = (0, react.useState)(void 0);
@@ -5941,10 +6048,11 @@ function pendingRowOf(input) {
5941
6048
  const { pending, removing } = input;
5942
6049
  if (removing === null || pending === null) return void 0;
5943
6050
  if (input.rows.some((row) => row.id === removing)) return void 0;
6051
+ const name = pending.label ?? input.names.get(removing);
5944
6052
  return {
5945
6053
  id: removing,
5946
- titleKey: pending.titleKey ?? input.titles.get(removing) ?? removing,
5947
- ...pending.label === void 0 ? {} : { label: pending.label },
6054
+ titleKey: pending.titleKey ?? removing,
6055
+ ...name === void 0 ? {} : { label: name },
5948
6056
  state: "installed",
5949
6057
  canInstall: false,
5950
6058
  canUpdate: false,
@@ -6061,49 +6169,120 @@ var updateActions = [
6061
6169
  "update-plugin",
6062
6170
  "update-workbench"
6063
6171
  ];
6172
+ function MigrationConfirm({ t, onConfirm, onCancel }) {
6173
+ const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6174
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
6175
+ open: true,
6176
+ title: t("panels.market.migrateConfirmTitle"),
6177
+ description: t("panels.market.migrateConfirmDetail"),
6178
+ acknowledgeLabel: t("panels.market.migrateConfirmAck"),
6179
+ cancelLabel: t("panels.market.confirmNo"),
6180
+ closeLabel: t("panels.market.confirmNo"),
6181
+ confirmLabel: t("panels.market.migrateConfirmYes"),
6182
+ acknowledged,
6183
+ onAcknowledgedChange: setAcknowledged,
6184
+ onCancel,
6185
+ onConfirm
6186
+ });
6187
+ }
6188
+ function DismissFollowUpConfirm({ t, onConfirm, onCancel }) {
6189
+ const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6190
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
6191
+ open: true,
6192
+ title: t("panels.market.dismissFollowUpTitle"),
6193
+ description: t("panels.market.dismissFollowUpDetail"),
6194
+ acknowledgeLabel: t("panels.market.dismissFollowUpAck"),
6195
+ cancelLabel: t("panels.market.confirmNo"),
6196
+ closeLabel: t("panels.market.confirmNo"),
6197
+ confirmLabel: t("panels.market.dismissFollowUpYes"),
6198
+ acknowledged,
6199
+ onAcknowledgedChange: setAcknowledged,
6200
+ onCancel,
6201
+ onConfirm
6202
+ });
6203
+ }
6204
+ function MarketLineDialogs({ t, migrationOpen, dismissOpen, onMigrationCancel, onMigrationConfirm, onDismissCancel, onDismissConfirm }) {
6205
+ return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, migrationOpen ? /* @__PURE__ */ (0, react.createElement)(MigrationConfirm, {
6206
+ t,
6207
+ onCancel: onMigrationCancel,
6208
+ onConfirm: onMigrationConfirm
6209
+ }) : null, dismissOpen ? /* @__PURE__ */ (0, react.createElement)(DismissFollowUpConfirm, {
6210
+ t,
6211
+ onCancel: onDismissCancel,
6212
+ onConfirm: onDismissConfirm
6213
+ }) : null);
6214
+ }
6215
+ function MarketLineStatus({ t, row, quiet }) {
6216
+ const stateText = t(MARKET_STATE_KEY[row.state]);
6217
+ const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6218
+ if (quiet) return null;
6219
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStatus }, row.state === "checking" ? /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }) : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6220
+ state: MARKET_DOT[row.state],
6221
+ size: 9
6222
+ }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6223
+ className: MarketPage_module_default.marketSep,
6224
+ "aria-hidden": "true"
6225
+ }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6226
+ className: MarketPage_module_default.marketSep,
6227
+ "aria-hidden": "true"
6228
+ }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)));
6229
+ }
6064
6230
  function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6065
6231
  const running = pending !== null && pending.id === row.id ? pending : null;
6066
6232
  const locked = pending !== null;
6233
+ const [migrationOpen, setMigrationOpen] = (0, react.useState)(false);
6234
+ const [dismissOpen, setDismissOpen] = (0, react.useState)(false);
6067
6235
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6068
6236
  const actions = marketActions$1(row);
6069
6237
  const switchLocked = marketSwitchLocked(row);
6070
- const stateText = t(MARKET_STATE_KEY[row.state]);
6071
- const noteText = row.note === void 0 ? null : t(row.note.key, row.note.params);
6072
6238
  return /* @__PURE__ */ (0, react.createElement)("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ (0, react.createElement)("span", {
6073
6239
  className: MarketPage_module_default.marketIcon,
6074
6240
  "aria-hidden": "true"
6075
6241
  }, packageIcon(marketRowKind(row))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketName }, marketRowTitle(row, t), row.versionLabel === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketVersion }, row.versionLabel), row.version === void 0 || row.versionLabel !== void 0 ? null : /* @__PURE__ */ (0, react.createElement)("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", {
6076
6242
  from: row.version.installed,
6077
6243
  to: row.version.latest
6078
- }) : row.version.installed ?? row.version.latest ?? ""), row.local === true ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketLocalTag }, t("panels.market.localMark")) : null), quiet ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStatus }, row.state === "checking" ? /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }) : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6079
- state: MARKET_DOT[row.state],
6080
- size: 9
6081
- }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketStateText }, stateText), row.hint === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6082
- className: MarketPage_module_default.marketSep,
6083
- "aria-hidden": "true"
6084
- }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, t(row.hint))), noteText === null ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("span", {
6085
- className: MarketPage_module_default.marketSep,
6086
- "aria-hidden": "true"
6087
- }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
6244
+ }) : row.version.installed ?? row.version.latest ?? ""), row.local === true ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketLocalTag }, t("panels.market.localMark")) : null), /* @__PURE__ */ (0, react.createElement)(MarketLineStatus, {
6245
+ t,
6246
+ row,
6247
+ quiet
6248
+ })), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => {
6088
6249
  const danger = dangerActions.includes(action);
6089
6250
  const update = updateActions.includes(action);
6090
6251
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6091
6252
  key: action,
6092
6253
  type: "button",
6093
6254
  size: "sm",
6094
- variant: action === "install" ? "primary" : "outline",
6255
+ variant: action === "install" || action === "migrate-workbench" ? "primary" : "outline",
6095
6256
  className: danger ? "wb-dangerAction" : update ? MarketPage_module_default.marketUpdateAction : void 0,
6096
6257
  icon: danger ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineRegular, { size: 13 }) : void 0,
6097
6258
  "aria-label": danger ? t("panels.market.uninstallLabel", { name: marketRowTitle(row, t) }) : void 0,
6098
6259
  disabled: locked,
6099
- onClick: () => onAct(action)
6260
+ onClick: () => {
6261
+ if (action === "migrate-workbench") setMigrationOpen(true);
6262
+ else if (action === "dismiss-followup") setDismissOpen(true);
6263
+ else onAct(action);
6264
+ }
6100
6265
  }, t(ACTION_LABEL_KEY[action]));
6101
6266
  })), row.defaultShown === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(Tip, { label: t(switchLocked ? "panels.market.defaultLocked" : "panels.market.defaultHint") }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSwitchSeat }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Switch, {
6102
6267
  checked: row.defaultShown,
6103
6268
  disabled: boardBusy === true || locked || switchLocked,
6104
6269
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6105
6270
  onChange: (next) => onDefault?.(next)
6106
- })))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure));
6271
+ })))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
6272
+ t,
6273
+ migrationOpen,
6274
+ dismissOpen,
6275
+ onMigrationCancel: () => setMigrationOpen(false),
6276
+ onMigrationConfirm: () => {
6277
+ setMigrationOpen(false);
6278
+ onAct("migrate-workbench");
6279
+ },
6280
+ onDismissCancel: () => setDismissOpen(false),
6281
+ onDismissConfirm: () => {
6282
+ setDismissOpen(false);
6283
+ onAct("dismiss-followup");
6284
+ }
6285
+ }));
6107
6286
  }
6108
6287
  function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6109
6288
  if (rows.length === 0) return null;
@@ -6418,10 +6597,13 @@ function marketActOf(options) {
6418
6597
  seats.setConfirming(null);
6419
6598
  seats.setFailed(null);
6420
6599
  seats.setNotice(null);
6421
- const outcome = await send(action === "update-dependency" ? {
6600
+ const outcome = await send(action === "dismiss-followup" ? {
6601
+ action,
6602
+ id: row?.followUp?.id ?? ""
6603
+ } : action === "update-dependency" ? {
6422
6604
  action,
6423
6605
  id
6424
- } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" ? {
6606
+ } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench" ? {
6425
6607
  action,
6426
6608
  name: row?.pkg ?? ""
6427
6609
  } : {
@@ -6439,6 +6621,21 @@ function marketActOf(options) {
6439
6621
  return;
6440
6622
  }
6441
6623
  const value = outcome.value;
6624
+ if (action === "dismiss-followup") {
6625
+ onChanged({ force: true });
6626
+ seats.setPending(null);
6627
+ seats.setHeld(void 0);
6628
+ seats.setNotice(t("panels.market.dismissed"));
6629
+ return;
6630
+ }
6631
+ if (action === "migrate-workbench") {
6632
+ const added = recordOf(value)?.["added"];
6633
+ onChanged({ force: true });
6634
+ seats.setPending(null);
6635
+ seats.setHeld(void 0);
6636
+ seats.setNotice(t("panels.market.migrateDone", { added: typeof added === "number" ? String(added) : "0" }));
6637
+ return;
6638
+ }
6442
6639
  const change = changeOf(value);
6443
6640
  const failure = updateVerdictText(updateVerdictOf({
6444
6641
  action,
@@ -6493,9 +6690,6 @@ var CONFIRM_UNINSTALL = [
6493
6690
  "remove-bundle",
6494
6691
  "uninstall-plugin"
6495
6692
  ];
6496
- function marketMigrationNotice(t, update) {
6497
- return update?.migration === "needed" ? t("panels.market.selfUpdateNeedsMigrate") : null;
6498
- }
6499
6693
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6500
6694
  const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6501
6695
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -6565,8 +6759,8 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
6565
6759
  }));
6566
6760
  }
6567
6761
  function useMarketScene(input) {
6568
- const { manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6569
- const titles = useMarketTitles(manifests, mock !== void 0);
6762
+ const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
6763
+ const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
6570
6764
  const catalog = mock?.manifests ?? manifests;
6571
6765
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
6572
6766
  const effective = mock === void 0 ? capabilities : mock.capabilities;
@@ -6580,13 +6774,13 @@ function useMarketScene(input) {
6580
6774
  const pinned = pinnedRowOf(pending, steady.held);
6581
6775
  const busyId = heldIdOf(pending, steady.held);
6582
6776
  return {
6583
- titles,
6777
+ names,
6584
6778
  catalog,
6585
6779
  effective,
6586
6780
  updateMap,
6587
6781
  rows,
6588
6782
  shared,
6589
- installedList: installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === busyId) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), titles, byDefault, changed),
6783
+ installedList: installedRows((mock?.installed ?? installed ?? []).filter((module) => module.unit !== pinned?.id && (!(settling?.has(module.unit) ?? false) || module.unit === busyId) && module.unit !== removing), catalog, new Set(rows.map((row) => row.id)), mock === void 0 ? names : void 0, byDefault, changed),
6590
6784
  byDefault,
6591
6785
  steady,
6592
6786
  pinned,
@@ -6594,12 +6788,14 @@ function useMarketScene(input) {
6594
6788
  busyId
6595
6789
  };
6596
6790
  }
6597
- function MarketView({ t, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6791
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
6598
6792
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
6599
6793
  mock,
6600
6794
  onPending
6601
6795
  });
6602
- const { titles, effective, updateMap, rows, shared, installedList, byDefault, steady, pinned, removing, busyId } = useMarketScene({
6796
+ const { names, effective, updateMap, rows, shared, installedList, byDefault, steady, pinned, removing, busyId } = useMarketScene({
6797
+ t,
6798
+ titleOf,
6603
6799
  manifests,
6604
6800
  installable,
6605
6801
  capabilities,
@@ -6644,7 +6840,7 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6644
6840
  pending,
6645
6841
  removing,
6646
6842
  rows,
6647
- titles
6843
+ names
6648
6844
  });
6649
6845
  const self = workbenchRow(mock === void 0 ? workbench : mock.workbench);
6650
6846
  const shown = withPinnedRow(pendingRow === void 0 ? rows : [...rows, pendingRow], pinned);
@@ -6672,21 +6868,18 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6672
6868
  send: (body) => provision.send(body),
6673
6869
  onChanged
6674
6870
  });
6675
- const landed = pendingLanded(pending, updateMap, effective, workbench?.installed, shared, pluginSource === null ? null : pluginList, {
6676
- units: installed === void 0 ? null : new Set(installed.map((module) => module.unit)),
6677
- plugins: pluginSource === null ? null : new Set(pluginList.map((row) => row.id))
6678
- });
6679
- const effectiveSelfUpdate = mock?.selfUpdate ?? selfUpdate;
6680
6871
  useSettleHold({
6681
6872
  pending,
6682
- landed,
6873
+ landed: pendingLanded(pending, updateMap, effective, workbench?.installed, shared, pluginSource === null ? null : pluginList, {
6874
+ units: installed === void 0 ? null : new Set(installed.map((module) => module.unit)),
6875
+ plugins: pluginSource === null ? null : new Set(pluginList.map((row) => row.id))
6876
+ }),
6683
6877
  t,
6684
6878
  onChanged,
6685
- selfUpdate: effectiveSelfUpdate,
6879
+ selfUpdate: mock?.selfUpdate ?? selfUpdate,
6686
6880
  setPending,
6687
6881
  setFailed
6688
6882
  });
6689
- const migrationNotice = marketMigrationNotice(t, effectiveSelfUpdate);
6690
6883
  const settled = marketSettled(freshness, installedRead);
6691
6884
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
6692
6885
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ (0, react.createElement)(MarketChecking, { t });
@@ -6700,7 +6893,7 @@ function MarketView({ t, manifests, installable, capabilities, freshness, onChan
6700
6893
  shared,
6701
6894
  pending,
6702
6895
  failed,
6703
- notice: notice ?? migrationNotice,
6896
+ notice,
6704
6897
  act,
6705
6898
  onConfirming: setConfirming,
6706
6899
  setDefault,
@@ -6916,7 +7109,7 @@ function sourceFromUrl(raw) {
6916
7109
  if (url === "" || url.includes("#") || hasCredentials(url)) return { ok: false };
6917
7110
  if (HTTP.test(url)) {
6918
7111
  const asGit = REPO_FILE.test(url);
6919
- const label = hostOf(url);
7112
+ const label = asGit ? sourceSuffix(url) || hostOf(url) : hostOf(url);
6920
7113
  if (label === "") return { ok: false };
6921
7114
  return {
6922
7115
  ok: true,
@@ -6949,6 +7142,13 @@ function sameSourceUrl(left, right) {
6949
7142
  function sourceSuffix(url) {
6950
7143
  return (withoutTrailingSlash(url).split(/[/:]/).filter((part) => part !== "").pop() ?? "").replace(/\.git$/, "");
6951
7144
  }
7145
+ function sourceTransport(url) {
7146
+ if (GIT_SSH.test(url) || /^ssh:\/\//i.test(url) || /^git\+ssh:\/\//i.test(url)) return "ssh";
7147
+ if (/^git:\/\//i.test(url)) return "git";
7148
+ if (/^https:\/\//i.test(url)) return "https";
7149
+ if (/^http:\/\//i.test(url)) return "http";
7150
+ return "";
7151
+ }
6952
7152
  function sourceLabelsOf(sources) {
6953
7153
  const counts = /* @__PURE__ */ new Map();
6954
7154
  for (const source of sources) counts.set(source.label, (counts.get(source.label) ?? 0) + 1);
@@ -6959,7 +7159,8 @@ function sourceLabelsOf(sources) {
6959
7159
  continue;
6960
7160
  }
6961
7161
  const suffix = sourceSuffix(source.url);
6962
- labels.set(source.id, suffix === "" ? source.url : `${source.label} · ${suffix}`);
7162
+ const detail = suffix !== "" && suffix !== source.label ? suffix : sourceTransport(source.url);
7163
+ labels.set(source.id, detail === "" ? source.url : `${detail} · ${source.label}`);
6963
7164
  }
6964
7165
  return labels;
6965
7166
  }
@@ -7086,11 +7287,15 @@ function DiscoverVersions({ t, locale, entry, onInstall }) {
7086
7287
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7087
7288
  var MARKET_DOC_ROUTE = "panels/market-doc";
7088
7289
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7290
+ var MARKET_SOURCES_ROUTE = "panels/market-sources";
7089
7291
  //#endregion
7090
7292
  //#region src/shared/hooks/market-queries.ts
7091
7293
  function readMarketDiscover(options = {}) {
7092
7294
  return apiGet(MARKET_DISCOVER_ROUTE, options.force === true ? { force: "1" } : {});
7093
7295
  }
7296
+ function readMarketSources() {
7297
+ return apiGet(MARKET_SOURCES_ROUTE);
7298
+ }
7094
7299
  function readMarketDoc(name, version, kind) {
7095
7300
  return apiGet(MARKET_DOC_ROUTE, {
7096
7301
  name,
@@ -7098,10 +7303,11 @@ function readMarketDoc(name, version, kind) {
7098
7303
  kind
7099
7304
  });
7100
7305
  }
7101
- function readPublishPreview(unit, version) {
7306
+ function readPublishPreview(unit, version, author) {
7102
7307
  return apiGet(MARKET_PUBLISH_PREVIEW_ROUTE, {
7103
7308
  unit,
7104
- ...version === void 0 || version === "" ? {} : { version }
7309
+ ...version === void 0 || version === "" ? {} : { version },
7310
+ ...author === void 0 || author === "" ? {} : { author }
7105
7311
  });
7106
7312
  }
7107
7313
  //#endregion
@@ -7355,6 +7561,7 @@ function DiscoverSourcesDialog(props) {
7355
7561
  const [url, setUrl] = (0, react.useState)("");
7356
7562
  const [problem, setProblem] = (0, react.useState)(null);
7357
7563
  const pending = props.busy || props.adding;
7564
+ const selectedVisible = props.sources.some((source) => source.id === props.selected);
7358
7565
  const add = () => {
7359
7566
  if (pending) return;
7360
7567
  const parsed = sourceFromUrl(url);
@@ -7377,13 +7584,29 @@ function DiscoverSourcesDialog(props) {
7377
7584
  closeLabel: t("panels.discover.close"),
7378
7585
  description: t("panels.discover.sourcesIntro"),
7379
7586
  className: MarketPage_module_default.discoverDialog
7380
- }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDialogBody }, props.sources.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", {
7587
+ }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDialogBody }, props.loading && !selectedVisible ? props.slow ? /* @__PURE__ */ (0, react.createElement)("p", {
7588
+ className: MarketPage_module_default.discoverNotice,
7589
+ role: "note"
7590
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7591
+ size: 14,
7592
+ "aria-hidden": "true"
7593
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.slowHint"))) : /* @__PURE__ */ (0, react.createElement)(DiscoverLoading, { label: t("panels.discover.loading") }) : null, props.sources.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", {
7381
7594
  className: MarketPage_module_default.discoverSourceList,
7382
7595
  "aria-label": t("panels.discover.sourcesLabel")
7383
7596
  }, props.sources.map((source) => /* @__PURE__ */ (0, react.createElement)("li", {
7384
7597
  key: source.id,
7385
7598
  className: MarketPage_module_default.discoverSourceRow
7386
- }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverStrong }, source.label), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverMeta }, source.url), props.problem?.id === source.id ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceError }, props.problem.detail) : null), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7599
+ }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverMain }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverStrong }, source.label), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverMeta }, source.url), !props.loading && props.problem?.id === source.id ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceError }, props.problem.detail) : null), source.id === props.selected ? props.loading ? /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceLoading }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: "ongoing" }), t("panels.discover.loading")) : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSourceCurrent }, t("panels.discover.sourceCurrent")) : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7600
+ type: "button",
7601
+ variant: "ghost",
7602
+ size: "sm",
7603
+ "aria-label": t("panels.discover.useSourceNamed", { label: source.label }),
7604
+ disabled: pending,
7605
+ onClick: () => {
7606
+ props.onSelect(source.id);
7607
+ props.onClose();
7608
+ }
7609
+ }, t("panels.discover.useSource")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7387
7610
  label: t("panels.discover.removeSource"),
7388
7611
  side: "bottom",
7389
7612
  portal: true,
@@ -7396,7 +7619,13 @@ function DiscoverSourcesDialog(props) {
7396
7619
  "aria-label": t("panels.discover.removeSourceNamed", { url: source.url }),
7397
7620
  disabled: pending,
7398
7621
  onClick: () => props.onRemove(source.id)
7399
- }))))), /* @__PURE__ */ (0, react.createElement)("form", {
7622
+ })), source.id === props.selected && props.loading && props.slow ? /* @__PURE__ */ (0, react.createElement)("span", {
7623
+ className: MarketPage_module_default.discoverSourceHint,
7624
+ role: "note"
7625
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7626
+ size: 12,
7627
+ "aria-hidden": "true"
7628
+ }), t("panels.discover.slowHint")) : null))), /* @__PURE__ */ (0, react.createElement)("form", {
7400
7629
  className: MarketPage_module_default.discoverSourceForm,
7401
7630
  onSubmit: (event) => {
7402
7631
  event.preventDefault();
@@ -7439,12 +7668,16 @@ function DiscoverDialogs({ t, d }) {
7439
7668
  t,
7440
7669
  open: d.manageOpen,
7441
7670
  sources: d.sources,
7671
+ selected: d.selected,
7672
+ loading: d.loading,
7673
+ slow: d.slow,
7442
7674
  problem: d.problem,
7443
7675
  busy: d.busy,
7444
7676
  adding: d.addingSource,
7445
7677
  onClose: () => d.setManageOpen(false),
7446
7678
  onAdd: d.addSource,
7447
- onRemove: d.removeSourceById
7679
+ onRemove: d.removeSourceById,
7680
+ onSelect: d.selectSource
7448
7681
  }), /* @__PURE__ */ (0, react.createElement)(DiscoverConfirm, {
7449
7682
  t,
7450
7683
  locale: d.locale,
@@ -7481,6 +7714,34 @@ function DiscoverCategories({ t, categories, category, onCategory }) {
7481
7714
  }, item)));
7482
7715
  }
7483
7716
  //#endregion
7717
+ //#region src/app/layouts/market/discover-search.tsx
7718
+ function DiscoverSearch({ t, value, disabled, onChange }) {
7719
+ const field = (0, react.useRef)(null);
7720
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverSearch }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Input, {
7721
+ ref: field,
7722
+ className: value === "" ? MarketPage_module_default.discoverSearchField : `${MarketPage_module_default.discoverSearchField} ${MarketPage_module_default.discoverSearchFieldFilled}`,
7723
+ type: "search",
7724
+ icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 }),
7725
+ value,
7726
+ placeholder: t("panels.discover.search"),
7727
+ "aria-label": t("panels.discover.search"),
7728
+ disabled,
7729
+ onChange: (event) => onChange(event.currentTarget.value)
7730
+ }), value === "" ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7731
+ type: "button",
7732
+ size: "sm",
7733
+ variant: "ghost",
7734
+ className: MarketPage_module_default.discoverSearchClear,
7735
+ "aria-label": t("panels.discover.clearSearch"),
7736
+ disabled,
7737
+ icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutlineRegular, { size: 14 }),
7738
+ onClick: () => {
7739
+ onChange("");
7740
+ field.current?.focus();
7741
+ }
7742
+ }));
7743
+ }
7744
+ //#endregion
7484
7745
  //#region src/app/layouts/market/discover-toolbar.tsx
7485
7746
  var TEXT_DELAY_MS = 250;
7486
7747
  function DiscoverToolbar(props) {
@@ -7534,14 +7795,11 @@ function DiscoverToolbar(props) {
7534
7795
  size: 12,
7535
7796
  "aria-hidden": "true"
7536
7797
  }))
7537
- }), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Input, {
7538
- className: MarketPage_module_default.discoverSearch,
7539
- type: "search",
7540
- icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 }),
7798
+ }), /* @__PURE__ */ (0, react.createElement)(DiscoverSearch, {
7799
+ t,
7541
7800
  value: text,
7542
- placeholder: t("panels.discover.search"),
7543
- "aria-label": t("panels.discover.search"),
7544
- onChange: (event) => setText(event.currentTarget.value)
7801
+ disabled: props.loading,
7802
+ onChange: setText
7545
7803
  }), props.labels.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
7546
7804
  className: MarketPage_module_default.discoverLabels,
7547
7805
  open: open === "filter",
@@ -7589,6 +7847,7 @@ function DiscoverToolbar(props) {
7589
7847
  variant: "ghost",
7590
7848
  "aria-haspopup": "menu",
7591
7849
  "aria-expanded": open === "sort",
7850
+ disabled: props.loading,
7592
7851
  onClick: () => setOpen(open === "sort" ? null : "sort")
7593
7852
  }, t("panels.discover.sortWith", { label: sortName }), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, {
7594
7853
  size: 12,
@@ -7627,6 +7886,12 @@ var SHIPPED = [
7627
7886
  "restart-required",
7628
7887
  "overridden"
7629
7888
  ];
7889
+ function sourceRowsOf(sources) {
7890
+ return sources.map((source) => ({
7891
+ ...source,
7892
+ writable: source.kind === "http" ? false : null
7893
+ }));
7894
+ }
7630
7895
  function installVerdictOf(value, t) {
7631
7896
  const change = changeOf(value);
7632
7897
  if (change === void 0) return { kind: "quiet" };
@@ -7640,6 +7905,7 @@ function installVerdictOf(value, t) {
7640
7905
  function useDiscover(t, active, onInstalled) {
7641
7906
  const [payload, setPayload] = (0, react.useState)(null);
7642
7907
  const [loading, setLoading] = (0, react.useState)(true);
7908
+ const [slow, setSlow] = (0, react.useState)(false);
7643
7909
  const [failure, setFailure] = (0, react.useState)(null);
7644
7910
  const [query, setQuery] = (0, react.useState)("");
7645
7911
  const [category, setCategory] = (0, react.useState)(null);
@@ -7652,7 +7918,10 @@ function useDiscover(t, active, onInstalled) {
7652
7918
  const [choice, setChoice] = (0, react.useState)(null);
7653
7919
  const [notice, setNotice] = (0, react.useState)(null);
7654
7920
  const [addingSource, setAddingSource] = (0, react.useState)(false);
7921
+ const [knownSources, setKnownSources] = (0, react.useState)(null);
7655
7922
  const loaded = (0, react.useRef)(false);
7923
+ const loadTicket = (0, react.useRef)(0);
7924
+ const sourceTicket = (0, react.useRef)(0);
7656
7925
  const locale = (0, react.useMemo)(() => localeNow(), []);
7657
7926
  const sources = useHostWrite({
7658
7927
  channel: "actions",
@@ -7663,11 +7932,27 @@ function useDiscover(t, active, onInstalled) {
7663
7932
  channel: "provision",
7664
7933
  networkText: t("panels.discover.failed")
7665
7934
  });
7935
+ const loadSources = (0, react.useCallback)(async () => {
7936
+ const ticket = sourceTicket.current + 1;
7937
+ sourceTicket.current = ticket;
7938
+ const response = await readMarketSources().catch(() => null);
7939
+ if (sourceTicket.current !== ticket) return;
7940
+ if (response === null || !response.ok) return;
7941
+ setKnownSources({
7942
+ sources: sourceRowsOf(response.sources),
7943
+ selected: response.selected
7944
+ });
7945
+ }, []);
7666
7946
  const load = (0, react.useCallback)(async (force = false) => {
7947
+ const ticket = loadTicket.current + 1;
7948
+ loadTicket.current = ticket;
7667
7949
  setLoading(true);
7950
+ setSlow(false);
7668
7951
  setFailure(null);
7669
7952
  const response = await readMarketDiscover({ force }).catch(() => null);
7953
+ if (loadTicket.current !== ticket) return;
7670
7954
  setLoading(false);
7955
+ setSlow(false);
7671
7956
  if (response === null || !response.ok) {
7672
7957
  setFailure(t("panels.discover.unreadable"));
7673
7958
  return;
@@ -7675,11 +7960,29 @@ function useDiscover(t, active, onInstalled) {
7675
7960
  setPayload(response);
7676
7961
  setLimit(50);
7677
7962
  }, [t]);
7963
+ const beginSwitch = () => {
7964
+ loadTicket.current += 1;
7965
+ sourceTicket.current += 1;
7966
+ setFailure(null);
7967
+ setPayload(null);
7968
+ setLoading(true);
7969
+ setSlow(false);
7970
+ };
7678
7971
  (0, react.useEffect)(() => {
7679
7972
  if (!active || loaded.current) return;
7680
7973
  loaded.current = true;
7974
+ loadSources();
7681
7975
  load();
7682
- }, [active, load]);
7976
+ }, [
7977
+ active,
7978
+ load,
7979
+ loadSources
7980
+ ]);
7981
+ (0, react.useEffect)(() => {
7982
+ if (!loading) return void 0;
7983
+ const timer = setTimeout(() => setSlow(true), 8e3);
7984
+ return () => clearTimeout(timer);
7985
+ }, [loading]);
7683
7986
  (0, react.useEffect)(() => subscribeFactRevision(CAPABILITY_FACT, () => {
7684
7987
  if (!loaded.current) return;
7685
7988
  load(true);
@@ -7733,6 +8036,8 @@ function useDiscover(t, active, onInstalled) {
7733
8036
  const done = typeof value?.["branch"] === "string" ? value["branch"] : branch;
7734
8037
  setInitOpen(false);
7735
8038
  setNotice(t("panels.discover.initDone", { branch: done }));
8039
+ beginSwitch();
8040
+ await loadSources();
7736
8041
  await load(true);
7737
8042
  });
7738
8043
  };
@@ -7750,8 +8055,11 @@ function useDiscover(t, active, onInstalled) {
7750
8055
  id
7751
8056
  },
7752
8057
  select: true
7753
- }).then(async (outcome) => {
7754
- if (outcome.ok) await load(true);
8058
+ }).then((outcome) => {
8059
+ if (!outcome.ok) return;
8060
+ beginSwitch();
8061
+ loadSources();
8062
+ load(true);
7755
8063
  }).finally(() => setAddingSource(false));
7756
8064
  };
7757
8065
  const removeSourceById = (id) => {
@@ -7763,6 +8071,8 @@ function useDiscover(t, active, onInstalled) {
7763
8071
  }).then(async (outcome) => {
7764
8072
  if (!outcome.ok) return;
7765
8073
  setDetail(null);
8074
+ beginSwitch();
8075
+ await loadSources();
7766
8076
  await load(true);
7767
8077
  });
7768
8078
  };
@@ -7775,11 +8085,23 @@ function useDiscover(t, active, onInstalled) {
7775
8085
  setSelectedLabels([]);
7776
8086
  setSort("default");
7777
8087
  setDetail(null);
8088
+ beginSwitch();
8089
+ setKnownSources((current) => current === null ? current : {
8090
+ sources: current.sources,
8091
+ selected: id
8092
+ });
7778
8093
  sources.send({
7779
8094
  action: "select",
7780
8095
  id
7781
8096
  }).then(async (outcome) => {
7782
- if (outcome.ok) await load(true);
8097
+ if (!outcome.ok) {
8098
+ setLoading(false);
8099
+ setSlow(false);
8100
+ loadSources();
8101
+ return;
8102
+ }
8103
+ await loadSources();
8104
+ await load(true);
7783
8105
  });
7784
8106
  };
7785
8107
  const install = () => {
@@ -7814,9 +8136,10 @@ function useDiscover(t, active, onInstalled) {
7814
8136
  locale,
7815
8137
  payload,
7816
8138
  loading,
8139
+ slow,
7817
8140
  failure,
7818
- sources: payload?.sources ?? [],
7819
- selected: payload?.selected ?? null,
8141
+ sources: payload?.sources ?? knownSources?.sources ?? [],
8142
+ selected: payload?.selected ?? knownSources?.selected ?? null,
7820
8143
  entries,
7821
8144
  shown,
7822
8145
  total: sorted.length,
@@ -7887,35 +8210,45 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
7887
8210
  t,
7888
8211
  d
7889
8212
  });
7890
- if (d.payload === null) return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, d.loading ? /* @__PURE__ */ (0, react.createElement)(DiscoverSkeleton, { label: t("panels.discover.loading") }) : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
8213
+ const slowHint = !d.manageOpen && d.loading && d.slow ? /* @__PURE__ */ (0, react.createElement)("p", {
8214
+ className: MarketPage_module_default.discoverNotice,
8215
+ role: "note"
8216
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
8217
+ size: 14,
8218
+ "aria-hidden": "true"
8219
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.slowHint"))) : null;
8220
+ if (d.payload === null) return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, d.sources.length === 0 ? null : toolbar, d.loading ? /* @__PURE__ */ (0, react.createElement)(DiscoverSkeleton, { label: t("panels.discover.loading") }) : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
7891
8221
  t,
7892
8222
  text: t("panels.discover.sourcesFailed"),
7893
8223
  onRetry: d.reload
7894
- }), dialogs);
8224
+ }), slowHint, d.writeFailed === null ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.discoverError }, d.writeFailed), dialogs);
7895
8225
  if (d.payload.state === "no-source") return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, /* @__PURE__ */ (0, react.createElement)(DiscoverNoSource, {
7896
8226
  t,
7897
8227
  onAdd: () => d.setManageOpen(true)
7898
8228
  }), dialogs);
7899
- const readFailed = d.payload.state === "invalid" ? t("panels.discover.invalid") : d.payload.state === "unreadable" ? t("panels.discover.unreadable") : null;
8229
+ const failed = d.payload.state === "invalid" || d.payload.state === "unreadable";
8230
+ const readFailed = !d.loading && failed ? d.payload.state === "invalid" ? t("panels.discover.invalid") : t("panels.discover.unreadable") : null;
8231
+ const uninitialized = d.loading ? null : d.uninitialized;
8232
+ const retrying = d.loading && failed;
7900
8233
  const emptyText = unfiltered({
7901
8234
  query: d.query,
7902
8235
  category: d.category,
7903
8236
  labels: d.selectedLabels
7904
8237
  }) ? t("panels.discover.empty") : t("panels.discover.noMatch");
7905
- return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, toolbar, d.payload.stale === true ? /* @__PURE__ */ (0, react.createElement)("p", {
8238
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverPage }, toolbar, d.loading && !d.manageOpen ? /* @__PURE__ */ (0, react.createElement)(DiscoverLoading, { label: t("panels.discover.loading") }) : null, slowHint, !d.loading && d.payload.stale === true ? /* @__PURE__ */ (0, react.createElement)("p", {
7906
8239
  className: MarketPage_module_default.discoverNotice,
7907
8240
  role: "note"
7908
8241
  }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
7909
8242
  size: 14,
7910
8243
  "aria-hidden": "true"
7911
- }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.stale"))) : null, d.uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
8244
+ }), /* @__PURE__ */ (0, react.createElement)("span", null, t("panels.discover.stale"))) : null, uninitialized === null ? readFailed === null ? null : /* @__PURE__ */ (0, react.createElement)(DiscoverFailure, {
7912
8245
  t,
7913
8246
  text: readFailed,
7914
8247
  onRetry: d.reload
7915
8248
  }) : /* @__PURE__ */ (0, react.createElement)(DiscoverUninitialized, {
7916
8249
  t,
7917
- path: d.uninitialized.path,
7918
- empty: d.uninitialized.empty,
8250
+ path: uninitialized.path,
8251
+ empty: uninitialized.empty,
7919
8252
  onInit: () => d.setInitOpen(true)
7920
8253
  }), d.notice === null ? null : /* @__PURE__ */ (0, react.createElement)("p", {
7921
8254
  className: MarketPage_module_default.discoverNotice,
@@ -7934,7 +8267,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
7934
8267
  version
7935
8268
  }),
7936
8269
  onShowInstalled
7937
- }) : readFailed !== null || d.uninitialized !== null ? null : d.shown.length === 0 ? /* @__PURE__ */ (0, react.createElement)(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ (0, react.createElement)(DiscoverRows, {
8270
+ }) : readFailed !== null || uninitialized !== null || retrying ? null : d.shown.length === 0 ? /* @__PURE__ */ (0, react.createElement)(DiscoverEmptyText, { text: emptyText }) : /* @__PURE__ */ (0, react.createElement)(DiscoverRows, {
7938
8271
  t,
7939
8272
  locale: d.locale,
7940
8273
  entries: d.shown,
@@ -8715,7 +9048,7 @@ function newRequestId() {
8715
9048
  return crypto.randomUUID();
8716
9049
  }
8717
9050
  function useAddModule(options) {
8718
- const { open, onInstalled, failedText } = options;
9051
+ const { onInstalled, failedText } = options;
8719
9052
  const [spec, setSpec] = (0, react.useState)("");
8720
9053
  const [choice, setChoice] = (0, react.useState)({
8721
9054
  kind: "default",
@@ -8746,7 +9079,6 @@ function useAddModule(options) {
8746
9079
  networkText: failedText
8747
9080
  });
8748
9081
  (0, react.useEffect)(() => {
8749
- if (!open) return void 0;
8750
9082
  let alive = true;
8751
9083
  readBundleRegistries().then((response) => {
8752
9084
  if (!alive) return;
@@ -8755,19 +9087,8 @@ function useAddModule(options) {
8755
9087
  return () => {
8756
9088
  alive = false;
8757
9089
  };
8758
- }, [open]);
9090
+ }, []);
8759
9091
  const registry = registryOf(choice, custom);
8760
- (0, react.useEffect)(() => {
8761
- if (open) return;
8762
- generationRef.current += 1;
8763
- setGuideOpen(false);
8764
- setRegistryOpen(false);
8765
- setProblem(null);
8766
- setPreview(null);
8767
- setOutcome(null);
8768
- setFailure(null);
8769
- setPhase("idle");
8770
- }, [open]);
8771
9092
  const check = (0, react.useCallback)(() => {
8772
9093
  const wanted = spec.trim();
8773
9094
  if (wanted === "") return;
@@ -8904,15 +9225,21 @@ function useAddModule(options) {
8904
9225
  //#endregion
8905
9226
  //#region src/app/layouts/market/AddModuleDialog.tsx
8906
9227
  function AddModuleDialog({ t, open, onClose, onInstalled }) {
9228
+ if (!open) return null;
9229
+ return /* @__PURE__ */ (0, react.createElement)(AddModuleContent, {
9230
+ t,
9231
+ onClose,
9232
+ onInstalled
9233
+ });
9234
+ }
9235
+ function AddModuleContent({ t, onClose, onInstalled }) {
8907
9236
  const real = useAddModule({
8908
- open,
8909
9237
  onInstalled,
8910
9238
  failedText: t("panels.failed")
8911
9239
  });
8912
9240
  const devAdd = devSurface.useStrips("addModule", []);
8913
9241
  const mock = devAdd.current;
8914
9242
  const state = mock === void 0 ? real : devSurface.addModuleState(real, mock);
8915
- if (!open) return null;
8916
9243
  const installing = state.phase === "installing";
8917
9244
  const checking = state.phase === "inspecting";
8918
9245
  const empty = state.spec.trim() === "";
@@ -8972,7 +9299,7 @@ function AddModuleDialog({ t, open, onClose, onInstalled }) {
8972
9299
  onClick: () => state.install()
8973
9300
  }, t("panels.market.add.retry")) : null) : null);
8974
9301
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
8975
- open,
9302
+ open: true,
8976
9303
  onClose: () => {
8977
9304
  if (!installing) onClose();
8978
9305
  },
@@ -9045,7 +9372,7 @@ function makeMarketEntryIcon(units) {
9045
9372
  return /* @__PURE__ */ (0, react.createElement)(IconModules, { size });
9046
9373
  };
9047
9374
  }
9048
- function MarketPanel({ t, units }) {
9375
+ function MarketPanel({ t, units, titleOf }) {
9049
9376
  const manifests = useLiveManifests(units);
9050
9377
  const installable = useInstallableUnits(units);
9051
9378
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
@@ -9143,6 +9470,7 @@ function MarketPanel({ t, units }) {
9143
9470
  }, /* @__PURE__ */ (0, react.createElement)(MarketView, {
9144
9471
  key: `${mock?.id ?? "real-market"}-${mockNonce}`,
9145
9472
  t,
9473
+ titleOf,
9146
9474
  manifests,
9147
9475
  installable,
9148
9476
  capabilities,
@@ -9178,6 +9506,10 @@ function MarketPanel({ t, units }) {
9178
9506
  }
9179
9507
  function registerMarketPanel(ctx, units) {
9180
9508
  const t = ctx.locale.bind(LOCALE_NS);
9509
+ const titleOf = (title) => title === void 0 ? "" : ctx.locale.resolveText?.({
9510
+ zh: title.zh,
9511
+ en: title.en
9512
+ }) ?? title.zh;
9181
9513
  ctx.slots.inject("sidebar.panellist", () => ctx.slots.register({
9182
9514
  name: "sidebar.panellist",
9183
9515
  id: MARKET_PANEL_ID,
@@ -9189,7 +9521,10 @@ function registerMarketPanel(ctx, units) {
9189
9521
  name: "main",
9190
9522
  key: MARKET_PANEL_ID,
9191
9523
  locale: LOCALE_NS,
9192
- inject: () => ({ units })
9524
+ inject: () => ({
9525
+ units,
9526
+ titleOf
9527
+ })
9193
9528
  }, MarketPanel));
9194
9529
  }
9195
9530
  //#endregion
@@ -9241,6 +9576,14 @@ function flush() {
9241
9576
  }).catch(() => void 0);
9242
9577
  }
9243
9578
  //#endregion
9579
+ //#region src/shared/hooks/resource-view.ts
9580
+ var IDLE = { phase: "idle" };
9581
+ var LOADING = { phase: "loading" };
9582
+ function resourceViewOf(enabled, current, identity) {
9583
+ if (!enabled) return IDLE;
9584
+ return current.identity === identity ? current.state : LOADING;
9585
+ }
9586
+ //#endregion
9244
9587
  //#region src/shared/hooks/use-api-resource.ts
9245
9588
  var use_api_resource_exports = /* @__PURE__ */ __exportAll({
9246
9589
  readKeyOf: () => readKeyOf,
@@ -9312,7 +9655,10 @@ function useApiResource(route, query, refreshToken, options = {}) {
9312
9655
  const identity = resourceIdentity(route, query, options.key);
9313
9656
  const factRev = useFactRevision(options.fact ?? factOfRoute(route));
9314
9657
  const key = readKeyOf(identity, refreshToken, factRev);
9315
- const [state, setState] = (0, react.useState)(() => enabled ? { phase: "loading" } : { phase: "idle" });
9658
+ const [current, setCurrent] = (0, react.useState)(() => ({
9659
+ identity,
9660
+ state: enabled ? LOADING : IDLE
9661
+ }));
9316
9662
  const lastIdentity = (0, react.useRef)(null);
9317
9663
  const queryRef = (0, react.useRef)(query);
9318
9664
  (0, react.useEffect)(() => {
@@ -9321,17 +9667,23 @@ function useApiResource(route, query, refreshToken, options = {}) {
9321
9667
  (0, react.useEffect)(() => {
9322
9668
  if (!enabled) {
9323
9669
  lastIdentity.current = null;
9324
- setState({ phase: "idle" });
9325
9670
  return;
9326
9671
  }
9327
9672
  let cancelled = false;
9673
+ const put = (state) => setCurrent({
9674
+ identity,
9675
+ state
9676
+ });
9328
9677
  const sameIdentity = lastIdentity.current === identity;
9329
9678
  lastIdentity.current = identity;
9330
- setState((prev) => sameIdentity && prev.value !== void 0 ? {
9331
- phase: "loading",
9332
- value: prev.value,
9333
- ...prev.at === void 0 ? {} : { at: prev.at }
9334
- } : { phase: "loading" });
9679
+ setCurrent((prev) => ({
9680
+ identity,
9681
+ state: sameIdentity && prev.state.value !== void 0 ? {
9682
+ phase: "loading",
9683
+ value: prev.state.value,
9684
+ ...prev.state.at === void 0 ? {} : { at: prev.state.at }
9685
+ } : LOADING
9686
+ }));
9335
9687
  const flight = requestResource(route, queryRef.current, key);
9336
9688
  const owner = options.report === false ? null : unitOfRoute(route);
9337
9689
  if (owner !== null) reportPanelRead({
@@ -9342,7 +9694,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9342
9694
  flight.task.then((response) => {
9343
9695
  if (cancelled) return;
9344
9696
  if (response.ok) {
9345
- setState({
9697
+ put({
9346
9698
  phase: "ready",
9347
9699
  value: response,
9348
9700
  at: Date.now()
@@ -9354,7 +9706,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9354
9706
  });
9355
9707
  return;
9356
9708
  }
9357
- setState({
9709
+ put({
9358
9710
  phase: "error",
9359
9711
  error: response.error
9360
9712
  });
@@ -9370,7 +9722,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9370
9722
  }).catch((reason) => {
9371
9723
  if (cancelled) return;
9372
9724
  const message = reason instanceof Error ? reason.message : String(reason);
9373
- setState({
9725
+ put({
9374
9726
  phase: "error",
9375
9727
  error: {
9376
9728
  code: "network",
@@ -9401,7 +9753,7 @@ function useApiResource(route, query, refreshToken, options = {}) {
9401
9753
  options.fact,
9402
9754
  options.report
9403
9755
  ]);
9404
- return state;
9756
+ return resourceViewOf(enabled, current, identity);
9405
9757
  }
9406
9758
  //#endregion
9407
9759
  //#region src/shared/hooks/use-diy-debug.ts
@@ -10448,6 +10800,26 @@ function assembleClientUnits(registry) {
10448
10800
  for (const face of CLIENT_UNITS) registry.register(face);
10449
10801
  }
10450
10802
  //#endregion
10803
+ //#region src/app/units/unit-titles.ts
10804
+ var UNIT_TITLES_OWNER = "dsh-workbench";
10805
+ function unitTitlesOf(manifests) {
10806
+ const zh = {};
10807
+ const en = {};
10808
+ for (const manifest of manifests) {
10809
+ const title = manifest.title;
10810
+ if (title === void 0 || title.zh.trim() === "" || title.en.trim() === "") continue;
10811
+ zh[unitTitleKey(manifest.id)] = title.zh;
10812
+ en[unitTitleKey(manifest.id)] = title.en;
10813
+ }
10814
+ return {
10815
+ unit: UNIT_TITLES_OWNER,
10816
+ messages: {
10817
+ zh,
10818
+ en
10819
+ }
10820
+ };
10821
+ }
10822
+ //#endregion
10451
10823
  //#region src/kernel/client/board-registry.ts
10452
10824
  function createBoardRegistry() {
10453
10825
  const modules = [];
@@ -10508,7 +10880,7 @@ function toBoardModule(face, manifest) {
10508
10880
  if (View === void 0) return void 0;
10509
10881
  return {
10510
10882
  id: manifest.id,
10511
- titleKey: manifest.card?.titleKey ?? manifest.id,
10883
+ titleKey: manifest.titleKey,
10512
10884
  order: manifest.card?.order ?? 100,
10513
10885
  View,
10514
10886
  ...face.steps === void 0 ? {} : { steps: face.steps }
@@ -10523,6 +10895,10 @@ function createClientUnitRegistry(options = {}) {
10523
10895
  let installableIds = null;
10524
10896
  let revision = 0;
10525
10897
  let manifestsCache;
10898
+ let titleSignature = "";
10899
+ function titlesOf(manifests) {
10900
+ return manifests.flatMap((manifest) => manifest.title === void 0 ? [] : [`${manifest.id}=${manifest.title.zh}/${manifest.title.en}`]).join("|");
10901
+ }
10526
10902
  function notify() {
10527
10903
  revision += 1;
10528
10904
  for (const listener of [...listeners]) try {
@@ -10602,7 +10978,10 @@ function createClientUnitRegistry(options = {}) {
10602
10978
  for (const entry of registrations) {
10603
10979
  const next = known.get(entry.unit);
10604
10980
  if (entry.mounted === null) {
10605
- if (next !== void 0 && attach(entry)) changed = true;
10981
+ if (next !== void 0) {
10982
+ attach(entry);
10983
+ changed = true;
10984
+ }
10606
10985
  continue;
10607
10986
  }
10608
10987
  if (next === void 0) {
@@ -10611,6 +10990,11 @@ function createClientUnitRegistry(options = {}) {
10611
10990
  changed = true;
10612
10991
  }
10613
10992
  }
10993
+ const titles = titlesOf(manifests);
10994
+ if (titles !== titleSignature) {
10995
+ titleSignature = titles;
10996
+ changed = true;
10997
+ }
10614
10998
  if (!changed) return;
10615
10999
  manifestsCache = void 0;
10616
11000
  notify();
@@ -11381,6 +11765,7 @@ function publishRows(args, preview, t) {
11381
11765
  const unit = textOf(args, "unit");
11382
11766
  const target = textOf(args, "target");
11383
11767
  const version = textOf(args, "version");
11768
+ const author = textOf(args, "author");
11384
11769
  const rows = [
11385
11770
  {
11386
11771
  label: t("approval.publish.module"),
@@ -11396,7 +11781,7 @@ function publishRows(args, preview, t) {
11396
11781
  },
11397
11782
  {
11398
11783
  label: t("approval.publish.author"),
11399
- value: preview === void 0 ? t("approval.publish.reading") : preview?.author === void 0 || preview.author === "" ? t("approval.publish.authorMissing") : preview.author
11784
+ value: author !== "" ? author : preview === void 0 ? t("approval.publish.reading") : preview?.author === void 0 || preview.author === "" ? t("approval.publish.authorMissing") : preview.author
11400
11785
  }
11401
11786
  ];
11402
11787
  const market = preview?.market;
@@ -11443,17 +11828,22 @@ function PublishChangelogSeat({ changelog, t }) {
11443
11828
  function PublishApprovalSeat({ args, t }) {
11444
11829
  const unit = textOf(args, "unit");
11445
11830
  const version = textOf(args, "version");
11831
+ const author = textOf(args, "author");
11446
11832
  const [preview, setPreview] = (0, react.useState)(() => unit === "" ? null : void 0);
11447
11833
  (0, react.useEffect)(() => {
11448
11834
  if (unit === "") return;
11449
11835
  let live = true;
11450
- readPublishPreview(unit, version).then((response) => {
11836
+ readPublishPreview(unit, version, author).then((response) => {
11451
11837
  if (live) setPreview(response.ok ? response.preview : null);
11452
11838
  });
11453
11839
  return () => {
11454
11840
  live = false;
11455
11841
  };
11456
- }, [unit, version]);
11842
+ }, [
11843
+ unit,
11844
+ version,
11845
+ author
11846
+ ]);
11457
11847
  return (0, react.createElement)(ApprovalPlan, { rows: publishRows(args, preview, t) }, (0, react.createElement)(PublishChangelogSeat, {
11458
11848
  changelog: preview?.changelog,
11459
11849
  t
@@ -12218,10 +12608,10 @@ function dismissPanelByPointer(next, scope, onOpenChange) {
12218
12608
  //#region src/app/layouts/rightbar/PanelModules.tsx
12219
12609
  function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshToken, manifests, onOpenMarket }) {
12220
12610
  const { capabilities, checkedAt, forceProbe } = useCapabilityMap(refreshToken);
12221
- const [decided, setDecided] = (0, react.useState)(false);
12611
+ const decided = (0, react.useRef)(false);
12222
12612
  (0, react.useEffect)(() => {
12223
- if (!open || decided) return;
12224
- setDecided(true);
12613
+ if (!open || decided.current) return;
12614
+ decided.current = true;
12225
12615
  if (!shouldProbeOnEnter({
12226
12616
  checkedAt,
12227
12617
  now: Date.now(),
@@ -12231,7 +12621,6 @@ function PanelModules({ t, open, onOpenChange, enabledUnits, workspace, refreshT
12231
12621
  forceProbe();
12232
12622
  }, [
12233
12623
  open,
12234
- decided,
12235
12624
  checkedAt,
12236
12625
  forceProbe
12237
12626
  ]);
@@ -14371,7 +14760,7 @@ function messagesOf(units) {
14371
14760
  ...face.messages === void 0 ? {} : { messages: face.messages }
14372
14761
  }));
14373
14762
  }
14374
- var COMPONENT_CSS_MARKER = ".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 padding-top: 0;\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.wb-note {\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.wb-problem {\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-state-error-primary);\n overflow-wrap: anywhere;\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.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-card-gutter);\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.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) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n cursor: default;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\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.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\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}\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-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) 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 white-space: nowrap;\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-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\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-secondary);\n overflow-wrap: anywhere;\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\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-formProblem {\n grid-column: 2;\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.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\n:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\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.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.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:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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 text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\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-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost: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 border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\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.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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}\n\n.wb-selectSearch:focus-within {\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-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\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}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .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-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\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._marketList_9dzu9_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_9dzu9_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_9dzu9_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_9dzu9_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_9dzu9_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketStatus_9dzu9_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_9dzu9_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_9dzu9_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_9dzu9_66 {\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._marketName_9dzu9_39 ._marketVersion_9dzu9_72 {\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_9dzu9_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_9dzu9_72::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._marketLocalTag_9dzu9_94 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_9dzu9_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_9dzu9_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_9dzu9_112::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_9dzu9_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_9dzu9_131 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_9dzu9_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_9dzu9_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_9dzu9_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_9dzu9_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_9dzu9_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_9dzu9_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketSectionTitle_9dzu9_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketName_9dzu9_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_9dzu9_175 ._marketIcon_9dzu9_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_9dzu9_188 {\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_9dzu9_198 {\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_9dzu9_205 {\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_9dzu9_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_9dzu9_217 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_9dzu9_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_9dzu9_235 {\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_9dzu9_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_9dzu9_248 {\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_9dzu9_254 {\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._marketPanel_9dzu9_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_9dzu9_263[hidden] {\n display: none;\n}\n\n._marketTabs_9dzu9_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_9dzu9_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_9dzu9_283 {\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_9dzu9_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_9dzu9_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_9dzu9_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_9dzu9_312 svg {\n animation: _wb-spin_9dzu9_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_9dzu9_316 {\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_9dzu9_212 {\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._marketEmptyTitle_9dzu9_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_9dzu9_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_9dzu9_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_9dzu9_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_9dzu9_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_9dzu9_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_9dzu9_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_9dzu9_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_9dzu9_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_9dzu9_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_9dzu9_395 {\n flex: none;\n}\n\n._discoverSearch_9dzu9_399 {\n box-sizing: border-box;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_9dzu9_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_9dzu9_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_9dzu9_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_9dzu9_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_9dzu9_399 {\n grid-area: search;\n }\n\n ._discoverSort_9dzu9_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_9dzu9_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_9dzu9_440 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_9dzu9_447 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_9dzu9_456 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_9dzu9_456:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_9dzu9_470 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_9dzu9_482 {\n object-fit: contain;\n}\n\n._discoverMain_9dzu9_486 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_9dzu9_494 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_9dzu9_502 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_9dzu9_502::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_9dzu9_502:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_9dzu9_502:focus-visible::after {\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._discoverStrong_9dzu9_533 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_9dzu9_539 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_9dzu9_548 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_9dzu9_555 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_9dzu9_561 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_9dzu9_570 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_9dzu9_575 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_9dzu9_584 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_9dzu9_575 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_9dzu9_594 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_9dzu9_600 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_9dzu9_600:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_9dzu9_600: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._discoverCrumbIcon_9dzu9_623 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_9dzu9_627 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_9dzu9_633 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_9dzu9_639 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_9dzu9_646 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_9dzu9_653 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_9dzu9_658 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_9dzu9_663 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_9dzu9_668 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_9dzu9_674 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_9dzu9_681 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_9dzu9_687 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_9dzu9_692 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_9dzu9_702 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_9dzu9_708 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_9dzu9_716 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_9dzu9_725 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_9dzu9_732 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_9dzu9_732:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_9dzu9_742 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_9dzu9_750 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_9dzu9_758 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_9dzu9_763 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_9dzu9_772 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverNotice_9dzu9_778 {\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 color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_9dzu9_778 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_9dzu9_796 {\n align-self: center;\n}\n\n._discoverDialog_9dzu9_800 {\n width: min(var(--wb-len-480), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_9dzu9_804 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_9dzu9_810 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_9dzu9_818 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceError_9dzu9_826 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_9dzu9_832 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_9dzu9_838 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_9dzu9_843 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_9dzu9_849 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_9dzu9_854 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_9dzu9_860 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_9dzu9_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_9dzu9_470._discoverSkeletonFill_9dzu9_860 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_9dzu9_869 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_9dzu9_876 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_9dzu9_880 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_9dzu9_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_9dzu9_860 {\n animation: none;\n }\n}\n\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\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_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_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_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_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_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_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_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_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_1lv8f_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_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_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_1lv8f_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_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_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_1lv8f_351,\n._resultWarn_1lv8f_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_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\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_1lv8f_383 {\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_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\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_1lv8f_403 {\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_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\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_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\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._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12: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._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12: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._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\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-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\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}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-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-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\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}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\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_zyzt3_21 {\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_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\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_zyzt3_1 {\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_zyzt3_51 {\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_zyzt3_51 {\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_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\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_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\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_zyzt3_3 {\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_zyzt3_125 {\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_zyzt3_133 {\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_zyzt3_4 {\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_zyzt3_159 {\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_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\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_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\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_zyzt3_192 {\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_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\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_zyzt3_250 {\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_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\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_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\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_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_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_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\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_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\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_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\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_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::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_15ptp_119 {\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_15ptp_134 {\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 cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\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_15ptp_170 {\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_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_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_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\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_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\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_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\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_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\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_1cmz0_74 ._rowAction_1cmz0_84 {\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_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\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._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-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-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
14763
+ var COMPONENT_CSS_MARKER = ".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 padding-top: 0;\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.wb-note {\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.wb-problem {\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-state-error-primary);\n overflow-wrap: anywhere;\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.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-card-gutter);\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.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) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n cursor: default;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\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.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\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}\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-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) 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 white-space: nowrap;\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-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\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-secondary);\n overflow-wrap: anywhere;\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\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-formProblem {\n grid-column: 2;\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.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\n:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\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.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.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:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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 text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\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-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost: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 border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\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.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\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}\n\n.wb-selectSearch:focus-within {\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-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\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}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .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-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\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._marketList_1idrk_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_1idrk_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_1idrk_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_1idrk_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_1idrk_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketStatus_1idrk_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_1idrk_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_1idrk_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_1idrk_66 {\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._marketName_1idrk_39 ._marketVersion_1idrk_72 {\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_1idrk_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_1idrk_72::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._marketLocalTag_1idrk_94 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_1idrk_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1idrk_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1idrk_112::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_1idrk_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_1idrk_131 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_1idrk_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_1idrk_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_1idrk_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_1idrk_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_1idrk_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_1idrk_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_1idrk_175 ._marketSectionTitle_1idrk_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1idrk_175 ._marketName_1idrk_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1idrk_175 ._marketIcon_1idrk_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_1idrk_188 {\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_1idrk_198 {\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_1idrk_205 {\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_1idrk_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_1idrk_217 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_1idrk_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_1idrk_235 {\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_1idrk_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_1idrk_248 {\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_1idrk_254 {\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._marketPanel_1idrk_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_1idrk_263[hidden] {\n display: none;\n}\n\n._marketTabs_1idrk_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_1idrk_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_1idrk_283 {\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_1idrk_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_1idrk_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_1idrk_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_1idrk_312 svg {\n animation: _wb-spin_1idrk_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_1idrk_316 {\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_1idrk_212 {\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._marketEmptyTitle_1idrk_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_1idrk_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_1idrk_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_1idrk_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_1idrk_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_1idrk_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_1idrk_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_1idrk_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_1idrk_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_1idrk_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_1idrk_395 {\n flex: none;\n}\n\n._discoverSearch_1idrk_399 {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n._discoverSearchField_1idrk_407 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_1idrk_412 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_1idrk_407 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_1idrk_399 ._discoverSearchClear_1idrk_421 {\n position: absolute;\n top: 50%;\n inset-inline-end: var(--wb-len-4);\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n color: var(--dsw-alias-label-tertiary);\n transform: translateY(-50%);\n}\n\n._discoverSearchClear_1idrk_421:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_1idrk_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_1idrk_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_1idrk_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_1idrk_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_1idrk_399 {\n grid-area: search;\n }\n\n ._discoverSort_1idrk_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_1idrk_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_1idrk_472 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_1idrk_479 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_1idrk_488 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_1idrk_488:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_1idrk_502 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_1idrk_514 {\n object-fit: contain;\n}\n\n._discoverMain_1idrk_518 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_1idrk_526 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_1idrk_534 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_1idrk_534::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_1idrk_534:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_1idrk_534:focus-visible::after {\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._discoverStrong_1idrk_565 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_1idrk_571 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_1idrk_580 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_1idrk_587 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_1idrk_593 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_1idrk_602 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_1idrk_607 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_1idrk_616 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_1idrk_607 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_1idrk_626 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_1idrk_632 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_1idrk_632:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_1idrk_632: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._discoverCrumbIcon_1idrk_655 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_1idrk_659 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_1idrk_665 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_1idrk_671 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_1idrk_678 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_1idrk_685 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_1idrk_690 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_1idrk_695 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_1idrk_700 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_1idrk_706 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_1idrk_713 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_1idrk_719 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_1idrk_724 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_1idrk_734 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_1idrk_740 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_1idrk_748 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_1idrk_757 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_1idrk_764 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_1idrk_764:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_1idrk_774 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_1idrk_782 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_1idrk_790 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_1idrk_795 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_1idrk_804 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_1idrk_810 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverNotice_1idrk_819 {\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 color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_1idrk_819 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_1idrk_837 {\n align-self: center;\n}\n\n._discoverDialog_1idrk_841 {\n width: min(var(--wb-len-480), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_1idrk_845 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_1idrk_851 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_1idrk_859 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceCurrent_1idrk_868 {\n flex: none;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceLoading_1idrk_875 {\n display: flex;\n flex: none;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceHint_1idrk_885 {\n display: flex;\n flex-basis: 100%;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverSourceHint_1idrk_885 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_1idrk_899 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_1idrk_905 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_1idrk_911 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_1idrk_916 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_1idrk_922 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_1idrk_927 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_1idrk_933 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_1idrk_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_1idrk_502._discoverSkeletonFill_1idrk_933 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_1idrk_942 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_1idrk_949 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_1idrk_953 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_1idrk_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_1idrk_933 {\n animation: none;\n }\n}\n\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\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_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_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_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_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_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_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_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_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_1lv8f_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_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_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_1lv8f_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_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_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_1lv8f_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_1lv8f_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_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_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_1lv8f_351,\n._resultWarn_1lv8f_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_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\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_1lv8f_383 {\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_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\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_1lv8f_403 {\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_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\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_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\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._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12: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._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12: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._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\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-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\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}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-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-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\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}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\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_zyzt3_21 {\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_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\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_zyzt3_1 {\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_zyzt3_51 {\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_zyzt3_51 {\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_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\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_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\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_zyzt3_3 {\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_zyzt3_125 {\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_zyzt3_133 {\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_zyzt3_4 {\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_zyzt3_159 {\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_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\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_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\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_zyzt3_192 {\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_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\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_zyzt3_250 {\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_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\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_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\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_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_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_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\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_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\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_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\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_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::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_15ptp_119 {\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_15ptp_134 {\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 cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\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_15ptp_170 {\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_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_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_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\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_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\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_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\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_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\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_1cmz0_74 ._rowAction_1cmz0_84 {\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_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\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._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-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-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
14375
14764
  function workbenchCss() {
14376
14765
  return `${tokens_default}\n${palette_default}\n${scale_default}\n${sidebar_default}\n${sidebar_app_default}\n${rightbar_default}\n${chrome_default}\n${board_default}\n${motion_default}\n${COMPONENT_CSS_MARKER}`;
14377
14766
  }
@@ -14423,7 +14812,7 @@ function mount(ctx) {
14423
14812
  let disposeDictionary;
14424
14813
  const publish = () => {
14425
14814
  disposeDictionary?.();
14426
- const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, messagesOf(units.all()));
14815
+ const { dictionaries: merged, problems } = mergeMessagesSkipping(dictionaries, [unitTitlesOf(units.manifests()), ...messagesOf(units.all())]);
14427
14816
  for (const problem of problems) console.warn(`[dsh-workbench] 套件 ${problem.unit} 的文案没并进来(只有它少了这几句):${problem.reason}`);
14428
14817
  disposeDictionary = ctx.locale.register(LOCALE_NS, merged);
14429
14818
  };