@dsh-workbench/core 1.1.3 → 1.1.5

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 (47) hide show
  1. package/client.js +1370 -585
  2. package/dist/client/client.body.js +1370 -585
  3. package/dist/client/index.js +1225 -440
  4. package/dist/host/index.js +784 -114
  5. package/dist/types/app/layouts/approval-detail.d.ts +6 -3
  6. package/dist/types/app/layouts/market/add-module-registry-prefs.d.ts +11 -0
  7. package/dist/types/app/layouts/market/discover-confirm.d.ts +3 -2
  8. package/dist/types/app/layouts/market/market-check.d.ts +12 -0
  9. package/dist/types/app/layouts/market/market-header.d.ts +1 -3
  10. package/dist/types/app/layouts/market/use-discover.d.ts +2 -1
  11. package/dist/types/app/layouts/market/use-git-transport.d.ts +2 -2
  12. package/dist/types/app/layouts/market/use-module-versions.d.ts +3 -0
  13. package/dist/types/app/layouts/market/use-settling-modules.d.ts +1 -0
  14. package/dist/types/app/layouts/rightbar/AskAgentButton.d.ts +6 -0
  15. package/dist/types/app/layouts/rightbar/FailureCard.d.ts +8 -0
  16. package/dist/types/app/layouts/rightbar/MarketView.d.ts +4 -1
  17. package/dist/types/app/layouts/rightbar/SharedSection.d.ts +5 -2
  18. package/dist/types/app/layouts/rightbar/failure-card-text.d.ts +14 -0
  19. package/dist/types/app/layouts/rightbar/market-act.d.ts +2 -5
  20. package/dist/types/app/layouts/rightbar/market-change.d.ts +1 -0
  21. package/dist/types/app/layouts/rightbar/market-freshness.d.ts +1 -0
  22. package/dist/types/app/layouts/rightbar/market-hint.d.ts +2 -0
  23. package/dist/types/app/layouts/rightbar/market-install.d.ts +11 -0
  24. package/dist/types/app/layouts/rightbar/market-row-types.d.ts +11 -2
  25. package/dist/types/app/layouts/rightbar/market-rows.d.ts +14 -1
  26. package/dist/types/app/layouts/rightbar/market-section.d.ts +8 -4
  27. package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +3 -8
  28. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +2 -0
  29. package/dist/types/app/layouts/rightbar/use-market-default.d.ts +12 -0
  30. package/dist/types/kernel/client/registry.d.ts +1 -0
  31. package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
  32. package/dist/types/kernel/contract/market-index.d.ts +2 -2
  33. package/dist/types/modules/panels/model/market-install-error.d.ts +3 -0
  34. package/dist/types/modules/panels/model/market-install-error.test.d.ts +1 -0
  35. package/dist/types/modules/panels/model/market-installed.d.ts +19 -0
  36. package/dist/types/modules/panels/model/market-installed.test.d.ts +1 -0
  37. package/dist/types/modules/panels/model/market-registry.d.ts +2 -1
  38. package/dist/types/modules/panels/model/market-remove.d.ts +13 -0
  39. package/dist/types/modules/panels/model/market-remove.test.d.ts +1 -0
  40. package/dist/types/modules/panels/model/market-route.d.ts +2 -1
  41. package/dist/types/modules/panels/model/market.d.ts +1 -0
  42. package/dist/types/shared/api/host/git-probe.d.ts +3 -0
  43. package/dist/types/shared/api/host/market-sources-store.d.ts +2 -1
  44. package/dist/types/shared/api/host/profile-dependencies.d.ts +1 -0
  45. package/dist/types/shared/hooks/market-queries.d.ts +2 -1
  46. package/package.json +3 -3
  47. package/skills/workbench-module-diy/TOOLS.md +11 -2
