@dsh-workbench/core 1.1.4 → 1.1.6
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.
- package/client.js +1298 -510
- package/dist/client/client.body.js +1298 -510
- package/dist/client/index.js +1160 -372
- package/dist/host/index.js +1151 -255
- package/dist/types/app/layouts/approval-detail.d.ts +6 -3
- package/dist/types/app/layouts/market/add-module-registry-prefs.d.ts +11 -0
- package/dist/types/app/layouts/market/market-check.d.ts +10 -1
- package/dist/types/app/layouts/market/market-header.d.ts +3 -1
- package/dist/types/app/layouts/market/section-check.d.ts +12 -0
- package/dist/types/app/layouts/market/use-market-reload.d.ts +14 -0
- package/dist/types/app/layouts/market/use-module-versions.d.ts +20 -4
- package/dist/types/app/layouts/rightbar/AskAgentButton.d.ts +6 -0
- package/dist/types/app/layouts/rightbar/FailureCard.d.ts +8 -0
- package/dist/types/app/layouts/rightbar/MarketView.d.ts +6 -3
- package/dist/types/app/layouts/rightbar/SharedSection.d.ts +5 -2
- package/dist/types/app/layouts/rightbar/failure-card-text.d.ts +20 -0
- package/dist/types/app/layouts/rightbar/market-act.d.ts +2 -5
- package/dist/types/app/layouts/rightbar/market-change.d.ts +1 -0
- package/dist/types/app/layouts/rightbar/market-hint.d.ts +2 -0
- package/dist/types/app/layouts/rightbar/market-install.d.ts +11 -0
- package/dist/types/app/layouts/rightbar/market-row-types.d.ts +9 -1
- package/dist/types/app/layouts/rightbar/market-rows.d.ts +14 -1
- package/dist/types/app/layouts/rightbar/market-section.d.ts +5 -3
- package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +3 -8
- package/dist/types/app/layouts/rightbar/market-uninstall.d.ts +10 -0
- package/dist/types/app/layouts/rightbar/market-update-verdict.d.ts +2 -0
- package/dist/types/app/layouts/rightbar/market-view-text.d.ts +2 -0
- package/dist/types/kernel/client/registry.d.ts +1 -0
- package/dist/types/kernel/contract/bundle-install.d.ts +1 -1
- package/dist/types/kernel/contract/market-index.d.ts +1 -1
- package/dist/types/modules/panels/model/market-env.d.ts +2 -2
- package/dist/types/modules/panels/model/market-install-error.d.ts +3 -0
- package/dist/types/modules/panels/model/market-install-error.test.d.ts +1 -0
- package/dist/types/modules/panels/model/market-registry.d.ts +2 -1
- package/dist/types/modules/panels/model/market-remove.d.ts +13 -0
- package/dist/types/modules/panels/model/market-remove.test.d.ts +1 -0
- package/dist/types/modules/panels/model/market-route.d.ts +1 -1
- package/dist/types/modules/panels/model/market-swap-stuck.d.ts +20 -0
- package/dist/types/modules/panels/model/market-swap-stuck.test.d.ts +1 -0
- package/dist/types/modules/panels/model/market-types.d.ts +3 -0
- package/dist/types/modules/panels/model/market-update-bundle.d.ts +5 -0
- package/dist/types/modules/panels/model/market.d.ts +1 -0
- package/dist/types/modules/panels/model/plugin-actions.d.ts +1 -1
- package/dist/types/shared/api/host/self-update-marker.d.ts +5 -0
- package/dist/types/shared/api/host/self-update-marker.test.d.ts +1 -0
- package/package.json +3 -3
- package/skills/workbench-module-diy/TOOLS.md +11 -2
- package/skills/workbench-module-diy/WIRING.md +2 -1
|
@@ -723,6 +723,10 @@ var STORAGE_KEY_RIGHTBAR = "dsh-workbench.rightbar.expanded";
|
|
|
723
723
|
var STORAGE_KEY_RIGHTBAR_COLUMN = "dsh-workbench.rightbar.column";
|
|
724
724
|
/** 记住右栏宽度(像素数字的字符串)的 localStorage 键。 */
|
|
725
725
|
var STORAGE_KEY_RIGHTBAR_WIDTH = "dsh-workbench.rightbar.width";
|
|
726
|
+
/** 记住「添加模块」浮层选过的安装源的 localStorage 键。 */
|
|
727
|
+
var STORAGE_KEY_MARKET_REGISTRY = "dsh-workbench.market.registry";
|
|
728
|
+
/** 记住「添加模块」浮层上次填过的自定义源地址的 localStorage 键。 */
|
|
729
|
+
var STORAGE_KEY_MARKET_REGISTRY_CUSTOM = "dsh-workbench.market.registry.custom";
|
|
726
730
|
/** dsh i18n 的命名空间:词表都注册在它下面,`ctx.locale.register` / `bind` 按它取。 */
|
|
727
731
|
var LOCALE_NS = "workbench";
|
|
728
732
|
//#endregion
|
|
@@ -781,13 +785,13 @@ async function apiPost(route, body) {
|
|
|
781
785
|
//#endregion
|
|
782
786
|
//#region ../shared/dist/lib/react.js
|
|
783
787
|
var react$1 = require("react");
|
|
784
|
-
var h$
|
|
785
|
-
var Fragment$
|
|
788
|
+
var h$71 = react$1.createElement;
|
|
789
|
+
var Fragment$22 = react$1.Fragment;
|
|
786
790
|
var Component = react$1.Component;
|
|
787
791
|
react$1.createContext;
|
|
788
792
|
react$1.useContext;
|
|
789
|
-
var useState$
|
|
790
|
-
var useEffect$
|
|
793
|
+
var useState$42 = react$1.useState;
|
|
794
|
+
var useEffect$32 = react$1.useEffect;
|
|
791
795
|
react$1.useLayoutEffect;
|
|
792
796
|
var useMemo$10 = react$1.useMemo;
|
|
793
797
|
react$1.useCallback;
|
|
@@ -802,7 +806,7 @@ react$1.useSyncExternalStore;
|
|
|
802
806
|
* @returns 一个 div。
|
|
803
807
|
*/
|
|
804
808
|
function ActivityBlock({ head, children }) {
|
|
805
|
-
return h$
|
|
809
|
+
return h$71("div", { className: "wb-activityBlock" }, head === void 0 ? null : h$71("div", { className: "wb-activityBlockHead" }, head), children);
|
|
806
810
|
}
|
|
807
811
|
/**
|
|
808
812
|
* 一条活动:状态点 + 正文 + 时间,行尾可挂动作;时间一律用它,别自己拼。
|
|
@@ -813,7 +817,7 @@ function ActivityBlock({ head, children }) {
|
|
|
813
817
|
* @returns 一行。
|
|
814
818
|
*/
|
|
815
819
|
function ActivityLine({ dot, text, at, actions }) {
|
|
816
|
-
return h$
|
|
820
|
+
return h$71("div", { className: "wb-activityLine" }, dot, h$71("span", { className: "wb-activityLineText" }, text), at === void 0 ? null : h$71("span", { className: "wb-activityLineAt" }, at), actions === void 0 ? null : h$71("span", { className: "wb-activityLineActions" }, actions));
|
|
817
821
|
}
|
|
818
822
|
/**
|
|
819
823
|
* 活动行尾那颗动作:给 `href` 就是外链,否则是图标钮并带上 tooltip。
|
|
@@ -827,7 +831,7 @@ function ActivityLine({ dot, text, at, actions }) {
|
|
|
827
831
|
*/
|
|
828
832
|
function ActivityAction({ label, hint, icon, href, onClick, failed }) {
|
|
829
833
|
const tip = hint ?? label;
|
|
830
|
-
if (href !== void 0) return h$
|
|
834
|
+
if (href !== void 0) return h$71("a", {
|
|
831
835
|
className: "wb-iconButton",
|
|
832
836
|
href,
|
|
833
837
|
target: "_blank",
|
|
@@ -835,13 +839,13 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
|
|
|
835
839
|
title: tip,
|
|
836
840
|
"aria-label": label
|
|
837
841
|
}, icon);
|
|
838
|
-
return h$
|
|
842
|
+
return h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
839
843
|
side: "bottom",
|
|
840
844
|
align: "end",
|
|
841
845
|
gap: 6,
|
|
842
846
|
portal: true,
|
|
843
847
|
label: tip
|
|
844
|
-
}, h$
|
|
848
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
845
849
|
type: "button",
|
|
846
850
|
variant: "ghost",
|
|
847
851
|
size: "sm",
|
|
@@ -863,10 +867,10 @@ function ActivityAction({ label, hint, icon, href, onClick, failed }) {
|
|
|
863
867
|
*/
|
|
864
868
|
function Note({ tone = "muted", as, role, children }) {
|
|
865
869
|
const className = tone === "problem" ? "wb-problem" : "wb-note";
|
|
866
|
-
return as === "span" ? h$
|
|
870
|
+
return as === "span" ? h$71("span", {
|
|
867
871
|
className,
|
|
868
872
|
role
|
|
869
|
-
}, children) : h$
|
|
873
|
+
}, children) : h$71("p", {
|
|
870
874
|
className,
|
|
871
875
|
role
|
|
872
876
|
}, children);
|
|
@@ -910,10 +914,10 @@ var CardBoundary = class extends Component {
|
|
|
910
914
|
render() {
|
|
911
915
|
const { reason } = this.state;
|
|
912
916
|
if (reason === null) return this.props.children;
|
|
913
|
-
return h$
|
|
917
|
+
return h$71(Note, { tone: "problem" }, h$71("span", null, this.props.t("panels.cardBroken", {
|
|
914
918
|
unit: this.props.unit,
|
|
915
919
|
reason
|
|
916
|
-
})), " ", h$
|
|
920
|
+
})), " ", h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
917
921
|
type: "button",
|
|
918
922
|
variant: "outline",
|
|
919
923
|
size: "sm",
|
|
@@ -963,19 +967,19 @@ function ApprovalDetail(props) {
|
|
|
963
967
|
const owner = (props.units ?? []).find((face) => face.approval?.tools.includes(input.tool) === true);
|
|
964
968
|
if (owner?.approval !== void 0) {
|
|
965
969
|
const Render = owner.approval.render;
|
|
966
|
-
return h$
|
|
970
|
+
return h$71(CardBoundary, {
|
|
967
971
|
unit: owner.unit,
|
|
968
972
|
resetKey: props.callId ?? "",
|
|
969
973
|
t
|
|
970
|
-
}, h$
|
|
974
|
+
}, h$71(Render, {
|
|
971
975
|
input,
|
|
972
976
|
t
|
|
973
977
|
}));
|
|
974
978
|
}
|
|
975
979
|
const shell = props.renderShell?.(input, t);
|
|
976
|
-
if (shell !== void 0 && shell !== null) return h$
|
|
980
|
+
if (shell !== void 0 && shell !== null) return h$71(Fragment$22, null, shell);
|
|
977
981
|
if (command === "") return null;
|
|
978
|
-
return h$
|
|
982
|
+
return h$71(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
979
983
|
code: command,
|
|
980
984
|
className: "wb-approvalCommand",
|
|
981
985
|
copyLabel: t("blocker.copy"),
|
|
@@ -993,10 +997,10 @@ function ApprovalDetail(props) {
|
|
|
993
997
|
* @returns 一个 div。
|
|
994
998
|
*/
|
|
995
999
|
function ApprovalPlan({ rows, hint, warn, children }) {
|
|
996
|
-
return h$
|
|
1000
|
+
return h$71("div", { className: "wb-approvalPlan" }, hint === void 0 ? null : h$71("p", { className: "wb-approvalHint" }, hint), h$71("dl", { className: "wb-approvalRows" }, rows.map((row, index) => h$71("div", {
|
|
997
1001
|
className: "wb-approvalRow",
|
|
998
1002
|
key: String(index)
|
|
999
|
-
}, h$
|
|
1003
|
+
}, h$71("dt", { className: "wb-approvalLabel" }, row.label), h$71("dd", { className: "wb-approvalValue" }, row.value)))), children, warn === void 0 ? null : h$71("p", { className: "wb-approvalWarn" }, warn));
|
|
1000
1004
|
}
|
|
1001
1005
|
//#endregion
|
|
1002
1006
|
//#region ../shared/dist/components/CardHead.js
|
|
@@ -1013,47 +1017,47 @@ function ApprovalPlan({ rows, hint, warn, children }) {
|
|
|
1013
1017
|
function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle }) {
|
|
1014
1018
|
const refreshLabel = refreshing ? t("rightbar.refreshing") : t("rightbar.refresh");
|
|
1015
1019
|
const platformLabel = platformTitle ?? platform ?? t("rightbar.openPlatform");
|
|
1016
|
-
return h$
|
|
1020
|
+
return h$71("header", { className: "wb-cardHead" }, h$71("h2", { className: "wb-cardTitle" }, title), meta === void 0 ? null : h$71("span", { className: "wb-cardMeta" }, meta), platformHref === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
1017
1021
|
side: "bottom",
|
|
1018
1022
|
align: "end",
|
|
1019
1023
|
gap: 6,
|
|
1020
1024
|
portal: true,
|
|
1021
1025
|
label: platformLabel
|
|
1022
|
-
}, h$
|
|
1026
|
+
}, h$71("a", {
|
|
1023
1027
|
className: "wb-iconButton wb-cardOpen",
|
|
1024
1028
|
href: platformHref,
|
|
1025
1029
|
target: "_blank",
|
|
1026
1030
|
rel: "noreferrer noopener",
|
|
1027
1031
|
"aria-label": platform ?? platformLabel
|
|
1028
|
-
}, h$
|
|
1032
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 14 }))), h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
1029
1033
|
side: "bottom",
|
|
1030
1034
|
align: "end",
|
|
1031
1035
|
gap: 6,
|
|
1032
1036
|
portal: true,
|
|
1033
1037
|
label: refreshLabel
|
|
1034
|
-
}, h$
|
|
1038
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
1035
1039
|
type: "button",
|
|
1036
1040
|
size: "sm",
|
|
1037
1041
|
variant: "ghost",
|
|
1038
1042
|
className: `wb-cardRefresh${refreshing ? " wb-spinning" : ""}`,
|
|
1039
1043
|
"aria-label": refreshLabel,
|
|
1040
1044
|
disabled: refreshing,
|
|
1041
|
-
icon: h$
|
|
1045
|
+
icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 }),
|
|
1042
1046
|
onClick: onRefresh
|
|
1043
|
-
})), gear === void 0 || onToggleGear === void 0 ? null : h$
|
|
1047
|
+
})), gear === void 0 || onToggleGear === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
1044
1048
|
side: "bottom",
|
|
1045
1049
|
align: "end",
|
|
1046
1050
|
gap: 6,
|
|
1047
1051
|
portal: true,
|
|
1048
1052
|
label: gear
|
|
1049
|
-
}, h$
|
|
1053
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
1050
1054
|
type: "button",
|
|
1051
1055
|
size: "sm",
|
|
1052
1056
|
variant: "ghost",
|
|
1053
1057
|
className: `wb-cardGear${gearOpen === true ? " wb-iconButtonActive" : ""}`,
|
|
1054
1058
|
"aria-label": gear,
|
|
1055
1059
|
"aria-expanded": gearOpen === true,
|
|
1056
|
-
icon: h$
|
|
1060
|
+
icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconSettingsOutlineRegular, { size: 15 }),
|
|
1057
1061
|
onClick: onToggleGear
|
|
1058
1062
|
})));
|
|
1059
1063
|
}
|
|
@@ -1070,13 +1074,13 @@ function CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onTog
|
|
|
1070
1074
|
* @returns 一个 `<section>`。
|
|
1071
1075
|
*/
|
|
1072
1076
|
function Card({ t, title, refreshing, onRefresh, meta, head, children }) {
|
|
1073
|
-
return h$
|
|
1077
|
+
return h$71("section", { className: "wb-card" }, head === void 0 ? h$71(CardHead, {
|
|
1074
1078
|
t,
|
|
1075
1079
|
title,
|
|
1076
1080
|
refreshing,
|
|
1077
1081
|
onRefresh,
|
|
1078
1082
|
meta
|
|
1079
|
-
}) : head, h$
|
|
1083
|
+
}) : head, h$71("div", { className: "wb-cardBody" }, children));
|
|
1080
1084
|
}
|
|
1081
1085
|
var CardAnchor_module_default = { anchor: "_anchor_yq4s2_1" };
|
|
1082
1086
|
//#endregion
|
|
@@ -1096,7 +1100,7 @@ function cardIdOf(unit) {
|
|
|
1096
1100
|
* @returns 带 id 的占位 div。
|
|
1097
1101
|
*/
|
|
1098
1102
|
function CardAnchor({ unit, children }) {
|
|
1099
|
-
return h$
|
|
1103
|
+
return h$71("div", {
|
|
1100
1104
|
id: cardIdOf(unit),
|
|
1101
1105
|
className: CardAnchor_module_default.anchor
|
|
1102
1106
|
}, children);
|
|
@@ -1110,13 +1114,13 @@ function CardAnchor({ unit, children }) {
|
|
|
1110
1114
|
* @returns 一枚 `StateDot state="ongoing"`,自身不带文字。
|
|
1111
1115
|
*/
|
|
1112
1116
|
function Spinner({ size = 14, label }) {
|
|
1113
|
-
return h$
|
|
1117
|
+
return h$71("span", {
|
|
1114
1118
|
className: "wb-spinner",
|
|
1115
1119
|
...label === void 0 ? { "aria-hidden": true } : {
|
|
1116
1120
|
role: "status",
|
|
1117
1121
|
"aria-label": label
|
|
1118
1122
|
}
|
|
1119
|
-
}, h$
|
|
1123
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
1120
1124
|
state: "ongoing",
|
|
1121
1125
|
size
|
|
1122
1126
|
}));
|
|
@@ -1124,24 +1128,24 @@ function Spinner({ size = 14, label }) {
|
|
|
1124
1128
|
//#endregion
|
|
1125
1129
|
//#region ../shared/dist/components/ChoiceGroup.js
|
|
1126
1130
|
function ChoiceMenu(input) {
|
|
1127
|
-
const body = input.loading ? h$
|
|
1131
|
+
const body = input.loading ? h$71("span", {
|
|
1128
1132
|
className: "wb-choiceLoading",
|
|
1129
1133
|
role: "status"
|
|
1130
|
-
}, h$
|
|
1134
|
+
}, h$71(Spinner, { size: 14 }), h$71("span", { className: "wb-choiceLoadingText" }, input.loadingText ?? "…")) : input.options.length === 0 ? input.emptyText === void 0 ? null : h$71("span", { className: "wb-choiceEmpty" }, input.emptyText) : input.options.map((option) => {
|
|
1131
1135
|
const row = input.rowOf(option.value);
|
|
1132
|
-
return h$
|
|
1136
|
+
return h$71(Fragment$22, { key: option.value }, h$71("label", { className: `wb-choiceOption${row.checked ? " wb-choiceOptionOn" : ""}` }, h$71("input", {
|
|
1133
1137
|
className: input.multi ? "wb-checkbox" : "wb-radio",
|
|
1134
1138
|
type: input.multi ? "checkbox" : "radio",
|
|
1135
1139
|
name: input.name,
|
|
1136
1140
|
checked: row.checked,
|
|
1137
1141
|
disabled: input.disabled,
|
|
1138
1142
|
onChange: row.onSelect
|
|
1139
|
-
}), input.multi ? h$
|
|
1143
|
+
}), input.multi ? h$71("span", {
|
|
1140
1144
|
className: "wb-checkboxBox",
|
|
1141
1145
|
"aria-hidden": "true"
|
|
1142
|
-
}, row.checked ? h$
|
|
1146
|
+
}, row.checked ? h$71(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutlineRegular, { size: 12 }) : null) : null, h$71("span", { className: "wb-choiceLabel" }, h$71("span", { className: "wb-choiceLabelText" }, option.label), option.description === void 0 ? null : h$71("span", { className: "wb-choiceDescription" }, option.description))));
|
|
1143
1147
|
});
|
|
1144
|
-
return h$
|
|
1148
|
+
return h$71("div", {
|
|
1145
1149
|
className: "wb-choiceMenu",
|
|
1146
1150
|
"data-variant": input.variant,
|
|
1147
1151
|
role: input.multi ? "group" : "radiogroup",
|
|
@@ -1175,7 +1179,7 @@ function ChoiceGroup(props) {
|
|
|
1175
1179
|
if (props.multi === true) {
|
|
1176
1180
|
const values = props.values;
|
|
1177
1181
|
const onChange = props.onChange;
|
|
1178
|
-
return h$
|
|
1182
|
+
return h$71(ChoiceMenu, {
|
|
1179
1183
|
label: common.label,
|
|
1180
1184
|
name: common.name,
|
|
1181
1185
|
options: common.options,
|
|
@@ -1195,7 +1199,7 @@ function ChoiceGroup(props) {
|
|
|
1195
1199
|
}
|
|
1196
1200
|
const value = props.value;
|
|
1197
1201
|
const onChange = props.onChange;
|
|
1198
|
-
return h$
|
|
1202
|
+
return h$71(ChoiceMenu, {
|
|
1199
1203
|
label: common.label,
|
|
1200
1204
|
name: common.name,
|
|
1201
1205
|
options: common.options,
|
|
@@ -1248,17 +1252,17 @@ function variantOf(kind) {
|
|
|
1248
1252
|
function FormActions({ actions }) {
|
|
1249
1253
|
if (actions.length === 0) return null;
|
|
1250
1254
|
reportExtraPrimaries(actions);
|
|
1251
|
-
return h$
|
|
1255
|
+
return h$71("div", { className: "wb-formActions" }, ordered(actions).map((action) => {
|
|
1252
1256
|
const kind = kindOf(action);
|
|
1253
1257
|
const busy = action.busy === true;
|
|
1254
|
-
return h$
|
|
1258
|
+
return h$71(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
1255
1259
|
key: action.key,
|
|
1256
1260
|
type: "button",
|
|
1257
1261
|
size: "sm",
|
|
1258
1262
|
variant: variantOf(kind),
|
|
1259
1263
|
className: kind === "danger" ? "wb-formActionDanger" : void 0,
|
|
1260
1264
|
disabled: busy || action.disabled === true,
|
|
1261
|
-
icon: busy ? h$
|
|
1265
|
+
icon: busy ? h$71(Spinner, { size: 12 }) : void 0,
|
|
1262
1266
|
onClick: action.onClick
|
|
1263
1267
|
}, action.label);
|
|
1264
1268
|
}));
|
|
@@ -1271,7 +1275,7 @@ function FormActions({ actions }) {
|
|
|
1271
1275
|
* @returns 竖排的 div。
|
|
1272
1276
|
*/
|
|
1273
1277
|
function Rows({ children }) {
|
|
1274
|
-
return h$
|
|
1278
|
+
return h$71("div", { className: "wb-rows" }, children);
|
|
1275
1279
|
}
|
|
1276
1280
|
/**
|
|
1277
1281
|
* 一行键值:左边名字、右边值;要成对说明一项数据就用它,别自己写两栏。
|
|
@@ -1280,7 +1284,7 @@ function Rows({ children }) {
|
|
|
1280
1284
|
* @returns 一行两格。
|
|
1281
1285
|
*/
|
|
1282
1286
|
function Row({ label, value }) {
|
|
1283
|
-
return h$
|
|
1287
|
+
return h$71("div", { className: "wb-row" }, h$71("span", { className: "wb-rowKey" }, label), h$71("span", { className: "wb-rowValue" }, value));
|
|
1284
1288
|
}
|
|
1285
1289
|
//#endregion
|
|
1286
1290
|
//#region ../shared/dist/components/ConfirmBar.js
|
|
@@ -1297,19 +1301,19 @@ function Row({ label, value }) {
|
|
|
1297
1301
|
* @returns 一个 `role="group"` 的条;`actions` 空数组时最后那一块不渲染。
|
|
1298
1302
|
*/
|
|
1299
1303
|
function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
|
|
1300
|
-
return h$
|
|
1304
|
+
return h$71("div", {
|
|
1301
1305
|
className: "wb-confirmBar",
|
|
1302
1306
|
role: "group",
|
|
1303
1307
|
"aria-label": label ?? (typeof title === "string" ? title : void 0),
|
|
1304
1308
|
"aria-busy": busy
|
|
1305
|
-
}, h$
|
|
1309
|
+
}, h$71("p", { className: "wb-confirmBarTitle" }, title), hint === void 0 ? null : h$71("p", { className: "wb-confirmBarHint" }, hint), rows === void 0 || rows.length === 0 ? null : h$71(Rows, null, rows.map((row) => h$71(Row, {
|
|
1306
1310
|
key: row.key,
|
|
1307
1311
|
label: row.label,
|
|
1308
1312
|
value: row.value
|
|
1309
|
-
}))), problem === void 0 ? null : h$
|
|
1313
|
+
}))), problem === void 0 ? null : h$71(Note, {
|
|
1310
1314
|
tone: "problem",
|
|
1311
1315
|
role: "alert"
|
|
1312
|
-
}, problem), h$
|
|
1316
|
+
}, problem), h$71(FormActions, { actions }));
|
|
1313
1317
|
}
|
|
1314
1318
|
//#endregion
|
|
1315
1319
|
//#region ../shared/dist/components/Field.js
|
|
@@ -1321,7 +1325,7 @@ function ConfirmBar({ title, hint, rows, actions, problem, busy, label }) {
|
|
|
1321
1325
|
* @returns 一个 `<label>`,点标签会聚焦里面的控件。
|
|
1322
1326
|
*/
|
|
1323
1327
|
function Field({ label, hint, children }) {
|
|
1324
|
-
return h$
|
|
1328
|
+
return h$71("label", { className: "wb-field" }, h$71("span", { className: "wb-fieldLabel" }, label), children, hint === void 0 ? null : h$71("span", { className: "wb-fieldHint" }, hint));
|
|
1325
1329
|
}
|
|
1326
1330
|
//#endregion
|
|
1327
1331
|
//#region ../shared/dist/components/FormRows.js
|
|
@@ -1331,7 +1335,7 @@ function Field({ label, hint, children }) {
|
|
|
1331
1335
|
* @returns 竖排的 div。
|
|
1332
1336
|
*/
|
|
1333
1337
|
function FormRows({ children }) {
|
|
1334
|
-
return h$
|
|
1338
|
+
return h$71("div", { className: "wb-formRows" }, children);
|
|
1335
1339
|
}
|
|
1336
1340
|
/**
|
|
1337
1341
|
* 表单一行:左边标签、右边控件,提示与错误占控件下面那一格。
|
|
@@ -1344,14 +1348,14 @@ function FormRows({ children }) {
|
|
|
1344
1348
|
* @returns 一个 `<div>`:里面的 `<label>` 只包标签文字,不包控件、提示与整行的空白。
|
|
1345
1349
|
*/
|
|
1346
1350
|
function FormRow({ label, htmlFor, hint, problem, layout = "inline", children }) {
|
|
1347
|
-
return h$
|
|
1351
|
+
return h$71("div", {
|
|
1348
1352
|
className: "wb-formRow",
|
|
1349
1353
|
"data-layout": layout,
|
|
1350
1354
|
"data-wb-problem": problem === void 0 ? void 0 : ""
|
|
1351
|
-
}, h$
|
|
1355
|
+
}, h$71("label", {
|
|
1352
1356
|
className: "wb-formLabel",
|
|
1353
1357
|
htmlFor
|
|
1354
|
-
}, label), h$
|
|
1358
|
+
}, label), h$71("span", { className: "wb-formControl" }, children), problem === void 0 ? hint === void 0 ? null : h$71("span", { className: "wb-formHint" }, hint) : h$71("span", { className: "wb-formProblem" }, problem));
|
|
1355
1359
|
}
|
|
1356
1360
|
//#endregion
|
|
1357
1361
|
//#region ../shared/dist/components/FormNodes.js
|
|
@@ -1498,7 +1502,7 @@ function formActionsOf(args) {
|
|
|
1498
1502
|
* @returns `FormRow` 组成的数组;没有可画的格子时给空数组。
|
|
1499
1503
|
*/
|
|
1500
1504
|
function formRowsOf(args) {
|
|
1501
|
-
return args.fields.map((field) => h$
|
|
1505
|
+
return args.fields.map((field) => h$71(FormRow, {
|
|
1502
1506
|
key: field.key,
|
|
1503
1507
|
label: field.label,
|
|
1504
1508
|
htmlFor: controlIdOf(field.key),
|
|
@@ -1574,13 +1578,13 @@ function revealFirstProblem(root) {
|
|
|
1574
1578
|
*/
|
|
1575
1579
|
function Form(props) {
|
|
1576
1580
|
const { fields, onSubmit, submit, cancel, extra, busy = false, disabled = false, problem } = props;
|
|
1577
|
-
const [done, setDone] = useState$
|
|
1578
|
-
const [reveal, setReveal] = useState$
|
|
1581
|
+
const [done, setDone] = useState$42(false);
|
|
1582
|
+
const [reveal, setReveal] = useState$42(0);
|
|
1579
1583
|
const rootRef = useRef$24(null);
|
|
1580
1584
|
const shown = visibleFieldsOf(fields);
|
|
1581
1585
|
const problems = formProblemsOf(shown, done);
|
|
1582
1586
|
reportDuplicateKeys(shown);
|
|
1583
|
-
useEffect$
|
|
1587
|
+
useEffect$32(() => {
|
|
1584
1588
|
if (reveal === 0) return;
|
|
1585
1589
|
const root = rootRef.current;
|
|
1586
1590
|
if (root !== null) revealFirstProblem(root);
|
|
@@ -1595,7 +1599,7 @@ function Form(props) {
|
|
|
1595
1599
|
}
|
|
1596
1600
|
onSubmit(outcome.values);
|
|
1597
1601
|
};
|
|
1598
|
-
return h$
|
|
1602
|
+
return h$71("form", {
|
|
1599
1603
|
className: "wb-form",
|
|
1600
1604
|
ref: rootRef,
|
|
1601
1605
|
noValidate: true,
|
|
@@ -1603,15 +1607,15 @@ function Form(props) {
|
|
|
1603
1607
|
event.preventDefault();
|
|
1604
1608
|
submitForm();
|
|
1605
1609
|
}
|
|
1606
|
-
}, h$
|
|
1610
|
+
}, h$71(FormRows, null, formRowsOf({
|
|
1607
1611
|
fields: shown,
|
|
1608
1612
|
problems,
|
|
1609
1613
|
showProblem: done,
|
|
1610
1614
|
busy
|
|
1611
|
-
})), problem === void 0 ? null : h$
|
|
1615
|
+
})), problem === void 0 ? null : h$71(Note, {
|
|
1612
1616
|
tone: "problem",
|
|
1613
1617
|
role: "alert"
|
|
1614
|
-
}, problem), h$
|
|
1618
|
+
}, problem), h$71(FormActions, { actions: formActionsOf({
|
|
1615
1619
|
extra,
|
|
1616
1620
|
cancel,
|
|
1617
1621
|
submit,
|
|
@@ -1632,7 +1636,7 @@ function Form(props) {
|
|
|
1632
1636
|
* @returns 一个 `<a>`。
|
|
1633
1637
|
*/
|
|
1634
1638
|
function Link({ href, children, title, external = true, className }) {
|
|
1635
|
-
return h$
|
|
1639
|
+
return h$71("a", {
|
|
1636
1640
|
className: className === void 0 ? "wb-link" : `wb-link ${className}`,
|
|
1637
1641
|
href,
|
|
1638
1642
|
...title === void 0 ? {} : { title },
|
|
@@ -1640,7 +1644,7 @@ function Link({ href, children, title, external = true, className }) {
|
|
|
1640
1644
|
target: "_blank",
|
|
1641
1645
|
rel: "noopener noreferrer"
|
|
1642
1646
|
} : {}
|
|
1643
|
-
}, children, external ? h$
|
|
1647
|
+
}, children, external ? h$71(_deepseek_ai_dsh_client_ui_primitives.IconRightUpOutlineRegular, { size: 12 }) : null);
|
|
1644
1648
|
}
|
|
1645
1649
|
//#endregion
|
|
1646
1650
|
//#region ../shared/dist/contract/long-task.js
|
|
@@ -1732,7 +1736,7 @@ var LONG_TASK_STOP_ARM_MS = 3e3;
|
|
|
1732
1736
|
//#endregion
|
|
1733
1737
|
//#region ../shared/dist/components/LongTaskRow.js
|
|
1734
1738
|
function RowLink({ href, text }) {
|
|
1735
|
-
return h$
|
|
1739
|
+
return h$71(Link, {
|
|
1736
1740
|
href,
|
|
1737
1741
|
className: "wb-longTaskLink"
|
|
1738
1742
|
}, text);
|
|
@@ -1752,9 +1756,9 @@ function RowLink({ href, text }) {
|
|
|
1752
1756
|
* @returns 一行长任务。
|
|
1753
1757
|
*/
|
|
1754
1758
|
function LongTaskRow(props) {
|
|
1755
|
-
const [stepsOpen, setStepsOpen] = useState$
|
|
1756
|
-
const [rawOpen, setRawOpen] = useState$
|
|
1757
|
-
const [armed, setArmed] = useState$
|
|
1759
|
+
const [stepsOpen, setStepsOpen] = useState$42(false);
|
|
1760
|
+
const [rawOpen, setRawOpen] = useState$42(false);
|
|
1761
|
+
const [armed, setArmed] = useState$42(false);
|
|
1758
1762
|
const failed = props.status === "failed";
|
|
1759
1763
|
const problem = props.problem ?? "";
|
|
1760
1764
|
const raw = (props.raw ?? "").trim();
|
|
@@ -1762,7 +1766,7 @@ function LongTaskRow(props) {
|
|
|
1762
1766
|
const stop = props.stop;
|
|
1763
1767
|
const busy = stop?.busy === true;
|
|
1764
1768
|
const stopWhy = stop?.failed ?? "";
|
|
1765
|
-
useEffect$
|
|
1769
|
+
useEffect$32(() => {
|
|
1766
1770
|
if (!armed) return void 0;
|
|
1767
1771
|
const timer = setTimeout(() => setArmed(false), LONG_TASK_STOP_ARM_MS);
|
|
1768
1772
|
return () => clearTimeout(timer);
|
|
@@ -1781,14 +1785,14 @@ function LongTaskRow(props) {
|
|
|
1781
1785
|
setArmed(false);
|
|
1782
1786
|
stop.onStop();
|
|
1783
1787
|
};
|
|
1784
|
-
return h$
|
|
1788
|
+
return h$71("div", { className: "wb-longTask" }, h$71("p", { className: "wb-longTaskHead" }, h$71(_deepseek_ai_dsh_client_ui_primitives.StateDot, {
|
|
1785
1789
|
state: longTaskDot(props.status),
|
|
1786
1790
|
size: 10
|
|
1787
|
-
}), h$
|
|
1791
|
+
}), h$71("span", { className: "wb-longTaskHeadline" }, props.headline), (props.links ?? []).map((link) => h$71(RowLink, {
|
|
1788
1792
|
href: link.href,
|
|
1789
1793
|
key: `${link.text}@${link.href}`,
|
|
1790
1794
|
text: link.text
|
|
1791
|
-
})), stop === void 0 ? null : h$
|
|
1795
|
+
})), stop === void 0 ? null : h$71("button", {
|
|
1792
1796
|
type: "button",
|
|
1793
1797
|
className: `wb-longTaskStop${armed ? " wb-longTaskStopArmed" : ""}`,
|
|
1794
1798
|
"data-stop-state": longTaskStopStage({
|
|
@@ -1799,31 +1803,31 @@ function LongTaskRow(props) {
|
|
|
1799
1803
|
disabled: busy,
|
|
1800
1804
|
onClick: onStopPress,
|
|
1801
1805
|
onBlur: () => setArmed(false)
|
|
1802
|
-
}, h$
|
|
1806
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.IconStopFillRegular, { size: 12 }), armed ? h$71("span", { className: "wb-longTaskStopLabel" }, stop.askLabel) : null)), problem === "" ? null : h$71("p", { className: "wb-longTaskProblem" }, problem), stopWhy === "" ? null : h$71("p", { className: "wb-longTaskStopWhy" }, stopWhy), !failed ? null : h$71(Fragment$22, null, steps.length === 0 || props.stepsTitle === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
|
|
1803
1807
|
className: "wb-longTaskDump",
|
|
1804
|
-
icon: h$
|
|
1808
|
+
icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconFlatListOutlineRegular, { size: 14 }),
|
|
1805
1809
|
title: props.stepsTitle,
|
|
1806
1810
|
open: stepsOpen,
|
|
1807
1811
|
expandable: true,
|
|
1808
1812
|
expandOnRowClick: true,
|
|
1809
1813
|
previewChevron: true,
|
|
1810
1814
|
onToggle: () => setStepsOpen(!stepsOpen)
|
|
1811
|
-
}, h$
|
|
1815
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
1812
1816
|
code: steps.join("\n"),
|
|
1813
1817
|
className: "wb-longTaskDump",
|
|
1814
1818
|
showHeader: props.copyLabel !== void 0,
|
|
1815
1819
|
copyLabel: props.copyLabel ?? "",
|
|
1816
1820
|
copiedLabel: props.copiedLabel ?? ""
|
|
1817
|
-
})), raw === "" || props.rawTitle === void 0 ? null : h$
|
|
1821
|
+
})), raw === "" || props.rawTitle === void 0 ? null : h$71(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
|
|
1818
1822
|
className: "wb-longTaskDump",
|
|
1819
|
-
icon: h$
|
|
1823
|
+
icon: h$71(_deepseek_ai_dsh_client_ui_primitives.IconCodeOutlineRegular, { size: 14 }),
|
|
1820
1824
|
title: props.rawTitle,
|
|
1821
1825
|
open: rawOpen,
|
|
1822
1826
|
expandable: true,
|
|
1823
1827
|
expandOnRowClick: true,
|
|
1824
1828
|
previewChevron: true,
|
|
1825
1829
|
onToggle: () => setRawOpen(!rawOpen)
|
|
1826
|
-
}, h$
|
|
1830
|
+
}, h$71(_deepseek_ai_dsh_client_ui_primitives.CodeBlock, {
|
|
1827
1831
|
code: raw,
|
|
1828
1832
|
className: "wb-longTaskDump",
|
|
1829
1833
|
showHeader: props.copyLabel !== void 0,
|
|
@@ -1839,13 +1843,13 @@ function LongTaskRow(props) {
|
|
|
1839
1843
|
* @returns 一叠占位条。
|
|
1840
1844
|
*/
|
|
1841
1845
|
function SkeletonRows({ rows = 4 }) {
|
|
1842
|
-
return h$
|
|
1846
|
+
return h$71("div", {
|
|
1843
1847
|
className: "wb-skeleton",
|
|
1844
1848
|
"aria-hidden": "true"
|
|
1845
|
-
}, Array.from({ length: rows }, (_, index) => h$
|
|
1849
|
+
}, Array.from({ length: rows }, (_, index) => h$71("span", {
|
|
1846
1850
|
key: index,
|
|
1847
1851
|
className: "wb-skeletonRow"
|
|
1848
|
-
}, h$
|
|
1852
|
+
}, h$71("span", { className: "wb-skeletonBar wb-skeletonBarTitle" }), h$71("span", { className: "wb-skeletonBar wb-skeletonBarMeta" }))));
|
|
1849
1853
|
}
|
|
1850
1854
|
/**
|
|
1851
1855
|
* 居中一屏:要他先选一个 / 正在读 / 读不到时用它占住卡片版面。
|
|
@@ -1858,13 +1862,13 @@ function SkeletonRows({ rows = 4 }) {
|
|
|
1858
1862
|
* @returns 一个 `role="status"` 的居中块。
|
|
1859
1863
|
*/
|
|
1860
1864
|
function CenteredState({ icon, title, hint, detail, action, compact = false }) {
|
|
1861
|
-
return h$
|
|
1865
|
+
return h$71("div", {
|
|
1862
1866
|
className: compact ? "wb-centered wb-centeredCompact" : "wb-centered",
|
|
1863
1867
|
role: "status"
|
|
1864
|
-
}, icon === null ? null : h$
|
|
1868
|
+
}, icon === null ? null : h$71("span", {
|
|
1865
1869
|
className: "wb-centeredHero",
|
|
1866
1870
|
"aria-hidden": "true"
|
|
1867
|
-
}, icon), h$
|
|
1871
|
+
}, icon), h$71("div", { className: "wb-centeredTitle" }, title), hint === void 0 ? null : h$71("div", { className: "wb-centeredHint" }, hint), detail === void 0 ? null : h$71("div", { className: "wb-centeredDetail" }, detail), action === void 0 ? null : h$71("div", { className: "wb-centeredAction" }, action));
|
|
1868
1872
|
}
|
|
1869
1873
|
/**
|
|
1870
1874
|
* 就绪但空:它只是 `CenteredState` 的简写,标题就是那句空态文案。
|
|
@@ -1874,7 +1878,7 @@ function CenteredState({ icon, title, hint, detail, action, compact = false }) {
|
|
|
1874
1878
|
* @returns 一个居中块。
|
|
1875
1879
|
*/
|
|
1876
1880
|
function EmptyState({ text, icon = null, compact = false }) {
|
|
1877
|
-
return h$
|
|
1881
|
+
return h$71(CenteredState, {
|
|
1878
1882
|
icon,
|
|
1879
1883
|
title: text,
|
|
1880
1884
|
compact
|
|
@@ -1892,7 +1896,7 @@ function EmptyState({ text, icon = null, compact = false }) {
|
|
|
1892
1896
|
* @returns 一组按钮。
|
|
1893
1897
|
*/
|
|
1894
1898
|
function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
|
|
1895
|
-
return h$
|
|
1899
|
+
return h$71(FormActions, { actions: [{
|
|
1896
1900
|
key: "cancel",
|
|
1897
1901
|
label: labels.cancel,
|
|
1898
1902
|
kind: "default",
|
|
@@ -1925,7 +1929,7 @@ function SaveBar({ busy, disabled, labels, onCancel, onSave }) {
|
|
|
1925
1929
|
* @returns 一颗 `<button>`。
|
|
1926
1930
|
*/
|
|
1927
1931
|
function selectTriggerNode(args) {
|
|
1928
|
-
return h$
|
|
1932
|
+
return h$71("button", {
|
|
1929
1933
|
type: "button",
|
|
1930
1934
|
id: args.id,
|
|
1931
1935
|
className: args.className,
|
|
@@ -1936,7 +1940,7 @@ function selectTriggerNode(args) {
|
|
|
1936
1940
|
"aria-label": args.ariaLabel,
|
|
1937
1941
|
title: args.title,
|
|
1938
1942
|
onClick: args.onOpen
|
|
1939
|
-
}, args.iconOnly ? h$
|
|
1943
|
+
}, args.iconOnly ? h$71("span", { className: "wb-selectIcon" }, args.icon) : h$71(Fragment$22, null, args.icon === void 0 ? null : h$71("span", { className: "wb-selectIcon" }, args.icon), h$71("span", { className: "wb-selectValue" }, args.value), h$71("span", { className: "wb-selectChevron" }, h$71(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, { size: 14 }))));
|
|
1940
1944
|
}
|
|
1941
1945
|
/**
|
|
1942
1946
|
* 名单还没读到时的触发器:禁用 + `aria-busy` 的按钮,`SelectField` 在 `loading` 那档画它。
|
|
@@ -1948,7 +1952,7 @@ function selectTriggerNode(args) {
|
|
|
1948
1952
|
* @returns 一颗禁用且 `aria-busy` 的按钮。
|
|
1949
1953
|
*/
|
|
1950
1954
|
function selectLoadingNode(args) {
|
|
1951
|
-
return h$
|
|
1955
|
+
return h$71("button", {
|
|
1952
1956
|
type: "button",
|
|
1953
1957
|
id: args.id,
|
|
1954
1958
|
className: `${args.className} wb-selectLoading`,
|
|
@@ -1957,7 +1961,7 @@ function selectLoadingNode(args) {
|
|
|
1957
1961
|
"aria-invalid": args.invalid || void 0,
|
|
1958
1962
|
"aria-label": args.ariaLabel,
|
|
1959
1963
|
title: args.loadingText
|
|
1960
|
-
}, h$
|
|
1964
|
+
}, h$71("span", { className: "wb-selectValue" }, h$71(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { active: true }, args.loadingText ?? "…")), h$71("span", { className: "wb-selectChevron" }, h$71(Spinner, { size: 14 })));
|
|
1961
1965
|
}
|
|
1962
1966
|
//#endregion
|
|
1963
1967
|
//#region ../shared/dist/components/TextField.js
|
|
@@ -1967,7 +1971,7 @@ function selectLoadingNode(args) {
|
|
|
1967
1971
|
* @returns 输入框元素;`className` 是追加在基础类名之后,而不是替换它。
|
|
1968
1972
|
*/
|
|
1969
1973
|
function TextField({ invalid = false, className, ...rest }) {
|
|
1970
|
-
return h$
|
|
1974
|
+
return h$71("input", {
|
|
1971
1975
|
...rest,
|
|
1972
1976
|
className: className === void 0 ? "wb-textField" : `wb-textField ${className}`,
|
|
1973
1977
|
"aria-invalid": invalid || void 0
|
|
@@ -1990,7 +1994,7 @@ function itemOf(option, revealId) {
|
|
|
1990
1994
|
...option.icon === void 0 ? {} : { icon: option.icon },
|
|
1991
1995
|
...option.disabled === true ? { disabled: true } : {}
|
|
1992
1996
|
};
|
|
1993
|
-
const revealed = (node) => h$
|
|
1997
|
+
const revealed = (node) => h$71("span", {
|
|
1994
1998
|
className: "wb-selectReveal",
|
|
1995
1999
|
"data-wb-select-reveal": ""
|
|
1996
2000
|
}, node);
|
|
@@ -2006,20 +2010,20 @@ function revealNode() {
|
|
|
2006
2010
|
return found instanceof HTMLElement ? found : null;
|
|
2007
2011
|
}
|
|
2008
2012
|
function useRevealOnOpen(open, revealId) {
|
|
2009
|
-
useEffect$
|
|
2013
|
+
useEffect$32(() => {
|
|
2010
2014
|
if (!open || revealId === void 0) return;
|
|
2011
2015
|
revealNode()?.scrollIntoView({ block: "nearest" });
|
|
2012
2016
|
}, [open, revealId]);
|
|
2013
2017
|
}
|
|
2014
2018
|
function selectValueNode(current, renderValue, placeholder) {
|
|
2015
|
-
if (current === void 0) return h$
|
|
2019
|
+
if (current === void 0) return h$71("span", { className: "wb-selectPlaceholder" }, placeholder ?? "—");
|
|
2016
2020
|
return renderValue === void 0 ? current.label : renderValue(current);
|
|
2017
2021
|
}
|
|
2018
2022
|
function searchNode(args) {
|
|
2019
|
-
return h$
|
|
2023
|
+
return h$71("span", {
|
|
2020
2024
|
ref: args.boxRef,
|
|
2021
2025
|
className: args.className
|
|
2022
|
-
}, h$
|
|
2026
|
+
}, h$71("span", { className: "wb-selectSearchIcon" }, h$71(_deepseek_ai_dsh_client_ui_primitives.IconSearchOutlineRegular, { size: 14 })), h$71(TextField, {
|
|
2023
2027
|
id: args.id,
|
|
2024
2028
|
name: args.name,
|
|
2025
2029
|
className: "wb-selectSearchInput",
|
|
@@ -2034,7 +2038,7 @@ function searchNode(args) {
|
|
|
2034
2038
|
}));
|
|
2035
2039
|
}
|
|
2036
2040
|
function menuNode(args) {
|
|
2037
|
-
return h$
|
|
2041
|
+
return h$71(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
2038
2042
|
open: args.open,
|
|
2039
2043
|
portal: true,
|
|
2040
2044
|
className: "wb-selectAnchor",
|
|
@@ -2051,11 +2055,11 @@ function menuNode(args) {
|
|
|
2051
2055
|
});
|
|
2052
2056
|
}
|
|
2053
2057
|
function framed(label, hint, className, control) {
|
|
2054
|
-
const inner = label === void 0 ? hint === void 0 ? control : h$
|
|
2058
|
+
const inner = label === void 0 ? hint === void 0 ? control : h$71("span", { className: "wb-select" }, control, h$71("span", { className: "wb-selectHint" }, hint)) : h$71(Field, {
|
|
2055
2059
|
label,
|
|
2056
2060
|
hint
|
|
2057
2061
|
}, control);
|
|
2058
|
-
return className === void 0 ? inner : h$
|
|
2062
|
+
return className === void 0 ? inner : h$71("div", { className }, inner);
|
|
2059
2063
|
}
|
|
2060
2064
|
/** 算候选项用来匹配搜索的文本:有 `searchText` 就用它,否则取字符串标签;标签不是字符串又没给它是空串(这项搜不到)。 */
|
|
2061
2065
|
function searchTextOf(option) {
|
|
@@ -2107,9 +2111,9 @@ function selectEntries(shown, emptyText, revealId) {
|
|
|
2107
2111
|
}
|
|
2108
2112
|
function useSelectState(props) {
|
|
2109
2113
|
const { options, filter = defaultSelectFilter, emptyText, open: openProp, onOpenChange } = props;
|
|
2110
|
-
const [openState, setOpenState] = useState$
|
|
2111
|
-
const [query, setQuery] = useState$
|
|
2112
|
-
const [cursor, setCursor] = useState$
|
|
2114
|
+
const [openState, setOpenState] = useState$42(false);
|
|
2115
|
+
const [query, setQuery] = useState$42("");
|
|
2116
|
+
const [cursor, setCursor] = useState$42(null);
|
|
2113
2117
|
const boxRef = useRef$24(null);
|
|
2114
2118
|
const triggerRef = useRef$24(null);
|
|
2115
2119
|
const wasOpenRef = useRef$24(false);
|
|
@@ -2120,11 +2124,11 @@ function useSelectState(props) {
|
|
|
2120
2124
|
if (openProp === void 0) setOpenState(next);
|
|
2121
2125
|
onOpenChange?.(next);
|
|
2122
2126
|
};
|
|
2123
|
-
useEffect$
|
|
2127
|
+
useEffect$32(() => {
|
|
2124
2128
|
if (!open || props.search === false) return;
|
|
2125
2129
|
boxRef.current?.querySelector("input")?.focus();
|
|
2126
2130
|
}, [open, props.search]);
|
|
2127
|
-
useEffect$
|
|
2131
|
+
useEffect$32(() => {
|
|
2128
2132
|
if (open) {
|
|
2129
2133
|
wasOpenRef.current = true;
|
|
2130
2134
|
return;
|
|
@@ -2194,7 +2198,7 @@ function SelectField(props) {
|
|
|
2194
2198
|
ariaLabel,
|
|
2195
2199
|
loadingText
|
|
2196
2200
|
}));
|
|
2197
|
-
if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$
|
|
2201
|
+
if (fallback !== void 0 && options.length === 0) return framed(label, hint, className, h$71(TextField, {
|
|
2198
2202
|
id,
|
|
2199
2203
|
name,
|
|
2200
2204
|
className: "wb-selectFallback",
|
|
@@ -2277,11 +2281,11 @@ function SelectField(props) {
|
|
|
2277
2281
|
* @returns 一个 `role="group"` 的 section。
|
|
2278
2282
|
*/
|
|
2279
2283
|
function SettingsSection({ label, title, action, children }) {
|
|
2280
|
-
return h$
|
|
2284
|
+
return h$71("section", {
|
|
2281
2285
|
className: "wb-settings",
|
|
2282
2286
|
role: "group",
|
|
2283
2287
|
"aria-label": label
|
|
2284
|
-
}, h$
|
|
2288
|
+
}, h$71("header", { className: "wb-settingsHead" }, h$71("span", { className: "wb-settingsTitle" }, title), action), children);
|
|
2285
2289
|
}
|
|
2286
2290
|
//#endregion
|
|
2287
2291
|
//#region ../shared/dist/components/Stack.js
|
|
@@ -2291,7 +2295,7 @@ function SettingsSection({ label, title, action, children }) {
|
|
|
2291
2295
|
* @returns 竖排的 div。
|
|
2292
2296
|
*/
|
|
2293
2297
|
function Stack({ children }) {
|
|
2294
|
-
return h$
|
|
2298
|
+
return h$71("div", { className: "wb-stack" }, children);
|
|
2295
2299
|
}
|
|
2296
2300
|
//#endregion
|
|
2297
2301
|
//#region ../shared/dist/components/StateBlock.js
|
|
@@ -2306,12 +2310,12 @@ function Stack({ children }) {
|
|
|
2306
2310
|
* @returns 一个 div。
|
|
2307
2311
|
*/
|
|
2308
2312
|
function StateBlock({ title, dot, hint, actions, resolving, children }) {
|
|
2309
|
-
return h$
|
|
2313
|
+
return h$71("div", { className: "wb-stateBlock" }, title === void 0 && dot === void 0 ? null : h$71("p", { className: "wb-stateBlockTitle" }, dot, title), resolving === void 0 ? null : h$71("p", { className: "wb-stateBlockResolving" }, resolving), hint === void 0 ? null : h$71("p", { className: "wb-stateBlockHint" }, hint), children, actions === void 0 ? null : h$71("div", { className: "wb-stateBlockActions" }, actions));
|
|
2310
2314
|
}
|
|
2311
2315
|
//#endregion
|
|
2312
2316
|
//#region ../shared/dist/components/icons.js
|
|
2313
2317
|
function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
|
|
2314
|
-
return h$
|
|
2318
|
+
return h$71("svg", {
|
|
2315
2319
|
width: size,
|
|
2316
2320
|
height: size,
|
|
2317
2321
|
viewBox,
|
|
@@ -2328,10 +2332,10 @@ function Shell({ size, strokeWidth = 1, viewBox = "0 0 16 16", children }) {
|
|
|
2328
2332
|
* @returns 一枚 `aria-hidden` 的 svg。
|
|
2329
2333
|
*/
|
|
2330
2334
|
function IconConversation({ size = 16 }) {
|
|
2331
|
-
return h$
|
|
2335
|
+
return h$71(Shell, {
|
|
2332
2336
|
size,
|
|
2333
2337
|
strokeWidth: 1.3
|
|
2334
|
-
}, h$
|
|
2338
|
+
}, h$71("path", {
|
|
2335
2339
|
d: "M2.5 7.2c0-2.3 2.1-4.2 4.8-4.2h1.4c2.7 0 4.8 1.9 4.8 4.2s-2.1 4.2-4.8 4.2H7.5l-3.2 2v-2.3c-1.1-.8-1.8-2-1.8-3.9Z",
|
|
2336
2340
|
stroke: "currentColor",
|
|
2337
2341
|
strokeLinejoin: "round"
|
|
@@ -2346,30 +2350,30 @@ var BRAND_TAIL_TRANSFORM = "translate(14.6263 10.5853) scale(1.95)";
|
|
|
2346
2350
|
* @returns 一枚 `aria-hidden` 的 svg。
|
|
2347
2351
|
*/
|
|
2348
2352
|
function IconBrandMark({ size = 24 }) {
|
|
2349
|
-
return h$
|
|
2353
|
+
return h$71(Shell, {
|
|
2350
2354
|
size,
|
|
2351
2355
|
viewBox: "0 0 64 64"
|
|
2352
|
-
}, h$
|
|
2356
|
+
}, h$71("path", {
|
|
2353
2357
|
d: BRAND_FRAME,
|
|
2354
2358
|
fill: "currentColor",
|
|
2355
2359
|
fillRule: "evenodd"
|
|
2356
|
-
}), h$
|
|
2360
|
+
}), h$71("rect", {
|
|
2357
2361
|
x: 27.5,
|
|
2358
2362
|
y: 48,
|
|
2359
2363
|
width: 9,
|
|
2360
2364
|
height: 4.75,
|
|
2361
2365
|
fill: "currentColor"
|
|
2362
|
-
}), h$
|
|
2366
|
+
}), h$71("rect", {
|
|
2363
2367
|
x: 19,
|
|
2364
2368
|
y: 52.75,
|
|
2365
2369
|
width: 26,
|
|
2366
2370
|
height: 4.75,
|
|
2367
2371
|
rx: 2.375,
|
|
2368
2372
|
fill: "currentColor"
|
|
2369
|
-
}), h$
|
|
2373
|
+
}), h$71("g", { transform: BRAND_TAIL_TRANSFORM }, h$71("path", {
|
|
2370
2374
|
d: BRAND_TAIL,
|
|
2371
2375
|
fill: "currentColor"
|
|
2372
|
-
}), h$
|
|
2376
|
+
}), h$71("circle", {
|
|
2373
2377
|
cx: 6.885,
|
|
2374
2378
|
cy: 13.742,
|
|
2375
2379
|
r: 1.95,
|
|
@@ -2382,30 +2386,30 @@ function IconBrandMark({ size = 24 }) {
|
|
|
2382
2386
|
* @returns 一枚 `aria-hidden` 的 svg。
|
|
2383
2387
|
*/
|
|
2384
2388
|
function IconOpencli({ size = 16 }) {
|
|
2385
|
-
return h$
|
|
2389
|
+
return h$71(Shell, {
|
|
2386
2390
|
size,
|
|
2387
2391
|
viewBox: "0 0 64 64"
|
|
2388
|
-
}, h$
|
|
2392
|
+
}, h$71("defs", null, h$71("linearGradient", {
|
|
2389
2393
|
id: "opencli-mark",
|
|
2390
2394
|
x1: "0%",
|
|
2391
2395
|
y1: "0%",
|
|
2392
2396
|
x2: "100%",
|
|
2393
2397
|
y2: "100%"
|
|
2394
|
-
}, h$
|
|
2398
|
+
}, h$71("stop", {
|
|
2395
2399
|
offset: "0%",
|
|
2396
2400
|
stopColor: "#00e5a0"
|
|
2397
|
-
}), h$
|
|
2401
|
+
}), h$71("stop", {
|
|
2398
2402
|
offset: "50%",
|
|
2399
2403
|
stopColor: "#00b4d8"
|
|
2400
|
-
}), h$
|
|
2404
|
+
}), h$71("stop", {
|
|
2401
2405
|
offset: "100%",
|
|
2402
2406
|
stopColor: "#7b61ff"
|
|
2403
|
-
}))), h$
|
|
2407
|
+
}))), h$71("rect", {
|
|
2404
2408
|
width: 64,
|
|
2405
2409
|
height: 64,
|
|
2406
2410
|
rx: 14,
|
|
2407
2411
|
fill: "#0a0a0f"
|
|
2408
|
-
}), h$
|
|
2412
|
+
}), h$71("text", {
|
|
2409
2413
|
x: "50%",
|
|
2410
2414
|
y: "54%",
|
|
2411
2415
|
dominantBaseline: "middle",
|
|
@@ -2422,10 +2426,10 @@ function IconOpencli({ size = 16 }) {
|
|
|
2422
2426
|
* @returns 一枚 `aria-hidden` 的 svg。
|
|
2423
2427
|
*/
|
|
2424
2428
|
function IconNpm({ size = 16 }) {
|
|
2425
|
-
return h$
|
|
2429
|
+
return h$71(Shell, {
|
|
2426
2430
|
size,
|
|
2427
2431
|
viewBox: "0 0 1024 1024"
|
|
2428
|
-
}, h$
|
|
2432
|
+
}, h$71("path", {
|
|
2429
2433
|
d: "M64 337.76h896v298.72H512v49.792H312.896v-49.824H64z m49.792 248.928h99.552v-149.376h49.76v149.344h49.792v-199.104H113.792z m248.896-199.136v248.928h99.552v-49.792h99.552v-199.136z m99.552 49.792H512v99.584h-49.792z m149.344-49.792v199.136h99.552v-149.376h49.792v149.344h49.792v-149.344h49.792v149.344h49.792v-199.104z",
|
|
2430
2434
|
fill: "#CB3837"
|
|
2431
2435
|
}));
|
|
@@ -2436,37 +2440,37 @@ function IconNpm({ size = 16 }) {
|
|
|
2436
2440
|
* @returns 一枚 `aria-hidden` 的 svg。
|
|
2437
2441
|
*/
|
|
2438
2442
|
function IconModuleMark({ size = 16 }) {
|
|
2439
|
-
return h$
|
|
2443
|
+
return h$71(Shell, {
|
|
2440
2444
|
size,
|
|
2441
2445
|
viewBox: "0 0 24 24"
|
|
2442
|
-
}, h$
|
|
2446
|
+
}, h$71("defs", null, h$71("linearGradient", {
|
|
2443
2447
|
id: "workbench-module-mark",
|
|
2444
2448
|
x1: "0%",
|
|
2445
2449
|
y1: "0%",
|
|
2446
2450
|
x2: "100%",
|
|
2447
2451
|
y2: "100%"
|
|
2448
|
-
}, h$
|
|
2452
|
+
}, h$71("stop", {
|
|
2449
2453
|
offset: "0%",
|
|
2450
2454
|
stopColor: "#3b82f6"
|
|
2451
|
-
}), h$
|
|
2455
|
+
}), h$71("stop", {
|
|
2452
2456
|
offset: "55%",
|
|
2453
2457
|
stopColor: "#8b5cf6"
|
|
2454
|
-
}), h$
|
|
2458
|
+
}), h$71("stop", {
|
|
2455
2459
|
offset: "100%",
|
|
2456
2460
|
stopColor: "#14b8a6"
|
|
2457
|
-
}))), h$
|
|
2461
|
+
}))), h$71("rect", {
|
|
2458
2462
|
width: 24,
|
|
2459
2463
|
height: 24,
|
|
2460
2464
|
rx: 7,
|
|
2461
2465
|
fill: "url(#workbench-module-mark)"
|
|
2462
|
-
}), h$
|
|
2466
|
+
}), h$71("rect", {
|
|
2463
2467
|
x: "4.6",
|
|
2464
2468
|
y: "4.6",
|
|
2465
2469
|
width: "6.2",
|
|
2466
2470
|
height: "6.2",
|
|
2467
2471
|
rx: "1.9",
|
|
2468
2472
|
fill: "#ffffff"
|
|
2469
|
-
}), h$
|
|
2473
|
+
}), h$71("rect", {
|
|
2470
2474
|
x: "13.2",
|
|
2471
2475
|
y: "4.6",
|
|
2472
2476
|
width: "6.2",
|
|
@@ -2474,7 +2478,7 @@ function IconModuleMark({ size = 16 }) {
|
|
|
2474
2478
|
rx: "1.9",
|
|
2475
2479
|
fill: "#ffffff",
|
|
2476
2480
|
fillOpacity: .78
|
|
2477
|
-
}), h$
|
|
2481
|
+
}), h$71("rect", {
|
|
2478
2482
|
x: "4.6",
|
|
2479
2483
|
y: "13.2",
|
|
2480
2484
|
width: "6.2",
|
|
@@ -2482,7 +2486,7 @@ function IconModuleMark({ size = 16 }) {
|
|
|
2482
2486
|
rx: "1.9",
|
|
2483
2487
|
fill: "#ffffff",
|
|
2484
2488
|
fillOpacity: .78
|
|
2485
|
-
}), h$
|
|
2489
|
+
}), h$71("rect", {
|
|
2486
2490
|
x: "13.2",
|
|
2487
2491
|
y: "13.2",
|
|
2488
2492
|
width: "6.2",
|
|
@@ -2497,7 +2501,7 @@ function IconModuleMark({ size = 16 }) {
|
|
|
2497
2501
|
* @returns 一枚 `aria-hidden` 的 svg。
|
|
2498
2502
|
*/
|
|
2499
2503
|
function IconPanelScreen({ size = 16 }) {
|
|
2500
|
-
return h$
|
|
2504
|
+
return h$71("svg", {
|
|
2501
2505
|
width: size,
|
|
2502
2506
|
height: size,
|
|
2503
2507
|
viewBox: "0 0 1024 1024",
|
|
@@ -2508,7 +2512,7 @@ function IconPanelScreen({ size = 16 }) {
|
|
|
2508
2512
|
display: "block",
|
|
2509
2513
|
overflow: "hidden"
|
|
2510
2514
|
}
|
|
2511
|
-
}, h$
|
|
2515
|
+
}, h$71("path", { d: "M939 112c17.673 0 32 14.327 32 32v554.667c0 17.673-14.327 32-32 32l-394.5-0.001v96c0 3.74-0.642 7.331-1.82 10.668H768.4c17.673 0 32 14.326 32 32 0 17.496-14.042 31.712-31.47 31.995l-0.53 0.004H256.6c-17.673 0-32-14.327-32-32 0-17.496 14.042-31.713 31.47-31.995l0.53-0.005h225.721a31.923 31.923 0 0 1-1.817-10.137l-0.004-0.53v-96H86c-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V144c0-17.673 14.327-32 32-32z m-32 64H118v490.666h789V176zM341.9 432c17.496 0 31.713 14.042 31.996 31.47l0.004 0.53v85.333c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V464c0-17.673 14.327-32 32-32z m170.6-85.333c17.496 0 31.713 14.041 31.996 31.47l0.004 0.53v170.666c0 17.673-14.327 32-32 32-17.496 0-31.713-14.041-31.996-31.47l-0.004-0.53V378.667c0-17.673 14.327-32 32-32z m170.6-85.334c17.496 0 31.713 14.042 31.996 31.471l0.004 0.53v256c0 17.672-14.327 32-32 32-17.496 0-31.713-14.042-31.996-31.471l-0.004-0.53v-256c0-17.673 14.327-32 32-32z" }));
|
|
2512
2516
|
}
|
|
2513
2517
|
//#endregion
|
|
2514
2518
|
//#region ../shared/dist/config/storage.js
|
|
@@ -2527,6 +2531,12 @@ function writeText(key, value) {
|
|
|
2527
2531
|
else window.localStorage.setItem(key, value);
|
|
2528
2532
|
} catch {}
|
|
2529
2533
|
}
|
|
2534
|
+
//#endregion
|
|
2535
|
+
//#region ../shared/dist/contract/approval.js
|
|
2536
|
+
/**
|
|
2537
|
+
* agent 自己那句"这次想干什么"的参数名:插件命令族必填,审批屏把它画在详情座里,不进标题。
|
|
2538
|
+
*/
|
|
2539
|
+
var APPROVAL_NOTE_ARG = "approval_note";
|
|
2530
2540
|
/**
|
|
2531
2541
|
* 判一个名字是不是范围查法,不是问这条事实存不存在。
|
|
2532
2542
|
* @param name 事实名或范围名。
|
|
@@ -2750,9 +2760,13 @@ function supplyNeedsOf(manifest) {
|
|
|
2750
2760
|
}
|
|
2751
2761
|
//#endregion
|
|
2752
2762
|
//#region ../shared/dist/contract/needs.js
|
|
2763
|
+
var REGISTRY_PATTERN = /^(?:https?|file):\/\//;
|
|
2753
2764
|
function text(value) {
|
|
2754
2765
|
return typeof value === "string" ? value.trim() : "";
|
|
2755
2766
|
}
|
|
2767
|
+
function isRecord(value) {
|
|
2768
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2769
|
+
}
|
|
2756
2770
|
/**
|
|
2757
2771
|
* 一条 need 的稳定标识:作者写 `id` 就用它,否则 `kind:name`。
|
|
2758
2772
|
* @param need 一条 need。
|
|
@@ -2761,11 +2775,40 @@ function text(value) {
|
|
|
2761
2775
|
function needIdOf(need) {
|
|
2762
2776
|
return need.id === void 0 || need.id.trim() === "" ? `${need.kind}:${need.name}` : need.id;
|
|
2763
2777
|
}
|
|
2778
|
+
function binInstallProblemsOf(raw, at) {
|
|
2779
|
+
if (raw === void 0) return [];
|
|
2780
|
+
if (!isRecord(raw)) return [`${at}.install 要是对象`];
|
|
2781
|
+
const errors = [];
|
|
2782
|
+
for (const key of Object.keys(raw)) if (![
|
|
2783
|
+
"kind",
|
|
2784
|
+
"line",
|
|
2785
|
+
"platforms",
|
|
2786
|
+
"package",
|
|
2787
|
+
"registryEnv",
|
|
2788
|
+
"registryDefault"
|
|
2789
|
+
].includes(key)) errors.push(`${at}.install 有不认识的字段 ${key}`);
|
|
2790
|
+
const kind = text(raw["kind"]);
|
|
2791
|
+
if (kind !== "command" && kind !== "npm") errors.push(`${at}.install.kind 只认 command(一条命令)或 npm(一个包,装进隔离运行时)`);
|
|
2792
|
+
if (kind === "command" && text(raw["line"]) === "") errors.push(`${at}.install.line 没写 —— 要一条能直接粘进终端的命令`);
|
|
2793
|
+
if (kind === "npm" && text(raw["package"]) === "") errors.push(`${at}.install.package 没写 —— 这个命令由哪个 npm 包提供`);
|
|
2794
|
+
if (raw["registryDefault"] !== void 0 && !REGISTRY_PATTERN.test(text(raw["registryDefault"]))) errors.push(`${at}.install.registryDefault 要是 http(s):// 或 file:// 的源地址`);
|
|
2795
|
+
if (raw["platforms"] !== void 0) {
|
|
2796
|
+
if (!Array.isArray(raw["platforms"]) || raw["platforms"].length === 0) errors.push(`${at}.install.platforms 要是非空数组`);
|
|
2797
|
+
else if (raw["platforms"].some((one) => ![
|
|
2798
|
+
"darwin",
|
|
2799
|
+
"linux",
|
|
2800
|
+
"win32"
|
|
2801
|
+
].includes(text(one)))) errors.push(`${at}.install.platforms 只认 darwin / linux / win32`);
|
|
2802
|
+
}
|
|
2803
|
+
return errors;
|
|
2804
|
+
}
|
|
2764
2805
|
function perKindProblemsOf(kind, raw, at) {
|
|
2765
2806
|
const errors = [];
|
|
2766
2807
|
if (kind === "bin" || kind === "lib" || kind === "env") {
|
|
2767
2808
|
if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
|
|
2768
2809
|
}
|
|
2810
|
+
if (kind === "bin") errors.push(...binInstallProblemsOf(raw["install"], at));
|
|
2811
|
+
if (raw["docs"] !== void 0 && text(raw["docs"]) === "") errors.push(`${at}.docs 是空串`);
|
|
2769
2812
|
if (kind === "extension") {
|
|
2770
2813
|
if (text(raw["runtime"]) === "") errors.push(`${at}.runtime 没写 —— 扩展属于哪个运行时(如 opencli)`);
|
|
2771
2814
|
if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
|
|
@@ -3079,11 +3122,14 @@ var en = {
|
|
|
3079
3122
|
"panels.market.update": "Update",
|
|
3080
3123
|
"panels.market.swapSlow": "Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.",
|
|
3081
3124
|
"panels.market.removeSlow": "Not removed yet — maybe a slow network or an uninstall that did not finish. Check again in a moment; if it stays like this, restart dsh.",
|
|
3082
|
-
"panels.market.updateNoChange": "Update
|
|
3125
|
+
"panels.market.updateNoChange": "Update did not swap in: still {from}; the registry has {latest}.",
|
|
3083
3126
|
"panels.market.updateUnknownVersion": "(unknown)",
|
|
3084
3127
|
"panels.market.updateGone": "Update failed: the module is gone after the update.",
|
|
3085
3128
|
"panels.market.updateRestored": "Update failed: the new version could not be found after the update, so {version} was put back.",
|
|
3086
|
-
"panels.market.updateBehind": "Installed {installed}, but the
|
|
3129
|
+
"panels.market.updateBehind": "Installed {installed}, but the registry has {latest}.",
|
|
3130
|
+
"panels.market.updateStuck.title": "Update did not swap in",
|
|
3131
|
+
"panels.market.updateStuck.factNoChange": "Still {from} on disk; the registry has {latest}.",
|
|
3132
|
+
"panels.market.updateStuck.copiedHint": "Paste it into a terminal, then restart the workbench once.",
|
|
3087
3133
|
"panels.market.selfUpdateFailed": "Workbench update failed: {reason}",
|
|
3088
3134
|
"panels.market.selfUpdateUnknown": "the outside process left no reason (see ~/.dsh/workbench/self-update.log)",
|
|
3089
3135
|
"panels.market.selfUpdateRolledBack": "Workbench update failed; rolled back to {version}.",
|
|
@@ -3099,6 +3145,40 @@ var en = {
|
|
|
3099
3145
|
"panels.market.confirmNo": "Cancel",
|
|
3100
3146
|
"panels.market.noMarketSource": "The index has no newer version of this module (refresh the index and retry)",
|
|
3101
3147
|
"panels.market.failed": "Failed: {reason}",
|
|
3148
|
+
"panels.market.askAgent": "Ask the agent",
|
|
3149
|
+
"panels.market.askAgentCopied": "Copied",
|
|
3150
|
+
"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.",
|
|
3151
|
+
"panels.market.failure.permission": "Didn't install: no write access",
|
|
3152
|
+
"panels.market.failure.diskFull": "Didn't install: the disk is full",
|
|
3153
|
+
"panels.market.failure.sandbox": "Didn't install: the system blocked it",
|
|
3154
|
+
"panels.market.failure.unknown": "Didn't install: cause not recognised",
|
|
3155
|
+
"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).",
|
|
3156
|
+
"panels.market.failure.factMode": "{path} is mode {mode}, so this account cannot write to it.",
|
|
3157
|
+
"panels.market.failure.factSpace": "The disk holding {path} is full.",
|
|
3158
|
+
"panels.market.failure.factStuck": "This command ran in a restricted environment and cannot write to {path}.",
|
|
3159
|
+
"panels.market.failure.nowhere": "(the directory was not identified)",
|
|
3160
|
+
"panels.market.failure.copyFix": "Copy the fix command",
|
|
3161
|
+
"panels.market.failure.copied": "Copied",
|
|
3162
|
+
"panels.market.failure.copiedHint": "Paste it in a terminal, run it, then click Check again.",
|
|
3163
|
+
"panels.market.failure.askAgent": "Copy for the agent",
|
|
3164
|
+
"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.",
|
|
3165
|
+
"panels.market.failure.askAgentHint": "Paste it into the chat and let the agent carry on.",
|
|
3166
|
+
"panels.market.failure.recheck": "Check again",
|
|
3167
|
+
"panels.market.failure.showOutput": "Show install output",
|
|
3168
|
+
"panels.market.failure.hideOutput": "Hide install output",
|
|
3169
|
+
"panels.market.failure.term.commandLine": "command on line {line}",
|
|
3170
|
+
"panels.market.failure.term.signal": "killed by {signal}",
|
|
3171
|
+
"panels.market.failure.term.exitCode": "exit code {exitCode}",
|
|
3172
|
+
"panels.market.failure.term.noExitCode": "no exit code",
|
|
3173
|
+
"panels.market.failure.term.running": "running",
|
|
3174
|
+
"panels.market.failure.term.failed": "failed",
|
|
3175
|
+
"panels.market.failure.term.done": "done",
|
|
3176
|
+
"panels.market.failure.term.copy": "Copy",
|
|
3177
|
+
"panels.market.failure.term.copied": "Copied",
|
|
3178
|
+
"panels.market.failure.term.noOutput": "No output",
|
|
3179
|
+
"panels.market.failure.term.collapse": "Collapse",
|
|
3180
|
+
"panels.market.failure.term.expandAria": "Show the remaining {hidden} lines",
|
|
3181
|
+
"panels.market.failure.term.expand": "Show {hidden} lines",
|
|
3102
3182
|
"panels.market.needEnv": "Set {env} in the terminal that started the workbench first",
|
|
3103
3183
|
"panels.market.needCommands": "Missing commands: {commands}",
|
|
3104
3184
|
"panels.market.needBinary": "Install the {command} command first",
|
|
@@ -3135,9 +3215,13 @@ var en = {
|
|
|
3135
3215
|
"panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
|
|
3136
3216
|
"panels.market.foot": "After installing, enable it in the panel page of that project.",
|
|
3137
3217
|
"panels.market.checkUpdates": "Check for updates",
|
|
3218
|
+
"panels.market.checkAll": "Check all updates",
|
|
3138
3219
|
"panels.market.checkingNow": "Checking…",
|
|
3139
3220
|
"panels.market.checkFailed": "The last check failed. Check your connection and retry.",
|
|
3140
3221
|
"panels.market.checkedAt": "Last checked: {time}",
|
|
3222
|
+
"panels.market.latestPartial": "Could not check {n} modules",
|
|
3223
|
+
"panels.market.latestNoRegistry": "No source configured — the latest version was not checked",
|
|
3224
|
+
"panels.market.latestProbeFailed": "Could not reach the source — try again later",
|
|
3141
3225
|
"panels.market.justNow": "just now",
|
|
3142
3226
|
"panels.market.minutesAgo": "{n} min ago",
|
|
3143
3227
|
"panels.market.hoursAgo": "{n} h ago",
|
|
@@ -3196,6 +3280,8 @@ var en = {
|
|
|
3196
3280
|
"panels.market.add.failurePermission": "No write permission, cannot install",
|
|
3197
3281
|
"panels.market.add.failureBuildBlocked": "A dependency wants to run install scripts; you have to allow it first",
|
|
3198
3282
|
"panels.market.add.failureIntegrity": "The downloaded package failed its integrity check",
|
|
3283
|
+
"panels.market.add.failureStopProfile": "The old copy is still in use (the workbench has this module loaded), so this dsh version will not overwrite it in place.",
|
|
3284
|
+
"panels.market.add.failureCancelled": "This run was cancelled and nothing changed.",
|
|
3199
3285
|
"panels.market.add.failureTimeout": "The install timed out",
|
|
3200
3286
|
"panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
|
|
3201
3287
|
"panels.market.add.failureInstalled": "It is already installed in this workbench. The same package cannot be installed over itself: uninstall it first, then install again. The uninstall did not succeed this time.",
|
|
@@ -3279,7 +3365,7 @@ var en = {
|
|
|
3279
3365
|
"panels.discover.missingIndex": "This repository has no {path} yet.",
|
|
3280
3366
|
"panels.discover.initTitle": "Initialize this repository as a module market index?",
|
|
3281
3367
|
"panels.discover.initCta": "Initialize market index",
|
|
3282
|
-
"panels.discover.initWhat": "It will write market
|
|
3368
|
+
"panels.discover.initWhat": "It will write the index directory market/ and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their build files under artifacts/<package-name>/<version>/ and their entry under market/<package-name>/<version>.json. The repository stays owned by its owner.",
|
|
3283
3369
|
"panels.discover.initBranch": "Branch",
|
|
3284
3370
|
"panels.discover.initBranchHint": "The index and build files go to this branch; an empty repository gets it created.",
|
|
3285
3371
|
"panels.discover.initBranchBad": "Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.",
|
|
@@ -3602,6 +3688,9 @@ var en = {
|
|
|
3602
3688
|
"approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
|
|
3603
3689
|
"approval.longTask.what": "Task to stop",
|
|
3604
3690
|
"approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
|
|
3691
|
+
"approval.plugin.name": "Plugin",
|
|
3692
|
+
"approval.plugin.command": "Command",
|
|
3693
|
+
"approval.plugin.note": "Agent says",
|
|
3605
3694
|
"approval.publish.module": "Module",
|
|
3606
3695
|
"approval.publish.target": "Target",
|
|
3607
3696
|
"approval.publish.version": "Version",
|
|
@@ -3621,7 +3710,7 @@ var en = {
|
|
|
3621
3710
|
"approval.publish.artifacts": "Build files",
|
|
3622
3711
|
"approval.publish.index": "Index",
|
|
3623
3712
|
"approval.publish.commits": "Commits",
|
|
3624
|
-
"approval.publish.twoCommits": "build files +
|
|
3713
|
+
"approval.publish.twoCommits": "build files + entry file in 2 commits, one push",
|
|
3625
3714
|
"approval.publish.reading": "Reading…",
|
|
3626
3715
|
"approval.publish.changelog": "Changelog for {version}",
|
|
3627
3716
|
"approval.publish.changelogPending": "This release writes the {version} changelog entry",
|
|
@@ -3779,11 +3868,14 @@ var dictionaries = {
|
|
|
3779
3868
|
"panels.market.update": "更新",
|
|
3780
3869
|
"panels.market.swapSlow": "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。",
|
|
3781
3870
|
"panels.market.removeSlow": "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。",
|
|
3782
|
-
"panels.market.updateNoChange": "
|
|
3871
|
+
"panels.market.updateNoChange": "更新没换上:还是 {from};源上最新是 {latest}。",
|
|
3783
3872
|
"panels.market.updateUnknownVersion": "(问不到)",
|
|
3784
3873
|
"panels.market.updateGone": "更新失败:更新后找不到这个模块。",
|
|
3785
3874
|
"panels.market.updateRestored": "更新失败:更新后找不到新版本,已把 {version} 装回去。",
|
|
3786
|
-
"panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest}
|
|
3875
|
+
"panels.market.updateBehind": "装上了 {installed},但源上最新是 {latest}。",
|
|
3876
|
+
"panels.market.updateStuck.title": "更新没换上",
|
|
3877
|
+
"panels.market.updateStuck.factNoChange": "盘上还是 {from};源上最新是 {latest}。",
|
|
3878
|
+
"panels.market.updateStuck.copiedHint": "粘到终端跑一次,跑完重启一次工作台。",
|
|
3787
3879
|
"panels.market.selfUpdateFailed": "工作台更新失败:{reason}",
|
|
3788
3880
|
"panels.market.selfUpdateUnknown": "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)",
|
|
3789
3881
|
"panels.market.selfUpdateRolledBack": "工作台更新失败,已回滚到 {version}。",
|
|
@@ -3799,6 +3891,40 @@ var dictionaries = {
|
|
|
3799
3891
|
"panels.market.confirmNo": "取消",
|
|
3800
3892
|
"panels.market.noMarketSource": "索引里没有这个模块的新版本(刷新一次索引再试)",
|
|
3801
3893
|
"panels.market.failed": "没成功:{reason}",
|
|
3894
|
+
"panels.market.askAgent": "问 agent",
|
|
3895
|
+
"panels.market.askAgentCopied": "已复制",
|
|
3896
|
+
"panels.market.askAgentText": "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。",
|
|
3897
|
+
"panels.market.failure.permission": "没装上:没有写入权限",
|
|
3898
|
+
"panels.market.failure.diskFull": "没装上:磁盘满了",
|
|
3899
|
+
"panels.market.failure.sandbox": "没装上:被系统拦住了",
|
|
3900
|
+
"panels.market.failure.unknown": "没装上:原因没认出来",
|
|
3901
|
+
"panels.market.failure.factOwner": "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。",
|
|
3902
|
+
"panels.market.failure.factMode": "{path} 的权限是 {mode},当前账号没有写权限。",
|
|
3903
|
+
"panels.market.failure.factSpace": "{path} 所在的磁盘满了。",
|
|
3904
|
+
"panels.market.failure.factStuck": "这条命令跑在受限环境里,写不进 {path}。",
|
|
3905
|
+
"panels.market.failure.nowhere": "(没认出是哪个目录)",
|
|
3906
|
+
"panels.market.failure.copyFix": "复制修复命令",
|
|
3907
|
+
"panels.market.failure.copied": "已复制",
|
|
3908
|
+
"panels.market.failure.copiedHint": "粘到终端跑一次,回来点「再检测」。",
|
|
3909
|
+
"panels.market.failure.askAgent": "复制给 agent",
|
|
3910
|
+
"panels.market.failure.askAgentText": "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。",
|
|
3911
|
+
"panels.market.failure.askAgentHint": "粘到对话里,让 agent 接着弄。",
|
|
3912
|
+
"panels.market.failure.recheck": "再检测",
|
|
3913
|
+
"panels.market.failure.showOutput": "查看安装输出",
|
|
3914
|
+
"panels.market.failure.hideOutput": "收起安装输出",
|
|
3915
|
+
"panels.market.failure.term.commandLine": "第 {line} 行的命令",
|
|
3916
|
+
"panels.market.failure.term.signal": "被 {signal} 终止",
|
|
3917
|
+
"panels.market.failure.term.exitCode": "退出码 {exitCode}",
|
|
3918
|
+
"panels.market.failure.term.noExitCode": "没有退出码",
|
|
3919
|
+
"panels.market.failure.term.running": "在跑",
|
|
3920
|
+
"panels.market.failure.term.failed": "没跑通",
|
|
3921
|
+
"panels.market.failure.term.done": "跑完了",
|
|
3922
|
+
"panels.market.failure.term.copy": "复制",
|
|
3923
|
+
"panels.market.failure.term.copied": "已复制",
|
|
3924
|
+
"panels.market.failure.term.noOutput": "没有输出",
|
|
3925
|
+
"panels.market.failure.term.collapse": "收起",
|
|
3926
|
+
"panels.market.failure.term.expandAria": "展开剩下的 {hidden} 行",
|
|
3927
|
+
"panels.market.failure.term.expand": "展开 {hidden} 行",
|
|
3802
3928
|
"panels.market.needEnv": "先在启动工作台的终端里设 {env}",
|
|
3803
3929
|
"panels.market.needCommands": "缺这几条命令:{commands}",
|
|
3804
3930
|
"panels.market.needBinary": "先装 {command} 命令",
|
|
@@ -3835,9 +3961,13 @@ var dictionaries = {
|
|
|
3835
3961
|
"panels.market.restartNeeded": "新版装好了,重启一次才生效。",
|
|
3836
3962
|
"panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
|
|
3837
3963
|
"panels.market.checkUpdates": "检查更新",
|
|
3964
|
+
"panels.market.checkAll": "检查全部更新",
|
|
3838
3965
|
"panels.market.checkingNow": "正在检查…",
|
|
3839
3966
|
"panels.market.checkFailed": "最近一次没查到,检查网络后重试",
|
|
3840
3967
|
"panels.market.checkedAt": "最近检查:{time}",
|
|
3968
|
+
"panels.market.latestPartial": "{n} 个模块没查成",
|
|
3969
|
+
"panels.market.latestNoRegistry": "没配来源,未检查新版",
|
|
3970
|
+
"panels.market.latestProbeFailed": "问不到源,稍后重试",
|
|
3841
3971
|
"panels.market.justNow": "刚刚",
|
|
3842
3972
|
"panels.market.minutesAgo": "{n} 分钟前",
|
|
3843
3973
|
"panels.market.hoursAgo": "{n} 小时前",
|
|
@@ -3896,6 +4026,8 @@ var dictionaries = {
|
|
|
3896
4026
|
"panels.market.add.failurePermission": "没有写入权限,无法安装",
|
|
3897
4027
|
"panels.market.add.failureBuildBlocked": "有依赖的安装脚本需要你允许后才能继续",
|
|
3898
4028
|
"panels.market.add.failureIntegrity": "下载的安装包校验失败",
|
|
4029
|
+
"panels.market.add.failureStopProfile": "旧版还在用着(工作台正加载这个模块),这一版 dsh 不肯就地覆盖。",
|
|
4030
|
+
"panels.market.add.failureCancelled": "这次操作被取消了,什么都没动。",
|
|
3899
4031
|
"panels.market.add.failureTimeout": "安装超时",
|
|
3900
4032
|
"panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
|
|
3901
4033
|
"panels.market.add.failureInstalled": "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。",
|
|
@@ -3979,7 +4111,7 @@ var dictionaries = {
|
|
|
3979
4111
|
"panels.discover.missingIndex": "仓库里还没有索引文件 {path}",
|
|
3980
4112
|
"panels.discover.initTitle": "把这个仓库初始化成模块市场索引?",
|
|
3981
4113
|
"panels.discover.initCta": "初始化成市场索引",
|
|
3982
|
-
"panels.discover.initWhat": "会在 {branch}
|
|
4114
|
+
"panels.discover.initWhat": "会在 {branch} 分支写索引目录 market/ 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 artifacts/<包名>/<版本>/,条目写到 market/<包名>/<版本>.json。仓库的写权限归它的所有者。",
|
|
3983
4115
|
"panels.discover.initBranch": "分支",
|
|
3984
4116
|
"panels.discover.initBranchHint": "索引和打包文件都发到这个分支;空仓库会新建它。",
|
|
3985
4117
|
"panels.discover.initBranchBad": "分支名只能用字母、数字、点、下划线、斜杠或短横线",
|
|
@@ -4302,6 +4434,9 @@ var dictionaries = {
|
|
|
4302
4434
|
"approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
|
|
4303
4435
|
"approval.longTask.what": "要停的那次任务",
|
|
4304
4436
|
"approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
|
|
4437
|
+
"approval.plugin.name": "插件",
|
|
4438
|
+
"approval.plugin.command": "命令",
|
|
4439
|
+
"approval.plugin.note": "agent 说",
|
|
4305
4440
|
"approval.publish.module": "模块",
|
|
4306
4441
|
"approval.publish.target": "目标",
|
|
4307
4442
|
"approval.publish.version": "版本",
|
|
@@ -4321,7 +4456,7 @@ var dictionaries = {
|
|
|
4321
4456
|
"approval.publish.artifacts": "打包文件",
|
|
4322
4457
|
"approval.publish.index": "索引",
|
|
4323
4458
|
"approval.publish.commits": "提交",
|
|
4324
|
-
"approval.publish.twoCommits": "打包文件 +
|
|
4459
|
+
"approval.publish.twoCommits": "打包文件 + 条目文件两次提交,一次推送",
|
|
4325
4460
|
"approval.publish.reading": "读取中…",
|
|
4326
4461
|
"approval.publish.changelog": "{version} 的更新日志",
|
|
4327
4462
|
"approval.publish.changelogPending": "{version} 这一版会写进更新日志,随包发布",
|
|
@@ -4673,6 +4808,33 @@ function IconModules({ size = 16 }) {
|
|
|
4673
4808
|
}));
|
|
4674
4809
|
}
|
|
4675
4810
|
//#endregion
|
|
4811
|
+
//#region src/shared/api/unit-board.ts
|
|
4812
|
+
function gateOf(capability, mode) {
|
|
4813
|
+
if (mode === "none") return { gated: true };
|
|
4814
|
+
if (capability === null) return { gated: true };
|
|
4815
|
+
return { gated: capability.status === "ok" || capability.status === "unchecked" };
|
|
4816
|
+
}
|
|
4817
|
+
function splitBlocker(candidates) {
|
|
4818
|
+
let blocker;
|
|
4819
|
+
let notice;
|
|
4820
|
+
for (const candidate of candidates) {
|
|
4821
|
+
if (candidate === void 0) continue;
|
|
4822
|
+
if (candidate.severity === "block") {
|
|
4823
|
+
blocker ??= candidate;
|
|
4824
|
+
continue;
|
|
4825
|
+
}
|
|
4826
|
+
notice ??= candidate;
|
|
4827
|
+
}
|
|
4828
|
+
return {
|
|
4829
|
+
...blocker === void 0 ? {} : { blocker },
|
|
4830
|
+
...blocker !== void 0 || notice === void 0 ? {} : { notice }
|
|
4831
|
+
};
|
|
4832
|
+
}
|
|
4833
|
+
function probeKeyOf(error) {
|
|
4834
|
+
if (error === void 0) return null;
|
|
4835
|
+
return error.code === "" ? "unknown" : error.code;
|
|
4836
|
+
}
|
|
4837
|
+
//#endregion
|
|
4676
4838
|
//#region src/shared/hooks/fact-transports.ts
|
|
4677
4839
|
function sseTransport(options) {
|
|
4678
4840
|
return { start({ onFrame, cursor, onMode }) {
|
|
@@ -4825,14 +4987,14 @@ function bumpCapabilityEpoch() {
|
|
|
4825
4987
|
epoch$1 += 1;
|
|
4826
4988
|
}
|
|
4827
4989
|
var current$1 = null;
|
|
4828
|
-
var listeners$
|
|
4990
|
+
var listeners$8 = /* @__PURE__ */ new Set();
|
|
4829
4991
|
function capabilityValue() {
|
|
4830
4992
|
return current$1;
|
|
4831
4993
|
}
|
|
4832
4994
|
function subscribeCapabilities(listener) {
|
|
4833
|
-
listeners$
|
|
4995
|
+
listeners$8.add(listener);
|
|
4834
4996
|
return () => {
|
|
4835
|
-
listeners$
|
|
4997
|
+
listeners$8.delete(listener);
|
|
4836
4998
|
};
|
|
4837
4999
|
}
|
|
4838
5000
|
function setCapabilities(next, rechecked = false) {
|
|
@@ -4845,7 +5007,7 @@ function setCapabilities(next, rechecked = false) {
|
|
|
4845
5007
|
});
|
|
4846
5008
|
if (next === current$1) return;
|
|
4847
5009
|
current$1 = next;
|
|
4848
|
-
for (const listener of [...listeners$
|
|
5010
|
+
for (const listener of [...listeners$8]) listener();
|
|
4849
5011
|
}
|
|
4850
5012
|
function beginProbe() {
|
|
4851
5013
|
probing += 1;
|
|
@@ -4891,12 +5053,12 @@ function shareCapabilityFetch(force, load) {
|
|
|
4891
5053
|
};
|
|
4892
5054
|
return promise;
|
|
4893
5055
|
}
|
|
4894
|
-
var readSeq
|
|
5056
|
+
var readSeq = 0;
|
|
4895
5057
|
var newestForceSeq$1 = -1;
|
|
4896
5058
|
function runCapabilityRead(options) {
|
|
4897
5059
|
const { force, silent = false, load = fetchAll } = options;
|
|
4898
5060
|
const at = epoch$1;
|
|
4899
|
-
const seq = readSeq
|
|
5061
|
+
const seq = readSeq += 1;
|
|
4900
5062
|
if (force) newestForceSeq$1 = seq;
|
|
4901
5063
|
const shown = force && !silent;
|
|
4902
5064
|
if (shown) beginProbe();
|
|
@@ -4932,33 +5094,6 @@ function useCapabilityProbe() {
|
|
|
4932
5094
|
return (0, react.useSyncExternalStore)(subscribeProbe, probeValue);
|
|
4933
5095
|
}
|
|
4934
5096
|
//#endregion
|
|
4935
|
-
//#region src/shared/api/unit-board.ts
|
|
4936
|
-
function gateOf(capability, mode) {
|
|
4937
|
-
if (mode === "none") return { gated: true };
|
|
4938
|
-
if (capability === null) return { gated: true };
|
|
4939
|
-
return { gated: capability.status === "ok" || capability.status === "unchecked" };
|
|
4940
|
-
}
|
|
4941
|
-
function splitBlocker(candidates) {
|
|
4942
|
-
let blocker;
|
|
4943
|
-
let notice;
|
|
4944
|
-
for (const candidate of candidates) {
|
|
4945
|
-
if (candidate === void 0) continue;
|
|
4946
|
-
if (candidate.severity === "block") {
|
|
4947
|
-
blocker ??= candidate;
|
|
4948
|
-
continue;
|
|
4949
|
-
}
|
|
4950
|
-
notice ??= candidate;
|
|
4951
|
-
}
|
|
4952
|
-
return {
|
|
4953
|
-
...blocker === void 0 ? {} : { blocker },
|
|
4954
|
-
...blocker !== void 0 || notice === void 0 ? {} : { notice }
|
|
4955
|
-
};
|
|
4956
|
-
}
|
|
4957
|
-
function probeKeyOf(error) {
|
|
4958
|
-
if (error === void 0) return null;
|
|
4959
|
-
return error.code === "" ? "unknown" : error.code;
|
|
4960
|
-
}
|
|
4961
|
-
//#endregion
|
|
4962
5097
|
//#region src/shared/hooks/use-capability-gate.ts
|
|
4963
5098
|
var use_capability_gate_exports = /* @__PURE__ */ __exportAll({
|
|
4964
5099
|
useCapabilityGate: () => useCapabilityGate,
|
|
@@ -5000,7 +5135,7 @@ function useCapabilityMap(refreshToken) {
|
|
|
5000
5135
|
//#endregion
|
|
5001
5136
|
//#region src/app/layouts/panel-hint.ts
|
|
5002
5137
|
var hints = /* @__PURE__ */ new Map();
|
|
5003
|
-
var listeners$
|
|
5138
|
+
var listeners$7 = /* @__PURE__ */ new Set();
|
|
5004
5139
|
function sameHint(left, right) {
|
|
5005
5140
|
if (left === null || right === null) return left === right;
|
|
5006
5141
|
if (left.labelKey !== right.labelKey || left.tone !== right.tone) return false;
|
|
@@ -5012,15 +5147,15 @@ function publishPanelHint(id, hint) {
|
|
|
5012
5147
|
if (sameHint(hints.get(id) ?? null, hint)) return;
|
|
5013
5148
|
if (hint === null) hints.delete(id);
|
|
5014
5149
|
else hints.set(id, hint);
|
|
5015
|
-
for (const listener of [...listeners$
|
|
5150
|
+
for (const listener of [...listeners$7]) listener();
|
|
5016
5151
|
}
|
|
5017
5152
|
function panelHintOf(id) {
|
|
5018
5153
|
return id === null ? null : hints.get(id) ?? null;
|
|
5019
5154
|
}
|
|
5020
5155
|
function subscribePanelHints(listener) {
|
|
5021
|
-
listeners$
|
|
5156
|
+
listeners$7.add(listener);
|
|
5022
5157
|
return () => {
|
|
5023
|
-
listeners$
|
|
5158
|
+
listeners$7.delete(listener);
|
|
5024
5159
|
};
|
|
5025
5160
|
}
|
|
5026
5161
|
function usePanelHint(id) {
|
|
@@ -5188,6 +5323,29 @@ function installedIdSet(installed) {
|
|
|
5188
5323
|
if (installed === void 0) return null;
|
|
5189
5324
|
return new Set(installed.map((item) => item.unit));
|
|
5190
5325
|
}
|
|
5326
|
+
function latestUnavailableNote(unavailable) {
|
|
5327
|
+
if (unavailable === "no-registry") return {
|
|
5328
|
+
key: "panels.market.latestNoRegistry",
|
|
5329
|
+
params: {}
|
|
5330
|
+
};
|
|
5331
|
+
if (unavailable === "probe-failed") return {
|
|
5332
|
+
key: "panels.market.latestProbeFailed",
|
|
5333
|
+
params: {}
|
|
5334
|
+
};
|
|
5335
|
+
}
|
|
5336
|
+
function latestCheckSummary(modules) {
|
|
5337
|
+
let checked = 0;
|
|
5338
|
+
let unknown = 0;
|
|
5339
|
+
for (const module of modules ?? []) if (module.latest !== void 0) checked += 1;
|
|
5340
|
+
else if (module.latestUnavailable === "no-registry" || module.latestUnavailable === "probe-failed") unknown += 1;
|
|
5341
|
+
return {
|
|
5342
|
+
checked,
|
|
5343
|
+
unknown
|
|
5344
|
+
};
|
|
5345
|
+
}
|
|
5346
|
+
function checkedPluginCount(plugins) {
|
|
5347
|
+
return (plugins ?? []).filter((plugin) => plugin.latest !== void 0).length;
|
|
5348
|
+
}
|
|
5191
5349
|
function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
|
|
5192
5350
|
const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
|
|
5193
5351
|
const rows = [];
|
|
@@ -5201,16 +5359,17 @@ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE_
|
|
|
5201
5359
|
const pending = !loaded && refused.length === 0;
|
|
5202
5360
|
const titleKey = titles.get(module.unit);
|
|
5203
5361
|
const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
|
|
5362
|
+
const note = refused.length > 0 ? {
|
|
5363
|
+
key: "panels.market.moduleRefused",
|
|
5364
|
+
params: {}
|
|
5365
|
+
} : latestUnavailableNote(module.latestUnavailable);
|
|
5204
5366
|
rows.push({
|
|
5205
5367
|
id: module.unit,
|
|
5206
5368
|
titleKey: titleKey ?? module.unit,
|
|
5207
5369
|
...remembered === void 0 ? {} : { label: remembered },
|
|
5208
5370
|
state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
|
|
5209
5371
|
...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
|
|
5210
|
-
...
|
|
5211
|
-
key: "panels.market.moduleRefused",
|
|
5212
|
-
params: {}
|
|
5213
|
-
} },
|
|
5372
|
+
...note === void 0 ? {} : { note },
|
|
5214
5373
|
...module.local === true ? { local: true } : {},
|
|
5215
5374
|
pkg: module.pkg,
|
|
5216
5375
|
canInstall: false,
|
|
@@ -5237,6 +5396,13 @@ var SWITCH_LOCKED = /* @__PURE__ */ new Set(["unusable", "broken"]);
|
|
|
5237
5396
|
function marketSwitchLocked(row) {
|
|
5238
5397
|
return SWITCH_LOCKED.has(row.state);
|
|
5239
5398
|
}
|
|
5399
|
+
function marketAsksAgent(row) {
|
|
5400
|
+
if (row.workbench === true || row.plugin === true) return false;
|
|
5401
|
+
if (row.state === "installed" || row.state === "inactive" || row.state === "outdated") return false;
|
|
5402
|
+
if (row.state === "checking" || row.state === "pending-restart") return false;
|
|
5403
|
+
if (row.state === "pending-followup") return false;
|
|
5404
|
+
return !marketActions$1(row).includes("install");
|
|
5405
|
+
}
|
|
5240
5406
|
function marketActions$1(row) {
|
|
5241
5407
|
if (row.workbench === true) {
|
|
5242
5408
|
if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
|
|
@@ -5359,6 +5525,18 @@ function marketSections(rows) {
|
|
|
5359
5525
|
rows: rest
|
|
5360
5526
|
}]];
|
|
5361
5527
|
}
|
|
5528
|
+
function checkingRows(rows, scope) {
|
|
5529
|
+
return rows.map((row) => {
|
|
5530
|
+
if (row.state !== "unknown" && row.state !== "unchecked") return row;
|
|
5531
|
+
if (!scope.all && !scope.units.has(row.id)) return row;
|
|
5532
|
+
return {
|
|
5533
|
+
...row,
|
|
5534
|
+
state: "checking",
|
|
5535
|
+
hint: void 0,
|
|
5536
|
+
note: void 0
|
|
5537
|
+
};
|
|
5538
|
+
});
|
|
5539
|
+
}
|
|
5362
5540
|
function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
|
|
5363
5541
|
const rows = [];
|
|
5364
5542
|
for (const manifest of manifests) {
|
|
@@ -5487,8 +5665,9 @@ var UPDATES_KEY = "panels.market.hasNew";
|
|
|
5487
5665
|
function isProblem(row) {
|
|
5488
5666
|
return row.broken === true || row.state === "broken" || row.state === "unusable" || row.note?.key === "panels.market.moduleRefused";
|
|
5489
5667
|
}
|
|
5490
|
-
function isRestart(row) {
|
|
5491
|
-
|
|
5668
|
+
function isRestart(row, installing) {
|
|
5669
|
+
if (row.state === "pending-restart") return true;
|
|
5670
|
+
return !installing && row.state === "inactive";
|
|
5492
5671
|
}
|
|
5493
5672
|
function isUnknown(row, rosterRead) {
|
|
5494
5673
|
return row.state === "unchecked" || rosterRead && row.state === "unknown";
|
|
@@ -5498,9 +5677,10 @@ function awaitsRestart(manifests, installed) {
|
|
|
5498
5677
|
return installed.some((module) => !loaded.has(module.unit) && refusalReasons(module.refused, module.clientRefused).length === 0);
|
|
5499
5678
|
}
|
|
5500
5679
|
function marketHintOf(input) {
|
|
5501
|
-
const
|
|
5502
|
-
const
|
|
5503
|
-
const
|
|
5680
|
+
const installing = input.installing === true;
|
|
5681
|
+
const held = /* @__PURE__ */ new Set([...input.busy ?? [], ...input.applied ?? []]);
|
|
5682
|
+
const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !held.has(manifest.id));
|
|
5683
|
+
const installed = (input.installed ?? []).filter((module) => !held.has(module.unit));
|
|
5504
5684
|
const catalog = marketRows(marketable, input.capabilities, marketUpdatesOf(input.modules));
|
|
5505
5685
|
const listed = new Set(catalog.map((row) => row.id));
|
|
5506
5686
|
const self = workbenchRow(input.workbench);
|
|
@@ -5511,10 +5691,10 @@ function marketHintOf(input) {
|
|
|
5511
5691
|
...self === void 0 ? [] : [self]
|
|
5512
5692
|
];
|
|
5513
5693
|
const problem = rows.some(isProblem);
|
|
5514
|
-
const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
|
|
5694
|
+
const restart = rows.some((row) => isRestart(row, installing)) || !installing && awaitsRestart(input.manifests, installed);
|
|
5515
5695
|
const followUp = rows.some((row) => row.state === "pending-followup");
|
|
5516
5696
|
const rosterRead = input.modules !== null;
|
|
5517
|
-
const unknown = rows.some((row) => isUnknown(row, rosterRead));
|
|
5697
|
+
const unknown = !installing && rows.some((row) => isUnknown(row, rosterRead));
|
|
5518
5698
|
const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
|
|
5519
5699
|
const more = [];
|
|
5520
5700
|
if (problem) {
|
|
@@ -5643,10 +5823,10 @@ function holdWindowMs(until) {
|
|
|
5643
5823
|
}
|
|
5644
5824
|
//#endregion
|
|
5645
5825
|
//#region src/app/layouts/rightbar/market-busy.ts
|
|
5646
|
-
var listeners$
|
|
5826
|
+
var listeners$6 = /* @__PURE__ */ new Set();
|
|
5647
5827
|
var published = /* @__PURE__ */ new Map();
|
|
5648
5828
|
var live$2 = /* @__PURE__ */ new Set();
|
|
5649
|
-
var timer$
|
|
5829
|
+
var timer$3;
|
|
5650
5830
|
var MARKET_BUSY_MS = WORKBENCH_SWAP_MS;
|
|
5651
5831
|
function marketBusyIds() {
|
|
5652
5832
|
return live$2;
|
|
@@ -5656,12 +5836,12 @@ function publishMarketBusy(ids) {
|
|
|
5656
5836
|
const next = /* @__PURE__ */ new Map();
|
|
5657
5837
|
for (const id of new Set(ids)) next.set(id, published.get(id) ?? now);
|
|
5658
5838
|
published = next;
|
|
5659
|
-
refresh(now);
|
|
5839
|
+
refresh$1(now);
|
|
5660
5840
|
}
|
|
5661
5841
|
function subscribeMarketBusy(listener) {
|
|
5662
|
-
listeners$
|
|
5842
|
+
listeners$6.add(listener);
|
|
5663
5843
|
return () => {
|
|
5664
|
-
listeners$
|
|
5844
|
+
listeners$6.delete(listener);
|
|
5665
5845
|
};
|
|
5666
5846
|
}
|
|
5667
5847
|
function useMarketBusy() {
|
|
@@ -5677,29 +5857,100 @@ function sameSet(left, right) {
|
|
|
5677
5857
|
for (const id of left) if (!right.has(id)) return false;
|
|
5678
5858
|
return true;
|
|
5679
5859
|
}
|
|
5680
|
-
function schedule$
|
|
5681
|
-
if (timer$
|
|
5682
|
-
timer$
|
|
5860
|
+
function schedule$2(now) {
|
|
5861
|
+
if (timer$3 !== void 0) clearTimeout(timer$3);
|
|
5862
|
+
timer$3 = void 0;
|
|
5683
5863
|
let soonest = Number.POSITIVE_INFINITY;
|
|
5684
5864
|
for (const at of published.values()) soonest = Math.min(soonest, at);
|
|
5685
5865
|
if (soonest === Number.POSITIVE_INFINITY) return;
|
|
5686
|
-
timer$
|
|
5866
|
+
timer$3 = setTimeout(() => refresh$1(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
|
|
5687
5867
|
}
|
|
5688
|
-
function refresh(now) {
|
|
5868
|
+
function refresh$1(now) {
|
|
5689
5869
|
for (const [id, at] of published) if (now - at >= MARKET_BUSY_MS) published.delete(id);
|
|
5690
5870
|
const next = new Set(published.keys());
|
|
5691
5871
|
if (!sameSet(live$2, next)) {
|
|
5692
5872
|
live$2 = next;
|
|
5873
|
+
for (const listener of [...listeners$6]) listener();
|
|
5874
|
+
}
|
|
5875
|
+
schedule$2(now);
|
|
5876
|
+
}
|
|
5877
|
+
//#endregion
|
|
5878
|
+
//#region src/app/layouts/rightbar/market-install.ts
|
|
5879
|
+
var NO_UNITS$2 = /* @__PURE__ */ new Set();
|
|
5880
|
+
var IDLE$2 = {
|
|
5881
|
+
installing: false,
|
|
5882
|
+
applied: NO_UNITS$2
|
|
5883
|
+
};
|
|
5884
|
+
var tokens = /* @__PURE__ */ new Set();
|
|
5885
|
+
var applied = /* @__PURE__ */ new Map();
|
|
5886
|
+
var listeners$5 = /* @__PURE__ */ new Set();
|
|
5887
|
+
var snapshot$1 = IDLE$2;
|
|
5888
|
+
var timer$2;
|
|
5889
|
+
function sameUnits(left, right) {
|
|
5890
|
+
if (left.size !== right.size) return false;
|
|
5891
|
+
for (const unit of left) if (!right.has(unit)) return false;
|
|
5892
|
+
return true;
|
|
5893
|
+
}
|
|
5894
|
+
function schedule$1(now) {
|
|
5895
|
+
if (timer$2 !== void 0) clearTimeout(timer$2);
|
|
5896
|
+
timer$2 = void 0;
|
|
5897
|
+
if (applied.size === 0) return;
|
|
5898
|
+
let soonest = Number.POSITIVE_INFINITY;
|
|
5899
|
+
for (const at of applied.values()) soonest = Math.min(soonest, at);
|
|
5900
|
+
timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MODULE_SETTLE_MS - now) + 1);
|
|
5901
|
+
}
|
|
5902
|
+
function refresh(now) {
|
|
5903
|
+
for (const [unit, at] of applied) if (now - at >= 15e3) applied.delete(unit);
|
|
5904
|
+
const next = tokens.size === 0 && applied.size === 0 ? IDLE$2 : {
|
|
5905
|
+
installing: tokens.size > 0,
|
|
5906
|
+
applied: applied.size === 0 ? NO_UNITS$2 : new Set(applied.keys())
|
|
5907
|
+
};
|
|
5908
|
+
if (next.installing !== snapshot$1.installing || !sameUnits(next.applied, snapshot$1.applied)) {
|
|
5909
|
+
snapshot$1 = next;
|
|
5693
5910
|
for (const listener of [...listeners$5]) listener();
|
|
5694
5911
|
}
|
|
5695
5912
|
schedule$1(now);
|
|
5696
5913
|
}
|
|
5914
|
+
function marketInstallState() {
|
|
5915
|
+
return snapshot$1;
|
|
5916
|
+
}
|
|
5917
|
+
function subscribeMarketInstall(listener) {
|
|
5918
|
+
listeners$5.add(listener);
|
|
5919
|
+
return () => {
|
|
5920
|
+
listeners$5.delete(listener);
|
|
5921
|
+
};
|
|
5922
|
+
}
|
|
5923
|
+
function publishMarketInstalling(token, active) {
|
|
5924
|
+
if (active) tokens.add(token);
|
|
5925
|
+
else tokens.delete(token);
|
|
5926
|
+
refresh(Date.now());
|
|
5927
|
+
}
|
|
5928
|
+
function publishMarketApplied(units) {
|
|
5929
|
+
const now = Date.now();
|
|
5930
|
+
for (const unit of new Set(units)) if (unit !== "" && !applied.has(unit)) applied.set(unit, now);
|
|
5931
|
+
refresh(now);
|
|
5932
|
+
}
|
|
5933
|
+
function useMarketInstallState() {
|
|
5934
|
+
return (0, react.useSyncExternalStore)(subscribeMarketInstall, marketInstallState);
|
|
5935
|
+
}
|
|
5936
|
+
function usePublishMarketInstalling(token, active) {
|
|
5937
|
+
(0, react.useEffect)(() => {
|
|
5938
|
+
publishMarketInstalling(token, active);
|
|
5939
|
+
return () => publishMarketInstalling(token, false);
|
|
5940
|
+
}, [token, active]);
|
|
5941
|
+
}
|
|
5697
5942
|
//#endregion
|
|
5698
5943
|
//#region src/shared/api/write-outcome.ts
|
|
5699
5944
|
function writeRoute(channel, resource) {
|
|
5700
5945
|
if (channel === "provision") return "provision";
|
|
5701
5946
|
return `${channel}/${resource}`;
|
|
5702
5947
|
}
|
|
5948
|
+
function installFailureOf(value) {
|
|
5949
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
5950
|
+
const record = value;
|
|
5951
|
+
if (typeof record.kind !== "string" || typeof record.command !== "string") return void 0;
|
|
5952
|
+
return value;
|
|
5953
|
+
}
|
|
5703
5954
|
function writeOutcomeOf(response, networkText) {
|
|
5704
5955
|
if (response === null) return {
|
|
5705
5956
|
ok: false,
|
|
@@ -5711,11 +5962,13 @@ function writeOutcomeOf(response, networkText) {
|
|
|
5711
5962
|
const fallback = typeof box.text === "string" && box.text !== "" ? box.text : networkText;
|
|
5712
5963
|
const detail = typeof box.error?.detail === "string" ? box.error.detail : void 0;
|
|
5713
5964
|
const helpUrl = typeof box.error?.helpUrl === "string" && box.error.helpUrl !== "" ? box.error.helpUrl : void 0;
|
|
5965
|
+
const failure = installFailureOf(box.error?.failure);
|
|
5714
5966
|
return {
|
|
5715
5967
|
ok: false,
|
|
5716
5968
|
message: own ?? fallback,
|
|
5717
5969
|
...detail === void 0 ? {} : { detail },
|
|
5718
|
-
...helpUrl === void 0 ? {} : { helpUrl }
|
|
5970
|
+
...helpUrl === void 0 ? {} : { helpUrl },
|
|
5971
|
+
...failure === void 0 ? {} : { failure }
|
|
5719
5972
|
};
|
|
5720
5973
|
}
|
|
5721
5974
|
return {
|
|
@@ -5922,137 +6175,138 @@ function useMarketTransient(input) {
|
|
|
5922
6175
|
};
|
|
5923
6176
|
}
|
|
5924
6177
|
var MarketPage_module_default = {
|
|
5925
|
-
marketList: "
|
|
5926
|
-
marketRow: "
|
|
5927
|
-
marketIcon: "
|
|
5928
|
-
marketMain: "
|
|
5929
|
-
marketName: "
|
|
5930
|
-
marketStatus: "
|
|
5931
|
-
marketStateText: "
|
|
5932
|
-
marketSep: "
|
|
5933
|
-
marketReason: "
|
|
5934
|
-
marketVersion: "
|
|
5935
|
-
marketLocalTag: "
|
|
5936
|
-
marketEnd: "
|
|
5937
|
-
marketSwitchSeat: "
|
|
5938
|
-
marketActions: "
|
|
5939
|
-
marketUpdateAction: "
|
|
5940
|
-
marketSelfDivider: "
|
|
5941
|
-
marketSection: "
|
|
5942
|
-
marketSectionHead: "
|
|
5943
|
-
marketSectionIcon: "
|
|
5944
|
-
marketSectionTitle: "
|
|
5945
|
-
marketSectionCount: "
|
|
5946
|
-
marketSectionAction: "
|
|
5947
|
-
marketSectionQuiet: "
|
|
5948
|
-
marketProgress: "
|
|
5949
|
-
marketNote: "
|
|
5950
|
-
marketFailure: "
|
|
5951
|
-
|
|
5952
|
-
|
|
5953
|
-
|
|
5954
|
-
|
|
5955
|
-
|
|
5956
|
-
|
|
5957
|
-
|
|
5958
|
-
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
|
|
5962
|
-
|
|
5963
|
-
|
|
5964
|
-
|
|
5965
|
-
|
|
5966
|
-
|
|
5967
|
-
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
|
|
5971
|
-
|
|
5972
|
-
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
|
-
|
|
5980
|
-
|
|
5981
|
-
|
|
5982
|
-
|
|
5983
|
-
|
|
5984
|
-
|
|
5985
|
-
|
|
5986
|
-
|
|
5987
|
-
|
|
5988
|
-
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
|
|
5993
|
-
|
|
5994
|
-
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
|
|
6006
|
-
|
|
6007
|
-
|
|
6008
|
-
|
|
6009
|
-
|
|
6010
|
-
|
|
6011
|
-
|
|
6012
|
-
|
|
6013
|
-
|
|
6014
|
-
|
|
6015
|
-
|
|
6016
|
-
|
|
6017
|
-
|
|
6018
|
-
|
|
6019
|
-
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6029
|
-
|
|
6030
|
-
|
|
6031
|
-
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
|
|
6041
|
-
|
|
6042
|
-
|
|
6043
|
-
|
|
6044
|
-
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
6049
|
-
|
|
6050
|
-
|
|
6051
|
-
|
|
6052
|
-
|
|
6053
|
-
|
|
6054
|
-
|
|
6055
|
-
|
|
6178
|
+
marketList: "_marketList_1vpw3_1",
|
|
6179
|
+
marketRow: "_marketRow_1vpw3_10",
|
|
6180
|
+
marketIcon: "_marketIcon_1vpw3_20",
|
|
6181
|
+
marketMain: "_marketMain_1vpw3_32",
|
|
6182
|
+
marketName: "_marketName_1vpw3_39",
|
|
6183
|
+
marketStatus: "_marketStatus_1vpw3_48",
|
|
6184
|
+
marketStateText: "_marketStateText_1vpw3_58",
|
|
6185
|
+
marketSep: "_marketSep_1vpw3_62",
|
|
6186
|
+
marketReason: "_marketReason_1vpw3_66",
|
|
6187
|
+
marketVersion: "_marketVersion_1vpw3_72",
|
|
6188
|
+
marketLocalTag: "_marketLocalTag_1vpw3_94",
|
|
6189
|
+
marketEnd: "_marketEnd_1vpw3_105",
|
|
6190
|
+
marketSwitchSeat: "_marketSwitchSeat_1vpw3_112",
|
|
6191
|
+
marketActions: "_marketActions_1vpw3_125",
|
|
6192
|
+
marketUpdateAction: "_marketUpdateAction_1vpw3_131",
|
|
6193
|
+
marketSelfDivider: "_marketSelfDivider_1vpw3_137",
|
|
6194
|
+
marketSection: "_marketSection_1vpw3_143",
|
|
6195
|
+
marketSectionHead: "_marketSectionHead_1vpw3_150",
|
|
6196
|
+
marketSectionIcon: "_marketSectionIcon_1vpw3_156",
|
|
6197
|
+
marketSectionTitle: "_marketSectionTitle_1vpw3_163",
|
|
6198
|
+
marketSectionCount: "_marketSectionCount_1vpw3_169",
|
|
6199
|
+
marketSectionAction: "_marketSectionAction_1vpw3_175",
|
|
6200
|
+
marketSectionQuiet: "_marketSectionQuiet_1vpw3_183",
|
|
6201
|
+
marketProgress: "_marketProgress_1vpw3_195",
|
|
6202
|
+
marketNote: "_marketNote_1vpw3_205",
|
|
6203
|
+
marketFailure: "_marketFailure_1vpw3_212",
|
|
6204
|
+
marketFailureSeat: "_marketFailureSeat_1vpw3_219",
|
|
6205
|
+
marketEmpty: "_marketEmpty_1vpw3_224",
|
|
6206
|
+
marketPage: "_marketPage_1vpw3_229",
|
|
6207
|
+
marketPageHead: "_marketPageHead_1vpw3_247",
|
|
6208
|
+
marketPageTitle: "_marketPageTitle_1vpw3_255",
|
|
6209
|
+
marketPageIntro: "_marketPageIntro_1vpw3_260",
|
|
6210
|
+
marketPageTools: "_marketPageTools_1vpw3_266",
|
|
6211
|
+
marketPanel: "_marketPanel_1vpw3_275",
|
|
6212
|
+
marketTabs: "_marketTabs_1vpw3_285",
|
|
6213
|
+
marketTabList: "_marketTabList_1vpw3_290",
|
|
6214
|
+
marketAddButton: "_marketAddButton_1vpw3_295",
|
|
6215
|
+
marketEmptyTitle: "_marketEmptyTitle_1vpw3_312",
|
|
6216
|
+
discoverPage: "_discoverPage_1vpw3_317",
|
|
6217
|
+
discoverBar: "_discoverBar_1vpw3_324",
|
|
6218
|
+
discoverTools: "_discoverTools_1vpw3_331",
|
|
6219
|
+
discoverMarket: "_discoverMarket_1vpw3_337",
|
|
6220
|
+
discoverMarketButton: "_discoverMarketButton_1vpw3_342",
|
|
6221
|
+
discoverMarketName: "_discoverMarketName_1vpw3_349",
|
|
6222
|
+
discoverLabels: "_discoverLabels_1vpw3_355",
|
|
6223
|
+
discoverSort: "_discoverSort_1vpw3_360",
|
|
6224
|
+
discoverRefresh: "_discoverRefresh_1vpw3_365",
|
|
6225
|
+
discoverSearch: "_discoverSearch_1vpw3_369",
|
|
6226
|
+
discoverSearchField: "_discoverSearchField_1vpw3_377",
|
|
6227
|
+
discoverSearchFieldFilled: "_discoverSearchFieldFilled_1vpw3_382",
|
|
6228
|
+
discoverSearchClear: "_discoverSearchClear_1vpw3_391",
|
|
6229
|
+
discoverChips: "_discoverChips_1vpw3_442",
|
|
6230
|
+
discoverList: "_discoverList_1vpw3_449",
|
|
6231
|
+
discoverCard: "_discoverCard_1vpw3_458",
|
|
6232
|
+
discoverArtwork: "_discoverArtwork_1vpw3_472",
|
|
6233
|
+
discoverArtworkImage: "_discoverArtworkImage_1vpw3_484",
|
|
6234
|
+
discoverMain: "_discoverMain_1vpw3_488",
|
|
6235
|
+
discoverTitleRow: "_discoverTitleRow_1vpw3_496",
|
|
6236
|
+
discoverCardOpen: "_discoverCardOpen_1vpw3_504",
|
|
6237
|
+
discoverStrong: "_discoverStrong_1vpw3_535",
|
|
6238
|
+
discoverDesc: "_discoverDesc_1vpw3_541",
|
|
6239
|
+
discoverMeta: "_discoverMeta_1vpw3_550",
|
|
6240
|
+
discoverMuted: "_discoverMuted_1vpw3_557",
|
|
6241
|
+
discoverEnd: "_discoverEnd_1vpw3_563",
|
|
6242
|
+
discoverUpdateAction: "_discoverUpdateAction_1vpw3_572",
|
|
6243
|
+
discoverBlocked: "_discoverBlocked_1vpw3_577",
|
|
6244
|
+
discoverEmpty: "_discoverEmpty_1vpw3_582",
|
|
6245
|
+
discoverEmptyTitle: "_discoverEmptyTitle_1vpw3_591",
|
|
6246
|
+
discoverDetail: "_discoverDetail_1vpw3_601",
|
|
6247
|
+
discoverCrumb: "_discoverCrumb_1vpw3_607",
|
|
6248
|
+
discoverCrumbIcon: "_discoverCrumbIcon_1vpw3_630",
|
|
6249
|
+
discoverDetailHead: "_discoverDetailHead_1vpw3_634",
|
|
6250
|
+
discoverDetailTitle: "_discoverDetailTitle_1vpw3_640",
|
|
6251
|
+
discoverDetailText: "_discoverDetailText_1vpw3_646",
|
|
6252
|
+
discoverDetailPanel: "_discoverDetailPanel_1vpw3_653",
|
|
6253
|
+
discoverDetailTabs: "_discoverDetailTabs_1vpw3_660",
|
|
6254
|
+
discoverDetailTabList: "_discoverDetailTabList_1vpw3_665",
|
|
6255
|
+
discoverDocBody: "_discoverDocBody_1vpw3_670",
|
|
6256
|
+
discoverDocNotice: "_discoverDocNotice_1vpw3_675",
|
|
6257
|
+
discoverSection: "_discoverSection_1vpw3_681",
|
|
6258
|
+
discoverSectionTitle: "_discoverSectionTitle_1vpw3_688",
|
|
6259
|
+
discoverFacts: "_discoverFacts_1vpw3_694",
|
|
6260
|
+
discoverFactRow: "_discoverFactRow_1vpw3_699",
|
|
6261
|
+
discoverFactKind: "_discoverFactKind_1vpw3_709",
|
|
6262
|
+
discoverFactValue: "_discoverFactValue_1vpw3_715",
|
|
6263
|
+
discoverCode: "_discoverCode_1vpw3_723",
|
|
6264
|
+
discoverTags: "_discoverTags_1vpw3_732",
|
|
6265
|
+
discoverLink: "_discoverLink_1vpw3_739",
|
|
6266
|
+
discoverVersions: "_discoverVersions_1vpw3_749",
|
|
6267
|
+
discoverVersionRow: "_discoverVersionRow_1vpw3_757",
|
|
6268
|
+
discoverVersionName: "_discoverVersionName_1vpw3_765",
|
|
6269
|
+
discoverError: "_discoverError_1vpw3_770",
|
|
6270
|
+
discoverFailure: "_discoverFailure_1vpw3_779",
|
|
6271
|
+
discoverLoading: "_discoverLoading_1vpw3_785",
|
|
6272
|
+
discoverNotice: "_discoverNotice_1vpw3_794",
|
|
6273
|
+
discoverMore: "_discoverMore_1vpw3_812",
|
|
6274
|
+
discoverTransport: "_discoverTransport_1vpw3_816",
|
|
6275
|
+
discoverTransportHead: "_discoverTransportHead_1vpw3_822",
|
|
6276
|
+
discoverTransportTitle: "_discoverTransportTitle_1vpw3_829",
|
|
6277
|
+
discoverTransportKind: "_discoverTransportKind_1vpw3_834",
|
|
6278
|
+
discoverTransportState: "_discoverTransportState_1vpw3_839",
|
|
6279
|
+
discoverTransportRows: "_discoverTransportRows_1vpw3_847",
|
|
6280
|
+
discoverTransportRow: "_discoverTransportRow_1vpw3_847",
|
|
6281
|
+
discoverTransportRadio: "_discoverTransportRadio_1vpw3_868",
|
|
6282
|
+
discoverTransportCustom: "_discoverTransportCustom_1vpw3_908",
|
|
6283
|
+
discoverTransportInput: "_discoverTransportInput_1vpw3_914",
|
|
6284
|
+
discoverInstallBar: "_discoverInstallBar_1vpw3_919",
|
|
6285
|
+
discoverInstallText: "_discoverInstallText_1vpw3_930",
|
|
6286
|
+
discoverDialog: "_discoverDialog_1vpw3_936",
|
|
6287
|
+
discoverDialogBody: "_discoverDialogBody_1vpw3_940",
|
|
6288
|
+
discoverSourceList: "_discoverSourceList_1vpw3_946",
|
|
6289
|
+
discoverSourceRow: "_discoverSourceRow_1vpw3_954",
|
|
6290
|
+
discoverSourceConfirm: "_discoverSourceConfirm_1vpw3_963",
|
|
6291
|
+
discoverSourcePick: "_discoverSourcePick_1vpw3_969",
|
|
6292
|
+
discoverSourceRadio: "_discoverSourceRadio_1vpw3_978",
|
|
6293
|
+
discoverSourceMain: "_discoverSourceMain_1vpw3_986",
|
|
6294
|
+
discoverSourceHead: "_discoverSourceHead_1vpw3_994",
|
|
6295
|
+
discoverSourceUrl: "_discoverSourceUrl_1vpw3_1002",
|
|
6296
|
+
discoverSourceMore: "_discoverSourceMore_1vpw3_1012",
|
|
6297
|
+
discoverSourceLoading: "_discoverSourceLoading_1vpw3_1016",
|
|
6298
|
+
discoverSourceHint: "_discoverSourceHint_1vpw3_1026",
|
|
6299
|
+
discoverSourceError: "_discoverSourceError_1vpw3_1040",
|
|
6300
|
+
discoverSourceForm: "_discoverSourceForm_1vpw3_1046",
|
|
6301
|
+
discoverGrow: "_discoverGrow_1vpw3_1052",
|
|
6302
|
+
discoverField: "_discoverField_1vpw3_1057",
|
|
6303
|
+
discoverFieldLabel: "_discoverFieldLabel_1vpw3_1063",
|
|
6304
|
+
discoverConfirmHead: "_discoverConfirmHead_1vpw3_1068",
|
|
6305
|
+
discoverSkeletonFill: "_discoverSkeletonFill_1vpw3_1074",
|
|
6306
|
+
"wb-skeleton": "_wb-skeleton_1vpw3_1",
|
|
6307
|
+
discoverSkeletonBar: "_discoverSkeletonBar_1vpw3_1083",
|
|
6308
|
+
discoverSkeletonTitle: "_discoverSkeletonTitle_1vpw3_1090",
|
|
6309
|
+
discoverSkeletonDesc: "_discoverSkeletonDesc_1vpw3_1094"
|
|
6056
6310
|
};
|
|
6057
6311
|
//#endregion
|
|
6058
6312
|
//#region src/app/layouts/market/discover-states.tsx
|
|
@@ -6132,6 +6386,167 @@ function MarketChecking({ t }) {
|
|
|
6132
6386
|
function MarketEmpty({ t }) {
|
|
6133
6387
|
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")));
|
|
6134
6388
|
}
|
|
6389
|
+
var FailureCard_module_default = {
|
|
6390
|
+
block: "_block_mxnbc_1",
|
|
6391
|
+
head: "_head_mxnbc_9",
|
|
6392
|
+
title: "_title_mxnbc_16",
|
|
6393
|
+
fact: "_fact_mxnbc_22",
|
|
6394
|
+
actions: "_actions_mxnbc_30",
|
|
6395
|
+
hint: "_hint_mxnbc_38",
|
|
6396
|
+
output: "_output_mxnbc_44"
|
|
6397
|
+
};
|
|
6398
|
+
//#endregion
|
|
6399
|
+
//#region src/app/layouts/rightbar/FailureCard.tsx
|
|
6400
|
+
var COPIED_MS$1 = 1200;
|
|
6401
|
+
function terminalLabels(t) {
|
|
6402
|
+
return {
|
|
6403
|
+
commandLine: (line) => t("panels.market.failure.term.commandLine", { line }),
|
|
6404
|
+
signal: (signal) => t("panels.market.failure.term.signal", { signal }),
|
|
6405
|
+
exitCode: (exitCode) => t("panels.market.failure.term.exitCode", { exitCode }),
|
|
6406
|
+
noExitCode: t("panels.market.failure.term.noExitCode"),
|
|
6407
|
+
running: t("panels.market.failure.term.running"),
|
|
6408
|
+
failed: t("panels.market.failure.term.failed"),
|
|
6409
|
+
done: t("panels.market.failure.term.done"),
|
|
6410
|
+
copy: t("panels.market.failure.term.copy"),
|
|
6411
|
+
copied: t("panels.market.failure.term.copied"),
|
|
6412
|
+
noOutput: t("panels.market.failure.term.noOutput"),
|
|
6413
|
+
collapseAria: t("panels.market.failure.term.collapse"),
|
|
6414
|
+
collapse: t("panels.market.failure.term.collapse"),
|
|
6415
|
+
expandAria: (hidden) => t("panels.market.failure.term.expandAria", { hidden }),
|
|
6416
|
+
expand: (hidden) => t("panels.market.failure.term.expand", { hidden })
|
|
6417
|
+
};
|
|
6418
|
+
}
|
|
6419
|
+
function FailureCard({ t, model, onRecheck, rechecking }) {
|
|
6420
|
+
const hasOutput = model.command !== "" || model.output !== "";
|
|
6421
|
+
const [copied, setCopied] = (0, react.useState)(false);
|
|
6422
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
6423
|
+
const onCopy = (0, react.useCallback)(() => {
|
|
6424
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(model.fix).then((ok) => {
|
|
6425
|
+
if (!ok) return;
|
|
6426
|
+
setCopied(true);
|
|
6427
|
+
setTimeout(() => setCopied(false), COPIED_MS$1);
|
|
6428
|
+
});
|
|
6429
|
+
}, [model.fix]);
|
|
6430
|
+
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, {
|
|
6431
|
+
state: "error",
|
|
6432
|
+
size: 8
|
|
6433
|
+
}), /* @__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, {
|
|
6434
|
+
type: "button",
|
|
6435
|
+
size: "sm",
|
|
6436
|
+
variant: "ghost",
|
|
6437
|
+
onClick: onCopy
|
|
6438
|
+
}, copied ? t("panels.market.failure.copied") : model.fixLabel), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
6439
|
+
type: "button",
|
|
6440
|
+
size: "sm",
|
|
6441
|
+
variant: "ghost",
|
|
6442
|
+
disabled: rechecking,
|
|
6443
|
+
onClick: onRecheck
|
|
6444
|
+
}, t("panels.market.failure.recheck")), hasOutput ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
6445
|
+
type: "button",
|
|
6446
|
+
size: "sm",
|
|
6447
|
+
variant: "ghost",
|
|
6448
|
+
onClick: () => setOpen(!open)
|
|
6449
|
+
}, open ? t("panels.market.failure.hideOutput") : t("panels.market.failure.showOutput")) : null), copied ? /* @__PURE__ */ (0, react.createElement)("p", { className: FailureCard_module_default.hint }, model.copiedHint) : null, open && hasOutput ? /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.TerminalBlock, {
|
|
6450
|
+
command: model.command,
|
|
6451
|
+
output: model.output,
|
|
6452
|
+
exitCode: model.exitCode,
|
|
6453
|
+
maxLines: 8,
|
|
6454
|
+
labels: terminalLabels(t),
|
|
6455
|
+
className: FailureCard_module_default.output
|
|
6456
|
+
}) : null);
|
|
6457
|
+
}
|
|
6458
|
+
//#endregion
|
|
6459
|
+
//#region src/app/layouts/rightbar/failure-card-text.ts
|
|
6460
|
+
var TITLE_KEY = {
|
|
6461
|
+
permission: "panels.market.failure.permission",
|
|
6462
|
+
"disk-full": "panels.market.failure.diskFull",
|
|
6463
|
+
sandbox: "panels.market.failure.sandbox",
|
|
6464
|
+
unknown: "panels.market.failure.unknown"
|
|
6465
|
+
};
|
|
6466
|
+
var ASK_AGENT_KEY = "panels.market.failure.askAgent";
|
|
6467
|
+
function updateStuckCardOf(t, input) {
|
|
6468
|
+
const unknown = t("panels.market.updateUnknownVersion");
|
|
6469
|
+
return {
|
|
6470
|
+
title: t("panels.market.updateStuck.title"),
|
|
6471
|
+
fact: input.fact ?? t("panels.market.updateStuck.factNoChange", {
|
|
6472
|
+
from: input.from ?? unknown,
|
|
6473
|
+
latest: input.latest ?? unknown
|
|
6474
|
+
}),
|
|
6475
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6476
|
+
fix: input.command,
|
|
6477
|
+
copiedHint: t("panels.market.updateStuck.copiedHint"),
|
|
6478
|
+
command: "",
|
|
6479
|
+
output: "",
|
|
6480
|
+
exitCode: null
|
|
6481
|
+
};
|
|
6482
|
+
}
|
|
6483
|
+
function shellPath(path) {
|
|
6484
|
+
return /^[\w./@%+-]+$/.test(path) ? path : `'${path.replaceAll("'", "'\\''")}'`;
|
|
6485
|
+
}
|
|
6486
|
+
function ownerLabel(uid) {
|
|
6487
|
+
return uid === 0 ? "root" : `uid ${uid}`;
|
|
6488
|
+
}
|
|
6489
|
+
function failureCardOf(failure, t) {
|
|
6490
|
+
const path = failure.path ?? "";
|
|
6491
|
+
const fix = failure.fix;
|
|
6492
|
+
if (fix.kind === "chown") {
|
|
6493
|
+
const ownerUid = failure.owner?.uid;
|
|
6494
|
+
return {
|
|
6495
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6496
|
+
fact: ownerUid === void 0 ? t("panels.market.failure.factMode", {
|
|
6497
|
+
path,
|
|
6498
|
+
mode: failure.mode ?? "?"
|
|
6499
|
+
}) : t("panels.market.failure.factOwner", {
|
|
6500
|
+
path,
|
|
6501
|
+
owner: ownerLabel(ownerUid),
|
|
6502
|
+
me: ownerLabel(failure.current.uid)
|
|
6503
|
+
}),
|
|
6504
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6505
|
+
fix: `sudo chown -R ${fix.uid}:${fix.gid} ${shellPath(fix.path)}`,
|
|
6506
|
+
copiedHint: t("panels.market.failure.copiedHint"),
|
|
6507
|
+
command: failure.command,
|
|
6508
|
+
output: failure.output,
|
|
6509
|
+
exitCode: failure.exitCode
|
|
6510
|
+
};
|
|
6511
|
+
}
|
|
6512
|
+
if (fix.kind === "chmod") return {
|
|
6513
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6514
|
+
fact: t("panels.market.failure.factMode", {
|
|
6515
|
+
path,
|
|
6516
|
+
mode: failure.mode ?? "?"
|
|
6517
|
+
}),
|
|
6518
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6519
|
+
fix: `chmod -R u+w ${shellPath(fix.path)}`,
|
|
6520
|
+
copiedHint: t("panels.market.failure.copiedHint"),
|
|
6521
|
+
command: failure.command,
|
|
6522
|
+
output: failure.output,
|
|
6523
|
+
exitCode: failure.exitCode
|
|
6524
|
+
};
|
|
6525
|
+
if (fix.kind === "space") return {
|
|
6526
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6527
|
+
fact: t("panels.market.failure.factSpace", { path }),
|
|
6528
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6529
|
+
fix: `du -sh ${shellPath(fix.path)}`,
|
|
6530
|
+
copiedHint: t("panels.market.failure.copiedHint"),
|
|
6531
|
+
command: failure.command,
|
|
6532
|
+
output: failure.output,
|
|
6533
|
+
exitCode: failure.exitCode
|
|
6534
|
+
};
|
|
6535
|
+
return {
|
|
6536
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6537
|
+
fact: t("panels.market.failure.factStuck", { path: path === "" ? t("panels.market.failure.nowhere") : path }),
|
|
6538
|
+
fixLabel: t(ASK_AGENT_KEY),
|
|
6539
|
+
fix: t("panels.market.failure.askAgentText", {
|
|
6540
|
+
command: failure.command,
|
|
6541
|
+
path: path === "" ? t("panels.market.failure.nowhere") : path,
|
|
6542
|
+
code: failure.exitCode === null ? "?" : String(failure.exitCode)
|
|
6543
|
+
}),
|
|
6544
|
+
copiedHint: t("panels.market.failure.askAgentHint"),
|
|
6545
|
+
command: failure.command,
|
|
6546
|
+
output: failure.output,
|
|
6547
|
+
exitCode: failure.exitCode
|
|
6548
|
+
};
|
|
6549
|
+
}
|
|
6135
6550
|
//#endregion
|
|
6136
6551
|
//#region src/app/layouts/rightbar/market-section-icon.ts
|
|
6137
6552
|
var SIZE$1 = 14;
|
|
@@ -6302,9 +6717,21 @@ function pendingRowOf(input) {
|
|
|
6302
6717
|
...pending.version === void 0 ? {} : { version: { installed: pending.version } }
|
|
6303
6718
|
};
|
|
6304
6719
|
}
|
|
6720
|
+
function askAgentReason(row, t) {
|
|
6721
|
+
if (row.hint !== void 0) return t(row.hint);
|
|
6722
|
+
if (row.note !== void 0) return t(row.note.key, row.note.params);
|
|
6723
|
+
return t(MARKET_STATE_KEY[row.state]);
|
|
6724
|
+
}
|
|
6725
|
+
function askAgentText(row, t) {
|
|
6726
|
+
return t("panels.market.askAgentText", {
|
|
6727
|
+
name: marketRowTitle(row, t),
|
|
6728
|
+
unit: row.id,
|
|
6729
|
+
reason: askAgentReason(row, t)
|
|
6730
|
+
});
|
|
6731
|
+
}
|
|
6305
6732
|
//#endregion
|
|
6306
6733
|
//#region src/app/layouts/rightbar/SharedSection.tsx
|
|
6307
|
-
function SharedLine({ t, row, pending, failure, onAct }) {
|
|
6734
|
+
function SharedLine({ t, row, pending, failure, onAct, onRecheck, rechecking }) {
|
|
6308
6735
|
const running = pending !== null && pending.id === row.id ? pending : null;
|
|
6309
6736
|
const locked = pending !== null;
|
|
6310
6737
|
const actions = sharedActions(row);
|
|
@@ -6327,9 +6754,14 @@ function SharedLine({ t, row, pending, failure, onAct }) {
|
|
|
6327
6754
|
variant: "outline",
|
|
6328
6755
|
disabled: locked,
|
|
6329
6756
|
onClick: () => onAct(action)
|
|
6330
|
-
}, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure))
|
|
6757
|
+
}, 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, {
|
|
6758
|
+
t,
|
|
6759
|
+
model: failureCardOf(failure.failure, t),
|
|
6760
|
+
onRecheck,
|
|
6761
|
+
rechecking
|
|
6762
|
+
})));
|
|
6331
6763
|
}
|
|
6332
|
-
function SharedSection({ t, rows, pending, failureOf, act }) {
|
|
6764
|
+
function SharedSection({ t, rows, pending, failureOf, act, onRecheck, rechecking }) {
|
|
6333
6765
|
if (rows.length === 0) return null;
|
|
6334
6766
|
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", {
|
|
6335
6767
|
className: MarketPage_module_default.marketSectionIcon,
|
|
@@ -6340,7 +6772,9 @@ function SharedSection({ t, rows, pending, failureOf, act }) {
|
|
|
6340
6772
|
row,
|
|
6341
6773
|
pending,
|
|
6342
6774
|
failure: failureOf(row.id),
|
|
6343
|
-
onAct: (action) => void act(row.id, action)
|
|
6775
|
+
onAct: (action) => void act(row.id, action),
|
|
6776
|
+
onRecheck,
|
|
6777
|
+
rechecking
|
|
6344
6778
|
}))));
|
|
6345
6779
|
}
|
|
6346
6780
|
//#endregion
|
|
@@ -6363,6 +6797,25 @@ function Tip({ side = "bottom", align = "end", gap = 6, portal = true, ...rest }
|
|
|
6363
6797
|
});
|
|
6364
6798
|
}
|
|
6365
6799
|
//#endregion
|
|
6800
|
+
//#region src/app/layouts/rightbar/AskAgentButton.tsx
|
|
6801
|
+
var COPIED_MS = 1200;
|
|
6802
|
+
function AskAgentButton({ t, text, label }) {
|
|
6803
|
+
const [copied, setCopied] = (0, react.useState)(false);
|
|
6804
|
+
const onCopy = (0, react.useCallback)(() => {
|
|
6805
|
+
(0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(text).then((ok) => {
|
|
6806
|
+
if (!ok) return;
|
|
6807
|
+
setCopied(true);
|
|
6808
|
+
setTimeout(() => setCopied(false), COPIED_MS);
|
|
6809
|
+
});
|
|
6810
|
+
}, [text]);
|
|
6811
|
+
return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
6812
|
+
type: "button",
|
|
6813
|
+
size: "sm",
|
|
6814
|
+
variant: "ghost",
|
|
6815
|
+
onClick: onCopy
|
|
6816
|
+
}, copied ? t("panels.market.askAgentCopied") : label);
|
|
6817
|
+
}
|
|
6818
|
+
//#endregion
|
|
6366
6819
|
//#region src/app/layouts/rightbar/market-section.tsx
|
|
6367
6820
|
var dangerActions = [
|
|
6368
6821
|
"uninstall",
|
|
@@ -6433,13 +6886,25 @@ function MarketLineStatus({ t, row, quiet }) {
|
|
|
6433
6886
|
"aria-hidden": "true"
|
|
6434
6887
|
}, "·"), /* @__PURE__ */ (0, react.createElement)("span", { className: MarketPage_module_default.marketReason }, noteText)));
|
|
6435
6888
|
}
|
|
6436
|
-
function
|
|
6889
|
+
function MarketFailureBlock({ t, failure, onRecheck, rechecking }) {
|
|
6890
|
+
if (failure === null) return null;
|
|
6891
|
+
const model = failure.card ?? (failure.failure === void 0 ? void 0 : failureCardOf(failure.failure, t));
|
|
6892
|
+
if (model !== void 0) return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ (0, react.createElement)(FailureCard, {
|
|
6893
|
+
t,
|
|
6894
|
+
model,
|
|
6895
|
+
onRecheck,
|
|
6896
|
+
rechecking
|
|
6897
|
+
}));
|
|
6898
|
+
return /* @__PURE__ */ (0, react.createElement)("div", { className: MarketPage_module_default.marketFailure }, failure.message);
|
|
6899
|
+
}
|
|
6900
|
+
function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy, onRecheck, rechecking }) {
|
|
6437
6901
|
const running = pending !== null && pending.id === row.id ? pending : null;
|
|
6438
6902
|
const locked = pending !== null;
|
|
6439
6903
|
const [migrationOpen, setMigrationOpen] = (0, react.useState)(false);
|
|
6440
6904
|
const [dismissOpen, setDismissOpen] = (0, react.useState)(false);
|
|
6441
6905
|
const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
|
|
6442
6906
|
const actions = marketActions$1(row);
|
|
6907
|
+
const asksAgent = marketAsksAgent(row);
|
|
6443
6908
|
const switchLocked = marketSwitchLocked(row);
|
|
6444
6909
|
return /* @__PURE__ */ (0, react.createElement)("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ (0, react.createElement)("span", {
|
|
6445
6910
|
className: MarketPage_module_default.marketIcon,
|
|
@@ -6451,7 +6916,11 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
|
6451
6916
|
t,
|
|
6452
6917
|
row,
|
|
6453
6918
|
quiet
|
|
6454
|
-
})), /* @__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 },
|
|
6919
|
+
})), /* @__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, {
|
|
6920
|
+
t,
|
|
6921
|
+
text: askAgentText(row, t),
|
|
6922
|
+
label: t("panels.market.askAgent")
|
|
6923
|
+
}) : null, actions.map((action) => {
|
|
6455
6924
|
const danger = dangerActions.includes(action);
|
|
6456
6925
|
const update = updateActions.includes(action);
|
|
6457
6926
|
return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
@@ -6474,7 +6943,12 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
|
6474
6943
|
disabled: boardBusy === true || locked || switchLocked,
|
|
6475
6944
|
label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
|
|
6476
6945
|
onChange: (next) => onDefault?.(next)
|
|
6477
|
-
})))),
|
|
6946
|
+
})))), /* @__PURE__ */ (0, react.createElement)(MarketFailureBlock, {
|
|
6947
|
+
t,
|
|
6948
|
+
failure,
|
|
6949
|
+
onRecheck,
|
|
6950
|
+
rechecking
|
|
6951
|
+
}), /* @__PURE__ */ (0, react.createElement)(MarketLineDialogs, {
|
|
6478
6952
|
t,
|
|
6479
6953
|
migrationOpen,
|
|
6480
6954
|
dismissOpen,
|
|
@@ -6490,7 +6964,7 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
|
6490
6964
|
}
|
|
6491
6965
|
}));
|
|
6492
6966
|
}
|
|
6493
|
-
function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead }) {
|
|
6967
|
+
function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead, onRecheck, rechecking }) {
|
|
6494
6968
|
if (rows.length === 0 && keepHead !== true) return null;
|
|
6495
6969
|
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", {
|
|
6496
6970
|
className: MarketPage_module_default.marketSectionIcon,
|
|
@@ -6503,7 +6977,9 @@ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confi
|
|
|
6503
6977
|
failure: failureOf(row.id),
|
|
6504
6978
|
onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
|
|
6505
6979
|
onDefault: (next) => onDefault?.(row.id, next),
|
|
6506
|
-
boardBusy
|
|
6980
|
+
boardBusy,
|
|
6981
|
+
onRecheck,
|
|
6982
|
+
rechecking
|
|
6507
6983
|
}))));
|
|
6508
6984
|
}
|
|
6509
6985
|
//#endregion
|
|
@@ -6679,9 +7155,10 @@ var FAILURE_KEYS = {
|
|
|
6679
7155
|
"incompatible-version": "panels.market.add.failureGeneric",
|
|
6680
7156
|
"not-bundle": "panels.market.add.failureGeneric",
|
|
6681
7157
|
"invalid-spec": "panels.market.add.failureGeneric",
|
|
6682
|
-
"bundle-in-use": "panels.market.add.
|
|
7158
|
+
"bundle-in-use": "panels.market.add.failureStopProfile",
|
|
6683
7159
|
"not-removable": "panels.market.add.failureGeneric",
|
|
6684
|
-
"stop-profile": "panels.market.add.
|
|
7160
|
+
"stop-profile": "panels.market.add.failureStopProfile",
|
|
7161
|
+
cancelled: "panels.market.add.failureCancelled",
|
|
6685
7162
|
"stale-approval": "panels.market.add.failureGeneric"
|
|
6686
7163
|
};
|
|
6687
7164
|
function needsCredentials(change) {
|
|
@@ -6736,6 +7213,14 @@ function changeFailure(change, t) {
|
|
|
6736
7213
|
if (change === void 0 || SHIPPED$1.includes(change.application)) return void 0;
|
|
6737
7214
|
return failureReason(failureCode(change), change.application, t);
|
|
6738
7215
|
}
|
|
7216
|
+
function appliedUnitsOf(value) {
|
|
7217
|
+
if (changeOf(value)?.application !== "applied") return [];
|
|
7218
|
+
const module = value?.module;
|
|
7219
|
+
if (typeof module !== "object" || module === null) return [];
|
|
7220
|
+
const record = module;
|
|
7221
|
+
if (record.kind !== "module") return [];
|
|
7222
|
+
return typeof record.unit === "string" && record.unit !== "" ? [record.unit] : [];
|
|
7223
|
+
}
|
|
6739
7224
|
//#endregion
|
|
6740
7225
|
//#region src/app/layouts/rightbar/market-update-verdict.ts
|
|
6741
7226
|
function updateVerdictOf(input) {
|
|
@@ -6745,6 +7230,7 @@ function updateVerdictOf(input) {
|
|
|
6745
7230
|
...input.restored === void 0 ? {} : { restored: input.restored }
|
|
6746
7231
|
};
|
|
6747
7232
|
const installed = input.module?.version;
|
|
7233
|
+
if ((input.change?.application === "failed" || input.change?.application === "cancelled") && input.change?.errorCode !== "no-change") return { kind: "failed" };
|
|
6748
7234
|
if (input.change?.errorCode === "no-change") return { kind: "no-change" };
|
|
6749
7235
|
if (installed === void 0) return { kind: "ok" };
|
|
6750
7236
|
if (input.clicked !== void 0 && installed === input.clicked) return { kind: "no-change" };
|
|
@@ -6791,6 +7277,10 @@ function restoredOf(value) {
|
|
|
6791
7277
|
const restored = recordOf(value)?.restored;
|
|
6792
7278
|
return typeof restored === "string" && restored !== "" ? restored : void 0;
|
|
6793
7279
|
}
|
|
7280
|
+
function remedyOf(value) {
|
|
7281
|
+
const command = recordOf(recordOf(value)?.remedy)?.command;
|
|
7282
|
+
return typeof command === "string" && command !== "" ? { command } : void 0;
|
|
7283
|
+
}
|
|
6794
7284
|
function marketActOf(options) {
|
|
6795
7285
|
const { t, mocked, rowOf, seats, send, onChanged } = options;
|
|
6796
7286
|
return async (id, action) => {
|
|
@@ -6850,7 +7340,8 @@ function marketActOf(options) {
|
|
|
6850
7340
|
seats.setHeld(void 0);
|
|
6851
7341
|
seats.setFailed({
|
|
6852
7342
|
id,
|
|
6853
|
-
message: t("panels.market.failed", { reason: outcome.message })
|
|
7343
|
+
message: t("panels.market.failed", { reason: outcome.message }),
|
|
7344
|
+
...outcome.failure === void 0 ? {} : { failure: outcome.failure }
|
|
6854
7345
|
});
|
|
6855
7346
|
return;
|
|
6856
7347
|
}
|
|
@@ -6871,24 +7362,33 @@ function marketActOf(options) {
|
|
|
6871
7362
|
return;
|
|
6872
7363
|
}
|
|
6873
7364
|
const change = changeOf(value);
|
|
6874
|
-
const
|
|
7365
|
+
const remedy = remedyOf(value);
|
|
7366
|
+
const verdict = updateVerdictOf({
|
|
6875
7367
|
action,
|
|
6876
7368
|
change,
|
|
6877
7369
|
module: moduleOf(value),
|
|
6878
7370
|
restored: restoredOf(value),
|
|
6879
7371
|
clicked: next.version,
|
|
6880
7372
|
latest: next.latest
|
|
6881
|
-
})
|
|
7373
|
+
});
|
|
7374
|
+
const failure = updateVerdictText(verdict, t, {
|
|
6882
7375
|
...next.version === void 0 ? {} : { from: next.version },
|
|
6883
7376
|
...next.latest === void 0 ? {} : { latest: next.latest }
|
|
6884
7377
|
});
|
|
7378
|
+
const cardOf = (fact) => remedy === void 0 || verdict.kind !== "no-change" && verdict.kind !== "failed" ? {} : { card: updateStuckCardOf(t, {
|
|
7379
|
+
command: remedy.command,
|
|
7380
|
+
...fact === void 0 ? {} : { fact },
|
|
7381
|
+
...next.version === void 0 ? {} : { from: next.version },
|
|
7382
|
+
...next.latest === void 0 ? {} : { latest: next.latest }
|
|
7383
|
+
}) };
|
|
6885
7384
|
onChanged({ force: true });
|
|
6886
7385
|
if (failure !== void 0) {
|
|
6887
7386
|
seats.setPending(null);
|
|
6888
7387
|
seats.setHeld(void 0);
|
|
6889
7388
|
seats.setFailed({
|
|
6890
7389
|
id,
|
|
6891
|
-
message: failure
|
|
7390
|
+
message: failure,
|
|
7391
|
+
...cardOf()
|
|
6892
7392
|
});
|
|
6893
7393
|
return;
|
|
6894
7394
|
}
|
|
@@ -6903,7 +7403,8 @@ function marketActOf(options) {
|
|
|
6903
7403
|
const reason = changeFailure(change, t);
|
|
6904
7404
|
if (reason !== void 0) seats.setFailed({
|
|
6905
7405
|
id,
|
|
6906
|
-
message: t("panels.market.failed", { reason })
|
|
7406
|
+
message: t("panels.market.failed", { reason }),
|
|
7407
|
+
...cardOf(reason)
|
|
6907
7408
|
});
|
|
6908
7409
|
};
|
|
6909
7410
|
}
|
|
@@ -6981,43 +7482,59 @@ var market_check_module_default = {
|
|
|
6981
7482
|
};
|
|
6982
7483
|
//#endregion
|
|
6983
7484
|
//#region src/app/layouts/market/market-check.tsx
|
|
6984
|
-
function
|
|
6985
|
-
|
|
6986
|
-
return /* @__PURE__ */ (0, react.createElement)("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ (0, react.createElement)("span", {
|
|
6987
|
-
className: market_check_module_default.status,
|
|
6988
|
-
"aria-live": "polite"
|
|
6989
|
-
}, status), /* @__PURE__ */ (0, react.createElement)(Tip, { label: t("panels.market.checkUpdates") }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7485
|
+
function MarketRefreshButton({ label, checking, disabled, onCheck }) {
|
|
7486
|
+
return /* @__PURE__ */ (0, react.createElement)(Tip, { label }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
6990
7487
|
type: "button",
|
|
6991
7488
|
variant: "ghost",
|
|
6992
7489
|
size: "sm",
|
|
6993
7490
|
className: market_check_module_default.button,
|
|
6994
|
-
"aria-label":
|
|
7491
|
+
"aria-label": label,
|
|
6995
7492
|
disabled: disabled || checking,
|
|
6996
7493
|
icon: /* @__PURE__ */ (0, react.createElement)("span", {
|
|
6997
7494
|
className: `${market_check_module_default.icon}${checking ? " wb-spinning" : ""}`,
|
|
6998
7495
|
"aria-hidden": "true"
|
|
6999
7496
|
}, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutlineRegular, { size: 14 })),
|
|
7000
7497
|
onClick: onCheck
|
|
7001
|
-
}))
|
|
7498
|
+
}));
|
|
7499
|
+
}
|
|
7500
|
+
function MarketCheck({ t, checkedAt, latestCheck = {
|
|
7501
|
+
checked: 0,
|
|
7502
|
+
unknown: 0
|
|
7503
|
+
}, checking, failed, disabled, onCheck }) {
|
|
7504
|
+
const parts = [];
|
|
7505
|
+
if (checking) parts.push(t("panels.market.checkingNow"));
|
|
7506
|
+
else {
|
|
7507
|
+
if (latestCheck.checked > 0 && checkedAt !== null) parts.push(t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) }));
|
|
7508
|
+
if (failed) parts.push(t("panels.market.checkFailed"));
|
|
7509
|
+
else if (latestCheck.unknown > 0) parts.push(t("panels.market.latestPartial", { n: String(latestCheck.unknown) }));
|
|
7510
|
+
}
|
|
7511
|
+
const status = parts.length === 0 ? null : parts.join(" · ");
|
|
7512
|
+
return /* @__PURE__ */ (0, react.createElement)("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ (0, react.createElement)("span", {
|
|
7513
|
+
className: market_check_module_default.status,
|
|
7514
|
+
"aria-live": "polite"
|
|
7515
|
+
}, status), /* @__PURE__ */ (0, react.createElement)(MarketRefreshButton, {
|
|
7516
|
+
label: t("panels.market.checkUpdates"),
|
|
7517
|
+
checking,
|
|
7518
|
+
disabled,
|
|
7519
|
+
onCheck
|
|
7520
|
+
}));
|
|
7002
7521
|
}
|
|
7003
|
-
var PanelFoot_module_default = {
|
|
7004
|
-
foot: "_foot_1ud1j_1",
|
|
7005
|
-
footText: "_footText_1ud1j_13",
|
|
7006
|
-
footTextMd: "_footTextMd_1ud1j_18"
|
|
7007
|
-
};
|
|
7008
7522
|
//#endregion
|
|
7009
|
-
//#region src/
|
|
7010
|
-
function
|
|
7011
|
-
|
|
7523
|
+
//#region src/app/layouts/market/section-check.tsx
|
|
7524
|
+
function SectionCheck({ t, part, seat, latest, disabled, onCheck }) {
|
|
7525
|
+
const { busy } = useVisibleBusy(seat.checking, 500);
|
|
7526
|
+
return /* @__PURE__ */ (0, react.createElement)(MarketCheck, {
|
|
7527
|
+
t,
|
|
7528
|
+
checkedAt: seat.checkedAt,
|
|
7529
|
+
latestCheck: latest,
|
|
7530
|
+
checking: busy,
|
|
7531
|
+
failed: seat.failed,
|
|
7532
|
+
disabled,
|
|
7533
|
+
onCheck: () => onCheck?.(part)
|
|
7534
|
+
});
|
|
7012
7535
|
}
|
|
7013
7536
|
//#endregion
|
|
7014
|
-
//#region src/app/layouts/rightbar/
|
|
7015
|
-
var CONFIRM_UNINSTALL = [
|
|
7016
|
-
"uninstall",
|
|
7017
|
-
"remove-bundle",
|
|
7018
|
-
"uninstall-plugin"
|
|
7019
|
-
];
|
|
7020
|
-
var NO_ROWS = [];
|
|
7537
|
+
//#region src/app/layouts/rightbar/market-uninstall.tsx
|
|
7021
7538
|
function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
|
|
7022
7539
|
const [acknowledged, setAcknowledged] = (0, react.useState)(false);
|
|
7023
7540
|
return /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.RiskConfirmation, {
|
|
@@ -7034,8 +7551,47 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
|
|
|
7034
7551
|
onConfirm
|
|
7035
7552
|
});
|
|
7036
7553
|
}
|
|
7037
|
-
function
|
|
7038
|
-
|
|
7554
|
+
function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
|
|
7555
|
+
return /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
|
|
7556
|
+
key: confirming ?? "",
|
|
7557
|
+
t,
|
|
7558
|
+
name: row === void 0 ? null : marketRowTitle(row, t),
|
|
7559
|
+
onCancel: onClose,
|
|
7560
|
+
onConfirm: () => {
|
|
7561
|
+
const id = confirming;
|
|
7562
|
+
onClose();
|
|
7563
|
+
if (id === null) return;
|
|
7564
|
+
const target = rowById.get(id);
|
|
7565
|
+
act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
|
|
7566
|
+
}
|
|
7567
|
+
});
|
|
7568
|
+
}
|
|
7569
|
+
var PanelFoot_module_default = {
|
|
7570
|
+
foot: "_foot_1ud1j_1",
|
|
7571
|
+
footText: "_footText_1ud1j_13",
|
|
7572
|
+
footTextMd: "_footTextMd_1ud1j_18"
|
|
7573
|
+
};
|
|
7574
|
+
//#endregion
|
|
7575
|
+
//#region src/shared/components/PanelFoot.tsx
|
|
7576
|
+
function PanelFoot({ text, size = "sm", children }) {
|
|
7577
|
+
return /* @__PURE__ */ (0, react.createElement)("footer", { className: PanelFoot_module_default.foot }, text === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("span", { className: size === "md" ? PanelFoot_module_default.footTextMd : PanelFoot_module_default.footText }, text), children ?? null);
|
|
7578
|
+
}
|
|
7579
|
+
//#endregion
|
|
7580
|
+
//#region src/app/layouts/rightbar/MarketView.tsx
|
|
7581
|
+
var CONFIRM_UNINSTALL = [
|
|
7582
|
+
"uninstall",
|
|
7583
|
+
"remove-bundle",
|
|
7584
|
+
"uninstall-plugin"
|
|
7585
|
+
];
|
|
7586
|
+
var NO_CHECK = {
|
|
7587
|
+
checking: false,
|
|
7588
|
+
failed: false,
|
|
7589
|
+
checkedAt: null
|
|
7590
|
+
};
|
|
7591
|
+
var NO_ROWS = [];
|
|
7592
|
+
var NO_UNITS$1 = /* @__PURE__ */ new Set();
|
|
7593
|
+
function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, checks, onRecheck, rechecking }) {
|
|
7594
|
+
const failureOf = (id) => failed?.id === id ? failed : null;
|
|
7039
7595
|
const foot = marketFootVisible(shown, installedList);
|
|
7040
7596
|
const sections = marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t)));
|
|
7041
7597
|
const installed = sections.find((section) => section.id === "installed");
|
|
@@ -7049,7 +7605,9 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
|
|
|
7049
7605
|
failureOf,
|
|
7050
7606
|
act,
|
|
7051
7607
|
confirmActions: CONFIRM_UNINSTALL,
|
|
7052
|
-
onConfirming
|
|
7608
|
+
onConfirming,
|
|
7609
|
+
onRecheck,
|
|
7610
|
+
rechecking
|
|
7053
7611
|
}), self === void 0 ? null : /* @__PURE__ */ (0, react.createElement)("div", {
|
|
7054
7612
|
className: MarketPage_module_default.marketSelfDivider,
|
|
7055
7613
|
"aria-hidden": "true"
|
|
@@ -7059,14 +7617,16 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
|
|
|
7059
7617
|
icon: marketSectionIcon("installed"),
|
|
7060
7618
|
rows: installed?.rows ?? NO_ROWS,
|
|
7061
7619
|
keepHead: true,
|
|
7062
|
-
headAction:
|
|
7620
|
+
headAction: checks.modules,
|
|
7063
7621
|
onDefault: setDefault,
|
|
7064
7622
|
boardBusy,
|
|
7065
7623
|
pending,
|
|
7066
7624
|
failureOf,
|
|
7067
7625
|
act,
|
|
7068
7626
|
confirmActions: CONFIRM_UNINSTALL,
|
|
7069
|
-
onConfirming
|
|
7627
|
+
onConfirming,
|
|
7628
|
+
onRecheck,
|
|
7629
|
+
rechecking
|
|
7070
7630
|
}), pendingSection === void 0 ? null : /* @__PURE__ */ (0, react.createElement)(MarketSection, {
|
|
7071
7631
|
t,
|
|
7072
7632
|
titleKey: pendingSection.titleKey,
|
|
@@ -7078,20 +7638,24 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
|
|
|
7078
7638
|
failureOf,
|
|
7079
7639
|
act,
|
|
7080
7640
|
confirmActions: CONFIRM_UNINSTALL,
|
|
7081
|
-
onConfirming
|
|
7641
|
+
onConfirming,
|
|
7642
|
+
onRecheck,
|
|
7643
|
+
rechecking
|
|
7082
7644
|
}), /* @__PURE__ */ (0, react.createElement)(MarketSection, {
|
|
7083
7645
|
t,
|
|
7084
7646
|
titleKey: "panels.market.sectionPlugins",
|
|
7085
7647
|
icon: marketSectionIcon("plugins"),
|
|
7086
7648
|
rows: pluginList,
|
|
7087
|
-
headAction:
|
|
7649
|
+
headAction: checks.plugins,
|
|
7088
7650
|
onDefault: setDefault,
|
|
7089
7651
|
boardBusy,
|
|
7090
7652
|
pending,
|
|
7091
7653
|
failureOf,
|
|
7092
7654
|
act,
|
|
7093
7655
|
confirmActions: CONFIRM_UNINSTALL,
|
|
7094
|
-
onConfirming
|
|
7656
|
+
onConfirming,
|
|
7657
|
+
onRecheck,
|
|
7658
|
+
rechecking
|
|
7095
7659
|
}), foot ? /* @__PURE__ */ (0, react.createElement)(PanelFoot, {
|
|
7096
7660
|
size: "md",
|
|
7097
7661
|
text: t("panels.market.foot")
|
|
@@ -7100,11 +7664,13 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
|
|
|
7100
7664
|
rows: shared,
|
|
7101
7665
|
pending,
|
|
7102
7666
|
failureOf,
|
|
7103
|
-
act
|
|
7667
|
+
act,
|
|
7668
|
+
onRecheck,
|
|
7669
|
+
rechecking
|
|
7104
7670
|
}));
|
|
7105
7671
|
}
|
|
7106
7672
|
function useMarketScene(input) {
|
|
7107
|
-
const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
|
|
7673
|
+
const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, installing, mock, defaults, changed, pending, failed } = input;
|
|
7108
7674
|
const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
|
|
7109
7675
|
const catalog = mock?.manifests ?? manifests;
|
|
7110
7676
|
const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
|
|
@@ -7112,7 +7678,10 @@ function useMarketScene(input) {
|
|
|
7112
7678
|
const source = liveManifests(marketable, effective, installedIdSet(mock === void 0 ? installed : void 0));
|
|
7113
7679
|
const byDefault = new Set(defaults);
|
|
7114
7680
|
const updateMap = mock?.updates ?? updates ?? {};
|
|
7115
|
-
const rows = marketRows(source, effective, updateMap, byDefault, changed)
|
|
7681
|
+
const rows = checkingRows(marketRows(source, effective, updateMap, byDefault, changed), {
|
|
7682
|
+
all: installing,
|
|
7683
|
+
units: settling ?? NO_UNITS$1
|
|
7684
|
+
});
|
|
7116
7685
|
const shared = sharedRows(source, effective);
|
|
7117
7686
|
const removing = removingIdOf(pending, failed);
|
|
7118
7687
|
const steady = useHeldRow(pending, (id) => catalog.some((manifest) => manifest.id === id));
|
|
@@ -7133,7 +7702,27 @@ function useMarketScene(input) {
|
|
|
7133
7702
|
busyId
|
|
7134
7703
|
};
|
|
7135
7704
|
}
|
|
7136
|
-
function
|
|
7705
|
+
function sectionChecksOf(input) {
|
|
7706
|
+
return {
|
|
7707
|
+
modules: /* @__PURE__ */ (0, react.createElement)(SectionCheck, {
|
|
7708
|
+
t: input.t,
|
|
7709
|
+
part: "modules",
|
|
7710
|
+
seat: input.modules ?? NO_CHECK,
|
|
7711
|
+
latest: input.latestModules,
|
|
7712
|
+
disabled: input.disabled,
|
|
7713
|
+
onCheck: input.onCheck
|
|
7714
|
+
}),
|
|
7715
|
+
plugins: /* @__PURE__ */ (0, react.createElement)(SectionCheck, {
|
|
7716
|
+
t: input.t,
|
|
7717
|
+
part: "plugins",
|
|
7718
|
+
seat: input.plugins ?? NO_CHECK,
|
|
7719
|
+
latest: input.latestPlugins,
|
|
7720
|
+
disabled: input.disabled,
|
|
7721
|
+
onCheck: input.onCheck
|
|
7722
|
+
})
|
|
7723
|
+
};
|
|
7724
|
+
}
|
|
7725
|
+
function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, modulesCheck, pluginsCheck, onCheck, installed, installedRead, workbench, selfUpdate, plugins, settling, installing = false, mock, defaults = [], changed = {} }) {
|
|
7137
7726
|
const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
|
|
7138
7727
|
mock,
|
|
7139
7728
|
onPending
|
|
@@ -7147,6 +7736,7 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7147
7736
|
updates,
|
|
7148
7737
|
installed,
|
|
7149
7738
|
settling,
|
|
7739
|
+
installing,
|
|
7150
7740
|
mock,
|
|
7151
7741
|
defaults,
|
|
7152
7742
|
changed,
|
|
@@ -7213,13 +7803,21 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7213
7803
|
const settled = marketSettled(freshness, installedRead);
|
|
7214
7804
|
const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
|
|
7215
7805
|
const { busy: checkingShown } = useVisibleBusy(freshness.checking, 500);
|
|
7216
|
-
const
|
|
7806
|
+
const recheck = () => {
|
|
7807
|
+
setFailed(null);
|
|
7808
|
+
if (mock === void 0) onChanged({ force: true });
|
|
7809
|
+
};
|
|
7810
|
+
const checks = sectionChecksOf({
|
|
7217
7811
|
t,
|
|
7218
|
-
|
|
7219
|
-
|
|
7220
|
-
|
|
7812
|
+
modules: modulesCheck,
|
|
7813
|
+
plugins: pluginsCheck,
|
|
7814
|
+
latestModules: latestCheckSummary(mock?.installed ?? installed),
|
|
7815
|
+
latestPlugins: {
|
|
7816
|
+
checked: checkedPluginCount(mock?.plugins ?? plugins),
|
|
7817
|
+
unknown: 0
|
|
7818
|
+
},
|
|
7221
7819
|
disabled: pending !== null,
|
|
7222
|
-
onCheck:
|
|
7820
|
+
onCheck: mock === void 0 ? onCheck : void 0
|
|
7223
7821
|
});
|
|
7224
7822
|
if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ (0, react.createElement)(MarketChecking, { t });
|
|
7225
7823
|
if (nothing) return /* @__PURE__ */ (0, react.createElement)(MarketEmpty, { t });
|
|
@@ -7237,7 +7835,9 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7237
7835
|
onConfirming: setConfirming,
|
|
7238
7836
|
setDefault,
|
|
7239
7837
|
boardBusy,
|
|
7240
|
-
|
|
7838
|
+
checks,
|
|
7839
|
+
onRecheck: recheck,
|
|
7840
|
+
rechecking: checkingShown
|
|
7241
7841
|
}), /* @__PURE__ */ (0, react.createElement)(UninstallConfirm, {
|
|
7242
7842
|
t,
|
|
7243
7843
|
confirming,
|
|
@@ -7247,21 +7847,6 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7247
7847
|
rowById
|
|
7248
7848
|
}));
|
|
7249
7849
|
}
|
|
7250
|
-
function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
|
|
7251
|
-
return /* @__PURE__ */ (0, react.createElement)(ConfirmUninstall, {
|
|
7252
|
-
key: confirming ?? "",
|
|
7253
|
-
t,
|
|
7254
|
-
name: row === void 0 ? null : marketRowTitle(row, t),
|
|
7255
|
-
onCancel: onClose,
|
|
7256
|
-
onConfirm: () => {
|
|
7257
|
-
const id = confirming;
|
|
7258
|
-
onClose();
|
|
7259
|
-
if (id === null) return;
|
|
7260
|
-
const target = rowById.get(id);
|
|
7261
|
-
act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
|
|
7262
|
-
}
|
|
7263
|
-
});
|
|
7264
|
-
}
|
|
7265
7850
|
//#endregion
|
|
7266
7851
|
//#region ../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/plugin/localizedFormat.js
|
|
7267
7852
|
var require_localizedFormat = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
@@ -8570,6 +9155,8 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8570
9155
|
const [addingSource, setAddingSource] = (0, react.useState)(false);
|
|
8571
9156
|
const [pendingSourceId, setPendingSourceId] = (0, react.useState)(null);
|
|
8572
9157
|
const [knownSources, setKnownSources] = (0, react.useState)(null);
|
|
9158
|
+
const [installToken] = (0, react.useState)(() => `market-install:${globalThis.crypto.randomUUID()}`);
|
|
9159
|
+
usePublishMarketInstalling(installToken, installing !== null);
|
|
8573
9160
|
const loaded = (0, react.useRef)(false);
|
|
8574
9161
|
const loadTicket = (0, react.useRef)(0);
|
|
8575
9162
|
const sourceTicket = (0, react.useRef)(0);
|
|
@@ -8679,7 +9266,7 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8679
9266
|
if (selectedSource === void 0 || selectedSource.kind !== "git") return null;
|
|
8680
9267
|
if (kind !== "git-empty" && kind !== "git-missing-index") return null;
|
|
8681
9268
|
return {
|
|
8682
|
-
path: selectedSource.path ?? "market
|
|
9269
|
+
path: selectedSource.path ?? "market",
|
|
8683
9270
|
empty: kind === "git-empty"
|
|
8684
9271
|
};
|
|
8685
9272
|
}, [payload, selectedSource]);
|
|
@@ -8822,6 +9409,7 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8822
9409
|
...target.registry === void 0 ? {} : { registry: target.registry }
|
|
8823
9410
|
}).then((outcome) => {
|
|
8824
9411
|
if (!outcome.ok) return;
|
|
9412
|
+
publishMarketApplied(appliedUnitsOf(outcome.value));
|
|
8825
9413
|
const verdict = installVerdictOf(outcome.value, t);
|
|
8826
9414
|
if (verdict.kind === "failed") {
|
|
8827
9415
|
provision.fail(verdict.text);
|
|
@@ -9033,7 +9621,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
|
|
|
9033
9621
|
}
|
|
9034
9622
|
//#endregion
|
|
9035
9623
|
//#region src/app/layouts/market/market-header.tsx
|
|
9036
|
-
function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
|
|
9624
|
+
function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd }) {
|
|
9037
9625
|
const tabItems = (0, react.useMemo)(() => [{
|
|
9038
9626
|
value: "installed",
|
|
9039
9627
|
label: t("panels.market.tabInstalled"),
|
|
@@ -9045,14 +9633,19 @@ function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
|
|
|
9045
9633
|
id: `${idPrefix}-tab-discover`,
|
|
9046
9634
|
panelId: `${idPrefix}-panel-discover`
|
|
9047
9635
|
}], [idPrefix, t]);
|
|
9048
|
-
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)(
|
|
9636
|
+
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)(MarketRefreshButton, {
|
|
9637
|
+
label: t("panels.market.checkAll"),
|
|
9638
|
+
checking,
|
|
9639
|
+
disabled: busy,
|
|
9640
|
+
onCheck: onReload
|
|
9641
|
+
}), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
9049
9642
|
variant: "primary",
|
|
9050
9643
|
size: "sm",
|
|
9051
9644
|
className: MarketPage_module_default.marketAddButton,
|
|
9052
9645
|
icon: /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutlineRegular, { size: 13 }),
|
|
9053
9646
|
disabled: busy,
|
|
9054
9647
|
onClick: onAdd
|
|
9055
|
-
}, 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, {
|
|
9648
|
+
}, 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, {
|
|
9056
9649
|
className: MarketPage_module_default.marketTabList,
|
|
9057
9650
|
items: tabItems,
|
|
9058
9651
|
value: tab,
|
|
@@ -9469,21 +10062,35 @@ function readModuleVersions(force = false) {
|
|
|
9469
10062
|
function readInstalledPlugins(force = false) {
|
|
9470
10063
|
return apiGet(INSTALLED_PLUGINS_ROUTE, force ? { force: "1" } : void 0);
|
|
9471
10064
|
}
|
|
10065
|
+
//#endregion
|
|
10066
|
+
//#region src/app/layouts/market/use-module-versions.ts
|
|
10067
|
+
var IDLE$1 = {
|
|
10068
|
+
checking: false,
|
|
10069
|
+
failed: false,
|
|
10070
|
+
checkedAt: null
|
|
10071
|
+
};
|
|
9472
10072
|
var state = {
|
|
9473
10073
|
modules: null,
|
|
9474
10074
|
plugins: null,
|
|
9475
10075
|
workbench: null,
|
|
9476
10076
|
selfUpdate: null,
|
|
9477
10077
|
read: false,
|
|
9478
|
-
|
|
9479
|
-
|
|
9480
|
-
|
|
10078
|
+
allChecking: false,
|
|
10079
|
+
modulesCheck: IDLE$1,
|
|
10080
|
+
pluginsCheck: IDLE$1
|
|
9481
10081
|
};
|
|
9482
10082
|
var listeners$2 = /* @__PURE__ */ new Set();
|
|
9483
|
-
var inFlight =
|
|
9484
|
-
var
|
|
9485
|
-
|
|
10083
|
+
var inFlight = /* @__PURE__ */ new Map();
|
|
10084
|
+
var seq$1 = {
|
|
10085
|
+
modules: 0,
|
|
10086
|
+
plugins: 0
|
|
10087
|
+
};
|
|
10088
|
+
var newestForceSeq = {
|
|
10089
|
+
modules: -1,
|
|
10090
|
+
plugins: -1
|
|
10091
|
+
};
|
|
9486
10092
|
var epoch = 0;
|
|
10093
|
+
var allSeq = 0;
|
|
9487
10094
|
function bumpModuleVersionsEpoch() {
|
|
9488
10095
|
epoch += 1;
|
|
9489
10096
|
}
|
|
@@ -9508,48 +10115,87 @@ function withMarketUpdates(modules, rows) {
|
|
|
9508
10115
|
};
|
|
9509
10116
|
});
|
|
9510
10117
|
}
|
|
10118
|
+
function moduleVersionsCheckedAt(now) {
|
|
10119
|
+
const at = [now.modulesCheck.checkedAt, now.pluginsCheck.checkedAt].filter((one) => one !== null);
|
|
10120
|
+
return at.length === 0 ? null : Math.max(...at);
|
|
10121
|
+
}
|
|
10122
|
+
function moduleVersionsChecking(value) {
|
|
10123
|
+
return value.allChecking || value.modulesCheck.checking || value.pluginsCheck.checking;
|
|
10124
|
+
}
|
|
9511
10125
|
function publish$1(next) {
|
|
9512
10126
|
state = next;
|
|
9513
10127
|
for (const listener of [...listeners$2]) listener();
|
|
9514
10128
|
}
|
|
9515
|
-
function
|
|
9516
|
-
|
|
9517
|
-
|
|
9518
|
-
|
|
9519
|
-
|
|
9520
|
-
|
|
9521
|
-
...state,
|
|
10129
|
+
function partsOf(scope) {
|
|
10130
|
+
return scope === "all" ? ["modules", "plugins"] : [scope];
|
|
10131
|
+
}
|
|
10132
|
+
function checking(scope) {
|
|
10133
|
+
const mark = (seat) => seat.checking ? seat : {
|
|
10134
|
+
...seat,
|
|
9522
10135
|
checking: true
|
|
9523
|
-
}
|
|
9524
|
-
|
|
9525
|
-
|
|
9526
|
-
|
|
9527
|
-
|
|
9528
|
-
|
|
10136
|
+
};
|
|
10137
|
+
return {
|
|
10138
|
+
...state,
|
|
10139
|
+
allChecking: scope === "all" || state.allChecking,
|
|
10140
|
+
modulesCheck: scope === "plugins" ? state.modulesCheck : mark(state.modulesCheck),
|
|
10141
|
+
pluginsCheck: scope === "modules" ? state.pluginsCheck : mark(state.pluginsCheck)
|
|
10142
|
+
};
|
|
10143
|
+
}
|
|
10144
|
+
function landed(seat, ticket, latest, ok, at) {
|
|
10145
|
+
return {
|
|
10146
|
+
checking: ticket === latest ? false : seat.checking,
|
|
10147
|
+
failed: !ok,
|
|
10148
|
+
checkedAt: ok ? at : seat.checkedAt
|
|
10149
|
+
};
|
|
10150
|
+
}
|
|
10151
|
+
function readModulesOnce(force) {
|
|
10152
|
+
return Promise.all([readModuleVersions(force), readMarketInstalled()]).catch(() => null);
|
|
10153
|
+
}
|
|
10154
|
+
function readPluginsOnce(force) {
|
|
10155
|
+
return readInstalledPlugins(force).catch(() => null);
|
|
10156
|
+
}
|
|
10157
|
+
function runModuleVersionsRead(force = false, fresh = false, scope = "all") {
|
|
10158
|
+
const at = epoch;
|
|
10159
|
+
const running = inFlight.get(scope);
|
|
10160
|
+
if (!fresh && running !== void 0 && running.force === force && running.epoch === at) return running.promise;
|
|
10161
|
+
const allTicket = scope === "all" ? allSeq += 1 : allSeq;
|
|
10162
|
+
const tickets = /* @__PURE__ */ new Map();
|
|
10163
|
+
for (const part of partsOf(scope)) {
|
|
10164
|
+
const ticket = seq$1[part] += 1;
|
|
10165
|
+
tickets.set(part, ticket);
|
|
10166
|
+
if (force) newestForceSeq[part] = ticket;
|
|
10167
|
+
}
|
|
10168
|
+
publish$1(checking(scope));
|
|
10169
|
+
const modulesRead = tickets.has("modules") ? readModulesOnce(force) : null;
|
|
10170
|
+
const pluginsRead = tickets.has("plugins") ? readPluginsOnce(force) : null;
|
|
10171
|
+
const promise = Promise.all([modulesRead, pluginsRead]).then(([modules, plugins]) => {
|
|
9529
10172
|
if (at !== epoch) return;
|
|
9530
|
-
|
|
9531
|
-
const
|
|
9532
|
-
const
|
|
9533
|
-
const
|
|
9534
|
-
const
|
|
10173
|
+
const now = Date.now();
|
|
10174
|
+
const modulesTicket = tickets.get("modules");
|
|
10175
|
+
const pluginsTicket = tickets.get("plugins");
|
|
10176
|
+
const modulesLanded = modulesTicket !== void 0 && (force || modulesTicket >= newestForceSeq.modules);
|
|
10177
|
+
const pluginsLanded = pluginsTicket !== void 0 && (force || pluginsTicket >= newestForceSeq.plugins);
|
|
10178
|
+
const modulesOk = modulesLanded && modules !== null && modules[0].ok === true;
|
|
10179
|
+
const pluginsOk = pluginsLanded && plugins !== null && plugins.ok === true;
|
|
9535
10180
|
publish$1({
|
|
9536
|
-
|
|
9537
|
-
|
|
9538
|
-
workbench:
|
|
9539
|
-
selfUpdate:
|
|
10181
|
+
...state,
|
|
10182
|
+
modules: modulesOk ? withMarketUpdates(modules[0].modules, modules[1].ok === true ? modules[1].modules : []) : state.modules,
|
|
10183
|
+
workbench: modulesOk ? modules[0].workbench ?? null : state.workbench,
|
|
10184
|
+
selfUpdate: modulesOk ? modules[0].selfUpdate ?? null : state.selfUpdate,
|
|
10185
|
+
plugins: pluginsOk ? plugins.plugins : state.plugins,
|
|
9540
10186
|
read: true,
|
|
9541
|
-
|
|
9542
|
-
|
|
9543
|
-
|
|
10187
|
+
allChecking: scope === "all" && allTicket === allSeq ? false : state.allChecking,
|
|
10188
|
+
modulesCheck: modulesLanded && modulesTicket !== void 0 ? landed(state.modulesCheck, modulesTicket, seq$1.modules, modulesOk, now) : state.modulesCheck,
|
|
10189
|
+
pluginsCheck: pluginsLanded && pluginsTicket !== void 0 ? landed(state.pluginsCheck, pluginsTicket, seq$1.plugins, pluginsOk, now) : state.pluginsCheck
|
|
9544
10190
|
});
|
|
9545
10191
|
}).finally(() => {
|
|
9546
|
-
if (inFlight?.promise === promise) inFlight
|
|
10192
|
+
if (inFlight.get(scope)?.promise === promise) inFlight.delete(scope);
|
|
9547
10193
|
});
|
|
9548
|
-
inFlight
|
|
10194
|
+
inFlight.set(scope, {
|
|
9549
10195
|
force,
|
|
9550
10196
|
epoch: at,
|
|
9551
10197
|
promise
|
|
9552
|
-
};
|
|
10198
|
+
});
|
|
9553
10199
|
return promise;
|
|
9554
10200
|
}
|
|
9555
10201
|
function useModuleVersions() {
|
|
@@ -9560,27 +10206,70 @@ function useModuleVersions() {
|
|
|
9560
10206
|
const first = !mountedRef.current;
|
|
9561
10207
|
mountedRef.current = true;
|
|
9562
10208
|
if (first && !shouldProbeOnEnter({
|
|
9563
|
-
checkedAt: state
|
|
10209
|
+
checkedAt: moduleVersionsCheckedAt(state),
|
|
9564
10210
|
now: Date.now(),
|
|
9565
10211
|
staleMs: MARKET_STALE_MS
|
|
9566
10212
|
})) return;
|
|
9567
10213
|
runModuleVersionsRead(false);
|
|
9568
10214
|
}, [factRev]);
|
|
9569
10215
|
const reload = (0, react.useCallback)((options) => {
|
|
9570
|
-
runModuleVersionsRead(options?.force === true, options?.fresh === true);
|
|
10216
|
+
runModuleVersionsRead(options?.force === true, options?.fresh === true, options?.scope ?? "all");
|
|
9571
10217
|
}, []);
|
|
9572
10218
|
return {
|
|
9573
|
-
|
|
9574
|
-
|
|
9575
|
-
workbench: value.workbench,
|
|
9576
|
-
selfUpdate: value.selfUpdate,
|
|
9577
|
-
read: value.read,
|
|
9578
|
-
checking: value.checking,
|
|
9579
|
-
failed: value.failed,
|
|
9580
|
-
checkedAt: value.checkedAt,
|
|
10219
|
+
...value,
|
|
10220
|
+
checking: moduleVersionsChecking(value),
|
|
9581
10221
|
reload
|
|
9582
10222
|
};
|
|
9583
10223
|
}
|
|
10224
|
+
//#endregion
|
|
10225
|
+
//#region src/app/layouts/market/use-market-reload.ts
|
|
10226
|
+
function useMarketReload(input) {
|
|
10227
|
+
const { checkedAt, forceProbe, reloadCapability, reloadVersions } = input;
|
|
10228
|
+
const reload = (0, react.useCallback)((options) => {
|
|
10229
|
+
if (options?.force === true) {
|
|
10230
|
+
bumpModuleVersionsEpoch();
|
|
10231
|
+
bumpCapabilityEpoch();
|
|
10232
|
+
forceProbe();
|
|
10233
|
+
reloadVersions({
|
|
10234
|
+
force: true,
|
|
10235
|
+
fresh: true
|
|
10236
|
+
});
|
|
10237
|
+
return;
|
|
10238
|
+
}
|
|
10239
|
+
reloadCapability();
|
|
10240
|
+
reloadVersions();
|
|
10241
|
+
}, [
|
|
10242
|
+
reloadCapability,
|
|
10243
|
+
reloadVersions,
|
|
10244
|
+
forceProbe
|
|
10245
|
+
]);
|
|
10246
|
+
const checkPart = (0, react.useCallback)((part) => reloadVersions({
|
|
10247
|
+
force: true,
|
|
10248
|
+
fresh: true,
|
|
10249
|
+
scope: part
|
|
10250
|
+
}), [reloadVersions]);
|
|
10251
|
+
const enteredRef = (0, react.useRef)(false);
|
|
10252
|
+
(0, react.useEffect)(() => {
|
|
10253
|
+
if (enteredRef.current) return;
|
|
10254
|
+
enteredRef.current = true;
|
|
10255
|
+
reloadVersions();
|
|
10256
|
+
if (!shouldProbeOnEnter({
|
|
10257
|
+
checkedAt,
|
|
10258
|
+
now: Date.now(),
|
|
10259
|
+
staleMs: MARKET_STALE_MS
|
|
10260
|
+
})) return;
|
|
10261
|
+
markNextProbeSilent();
|
|
10262
|
+
forceProbe();
|
|
10263
|
+
}, [
|
|
10264
|
+
checkedAt,
|
|
10265
|
+
forceProbe,
|
|
10266
|
+
reloadVersions
|
|
10267
|
+
]);
|
|
10268
|
+
return {
|
|
10269
|
+
reload,
|
|
10270
|
+
checkPart
|
|
10271
|
+
};
|
|
10272
|
+
}
|
|
9584
10273
|
var AddModule_module_default = {
|
|
9585
10274
|
wide: "_wide_1lv8f_1",
|
|
9586
10275
|
dialog: "_dialog_1lv8f_8",
|
|
@@ -9832,18 +10521,79 @@ function AddModuleResult({ t, state }) {
|
|
|
9832
10521
|
}, 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)));
|
|
9833
10522
|
}
|
|
9834
10523
|
//#endregion
|
|
10524
|
+
//#region src/app/layouts/market/add-module-registry-prefs.ts
|
|
10525
|
+
var DEFAULT_REGISTRY_CHOICE = {
|
|
10526
|
+
kind: "default",
|
|
10527
|
+
value: ""
|
|
10528
|
+
};
|
|
10529
|
+
function isRegistryKind(value) {
|
|
10530
|
+
return value === "default" || value === "url" || value === "custom";
|
|
10531
|
+
}
|
|
10532
|
+
function parseRegistryChoice(raw) {
|
|
10533
|
+
if (raw === null) return DEFAULT_REGISTRY_CHOICE;
|
|
10534
|
+
let value;
|
|
10535
|
+
try {
|
|
10536
|
+
value = JSON.parse(raw);
|
|
10537
|
+
} catch {
|
|
10538
|
+
return DEFAULT_REGISTRY_CHOICE;
|
|
10539
|
+
}
|
|
10540
|
+
if (typeof value !== "object" || value === null) return DEFAULT_REGISTRY_CHOICE;
|
|
10541
|
+
const record = value;
|
|
10542
|
+
if (!isRegistryKind(record.kind)) return DEFAULT_REGISTRY_CHOICE;
|
|
10543
|
+
if (record.kind === "default") return DEFAULT_REGISTRY_CHOICE;
|
|
10544
|
+
if (record.kind === "custom") return {
|
|
10545
|
+
kind: "custom",
|
|
10546
|
+
value: ""
|
|
10547
|
+
};
|
|
10548
|
+
if (typeof record.value !== "string" || !customRegistryAllowed(record.value)) return DEFAULT_REGISTRY_CHOICE;
|
|
10549
|
+
return {
|
|
10550
|
+
kind: "url",
|
|
10551
|
+
value: record.value.trim()
|
|
10552
|
+
};
|
|
10553
|
+
}
|
|
10554
|
+
function readRegistryPrefs() {
|
|
10555
|
+
const custom = readText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM);
|
|
10556
|
+
return {
|
|
10557
|
+
choice: parseRegistryChoice(readText(STORAGE_KEY_MARKET_REGISTRY)),
|
|
10558
|
+
custom: custom === null ? "" : custom.trim()
|
|
10559
|
+
};
|
|
10560
|
+
}
|
|
10561
|
+
function writeRegistryChoice(choice) {
|
|
10562
|
+
if (choice.kind === "custom") {
|
|
10563
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
|
|
10564
|
+
kind: "custom",
|
|
10565
|
+
value: ""
|
|
10566
|
+
}));
|
|
10567
|
+
return;
|
|
10568
|
+
}
|
|
10569
|
+
if (choice.kind === "url" && customRegistryAllowed(choice.value)) {
|
|
10570
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
|
|
10571
|
+
kind: "url",
|
|
10572
|
+
value: choice.value.trim()
|
|
10573
|
+
}));
|
|
10574
|
+
return;
|
|
10575
|
+
}
|
|
10576
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify(DEFAULT_REGISTRY_CHOICE));
|
|
10577
|
+
}
|
|
10578
|
+
function writeRegistryCustom(value) {
|
|
10579
|
+
const text = value.trim();
|
|
10580
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM, text === "" ? null : text);
|
|
10581
|
+
}
|
|
10582
|
+
function reconcileRegistryChoice(choice, choices) {
|
|
10583
|
+
if (choice.kind !== "url") return choice;
|
|
10584
|
+
return choices.some((option) => option.choice.kind === "url" && option.choice.value === choice.value) ? choice : DEFAULT_REGISTRY_CHOICE;
|
|
10585
|
+
}
|
|
10586
|
+
//#endregion
|
|
9835
10587
|
//#region src/app/layouts/market/use-add-module.ts
|
|
9836
10588
|
function newRequestId() {
|
|
9837
10589
|
return crypto.randomUUID();
|
|
9838
10590
|
}
|
|
9839
10591
|
function useAddModule(options) {
|
|
9840
10592
|
const { onInstalled, failedText } = options;
|
|
10593
|
+
const [prefs] = (0, react.useState)(readRegistryPrefs);
|
|
9841
10594
|
const [spec, setSpec] = (0, react.useState)("");
|
|
9842
|
-
const [choice, setChoice] = (0, react.useState)(
|
|
9843
|
-
|
|
9844
|
-
value: ""
|
|
9845
|
-
});
|
|
9846
|
-
const [custom, setCustom] = (0, react.useState)("");
|
|
10595
|
+
const [choice, setChoice] = (0, react.useState)(prefs.choice);
|
|
10596
|
+
const [custom, setCustom] = (0, react.useState)(prefs.custom);
|
|
9847
10597
|
const [registryOpen, setRegistryOpen] = (0, react.useState)(false);
|
|
9848
10598
|
const [guideOpen, setGuideOpen] = (0, react.useState)(false);
|
|
9849
10599
|
const [phase, setPhase] = (0, react.useState)("idle");
|
|
@@ -9855,6 +10605,8 @@ function useAddModule(options) {
|
|
|
9855
10605
|
const generationRef = (0, react.useRef)(0);
|
|
9856
10606
|
const requestIdRef = (0, react.useRef)("");
|
|
9857
10607
|
const { busy: classifying } = useVisibleBusy(phase === "inspecting", 500);
|
|
10608
|
+
const [installToken] = (0, react.useState)(() => `market-install:${newRequestId()}`);
|
|
10609
|
+
usePublishMarketInstalling(installToken, phase === "installing");
|
|
9858
10610
|
const write = useHostWrite({
|
|
9859
10611
|
channel: "provision",
|
|
9860
10612
|
networkText: failedText
|
|
@@ -9871,7 +10623,9 @@ function useAddModule(options) {
|
|
|
9871
10623
|
let alive = true;
|
|
9872
10624
|
readBundleRegistries().then((response) => {
|
|
9873
10625
|
if (!alive) return;
|
|
9874
|
-
|
|
10626
|
+
const options = registryOptions(response.ok ? response.registries : null);
|
|
10627
|
+
setChoices(options);
|
|
10628
|
+
setChoice((previous) => reconcileRegistryChoice(previous, options));
|
|
9875
10629
|
});
|
|
9876
10630
|
return () => {
|
|
9877
10631
|
alive = false;
|
|
@@ -9938,6 +10692,7 @@ function useAddModule(options) {
|
|
|
9938
10692
|
supply: value.supply,
|
|
9939
10693
|
...value.plugin === void 0 ? {} : { plugin: value.plugin }
|
|
9940
10694
|
});
|
|
10695
|
+
publishMarketApplied(appliedUnitsOf(value));
|
|
9941
10696
|
setPhase("result");
|
|
9942
10697
|
if (value.change.application === "applied" || value.change.application === "restart-required") onInstalled();
|
|
9943
10698
|
});
|
|
@@ -9982,6 +10737,14 @@ function useAddModule(options) {
|
|
|
9982
10737
|
setPreview(null);
|
|
9983
10738
|
setPhase("idle");
|
|
9984
10739
|
}, []);
|
|
10740
|
+
const choose = (0, react.useCallback)((next) => {
|
|
10741
|
+
setChoice(next);
|
|
10742
|
+
writeRegistryChoice(next);
|
|
10743
|
+
}, []);
|
|
10744
|
+
const chooseCustom = (0, react.useCallback)((value) => {
|
|
10745
|
+
setCustom(value);
|
|
10746
|
+
writeRegistryCustom(value);
|
|
10747
|
+
}, []);
|
|
9985
10748
|
return {
|
|
9986
10749
|
spec,
|
|
9987
10750
|
choice,
|
|
@@ -9997,10 +10760,8 @@ function useAddModule(options) {
|
|
|
9997
10760
|
removing,
|
|
9998
10761
|
builds: outcome?.change.pendingBuilds ?? [],
|
|
9999
10762
|
setSpec,
|
|
10000
|
-
setChoice:
|
|
10001
|
-
|
|
10002
|
-
}, []),
|
|
10003
|
-
setCustom,
|
|
10763
|
+
setChoice: choose,
|
|
10764
|
+
setCustom: chooseCustom,
|
|
10004
10765
|
toggleRegistry: (0, react.useCallback)(() => setRegistryOpen((value) => !value), []),
|
|
10005
10766
|
closeRegistry: (0, react.useCallback)(() => setRegistryOpen(false), []),
|
|
10006
10767
|
toggleGuide: (0, react.useCallback)(() => setGuideOpen((value) => !value), []),
|
|
@@ -10149,7 +10910,8 @@ function makeMarketEntryIcon(units) {
|
|
|
10149
10910
|
installed: modules === null ? void 0 : withClientRefusals(modules, units.refusals()),
|
|
10150
10911
|
plugins,
|
|
10151
10912
|
workbench,
|
|
10152
|
-
busy: useMarketBusy()
|
|
10913
|
+
busy: useMarketBusy(),
|
|
10914
|
+
...useMarketInstallState()
|
|
10153
10915
|
});
|
|
10154
10916
|
(0, react.useEffect)(() => {
|
|
10155
10917
|
publishPanelHint(MARKET_PANEL_ID, hint);
|
|
@@ -10164,50 +10926,23 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
10164
10926
|
const manifests = useLiveManifests(units);
|
|
10165
10927
|
const installable = useInstallableUnits(units);
|
|
10166
10928
|
const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
|
|
10167
|
-
const { modules, plugins, workbench, selfUpdate, checking: versionsChecking,
|
|
10929
|
+
const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, allChecking: versionsAllChecking, modulesCheck, pluginsCheck, read: installedRead, reload: reloadVersions } = useModuleVersions();
|
|
10168
10930
|
const machineBoard = useEnabledUnits(0, null);
|
|
10931
|
+
const install = useMarketInstallState();
|
|
10169
10932
|
const [adding, setAdding] = (0, react.useState)(false);
|
|
10170
10933
|
const [acting, setActing] = (0, react.useState)(false);
|
|
10171
10934
|
const [tab, setTab] = (0, react.useState)("installed");
|
|
10172
10935
|
const openAddModule = (0, react.useCallback)(() => setAdding(true), []);
|
|
10173
10936
|
const updates = (0, react.useMemo)(() => marketUpdatesOf(modules), [modules]);
|
|
10174
10937
|
const installed = modules === null ? void 0 : withClientRefusals(modules, units.refusals());
|
|
10175
|
-
const reload = (
|
|
10176
|
-
if (options?.force === true) {
|
|
10177
|
-
bumpModuleVersionsEpoch();
|
|
10178
|
-
bumpCapabilityEpoch();
|
|
10179
|
-
forceProbe();
|
|
10180
|
-
reloadVersions({
|
|
10181
|
-
force: true,
|
|
10182
|
-
fresh: true
|
|
10183
|
-
});
|
|
10184
|
-
return;
|
|
10185
|
-
}
|
|
10186
|
-
reloadCapability();
|
|
10187
|
-
reloadVersions();
|
|
10188
|
-
}, [
|
|
10189
|
-
reloadCapability,
|
|
10190
|
-
reloadVersions,
|
|
10191
|
-
forceProbe
|
|
10192
|
-
]);
|
|
10193
|
-
const enteredRef = (0, react.useRef)(false);
|
|
10194
|
-
(0, react.useEffect)(() => {
|
|
10195
|
-
if (enteredRef.current) return;
|
|
10196
|
-
enteredRef.current = true;
|
|
10197
|
-
reloadVersions();
|
|
10198
|
-
if (!shouldProbeOnEnter({
|
|
10199
|
-
checkedAt,
|
|
10200
|
-
now: Date.now(),
|
|
10201
|
-
staleMs: MARKET_STALE_MS
|
|
10202
|
-
})) return;
|
|
10203
|
-
markNextProbeSilent();
|
|
10204
|
-
forceProbe();
|
|
10205
|
-
}, [
|
|
10938
|
+
const { reload, checkPart } = useMarketReload({
|
|
10206
10939
|
checkedAt,
|
|
10207
10940
|
forceProbe,
|
|
10941
|
+
reloadCapability,
|
|
10208
10942
|
reloadVersions
|
|
10209
|
-
|
|
10943
|
+
});
|
|
10210
10944
|
const settling = useSettlingModules((installed ?? []).map((module) => module.unit).join("|"), manifests.map((manifest) => manifest.id).join("|"), Object.keys(capabilities ?? {}).join("|"));
|
|
10945
|
+
const held = install.applied.size === 0 ? settling : /* @__PURE__ */ new Set([...settling, ...install.applied]);
|
|
10211
10946
|
const freshness = {
|
|
10212
10947
|
loaded: capabilities !== null,
|
|
10213
10948
|
checking: checking || versionsChecking,
|
|
@@ -10229,7 +10964,9 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
10229
10964
|
idPrefix: MARKET_PANEL_ID,
|
|
10230
10965
|
tab,
|
|
10231
10966
|
busy,
|
|
10967
|
+
checking: checking || versionsAllChecking,
|
|
10232
10968
|
onTab: setTab,
|
|
10969
|
+
onReload: () => reload({ force: true }),
|
|
10233
10970
|
onAdd: openAddModule
|
|
10234
10971
|
}), devMarket.strip, /* @__PURE__ */ (0, react.createElement)("div", {
|
|
10235
10972
|
id: `${MARKET_PANEL_ID}-panel-installed`,
|
|
@@ -10247,14 +10984,16 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
10247
10984
|
onChanged: reload,
|
|
10248
10985
|
onPending: setActing,
|
|
10249
10986
|
updates,
|
|
10250
|
-
|
|
10251
|
-
|
|
10987
|
+
modulesCheck,
|
|
10988
|
+
pluginsCheck,
|
|
10989
|
+
onCheck: checkPart,
|
|
10252
10990
|
installed,
|
|
10253
10991
|
installedRead: shownRead,
|
|
10254
10992
|
workbench,
|
|
10255
10993
|
selfUpdate,
|
|
10256
10994
|
plugins,
|
|
10257
|
-
settling: mock === void 0 ?
|
|
10995
|
+
settling: mock === void 0 ? held : void 0,
|
|
10996
|
+
installing: mock === void 0 ? install.installing : false,
|
|
10258
10997
|
mock,
|
|
10259
10998
|
defaults: machineBoard?.defaults ?? [],
|
|
10260
10999
|
changed: machineBoard?.changed ?? {}
|
|
@@ -11741,6 +12480,7 @@ function createClientUnitRegistry(options = {}) {
|
|
|
11741
12480
|
return manifestsCache;
|
|
11742
12481
|
},
|
|
11743
12482
|
refusals: () => refusals,
|
|
12483
|
+
declared: () => [...known.values()],
|
|
11744
12484
|
installable: () => installableIds,
|
|
11745
12485
|
setManifests(manifests, installable) {
|
|
11746
12486
|
known = new Map(manifests.map((manifest) => [manifest.id, manifest]));
|
|
@@ -12685,6 +13425,45 @@ function MarketSourceApprovalSeat({ tool, args, t }) {
|
|
|
12685
13425
|
}, []);
|
|
12686
13426
|
return (0, react.createElement)(ApprovalPlan, { rows: marketSourceRows(tool, args, payload, t) });
|
|
12687
13427
|
}
|
|
13428
|
+
function pluginToolIndexOf(manifests) {
|
|
13429
|
+
const index = /* @__PURE__ */ new Map();
|
|
13430
|
+
for (const manifest of manifests) for (const tool of manifest.tools) {
|
|
13431
|
+
if (tool.opencli === void 0) continue;
|
|
13432
|
+
index.set(tool.name, tool.opencli);
|
|
13433
|
+
}
|
|
13434
|
+
return index;
|
|
13435
|
+
}
|
|
13436
|
+
function argText(value) {
|
|
13437
|
+
if (typeof value === "string") return value;
|
|
13438
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
13439
|
+
const text = JSON.stringify(value);
|
|
13440
|
+
return text === void 0 ? String(value) : text;
|
|
13441
|
+
}
|
|
13442
|
+
function pluginApprovalRows(origin, args, t) {
|
|
13443
|
+
const rows = [{
|
|
13444
|
+
label: t("approval.plugin.name"),
|
|
13445
|
+
value: origin.plugin
|
|
13446
|
+
}, {
|
|
13447
|
+
label: t("approval.plugin.command"),
|
|
13448
|
+
value: origin.command
|
|
13449
|
+
}];
|
|
13450
|
+
const note = args[APPROVAL_NOTE_ARG];
|
|
13451
|
+
if (typeof note === "string" && note.trim() !== "") rows.push({
|
|
13452
|
+
label: t("approval.plugin.note"),
|
|
13453
|
+
value: note.replace(/\s+/g, " ").trim()
|
|
13454
|
+
});
|
|
13455
|
+
for (const name of origin.args) {
|
|
13456
|
+
if (!(name in args)) continue;
|
|
13457
|
+
rows.push({
|
|
13458
|
+
label: name,
|
|
13459
|
+
value: argText(args[name])
|
|
13460
|
+
});
|
|
13461
|
+
}
|
|
13462
|
+
return rows;
|
|
13463
|
+
}
|
|
13464
|
+
function shellApprovalRenderer(manifests) {
|
|
13465
|
+
return (input, t) => shellApprovalDetail(input, t, pluginToolIndexOf(manifests()));
|
|
13466
|
+
}
|
|
12688
13467
|
function shellClaimsApprovalDetail(tool) {
|
|
12689
13468
|
return ALL_TOOLS.includes(tool);
|
|
12690
13469
|
}
|
|
@@ -12696,7 +13475,9 @@ function stopApprovalRows(args, t) {
|
|
|
12696
13475
|
value: `${unit === "" ? "<unit>" : unit} · ${id === "" ? "<id>" : id}`
|
|
12697
13476
|
}];
|
|
12698
13477
|
}
|
|
12699
|
-
function shellApprovalPlan(input, t) {
|
|
13478
|
+
function shellApprovalPlan(input, t, pluginTools) {
|
|
13479
|
+
const origin = pluginTools?.get(input.tool);
|
|
13480
|
+
if (origin !== void 0) return { rows: pluginApprovalRows(origin, input.args, t) };
|
|
12700
13481
|
if (input.tool === "workbench_diy_record_prepare") return {
|
|
12701
13482
|
rows: recordApprovalRows(input.args, t),
|
|
12702
13483
|
warn: t("approval.record.noSwitch")
|
|
@@ -12707,7 +13488,7 @@ function shellApprovalPlan(input, t) {
|
|
|
12707
13488
|
};
|
|
12708
13489
|
return shellClaimsApprovalDetail(input.tool) ? { rows: [] } : void 0;
|
|
12709
13490
|
}
|
|
12710
|
-
function shellApprovalDetail(input, t) {
|
|
13491
|
+
function shellApprovalDetail(input, t, pluginTools) {
|
|
12711
13492
|
if (input.tool === "workbench_diy_publish") return (0, react.createElement)(PublishApprovalSeat, {
|
|
12712
13493
|
args: input.args,
|
|
12713
13494
|
t
|
|
@@ -12717,7 +13498,7 @@ function shellApprovalDetail(input, t) {
|
|
|
12717
13498
|
args: input.args,
|
|
12718
13499
|
t
|
|
12719
13500
|
});
|
|
12720
|
-
const plan = shellApprovalPlan(input, t);
|
|
13501
|
+
const plan = shellApprovalPlan(input, t, pluginTools);
|
|
12721
13502
|
if (plan === void 0) return void 0;
|
|
12722
13503
|
if (plan.rows.length === 0) return (0, react.createElement)(react.Fragment, null);
|
|
12723
13504
|
return /* @__PURE__ */ (0, react.createElement)(ApprovalPlan, {
|
|
@@ -13067,6 +13848,10 @@ function Breadcrumbs({ trail, onGoTo, titleKeyOf, t }) {
|
|
|
13067
13848
|
}, /* @__PURE__ */ (0, react.createElement)("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))));
|
|
13068
13849
|
}));
|
|
13069
13850
|
}
|
|
13851
|
+
var BoardEmpty_module_default = {
|
|
13852
|
+
actions: "_actions_smeq7_1",
|
|
13853
|
+
action: "_action_smeq7_1"
|
|
13854
|
+
};
|
|
13070
13855
|
//#endregion
|
|
13071
13856
|
//#region src/app/layouts/rightbar/BoardEmpty.tsx
|
|
13072
13857
|
function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
|
|
@@ -13074,20 +13859,23 @@ function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
|
|
|
13074
13859
|
icon: /* @__PURE__ */ (0, react.createElement)(IconBrandMark, { size: 32 }),
|
|
13075
13860
|
title: t("panels.empty"),
|
|
13076
13861
|
hint: t("panels.emptyHint"),
|
|
13077
|
-
action: /* @__PURE__ */ (0, react.createElement)(
|
|
13862
|
+
action: /* @__PURE__ */ (0, react.createElement)("div", { className: BoardEmpty_module_default.actions }, /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
13078
13863
|
type: "button",
|
|
13079
13864
|
size: "sm",
|
|
13080
13865
|
variant: "primary",
|
|
13866
|
+
className: BoardEmpty_module_default.action,
|
|
13081
13867
|
onClick: onBuildModule
|
|
13082
13868
|
}, t("panels.buildModule")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
13083
13869
|
type: "button",
|
|
13084
13870
|
size: "sm",
|
|
13085
13871
|
variant: "toolbar",
|
|
13872
|
+
className: BoardEmpty_module_default.action,
|
|
13086
13873
|
onClick: onOpenModules
|
|
13087
13874
|
}, t("panels.choose")), /* @__PURE__ */ (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
13088
13875
|
type: "button",
|
|
13089
13876
|
size: "sm",
|
|
13090
13877
|
variant: "toolbar",
|
|
13878
|
+
className: BoardEmpty_module_default.action,
|
|
13091
13879
|
onClick: onOpenMarket
|
|
13092
13880
|
}, t("panels.browseMarket")))
|
|
13093
13881
|
});
|
|
@@ -15630,7 +16418,7 @@ function messagesOf(units) {
|
|
|
15630
16418
|
...face.messages === void 0 ? {} : { messages: face.messages }
|
|
15631
16419
|
}));
|
|
15632
16420
|
}
|
|
15633
|
-
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_yups9_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_yups9_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_yups9_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_yups9_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_yups9_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_yups9_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_yups9_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_yups9_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_yups9_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_yups9_39 ._marketVersion_yups9_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_yups9_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_yups9_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_yups9_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_yups9_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_yups9_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_yups9_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_yups9_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_yups9_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_yups9_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_yups9_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_yups9_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_yups9_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_yups9_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_yups9_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_yups9_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_yups9_183 ._marketSectionTitle_yups9_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_yups9_183 ._marketName_yups9_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_yups9_183 ._marketIcon_yups9_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_yups9_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_yups9_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_yups9_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._marketEmpty_yups9_220 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_yups9_225 {\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_yups9_225 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_yups9_243 {\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_yups9_251 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_yups9_256 {\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_yups9_262 {\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_yups9_271 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_yups9_271[hidden] {\n display: none;\n}\n\n._marketTabs_yups9_281 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_yups9_286 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_yups9_291 {\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_yups9_220 {\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_yups9_308 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_yups9_313 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_yups9_320 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_yups9_327 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_yups9_333 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_yups9_338 {\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_yups9_345 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_yups9_351 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_yups9_356 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_yups9_361 {\n flex: none;\n}\n\n._discoverSearch_yups9_365 {\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_yups9_373 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_yups9_378 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_yups9_373 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_yups9_365 ._discoverSearchClear_yups9_387 {\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_yups9_387:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_yups9_327 {\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_yups9_333 {\n grid-area: market;\n }\n\n ._discoverMarketButton_yups9_338 {\n margin-left: 0;\n }\n\n ._discoverLabels_yups9_351 {\n grid-area: labels;\n }\n\n ._discoverSearch_yups9_365 {\n grid-area: search;\n }\n\n ._discoverSort_yups9_356 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_yups9_361 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_yups9_438 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_yups9_445 {\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_yups9_454 {\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_yups9_454:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_yups9_468 {\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_yups9_480 {\n object-fit: contain;\n}\n\n._discoverMain_yups9_484 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_yups9_492 {\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_yups9_500 {\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_yups9_500::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_yups9_500:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_yups9_500: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_yups9_531 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_yups9_537 {\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_yups9_546 {\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_yups9_553 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_yups9_559 {\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_yups9_568 {\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_yups9_573 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_yups9_578 {\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_yups9_587 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_yups9_578 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_yups9_597 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_yups9_603 {\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_yups9_603:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_yups9_603: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_yups9_626 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_yups9_630 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_yups9_636 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_yups9_642 {\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_yups9_649 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_yups9_656 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_yups9_661 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_yups9_666 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_yups9_671 {\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_yups9_677 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_yups9_684 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_yups9_690 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_yups9_695 {\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_yups9_705 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_yups9_711 {\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_yups9_719 {\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_yups9_728 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_yups9_735 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_yups9_735:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_yups9_745 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_yups9_753 {\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_yups9_761 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_yups9_766 {\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_yups9_775 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_yups9_781 {\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_yups9_790 {\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_yups9_790 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_yups9_808 {\n align-self: center;\n}\n\n._discoverTransport_yups9_812 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_yups9_818 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_yups9_825 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_yups9_818 ._discoverTransportKind_yups9_830 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_yups9_818 ._discoverTransportState_yups9_835 {\n margin-left: 0;\n}\n\n._discoverTransportHead_yups9_818 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_yups9_843 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_yups9_843 {\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_yups9_843:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_yups9_843:has(._discoverTransportRadio_yups9_864:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_yups9_843:has(._discoverTransportRadio_yups9_864:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_yups9_864 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_yups9_830 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_yups9_835 {\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_yups9_843[data-state='ok'] ._discoverTransportState_yups9_835 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_yups9_843[data-state='auth'] ._discoverTransportState_yups9_835 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_yups9_843[data-state='unreachable'] ._discoverTransportState_yups9_835,\n._discoverTransportRow_yups9_843[data-state='unknown'] ._discoverTransportState_yups9_835 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_yups9_904 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_yups9_910 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_yups9_915 {\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_yups9_926 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_yups9_932 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_yups9_936 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_yups9_942 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_yups9_950 {\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_yups9_959 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_yups9_965 {\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_yups9_974 {\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_yups9_982 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_yups9_990 {\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_yups9_998 {\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_yups9_1008 {\n flex: none;\n}\n\n._discoverSourceLoading_yups9_1012 {\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_yups9_1022 {\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_yups9_1022 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_yups9_1036 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_yups9_1042 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_yups9_1048 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_yups9_1053 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_yups9_1059 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_yups9_1064 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_yups9_1070 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_yups9_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_yups9_468._discoverSkeletonFill_yups9_1070 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_yups9_1079 {\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_yups9_1086 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_yups9_1090 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_yups9_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_yups9_1070 {\n animation: none;\n }\n}\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._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*/";
|
|
16421
|
+
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_1vpw3_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_1vpw3_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_1vpw3_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_1vpw3_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_1vpw3_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_1vpw3_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_1vpw3_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_1vpw3_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_1vpw3_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_1vpw3_39 ._marketVersion_1vpw3_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_1vpw3_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_1vpw3_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_1vpw3_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_1vpw3_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1vpw3_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_1vpw3_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_1vpw3_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_1vpw3_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_1vpw3_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_1vpw3_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_1vpw3_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_1vpw3_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_1vpw3_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_1vpw3_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_1vpw3_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_1vpw3_183 ._marketSectionTitle_1vpw3_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1vpw3_183 ._marketName_1vpw3_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_1vpw3_183 ._marketIcon_1vpw3_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._marketProgress_1vpw3_195 {\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_1vpw3_205 {\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_1vpw3_212 {\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_1vpw3_219 {\n grid-column: 2 / -1;\n min-width: 0;\n}\n\n._marketEmpty_1vpw3_224 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_1vpw3_229 {\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_1vpw3_229 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_1vpw3_247 {\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_1vpw3_255 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_1vpw3_260 {\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_1vpw3_266 {\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_1vpw3_275 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_1vpw3_275[hidden] {\n display: none;\n}\n\n._marketTabs_1vpw3_285 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_1vpw3_290 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_1vpw3_295 {\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_1vpw3_224 {\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_1vpw3_312 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_1vpw3_317 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_1vpw3_324 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_1vpw3_331 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_1vpw3_337 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_1vpw3_342 {\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_1vpw3_349 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_1vpw3_355 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_1vpw3_360 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_1vpw3_365 {\n flex: none;\n}\n\n._discoverSearch_1vpw3_369 {\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_1vpw3_377 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_1vpw3_382 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_1vpw3_377 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_1vpw3_369 ._discoverSearchClear_1vpw3_391 {\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_1vpw3_391:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_1vpw3_331 {\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_1vpw3_337 {\n grid-area: market;\n }\n\n ._discoverMarketButton_1vpw3_342 {\n margin-left: 0;\n }\n\n ._discoverLabels_1vpw3_355 {\n grid-area: labels;\n }\n\n ._discoverSearch_1vpw3_369 {\n grid-area: search;\n }\n\n ._discoverSort_1vpw3_360 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_1vpw3_365 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_1vpw3_442 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_1vpw3_449 {\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_1vpw3_458 {\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_1vpw3_458:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_1vpw3_472 {\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_1vpw3_484 {\n object-fit: contain;\n}\n\n._discoverMain_1vpw3_488 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_1vpw3_496 {\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_1vpw3_504 {\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_1vpw3_504::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_1vpw3_504:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_1vpw3_504: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_1vpw3_535 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_1vpw3_541 {\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_1vpw3_550 {\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_1vpw3_557 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_1vpw3_563 {\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_1vpw3_572 {\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_1vpw3_577 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_1vpw3_582 {\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_1vpw3_591 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_1vpw3_582 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_1vpw3_601 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_1vpw3_607 {\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_1vpw3_607:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_1vpw3_607: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_1vpw3_630 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_1vpw3_634 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_1vpw3_640 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_1vpw3_646 {\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_1vpw3_653 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_1vpw3_660 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_1vpw3_665 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_1vpw3_670 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_1vpw3_675 {\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_1vpw3_681 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_1vpw3_688 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_1vpw3_694 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_1vpw3_699 {\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_1vpw3_709 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_1vpw3_715 {\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_1vpw3_723 {\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_1vpw3_732 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_1vpw3_739 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_1vpw3_739:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_1vpw3_749 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_1vpw3_757 {\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_1vpw3_765 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_1vpw3_770 {\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_1vpw3_779 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_1vpw3_785 {\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_1vpw3_794 {\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_1vpw3_794 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_1vpw3_812 {\n align-self: center;\n}\n\n._discoverTransport_1vpw3_816 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_1vpw3_822 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_1vpw3_829 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_1vpw3_822 ._discoverTransportKind_1vpw3_834 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_1vpw3_822 ._discoverTransportState_1vpw3_839 {\n margin-left: 0;\n}\n\n._discoverTransportHead_1vpw3_822 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_1vpw3_847 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_1vpw3_847 {\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_1vpw3_847:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_1vpw3_847:has(._discoverTransportRadio_1vpw3_868:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_1vpw3_847:has(._discoverTransportRadio_1vpw3_868:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_1vpw3_868 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_1vpw3_834 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_1vpw3_839 {\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_1vpw3_847[data-state='ok'] ._discoverTransportState_1vpw3_839 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_1vpw3_847[data-state='auth'] ._discoverTransportState_1vpw3_839 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_1vpw3_847[data-state='unreachable'] ._discoverTransportState_1vpw3_839,\n._discoverTransportRow_1vpw3_847[data-state='unknown'] ._discoverTransportState_1vpw3_839 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_1vpw3_908 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_1vpw3_914 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_1vpw3_919 {\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_1vpw3_930 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_1vpw3_936 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_1vpw3_940 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_1vpw3_946 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_1vpw3_954 {\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_1vpw3_963 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_1vpw3_969 {\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_1vpw3_978 {\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_1vpw3_986 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_1vpw3_994 {\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_1vpw3_1002 {\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_1vpw3_1012 {\n flex: none;\n}\n\n._discoverSourceLoading_1vpw3_1016 {\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_1vpw3_1026 {\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_1vpw3_1026 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_1vpw3_1040 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_1vpw3_1046 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_1vpw3_1052 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_1vpw3_1057 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_1vpw3_1063 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_1vpw3_1068 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_1vpw3_1074 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_1vpw3_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_1vpw3_472._discoverSkeletonFill_1vpw3_1074 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_1vpw3_1083 {\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_1vpw3_1090 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_1vpw3_1094 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_1vpw3_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_1vpw3_1074 {\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*/";
|
|
15634
16422
|
function workbenchCss() {
|
|
15635
16423
|
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}`;
|
|
15636
16424
|
}
|
|
@@ -15879,7 +16667,7 @@ function mount(ctx) {
|
|
|
15879
16667
|
inject: () => ({
|
|
15880
16668
|
t: ctx.locale.bind(LOCALE_NS),
|
|
15881
16669
|
units: units.all(),
|
|
15882
|
-
renderShell:
|
|
16670
|
+
renderShell: shellApprovalRenderer(units.declared)
|
|
15883
16671
|
})
|
|
15884
16672
|
}, ApprovalDetail));
|
|
15885
16673
|
ctx.slots.inject("conversation.session.header.corner", () => ctx.slots.register({
|