package/client.js CHANGED
@@ -730,6 +730,10 @@ window.__ModuleLoader__.load({
730
730
  var STORAGE_KEY_RIGHTBAR_COLUMN = "dsh-workbench.rightbar.column";
731
731
  /** 记住右栏宽度(像素数字的字符串)的 localStorage 键。 */
732
732
  var STORAGE_KEY_RIGHTBAR_WIDTH = "dsh-workbench.rightbar.width";
733
+ /** 记住「添加模块」浮层选过的安装源的 localStorage 键。 */
734
+ var STORAGE_KEY_MARKET_REGISTRY = "dsh-workbench.market.registry";
735
+ /** 记住「添加模块」浮层上次填过的自定义源地址的 localStorage 键。 */
736
+ var STORAGE_KEY_MARKET_REGISTRY_CUSTOM = "dsh-workbench.market.registry.custom";
733
737
  /** dsh i18n 的命名空间:词表都注册在它下面,`ctx.locale.register` / `bind` 按它取。 */
734
738
  var LOCALE_NS = "workbench";
735
739
  //#endregion
@@ -788,17 +792,17 @@ window.__ModuleLoader__.load({
788
792
  //#endregion
789
793
  //#region ../shared/dist/lib/react.js
790
794
  var react$1 = require("react");
791
- var h$66 = react$1.createElement;
792
- var Fragment$23 = react$1.Fragment;
795
+ var h$69 = react$1.createElement;
796
+ var Fragment$22 = react$1.Fragment;
793
797
  var Component = react$1.Component;
794
798
  react$1.createContext;
795
799
  react$1.useContext;
796
- var useState$37 = react$1.useState;
797
- var useEffect$29 = react$1.useEffect;
800
+ var useState$42 = react$1.useState;
801
+ var useEffect$31 = react$1.useEffect;
798
802
  react$1.useLayoutEffect;
799
803
  var useMemo$10 = react$1.useMemo;
800
804
  react$1.useCallback;
801
- var useRef$23 = react$1.useRef;
805
+ var useRef$24 = react$1.useRef;
802
806
  react$1.useSyncExternalStore;
803
807
  //#endregion
804
808
  //#region ../shared/dist/components/Activity.js
@@ -809,7 +813,7 @@ window.__ModuleLoader__.load({
809
813
  * @returns 一个 div。
810
814
  */
811
815
  function ActivityBlock({ head, children }) {
812
- return h$66("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$66("div", { className: "wb-activityBlockHead" }, head), children);
816
+ return h$69("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$69("div", { className: "wb-activityBlockHead" }, head), children);
813
817
  }
814
818
  /**
815
819
  * 一条活动:状态点 + 正文 + 时间,行尾可挂动作;时间一律用它,别自己拼。
@@ -820,7 +824,7 @@ window.__ModuleLoader__.load({
820
824
  * @returns 一行。
821
825
  */
822
826
  function ActivityLine({ dot, text, at, actions }) {
823
- return h$66("div", { className: "wb-activityLine" }, dot, h$66("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$66("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$66("span", { className: "wb-activityLineActions" }, actions));
827
+ return h$69("div", { className: "wb-activityLine" }, dot, h$69("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$69("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$69("span", { className: "wb-activityLineActions" }, actions));
824
828
  }
825
829
  /**
826
830
  * 活动行尾那颗动作:给 `href` 就是外链,否则是图标钮并带上 tooltip。
@@ -834,7 +838,7 @@ window.__ModuleLoader__.load({
834
838
  */
835
839
  function ActivityAction({ label, hint, icon, href, onClick, failed }) {
836
840
  const tip = hint ?? label;
837
- if (href !== void 0) return h$66("a", {
841
+ if (href !== void 0) return h$69("a", {
838
842
  className: "wb-iconButton",
839
843
  href,
840
844
  target: "_blank",
@@ -842,13 +846,13 @@ window.__ModuleLoader__.load({
842
846
  title: tip,
843
847
  "aria-label": label
844
848
  }, icon);
845
- return h$66(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
849
+ return h$69(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
846
850
  side: "bottom",
847
851
  align: "end",
848
852
  gap: 6,
849
853
  portal: true,
850
854
  label: tip
851
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.Button, {
855
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.Button, {
852
856
  type: "button",
853
857
  variant: "ghost",
854
858
  size: "sm",
@@ -870,10 +874,10 @@ window.__ModuleLoader__.load({
870
874
  */
871
875
  function Note({ tone = "muted", as, role, children }) {
872
876
  const className = tone === "problem" ? "wb-problem" : "wb-note";
873
- return as === "span" ? h$66("span", {
877
+ return as === "span" ? h$69("span", {
874
878
  className,
875
879
  role
876
- }, children) : h$66("p", {
880
+ }, children) : h$69("p", {
877
881
  className,
878
882
  role
879
883
  }, children);
@@ -917,10 +921,10 @@ window.__ModuleLoader__.load({
917
921
  render() {
918
922
  const { reason } = this.state;
919
923
  if (reason === null) return this.props.children;
920
- return h$66(Note, { tone: "problem" }, h$66("span", null, this.props.t("panels.cardBroken", {
924
+ return h$69(Note, { tone: "problem" }, h$69("span", null, this.props.t("panels.cardBroken", {
921
925
  unit: this.props.unit,
922
926
  reason
923
- })), " ", h$66(_deepseek_ai_dsh_client_ui_primitives.Button, {
927
+ })), " ", h$69(_deepseek_ai_dsh_client_ui_primitives.Button, {
924
928
  type: "button",
925
929
  variant: "outline",
926
930
  size: "sm",
@@ -970,19 +974,19 @@ window.__ModuleLoader__.load({
970
974
  const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
971
975
  if (owner?.approval !== void 0) {
972
976
  const Render = owner.approval.render;
973
- return h$66(CardBoundary, {
977
+ return h$69(CardBoundary, {
974
978
  unit: owner.unit,
975
979
  resetKey: props.callId ?? "",
976
980
  t
977
- }, h$66(Render, {
981
+ }, h$69(Render, {
978
982
  input,
979
983
  t
980
984
  }));
981
985
  }
982
986
  const shell = props.renderShell?.(input, t);
983
- if (shell !== void 0 && shell !== null) return h$66(Fragment$23, null, shell);
987
+ if (shell !== void 0 && shell !== null) return h$69(Fragment$22, null, shell);
984
988
  if (command === "") return null;
985
- return h$66(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
989
+ return h$69(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
986
990
  code: command,
987
991
  className: "wb-approvalCommand",
988
992
  copyLabel: t("blocker.copy"),
@@ -1000,10 +1004,10 @@ window.__ModuleLoader__.load({
1000
1004
  * @returns 一个 div。
1001
1005
  */
1002
1006
  function ApprovalPlan({ rows, hint, warn, children }) {
1003
- return h$66("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$66("p", { className: "wb-approvalHint" }, hint), h$66("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$66("div", {
1007
+ return h$69("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$69("p", { className: "wb-approvalHint" }, hint), h$69("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$69("div", {
1004
1008
  className: "wb-approvalRow",
1005
1009
  key: String(index)
1006
- }, h$66("dt", { className: "wb-approvalLabel" }, row.label), h$66("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$66("p", { className: "wb-approvalWarn" }, warn));
1010
+ }, h$69("dt", { className: "wb-approvalLabel" }, row.label), h$69("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$69("p", { className: "wb-approvalWarn" }, warn));
1007
1011
  }
1008
1012
  //#endregion
1009
1013
  //#region ../shared/dist/components/CardHead.js
@@ -1020,47 +1024,47 @@ window.__ModuleLoader__.load({
1020
1024
  function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
1021
1025
  const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
1022
1026
  const platformLabel = platformTitle ?? platform ?? t("rightbar.openPlatform");
1023
- return h$66("header", { className: "wb-cardHead" }, h$66("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$66("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$66(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1027
+ return h$69("header", { className: "wb-cardHead" }, h$69("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$69("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$69(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1024
1028
  side: "bottom",
1025
1029
  align: "end",
1026
1030
  gap: 6,
1027
1031
  portal: true,
1028
1032
  label: platformLabel
1029
- }, h$66("a", {
1033
+ }, h$69("a", {
1030
1034
  className: "wb-iconButton wb-cardOpen",
1031
1035
  href: platformHref,
1032
1036
  target: "_blank",
1033
1037
  rel: "noreferrer noopener",
1034
1038
  "aria-label": platform ?? platformLabel
1035
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$66(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1039
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$69(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1036
1040
  side: "bottom",
1037
1041
  align: "end",
1038
1042
  gap: 6,
1039
1043
  portal: true,
1040
1044
  label: refreshLabel
1041
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.Button, {
1045
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.Button, {
1042
1046
  type: "button",
1043
1047
  size: "sm",
1044
1048
  variant: "ghost",
1045
1049
  className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
1046
1050
  "aria-label": refreshLabel,
1047
1051
  disabled: refreshing,
1048
- icon: h$66(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1052
+ icon: h$69(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
1049
1053
  onClick: onRefresh
1050
- })), gear === void 0 || onToggleGear === void 0 ? null : h$66(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1054
+ })), gear === void 0 || onToggleGear === void 0 ? null : h$69(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
1051
1055
  side: "bottom",
1052
1056
  align: "end",
1053
1057
  gap: 6,
1054
1058
  portal: true,
1055
1059
  label: gear
1056
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.Button, {
1060
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.Button, {
1057
1061
  type: "button",
1058
1062
  size: "sm",
1059
1063
  variant: "ghost",
1060
1064
  className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
1061
1065
  "aria-label": gear,
1062
1066
  "aria-expanded": gearOpen === true,
1063
- icon: h$66(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1067
+ icon: h$69(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
1064
1068
  onClick: onToggleGear
1065
1069
  })));
1066
1070
  }
@@ -1077,13 +1081,13 @@ window.__ModuleLoader__.load({
1077
1081
  * @returns 一个 `<section>`。
1078
1082
  */
1079
1083
  function Card({ t, title, refreshing, onRefresh, meta, head, children }) {
1080
- return h$66("section", { className: "wb-card" }, head === void 0 ? h$66(CardHead, {
1084
+ return h$69("section", { className: "wb-card" }, head === void 0 ? h$69(CardHead, {
1081
1085
  t,
1082
1086
  title,
1083
1087
  refreshing,
1084
1088
  onRefresh,
1085
1089
  meta
1086
- }) : head, h$66("div", { className: "wb-cardBody" }, children));
1090
+ }) : head, h$69("div", { className: "wb-cardBody" }, children));
1087
1091
  }
1088
1092
  var CardAnchor_module_default = { anchor: "_anchor_yq4s2_1" };
1089
1093
  //#endregion
@@ -1103,7 +1107,7 @@ window.__ModuleLoader__.load({
1103
1107
  * @returns 带 id 的占位 div。
1104
1108
  */
1105
1109
  function CardAnchor({ unit, children }) {
1106
- return h$66("div", {
1110
+ return h$69("div", {
1107
1111
  id: cardIdOf(unit),
1108
1112
  className: CardAnchor_module_default.anchor
1109
1113
  }, children);
@@ -1117,13 +1121,13 @@ window.__ModuleLoader__.load({
1117
1121
  * @returns 一枚 `StateDot state="ongoing"`,自身不带文字。
1118
1122
  */
1119
1123
  function Spinner({ size = 14, label }) {
1120
- return h$66("span", {
1124
+ return h$69("span", {
1121
1125
  className: "wb-spinner",
1122
1126
  ...label === void 0 ? { "aria-hidden": true } : {
1123
1127
  role: "status",
1124
1128
  "aria-label": label
1125
1129
  }
1126
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1130
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1127
1131
  state: "ongoing",
1128
1132
  size
1129
1133
  }));
@@ -1131,24 +1135,24 @@ window.__ModuleLoader__.load({
1131
1135
  //#endregion
1132
1136
  //#region ../shared/dist/components/ChoiceGroup.js
1133
1137
  function ChoiceMenu(input) {
1134
- const body = input.loading ? h$66("span", {
1138
+ const body = input.loading ? h$69("span", {
1135
1139
  className: "wb-choiceLoading",
1136
1140
  role: "status"
1137
- }, h$66(Spinner, { size: 14 }), h$66("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$66("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1141
+ }, h$69(Spinner, { size: 14 }), h$69("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$69("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
1138
1142
  const row = input.rowOf(option.value);
1139
- return h$66(Fragment$23, { key: option.value }, h$66("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$66("input", {
1143
+ return h$69(Fragment$22, { key: option.value }, h$69("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$69("input", {
1140
1144
  className: input.multi ? "wb-checkbox" : "wb-radio",
1141
1145
  type: input.multi ? "checkbox" : "radio",
1142
1146
  name: input.name,
1143
1147
  checked: row.checked,
1144
1148
  disabled: input.disabled,
1145
1149
  onChange: row.onSelect
1146
- }), input.multi ? h$66("span", {
1150
+ }), input.multi ? h$69("span", {
1147
1151
  className: "wb-checkboxBox",
1148
1152
  "aria-hidden": "true"
1149
- }, row.checked ? h$66(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$66("span", { className: "wb-choiceLabel" }, h$66("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$66("span", { className: "wb-choiceDescription" }, option.description))));
1153
+ }, row.checked ? h$69(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$69("span", { className: "wb-choiceLabel" }, h$69("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$69("span", { className: "wb-choiceDescription" }, option.description))));
1150
1154
  });
1151
- return h$66("div", {
1155
+ return h$69("div", {
1152
1156
  className: "wb-choiceMenu",
1153
1157
  "data-variant": input.variant,
1154
1158
  role: input.multi ? "group" : "radiogroup",
@@ -1182,7 +1186,7 @@ window.__ModuleLoader__.load({
1182
1186
  if (props.multi === true) {
1183
1187
  const values = props.values;
1184
1188
  const onChange = props.onChange;
1185
- return h$66(ChoiceMenu, {
1189
+ return h$69(ChoiceMenu, {
1186
1190
  label: common.label,
1187
1191
  name: common.name,
1188
1192
  options: common.options,
@@ -1202,7 +1206,7 @@ window.__ModuleLoader__.load({
1202
1206
  }
1203
1207
  const value = props.value;
1204
1208
  const onChange = props.onChange;
1205
- return h$66(ChoiceMenu, {
1209
+ return h$69(ChoiceMenu, {
1206
1210
  label: common.label,
1207
1211
  name: common.name,
1208
1212
  options: common.options,
@@ -1255,17 +1259,17 @@ window.__ModuleLoader__.load({
1255
1259
  function FormActions({ actions }) {
1256
1260
  if (actions.length === 0) return null;
1257
1261
  reportExtraPrimaries(actions);
1258
- return h$66("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1262
+ return h$69("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
1259
1263
  const kind = kindOf(action);
1260
1264
  const busy = action.busy === true;
1261
- return h$66(_deepseek_ai_dsh_client_ui_primitives.Button, {
1265
+ return h$69(_deepseek_ai_dsh_client_ui_primitives.Button, {
1262
1266
  key: action.key,
1263
1267
  type: "button",
1264
1268
  size: "sm",
1265
1269
  variant: variantOf(kind),
1266
1270
  className: kind === "danger" ? "wb-formActionDanger" : void 0,
1267
1271
  disabled: busy || action.disabled === true,
1268
- icon: busy ? h$66(Spinner, { size: 12 }) : void 0,
1272
+ icon: busy ? h$69(Spinner, { size: 12 }) : void 0,
1269
1273
  onClick: action.onClick
1270
1274
  }, action.label);
1271
1275
  }));
@@ -1278,7 +1282,7 @@ window.__ModuleLoader__.load({
1278
1282
  * @returns 竖排的 div。
1279
1283
  */
1280
1284
  function Rows({ children }) {
1281
- return h$66("div", { className: "wb-rows" }, children);
1285
+ return h$69("div", { className: "wb-rows" }, children);
1282
1286
  }
1283
1287
  /**
1284
1288
  * 一行键值:左边名字、右边值;要成对说明一项数据就用它,别自己写两栏。
@@ -1287,7 +1291,7 @@ window.__ModuleLoader__.load({
1287
1291
  * @returns 一行两格。
1288
1292
  */
1289
1293
  function Row({ label, value }) {
1290
- return h$66("div", { className: "wb-row" }, h$66("span", { className: "wb-rowKey" }, label), h$66("span", { className: "wb-rowValue" }, value));
1294
+ return h$69("div", { className: "wb-row" }, h$69("span", { className: "wb-rowKey" }, label), h$69("span", { className: "wb-rowValue" }, value));
1291
1295
  }
1292
1296
  //#endregion
1293
1297
  //#region ../shared/dist/components/ConfirmBar.js
@@ -1304,19 +1308,19 @@ window.__ModuleLoader__.load({
1304
1308
  * @returns 一个 `role="group"` 的条;`actions` 空数组时最后那一块不渲染。
1305
1309
  */
1306
1310
  function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
1307
- return h$66("div", {
1311
+ return h$69("div", {
1308
1312
  className: "wb-confirmBar",
1309
1313
  role: "group",
1310
1314
  "aria-label": label ?? (typeof title === "string" ? title : void 0),
1311
1315
  "aria-busy": busy
1312
- }, h$66("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$66("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$66(Rows, null, rows.map((row) => h$66(Row, {
1316
+ }, h$69("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$69("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$69(Rows, null, rows.map((row) => h$69(Row, {
1313
1317
  key: row.key,
1314
1318
  label: row.label,
1315
1319
  value: row.value
1316
- }))), problem === void 0 ? null : h$66(Note, {
1320
+ }))), problem === void 0 ? null : h$69(Note, {
1317
1321
  tone: "problem",
1318
1322
  role: "alert"
1319
- }, problem), h$66(FormActions, { actions }));
1323
+ }, problem), h$69(FormActions, { actions }));
1320
1324
  }
1321
1325
  //#endregion
1322
1326
  //#region ../shared/dist/components/Field.js
@@ -1328,7 +1332,7 @@ window.__ModuleLoader__.load({
1328
1332
  * @returns 一个 `<label>`,点标签会聚焦里面的控件。
1329
1333
  */
1330
1334
  function Field({ label, hint, children }) {
1331
- return h$66("label", { className: "wb-field" }, h$66("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$66("span", { className: "wb-fieldHint" }, hint));
1335
+ return h$69("label", { className: "wb-field" }, h$69("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$69("span", { className: "wb-fieldHint" }, hint));
1332
1336
  }
1333
1337
  //#endregion
1334
1338
  //#region ../shared/dist/components/FormRows.js
@@ -1338,7 +1342,7 @@ window.__ModuleLoader__.load({
1338
1342
  * @returns 竖排的 div。
1339
1343
  */
1340
1344
  function FormRows({ children }) {
1341
- return h$66("div", { className: "wb-formRows" }, children);
1345
+ return h$69("div", { className: "wb-formRows" }, children);
1342
1346
  }
1343
1347
  /**
1344
1348
  * 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
@@ -1351,14 +1355,14 @@ window.__ModuleLoader__.load({
1351
1355
  * @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
1352
1356
  */
1353
1357
  function FormRow({ label, htmlFor, hint, problem, layout = "inline", children }) {
1354
- return h$66("div", {
1358
+ return h$69("div", {
1355
1359
  className: "wb-formRow",
1356
1360
  "data-layout": layout,
1357
1361
  "data-wb-problem": problem === void 0 ? void 0 : ""
1358
- }, h$66("label", {
1362
+ }, h$69("label", {
1359
1363
  className: "wb-formLabel",
1360
1364
  htmlFor
1361
- }, label), h$66("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$66("span", { className: "wb-formHint" }, hint) : h$66("span", { className: "wb-formProblem" }, problem));
1365
+ }, label), h$69("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$69("span", { className: "wb-formHint" }, hint) : h$69("span", { className: "wb-formProblem" }, problem));
1362
1366
  }
1363
1367
  //#endregion
1364
1368
  //#region ../shared/dist/components/FormNodes.js
@@ -1505,7 +1509,7 @@ window.__ModuleLoader__.load({
1505
1509
  * @returns `FormRow` 组成的数组;没有可画的格子时给空数组。
1506
1510
  */
1507
1511
  function formRowsOf(args) {
1508
- return args.fields.map((field) => h$66(FormRow, {
1512
+ return args.fields.map((field) => h$69(FormRow, {
1509
1513
  key: field.key,
1510
1514
  label: field.label,
1511
1515
  htmlFor: controlIdOf(field.key),
@@ -1581,13 +1585,13 @@ window.__ModuleLoader__.load({
1581
1585
  */
1582
1586
  function Form(props) {
1583
1587
  const { fields, onSubmit, submit, cancel, extra, busy = false, disabled = false, problem } = props;
1584
- const [done, setDone] = useState$37(false);
1585
- const [reveal, setReveal] = useState$37(0);
1586
- const rootRef = useRef$23(null);
1588
+ const [done, setDone] = useState$42(false);
1589
+ const [reveal, setReveal] = useState$42(0);
1590
+ const rootRef = useRef$24(null);
1587
1591
  const shown = visibleFieldsOf(fields);
1588
1592
  const problems = formProblemsOf(shown, done);
1589
1593
  reportDuplicateKeys(shown);
1590
- useEffect$29(() => {
1594
+ useEffect$31(() => {
1591
1595
  if (reveal === 0) return;
1592
1596
  const root = rootRef.current;
1593
1597
  if (root !== null) revealFirstProblem(root);
@@ -1602,7 +1606,7 @@ window.__ModuleLoader__.load({
1602
1606
  }
1603
1607
  onSubmit(outcome.values);
1604
1608
  };
1605
- return h$66("form", {
1609
+ return h$69("form", {
1606
1610
  className: "wb-form",
1607
1611
  ref: rootRef,
1608
1612
  noValidate: true,
@@ -1610,15 +1614,15 @@ window.__ModuleLoader__.load({
1610
1614
  event.preventDefault();
1611
1615
  submitForm();
1612
1616
  }
1613
- }, h$66(FormRows, null, formRowsOf({
1617
+ }, h$69(FormRows, null, formRowsOf({
1614
1618
  fields: shown,
1615
1619
  problems,
1616
1620
  showProblem: done,
1617
1621
  busy
1618
- })), problem === void 0 ? null : h$66(Note, {
1622
+ })), problem === void 0 ? null : h$69(Note, {
1619
1623
  tone: "problem",
1620
1624
  role: "alert"
1621
- }, problem), h$66(FormActions, { actions: formActionsOf({
1625
+ }, problem), h$69(FormActions, { actions: formActionsOf({
1622
1626
  extra,
1623
1627
  cancel,
1624
1628
  submit,
@@ -1639,7 +1643,7 @@ window.__ModuleLoader__.load({
1639
1643
  * @returns 一个 `<a>`。
1640
1644
  */
1641
1645
  function Link({ href, children, title, external = true, className }) {
1642
- return h$66("a", {
1646
+ return h$69("a", {
1643
1647
  className: className === void 0 ? "wb-link" : `wb-link ${className}`,
1644
1648
  href,
1645
1649
  ...title === void 0 ? {} : { title },
@@ -1647,7 +1651,7 @@ window.__ModuleLoader__.load({
1647
1651
  target: "_blank",
1648
1652
  rel: "noopener noreferrer"
1649
1653
  } : {}
1650
- }, children, external ? h$66(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1654
+ }, children, external ? h$69(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
1651
1655
  }
1652
1656
  //#endregion
1653
1657
  //#region ../shared/dist/contract/long-task.js
@@ -1739,7 +1743,7 @@ window.__ModuleLoader__.load({
1739
1743
  //#endregion
1740
1744
  //#region ../shared/dist/components/LongTaskRow.js
1741
1745
  function RowLink({ href, text }) {
1742
- return h$66(Link, {
1746
+ return h$69(Link, {
1743
1747
  href,
1744
1748
  className: "wb-longTaskLink"
1745
1749
  }, text);
@@ -1759,9 +1763,9 @@ window.__ModuleLoader__.load({
1759
1763
  * @returns 一行长任务。
1760
1764
  */
1761
1765
  function LongTaskRow(props) {
1762
- const [stepsOpen, setStepsOpen] = useState$37(false);
1763
- const [rawOpen, setRawOpen] = useState$37(false);
1764
- const [armed, setArmed] = useState$37(false);
1766
+ const [stepsOpen, setStepsOpen] = useState$42(false);
1767
+ const [rawOpen, setRawOpen] = useState$42(false);
1768
+ const [armed, setArmed] = useState$42(false);
1765
1769
  const failed = props.status === "failed";
1766
1770
  const problem = props.problem ?? "";
1767
1771
  const raw = (props.raw ?? "").trim();
@@ -1769,7 +1773,7 @@ window.__ModuleLoader__.load({
1769
1773
  const stop = props.stop;
1770
1774
  const busy = stop?.busy === true;
1771
1775
  const stopWhy = stop?.failed ?? "";
1772
- useEffect$29(() => {
1776
+ useEffect$31(() => {
1773
1777
  if (!armed) return void 0;
1774
1778
  const timer = setTimeout(() => setArmed(false), LONG_TASK_STOP_ARM_MS);
1775
1779
  return () => clearTimeout(timer);
@@ -1788,14 +1792,14 @@ window.__ModuleLoader__.load({
1788
1792
  setArmed(false);
1789
1793
  stop.onStop();
1790
1794
  };
1791
- return h$66("div", { className: "wb-longTask" }, h$66("p", { className: "wb-longTaskHead" }, h$66(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1795
+ return h$69("div", { className: "wb-longTask" }, h$69("p", { className: "wb-longTaskHead" }, h$69(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
1792
1796
  state: longTaskDot(props.status),
1793
1797
  size: 10
1794
- }), h$66("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$66(RowLink, {
1798
+ }), h$69("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$69(RowLink, {
1795
1799
  href: link.href,
1796
1800
  key: `${link.text}@${link.href}`,
1797
1801
  text: link.text
1798
- })), stop === void 0 ? null : h$66("button", {
1802
+ })), stop === void 0 ? null : h$69("button", {
1799
1803
  type: "button",
1800
1804
  className: `wb-longTaskStop${armed ? " wb-longTaskStopArmed" : ""}`,
1801
1805
  "data-stop-state": longTaskStopStage({
@@ -1806,31 +1810,31 @@ window.__ModuleLoader__.load({
1806
1810
  disabled: busy,
1807
1811
  onClick: onStopPress,
1808
1812
  onBlur: () => setArmed(false)
1809
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$66("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$66("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$66("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$66(Fragment$23, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$66(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1813
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$69("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$69("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$69("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$69(Fragment$22, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$69(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1810
1814
  className: "wb-longTaskDump",
1811
- icon: h$66(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1815
+ icon: h$69(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
1812
1816
  title: props.stepsTitle,
1813
1817
  open: stepsOpen,
1814
1818
  expandable: true,
1815
1819
  expandOnRowClick: true,
1816
1820
  previewChevron: true,
1817
1821
  onToggle: () => setStepsOpen(!stepsOpen)
1818
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1822
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1819
1823
  code: steps.join("\n"),
1820
1824
  className: "wb-longTaskDump",
1821
1825
  showHeader: props.copyLabel !== void 0,
1822
1826
  copyLabel: props.copyLabel ?? "",
1823
1827
  copiedLabel: props.copiedLabel ?? ""
1824
- })), raw === "" || props.rawTitle === void 0 ? null : h$66(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1828
+ })), raw === "" || props.rawTitle === void 0 ? null : h$69(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
1825
1829
  className: "wb-longTaskDump",
1826
- icon: h$66(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1830
+ icon: h$69(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
1827
1831
  title: props.rawTitle,
1828
1832
  open: rawOpen,
1829
1833
  expandable: true,
1830
1834
  expandOnRowClick: true,
1831
1835
  previewChevron: true,
1832
1836
  onToggle: () => setRawOpen(!rawOpen)
1833
- }, h$66(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1837
+ }, h$69(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
1834
1838
  code: raw,
1835
1839
  className: "wb-longTaskDump",
1836
1840
  showHeader: props.copyLabel !== void 0,
@@ -1846,13 +1850,13 @@ window.__ModuleLoader__.load({
1846
1850
  * @returns 一叠占位条。
1847
1851
  */
1848
1852
  function SkeletonRows({ rows = 4 }) {
1849
- return h$66("div", {
1853
+ return h$69("div", {
1850
1854
  className: "wb-skeleton",
1851
1855
  "aria-hidden": "true"
1852
- }, Array.from({ length: rows }, (_, index) => h$66("span", {
1856
+ }, Array.from({ length: rows }, (_, index) => h$69("span", {
1853
1857
  key: index,
1854
1858
  className: "wb-skeletonRow"
1855
- }, h$66("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$66("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1859
+ }, h$69("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$69("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
1856
1860
  }
1857
1861
  /**
1858
1862
  * 居中一屏:要他先选一个 / 正在读 / 读不到时用它占住卡片版面。
@@ -1865,13 +1869,13 @@ window.__ModuleLoader__.load({
1865
1869
  * @returns 一个 `role="status"` 的居中块。
1866
1870
  */
1867
1871
  function CenteredState({ icon, title, hint, detail, action, compact = false }) {
1868
- return h$66("div", {
1872
+ return h$69("div", {
1869
1873
  className: compact ? "wb-centered wb-centeredCompact" : "wb-centered",
1870
1874
  role: "status"
1871
- }, icon === null ? null : h$66("span", {
1875
+ }, icon === null ? null : h$69("span", {
1872
1876
  className: "wb-centeredHero",
1873
1877
  "aria-hidden": "true"
1874
- }, icon), h$66("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$66("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$66("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$66("div", { className: "wb-centeredAction" }, action));
1878
+ }, icon), h$69("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$69("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$69("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$69("div", { className: "wb-centeredAction" }, action));
1875
1879
  }
1876
1880
  /**
1877
1881
  * 就绪但空:它只是 `CenteredState` 的简写,标题就是那句空态文案。
@@ -1881,7 +1885,7 @@ window.__ModuleLoader__.load({
1881
1885
  * @returns 一个居中块。
1882
1886
  */
1883
1887
  function EmptyState({ text, icon = null, compact = false }) {
1884
- return h$66(CenteredState, {
1888
+ return h$69(CenteredState, {
1885
1889
  icon,
1886
1890
  title: text,
1887
1891
  compact
@@ -1899,7 +1903,7 @@ window.__ModuleLoader__.load({
1899
1903
  * @returns 一组按钮。
1900
1904
  */
1901
1905
  function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
1902
- return h$66(FormActions, { actions: [{
1906
+ return h$69(FormActions, { actions: [{
1903
1907
  key: "cancel",
1904
1908
  label: labels.cancel,
1905
1909
  kind: "default",
@@ -1932,7 +1936,7 @@ window.__ModuleLoader__.load({
1932
1936
  * @returns 一颗 `<button>`。
1933
1937
  */
1934
1938
  function selectTriggerNode(args) {
1935
- return h$66("button", {
1939
+ return h$69("button", {
1936
1940
  type: "button",
1937
1941
  id: args.id,
1938
1942
  className: args.className,
@@ -1943,7 +1947,7 @@ window.__ModuleLoader__.load({
1943
1947
  "aria-label": args.ariaLabel,
1944
1948
  title: args.title,
1945
1949
  onClick: args.onOpen
1946
- }, args.iconOnly ? h$66("span", { className: "wb-selectIcon" }, args.icon) : h$66(Fragment$23, null, args.icon === void 0 ? null : h$66("span", { className: "wb-selectIcon" }, args.icon), h$66("span", { className: "wb-selectValue" }, args.value), h$66("span", { className: "wb-selectChevron" }, h$66(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1950
+ }, args.iconOnly ? h$69("span", { className: "wb-selectIcon" }, args.icon) : h$69(Fragment$22, null, args.icon === void 0 ? null : h$69("span", { className: "wb-selectIcon" }, args.icon), h$69("span", { className: "wb-selectValue" }, args.value), h$69("span", { className: "wb-selectChevron" }, h$69(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
1947
1951
  }
1948
1952
  /**
1949
1953
  * 名单还没读到时的触发器:禁用 + `aria-busy` 的按钮,`SelectField` 在 `loading` 那档画它。
@@ -1955,7 +1959,7 @@ window.__ModuleLoader__.load({
1955
1959
  * @returns 一颗禁用且 `aria-busy` 的按钮。
1956
1960
  */
1957
1961
  function selectLoadingNode(args) {
1958
- return h$66("button", {
1962
+ return h$69("button", {
1959
1963
  type: "button",
1960
1964
  id: args.id,
1961
1965
  className: `${args.className} wb-selectLoading`,
@@ -1964,7 +1968,7 @@ window.__ModuleLoader__.load({
1964
1968
  "aria-invalid": args.invalid || void 0,
1965
1969
  "aria-label": args.ariaLabel,
1966
1970
  title: args.loadingText
1967
- }, h$66("span", { className: "wb-selectValue" }, h$66(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$66("span", { className: "wb-selectChevron" }, h$66(Spinner, { size: 14 })));
1971
+ }, h$69("span", { className: "wb-selectValue" }, h$69(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$69("span", { className: "wb-selectChevron" }, h$69(Spinner, { size: 14 })));
1968
1972
  }
1969
1973
  //#endregion
1970
1974
  //#region ../shared/dist/components/TextField.js
@@ -1974,7 +1978,7 @@ window.__ModuleLoader__.load({
1974
1978
  * @returns 输入框元素;`className` 是追加在基础类名之后,而不是替换它。
1975
1979
  */
1976
1980
  function TextField({ invalid = false, className, ...rest }) {
1977
- return h$66("input", {
1981
+ return h$69("input", {
1978
1982
  ...rest,
1979
1983
  className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
1980
1984
  "aria-invalid": invalid || void 0
@@ -1997,7 +2001,7 @@ window.__ModuleLoader__.load({
1997
2001
  ...option.icon === void 0 ? {} : { icon: option.icon },
1998
2002
  ...option.disabled === true ? { disabled: true } : {}
1999
2003
  };
2000
- const revealed = (node) => h$66("span", {
2004
+ const revealed = (node) => h$69("span", {
2001
2005
  className: "wb-selectReveal",
2002
2006
  "data-wb-select-reveal": ""
2003
2007
  }, node);
@@ -2013,20 +2017,20 @@ window.__ModuleLoader__.load({
2013
2017
  return found instanceof HTMLElement ? found : null;
2014
2018
  }
2015
2019
  function useRevealOnOpen(open, revealId) {
2016
- useEffect$29(() => {
2020
+ useEffect$31(() => {
2017
2021
  if (!open || revealId === void 0) return;
2018
2022
  revealNode()?.scrollIntoView({ block: "nearest" });
2019
2023
  }, [open, revealId]);
2020
2024
  }
2021
2025
  function selectValueNode(current, renderValue, placeholder) {
2022
- if (current === void 0) return h$66("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2026
+ if (current === void 0) return h$69("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
2023
2027
  return renderValue === void 0 ? current.label : renderValue(current);
2024
2028
  }
2025
2029
  function searchNode(args) {
2026
- return h$66("span", {
2030
+ return h$69("span", {
2027
2031
  ref: args.boxRef,
2028
2032
  className: args.className
2029
- }, h$66("span", { className: "wb-selectSearchIcon" }, h$66(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$66(TextField, {
2033
+ }, h$69("span", { className: "wb-selectSearchIcon" }, h$69(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$69(TextField, {
2030
2034
  id: args.id,
2031
2035
  name: args.name,
2032
2036
  className: "wb-selectSearchInput",
@@ -2041,7 +2045,7 @@ window.__ModuleLoader__.load({
2041
2045
  }));
2042
2046
  }
2043
2047
  function menuNode(args) {
2044
- return h$66(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2048
+ return h$69(_deepseek_ai_dsh_client_ui_primitives.Menu, {
2045
2049
  open: args.open,
2046
2050
  portal: true,
2047
2051
  className: "wb-selectAnchor",
@@ -2058,11 +2062,11 @@ window.__ModuleLoader__.load({
2058
2062
  });
2059
2063
  }
2060
2064
  function framed(label, hint, className, control) {
2061
- const inner = label === void 0 ? hint === void 0 ? control : h$66("span", { className: "wb-select" }, control, h$66("span", { className: "wb-selectHint" }, hint)) : h$66(Field, {
2065
+ const inner = label === void 0 ? hint === void 0 ? control : h$69("span", { className: "wb-select" }, control, h$69("span", { className: "wb-selectHint" }, hint)) : h$69(Field, {
2062
2066
  label,
2063
2067
  hint
2064
2068
  }, control);
2065
- return className === void 0 ? inner : h$66("div", { className }, inner);
2069
+ return className === void 0 ? inner : h$69("div", { className }, inner);
2066
2070
  }
2067
2071
  /** 算候选项用来匹配搜索的文本:有 `searchText` 就用它,否则取字符串标签;标签不是字符串又没给它是空串(这项搜不到)。 */
2068
2072
  function searchTextOf(option) {
@@ -2114,24 +2118,24 @@ window.__ModuleLoader__.load({
2114
2118
  }
2115
2119
  function useSelectState(props) {
2116
2120
  const { options, filter = defaultSelectFilter, emptyText, open: openProp, onOpenChange } = props;
2117
- const [openState, setOpenState] = useState$37(false);
2118
- const [query, setQuery] = useState$37("");
2119
- const [cursor, setCursor] = useState$37(null);
2120
- const boxRef = useRef$23(null);
2121
- const triggerRef = useRef$23(null);
2122
- const wasOpenRef = useRef$23(false);
2123
- const pickedRef = useRef$23(false);
2124
- const closedByUsRef = useRef$23(false);
2121
+ const [openState, setOpenState] = useState$42(false);
2122
+ const [query, setQuery] = useState$42("");
2123
+ const [cursor, setCursor] = useState$42(null);
2124
+ const boxRef = useRef$24(null);
2125
+ const triggerRef = useRef$24(null);
2126
+ const wasOpenRef = useRef$24(false);
2127
+ const pickedRef = useRef$24(false);
2128
+ const closedByUsRef = useRef$24(false);
2125
2129
  const open = openProp ?? openState;
2126
2130
  const setOpen = (next) => {
2127
2131
  if (openProp === void 0) setOpenState(next);
2128
2132
  onOpenChange?.(next);
2129
2133
  };
2130
- useEffect$29(() => {
2134
+ useEffect$31(() => {
2131
2135
  if (!open || props.search === false) return;
2132
2136
  boxRef.current?.querySelector("input")?.focus();
2133
2137
  }, [open, props.search]);
2134
- useEffect$29(() => {
2138
+ useEffect$31(() => {
2135
2139
  if (open) {
2136
2140
  wasOpenRef.current = true;
2137
2141
  return;
@@ -2201,7 +2205,7 @@ window.__ModuleLoader__.load({
2201
2205
  ariaLabel,
2202
2206
  loadingText
2203
2207
  }));
2204
- if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$66(TextField, {
2208
+ if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$69(TextField, {
2205
2209
  id,
2206
2210
  name,
2207
2211
  className: "wb-selectFallback",
@@ -2284,11 +2288,11 @@ window.__ModuleLoader__.load({
2284
2288
  * @returns 一个 `role="group"` 的 section。
2285
2289
  */
2286
2290
  function SettingsSection({ label, title, action, children }) {
2287
- return h$66("section", {
2291
+ return h$69("section", {
2288
2292
  className: "wb-settings",
2289
2293
  role: "group",
2290
2294
  "aria-label": label
2291
- }, h$66("header", { className: "wb-settingsHead" }, h$66("span", { className: "wb-settingsTitle" }, title), action), children);
2295
+ }, h$69("header", { className: "wb-settingsHead" }, h$69("span", { className: "wb-settingsTitle" }, title), action), children);
2292
2296
  }
2293
2297
  //#endregion
2294
2298
  //#region ../shared/dist/components/Stack.js
@@ -2298,7 +2302,7 @@ window.__ModuleLoader__.load({
2298
2302
  * @returns 竖排的 div。
2299
2303
  */
2300
2304
  function Stack({ children }) {
2301
- return h$66("div", { className: "wb-stack" }, children);
2305
+ return h$69("div", { className: "wb-stack" }, children);
2302
2306
  }
2303
2307
  //#endregion
2304
2308
  //#region ../shared/dist/components/StateBlock.js
@@ -2313,12 +2317,12 @@ window.__ModuleLoader__.load({
2313
2317
  * @returns 一个 div。
2314
2318
  */
2315
2319
  function StateBlock({ title, dot, hint, actions, resolving, children }) {
2316
- return h$66("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$66("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$66("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$66("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$66("div", { className: "wb-stateBlockActions" }, actions));
2320
+ return h$69("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$69("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$69("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$69("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$69("div", { className: "wb-stateBlockActions" }, actions));
2317
2321
  }
2318
2322
  //#endregion
2319
2323
  //#region ../shared/dist/components/icons.js
2320
2324
  function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
2321
- return h$66("svg", {
2325
+ return h$69("svg", {
2322
2326
  width: size,
2323
2327
  height: size,
2324
2328
  viewBox,
@@ -2335,10 +2339,10 @@ window.__ModuleLoader__.load({
2335
2339
  * @returns 一枚 `aria-hidden` 的 svg。
2336
2340
  */
2337
2341
  function IconConversation({ size = 16 }) {
2338
- return h$66(Shell, {
2342
+ return h$69(Shell, {
2339
2343
  size,
2340
2344
  strokeWidth: 1.3
2341
- }, h$66("path", {
2345
+ }, h$69("path", {
2342
2346
  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",
2343
2347
  stroke: "currentColor",
2344
2348
  strokeLinejoin: "round"
@@ -2353,30 +2357,30 @@ window.__ModuleLoader__.load({
2353
2357
  * @returns 一枚 `aria-hidden` 的 svg。
2354
2358
  */
2355
2359
  function IconBrandMark({ size = 24 }) {
2356
- return h$66(Shell, {
2360
+ return h$69(Shell, {
2357
2361
  size,
2358
2362
  viewBox: "0 0 64 64"
2359
- }, h$66("path", {
2363
+ }, h$69("path", {
2360
2364
  d: BRAND_FRAME,
2361
2365
  fill: "currentColor",
2362
2366
  fillRule: "evenodd"
2363
- }), h$66("rect", {
2367
+ }), h$69("rect", {
2364
2368
  x: 27.5,
2365
2369
  y: 48,
2366
2370
  width: 9,
2367
2371
  height: 4.75,
2368
2372
  fill: "currentColor"
2369
- }), h$66("rect", {
2373
+ }), h$69("rect", {
2370
2374
  x: 19,
2371
2375
  y: 52.75,
2372
2376
  width: 26,
2373
2377
  height: 4.75,
2374
2378
  rx: 2.375,
2375
2379
  fill: "currentColor"
2376
- }), h$66("g", { transform: BRAND_TAIL_TRANSFORM }, h$66("path", {
2380
+ }), h$69("g", { transform: BRAND_TAIL_TRANSFORM }, h$69("path", {
2377
2381
  d: BRAND_TAIL,
2378
2382
  fill: "currentColor"
2379
- }), h$66("circle", {
2383
+ }), h$69("circle", {
2380
2384
  cx: 6.885,
2381
2385
  cy: 13.742,
2382
2386
  r: 1.95,
@@ -2389,30 +2393,30 @@ window.__ModuleLoader__.load({
2389
2393
  * @returns 一枚 `aria-hidden` 的 svg。
2390
2394
  */
2391
2395
  function IconOpencli({ size = 16 }) {
2392
- return h$66(Shell, {
2396
+ return h$69(Shell, {
2393
2397
  size,
2394
2398
  viewBox: "0 0 64 64"
2395
- }, h$66("defs", null, h$66("linearGradient", {
2399
+ }, h$69("defs", null, h$69("linearGradient", {
2396
2400
  id: "opencli-mark",
2397
2401
  x1: "0%",
2398
2402
  y1: "0%",
2399
2403
  x2: "100%",
2400
2404
  y2: "100%"
2401
- }, h$66("stop", {
2405
+ }, h$69("stop", {
2402
2406
  offset: "0%",
2403
2407
  stopColor: "#00e5a0"
2404
- }), h$66("stop", {
2408
+ }), h$69("stop", {
2405
2409
  offset: "50%",
2406
2410
  stopColor: "#00b4d8"
2407
- }), h$66("stop", {
2411
+ }), h$69("stop", {
2408
2412
  offset: "100%",
2409
2413
  stopColor: "#7b61ff"
2410
- }))), h$66("rect", {
2414
+ }))), h$69("rect", {
2411
2415
  width: 64,
2412
2416
  height: 64,
2413
2417
  rx: 14,
2414
2418
  fill: "#0a0a0f"
2415
- }), h$66("text", {
2419
+ }), h$69("text", {
2416
2420
  x: "50%",
2417
2421
  y: "54%",
2418
2422
  dominantBaseline: "middle",
@@ -2429,10 +2433,10 @@ window.__ModuleLoader__.load({
2429
2433
  * @returns 一枚 `aria-hidden` 的 svg。
2430
2434
  */
2431
2435
  function IconNpm({ size = 16 }) {
2432
- return h$66(Shell, {
2436
+ return h$69(Shell, {
2433
2437
  size,
2434
2438
  viewBox: "0 0 1024 1024"
2435
- }, h$66("path", {
2439
+ }, h$69("path", {
2436
2440
  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",
2437
2441
  fill: "#CB3837"
2438
2442
  }));
@@ -2443,37 +2447,37 @@ window.__ModuleLoader__.load({
2443
2447
  * @returns 一枚 `aria-hidden` 的 svg。
2444
2448
  */
2445
2449
  function IconModuleMark({ size = 16 }) {
2446
- return h$66(Shell, {
2450
+ return h$69(Shell, {
2447
2451
  size,
2448
2452
  viewBox: "0 0 24 24"
2449
- }, h$66("defs", null, h$66("linearGradient", {
2453
+ }, h$69("defs", null, h$69("linearGradient", {
2450
2454
  id: "workbench-module-mark",
2451
2455
  x1: "0%",
2452
2456
  y1: "0%",
2453
2457
  x2: "100%",
2454
2458
  y2: "100%"
2455
- }, h$66("stop", {
2459
+ }, h$69("stop", {
2456
2460
  offset: "0%",
2457
2461
  stopColor: "#3b82f6"
2458
- }), h$66("stop", {
2462
+ }), h$69("stop", {
2459
2463
  offset: "55%",
2460
2464
  stopColor: "#8b5cf6"
2461
- }), h$66("stop", {
2465
+ }), h$69("stop", {
2462
2466
  offset: "100%",
2463
2467
  stopColor: "#14b8a6"
2464
- }))), h$66("rect", {
2468
+ }))), h$69("rect", {
2465
2469
  width: 24,
2466
2470
  height: 24,
2467
2471
  rx: 7,
2468
2472
  fill: "url(#workbench-module-mark)"
2469
- }), h$66("rect", {
2473
+ }), h$69("rect", {
2470
2474
  x: "4.6",
2471
2475
  y: "4.6",
2472
2476
  width: "6.2",
2473
2477
  height: "6.2",
2474
2478
  rx: "1.9",
2475
2479
  fill: "#ffffff"
2476
- }), h$66("rect", {
2480
+ }), h$69("rect", {
2477
2481
  x: "13.2",
2478
2482
  y: "4.6",
2479
2483
  width: "6.2",
@@ -2481,7 +2485,7 @@ window.__ModuleLoader__.load({
2481
2485
  rx: "1.9",
2482
2486
  fill: "#ffffff",
2483
2487
  fillOpacity: .78
2484
- }), h$66("rect", {
2488
+ }), h$69("rect", {
2485
2489
  x: "4.6",
2486
2490
  y: "13.2",
2487
2491
  width: "6.2",
@@ -2489,7 +2493,7 @@ window.__ModuleLoader__.load({
2489
2493
  rx: "1.9",
2490
2494
  fill: "#ffffff",
2491
2495
  fillOpacity: .78
2492
- }), h$66("rect", {
2496
+ }), h$69("rect", {
2493
2497
  x: "13.2",
2494
2498
  y: "13.2",
2495
2499
  width: "6.2",
@@ -2504,7 +2508,7 @@ window.__ModuleLoader__.load({
2504
2508
  * @returns 一枚 `aria-hidden` 的 svg。
2505
2509
  */
2506
2510
  function IconPanelScreen({ size = 16 }) {
2507
- return h$66("svg", {
2511
+ return h$69("svg", {
2508
2512
  width: size,
2509
2513
  height: size,
2510
2514
  viewBox: "0 0 1024 1024",
@@ -2515,7 +2519,7 @@ window.__ModuleLoader__.load({
2515
2519
  display: "block",
2516
2520
  overflow: "hidden"
2517
2521
  }
2518
- }, h$66("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" }));
2522
+ }, h$69("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" }));
2519
2523
  }
2520
2524
  //#endregion
2521
2525
  //#region ../shared/dist/config/storage.js
@@ -2534,6 +2538,12 @@ window.__ModuleLoader__.load({
2534
2538
  else window.localStorage.setItem(key, value);
2535
2539
  } catch {}
2536
2540
  }
2541
+ //#endregion
2542
+ //#region ../shared/dist/contract/approval.js
2543
+ /**
2544
+ * agent 自己那句"这次想干什么"的参数名:插件命令族必填,审批屏把它画在详情座里,不进标题。
2545
+ */
2546
+ var APPROVAL_NOTE_ARG = "approval_note";
2537
2547
  /**
2538
2548
  * 判一个名字是不是范围查法,不是问这条事实存不存在。
2539
2549
  * @param name 事实名或范围名。
@@ -2757,9 +2767,13 @@ window.__ModuleLoader__.load({
2757
2767
  }
2758
2768
  //#endregion
2759
2769
  //#region ../shared/dist/contract/needs.js
2770
+ var REGISTRY_PATTERN = /^(?:https?|file):\/\//;
2760
2771
  function text(value) {
2761
2772
  return typeof value === "string" ? value.trim() : "";
2762
2773
  }
2774
+ function isRecord(value) {
2775
+ return typeof value === "object" && value !== null && !Array.isArray(value);
2776
+ }
2763
2777
  /**
2764
2778
  * 一条 need 的稳定标识:作者写 `id` 就用它,否则 `kind:name`。
2765
2779
  * @param need 一条 need。
@@ -2768,11 +2782,40 @@ window.__ModuleLoader__.load({
2768
2782
  function needIdOf(need) {
2769
2783
  return need.id === void 0 || need.id.trim() === "" ? `${need.kind}:${need.name}` : need.id;
2770
2784
  }
2785
+ function binInstallProblemsOf(raw, at) {
2786
+ if (raw === void 0) return [];
2787
+ if (!isRecord(raw)) return [`${at}.install 要是对象`];
2788
+ const errors = [];
2789
+ for (const key of Object.keys(raw)) if (![
2790
+ "kind",
2791
+ "line",
2792
+ "platforms",
2793
+ "package",
2794
+ "registryEnv",
2795
+ "registryDefault"
2796
+ ].includes(key)) errors.push(`${at}.install 有不认识的字段 ${key}`);
2797
+ const kind = text(raw["kind"]);
2798
+ if (kind !== "command" && kind !== "npm") errors.push(`${at}.install.kind 只认 command(一条命令)或 npm(一个包,装进隔离运行时)`);
2799
+ if (kind === "command" && text(raw["line"]) === "") errors.push(`${at}.install.line 没写 —— 要一条能直接粘进终端的命令`);
2800
+ if (kind === "npm" && text(raw["package"]) === "") errors.push(`${at}.install.package 没写 —— 这个命令由哪个 npm 包提供`);
2801
+ if (raw["registryDefault"] !== void 0 && !REGISTRY_PATTERN.test(text(raw["registryDefault"]))) errors.push(`${at}.install.registryDefault 要是 http(s):// 或 file:// 的源地址`);
2802
+ if (raw["platforms"] !== void 0) {
2803
+ if (!Array.isArray(raw["platforms"]) || raw["platforms"].length === 0) errors.push(`${at}.install.platforms 要是非空数组`);
2804
+ else if (raw["platforms"].some((one) => ![
2805
+ "darwin",
2806
+ "linux",
2807
+ "win32"
2808
+ ].includes(text(one)))) errors.push(`${at}.install.platforms 只认 darwin / linux / win32`);
2809
+ }
2810
+ return errors;
2811
+ }
2771
2812
  function perKindProblemsOf(kind, raw, at) {
2772
2813
  const errors = [];
2773
2814
  if (kind === "bin" || kind === "lib" || kind === "env") {
2774
2815
  if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
2775
2816
  }
2817
+ if (kind === "bin") errors.push(...binInstallProblemsOf(raw["install"], at));
2818
+ if (raw["docs"] !== void 0 && text(raw["docs"]) === "") errors.push(`${at}.docs 是空串`);
2776
2819
  if (kind === "extension") {
2777
2820
  if (text(raw["runtime"]) === "") errors.push(`${at}.runtime 没写 —— 扩展属于哪个运行时(如 opencli)`);
2778
2821
  if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
@@ -3104,7 +3147,42 @@ window.__ModuleLoader__.load({
3104
3147
  "panels.market.confirmUninstallAck": "I understand: using it again means reinstalling it.",
3105
3148
  "panels.market.confirmYes": "Uninstall",
3106
3149
  "panels.market.confirmNo": "Cancel",
3150
+ "panels.market.noMarketSource": "The index has no newer version of this module (refresh the index and retry)",
3107
3151
  "panels.market.failed": "Failed: {reason}",
3152
+ "panels.market.askAgent": "Ask the agent",
3153
+ "panels.market.askAgentCopied": "Copied",
3154
+ "panels.market.askAgentText": "This workbench module cannot be used: \"{name}\" (unit {unit}) — {reason}. Work out what is missing and how to add it, then confirm it works.",
3155
+ "panels.market.failure.permission": "Didn't install: no write access",
3156
+ "panels.market.failure.diskFull": "Didn't install: the disk is full",
3157
+ "panels.market.failure.sandbox": "Didn't install: the system blocked it",
3158
+ "panels.market.failure.unknown": "Didn't install: cause not recognised",
3159
+ "panels.market.failure.factOwner": "{path} belongs to {owner}, and this account ({me}) cannot write to it. Hand it back to yourself (asks for your login password).",
3160
+ "panels.market.failure.factMode": "{path} is mode {mode}, so this account cannot write to it.",
3161
+ "panels.market.failure.factSpace": "The disk holding {path} is full.",
3162
+ "panels.market.failure.factStuck": "This command ran in a restricted environment and cannot write to {path}.",
3163
+ "panels.market.failure.nowhere": "(the directory was not identified)",
3164
+ "panels.market.failure.copyFix": "Copy the fix command",
3165
+ "panels.market.failure.copied": "Copied",
3166
+ "panels.market.failure.copiedHint": "Paste it in a terminal, run it, then click Check again.",
3167
+ "panels.market.failure.askAgent": "Copy for the agent",
3168
+ "panels.market.failure.askAgentText": "Installing this module could not write: `{command}` exited {code} at {path}. Work out whether the sandbox or file permissions blocked it, then install again somewhere writable.",
3169
+ "panels.market.failure.askAgentHint": "Paste it into the chat and let the agent carry on.",
3170
+ "panels.market.failure.recheck": "Check again",
3171
+ "panels.market.failure.showOutput": "Show install output",
3172
+ "panels.market.failure.hideOutput": "Hide install output",
3173
+ "panels.market.failure.term.commandLine": "command on line {line}",
3174
+ "panels.market.failure.term.signal": "killed by {signal}",
3175
+ "panels.market.failure.term.exitCode": "exit code {exitCode}",
3176
+ "panels.market.failure.term.noExitCode": "no exit code",
3177
+ "panels.market.failure.term.running": "running",
3178
+ "panels.market.failure.term.failed": "failed",
3179
+ "panels.market.failure.term.done": "done",
3180
+ "panels.market.failure.term.copy": "Copy",
3181
+ "panels.market.failure.term.copied": "Copied",
3182
+ "panels.market.failure.term.noOutput": "No output",
3183
+ "panels.market.failure.term.collapse": "Collapse",
3184
+ "panels.market.failure.term.expandAria": "Show the remaining {hidden} lines",
3185
+ "panels.market.failure.term.expand": "Show {hidden} lines",
3108
3186
  "panels.market.needEnv": "Set {env} in the terminal that started the workbench first",
3109
3187
  "panels.market.needCommands": "Missing commands: {commands}",
3110
3188
  "panels.market.needBinary": "Install the {command} command first",
@@ -3140,9 +3218,13 @@ window.__ModuleLoader__.load({
3140
3218
  "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.",
3141
3219
  "panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
3142
3220
  "panels.market.foot": "After installing, enable it in the panel page of that project.",
3143
- "panels.market.recheck": "Check for updates",
3144
3221
  "panels.market.checkUpdates": "Check for updates",
3222
+ "panels.market.checkingNow": "Checking…",
3223
+ "panels.market.checkFailed": "The last check failed. Check your connection and retry.",
3145
3224
  "panels.market.checkedAt": "Last checked: {time}",
3225
+ "panels.market.latestPartial": "Could not check {n} modules",
3226
+ "panels.market.latestNoRegistry": "No source configured — the latest version was not checked",
3227
+ "panels.market.latestProbeFailed": "Could not reach the source — try again later",
3146
3228
  "panels.market.justNow": "just now",
3147
3229
  "panels.market.minutesAgo": "{n} min ago",
3148
3230
  "panels.market.hoursAgo": "{n} h ago",
@@ -3319,6 +3401,9 @@ window.__ModuleLoader__.load({
3319
3401
  "panels.discover.transportTest": "Test this address",
3320
3402
  "panels.discover.transportPlaceholder": "Or paste another address (mirror, alias)",
3321
3403
  "panels.discover.transportNeedsAuth": "This repository needs credentials: clone it once in a terminal, or set up an SSH key / credential helper, then install again.",
3404
+ "panels.discover.transportChange": "Change address",
3405
+ "panels.discover.transportChangeHide": "Hide",
3406
+ "panels.discover.transportNone": "No readable address",
3322
3407
  "panels.discover.expand": "Show versions",
3323
3408
  "panels.discover.collapse": "Hide versions",
3324
3409
  "panels.discover.versionCount": "{n} versions",
@@ -3604,6 +3689,9 @@ window.__ModuleLoader__.load({
3604
3689
  "approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
3605
3690
  "approval.longTask.what": "Task to stop",
3606
3691
  "approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
3692
+ "approval.plugin.name": "Plugin",
3693
+ "approval.plugin.command": "Command",
3694
+ "approval.plugin.note": "Agent says",
3607
3695
  "approval.publish.module": "Module",
3608
3696
  "approval.publish.target": "Target",
3609
3697
  "approval.publish.version": "Version",
@@ -3799,7 +3887,42 @@ window.__ModuleLoader__.load({
3799
3887
  "panels.market.confirmUninstallAck": "我明白:卸载后想再用,得重新装一遍。",
3800
3888
  "panels.market.confirmYes": "卸载",
3801
3889
  "panels.market.confirmNo": "取消",
3890
+ "panels.market.noMarketSource": "索引里没有这个模块的新版本(刷新一次索引再试)",
3802
3891
  "panels.market.failed": "没成功:{reason}",
3892
+ "panels.market.askAgent": "问 agent",
3893
+ "panels.market.askAgentCopied": "已复制",
3894
+ "panels.market.askAgentText": "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。",
3895
+ "panels.market.failure.permission": "没装上:没有写入权限",
3896
+ "panels.market.failure.diskFull": "没装上:磁盘满了",
3897
+ "panels.market.failure.sandbox": "没装上:被系统拦住了",
3898
+ "panels.market.failure.unknown": "没装上:原因没认出来",
3899
+ "panels.market.failure.factOwner": "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。",
3900
+ "panels.market.failure.factMode": "{path} 的权限是 {mode},当前账号没有写权限。",
3901
+ "panels.market.failure.factSpace": "{path} 所在的磁盘满了。",
3902
+ "panels.market.failure.factStuck": "这条命令跑在受限环境里,写不进 {path}。",
3903
+ "panels.market.failure.nowhere": "(没认出是哪个目录)",
3904
+ "panels.market.failure.copyFix": "复制修复命令",
3905
+ "panels.market.failure.copied": "已复制",
3906
+ "panels.market.failure.copiedHint": "粘到终端跑一次,回来点「再检测」。",
3907
+ "panels.market.failure.askAgent": "复制给 agent",
3908
+ "panels.market.failure.askAgentText": "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。",
3909
+ "panels.market.failure.askAgentHint": "粘到对话里,让 agent 接着弄。",
3910
+ "panels.market.failure.recheck": "再检测",
3911
+ "panels.market.failure.showOutput": "查看安装输出",
3912
+ "panels.market.failure.hideOutput": "收起安装输出",
3913
+ "panels.market.failure.term.commandLine": "第 {line} 行的命令",
3914
+ "panels.market.failure.term.signal": "被 {signal} 终止",
3915
+ "panels.market.failure.term.exitCode": "退出码 {exitCode}",
3916
+ "panels.market.failure.term.noExitCode": "没有退出码",
3917
+ "panels.market.failure.term.running": "在跑",
3918
+ "panels.market.failure.term.failed": "没跑通",
3919
+ "panels.market.failure.term.done": "跑完了",
3920
+ "panels.market.failure.term.copy": "复制",
3921
+ "panels.market.failure.term.copied": "已复制",
3922
+ "panels.market.failure.term.noOutput": "没有输出",
3923
+ "panels.market.failure.term.collapse": "收起",
3924
+ "panels.market.failure.term.expandAria": "展开剩下的 {hidden} 行",
3925
+ "panels.market.failure.term.expand": "展开 {hidden} 行",
3803
3926
  "panels.market.needEnv": "先在启动工作台的终端里设 {env}",
3804
3927
  "panels.market.needCommands": "缺这几条命令:{commands}",
3805
3928
  "panels.market.needBinary": "先装 {command} 命令",
@@ -3835,9 +3958,13 @@ window.__ModuleLoader__.load({
3835
3958
  "panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
3836
3959
  "panels.market.restartNeeded": "新版装好了,重启一次才生效。",
3837
3960
  "panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
3838
- "panels.market.recheck": "重新检查更新",
3839
3961
  "panels.market.checkUpdates": "检查更新",
3962
+ "panels.market.checkingNow": "正在检查…",
3963
+ "panels.market.checkFailed": "最近一次没查到,检查网络后重试",
3840
3964
  "panels.market.checkedAt": "最近检查:{time}",
3965
+ "panels.market.latestPartial": "{n} 个模块没查成",
3966
+ "panels.market.latestNoRegistry": "没配来源,未检查新版",
3967
+ "panels.market.latestProbeFailed": "问不到源,稍后重试",
3841
3968
  "panels.market.justNow": "刚刚",
3842
3969
  "panels.market.minutesAgo": "{n} 分钟前",
3843
3970
  "panels.market.hoursAgo": "{n} 小时前",
@@ -4014,6 +4141,9 @@ window.__ModuleLoader__.load({
4014
4141
  "panels.discover.transportTest": "试这个地址",
4015
4142
  "panels.discover.transportPlaceholder": "或贴一个别的地址(公司镜像、别名)",
4016
4143
  "panels.discover.transportNeedsAuth": "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。",
4144
+ "panels.discover.transportChange": "换一个地址",
4145
+ "panels.discover.transportChangeHide": "收起",
4146
+ "panels.discover.transportNone": "没有可读的地址",
4017
4147
  "panels.discover.expand": "展开版本",
4018
4148
  "panels.discover.collapse": "收起版本",
4019
4149
  "panels.discover.versionCount": "{n} 个版本",
@@ -4299,6 +4429,9 @@ window.__ModuleLoader__.load({
4299
4429
  "approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
4300
4430
  "approval.longTask.what": "要停的那次任务",
4301
4431
  "approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
4432
+ "approval.plugin.name": "插件",
4433
+ "approval.plugin.command": "命令",
4434
+ "approval.plugin.note": "agent 说",
4302
4435
  "approval.publish.module": "模块",
4303
4436
  "approval.publish.target": "目标",
4304
4437
  "approval.publish.version": "版本",
@@ -4822,14 +4955,14 @@ window.__ModuleLoader__.load({
4822
4955
  epoch$1 += 1;
4823
4956
  }
4824
4957
  var current$1 = null;
4825
- var listeners$7 = /* @__PURE__ */ new Set();
4958
+ var listeners$8 = /* @__PURE__ */ new Set();
4826
4959
  function capabilityValue() {
4827
4960
  return current$1;
4828
4961
  }
4829
4962
  function subscribeCapabilities(listener) {
4830
- listeners$7.add(listener);
4963
+ listeners$8.add(listener);
4831
4964
  return () => {
4832
- listeners$7.delete(listener);
4965
+ listeners$8.delete(listener);
4833
4966
  };
4834
4967
  }
4835
4968
  function setCapabilities(next, rechecked = false) {
@@ -4842,7 +4975,7 @@ window.__ModuleLoader__.load({
4842
4975
  });
4843
4976
  if (next === current$1) return;
4844
4977
  current$1 = next;
4845
- for (const listener of [...listeners$7]) listener();
4978
+ for (const listener of [...listeners$8]) listener();
4846
4979
  }
4847
4980
  function beginProbe() {
4848
4981
  probing += 1;
@@ -4997,7 +5130,7 @@ window.__ModuleLoader__.load({
4997
5130
  //#endregion
4998
5131
  //#region src/app/layouts/panel-hint.ts
4999
5132
  var hints = /* @__PURE__ */ new Map();
5000
- var listeners$6 = /* @__PURE__ */ new Set();
5133
+ var listeners$7 = /* @__PURE__ */ new Set();
5001
5134
  function sameHint(left, right) {
5002
5135
  if (left === null || right === null) return left === right;
5003
5136
  if (left.labelKey !== right.labelKey || left.tone !== right.tone) return false;
@@ -5009,15 +5142,15 @@ window.__ModuleLoader__.load({
5009
5142
  if (sameHint(hints.get(id) ?? null, hint)) return;
5010
5143
  if (hint === null) hints.delete(id);
5011
5144
  else hints.set(id, hint);
5012
- for (const listener of [...listeners$6]) listener();
5145
+ for (const listener of [...listeners$7]) listener();
5013
5146
  }
5014
5147
  function panelHintOf(id) {
5015
5148
  return id === null ? null : hints.get(id) ?? null;
5016
5149
  }
5017
5150
  function subscribePanelHints(listener) {
5018
- listeners$6.add(listener);
5151
+ listeners$7.add(listener);
5019
5152
  return () => {
5020
- listeners$6.delete(listener);
5153
+ listeners$7.delete(listener);
5021
5154
  };
5022
5155
  }
5023
5156
  function usePanelHint(id) {
@@ -5033,6 +5166,16 @@ window.__ModuleLoader__.load({
5033
5166
  //#endregion
5034
5167
  //#region src/app/layouts/rightbar/market-freshness.ts
5035
5168
  var MARKET_STALE_MS = VERSION_CHECK_TTL_MS;
5169
+ function checkedAgoText(at, now, t) {
5170
+ const seconds = Math.max(0, Math.floor((now - at) / 1e3));
5171
+ if (seconds < 60) return t("panels.market.justNow");
5172
+ const minutes = Math.floor(seconds / 60);
5173
+ if (minutes < 60) return t("panels.market.minutesAgo", { n: String(minutes) });
5174
+ return t("panels.market.hoursAgo", { n: String(Math.floor(minutes / 60)) });
5175
+ }
5176
+ function checkedAgo(at, t) {
5177
+ return checkedAgoText(at, Date.now(), t);
5178
+ }
5036
5179
  function marketSettled(freshness, installedRead) {
5037
5180
  return freshness.loaded && installedRead !== false;
5038
5181
  }
@@ -5041,85 +5184,6 @@ window.__ModuleLoader__.load({
5041
5184
  return input.now - input.checkedAt >= input.staleMs;
5042
5185
  }
5043
5186
  //#endregion
5044
- //#region src/app/layouts/rightbar/market-settle.ts
5045
- var MODULE_SETTLE_MS = 15e3;
5046
- function holdBack(installed, roster, active, previous) {
5047
- const pending = installed.filter((unit) => !roster.has(unit));
5048
- const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
5049
- return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
5050
- }
5051
- var WORKBENCH_SWAP_MS = 18e4;
5052
- function swapLanded(until, installed) {
5053
- return until !== void 0 && installed === until;
5054
- }
5055
- function swapUntil(action, application, latest) {
5056
- if (action !== "update-workbench" || application !== "restart-required") return void 0;
5057
- return latest;
5058
- }
5059
- var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
5060
- "update",
5061
- "update-bundle",
5062
- "update-dependency",
5063
- "update-plugin"
5064
- ]);
5065
- var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
5066
- "remove-bundle",
5067
- "uninstall",
5068
- "uninstall-plugin"
5069
- ]);
5070
- function awaitsReadBack(action, application, version) {
5071
- if (application !== "applied") return false;
5072
- if (REMOVAL_ACTIONS.has(action)) return true;
5073
- if (!READ_BACK_ACTIONS.has(action)) return false;
5074
- return action === "update-bundle" ? version !== void 0 : true;
5075
- }
5076
- function readBackDone(input) {
5077
- if (input.action === "update") return !input.outdated;
5078
- if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
5079
- if (input.entry.latest === input.entry.installed) return true;
5080
- if (input.clicked === void 0) return true;
5081
- return input.entry.installed !== input.clicked;
5082
- }
5083
- function settleLanded(input) {
5084
- if (input.until !== void 0) return swapLanded(input.until, input.installed);
5085
- if (input.readBack !== true) return true;
5086
- if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
5087
- if (input.action === "uninstall-plugin") return input.pluginGone === true;
5088
- const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
5089
- if (input.action === "update-dependency") return settled(input.sharedState);
5090
- if (input.action === "update-plugin") return input.pluginOutdated === false;
5091
- return readBackDone({
5092
- action: input.action,
5093
- entry: input.entry,
5094
- clicked: input.clicked,
5095
- outdated: input.outdated
5096
- });
5097
- }
5098
- function tailReason(tail) {
5099
- if (tail === void 0) return void 0;
5100
- const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
5101
- if (last === void 0) return void 0;
5102
- return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
5103
- }
5104
- function selfUpdateStop(input) {
5105
- const { until, since, update } = input;
5106
- if (until === void 0 || update === void 0 || update === null) return void 0;
5107
- if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
5108
- if (update.to !== until && update.version !== until) return void 0;
5109
- if (since !== void 0 && update.at !== void 0) {
5110
- const at = (0, import_dayjs_min.default)(update.at).valueOf();
5111
- if (Number.isFinite(at) && at < since - 5e3) return void 0;
5112
- }
5113
- return {
5114
- kind: update.state,
5115
- ...update.version === void 0 ? {} : { version: update.version },
5116
- ...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
5117
- };
5118
- }
5119
- function holdWindowMs(until) {
5120
- return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
5121
- }
5122
- //#endregion
5123
5187
  //#region src/app/layouts/rightbar/market-shared-rows.ts
5124
5188
  var SHARED_STATE_KEY = {
5125
5189
  checking: "panels.market.checking",
@@ -5254,6 +5318,26 @@ window.__ModuleLoader__.load({
5254
5318
  if (installed === void 0) return null;
5255
5319
  return new Set(installed.map((item) => item.unit));
5256
5320
  }
5321
+ function latestUnavailableNote(unavailable) {
5322
+ if (unavailable === "no-registry") return {
5323
+ key: "panels.market.latestNoRegistry",
5324
+ params: {}
5325
+ };
5326
+ if (unavailable === "probe-failed") return {
5327
+ key: "panels.market.latestProbeFailed",
5328
+ params: {}
5329
+ };
5330
+ }
5331
+ function latestCheckSummary(modules) {
5332
+ let checked = 0;
5333
+ let unknown = 0;
5334
+ for (const module of modules ?? []) if (module.latest !== void 0) checked += 1;
5335
+ else if (module.latestUnavailable === "no-registry" || module.latestUnavailable === "probe-failed") unknown += 1;
5336
+ return {
5337
+ checked,
5338
+ unknown
5339
+ };
5340
+ }
5257
5341
  function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5258
5342
  const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
5259
5343
  const rows = [];
@@ -5267,16 +5351,17 @@ window.__ModuleLoader__.load({
5267
5351
  const pending = !loaded && refused.length === 0;
5268
5352
  const titleKey = titles.get(module.unit);
5269
5353
  const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
5354
+ const note = refused.length > 0 ? {
5355
+ key: "panels.market.moduleRefused",
5356
+ params: {}
5357
+ } : latestUnavailableNote(module.latestUnavailable);
5270
5358
  rows.push({
5271
5359
  id: module.unit,
5272
5360
  titleKey: titleKey ?? module.unit,
5273
5361
  ...remembered === void 0 ? {} : { label: remembered },
5274
5362
  state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
5275
5363
  ...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
5276
- ...refused.length === 0 ? {} : { note: {
5277
- key: "panels.market.moduleRefused",
5278
- params: {}
5279
- } },
5364
+ ...note === void 0 ? {} : { note },
5280
5365
  ...module.local === true ? { local: true } : {},
5281
5366
  pkg: module.pkg,
5282
5367
  canInstall: false,
@@ -5289,8 +5374,10 @@ window.__ModuleLoader__.load({
5289
5374
  ...outdated ? { moduleUpdate: {
5290
5375
  installed: module.installed,
5291
5376
  latest,
5292
- ...blocked === void 0 ? {} : { blocked }
5377
+ ...blocked === void 0 ? {} : { blocked },
5378
+ ...module.market === void 0 ? {} : { market: module.market }
5293
5379
  } } : {},
5380
+ ...module.market === void 0 ? {} : { market: module.market },
5294
5381
  defaultShown: defaults.has(module.unit),
5295
5382
  defaultChanged: changed[module.unit] ?? 0
5296
5383
  });
@@ -5301,6 +5388,13 @@ window.__ModuleLoader__.load({
5301
5388
  function marketSwitchLocked(row) {
5302
5389
  return SWITCH_LOCKED.has(row.state);
5303
5390
  }
5391
+ function marketAsksAgent(row) {
5392
+ if (row.workbench === true || row.plugin === true) return false;
5393
+ if (row.state === "installed" || row.state === "inactive" || row.state === "outdated") return false;
5394
+ if (row.state === "checking" || row.state === "pending-restart") return false;
5395
+ if (row.state === "pending-followup") return false;
5396
+ return !marketActions$1(row).includes("install");
5397
+ }
5304
5398
  function marketActions$1(row) {
5305
5399
  if (row.workbench === true) {
5306
5400
  if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
@@ -5309,7 +5403,7 @@ window.__ModuleLoader__.load({
5309
5403
  if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
5310
5404
  return [
5311
5405
  ...row.canInstall ? ["install"] : [],
5312
- ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
5406
+ ...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? [row.market === void 0 || row.pkg === void 0 ? "update-bundle" : "install-version"] : [],
5313
5407
  ...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
5314
5408
  ];
5315
5409
  }
@@ -5398,7 +5492,8 @@ window.__ModuleLoader__.load({
5398
5492
  installed: module.installed,
5399
5493
  ...local || module.latest === void 0 ? {} : { latest: module.latest },
5400
5494
  ...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
5401
- ...local ? { local: true } : {}
5495
+ ...local ? { local: true } : {},
5496
+ ...local || module.market === void 0 ? {} : { market: module.market }
5402
5497
  };
5403
5498
  }
5404
5499
  return next;
@@ -5422,6 +5517,18 @@ window.__ModuleLoader__.load({
5422
5517
  rows: rest
5423
5518
  }]];
5424
5519
  }
5520
+ function checkingRows(rows, scope) {
5521
+ return rows.map((row) => {
5522
+ if (row.state !== "unknown" && row.state !== "unchecked") return row;
5523
+ if (!scope.all && !scope.units.has(row.id)) return row;
5524
+ return {
5525
+ ...row,
5526
+ state: "checking",
5527
+ hint: void 0,
5528
+ note: void 0
5529
+ };
5530
+ });
5531
+ }
5425
5532
  function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
5426
5533
  const rows = [];
5427
5534
  for (const manifest of manifests) {
@@ -5437,7 +5544,8 @@ window.__ModuleLoader__.load({
5437
5544
  const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
5438
5545
  installed: entry.installed,
5439
5546
  latest: entry.latest,
5440
- ...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
5547
+ ...entry.blocked === void 0 ? {} : { blocked: entry.blocked },
5548
+ ...entry.market === void 0 ? {} : { market: entry.market }
5441
5549
  };
5442
5550
  const shown = moduleUpdate === void 0 ? state : "outdated";
5443
5551
  const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
@@ -5454,6 +5562,10 @@ window.__ModuleLoader__.load({
5454
5562
  ...entry.latest === void 0 ? {} : { latest: entry.latest }
5455
5563
  } },
5456
5564
  ...moduleUpdate === void 0 ? {} : { moduleUpdate },
5565
+ ...entry?.market === void 0 ? {} : {
5566
+ market: entry.market,
5567
+ pkg: entry.market.pkg
5568
+ },
5457
5569
  ...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
5458
5570
  ...local ? { local: true } : {},
5459
5571
  defaultShown: defaults.has(manifest.id),
@@ -5545,8 +5657,9 @@ window.__ModuleLoader__.load({
5545
5657
  function isProblem(row) {
5546
5658
  return row.broken === true || row.state === "broken" || row.state === "unusable" || row.note?.key === "panels.market.moduleRefused";
5547
5659
  }
5548
- function isRestart(row) {
5549
- return row.state === "inactive" || row.state === "pending-restart";
5660
+ function isRestart(row, installing) {
5661
+ if (row.state === "pending-restart") return true;
5662
+ return !installing && row.state === "inactive";
5550
5663
  }
5551
5664
  function isUnknown(row, rosterRead) {
5552
5665
  return row.state === "unchecked" || rosterRead && row.state === "unknown";
@@ -5556,9 +5669,10 @@ window.__ModuleLoader__.load({
5556
5669
  return installed.some((module) => !loaded.has(module.unit) && refusalReasons(module.refused, module.clientRefused).length === 0);
5557
5670
  }
5558
5671
  function marketHintOf(input) {
5559
- const busy = input.busy ?? /* @__PURE__ */ new Set();
5560
- const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !busy.has(manifest.id));
5561
- const installed = (input.installed ?? []).filter((module) => !busy.has(module.unit));
5672
+ const installing = input.installing === true;
5673
+ const held = /* @__PURE__ */ new Set([...input.busy ?? [], ...input.applied ?? []]);
5674
+ const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !held.has(manifest.id));
5675
+ const installed = (input.installed ?? []).filter((module) => !held.has(module.unit));
5562
5676
  const catalog = marketRows(marketable, input.capabilities, marketUpdatesOf(input.modules));
5563
5677
  const listed = new Set(catalog.map((row) => row.id));
5564
5678
  const self = workbenchRow(input.workbench);
@@ -5569,10 +5683,10 @@ window.__ModuleLoader__.load({
5569
5683
  ...self === void 0 ? [] : [self]
5570
5684
  ];
5571
5685
  const problem = rows.some(isProblem);
5572
- const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
5686
+ const restart = rows.some((row) => isRestart(row, installing)) || !installing && awaitsRestart(input.manifests, installed);
5573
5687
  const followUp = rows.some((row) => row.state === "pending-followup");
5574
5688
  const rosterRead = input.modules !== null;
5575
- const unknown = rows.some((row) => isUnknown(row, rosterRead));
5689
+ const unknown = !installing && rows.some((row) => isUnknown(row, rosterRead));
5576
5690
  const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
5577
5691
  const more = [];
5578
5692
  if (problem) {
@@ -5620,11 +5734,91 @@ window.__ModuleLoader__.load({
5620
5734
  return null;
5621
5735
  }
5622
5736
  //#endregion
5737
+ //#region src/app/layouts/rightbar/market-settle.ts
5738
+ var MODULE_SETTLE_MS = 15e3;
5739
+ function holdBack(installed, roster, active, previous) {
5740
+ const pending = installed.filter((unit) => !roster.has(unit));
5741
+ const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
5742
+ return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
5743
+ }
5744
+ var WORKBENCH_SWAP_MS = 18e4;
5745
+ function swapLanded(until, installed) {
5746
+ return until !== void 0 && installed === until;
5747
+ }
5748
+ function swapUntil(action, application, latest) {
5749
+ if (action !== "update-workbench" || application !== "restart-required") return void 0;
5750
+ return latest;
5751
+ }
5752
+ var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
5753
+ "update",
5754
+ "update-bundle",
5755
+ "install-version",
5756
+ "update-dependency",
5757
+ "update-plugin"
5758
+ ]);
5759
+ var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
5760
+ "remove-bundle",
5761
+ "uninstall",
5762
+ "uninstall-plugin"
5763
+ ]);
5764
+ function awaitsReadBack(action, application, version) {
5765
+ if (application !== "applied") return false;
5766
+ if (REMOVAL_ACTIONS.has(action)) return true;
5767
+ if (!READ_BACK_ACTIONS.has(action)) return false;
5768
+ return action === "update-bundle" || action === "install-version" ? version !== void 0 : true;
5769
+ }
5770
+ function readBackDone(input) {
5771
+ if (input.action === "update") return !input.outdated;
5772
+ if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
5773
+ if (input.entry.latest === input.entry.installed) return true;
5774
+ if (input.clicked === void 0) return true;
5775
+ return input.entry.installed !== input.clicked;
5776
+ }
5777
+ function settleLanded(input) {
5778
+ if (input.until !== void 0) return swapLanded(input.until, input.installed);
5779
+ if (input.readBack !== true) return true;
5780
+ if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
5781
+ if (input.action === "uninstall-plugin") return input.pluginGone === true;
5782
+ const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
5783
+ if (input.action === "update-dependency") return settled(input.sharedState);
5784
+ if (input.action === "update-plugin") return input.pluginOutdated === false;
5785
+ return readBackDone({
5786
+ action: input.action,
5787
+ entry: input.entry,
5788
+ clicked: input.clicked,
5789
+ outdated: input.outdated
5790
+ });
5791
+ }
5792
+ function tailReason(tail) {
5793
+ if (tail === void 0) return void 0;
5794
+ const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
5795
+ if (last === void 0) return void 0;
5796
+ return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
5797
+ }
5798
+ function selfUpdateStop(input) {
5799
+ const { until, since, update } = input;
5800
+ if (until === void 0 || update === void 0 || update === null) return void 0;
5801
+ if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
5802
+ if (update.to !== until && update.version !== until) return void 0;
5803
+ if (since !== void 0 && update.at !== void 0) {
5804
+ const at = (0, import_dayjs_min.default)(update.at).valueOf();
5805
+ if (Number.isFinite(at) && at < since - 5e3) return void 0;
5806
+ }
5807
+ return {
5808
+ kind: update.state,
5809
+ ...update.version === void 0 ? {} : { version: update.version },
5810
+ ...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
5811
+ };
5812
+ }
5813
+ function holdWindowMs(until) {
5814
+ return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
5815
+ }
5816
+ //#endregion
5623
5817
  //#region src/app/layouts/rightbar/market-busy.ts
5624
- var listeners$5 = /* @__PURE__ */ new Set();
5818
+ var listeners$6 = /* @__PURE__ */ new Set();
5625
5819
  var published = /* @__PURE__ */ new Map();
5626
5820
  var live$2 = /* @__PURE__ */ new Set();
5627
- var timer$2;
5821
+ var timer$3;
5628
5822
  var MARKET_BUSY_MS = WORKBENCH_SWAP_MS;
5629
5823
  function marketBusyIds() {
5630
5824
  return live$2;
@@ -5634,12 +5828,12 @@ window.__ModuleLoader__.load({
5634
5828
  const next = /* @__PURE__ */ new Map();
5635
5829
  for (const id of new Set(ids)) next.set(id, published.get(id) ?? now);
5636
5830
  published = next;
5637
- refresh(now);
5831
+ refresh$1(now);
5638
5832
  }
5639
5833
  function subscribeMarketBusy(listener) {
5640
- listeners$5.add(listener);
5834
+ listeners$6.add(listener);
5641
5835
  return () => {
5642
- listeners$5.delete(listener);
5836
+ listeners$6.delete(listener);
5643
5837
  };
5644
5838
  }
5645
5839
  function useMarketBusy() {
@@ -5655,29 +5849,100 @@ window.__ModuleLoader__.load({
5655
5849
  for (const id of left) if (!right.has(id)) return false;
5656
5850
  return true;
5657
5851
  }
5658
- function schedule$1(now) {
5659
- if (timer$2 !== void 0) clearTimeout(timer$2);
5660
- timer$2 = void 0;
5852
+ function schedule$2(now) {
5853
+ if (timer$3 !== void 0) clearTimeout(timer$3);
5854
+ timer$3 = void 0;
5661
5855
  let soonest = Number.POSITIVE_INFINITY;
5662
5856
  for (const at of published.values()) soonest = Math.min(soonest, at);
5663
5857
  if (soonest === Number.POSITIVE_INFINITY) return;
5664
- timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
5858
+ timer$3 = setTimeout(() => refresh$1(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
5665
5859
  }
5666
- function refresh(now) {
5860
+ function refresh$1(now) {
5667
5861
  for (const [id, at] of published) if (now - at >= MARKET_BUSY_MS) published.delete(id);
5668
5862
  const next = new Set(published.keys());
5669
5863
  if (!sameSet(live$2, next)) {
5670
5864
  live$2 = next;
5865
+ for (const listener of [...listeners$6]) listener();
5866
+ }
5867
+ schedule$2(now);
5868
+ }
5869
+ //#endregion
5870
+ //#region src/app/layouts/rightbar/market-install.ts
5871
+ var NO_UNITS$2 = /* @__PURE__ */ new Set();
5872
+ var IDLE$1 = {
5873
+ installing: false,
5874
+ applied: NO_UNITS$2
5875
+ };
5876
+ var tokens = /* @__PURE__ */ new Set();
5877
+ var applied = /* @__PURE__ */ new Map();
5878
+ var listeners$5 = /* @__PURE__ */ new Set();
5879
+ var snapshot$1 = IDLE$1;
5880
+ var timer$2;
5881
+ function sameUnits(left, right) {
5882
+ if (left.size !== right.size) return false;
5883
+ for (const unit of left) if (!right.has(unit)) return false;
5884
+ return true;
5885
+ }
5886
+ function schedule$1(now) {
5887
+ if (timer$2 !== void 0) clearTimeout(timer$2);
5888
+ timer$2 = void 0;
5889
+ if (applied.size === 0) return;
5890
+ let soonest = Number.POSITIVE_INFINITY;
5891
+ for (const at of applied.values()) soonest = Math.min(soonest, at);
5892
+ timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MODULE_SETTLE_MS - now) + 1);
5893
+ }
5894
+ function refresh(now) {
5895
+ for (const [unit, at] of applied) if (now - at >= 15e3) applied.delete(unit);
5896
+ const next = tokens.size === 0 && applied.size === 0 ? IDLE$1 : {
5897
+ installing: tokens.size > 0,
5898
+ applied: applied.size === 0 ? NO_UNITS$2 : new Set(applied.keys())
5899
+ };
5900
+ if (next.installing !== snapshot$1.installing || !sameUnits(next.applied, snapshot$1.applied)) {
5901
+ snapshot$1 = next;
5671
5902
  for (const listener of [...listeners$5]) listener();
5672
5903
  }
5673
5904
  schedule$1(now);
5674
5905
  }
5906
+ function marketInstallState() {
5907
+ return snapshot$1;
5908
+ }
5909
+ function subscribeMarketInstall(listener) {
5910
+ listeners$5.add(listener);
5911
+ return () => {
5912
+ listeners$5.delete(listener);
5913
+ };
5914
+ }
5915
+ function publishMarketInstalling(token, active) {
5916
+ if (active) tokens.add(token);
5917
+ else tokens.delete(token);
5918
+ refresh(Date.now());
5919
+ }
5920
+ function publishMarketApplied(units) {
5921
+ const now = Date.now();
5922
+ for (const unit of new Set(units)) if (unit !== "" && !applied.has(unit)) applied.set(unit, now);
5923
+ refresh(now);
5924
+ }
5925
+ function useMarketInstallState() {
5926
+ return (0, react.useSyncExternalStore)(subscribeMarketInstall, marketInstallState);
5927
+ }
5928
+ function usePublishMarketInstalling(token, active) {
5929
+ (0, react.useEffect)(() => {
5930
+ publishMarketInstalling(token, active);
5931
+ return () => publishMarketInstalling(token, false);
5932
+ }, [token, active]);
5933
+ }
5675
5934
  //#endregion
5676
5935
  //#region src/shared/api/write-outcome.ts
5677
5936
  function writeRoute(channel, resource) {
5678
5937
  if (channel === "provision") return "provision";
5679
5938
  return `${channel}/${resource}`;
5680
5939
  }
5940
+ function installFailureOf(value) {
5941
+ if (typeof value !== "object" || value === null) return void 0;
5942
+ const record = value;
5943
+ if (typeof record.kind !== "string" || typeof record.command !== "string") return void 0;
5944
+ return value;
5945
+ }
5681
5946
  function writeOutcomeOf(response, networkText) {
5682
5947
  if (response === null) return {
5683
5948
  ok: false,
@@ -5689,11 +5954,13 @@ window.__ModuleLoader__.load({
5689
5954
  const fallback = typeof box.text === "string" && box.text !== "" ? box.text : networkText;
5690
5955
  const detail = typeof box.error?.detail === "string" ? box.error.detail : void 0;
5691
5956
  const helpUrl = typeof box.error?.helpUrl === "string" && box.error.helpUrl !== "" ? box.error.helpUrl : void 0;
5957
+ const failure = installFailureOf(box.error?.failure);
5692
5958
  return {
5693
5959
  ok: false,
5694
5960
  message: own ?? fallback,
5695
5961
  ...detail === void 0 ? {} : { detail },
5696
- ...helpUrl === void 0 ? {} : { helpUrl }
5962
+ ...helpUrl === void 0 ? {} : { helpUrl },
5963
+ ...failure === void 0 ? {} : { failure }
5697
5964
  };
5698
5965
  }
5699
5966
  return {
@@ -5900,138 +6167,138 @@ window.__ModuleLoader__.load({
5900
6167
  };
5901
6168
  }
5902
6169
  var MarketPage_module_default = {
5903
- marketList: "_marketList_jfyof_1",
5904
- marketRow: "_marketRow_jfyof_10",
5905
- marketIcon: "_marketIcon_jfyof_20",
5906
- marketMain: "_marketMain_jfyof_32",
5907
- marketName: "_marketName_jfyof_39",
5908
- marketStatus: "_marketStatus_jfyof_48",
5909
- marketStateText: "_marketStateText_jfyof_58",
5910
- marketSep: "_marketSep_jfyof_62",
5911
- marketReason: "_marketReason_jfyof_66",
5912
- marketVersion: "_marketVersion_jfyof_72",
5913
- marketLocalTag: "_marketLocalTag_jfyof_94",
5914
- marketEnd: "_marketEnd_jfyof_105",
5915
- marketSwitchSeat: "_marketSwitchSeat_jfyof_112",
5916
- marketActions: "_marketActions_jfyof_125",
5917
- marketUpdateAction: "_marketUpdateAction_jfyof_131",
5918
- marketSelfDivider: "_marketSelfDivider_jfyof_137",
5919
- marketSection: "_marketSection_jfyof_143",
5920
- marketSectionHead: "_marketSectionHead_jfyof_150",
5921
- marketSectionIcon: "_marketSectionIcon_jfyof_156",
5922
- marketSectionTitle: "_marketSectionTitle_jfyof_163",
5923
- marketSectionCount: "_marketSectionCount_jfyof_169",
5924
- marketSectionQuiet: "_marketSectionQuiet_jfyof_175",
5925
- marketProgress: "_marketProgress_jfyof_188",
5926
- marketNote: "_marketNote_jfyof_198",
5927
- marketFailure: "_marketFailure_jfyof_205",
5928
- marketEmpty: "_marketEmpty_jfyof_212",
5929
- marketPage: "_marketPage_jfyof_217",
5930
- marketPageHead: "_marketPageHead_jfyof_235",
5931
- marketPageTitle: "_marketPageTitle_jfyof_243",
5932
- marketPageIntro: "_marketPageIntro_jfyof_248",
5933
- marketPageTools: "_marketPageTools_jfyof_254",
5934
- marketPanel: "_marketPanel_jfyof_263",
5935
- marketTabs: "_marketTabs_jfyof_273",
5936
- marketTabList: "_marketTabList_jfyof_278",
5937
- marketIconButton: "_marketIconButton_jfyof_283",
5938
- marketIconWrap: "_marketIconWrap_jfyof_308",
5939
- marketIconButtonSpinning: "_marketIconButtonSpinning_jfyof_312",
5940
- "wb-spin": "_wb-spin_jfyof_1",
5941
- marketAddButton: "_marketAddButton_jfyof_316",
5942
- marketEmptyTitle: "_marketEmptyTitle_jfyof_333",
5943
- discoverPage: "_discoverPage_jfyof_347",
5944
- discoverBar: "_discoverBar_jfyof_354",
5945
- discoverTools: "_discoverTools_jfyof_361",
5946
- discoverMarket: "_discoverMarket_jfyof_367",
5947
- discoverMarketButton: "_discoverMarketButton_jfyof_372",
5948
- discoverMarketName: "_discoverMarketName_jfyof_379",
5949
- discoverLabels: "_discoverLabels_jfyof_385",
5950
- discoverSort: "_discoverSort_jfyof_390",
5951
- discoverRefresh: "_discoverRefresh_jfyof_395",
5952
- discoverSearch: "_discoverSearch_jfyof_399",
5953
- discoverSearchField: "_discoverSearchField_jfyof_407",
5954
- discoverSearchFieldFilled: "_discoverSearchFieldFilled_jfyof_412",
5955
- discoverSearchClear: "_discoverSearchClear_jfyof_421",
5956
- discoverChips: "_discoverChips_jfyof_472",
5957
- discoverList: "_discoverList_jfyof_479",
5958
- discoverCard: "_discoverCard_jfyof_488",
5959
- discoverArtwork: "_discoverArtwork_jfyof_502",
5960
- discoverArtworkImage: "_discoverArtworkImage_jfyof_514",
5961
- discoverMain: "_discoverMain_jfyof_518",
5962
- discoverTitleRow: "_discoverTitleRow_jfyof_526",
5963
- discoverCardOpen: "_discoverCardOpen_jfyof_534",
5964
- discoverStrong: "_discoverStrong_jfyof_565",
5965
- discoverDesc: "_discoverDesc_jfyof_571",
5966
- discoverMeta: "_discoverMeta_jfyof_580",
5967
- discoverMuted: "_discoverMuted_jfyof_587",
5968
- discoverEnd: "_discoverEnd_jfyof_593",
5969
- discoverBlocked: "_discoverBlocked_jfyof_602",
5970
- discoverEmpty: "_discoverEmpty_jfyof_607",
5971
- discoverEmptyTitle: "_discoverEmptyTitle_jfyof_616",
5972
- discoverDetail: "_discoverDetail_jfyof_626",
5973
- discoverCrumb: "_discoverCrumb_jfyof_632",
5974
- discoverCrumbIcon: "_discoverCrumbIcon_jfyof_655",
5975
- discoverDetailHead: "_discoverDetailHead_jfyof_659",
5976
- discoverDetailTitle: "_discoverDetailTitle_jfyof_665",
5977
- discoverDetailText: "_discoverDetailText_jfyof_671",
5978
- discoverDetailPanel: "_discoverDetailPanel_jfyof_678",
5979
- discoverDetailTabs: "_discoverDetailTabs_jfyof_685",
5980
- discoverDetailTabList: "_discoverDetailTabList_jfyof_690",
5981
- discoverDocBody: "_discoverDocBody_jfyof_695",
5982
- discoverDocNotice: "_discoverDocNotice_jfyof_700",
5983
- discoverSection: "_discoverSection_jfyof_706",
5984
- discoverSectionTitle: "_discoverSectionTitle_jfyof_713",
5985
- discoverFacts: "_discoverFacts_jfyof_719",
5986
- discoverFactRow: "_discoverFactRow_jfyof_724",
5987
- discoverFactKind: "_discoverFactKind_jfyof_734",
5988
- discoverFactValue: "_discoverFactValue_jfyof_740",
5989
- discoverCode: "_discoverCode_jfyof_748",
5990
- discoverTags: "_discoverTags_jfyof_757",
5991
- discoverLink: "_discoverLink_jfyof_764",
5992
- discoverVersions: "_discoverVersions_jfyof_774",
5993
- discoverVersionRow: "_discoverVersionRow_jfyof_782",
5994
- discoverVersionName: "_discoverVersionName_jfyof_790",
5995
- discoverError: "_discoverError_jfyof_795",
5996
- discoverFailure: "_discoverFailure_jfyof_804",
5997
- discoverLoading: "_discoverLoading_jfyof_810",
5998
- discoverNotice: "_discoverNotice_jfyof_819",
5999
- discoverMore: "_discoverMore_jfyof_837",
6000
- discoverTransport: "_discoverTransport_jfyof_841",
6001
- discoverTransportTitle: "_discoverTransportTitle_jfyof_847",
6002
- discoverTransportRows: "_discoverTransportRows_jfyof_852",
6003
- discoverTransportRow: "_discoverTransportRow_jfyof_852",
6004
- discoverTransportRadio: "_discoverTransportRadio_jfyof_873",
6005
- discoverTransportKind: "_discoverTransportKind_jfyof_887",
6006
- discoverTransportState: "_discoverTransportState_jfyof_893",
6007
- discoverTransportCustom: "_discoverTransportCustom_jfyof_913",
6008
- discoverTransportInput: "_discoverTransportInput_jfyof_919",
6009
- discoverInstallBar: "_discoverInstallBar_jfyof_924",
6010
- discoverInstallText: "_discoverInstallText_jfyof_935",
6011
- discoverDialog: "_discoverDialog_jfyof_941",
6012
- discoverDialogBody: "_discoverDialogBody_jfyof_945",
6013
- discoverSourceList: "_discoverSourceList_jfyof_951",
6014
- discoverSourceRow: "_discoverSourceRow_jfyof_959",
6015
- discoverSourceConfirm: "_discoverSourceConfirm_jfyof_968",
6016
- discoverSourcePick: "_discoverSourcePick_jfyof_974",
6017
- discoverSourceRadio: "_discoverSourceRadio_jfyof_983",
6018
- discoverSourceMain: "_discoverSourceMain_jfyof_991",
6019
- discoverSourceHead: "_discoverSourceHead_jfyof_999",
6020
- discoverSourceUrl: "_discoverSourceUrl_jfyof_1007",
6021
- discoverSourceMore: "_discoverSourceMore_jfyof_1017",
6022
- discoverSourceLoading: "_discoverSourceLoading_jfyof_1021",
6023
- discoverSourceHint: "_discoverSourceHint_jfyof_1031",
6024
- discoverSourceError: "_discoverSourceError_jfyof_1045",
6025
- discoverSourceForm: "_discoverSourceForm_jfyof_1051",
6026
- discoverGrow: "_discoverGrow_jfyof_1057",
6027
- discoverField: "_discoverField_jfyof_1062",
6028
- discoverFieldLabel: "_discoverFieldLabel_jfyof_1068",
6029
- discoverConfirmHead: "_discoverConfirmHead_jfyof_1073",
6030
- discoverSkeletonFill: "_discoverSkeletonFill_jfyof_1079",
6031
- "wb-skeleton": "_wb-skeleton_jfyof_1",
6032
- discoverSkeletonBar: "_discoverSkeletonBar_jfyof_1088",
6033
- discoverSkeletonTitle: "_discoverSkeletonTitle_jfyof_1095",
6034
- discoverSkeletonDesc: "_discoverSkeletonDesc_jfyof_1099"
6170
+ marketList: "_marketList_485ym_1",
6171
+ marketRow: "_marketRow_485ym_10",
6172
+ marketIcon: "_marketIcon_485ym_20",
6173
+ marketMain: "_marketMain_485ym_32",
6174
+ marketName: "_marketName_485ym_39",
6175
+ marketStatus: "_marketStatus_485ym_48",
6176
+ marketStateText: "_marketStateText_485ym_58",
6177
+ marketSep: "_marketSep_485ym_62",
6178
+ marketReason: "_marketReason_485ym_66",
6179
+ marketVersion: "_marketVersion_485ym_72",
6180
+ marketLocalTag: "_marketLocalTag_485ym_94",
6181
+ marketEnd: "_marketEnd_485ym_105",
6182
+ marketSwitchSeat: "_marketSwitchSeat_485ym_112",
6183
+ marketActions: "_marketActions_485ym_125",
6184
+ marketUpdateAction: "_marketUpdateAction_485ym_131",
6185
+ marketSelfDivider: "_marketSelfDivider_485ym_137",
6186
+ marketSection: "_marketSection_485ym_143",
6187
+ marketSectionHead: "_marketSectionHead_485ym_150",
6188
+ marketSectionIcon: "_marketSectionIcon_485ym_156",
6189
+ marketSectionTitle: "_marketSectionTitle_485ym_163",
6190
+ marketSectionCount: "_marketSectionCount_485ym_169",
6191
+ marketSectionAction: "_marketSectionAction_485ym_175",
6192
+ marketSectionQuiet: "_marketSectionQuiet_485ym_183",
6193
+ marketProgress: "_marketProgress_485ym_196",
6194
+ marketNote: "_marketNote_485ym_206",
6195
+ marketFailure: "_marketFailure_485ym_213",
6196
+ marketFailureSeat: "_marketFailureSeat_485ym_220",
6197
+ marketEmpty: "_marketEmpty_485ym_225",
6198
+ marketPage: "_marketPage_485ym_230",
6199
+ marketPageHead: "_marketPageHead_485ym_248",
6200
+ marketPageTitle: "_marketPageTitle_485ym_256",
6201
+ marketPageIntro: "_marketPageIntro_485ym_261",
6202
+ marketPageTools: "_marketPageTools_485ym_267",
6203
+ marketPanel: "_marketPanel_485ym_276",
6204
+ marketTabs: "_marketTabs_485ym_286",
6205
+ marketTabList: "_marketTabList_485ym_291",
6206
+ marketAddButton: "_marketAddButton_485ym_296",
6207
+ marketEmptyTitle: "_marketEmptyTitle_485ym_313",
6208
+ discoverPage: "_discoverPage_485ym_318",
6209
+ discoverBar: "_discoverBar_485ym_325",
6210
+ discoverTools: "_discoverTools_485ym_332",
6211
+ discoverMarket: "_discoverMarket_485ym_338",
6212
+ discoverMarketButton: "_discoverMarketButton_485ym_343",
6213
+ discoverMarketName: "_discoverMarketName_485ym_350",
6214
+ discoverLabels: "_discoverLabels_485ym_356",
6215
+ discoverSort: "_discoverSort_485ym_361",
6216
+ discoverRefresh: "_discoverRefresh_485ym_366",
6217
+ discoverSearch: "_discoverSearch_485ym_370",
6218
+ discoverSearchField: "_discoverSearchField_485ym_378",
6219
+ discoverSearchFieldFilled: "_discoverSearchFieldFilled_485ym_383",
6220
+ discoverSearchClear: "_discoverSearchClear_485ym_392",
6221
+ discoverChips: "_discoverChips_485ym_443",
6222
+ discoverList: "_discoverList_485ym_450",
6223
+ discoverCard: "_discoverCard_485ym_459",
6224
+ discoverArtwork: "_discoverArtwork_485ym_473",
6225
+ discoverArtworkImage: "_discoverArtworkImage_485ym_485",
6226
+ discoverMain: "_discoverMain_485ym_489",
6227
+ discoverTitleRow: "_discoverTitleRow_485ym_497",
6228
+ discoverCardOpen: "_discoverCardOpen_485ym_505",
6229
+ discoverStrong: "_discoverStrong_485ym_536",
6230
+ discoverDesc: "_discoverDesc_485ym_542",
6231
+ discoverMeta: "_discoverMeta_485ym_551",
6232
+ discoverMuted: "_discoverMuted_485ym_558",
6233
+ discoverEnd: "_discoverEnd_485ym_564",
6234
+ discoverUpdateAction: "_discoverUpdateAction_485ym_573",
6235
+ discoverBlocked: "_discoverBlocked_485ym_578",
6236
+ discoverEmpty: "_discoverEmpty_485ym_583",
6237
+ discoverEmptyTitle: "_discoverEmptyTitle_485ym_592",
6238
+ discoverDetail: "_discoverDetail_485ym_602",
6239
+ discoverCrumb: "_discoverCrumb_485ym_608",
6240
+ discoverCrumbIcon: "_discoverCrumbIcon_485ym_631",
6241
+ discoverDetailHead: "_discoverDetailHead_485ym_635",
6242
+ discoverDetailTitle: "_discoverDetailTitle_485ym_641",
6243
+ discoverDetailText: "_discoverDetailText_485ym_647",
6244
+ discoverDetailPanel: "_discoverDetailPanel_485ym_654",
6245
+ discoverDetailTabs: "_discoverDetailTabs_485ym_661",
6246
+ discoverDetailTabList: "_discoverDetailTabList_485ym_666",
6247
+ discoverDocBody: "_discoverDocBody_485ym_671",
6248
+ discoverDocNotice: "_discoverDocNotice_485ym_676",
6249
+ discoverSection: "_discoverSection_485ym_682",
6250
+ discoverSectionTitle: "_discoverSectionTitle_485ym_689",
6251
+ discoverFacts: "_discoverFacts_485ym_695",
6252
+ discoverFactRow: "_discoverFactRow_485ym_700",
6253
+ discoverFactKind: "_discoverFactKind_485ym_710",
6254
+ discoverFactValue: "_discoverFactValue_485ym_716",
6255
+ discoverCode: "_discoverCode_485ym_724",
6256
+ discoverTags: "_discoverTags_485ym_733",
6257
+ discoverLink: "_discoverLink_485ym_740",
6258
+ discoverVersions: "_discoverVersions_485ym_750",
6259
+ discoverVersionRow: "_discoverVersionRow_485ym_758",
6260
+ discoverVersionName: "_discoverVersionName_485ym_766",
6261
+ discoverError: "_discoverError_485ym_771",
6262
+ discoverFailure: "_discoverFailure_485ym_780",
6263
+ discoverLoading: "_discoverLoading_485ym_786",
6264
+ discoverNotice: "_discoverNotice_485ym_795",
6265
+ discoverMore: "_discoverMore_485ym_813",
6266
+ discoverTransport: "_discoverTransport_485ym_817",
6267
+ discoverTransportHead: "_discoverTransportHead_485ym_823",
6268
+ discoverTransportTitle: "_discoverTransportTitle_485ym_830",
6269
+ discoverTransportKind: "_discoverTransportKind_485ym_835",
6270
+ discoverTransportState: "_discoverTransportState_485ym_840",
6271
+ discoverTransportRows: "_discoverTransportRows_485ym_848",
6272
+ discoverTransportRow: "_discoverTransportRow_485ym_848",
6273
+ discoverTransportRadio: "_discoverTransportRadio_485ym_869",
6274
+ discoverTransportCustom: "_discoverTransportCustom_485ym_909",
6275
+ discoverTransportInput: "_discoverTransportInput_485ym_915",
6276
+ discoverInstallBar: "_discoverInstallBar_485ym_920",
6277
+ discoverInstallText: "_discoverInstallText_485ym_931",
6278
+ discoverDialog: "_discoverDialog_485ym_937",
6279
+ discoverDialogBody: "_discoverDialogBody_485ym_941",
6280
+ discoverSourceList: "_discoverSourceList_485ym_947",
6281
+ discoverSourceRow: "_discoverSourceRow_485ym_955",
6282
+ discoverSourceConfirm: "_discoverSourceConfirm_485ym_964",
6283
+ discoverSourcePick: "_discoverSourcePick_485ym_970",
6284
+ discoverSourceRadio: "_discoverSourceRadio_485ym_979",
6285
+ discoverSourceMain: "_discoverSourceMain_485ym_987",
6286
+ discoverSourceHead: "_discoverSourceHead_485ym_995",
6287
+ discoverSourceUrl: "_discoverSourceUrl_485ym_1003",
6288
+ discoverSourceMore: "_discoverSourceMore_485ym_1013",
6289
+ discoverSourceLoading: "_discoverSourceLoading_485ym_1017",
6290
+ discoverSourceHint: "_discoverSourceHint_485ym_1027",
6291
+ discoverSourceError: "_discoverSourceError_485ym_1041",
6292
+ discoverSourceForm: "_discoverSourceForm_485ym_1047",
6293
+ discoverGrow: "_discoverGrow_485ym_1053",
6294
+ discoverField: "_discoverField_485ym_1058",
6295
+ discoverFieldLabel: "_discoverFieldLabel_485ym_1064",
6296
+ discoverConfirmHead: "_discoverConfirmHead_485ym_1069",
6297
+ discoverSkeletonFill: "_discoverSkeletonFill_485ym_1075",
6298
+ "wb-skeleton": "_wb-skeleton_485ym_1",
6299
+ discoverSkeletonBar: "_discoverSkeletonBar_485ym_1084",
6300
+ discoverSkeletonTitle: "_discoverSkeletonTitle_485ym_1091",
6301
+ discoverSkeletonDesc: "_discoverSkeletonDesc_485ym_1095"
6035
6302
  };
6036
6303
  //#endregion
6037
6304
  //#region src/app/layouts/market/discover-states.tsx
@@ -6112,6 +6379,151 @@ window.__ModuleLoader__.load({
6112
6379
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
6113
6380
  }
6114
6381
  //#endregion
6382
+ //#region src/app/layouts/rightbar/failure-card-text.ts
6383
+ var TITLE_KEY = {
6384
+ permission: "panels.market.failure.permission",
6385
+ "disk-full": "panels.market.failure.diskFull",
6386
+ sandbox: "panels.market.failure.sandbox",
6387
+ unknown: "panels.market.failure.unknown"
6388
+ };
6389
+ var ASK_AGENT_KEY = "panels.market.failure.askAgent";
6390
+ function shellPath(path) {
6391
+ return /^[\w./@%+-]+$/.test(path) ? path : `'${path.replaceAll("'", "'\\''")}'`;
6392
+ }
6393
+ function ownerLabel(uid) {
6394
+ return uid === 0 ? "root" : `uid ${uid}`;
6395
+ }
6396
+ function failureCardOf(failure, t) {
6397
+ const path = failure.path ?? "";
6398
+ const fix = failure.fix;
6399
+ if (fix.kind === "chown") {
6400
+ const ownerUid = failure.owner?.uid;
6401
+ return {
6402
+ title: t(TITLE_KEY[failure.kind]),
6403
+ fact: ownerUid === void 0 ? t("panels.market.failure.factMode", {
6404
+ path,
6405
+ mode: failure.mode ?? "?"
6406
+ }) : t("panels.market.failure.factOwner", {
6407
+ path,
6408
+ owner: ownerLabel(ownerUid),
6409
+ me: ownerLabel(failure.current.uid)
6410
+ }),
6411
+ fixLabel: t("panels.market.failure.copyFix"),
6412
+ fix: `sudo chown -R ${fix.uid}:${fix.gid} ${shellPath(fix.path)}`,
6413
+ copiedHint: t("panels.market.failure.copiedHint"),
6414
+ command: failure.command,
6415
+ output: failure.output,
6416
+ exitCode: failure.exitCode
6417
+ };
6418
+ }
6419
+ if (fix.kind === "chmod") return {
6420
+ title: t(TITLE_KEY[failure.kind]),
6421
+ fact: t("panels.market.failure.factMode", {
6422
+ path,
6423
+ mode: failure.mode ?? "?"
6424
+ }),
6425
+ fixLabel: t("panels.market.failure.copyFix"),
6426
+ fix: `chmod -R u+w ${shellPath(fix.path)}`,
6427
+ copiedHint: t("panels.market.failure.copiedHint"),
6428
+ command: failure.command,
6429
+ output: failure.output,
6430
+ exitCode: failure.exitCode
6431
+ };
6432
+ if (fix.kind === "space") return {
6433
+ title: t(TITLE_KEY[failure.kind]),
6434
+ fact: t("panels.market.failure.factSpace", { path }),
6435
+ fixLabel: t("panels.market.failure.copyFix"),
6436
+ fix: `du -sh ${shellPath(fix.path)}`,
6437
+ copiedHint: t("panels.market.failure.copiedHint"),
6438
+ command: failure.command,
6439
+ output: failure.output,
6440
+ exitCode: failure.exitCode
6441
+ };
6442
+ return {
6443
+ title: t(TITLE_KEY[failure.kind]),
6444
+ fact: t("panels.market.failure.factStuck", { path: path === "" ? t("panels.market.failure.nowhere") : path }),
6445
+ fixLabel: t(ASK_AGENT_KEY),
6446
+ fix: t("panels.market.failure.askAgentText", {
6447
+ command: failure.command,
6448
+ path: path === "" ? t("panels.market.failure.nowhere") : path,
6449
+ code: failure.exitCode === null ? "?" : String(failure.exitCode)
6450
+ }),
6451
+ copiedHint: t("panels.market.failure.askAgentHint"),
6452
+ command: failure.command,
6453
+ output: failure.output,
6454
+ exitCode: failure.exitCode
6455
+ };
6456
+ }
6457
+ var FailureCard_module_default = {
6458
+ block: "_block_mxnbc_1",
6459
+ head: "_head_mxnbc_9",
6460
+ title: "_title_mxnbc_16",
6461
+ fact: "_fact_mxnbc_22",
6462
+ actions: "_actions_mxnbc_30",
6463
+ hint: "_hint_mxnbc_38",
6464
+ output: "_output_mxnbc_44"
6465
+ };
6466
+ //#endregion
6467
+ //#region src/app/layouts/rightbar/FailureCard.tsx
6468
+ var COPIED_MS$1 = 1200;
6469
+ function terminalLabels(t) {
6470
+ return {
6471
+ commandLine: (line) => t("panels.market.failure.term.commandLine", { line }),
6472
+ signal: (signal) => t("panels.market.failure.term.signal", { signal }),
6473
+ exitCode: (exitCode) => t("panels.market.failure.term.exitCode", { exitCode }),
6474
+ noExitCode: t("panels.market.failure.term.noExitCode"),
6475
+ running: t("panels.market.failure.term.running"),
6476
+ failed: t("panels.market.failure.term.failed"),
6477
+ done: t("panels.market.failure.term.done"),
6478
+ copy: t("panels.market.failure.term.copy"),
6479
+ copied: t("panels.market.failure.term.copied"),
6480
+ noOutput: t("panels.market.failure.term.noOutput"),
6481
+ collapseAria: t("panels.market.failure.term.collapse"),
6482
+ collapse: t("panels.market.failure.term.collapse"),
6483
+ expandAria: (hidden) => t("panels.market.failure.term.expandAria", { hidden }),
6484
+ expand: (hidden) => t("panels.market.failure.term.expand", { hidden })
6485
+ };
6486
+ }
6487
+ function FailureCard({ t, failure, onRecheck, rechecking }) {
6488
+ const model = failureCardOf(failure, t);
6489
+ const [copied, setCopied] = (0, react.useState)(false);
6490
+ const [open, setOpen] = (0, react.useState)(false);
6491
+ const onCopy = (0, react.useCallback)(() => {
6492
+ (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(model.fix).then((ok) => {
6493
+ if (!ok) return;
6494
+ setCopied(true);
6495
+ setTimeout(() => setCopied(false), COPIED_MS$1);
6496
+ });
6497
+ }, [model.fix]);
6498
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: FailureCard_module_default.block }, /* @__PURE__ */ (0, react.createElement)("div", { className: FailureCard_module_default.head }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
6499
+ state: "error",
6500
+ size: 8
6501
+ }), /* @__PURE__ */ (0, react.createElement)("span", { className: FailureCard_module_default.title }, model.title)), /* @__PURE__ */ (0, react.createElement)("p", { className: FailureCard_module_default.fact }, model.fact), /* @__PURE__ */ (0, react.createElement)("div", { className: FailureCard_module_default.actions }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6502
+ type: "button",
6503
+ size: "sm",
6504
+ variant: "ghost",
6505
+ onClick: onCopy
6506
+ }, copied ? t("panels.market.failure.copied") : model.fixLabel), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6507
+ type: "button",
6508
+ size: "sm",
6509
+ variant: "ghost",
6510
+ disabled: rechecking,
6511
+ onClick: onRecheck
6512
+ }, t("panels.market.failure.recheck")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6513
+ type: "button",
6514
+ size: "sm",
6515
+ variant: "ghost",
6516
+ onClick: () => setOpen(!open)
6517
+ }, open ? t("panels.market.failure.hideOutput") : t("panels.market.failure.showOutput"))), copied ? /* @__PURE__ */ (0, react.createElement)("p", { className: FailureCard_module_default.hint }, model.copiedHint) : null, open ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.TerminalBlock, {
6518
+ command: model.command,
6519
+ output: model.output,
6520
+ exitCode: model.exitCode,
6521
+ maxLines: 8,
6522
+ labels: terminalLabels(t),
6523
+ className: FailureCard_module_default.output
6524
+ }) : null);
6525
+ }
6526
+ //#endregion
6115
6527
  //#region src/app/layouts/rightbar/market-section-icon.ts
6116
6528
  var SIZE$1 = 14;
6117
6529
  function marketSectionIcon(kind) {
@@ -6160,6 +6572,7 @@ window.__ModuleLoader__.load({
6160
6572
  install: "panels.market.installing",
6161
6573
  update: "panels.market.updating",
6162
6574
  "update-bundle": "panels.market.updating",
6575
+ "install-version": "panels.market.updating",
6163
6576
  "remove-bundle": "panels.market.uninstalling",
6164
6577
  uninstall: "panels.market.uninstalling",
6165
6578
  "update-dependency": "panels.market.updating",
@@ -6173,6 +6586,7 @@ window.__ModuleLoader__.load({
6173
6586
  install: "panels.market.install",
6174
6587
  update: "panels.market.update",
6175
6588
  "update-bundle": "panels.market.update",
6589
+ "install-version": "panels.market.update",
6176
6590
  "remove-bundle": "panels.market.uninstall",
6177
6591
  uninstall: "panels.market.uninstall",
6178
6592
  "update-dependency": "panels.market.update",
@@ -6279,9 +6693,21 @@ window.__ModuleLoader__.load({
6279
6693
  ...pending.version === void 0 ? {} : { version: { installed: pending.version } }
6280
6694
  };
6281
6695
  }
6696
+ function askAgentReason(row, t) {
6697
+ if (row.hint !== void 0) return t(row.hint);
6698
+ if (row.note !== void 0) return t(row.note.key, row.note.params);
6699
+ return t(MARKET_STATE_KEY[row.state]);
6700
+ }
6701
+ function askAgentText(row, t) {
6702
+ return t("panels.market.askAgentText", {
6703
+ name: marketRowTitle(row, t),
6704
+ unit: row.id,
6705
+ reason: askAgentReason(row, t)
6706
+ });
6707
+ }
6282
6708
  //#endregion
6283
6709
  //#region src/app/layouts/rightbar/SharedSection.tsx
6284
- function SharedLine({ t, row, pending, failure, onAct }) {
6710
+ function SharedLine({ t, row, pending, failure, onAct, onRecheck, rechecking }) {
6285
6711
  const running = pending !== null && pending.id === row.id ? pending : null;
6286
6712
  const locked = pending !== null;
6287
6713
  const actions = sharedActions(row);
@@ -6300,60 +6726,32 @@ window.__ModuleLoader__.load({
6300
6726
  }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) })))), /* @__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) => /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6301
6727
  key: action,
6302
6728
  type: "button",
6303
- size: "sm",
6304
- variant: "outline",
6305
- disabled: locked,
6306
- onClick: () => onAct(action)
6307
- }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure));
6308
- }
6309
- function SharedSection({ t, rows, pending, failureOf, act }) {
6310
- if (rows.length === 0) return null;
6311
- return /* @__PURE__ */ (0, react.createElement)("section", { className: `${MarketPage_module_default.marketSection} ${MarketPage_module_default.marketSectionQuiet}` }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ (0, react.createElement)("span", {
6312
- className: MarketPage_module_default.marketSectionIcon,
6313
- "aria-hidden": "true"
6314
- }, marketSectionIcon("shared")), /* @__PURE__ */ (0, react.createElement)("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ (0, react.createElement)(SharedLine, {
6315
- key: row.id,
6316
- t,
6317
- row,
6318
- pending,
6319
- failure: failureOf(row.id),
6320
- onAct: (action) => void act(row.id, action)
6321
- }))));
6322
- }
6323
- //#endregion
6324
- //#region src/app/layouts/rightbar/panel-write.ts
6325
- var PANEL_SETTLE_MS = 4e3;
6326
- function rowKey(row) {
6327
- return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
6328
- }
6329
- function rowKeys(rows) {
6330
- return rows.map(rowKey).join(",");
6331
- }
6332
- function panelBoardSignature(units, plugins, own) {
6333
- return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
6334
- }
6335
- function machineBoardSignature(defaults, changed) {
6336
- const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
6337
- return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
6338
- }
6339
- function nextPending(pending, signature) {
6340
- return pending !== null && pending !== signature ? null : pending;
6341
- }
6342
- function useBoardSettle(signature) {
6343
- const [held, setHeld] = (0, react.useState)(null);
6344
- (0, react.useEffect)(() => {
6345
- setHeld((current) => nextPending(current, signature));
6346
- }, [signature]);
6347
- (0, react.useEffect)(() => {
6348
- if (held === null) return void 0;
6349
- const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
6350
- return () => clearTimeout(timer);
6351
- }, [held]);
6352
- return {
6353
- pending: held !== null,
6354
- begin: () => setHeld(signature),
6355
- clear: () => setHeld(null)
6356
- };
6729
+ size: "sm",
6730
+ variant: "outline",
6731
+ disabled: locked,
6732
+ onClick: () => onAct(action)
6733
+ }, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ (0, react.createElement)(FailureCard, {
6734
+ t,
6735
+ failure: failure.failure,
6736
+ onRecheck,
6737
+ rechecking
6738
+ })));
6739
+ }
6740
+ function SharedSection({ t, rows, pending, failureOf, act, onRecheck, rechecking }) {
6741
+ if (rows.length === 0) return null;
6742
+ return /* @__PURE__ */ (0, react.createElement)("section", { className: `${MarketPage_module_default.marketSection} ${MarketPage_module_default.marketSectionQuiet}` }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ (0, react.createElement)("span", {
6743
+ className: MarketPage_module_default.marketSectionIcon,
6744
+ "aria-hidden": "true"
6745
+ }, marketSectionIcon("shared")), /* @__PURE__ */ (0, react.createElement)("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ (0, react.createElement)(SharedLine, {
6746
+ key: row.id,
6747
+ t,
6748
+ row,
6749
+ pending,
6750
+ failure: failureOf(row.id),
6751
+ onAct: (action) => void act(row.id, action),
6752
+ onRecheck,
6753
+ rechecking
6754
+ }))));
6357
6755
  }
6358
6756
  //#endregion
6359
6757
  //#region src/shared/components/Tip.tsx
@@ -6375,6 +6773,25 @@ window.__ModuleLoader__.load({
6375
6773
  });
6376
6774
  }
6377
6775
  //#endregion
6776
+ //#region src/app/layouts/rightbar/AskAgentButton.tsx
6777
+ var COPIED_MS = 1200;
6778
+ function AskAgentButton({ t, text, label }) {
6779
+ const [copied, setCopied] = (0, react.useState)(false);
6780
+ const onCopy = (0, react.useCallback)(() => {
6781
+ (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(text).then((ok) => {
6782
+ if (!ok) return;
6783
+ setCopied(true);
6784
+ setTimeout(() => setCopied(false), COPIED_MS);
6785
+ });
6786
+ }, [text]);
6787
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6788
+ type: "button",
6789
+ size: "sm",
6790
+ variant: "ghost",
6791
+ onClick: onCopy
6792
+ }, copied ? t("panels.market.askAgentCopied") : label);
6793
+ }
6794
+ //#endregion
6378
6795
  //#region src/app/layouts/rightbar/market-section.tsx
6379
6796
  var dangerActions = [
6380
6797
  "uninstall",
@@ -6445,13 +6862,14 @@ window.__ModuleLoader__.load({
6445
6862
  "aria-hidden": "true"
6446
6863
  }, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)));
6447
6864
  }
6448
- function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
6865
+ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy, onRecheck, rechecking }) {
6449
6866
  const running = pending !== null && pending.id === row.id ? pending : null;
6450
6867
  const locked = pending !== null;
6451
6868
  const [migrationOpen, setMigrationOpen] = (0, react.useState)(false);
6452
6869
  const [dismissOpen, setDismissOpen] = (0, react.useState)(false);
6453
6870
  const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
6454
6871
  const actions = marketActions$1(row);
6872
+ const asksAgent = marketAsksAgent(row);
6455
6873
  const switchLocked = marketSwitchLocked(row);
6456
6874
  return /* @__PURE__ */ (0, react.createElement)("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ (0, react.createElement)("span", {
6457
6875
  className: MarketPage_module_default.marketIcon,
@@ -6463,7 +6881,11 @@ window.__ModuleLoader__.load({
6463
6881
  t,
6464
6882
  row,
6465
6883
  quiet
6466
- })), /* @__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) => {
6884
+ })), /* @__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 && !asksAgent ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketActions }, asksAgent ? /* @__PURE__ */ (0, react.createElement)(AskAgentButton, {
6885
+ t,
6886
+ text: askAgentText(row, t),
6887
+ label: t("panels.market.askAgent")
6888
+ }) : null, actions.map((action) => {
6467
6889
  const danger = dangerActions.includes(action);
6468
6890
  const update = updateActions.includes(action);
6469
6891
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
@@ -6486,7 +6908,12 @@ window.__ModuleLoader__.load({
6486
6908
  disabled: boardBusy === true || locked || switchLocked,
6487
6909
  label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
6488
6910
  onChange: (next) => onDefault?.(next)
6489
- })))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
6911
+ })))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ (0, react.createElement)(FailureCard, {
6912
+ t,
6913
+ failure: failure.failure,
6914
+ onRecheck,
6915
+ rechecking
6916
+ })), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
6490
6917
  t,
6491
6918
  migrationOpen,
6492
6919
  dismissOpen,
@@ -6502,12 +6929,12 @@ window.__ModuleLoader__.load({
6502
6929
  }
6503
6930
  }));
6504
6931
  }
6505
- function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
6506
- if (rows.length === 0) return null;
6932
+ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead, onRecheck, rechecking }) {
6933
+ if (rows.length === 0 && keepHead !== true) return null;
6507
6934
  return /* @__PURE__ */ (0, react.createElement)("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ (0, react.createElement)("span", {
6508
6935
  className: MarketPage_module_default.marketSectionIcon,
6509
6936
  "aria-hidden": "true"
6510
- }, icon), /* @__PURE__ */ (0, react.createElement)("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), rows.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), rows.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ (0, react.createElement)(MarketLine, {
6937
+ }, icon), /* @__PURE__ */ (0, react.createElement)("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionCount }, rows.length), headAction === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketSectionAction }, headAction)), rows.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ (0, react.createElement)(MarketLine, {
6511
6938
  key: row.id,
6512
6939
  t,
6513
6940
  row,
@@ -6515,7 +6942,9 @@ window.__ModuleLoader__.load({
6515
6942
  failure: failureOf(row.id),
6516
6943
  onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
6517
6944
  onDefault: (next) => onDefault?.(row.id, next),
6518
- boardBusy
6945
+ boardBusy,
6946
+ onRecheck,
6947
+ rechecking
6519
6948
  }))));
6520
6949
  }
6521
6950
  //#endregion
@@ -6748,6 +7177,14 @@ window.__ModuleLoader__.load({
6748
7177
  if (change === void 0 || SHIPPED$1.includes(change.application)) return void 0;
6749
7178
  return failureReason(failureCode(change), change.application, t);
6750
7179
  }
7180
+ function appliedUnitsOf(value) {
7181
+ if (changeOf(value)?.application !== "applied") return [];
7182
+ const module = value?.module;
7183
+ if (typeof module !== "object" || module === null) return [];
7184
+ const record = module;
7185
+ if (record.kind !== "module") return [];
7186
+ return typeof record.unit === "string" && record.unit !== "" ? [record.unit] : [];
7187
+ }
6751
7188
  //#endregion
6752
7189
  //#region src/app/layouts/rightbar/market-update-verdict.ts
6753
7190
  function updateVerdictOf(input) {
@@ -6779,7 +7216,11 @@ window.__ModuleLoader__.load({
6779
7216
  }
6780
7217
  //#endregion
6781
7218
  //#region src/app/layouts/rightbar/market-act.ts
6782
- var STEADY_ACTIONS = /* @__PURE__ */ new Set(["update", "update-bundle"]);
7219
+ var STEADY_ACTIONS = /* @__PURE__ */ new Set([
7220
+ "update",
7221
+ "update-bundle",
7222
+ "install-version"
7223
+ ]);
6783
7224
  function assumedApplied(action) {
6784
7225
  return action === "update" || action === "update-dependency" || action === "update-plugin" || REMOVAL_ACTIONS.has(action);
6785
7226
  }
@@ -6823,18 +7264,34 @@ window.__ModuleLoader__.load({
6823
7264
  seats.setConfirming(null);
6824
7265
  seats.setFailed(null);
6825
7266
  seats.setNotice(null);
7267
+ const dependency = action === "update-dependency";
7268
+ const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench";
7269
+ const market = action === "install-version" ? row?.market : void 0;
7270
+ const marketSpec = market === void 0 || row?.pkg === void 0 ? void 0 : marketInstallTarget(row.pkg, market.version, market.source).spec;
7271
+ if (action === "install-version" && marketSpec === void 0) {
7272
+ seats.setPending(null);
7273
+ seats.setFailed({
7274
+ id,
7275
+ message: t("panels.market.failed", { reason: t("panels.market.noMarketSource") })
7276
+ });
7277
+ return;
7278
+ }
6826
7279
  const outcome = await send(action === "dismiss-followup" ? {
6827
7280
  action,
6828
7281
  id: row?.followUp?.id ?? ""
6829
- } : action === "update-dependency" ? {
7282
+ } : dependency ? {
6830
7283
  action,
6831
7284
  id
6832
- } : action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench" ? {
7285
+ } : byName ? {
6833
7286
  action,
6834
7287
  name: row?.pkg ?? ""
6835
- } : {
7288
+ } : marketSpec === void 0 ? {
6836
7289
  action,
6837
7290
  unit: id
7291
+ } : {
7292
+ action,
7293
+ spec: marketSpec,
7294
+ requestId: globalThis.crypto.randomUUID()
6838
7295
  });
6839
7296
  if (!outcome.ok) {
6840
7297
  onChanged({ force: true });
@@ -6842,7 +7299,8 @@ window.__ModuleLoader__.load({
6842
7299
  seats.setHeld(void 0);
6843
7300
  seats.setFailed({
6844
7301
  id,
6845
- message: t("panels.market.failed", { reason: outcome.message })
7302
+ message: t("panels.market.failed", { reason: outcome.message }),
7303
+ ...outcome.failure === void 0 ? {} : { failure: outcome.failure }
6846
7304
  });
6847
7305
  return;
6848
7306
  }
@@ -6899,6 +7357,109 @@ window.__ModuleLoader__.load({
6899
7357
  });
6900
7358
  };
6901
7359
  }
7360
+ //#endregion
7361
+ //#region src/app/layouts/rightbar/panel-write.ts
7362
+ var PANEL_SETTLE_MS = 4e3;
7363
+ function rowKey(row) {
7364
+ return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
7365
+ }
7366
+ function rowKeys(rows) {
7367
+ return rows.map(rowKey).join(",");
7368
+ }
7369
+ function panelBoardSignature(units, plugins, own) {
7370
+ return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
7371
+ }
7372
+ function machineBoardSignature(defaults, changed) {
7373
+ const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
7374
+ return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
7375
+ }
7376
+ function nextPending(pending, signature) {
7377
+ return pending !== null && pending !== signature ? null : pending;
7378
+ }
7379
+ function useBoardSettle(signature) {
7380
+ const [held, setHeld] = (0, react.useState)(null);
7381
+ (0, react.useEffect)(() => {
7382
+ setHeld((current) => nextPending(current, signature));
7383
+ }, [signature]);
7384
+ (0, react.useEffect)(() => {
7385
+ if (held === null) return void 0;
7386
+ const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
7387
+ return () => clearTimeout(timer);
7388
+ }, [held]);
7389
+ return {
7390
+ pending: held !== null,
7391
+ begin: () => setHeld(signature),
7392
+ clear: () => setHeld(null)
7393
+ };
7394
+ }
7395
+ //#endregion
7396
+ //#region src/app/layouts/rightbar/use-market-default.ts
7397
+ function useMarketDefault(input) {
7398
+ const { t, mocked, defaults, changed, setNotice } = input;
7399
+ const boardWrite = useHostWrite({
7400
+ channel: "prefs",
7401
+ resource: "panels",
7402
+ networkText: t("panels.failed")
7403
+ });
7404
+ const [writing, setWriting] = (0, react.useState)(false);
7405
+ const settle = useBoardSettle(machineBoardSignature(defaults, changed));
7406
+ const setDefault = async (id, next) => {
7407
+ if (mocked) return;
7408
+ setWriting(true);
7409
+ settle.begin();
7410
+ const outcome = await boardWrite.send({
7411
+ action: next ? "show" : "hide",
7412
+ id,
7413
+ scope: "machine"
7414
+ });
7415
+ setWriting(false);
7416
+ if (!outcome.ok) {
7417
+ settle.clear();
7418
+ setNotice(t("panels.failed"));
7419
+ }
7420
+ };
7421
+ return {
7422
+ pending: writing || settle.pending,
7423
+ setDefault
7424
+ };
7425
+ }
7426
+ var market_check_module_default = {
7427
+ check: "_check_1g6tv_1",
7428
+ status: "_status_1g6tv_8",
7429
+ button: "_button_1g6tv_15",
7430
+ icon: "_icon_1g6tv_22"
7431
+ };
7432
+ //#endregion
7433
+ //#region src/app/layouts/market/market-check.tsx
7434
+ function MarketCheck({ t, checkedAt, latestCheck = {
7435
+ checked: 0,
7436
+ unknown: 0
7437
+ }, checking, failed, disabled, onCheck }) {
7438
+ const parts = [];
7439
+ if (checking) parts.push(t("panels.market.checkingNow"));
7440
+ else {
7441
+ if (latestCheck.checked > 0 && checkedAt !== null) parts.push(t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) }));
7442
+ if (failed) parts.push(t("panels.market.checkFailed"));
7443
+ else if (latestCheck.unknown > 0) parts.push(t("panels.market.latestPartial", { n: String(latestCheck.unknown) }));
7444
+ }
7445
+ const status = parts.length === 0 ? null : parts.join(" · ");
7446
+ return /* @__PURE__ */ (0, react.createElement)("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ (0, react.createElement)("span", {
7447
+ className: market_check_module_default.status,
7448
+ "aria-live": "polite"
7449
+ }, status), /* @__PURE__ */ (0, react.createElement)(Tip, { label: t("panels.market.checkUpdates") }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7450
+ type: "button",
7451
+ variant: "ghost",
7452
+ size: "sm",
7453
+ className: market_check_module_default.button,
7454
+ "aria-label": t("panels.market.checkUpdates"),
7455
+ disabled: disabled || checking,
7456
+ icon: /* @__PURE__ */ (0, react.createElement)("span", {
7457
+ className: `${market_check_module_default.icon}${checking ? " wb-spinning" : ""}`,
7458
+ "aria-hidden": "true"
7459
+ }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 })),
7460
+ onClick: onCheck
7461
+ })));
7462
+ }
6902
7463
  var PanelFoot_module_default = {
6903
7464
  foot: "_foot_1ud1j_1",
6904
7465
  footText: "_footText_1ud1j_13",
@@ -6916,6 +7477,8 @@ window.__ModuleLoader__.load({
6916
7477
  "remove-bundle",
6917
7478
  "uninstall-plugin"
6918
7479
  ];
7480
+ var NO_ROWS = [];
7481
+ var NO_UNITS$1 = /* @__PURE__ */ new Set();
6919
7482
  function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
6920
7483
  const [acknowledged, setAcknowledged] = (0, react.useState)(false);
6921
7484
  return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
@@ -6932,9 +7495,12 @@ window.__ModuleLoader__.load({
6932
7495
  onConfirm
6933
7496
  });
6934
7497
  }
6935
- function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
6936
- const failureOf = (id) => failed?.id === id ? failed.message : null;
7498
+ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, check, onRecheck, rechecking }) {
7499
+ const failureOf = (id) => failed?.id === id ? failed : null;
6937
7500
  const foot = marketFootVisible(shown, installedList);
7501
+ const sections = marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t)));
7502
+ const installed = sections.find((section) => section.id === "installed");
7503
+ const pendingSection = sections.find((section) => section.id === "not-installed");
6938
7504
  return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, notice === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6939
7505
  t,
6940
7506
  rows: self === void 0 ? [] : [self],
@@ -6944,35 +7510,57 @@ window.__ModuleLoader__.load({
6944
7510
  failureOf,
6945
7511
  act,
6946
7512
  confirmActions: CONFIRM_UNINSTALL,
6947
- onConfirming
7513
+ onConfirming,
7514
+ onRecheck,
7515
+ rechecking
6948
7516
  }), self === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", {
6949
7517
  className: MarketPage_module_default.marketSelfDivider,
6950
7518
  "aria-hidden": "true"
6951
- }), marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t))).map((section) => /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6952
- key: section.id,
7519
+ }), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
7520
+ t,
7521
+ titleKey: "panels.market.sectionInstalled",
7522
+ icon: marketSectionIcon("installed"),
7523
+ rows: installed?.rows ?? NO_ROWS,
7524
+ keepHead: true,
7525
+ headAction: check,
7526
+ onDefault: setDefault,
7527
+ boardBusy,
7528
+ pending,
7529
+ failureOf,
7530
+ act,
7531
+ confirmActions: CONFIRM_UNINSTALL,
7532
+ onConfirming,
7533
+ onRecheck,
7534
+ rechecking
7535
+ }), pendingSection === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6953
7536
  t,
6954
- titleKey: section.titleKey,
6955
- icon: marketSectionIcon(section.id === "installed" ? "installed" : "pending"),
6956
- rows: section.rows,
7537
+ titleKey: pendingSection.titleKey,
7538
+ icon: marketSectionIcon("pending"),
7539
+ rows: pendingSection.rows,
6957
7540
  onDefault: setDefault,
6958
7541
  boardBusy,
6959
7542
  pending,
6960
7543
  failureOf,
6961
7544
  act,
6962
7545
  confirmActions: CONFIRM_UNINSTALL,
6963
- onConfirming
6964
- })), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
7546
+ onConfirming,
7547
+ onRecheck,
7548
+ rechecking
7549
+ }), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
6965
7550
  t,
6966
7551
  titleKey: "panels.market.sectionPlugins",
6967
7552
  icon: marketSectionIcon("plugins"),
6968
7553
  rows: pluginList,
7554
+ headAction: check,
6969
7555
  onDefault: setDefault,
6970
7556
  boardBusy,
6971
7557
  pending,
6972
7558
  failureOf,
6973
7559
  act,
6974
7560
  confirmActions: CONFIRM_UNINSTALL,
6975
- onConfirming
7561
+ onConfirming,
7562
+ onRecheck,
7563
+ rechecking
6976
7564
  }), foot ? /* @__PURE__ */ (0, react.createElement)(PanelFoot, {
6977
7565
  size: "md",
6978
7566
  text: t("panels.market.foot")
@@ -6981,11 +7569,13 @@ window.__ModuleLoader__.load({
6981
7569
  rows: shared,
6982
7570
  pending,
6983
7571
  failureOf,
6984
- act
7572
+ act,
7573
+ onRecheck,
7574
+ rechecking
6985
7575
  }));
6986
7576
  }
6987
7577
  function useMarketScene(input) {
6988
- const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
7578
+ const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, installing, mock, defaults, changed, pending, failed } = input;
6989
7579
  const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
6990
7580
  const catalog = mock?.manifests ?? manifests;
6991
7581
  const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
@@ -6993,7 +7583,10 @@ window.__ModuleLoader__.load({
6993
7583
  const source = liveManifests(marketable, effective, installedIdSet(mock === void 0 ? installed : void 0));
6994
7584
  const byDefault = new Set(defaults);
6995
7585
  const updateMap = mock?.updates ?? updates ?? {};
6996
- const rows = marketRows(source, effective, updateMap, byDefault, changed);
7586
+ const rows = checkingRows(marketRows(source, effective, updateMap, byDefault, changed), {
7587
+ all: installing,
7588
+ units: settling ?? NO_UNITS$1
7589
+ });
6997
7590
  const shared = sharedRows(source, effective);
6998
7591
  const removing = removingIdOf(pending, failed);
6999
7592
  const steady = useHeldRow(pending, (id) => catalog.some((manifest) => manifest.id === id));
@@ -7014,7 +7607,7 @@ window.__ModuleLoader__.load({
7014
7607
  busyId
7015
7608
  };
7016
7609
  }
7017
- function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
7610
+ function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, updatesCheckedAt = null, updatesFailed = false, installed, installedRead, workbench, selfUpdate, plugins, settling, installing = false, mock, defaults = [], changed = {} }) {
7018
7611
  const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
7019
7612
  mock,
7020
7613
  onPending
@@ -7028,6 +7621,7 @@ window.__ModuleLoader__.load({
7028
7621
  updates,
7029
7622
  installed,
7030
7623
  settling,
7624
+ installing,
7031
7625
  mock,
7032
7626
  defaults,
7033
7627
  changed,
@@ -7039,29 +7633,14 @@ window.__ModuleLoader__.load({
7039
7633
  channel: "provision",
7040
7634
  networkText: t("panels.failed")
7041
7635
  });
7042
- const boardWrite = useHostWrite({
7043
- channel: "prefs",
7044
- resource: "panels",
7045
- networkText: t("panels.failed")
7636
+ const { pending: defaultPending, setDefault } = useMarketDefault({
7637
+ t,
7638
+ mocked: mock !== void 0,
7639
+ defaults,
7640
+ changed,
7641
+ setNotice
7046
7642
  });
7047
- const [writingDefault, setWritingDefault] = (0, react.useState)(false);
7048
- const settleDefault = useBoardSettle(machineBoardSignature(defaults, changed));
7049
- const { busy: boardBusy } = useVisibleBusy(writingDefault || settleDefault.pending, 500);
7050
- const setDefault = async (id, next) => {
7051
- if (mock !== void 0) return;
7052
- setWritingDefault(true);
7053
- settleDefault.begin();
7054
- const outcome = await boardWrite.send({
7055
- action: next ? "show" : "hide",
7056
- id,
7057
- scope: "machine"
7058
- });
7059
- setWritingDefault(false);
7060
- if (!outcome.ok) {
7061
- settleDefault.clear();
7062
- setNotice(t("panels.failed"));
7063
- }
7064
- };
7643
+ const { busy: boardBusy } = useVisibleBusy(defaultPending, 500);
7065
7644
  const pendingRow = pendingRowOf({
7066
7645
  pending,
7067
7646
  removing,
@@ -7108,6 +7687,21 @@ window.__ModuleLoader__.load({
7108
7687
  });
7109
7688
  const settled = marketSettled(freshness, installedRead);
7110
7689
  const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
7690
+ const { busy: checkingShown } = useVisibleBusy(freshness.checking, 500);
7691
+ const recheck = () => {
7692
+ setFailed(null);
7693
+ if (mock === void 0) onChanged({ force: true });
7694
+ };
7695
+ const latestCheck = latestCheckSummary(mock?.installed ?? installed);
7696
+ const check = /* @__PURE__ */ (0, react.createElement)(MarketCheck, {
7697
+ t,
7698
+ checkedAt: updatesCheckedAt,
7699
+ latestCheck,
7700
+ checking: checkingShown,
7701
+ failed: updatesFailed,
7702
+ disabled: pending !== null,
7703
+ onCheck: () => onChanged({ force: true })
7704
+ });
7111
7705
  if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ (0, react.createElement)(MarketChecking, { t });
7112
7706
  if (nothing) return /* @__PURE__ */ (0, react.createElement)(MarketEmpty, { t });
7113
7707
  return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(MarketBody, {
@@ -7123,20 +7717,33 @@ window.__ModuleLoader__.load({
7123
7717
  act,
7124
7718
  onConfirming: setConfirming,
7125
7719
  setDefault,
7126
- boardBusy
7127
- }), /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
7720
+ boardBusy,
7721
+ check,
7722
+ onRecheck: recheck,
7723
+ rechecking: checkingShown
7724
+ }), /* @__PURE__ */ (0, react.createElement)(UninstallConfirm, {
7725
+ t,
7726
+ confirming,
7727
+ row: confirmingRow,
7728
+ onClose: () => setConfirming(null),
7729
+ act,
7730
+ rowById
7731
+ }));
7732
+ }
7733
+ function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
7734
+ return /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
7128
7735
  key: confirming ?? "",
7129
7736
  t,
7130
- name: confirmingRow === void 0 ? null : marketRowTitle(confirmingRow, t),
7131
- onCancel: () => setConfirming(null),
7737
+ name: row === void 0 ? null : marketRowTitle(row, t),
7738
+ onCancel: onClose,
7132
7739
  onConfirm: () => {
7133
7740
  const id = confirming;
7134
- setConfirming(null);
7741
+ onClose();
7135
7742
  if (id === null) return;
7136
- const row = rowById.get(id);
7137
- act(id, row?.plugin === true ? "uninstall-plugin" : row?.pkg === void 0 ? "uninstall" : "remove-bundle");
7743
+ const target = rowById.get(id);
7744
+ act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
7138
7745
  }
7139
- }));
7746
+ });
7140
7747
  }
7141
7748
  //#endregion
7142
7749
  //#region ../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/plugin/localizedFormat.js
@@ -7413,13 +8020,17 @@ window.__ModuleLoader__.load({
7413
8020
  function EntryAction({ t, entry, title, onInstall, onShowInstalled, installDisabled = false }) {
7414
8021
  const latest = latestVersionOf(entry);
7415
8022
  if (latest === void 0) return null;
7416
- if (latest.install === "installed" || latest.install === "update-available") return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7417
- type: "button",
7418
- variant: "ghost",
7419
- size: "sm",
7420
- "aria-label": t("panels.discover.openInstalled", { name: title }),
7421
- onClick: () => onShowInstalled(entry.name)
7422
- }, t(latest.install === "update-available" ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
8023
+ if (latest.install === "installed" || latest.install === "update-available") {
8024
+ const update = latest.install === "update-available";
8025
+ return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8026
+ type: "button",
8027
+ variant: "ghost",
8028
+ size: "sm",
8029
+ className: update ? MarketPage_module_default.discoverUpdateAction : void 0,
8030
+ "aria-label": t("panels.discover.openInstalled", { name: title }),
8031
+ onClick: () => onShowInstalled(entry.name)
8032
+ }, t(update ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
8033
+ }
7423
8034
  if (latest.compat === "incompatible") return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
7424
8035
  label: t("panels.discover.noCompatibleVersion", { runtime: latest.engines?.dsh ?? "" }),
7425
8036
  side: "bottom",
@@ -7520,6 +8131,7 @@ window.__ModuleLoader__.load({
7520
8131
  var MARKET_DISCOVER_ROUTE = "panels/market-discover";
7521
8132
  var MARKET_DOC_ROUTE = "panels/market-doc";
7522
8133
  var MARKET_GIT_PROBE_ROUTE = "panels/git-probe";
8134
+ var MARKET_INSTALLED_ROUTE = "panels/market-installed";
7523
8135
  var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
7524
8136
  var MARKET_SOURCES_ROUTE = "panels/market-sources";
7525
8137
  //#endregion
@@ -7533,6 +8145,9 @@ window.__ModuleLoader__.load({
7533
8145
  function readGitProbe(url) {
7534
8146
  return apiGet(MARKET_GIT_PROBE_ROUTE, { url });
7535
8147
  }
8148
+ function readMarketInstalled() {
8149
+ return apiGet(MARKET_INSTALLED_ROUTE);
8150
+ }
7536
8151
  function readMarketDoc(name, version, kind) {
7537
8152
  return apiGet(MARKET_DOC_ROUTE, {
7538
8153
  name,
@@ -7736,10 +8351,24 @@ window.__ModuleLoader__.load({
7736
8351
  if (state === "unknown") return t("panels.discover.transportUnknown");
7737
8352
  return t("panels.discover.transportChecking");
7738
8353
  }
8354
+ function kindText(t, kind) {
8355
+ return t(kind === "ssh" ? "panels.discover.transportSsh" : "panels.discover.transportHttps");
8356
+ }
7739
8357
  function DiscoverTransport({ t, transport }) {
8358
+ const [open, setOpen] = (0, react.useState)(false);
8359
+ const chosenRow = transport.rows.find((row) => row.url === transport.chosen);
8360
+ const chosenState = chosenRow === void 0 ? void 0 : transport.states[chosenRow.url] ?? "checking";
8361
+ const probing = transport.probing;
8362
+ const summary = chosenRow !== void 0 ? kindText(t, chosenRow.kind) : probing ? t("panels.discover.transportChecking") : t("panels.discover.transportNone");
8363
+ const summaryState = probing || chosenState === void 0 ? "" : stateText(t, chosenState);
7740
8364
  const needsAuth = transport.rows.length > 0 && transport.rows.every((row) => transport.states[row.url] === "auth") && transport.customState !== "ok";
7741
8365
  const customBusy = transport.customState === "checking";
7742
- return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ (0, react.createElement)("div", {
8366
+ return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransportHead }, /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportKind }, summary), summaryState === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, summaryState), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8367
+ type: "button",
8368
+ variant: "ghost",
8369
+ size: "sm",
8370
+ onClick: () => setOpen((value) => !value)
8371
+ }, t(open ? "panels.discover.transportChangeHide" : "panels.discover.transportChange"))), open ? /* @__PURE__ */ (0, react.createElement)("div", {
7743
8372
  className: MarketPage_module_default.discoverTransportRows,
7744
8373
  role: "radiogroup",
7745
8374
  "aria-label": t("panels.discover.transportTitle")
@@ -7758,8 +8387,8 @@ window.__ModuleLoader__.load({
7758
8387
  value: row.url,
7759
8388
  checked: transport.chosen === row.url,
7760
8389
  onChange: () => transport.setChosen(row.url)
7761
- }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportKind }, t(row.kind === "ssh" ? "panels.discover.transportSsh" : "panels.discover.transportHttps")), label === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, label));
7762
- })), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ (0, react.createElement)(TextField, {
8390
+ }), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportKind }, kindText(t, row.kind)), label === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, label));
8391
+ })) : null, open ? /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ (0, react.createElement)(TextField, {
7763
8392
  type: "text",
7764
8393
  className: MarketPage_module_default.discoverTransportInput,
7765
8394
  value: transport.custom,
@@ -7778,7 +8407,7 @@ window.__ModuleLoader__.load({
7778
8407
  disabled: transport.custom.trim() === "" || customBusy,
7779
8408
  "aria-busy": customBusy,
7780
8409
  onClick: transport.checkCustom
7781
- }, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))), needsAuth ? /* @__PURE__ */ (0, react.createElement)("p", {
8410
+ }, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))) : null, needsAuth ? /* @__PURE__ */ (0, react.createElement)("p", {
7782
8411
  className: MarketPage_module_default.discoverNotice,
7783
8412
  role: "note"
7784
8413
  }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineRegular, {
@@ -7800,8 +8429,13 @@ window.__ModuleLoader__.load({
7800
8429
  const fallback = rows.find((row) => usable(states[row.url]));
7801
8430
  return fallback === void 0 ? null : fallback.url;
7802
8431
  }
7803
- function useGitTransport(source) {
7804
- const rows = (0, react.useMemo)(() => source === null ? [] : gitTransportCandidates(source.url), [source]);
8432
+ function useGitTransport(source, preferredKind) {
8433
+ const rows = (0, react.useMemo)(() => {
8434
+ if (source === null) return [];
8435
+ const candidates = gitTransportCandidates(source.url);
8436
+ if (preferredKind === void 0) return candidates;
8437
+ return [...candidates].sort((left, right) => Number(right.kind === preferredKind) - Number(left.kind === preferredKind));
8438
+ }, [source, preferredKind]);
7805
8439
  const [results, setResults] = (0, react.useState)({});
7806
8440
  const [picked, setPicked] = (0, react.useState)(null);
7807
8441
  const [custom, setCustom] = (0, react.useState)("");
@@ -7852,12 +8486,13 @@ window.__ModuleLoader__.load({
7852
8486
  }
7853
8487
  //#endregion
7854
8488
  //#region src/app/layouts/market/discover-confirm.tsx
7855
- function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
8489
+ function DiscoverConfirm({ t, locale, choice, transports, onCancel, onConfirm }) {
7856
8490
  if (choice === null) return null;
7857
8491
  return /* @__PURE__ */ (0, react.createElement)(DiscoverConfirmBody, {
7858
8492
  t,
7859
8493
  locale,
7860
8494
  choice,
8495
+ transports,
7861
8496
  onCancel,
7862
8497
  onConfirm
7863
8498
  });
@@ -7865,9 +8500,10 @@ window.__ModuleLoader__.load({
7865
8500
  function factLabel(t, kind) {
7866
8501
  return t(kind === "package" ? "panels.discover.factPackage" : kind === "registry" ? "panels.discover.factRegistry" : kind === "repository" ? "panels.discover.factRepository" : kind === "commit" ? "panels.discover.factCommit" : "panels.discover.factDirectory");
7867
8502
  }
7868
- function DiscoverConfirmBody({ t, locale, choice, onCancel, onConfirm }) {
8503
+ function DiscoverConfirmBody({ t, locale, choice, transports, onCancel, onConfirm }) {
7869
8504
  const git = choice.version.source.type === "git" ? choice.version.source : null;
7870
- const transport = useGitTransport(git);
8505
+ const host = git === null ? void 0 : gitAddressOf(git.url)?.host;
8506
+ const transport = useGitTransport(git, host === void 0 ? void 0 : transports[host]);
7871
8507
  const title = displayTitleOf(choice.entry, locale) || choice.entry.name;
7872
8508
  const facts = sourceFactsOf(choice.entry.name, choice.version).filter((fact) => git === null || fact.kind !== "repository");
7873
8509
  const ready = git === null || transport.ready;
@@ -7888,7 +8524,7 @@ window.__ModuleLoader__.load({
7888
8524
  disabled: !ready,
7889
8525
  "aria-busy": git !== null && transport.probing,
7890
8526
  onClick: () => onConfirm(transport.chosen ?? void 0)
7891
- }, t("panels.discover.cardInstall")))
8527
+ }, git !== null && transport.probing ? /* @__PURE__ */ (0, react.createElement)(Spinner, { size: 12 }) : null, t(git !== null && transport.probing ? "panels.discover.transportChecking" : "panels.discover.cardInstall")))
7892
8528
  }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverDialogBody }, /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.discoverConfirmHead }, /* @__PURE__ */ (0, react.createElement)("span", {
7893
8529
  className: MarketPage_module_default.discoverArtwork,
7894
8530
  "aria-hidden": "true"
@@ -8175,6 +8811,7 @@ window.__ModuleLoader__.load({
8175
8811
  t,
8176
8812
  locale: d.locale,
8177
8813
  choice: d.choice,
8814
+ transports: d.transports,
8178
8815
  onCancel: () => d.setChoice(null),
8179
8816
  onConfirm: d.install
8180
8817
  }), /* @__PURE__ */ (0, react.createElement)(DiscoverInitDialog, {
@@ -8416,6 +9053,8 @@ window.__ModuleLoader__.load({
8416
9053
  const [addingSource, setAddingSource] = (0, react.useState)(false);
8417
9054
  const [pendingSourceId, setPendingSourceId] = (0, react.useState)(null);
8418
9055
  const [knownSources, setKnownSources] = (0, react.useState)(null);
9056
+ const [installToken] = (0, react.useState)(() => `market-install:${globalThis.crypto.randomUUID()}`);
9057
+ usePublishMarketInstalling(installToken, installing !== null);
8419
9058
  const loaded = (0, react.useRef)(false);
8420
9059
  const loadTicket = (0, react.useRef)(0);
8421
9060
  const sourceTicket = (0, react.useRef)(0);
@@ -8441,7 +9080,8 @@ window.__ModuleLoader__.load({
8441
9080
  if (response === null || !response.ok) return;
8442
9081
  setKnownSources({
8443
9082
  sources: sourceRowsOf(response.sources),
8444
- selected: response.selected
9083
+ selected: response.selected,
9084
+ transports: response.transports ?? {}
8445
9085
  });
8446
9086
  }, []);
8447
9087
  const load = (0, react.useCallback)(async (force = false) => {
@@ -8461,7 +9101,8 @@ window.__ModuleLoader__.load({
8461
9101
  setPayload(response);
8462
9102
  setKnownSources({
8463
9103
  sources: response.sources,
8464
- selected: response.selected
9104
+ selected: response.selected,
9105
+ transports: {}
8465
9106
  });
8466
9107
  setLimit(50);
8467
9108
  }, [t]);
@@ -8627,7 +9268,7 @@ window.__ModuleLoader__.load({
8627
9268
  setDetail(null);
8628
9269
  beginSwitch();
8629
9270
  setKnownSources((current) => current === null ? current : {
8630
- sources: current.sources,
9271
+ ...current,
8631
9272
  selected: id
8632
9273
  });
8633
9274
  sources.send({
@@ -8666,6 +9307,7 @@ window.__ModuleLoader__.load({
8666
9307
  ...target.registry === void 0 ? {} : { registry: target.registry }
8667
9308
  }).then((outcome) => {
8668
9309
  if (!outcome.ok) return;
9310
+ publishMarketApplied(appliedUnitsOf(outcome.value));
8669
9311
  const verdict = installVerdictOf(outcome.value, t);
8670
9312
  if (verdict.kind === "failed") {
8671
9313
  provision.fail(verdict.text);
@@ -8707,6 +9349,7 @@ window.__ModuleLoader__.load({
8707
9349
  failure,
8708
9350
  sources: knownSources?.sources ?? payload?.sources ?? [],
8709
9351
  selected: knownSources?.selected ?? payload?.selected ?? null,
9352
+ transports: knownSources?.transports ?? {},
8710
9353
  entries,
8711
9354
  shown,
8712
9355
  total: sorted.length,
@@ -8876,7 +9519,7 @@ window.__ModuleLoader__.load({
8876
9519
  }
8877
9520
  //#endregion
8878
9521
  //#region src/app/layouts/market/market-header.tsx
8879
- function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd }) {
9522
+ function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
8880
9523
  const tabItems = (0, react.useMemo)(() => [{
8881
9524
  value: "installed",
8882
9525
  label: t("panels.market.tabInstalled"),
@@ -8888,23 +9531,14 @@ window.__ModuleLoader__.load({
8888
9531
  id: `${idPrefix}-tab-discover`,
8889
9532
  panelId: `${idPrefix}-panel-discover`
8890
9533
  }], [idPrefix, t]);
8891
- return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ (0, react.createElement)("div", null, /* @__PURE__ */ (0, react.createElement)("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(Tip, { label: t("panels.market.recheck") }, /* @__PURE__ */ (0, react.createElement)("button", {
8892
- type: "button",
8893
- className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
8894
- "aria-label": t("panels.market.checkUpdates"),
8895
- disabled: busy,
8896
- onClick: onReload
8897
- }, /* @__PURE__ */ (0, react.createElement)("span", {
8898
- className: MarketPage_module_default.marketIconWrap,
8899
- "aria-hidden": "true"
8900
- }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, null)))), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
9534
+ return /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ (0, react.createElement)("div", null, /* @__PURE__ */ (0, react.createElement)("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ (0, react.createElement)("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8901
9535
  variant: "primary",
8902
9536
  size: "sm",
8903
9537
  className: MarketPage_module_default.marketAddButton,
8904
9538
  icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
8905
9539
  disabled: busy,
8906
9540
  onClick: onAdd
8907
- }, t("panels.market.add.open"))))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.SegmentedTabs, {
9541
+ }, t("panels.market.add.open")))), /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.SegmentedTabs, {
8908
9542
  className: MarketPage_module_default.marketTabList,
8909
9543
  items: tabItems,
8910
9544
  value: tab,
@@ -9278,6 +9912,30 @@ window.__ModuleLoader__.load({
9278
9912
  };
9279
9913
  }
9280
9914
  //#endregion
9915
+ //#region src/app/layouts/market/use-settling-modules.ts
9916
+ var NO_UNITS = /* @__PURE__ */ new Set();
9917
+ function unitsOf(key) {
9918
+ return key === "" ? [] : key.split("|");
9919
+ }
9920
+ function useSettlingModules(installedKey, rosterKey, activeKey) {
9921
+ const seenRef = (0, react.useRef)(null);
9922
+ const [settling, setSettling] = (0, react.useState)(NO_UNITS);
9923
+ (0, react.useEffect)(() => {
9924
+ const units = unitsOf(installedKey);
9925
+ const held = holdBack(units, new Set(unitsOf(rosterKey)), new Set(unitsOf(activeKey)), seenRef.current);
9926
+ seenRef.current = new Set(units);
9927
+ setSettling(held.length === 0 ? NO_UNITS : new Set(held));
9928
+ if (held.length === 0) return;
9929
+ const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
9930
+ return () => clearTimeout(timer);
9931
+ }, [
9932
+ installedKey,
9933
+ rosterKey,
9934
+ activeKey
9935
+ ]);
9936
+ return settling;
9937
+ }
9938
+ //#endregion
9281
9939
  //#region src/shared/api/installed-plugins.ts
9282
9940
  var INSTALLED_PLUGINS_ROUTE = "panels/plugins";
9283
9941
  //#endregion
@@ -9304,6 +9962,7 @@ window.__ModuleLoader__.load({
9304
9962
  selfUpdate: null,
9305
9963
  read: false,
9306
9964
  checking: false,
9965
+ failed: false,
9307
9966
  checkedAt: null
9308
9967
  };
9309
9968
  var listeners$2 = /* @__PURE__ */ new Set();
@@ -9323,6 +9982,18 @@ window.__ModuleLoader__.load({
9323
9982
  listeners$2.delete(listener);
9324
9983
  };
9325
9984
  }
9985
+ function withMarketUpdates(modules, rows) {
9986
+ if (rows.length === 0) return modules;
9987
+ const byPkg = new Map(rows.map((row) => [row.pkg, row]));
9988
+ return modules.map((module) => {
9989
+ const row = byPkg.get(module.pkg);
9990
+ return row === void 0 ? module : {
9991
+ ...module,
9992
+ latest: row.version,
9993
+ market: row
9994
+ };
9995
+ });
9996
+ }
9326
9997
  function publish$1(next) {
9327
9998
  state = next;
9328
9999
  for (const listener of [...listeners$2]) listener();
@@ -9336,19 +10007,26 @@ window.__ModuleLoader__.load({
9336
10007
  ...state,
9337
10008
  checking: true
9338
10009
  });
9339
- const promise = Promise.all([readModuleVersions(force), readInstalledPlugins(force)]).catch(() => null).then((responses) => {
10010
+ const promise = Promise.all([
10011
+ readModuleVersions(force),
10012
+ readInstalledPlugins(force),
10013
+ readMarketInstalled()
10014
+ ]).catch(() => null).then((responses) => {
9340
10015
  if (at !== epoch) return;
9341
10016
  if (!force && seq < newestForceSeq) return;
9342
10017
  const versions = responses?.[0];
9343
10018
  const plugins = responses?.[1];
10019
+ const market = responses?.[2];
10020
+ const read = versions?.ok === true;
9344
10021
  publish$1({
9345
- modules: versions?.ok === true ? versions.modules : state.modules,
10022
+ modules: read ? withMarketUpdates(versions.modules, market?.ok === true ? market.modules : []) : state.modules,
9346
10023
  plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
9347
- workbench: versions?.ok === true ? versions.workbench ?? null : state.workbench,
9348
- selfUpdate: versions?.ok === true ? versions.selfUpdate ?? null : state.selfUpdate,
10024
+ workbench: read ? versions.workbench ?? null : state.workbench,
10025
+ selfUpdate: read ? versions.selfUpdate ?? null : state.selfUpdate,
9349
10026
  read: true,
9350
10027
  checking: false,
9351
- checkedAt: Date.now()
10028
+ failed: !read,
10029
+ checkedAt: read ? Date.now() : state.checkedAt
9352
10030
  });
9353
10031
  }).finally(() => {
9354
10032
  if (inFlight?.promise === promise) inFlight = null;
@@ -9384,6 +10062,7 @@ window.__ModuleLoader__.load({
9384
10062
  selfUpdate: value.selfUpdate,
9385
10063
  read: value.read,
9386
10064
  checking: value.checking,
10065
+ failed: value.failed,
9387
10066
  checkedAt: value.checkedAt,
9388
10067
  reload
9389
10068
  };
@@ -9639,18 +10318,79 @@ window.__ModuleLoader__.load({
9639
10318
  }, t("panels.market.add.failed", { reason })) : kind === "restart" ? /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")), why === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.resultMeta }, why)) : kind === "quiet" ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.approvalCaution }, t("panels.market.add.approveCaution"))), supply === void 0 || outcome.supply.state !== "failed" && (kind === "failed" || kind === "cancelled") ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ (0, react.createElement)("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)));
9640
10319
  }
9641
10320
  //#endregion
10321
+ //#region src/app/layouts/market/add-module-registry-prefs.ts
10322
+ var DEFAULT_REGISTRY_CHOICE = {
10323
+ kind: "default",
10324
+ value: ""
10325
+ };
10326
+ function isRegistryKind(value) {
10327
+ return value === "default" || value === "url" || value === "custom";
10328
+ }
10329
+ function parseRegistryChoice(raw) {
10330
+ if (raw === null) return DEFAULT_REGISTRY_CHOICE;
10331
+ let value;
10332
+ try {
10333
+ value = JSON.parse(raw);
10334
+ } catch {
10335
+ return DEFAULT_REGISTRY_CHOICE;
10336
+ }
10337
+ if (typeof value !== "object" || value === null) return DEFAULT_REGISTRY_CHOICE;
10338
+ const record = value;
10339
+ if (!isRegistryKind(record.kind)) return DEFAULT_REGISTRY_CHOICE;
10340
+ if (record.kind === "default") return DEFAULT_REGISTRY_CHOICE;
10341
+ if (record.kind === "custom") return {
10342
+ kind: "custom",
10343
+ value: ""
10344
+ };
10345
+ if (typeof record.value !== "string" || !customRegistryAllowed(record.value)) return DEFAULT_REGISTRY_CHOICE;
10346
+ return {
10347
+ kind: "url",
10348
+ value: record.value.trim()
10349
+ };
10350
+ }
10351
+ function readRegistryPrefs() {
10352
+ const custom = readText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM);
10353
+ return {
10354
+ choice: parseRegistryChoice(readText(STORAGE_KEY_MARKET_REGISTRY)),
10355
+ custom: custom === null ? "" : custom.trim()
10356
+ };
10357
+ }
10358
+ function writeRegistryChoice(choice) {
10359
+ if (choice.kind === "custom") {
10360
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
10361
+ kind: "custom",
10362
+ value: ""
10363
+ }));
10364
+ return;
10365
+ }
10366
+ if (choice.kind === "url" && customRegistryAllowed(choice.value)) {
10367
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
10368
+ kind: "url",
10369
+ value: choice.value.trim()
10370
+ }));
10371
+ return;
10372
+ }
10373
+ writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify(DEFAULT_REGISTRY_CHOICE));
10374
+ }
10375
+ function writeRegistryCustom(value) {
10376
+ const text = value.trim();
10377
+ writeText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM, text === "" ? null : text);
10378
+ }
10379
+ function reconcileRegistryChoice(choice, choices) {
10380
+ if (choice.kind !== "url") return choice;
10381
+ return choices.some((option) => option.choice.kind === "url" && option.choice.value === choice.value) ? choice : DEFAULT_REGISTRY_CHOICE;
10382
+ }
10383
+ //#endregion
9642
10384
  //#region src/app/layouts/market/use-add-module.ts
9643
10385
  function newRequestId() {
9644
10386
  return crypto.randomUUID();
9645
10387
  }
9646
10388
  function useAddModule(options) {
9647
10389
  const { onInstalled, failedText } = options;
10390
+ const [prefs] = (0, react.useState)(readRegistryPrefs);
9648
10391
  const [spec, setSpec] = (0, react.useState)("");
9649
- const [choice, setChoice] = (0, react.useState)({
9650
- kind: "default",
9651
- value: ""
9652
- });
9653
- const [custom, setCustom] = (0, react.useState)("");
10392
+ const [choice, setChoice] = (0, react.useState)(prefs.choice);
10393
+ const [custom, setCustom] = (0, react.useState)(prefs.custom);
9654
10394
  const [registryOpen, setRegistryOpen] = (0, react.useState)(false);
9655
10395
  const [guideOpen, setGuideOpen] = (0, react.useState)(false);
9656
10396
  const [phase, setPhase] = (0, react.useState)("idle");
@@ -9662,6 +10402,8 @@ window.__ModuleLoader__.load({
9662
10402
  const generationRef = (0, react.useRef)(0);
9663
10403
  const requestIdRef = (0, react.useRef)("");
9664
10404
  const { busy: classifying } = useVisibleBusy(phase === "inspecting", 500);
10405
+ const [installToken] = (0, react.useState)(() => `market-install:${newRequestId()}`);
10406
+ usePublishMarketInstalling(installToken, phase === "installing");
9665
10407
  const write = useHostWrite({
9666
10408
  channel: "provision",
9667
10409
  networkText: failedText
@@ -9678,7 +10420,9 @@ window.__ModuleLoader__.load({
9678
10420
  let alive = true;
9679
10421
  readBundleRegistries().then((response) => {
9680
10422
  if (!alive) return;
9681
- setChoices(registryOptions(response.ok ? response.registries : null));
10423
+ const options = registryOptions(response.ok ? response.registries : null);
10424
+ setChoices(options);
10425
+ setChoice((previous) => reconcileRegistryChoice(previous, options));
9682
10426
  });
9683
10427
  return () => {
9684
10428
  alive = false;
@@ -9745,6 +10489,7 @@ window.__ModuleLoader__.load({
9745
10489
  supply: value.supply,
9746
10490
  ...value.plugin === void 0 ? {} : { plugin: value.plugin }
9747
10491
  });
10492
+ publishMarketApplied(appliedUnitsOf(value));
9748
10493
  setPhase("result");
9749
10494
  if (value.change.application === "applied" || value.change.application === "restart-required") onInstalled();
9750
10495
  });
@@ -9789,6 +10534,14 @@ window.__ModuleLoader__.load({
9789
10534
  setPreview(null);
9790
10535
  setPhase("idle");
9791
10536
  }, []);
10537
+ const choose = (0, react.useCallback)((next) => {
10538
+ setChoice(next);
10539
+ writeRegistryChoice(next);
10540
+ }, []);
10541
+ const chooseCustom = (0, react.useCallback)((value) => {
10542
+ setCustom(value);
10543
+ writeRegistryCustom(value);
10544
+ }, []);
9792
10545
  return {
9793
10546
  spec,
9794
10547
  choice,
@@ -9804,10 +10557,8 @@ window.__ModuleLoader__.load({
9804
10557
  removing,
9805
10558
  builds: outcome?.change.pendingBuilds ?? [],
9806
10559
  setSpec,
9807
- setChoice: (0, react.useCallback)((next) => {
9808
- setChoice(next);
9809
- }, []),
9810
- setCustom,
10560
+ setChoice: choose,
10561
+ setCustom: chooseCustom,
9811
10562
  toggleRegistry: (0, react.useCallback)(() => setRegistryOpen((value) => !value), []),
9812
10563
  closeRegistry: (0, react.useCallback)(() => setRegistryOpen(false), []),
9813
10564
  toggleGuide: (0, react.useCallback)(() => setGuideOpen((value) => !value), []),
@@ -9930,7 +10681,6 @@ window.__ModuleLoader__.load({
9930
10681
  checking: false,
9931
10682
  checkedAt: null
9932
10683
  };
9933
- var NO_UNITS = /* @__PURE__ */ new Set();
9934
10684
  function useLiveManifests(units) {
9935
10685
  const subscribe = (0, react.useCallback)((listener) => units.subscribe(listener), [units]);
9936
10686
  const revision = (0, react.useCallback)(() => units.version(), [units]);
@@ -9957,7 +10707,8 @@ window.__ModuleLoader__.load({
9957
10707
  installed: modules === null ? void 0 : withClientRefusals(modules, units.refusals()),
9958
10708
  plugins,
9959
10709
  workbench,
9960
- busy: useMarketBusy()
10710
+ busy: useMarketBusy(),
10711
+ ...useMarketInstallState()
9961
10712
  });
9962
10713
  (0, react.useEffect)(() => {
9963
10714
  publishPanelHint(MARKET_PANEL_ID, hint);
@@ -9972,8 +10723,9 @@ window.__ModuleLoader__.load({
9972
10723
  const manifests = useLiveManifests(units);
9973
10724
  const installable = useInstallableUnits(units);
9974
10725
  const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
9975
- const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, read: installedRead, reload: reloadVersions } = useModuleVersions();
10726
+ const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, failed: versionsFailed, checkedAt: versionsCheckedAt, read: installedRead, reload: reloadVersions } = useModuleVersions();
9976
10727
  const machineBoard = useEnabledUnits(0, null);
10728
+ const install = useMarketInstallState();
9977
10729
  const [adding, setAdding] = (0, react.useState)(false);
9978
10730
  const [acting, setActing] = (0, react.useState)(false);
9979
10731
  const [tab, setTab] = (0, react.useState)("installed");
@@ -10015,27 +10767,11 @@ window.__ModuleLoader__.load({
10015
10767
  forceProbe,
10016
10768
  reloadVersions
10017
10769
  ]);
10018
- const installedKey = (installed ?? []).map((module) => module.unit).join("|");
10019
- const rosterKey = manifests.map((manifest) => manifest.id).join("|");
10020
- const activeKey = Object.keys(capabilities ?? {}).join("|");
10021
- const seenRef = (0, react.useRef)(null);
10022
- const [settling, setSettling] = (0, react.useState)(NO_UNITS);
10023
- (0, react.useEffect)(() => {
10024
- const units = installedKey === "" ? [] : installedKey.split("|");
10025
- const held = holdBack(units, new Set(rosterKey === "" ? [] : rosterKey.split("|")), new Set(activeKey === "" ? [] : activeKey.split("|")), seenRef.current);
10026
- seenRef.current = new Set(units);
10027
- setSettling(held.length === 0 ? NO_UNITS : new Set(held));
10028
- if (held.length === 0) return;
10029
- const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
10030
- return () => clearTimeout(timer);
10031
- }, [
10032
- installedKey,
10033
- rosterKey,
10034
- activeKey
10035
- ]);
10770
+ const settling = useSettlingModules((installed ?? []).map((module) => module.unit).join("|"), manifests.map((manifest) => manifest.id).join("|"), Object.keys(capabilities ?? {}).join("|"));
10771
+ const held = install.applied.size === 0 ? settling : /* @__PURE__ */ new Set([...settling, ...install.applied]);
10036
10772
  const freshness = {
10037
10773
  loaded: capabilities !== null,
10038
- checking,
10774
+ checking: checking || versionsChecking,
10039
10775
  checkedAt
10040
10776
  };
10041
10777
  const pendingFreshness = {
@@ -10048,16 +10784,13 @@ window.__ModuleLoader__.load({
10048
10784
  const mockNonce = devMarket.pick.nonce;
10049
10785
  const shownFreshness = mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS;
10050
10786
  const shownRead = mock === void 0 ? installedRead : mock.installedRead ?? true;
10051
- const shownChecking = shownFreshness.checking || mock === void 0 && versionsChecking;
10052
- const busy = !marketSettled(shownFreshness, shownRead) || shownChecking || acting;
10787
+ const busy = !marketSettled(shownFreshness, shownRead) || acting;
10053
10788
  return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketPage }, /* @__PURE__ */ (0, react.createElement)(MarketHeader, {
10054
10789
  t,
10055
10790
  idPrefix: MARKET_PANEL_ID,
10056
10791
  tab,
10057
10792
  busy,
10058
- checking: shownChecking,
10059
10793
  onTab: setTab,
10060
- onReload: () => reload({ force: true }),
10061
10794
  onAdd: openAddModule
10062
10795
  }), devMarket.strip, /* @__PURE__ */ (0, react.createElement)("div", {
10063
10796
  id: `${MARKET_PANEL_ID}-panel-installed`,
@@ -10075,12 +10808,15 @@ window.__ModuleLoader__.load({
10075
10808
  onChanged: reload,
10076
10809
  onPending: setActing,
10077
10810
  updates,
10811
+ updatesCheckedAt: versionsCheckedAt,
10812
+ updatesFailed: versionsFailed,
10078
10813
  installed,
10079
10814
  installedRead: shownRead,
10080
10815
  workbench,
10081
10816
  selfUpdate,
10082
10817
  plugins,
10083
- settling: mock === void 0 ? settling : void 0,
10818
+ settling: mock === void 0 ? held : void 0,
10819
+ installing: mock === void 0 ? install.installing : false,
10084
10820
  mock,
10085
10821
  defaults: machineBoard?.defaults ?? [],
10086
10822
  changed: machineBoard?.changed ?? {}
@@ -11567,6 +12303,7 @@ window.__ModuleLoader__.load({
11567
12303
  return manifestsCache;
11568
12304
  },
11569
12305
  refusals: () => refusals,
12306
+ declared: () => [...known.values()],
11570
12307
  installable: () => installableIds,
11571
12308
  setManifests(manifests, installable) {
11572
12309
  known = new Map(manifests.map((manifest) => [manifest.id, manifest]));
@@ -12511,6 +13248,45 @@ window.__ModuleLoader__.load({
12511
13248
  }, []);
12512
13249
  return (0, react.createElement)(ApprovalPlan, { rows: marketSourceRows(tool, args, payload, t) });
12513
13250
  }
13251
+ function pluginToolIndexOf(manifests) {
13252
+ const index = /* @__PURE__ */ new Map();
13253
+ for (const manifest of manifests) for (const tool of manifest.tools) {
13254
+ if (tool.opencli === void 0) continue;
13255
+ index.set(tool.name, tool.opencli);
13256
+ }
13257
+ return index;
13258
+ }
13259
+ function argText(value) {
13260
+ if (typeof value === "string") return value;
13261
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
13262
+ const text = JSON.stringify(value);
13263
+ return text === void 0 ? String(value) : text;
13264
+ }
13265
+ function pluginApprovalRows(origin, args, t) {
13266
+ const rows = [{
13267
+ label: t("approval.plugin.name"),
13268
+ value: origin.plugin
13269
+ }, {
13270
+ label: t("approval.plugin.command"),
13271
+ value: origin.command
13272
+ }];
13273
+ const note = args[APPROVAL_NOTE_ARG];
13274
+ if (typeof note === "string" && note.trim() !== "") rows.push({
13275
+ label: t("approval.plugin.note"),
13276
+ value: note.replace(/\s+/g, " ").trim()
13277
+ });
13278
+ for (const name of origin.args) {
13279
+ if (!(name in args)) continue;
13280
+ rows.push({
13281
+ label: name,
13282
+ value: argText(args[name])
13283
+ });
13284
+ }
13285
+ return rows;
13286
+ }
13287
+ function shellApprovalRenderer(manifests) {
13288
+ return (input, t) => shellApprovalDetail(input, t, pluginToolIndexOf(manifests()));
13289
+ }
12514
13290
  function shellClaimsApprovalDetail(tool) {
12515
13291
  return ALL_TOOLS.includes(tool);
12516
13292
  }
@@ -12522,7 +13298,9 @@ window.__ModuleLoader__.load({
12522
13298
  value: `${unit === "" ? "<unit>" : unit} · ${id === "" ? "<id>" : id}`
12523
13299
  }];
12524
13300
  }
12525
- function shellApprovalPlan(input, t) {
13301
+ function shellApprovalPlan(input, t, pluginTools) {
13302
+ const origin = pluginTools?.get(input.tool);
13303
+ if (origin !== void 0) return { rows: pluginApprovalRows(origin, input.args, t) };
12526
13304
  if (input.tool === "workbench_diy_record_prepare") return {
12527
13305
  rows: recordApprovalRows(input.args, t),
12528
13306
  warn: t("approval.record.noSwitch")
@@ -12533,7 +13311,7 @@ window.__ModuleLoader__.load({
12533
13311
  };
12534
13312
  return shellClaimsApprovalDetail(input.tool) ? { rows: [] } : void 0;
12535
13313
  }
12536
- function shellApprovalDetail(input, t) {
13314
+ function shellApprovalDetail(input, t, pluginTools) {
12537
13315
  if (input.tool === "workbench_diy_publish") return (0, react.createElement)(PublishApprovalSeat, {
12538
13316
  args: input.args,
12539
13317
  t
@@ -12543,7 +13321,7 @@ window.__ModuleLoader__.load({
12543
13321
  args: input.args,
12544
13322
  t
12545
13323
  });
12546
- const plan = shellApprovalPlan(input, t);
13324
+ const plan = shellApprovalPlan(input, t, pluginTools);
12547
13325
  if (plan === void 0) return void 0;
12548
13326
  if (plan.rows.length === 0) return (0, react.createElement)(react.Fragment, null);
12549
13327
  return /* @__PURE__ */ (0, react.createElement)(ApprovalPlan, {
@@ -12893,6 +13671,10 @@ window.__ModuleLoader__.load({
12893
13671
  }, /* @__PURE__ */ (0, react.createElement)("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))));
12894
13672
  }));
12895
13673
  }
13674
+ var BoardEmpty_module_default = {
13675
+ actions: "_actions_smeq7_1",
13676
+ action: "_action_smeq7_1"
13677
+ };
12896
13678
  //#endregion
12897
13679
  //#region src/app/layouts/rightbar/BoardEmpty.tsx
12898
13680
  function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
@@ -12900,20 +13682,23 @@ window.__ModuleLoader__.load({
12900
13682
  icon: /* @__PURE__ */ (0, react.createElement)(IconBrandMark, { size: 32 }),
12901
13683
  title: t("panels.empty"),
12902
13684
  hint: t("panels.emptyHint"),
12903
- action: /* @__PURE__ */ (0, react.createElement)(react.Fragment, null, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
13685
+ action: /* @__PURE__ */ (0, react.createElement)("div", { className: BoardEmpty_module_default.actions }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
12904
13686
  type: "button",
12905
13687
  size: "sm",
12906
13688
  variant: "primary",
13689
+ className: BoardEmpty_module_default.action,
12907
13690
  onClick: onBuildModule
12908
13691
  }, t("panels.buildModule")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
12909
13692
  type: "button",
12910
13693
  size: "sm",
12911
13694
  variant: "toolbar",
13695
+ className: BoardEmpty_module_default.action,
12912
13696
  onClick: onOpenModules
12913
13697
  }, t("panels.choose")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
12914
13698
  type: "button",
12915
13699
  size: "sm",
12916
13700
  variant: "toolbar",
13701
+ className: BoardEmpty_module_default.action,
12917
13702
  onClick: onOpenMarket
12918
13703
  }, t("panels.browseMarket")))
12919
13704
  });
@@ -15456,7 +16241,7 @@ window.__ModuleLoader__.load({
15456
16241
  ...face.messages === void 0 ? {} : { messages: face.messages }
15457
16242
  }));
15458
16243
  }
15459
- 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_jfyof_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_jfyof_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_jfyof_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_jfyof_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_jfyof_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_jfyof_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_jfyof_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_jfyof_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_jfyof_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_jfyof_39 ._marketVersion_jfyof_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_jfyof_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_jfyof_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_jfyof_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_jfyof_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_jfyof_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_jfyof_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_jfyof_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_jfyof_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_jfyof_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_jfyof_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_jfyof_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_jfyof_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_jfyof_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_jfyof_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_jfyof_175 ._marketSectionTitle_jfyof_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketName_jfyof_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketIcon_jfyof_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_jfyof_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_jfyof_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_jfyof_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_jfyof_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_jfyof_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_jfyof_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_jfyof_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_jfyof_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_jfyof_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_jfyof_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_jfyof_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_jfyof_263[hidden] {\n display: none;\n}\n\n._marketTabs_jfyof_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_jfyof_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_jfyof_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_jfyof_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_jfyof_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_jfyof_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_jfyof_312 svg {\n animation: _wb-spin_jfyof_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_jfyof_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_jfyof_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_jfyof_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_jfyof_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_jfyof_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_jfyof_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_jfyof_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_jfyof_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_jfyof_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_jfyof_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_jfyof_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_jfyof_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_jfyof_395 {\n flex: none;\n}\n\n._discoverSearch_jfyof_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_jfyof_407 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_jfyof_412 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_jfyof_407 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_jfyof_399 ._discoverSearchClear_jfyof_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_jfyof_421:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_jfyof_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_jfyof_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_jfyof_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_jfyof_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_jfyof_399 {\n grid-area: search;\n }\n\n ._discoverSort_jfyof_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_jfyof_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_jfyof_472 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_jfyof_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_jfyof_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_jfyof_488:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_jfyof_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_jfyof_514 {\n object-fit: contain;\n}\n\n._discoverMain_jfyof_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_jfyof_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_jfyof_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_jfyof_534::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_jfyof_534:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_jfyof_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_jfyof_565 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_jfyof_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_jfyof_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_jfyof_587 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_jfyof_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_jfyof_602 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_jfyof_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_jfyof_616 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_jfyof_607 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_jfyof_626 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_jfyof_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_jfyof_632:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_jfyof_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_jfyof_655 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_jfyof_659 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_jfyof_665 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_jfyof_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_jfyof_678 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_jfyof_685 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_jfyof_690 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_jfyof_695 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_jfyof_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_jfyof_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_jfyof_713 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_jfyof_719 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_jfyof_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_jfyof_734 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_jfyof_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_jfyof_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_jfyof_757 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_jfyof_764 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_jfyof_764:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_jfyof_774 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_jfyof_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_jfyof_790 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_jfyof_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_jfyof_804 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_jfyof_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_jfyof_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_jfyof_819 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_jfyof_837 {\n align-self: center;\n}\n\n._discoverTransport_jfyof_841 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_jfyof_847 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRows_jfyof_852 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_jfyof_852 {\n display: flex;\n flex: 1;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n}\n\n._discoverTransportRow_jfyof_852:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_jfyof_852:has(._discoverTransportRadio_jfyof_873:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_jfyof_852:has(._discoverTransportRadio_jfyof_873:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_jfyof_873 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_jfyof_887 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_jfyof_893 {\n flex: none;\n margin-left: auto;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='ok'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='auth'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='unreachable'] ._discoverTransportState_jfyof_893,\n._discoverTransportRow_jfyof_852[data-state='unknown'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_jfyof_913 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_jfyof_919 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_jfyof_924 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverInstallText_jfyof_935 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_jfyof_941 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_jfyof_945 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_jfyof_951 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_jfyof_959 {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wb-len-12);\n padding: var(--wb-len-10) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceConfirm_jfyof_968 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_jfyof_974 {\n display: flex;\n flex: 1;\n align-items: flex-start;\n gap: var(--wb-len-10);\n min-width: 0;\n cursor: pointer;\n}\n\n._discoverSourceRadio_jfyof_983 {\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._discoverSourceMain_jfyof_991 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_jfyof_999 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverSourceUrl_jfyof_1007 {\n display: block;\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverSourceMore_jfyof_1017 {\n flex: none;\n}\n\n._discoverSourceLoading_jfyof_1021 {\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_jfyof_1031 {\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_jfyof_1031 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_jfyof_1045 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_jfyof_1051 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_jfyof_1057 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_jfyof_1062 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_jfyof_1068 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_jfyof_1073 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_jfyof_1079 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_jfyof_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_jfyof_502._discoverSkeletonFill_jfyof_1079 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_jfyof_1088 {\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_jfyof_1095 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_jfyof_1099 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_jfyof_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_jfyof_1079 {\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*/";
16244
+ 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: grid;\n grid-template-columns: minmax(var(--wb-len-56), auto) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-2);\n align-items: baseline;\n margin: 0;\n}\n.wb-approvalRow {\n display: contents;\n}\n.wb-approvalLabel {\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.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_485ym_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_485ym_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_485ym_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_485ym_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_485ym_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_485ym_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_485ym_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_485ym_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_485ym_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_485ym_39 ._marketVersion_485ym_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_485ym_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_485ym_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_485ym_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_485ym_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_485ym_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_485ym_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_485ym_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_485ym_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_485ym_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_485ym_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_485ym_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_485ym_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_485ym_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_485ym_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionAction_485ym_175 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n margin-left: auto;\n min-width: 0;\n}\n\n._marketSectionQuiet_485ym_183 ._marketSectionTitle_485ym_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_485ym_183 ._marketName_485ym_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_485ym_183 ._marketIcon_485ym_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_485ym_196 {\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_485ym_206 {\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_485ym_213 {\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._marketFailureSeat_485ym_220 {\n grid-column: 2 / -1;\n min-width: 0;\n}\n\n._marketEmpty_485ym_225 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_485ym_230 {\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_485ym_230 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_485ym_248 {\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_485ym_256 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_485ym_261 {\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_485ym_267 {\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_485ym_276 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_485ym_276[hidden] {\n display: none;\n}\n\n._marketTabs_485ym_286 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_485ym_291 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_485ym_296 {\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_485ym_225 {\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_485ym_313 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_485ym_318 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_485ym_325 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_485ym_332 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_485ym_338 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_485ym_343 {\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_485ym_350 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_485ym_356 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_485ym_361 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_485ym_366 {\n flex: none;\n}\n\n._discoverSearch_485ym_370 {\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_485ym_378 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_485ym_383 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_485ym_378 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_485ym_370 ._discoverSearchClear_485ym_392 {\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_485ym_392:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_485ym_332 {\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_485ym_338 {\n grid-area: market;\n }\n\n ._discoverMarketButton_485ym_343 {\n margin-left: 0;\n }\n\n ._discoverLabels_485ym_356 {\n grid-area: labels;\n }\n\n ._discoverSearch_485ym_370 {\n grid-area: search;\n }\n\n ._discoverSort_485ym_361 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_485ym_366 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_485ym_443 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_485ym_450 {\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_485ym_459 {\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_485ym_459:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_485ym_473 {\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_485ym_485 {\n object-fit: contain;\n}\n\n._discoverMain_485ym_489 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_485ym_497 {\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_485ym_505 {\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_485ym_505::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_485ym_505:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_485ym_505: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_485ym_536 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_485ym_542 {\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_485ym_551 {\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_485ym_558 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_485ym_564 {\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._discoverUpdateAction_485ym_573 {\n color: var(--dsw-alias-state-warn-primary);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._discoverBlocked_485ym_578 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_485ym_583 {\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_485ym_592 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_485ym_583 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_485ym_602 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_485ym_608 {\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_485ym_608:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_485ym_608: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_485ym_631 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_485ym_635 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_485ym_641 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_485ym_647 {\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_485ym_654 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_485ym_661 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_485ym_666 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_485ym_671 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_485ym_676 {\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_485ym_682 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_485ym_689 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_485ym_695 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_485ym_700 {\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_485ym_710 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_485ym_716 {\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_485ym_724 {\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_485ym_733 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_485ym_740 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_485ym_740:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_485ym_750 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_485ym_758 {\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_485ym_766 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_485ym_771 {\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_485ym_780 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_485ym_786 {\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_485ym_795 {\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_485ym_795 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_485ym_813 {\n align-self: center;\n}\n\n._discoverTransport_485ym_817 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_485ym_823 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_485ym_830 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_485ym_823 ._discoverTransportKind_485ym_835 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_485ym_823 ._discoverTransportState_485ym_840 {\n margin-left: 0;\n}\n\n._discoverTransportHead_485ym_823 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_485ym_848 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_485ym_848 {\n display: flex;\n flex: 1;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n}\n\n._discoverTransportRow_485ym_848:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_485ym_848:has(._discoverTransportRadio_485ym_869:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_485ym_848:has(._discoverTransportRadio_485ym_869:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_485ym_869 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_485ym_835 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_485ym_840 {\n flex: none;\n margin-left: auto;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRow_485ym_848[data-state='ok'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_485ym_848[data-state='auth'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_485ym_848[data-state='unreachable'] ._discoverTransportState_485ym_840,\n._discoverTransportRow_485ym_848[data-state='unknown'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_485ym_909 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_485ym_915 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_485ym_920 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverInstallText_485ym_931 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_485ym_937 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_485ym_941 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_485ym_947 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_485ym_955 {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wb-len-12);\n padding: var(--wb-len-10) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceConfirm_485ym_964 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_485ym_970 {\n display: flex;\n flex: 1;\n align-items: flex-start;\n gap: var(--wb-len-10);\n min-width: 0;\n cursor: pointer;\n}\n\n._discoverSourceRadio_485ym_979 {\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._discoverSourceMain_485ym_987 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_485ym_995 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverSourceUrl_485ym_1003 {\n display: block;\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverSourceMore_485ym_1013 {\n flex: none;\n}\n\n._discoverSourceLoading_485ym_1017 {\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_485ym_1027 {\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_485ym_1027 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_485ym_1041 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_485ym_1047 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_485ym_1053 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_485ym_1058 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_485ym_1064 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_485ym_1069 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_485ym_1075 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_485ym_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_485ym_473._discoverSkeletonFill_485ym_1075 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_485ym_1084 {\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_485ym_1091 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_485ym_1095 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_485ym_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_485ym_1075 {\n animation: none;\n }\n}\n\n._block_mxnbc_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-2) 0 var(--wb-len-8);\n min-width: 0;\n}\n\n._head_mxnbc_9 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._title_mxnbc_16 {\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._fact_mxnbc_22 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._actions_mxnbc_30 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-2);\n margin-left: calc(-1 * var(--wb-len-8));\n}\n\n._hint_mxnbc_38 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._output_mxnbc_44 {\n margin-top: var(--wb-len-2);\n min-width: 0;\n}\n._check_1g6tv_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n min-width: 0;\n}\n\n._status_1g6tv_8 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-caption);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n._button_1g6tv_15 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n}\n\n._icon_1g6tv_22 {\n display: inline-flex;\n}\n\n@media (max-width: 720px) {\n ._status_1g6tv_8 {\n display: none;\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._actions_smeq7_1 {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--wb-len-8);\n max-width: 100%;\n}\n\n._action_smeq7_1 {\n flex: none;\n white-space: nowrap;\n}\n\n@container (max-width: 340px) {\n ._actions_smeq7_1 {\n flex-direction: column;\n width: var(--wb-len-220);\n max-width: 100%;\n }\n\n ._action_smeq7_1 {\n width: 100%;\n }\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*/";
15460
16245
  function workbenchCss() {
15461
16246
  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}`;
15462
16247
  }
@@ -15705,7 +16490,7 @@ window.__ModuleLoader__.load({
15705
16490
  inject: () => ({
15706
16491
  t: ctx.locale.bind(LOCALE_NS),
15707
16492
  units: units.all(),
15708
- renderShell: shellApprovalDetail
16493
+ renderShell: shellApprovalRenderer(units.declared)
15709
16494
  })
15710
16495
  }, ApprovalDetail));
15711
16496
  ctx.slots.inject("conversation.session.header.corner", () => ctx.slots.register({