@dsh-workbench/core 1.1.3 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client.js +1370 -585
- package/dist/client/client.body.js +1370 -585
- package/dist/client/index.js +1225 -440
- package/dist/host/index.js +784 -114
- 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/discover-confirm.d.ts +3 -2
- package/dist/types/app/layouts/market/market-check.d.ts +12 -0
- package/dist/types/app/layouts/market/market-header.d.ts +1 -3
- package/dist/types/app/layouts/market/use-discover.d.ts +2 -1
- package/dist/types/app/layouts/market/use-git-transport.d.ts +2 -2
- package/dist/types/app/layouts/market/use-module-versions.d.ts +3 -0
- package/dist/types/app/layouts/market/use-settling-modules.d.ts +1 -0
- 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 +4 -1
- package/dist/types/app/layouts/rightbar/SharedSection.d.ts +5 -2
- package/dist/types/app/layouts/rightbar/failure-card-text.d.ts +14 -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-freshness.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 +11 -2
- package/dist/types/app/layouts/rightbar/market-rows.d.ts +14 -1
- package/dist/types/app/layouts/rightbar/market-section.d.ts +8 -4
- package/dist/types/app/layouts/rightbar/market-transient-state.d.ts +3 -8
- package/dist/types/app/layouts/rightbar/market-view-text.d.ts +2 -0
- package/dist/types/app/layouts/rightbar/use-market-default.d.ts +12 -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 +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-installed.d.ts +19 -0
- package/dist/types/modules/panels/model/market-installed.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 +2 -1
- package/dist/types/modules/panels/model/market.d.ts +1 -0
- package/dist/types/shared/api/host/git-probe.d.ts +3 -0
- package/dist/types/shared/api/host/market-sources-store.d.ts +2 -1
- package/dist/types/shared/api/host/profile-dependencies.d.ts +1 -0
- package/dist/types/shared/hooks/market-queries.d.ts +2 -1
- package/package.json +3 -3
- package/skills/workbench-module-diy/TOOLS.md +11 -2
package/dist/client/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button, Checkbox, CodeBlock, DiffBlock, DisclosureRow, HoverCard, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCloseOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPauseOutlineRegular, IconPinFillRegular, IconPlayOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconSlidersTwoOutlineRegular, IconStopFillRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Input, MarkdownText, Menu, Modal, Pill, PluginArtworkDefault, RiskConfirmation, SegmentedTabs, StateDot, Switch, Tag, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
|
|
1
|
+
import { Button, Checkbox, CodeBlock, DiffBlock, DisclosureRow, HoverCard, IconCheckCircleFillRegular, IconCheckOutlineRegular, IconChevronDownOutlineRegular, IconCloseOutlineRegular, IconCodeOutlineRegular, IconCordisPluginOutlineRegular, IconDownloadOutlineRegular, IconEditOutlineRegular, IconEllipsisOutlineRegular, IconFlatListOutlineRegular, IconFolderCloseRegular, IconFolderOpenRegular, IconInfoOutlineRegular, IconLinkOutlineRegular, IconNewChatOutlineRegular, IconPanelLeftOutlineRegular, IconPauseOutlineRegular, IconPinFillRegular, IconPlayOutlineRegular, IconPlusOutlineRegular, IconRefreshOutlineRegular, IconRightUpOutlineRegular, IconSearchOutlineRegular, IconSettingsOutlineRegular, IconSlidersTwoOutlineRegular, IconStopFillRegular, IconTrashOutlineRegular, IconWarningOutlineRegular, Input, MarkdownText, Menu, Modal, Pill, PluginArtworkDefault, RiskConfirmation, SegmentedTabs, StateDot, Switch, Tag, TerminalBlock, TextShimmer, Tooltip, useAnchoredPosition, useDismissOnOutsidePointer, writeClipboard } from "@deepseek-ai/dsh-client-ui-primitives";
|
|
2
2
|
import { Fragment, createElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
3
3
|
//#region \0rolldown/runtime.js
|
|
4
4
|
var __create = Object.create;
|
|
@@ -726,6 +726,10 @@ var STORAGE_KEY_RIGHTBAR = "dsh-workbench.rightbar.expanded";
|
|
|
726
726
|
var STORAGE_KEY_RIGHTBAR_COLUMN = "dsh-workbench.rightbar.column";
|
|
727
727
|
/** 记住右栏宽度(像素数字的字符串)的 localStorage 键。 */
|
|
728
728
|
var STORAGE_KEY_RIGHTBAR_WIDTH = "dsh-workbench.rightbar.width";
|
|
729
|
+
/** 记住「添加模块」浮层选过的安装源的 localStorage 键。 */
|
|
730
|
+
var STORAGE_KEY_MARKET_REGISTRY = "dsh-workbench.market.registry";
|
|
731
|
+
/** 记住「添加模块」浮层上次填过的自定义源地址的 localStorage 键。 */
|
|
732
|
+
var STORAGE_KEY_MARKET_REGISTRY_CUSTOM = "dsh-workbench.market.registry.custom";
|
|
729
733
|
/** dsh i18n 的命名空间:词表都注册在它下面,`ctx.locale.register` / `bind` 按它取。 */
|
|
730
734
|
var LOCALE_NS = "workbench";
|
|
731
735
|
//#endregion
|
|
@@ -2530,6 +2534,12 @@ function writeText(key, value) {
|
|
|
2530
2534
|
else window.localStorage.setItem(key, value);
|
|
2531
2535
|
} catch {}
|
|
2532
2536
|
}
|
|
2537
|
+
//#endregion
|
|
2538
|
+
//#region ../shared/dist/contract/approval.js
|
|
2539
|
+
/**
|
|
2540
|
+
* agent 自己那句"这次想干什么"的参数名:插件命令族必填,审批屏把它画在详情座里,不进标题。
|
|
2541
|
+
*/
|
|
2542
|
+
var APPROVAL_NOTE_ARG = "approval_note";
|
|
2533
2543
|
/**
|
|
2534
2544
|
* 判一个名字是不是范围查法,不是问这条事实存不存在。
|
|
2535
2545
|
* @param name 事实名或范围名。
|
|
@@ -2753,9 +2763,13 @@ function supplyNeedsOf(manifest) {
|
|
|
2753
2763
|
}
|
|
2754
2764
|
//#endregion
|
|
2755
2765
|
//#region ../shared/dist/contract/needs.js
|
|
2766
|
+
var REGISTRY_PATTERN = /^(?:https?|file):\/\//;
|
|
2756
2767
|
function text(value) {
|
|
2757
2768
|
return typeof value === "string" ? value.trim() : "";
|
|
2758
2769
|
}
|
|
2770
|
+
function isRecord(value) {
|
|
2771
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
2772
|
+
}
|
|
2759
2773
|
/**
|
|
2760
2774
|
* 一条 need 的稳定标识:作者写 `id` 就用它,否则 `kind:name`。
|
|
2761
2775
|
* @param need 一条 need。
|
|
@@ -2764,11 +2778,40 @@ function text(value) {
|
|
|
2764
2778
|
function needIdOf(need) {
|
|
2765
2779
|
return need.id === void 0 || need.id.trim() === "" ? `${need.kind}:${need.name}` : need.id;
|
|
2766
2780
|
}
|
|
2781
|
+
function binInstallProblemsOf(raw, at) {
|
|
2782
|
+
if (raw === void 0) return [];
|
|
2783
|
+
if (!isRecord(raw)) return [`${at}.install 要是对象`];
|
|
2784
|
+
const errors = [];
|
|
2785
|
+
for (const key of Object.keys(raw)) if (![
|
|
2786
|
+
"kind",
|
|
2787
|
+
"line",
|
|
2788
|
+
"platforms",
|
|
2789
|
+
"package",
|
|
2790
|
+
"registryEnv",
|
|
2791
|
+
"registryDefault"
|
|
2792
|
+
].includes(key)) errors.push(`${at}.install 有不认识的字段 ${key}`);
|
|
2793
|
+
const kind = text(raw["kind"]);
|
|
2794
|
+
if (kind !== "command" && kind !== "npm") errors.push(`${at}.install.kind 只认 command(一条命令)或 npm(一个包,装进隔离运行时)`);
|
|
2795
|
+
if (kind === "command" && text(raw["line"]) === "") errors.push(`${at}.install.line 没写 —— 要一条能直接粘进终端的命令`);
|
|
2796
|
+
if (kind === "npm" && text(raw["package"]) === "") errors.push(`${at}.install.package 没写 —— 这个命令由哪个 npm 包提供`);
|
|
2797
|
+
if (raw["registryDefault"] !== void 0 && !REGISTRY_PATTERN.test(text(raw["registryDefault"]))) errors.push(`${at}.install.registryDefault 要是 http(s):// 或 file:// 的源地址`);
|
|
2798
|
+
if (raw["platforms"] !== void 0) {
|
|
2799
|
+
if (!Array.isArray(raw["platforms"]) || raw["platforms"].length === 0) errors.push(`${at}.install.platforms 要是非空数组`);
|
|
2800
|
+
else if (raw["platforms"].some((one) => ![
|
|
2801
|
+
"darwin",
|
|
2802
|
+
"linux",
|
|
2803
|
+
"win32"
|
|
2804
|
+
].includes(text(one)))) errors.push(`${at}.install.platforms 只认 darwin / linux / win32`);
|
|
2805
|
+
}
|
|
2806
|
+
return errors;
|
|
2807
|
+
}
|
|
2767
2808
|
function perKindProblemsOf(kind, raw, at) {
|
|
2768
2809
|
const errors = [];
|
|
2769
2810
|
if (kind === "bin" || kind === "lib" || kind === "env") {
|
|
2770
2811
|
if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
|
|
2771
2812
|
}
|
|
2813
|
+
if (kind === "bin") errors.push(...binInstallProblemsOf(raw["install"], at));
|
|
2814
|
+
if (raw["docs"] !== void 0 && text(raw["docs"]) === "") errors.push(`${at}.docs 是空串`);
|
|
2772
2815
|
if (kind === "extension") {
|
|
2773
2816
|
if (text(raw["runtime"]) === "") errors.push(`${at}.runtime 没写 —— 扩展属于哪个运行时(如 opencli)`);
|
|
2774
2817
|
if (text(raw["name"]) === "") errors.push(`${at}.name 没写`);
|
|
@@ -3100,7 +3143,42 @@ var en = {
|
|
|
3100
3143
|
"panels.market.confirmUninstallAck": "I understand: using it again means reinstalling it.",
|
|
3101
3144
|
"panels.market.confirmYes": "Uninstall",
|
|
3102
3145
|
"panels.market.confirmNo": "Cancel",
|
|
3146
|
+
"panels.market.noMarketSource": "The index has no newer version of this module (refresh the index and retry)",
|
|
3103
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",
|
|
3104
3182
|
"panels.market.needEnv": "Set {env} in the terminal that started the workbench first",
|
|
3105
3183
|
"panels.market.needCommands": "Missing commands: {commands}",
|
|
3106
3184
|
"panels.market.needBinary": "Install the {command} command first",
|
|
@@ -3136,9 +3214,13 @@ var en = {
|
|
|
3136
3214
|
"panels.market.pluginBroken": "This plugin install is broken: it cannot be identified. Uninstall it first, then ask the agent to reinstall it by package name.",
|
|
3137
3215
|
"panels.market.restartNeeded": "The new version is installed — restart once to pick it up.",
|
|
3138
3216
|
"panels.market.foot": "After installing, enable it in the panel page of that project.",
|
|
3139
|
-
"panels.market.recheck": "Check for updates",
|
|
3140
3217
|
"panels.market.checkUpdates": "Check for updates",
|
|
3218
|
+
"panels.market.checkingNow": "Checking…",
|
|
3219
|
+
"panels.market.checkFailed": "The last check failed. Check your connection and retry.",
|
|
3141
3220
|
"panels.market.checkedAt": "Last checked: {time}",
|
|
3221
|
+
"panels.market.latestPartial": "Could not check {n} modules",
|
|
3222
|
+
"panels.market.latestNoRegistry": "No source configured — the latest version was not checked",
|
|
3223
|
+
"panels.market.latestProbeFailed": "Could not reach the source — try again later",
|
|
3142
3224
|
"panels.market.justNow": "just now",
|
|
3143
3225
|
"panels.market.minutesAgo": "{n} min ago",
|
|
3144
3226
|
"panels.market.hoursAgo": "{n} h ago",
|
|
@@ -3315,6 +3397,9 @@ var en = {
|
|
|
3315
3397
|
"panels.discover.transportTest": "Test this address",
|
|
3316
3398
|
"panels.discover.transportPlaceholder": "Or paste another address (mirror, alias)",
|
|
3317
3399
|
"panels.discover.transportNeedsAuth": "This repository needs credentials: clone it once in a terminal, or set up an SSH key / credential helper, then install again.",
|
|
3400
|
+
"panels.discover.transportChange": "Change address",
|
|
3401
|
+
"panels.discover.transportChangeHide": "Hide",
|
|
3402
|
+
"panels.discover.transportNone": "No readable address",
|
|
3318
3403
|
"panels.discover.expand": "Show versions",
|
|
3319
3404
|
"panels.discover.collapse": "Hide versions",
|
|
3320
3405
|
"panels.discover.versionCount": "{n} versions",
|
|
@@ -3600,6 +3685,9 @@ var en = {
|
|
|
3600
3685
|
"approval.record.noSwitch": "it will not switch you back (the leftbar footer shows the state)",
|
|
3601
3686
|
"approval.longTask.what": "Task to stop",
|
|
3602
3687
|
"approval.longTask.signal": "stopping only sends an interrupt signal — wrapping up the run is up to the module",
|
|
3688
|
+
"approval.plugin.name": "Plugin",
|
|
3689
|
+
"approval.plugin.command": "Command",
|
|
3690
|
+
"approval.plugin.note": "Agent says",
|
|
3603
3691
|
"approval.publish.module": "Module",
|
|
3604
3692
|
"approval.publish.target": "Target",
|
|
3605
3693
|
"approval.publish.version": "Version",
|
|
@@ -3795,7 +3883,42 @@ var dictionaries = {
|
|
|
3795
3883
|
"panels.market.confirmUninstallAck": "我明白:卸载后想再用,得重新装一遍。",
|
|
3796
3884
|
"panels.market.confirmYes": "卸载",
|
|
3797
3885
|
"panels.market.confirmNo": "取消",
|
|
3886
|
+
"panels.market.noMarketSource": "索引里没有这个模块的新版本(刷新一次索引再试)",
|
|
3798
3887
|
"panels.market.failed": "没成功:{reason}",
|
|
3888
|
+
"panels.market.askAgent": "问 agent",
|
|
3889
|
+
"panels.market.askAgentCopied": "已复制",
|
|
3890
|
+
"panels.market.askAgentText": "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。",
|
|
3891
|
+
"panels.market.failure.permission": "没装上:没有写入权限",
|
|
3892
|
+
"panels.market.failure.diskFull": "没装上:磁盘满了",
|
|
3893
|
+
"panels.market.failure.sandbox": "没装上:被系统拦住了",
|
|
3894
|
+
"panels.market.failure.unknown": "没装上:原因没认出来",
|
|
3895
|
+
"panels.market.failure.factOwner": "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。",
|
|
3896
|
+
"panels.market.failure.factMode": "{path} 的权限是 {mode},当前账号没有写权限。",
|
|
3897
|
+
"panels.market.failure.factSpace": "{path} 所在的磁盘满了。",
|
|
3898
|
+
"panels.market.failure.factStuck": "这条命令跑在受限环境里,写不进 {path}。",
|
|
3899
|
+
"panels.market.failure.nowhere": "(没认出是哪个目录)",
|
|
3900
|
+
"panels.market.failure.copyFix": "复制修复命令",
|
|
3901
|
+
"panels.market.failure.copied": "已复制",
|
|
3902
|
+
"panels.market.failure.copiedHint": "粘到终端跑一次,回来点「再检测」。",
|
|
3903
|
+
"panels.market.failure.askAgent": "复制给 agent",
|
|
3904
|
+
"panels.market.failure.askAgentText": "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。",
|
|
3905
|
+
"panels.market.failure.askAgentHint": "粘到对话里,让 agent 接着弄。",
|
|
3906
|
+
"panels.market.failure.recheck": "再检测",
|
|
3907
|
+
"panels.market.failure.showOutput": "查看安装输出",
|
|
3908
|
+
"panels.market.failure.hideOutput": "收起安装输出",
|
|
3909
|
+
"panels.market.failure.term.commandLine": "第 {line} 行的命令",
|
|
3910
|
+
"panels.market.failure.term.signal": "被 {signal} 终止",
|
|
3911
|
+
"panels.market.failure.term.exitCode": "退出码 {exitCode}",
|
|
3912
|
+
"panels.market.failure.term.noExitCode": "没有退出码",
|
|
3913
|
+
"panels.market.failure.term.running": "在跑",
|
|
3914
|
+
"panels.market.failure.term.failed": "没跑通",
|
|
3915
|
+
"panels.market.failure.term.done": "跑完了",
|
|
3916
|
+
"panels.market.failure.term.copy": "复制",
|
|
3917
|
+
"panels.market.failure.term.copied": "已复制",
|
|
3918
|
+
"panels.market.failure.term.noOutput": "没有输出",
|
|
3919
|
+
"panels.market.failure.term.collapse": "收起",
|
|
3920
|
+
"panels.market.failure.term.expandAria": "展开剩下的 {hidden} 行",
|
|
3921
|
+
"panels.market.failure.term.expand": "展开 {hidden} 行",
|
|
3799
3922
|
"panels.market.needEnv": "先在启动工作台的终端里设 {env}",
|
|
3800
3923
|
"panels.market.needCommands": "缺这几条命令:{commands}",
|
|
3801
3924
|
"panels.market.needBinary": "先装 {command} 命令",
|
|
@@ -3831,9 +3954,13 @@ var dictionaries = {
|
|
|
3831
3954
|
"panels.market.pluginBroken": "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。",
|
|
3832
3955
|
"panels.market.restartNeeded": "新版装好了,重启一次才生效。",
|
|
3833
3956
|
"panels.market.foot": "装好后到那个项目的面板页勾选它,模块才会出现。",
|
|
3834
|
-
"panels.market.recheck": "重新检查更新",
|
|
3835
3957
|
"panels.market.checkUpdates": "检查更新",
|
|
3958
|
+
"panels.market.checkingNow": "正在检查…",
|
|
3959
|
+
"panels.market.checkFailed": "最近一次没查到,检查网络后重试",
|
|
3836
3960
|
"panels.market.checkedAt": "最近检查:{time}",
|
|
3961
|
+
"panels.market.latestPartial": "{n} 个模块没查成",
|
|
3962
|
+
"panels.market.latestNoRegistry": "没配来源,未检查新版",
|
|
3963
|
+
"panels.market.latestProbeFailed": "问不到源,稍后重试",
|
|
3837
3964
|
"panels.market.justNow": "刚刚",
|
|
3838
3965
|
"panels.market.minutesAgo": "{n} 分钟前",
|
|
3839
3966
|
"panels.market.hoursAgo": "{n} 小时前",
|
|
@@ -4010,6 +4137,9 @@ var dictionaries = {
|
|
|
4010
4137
|
"panels.discover.transportTest": "试这个地址",
|
|
4011
4138
|
"panels.discover.transportPlaceholder": "或贴一个别的地址(公司镜像、别名)",
|
|
4012
4139
|
"panels.discover.transportNeedsAuth": "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。",
|
|
4140
|
+
"panels.discover.transportChange": "换一个地址",
|
|
4141
|
+
"panels.discover.transportChangeHide": "收起",
|
|
4142
|
+
"panels.discover.transportNone": "没有可读的地址",
|
|
4013
4143
|
"panels.discover.expand": "展开版本",
|
|
4014
4144
|
"panels.discover.collapse": "收起版本",
|
|
4015
4145
|
"panels.discover.versionCount": "{n} 个版本",
|
|
@@ -4295,6 +4425,9 @@ var dictionaries = {
|
|
|
4295
4425
|
"approval.record.noSwitch": "录完不会替你切回来(左栏底部会亮一条状态)",
|
|
4296
4426
|
"approval.longTask.what": "要停的那次任务",
|
|
4297
4427
|
"approval.longTask.signal": "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责",
|
|
4428
|
+
"approval.plugin.name": "插件",
|
|
4429
|
+
"approval.plugin.command": "命令",
|
|
4430
|
+
"approval.plugin.note": "agent 说",
|
|
4298
4431
|
"approval.publish.module": "模块",
|
|
4299
4432
|
"approval.publish.target": "目标",
|
|
4300
4433
|
"approval.publish.version": "版本",
|
|
@@ -4818,14 +4951,14 @@ function bumpCapabilityEpoch() {
|
|
|
4818
4951
|
epoch$1 += 1;
|
|
4819
4952
|
}
|
|
4820
4953
|
var current$1 = null;
|
|
4821
|
-
var listeners$
|
|
4954
|
+
var listeners$8 = /* @__PURE__ */ new Set();
|
|
4822
4955
|
function capabilityValue() {
|
|
4823
4956
|
return current$1;
|
|
4824
4957
|
}
|
|
4825
4958
|
function subscribeCapabilities(listener) {
|
|
4826
|
-
listeners$
|
|
4959
|
+
listeners$8.add(listener);
|
|
4827
4960
|
return () => {
|
|
4828
|
-
listeners$
|
|
4961
|
+
listeners$8.delete(listener);
|
|
4829
4962
|
};
|
|
4830
4963
|
}
|
|
4831
4964
|
function setCapabilities(next, rechecked = false) {
|
|
@@ -4838,7 +4971,7 @@ function setCapabilities(next, rechecked = false) {
|
|
|
4838
4971
|
});
|
|
4839
4972
|
if (next === current$1) return;
|
|
4840
4973
|
current$1 = next;
|
|
4841
|
-
for (const listener of [...listeners$
|
|
4974
|
+
for (const listener of [...listeners$8]) listener();
|
|
4842
4975
|
}
|
|
4843
4976
|
function beginProbe() {
|
|
4844
4977
|
probing += 1;
|
|
@@ -4993,7 +5126,7 @@ function useCapabilityMap(refreshToken) {
|
|
|
4993
5126
|
//#endregion
|
|
4994
5127
|
//#region src/app/layouts/panel-hint.ts
|
|
4995
5128
|
var hints = /* @__PURE__ */ new Map();
|
|
4996
|
-
var listeners$
|
|
5129
|
+
var listeners$7 = /* @__PURE__ */ new Set();
|
|
4997
5130
|
function sameHint(left, right) {
|
|
4998
5131
|
if (left === null || right === null) return left === right;
|
|
4999
5132
|
if (left.labelKey !== right.labelKey || left.tone !== right.tone) return false;
|
|
@@ -5005,15 +5138,15 @@ function publishPanelHint(id, hint) {
|
|
|
5005
5138
|
if (sameHint(hints.get(id) ?? null, hint)) return;
|
|
5006
5139
|
if (hint === null) hints.delete(id);
|
|
5007
5140
|
else hints.set(id, hint);
|
|
5008
|
-
for (const listener of [...listeners$
|
|
5141
|
+
for (const listener of [...listeners$7]) listener();
|
|
5009
5142
|
}
|
|
5010
5143
|
function panelHintOf(id) {
|
|
5011
5144
|
return id === null ? null : hints.get(id) ?? null;
|
|
5012
5145
|
}
|
|
5013
5146
|
function subscribePanelHints(listener) {
|
|
5014
|
-
listeners$
|
|
5147
|
+
listeners$7.add(listener);
|
|
5015
5148
|
return () => {
|
|
5016
|
-
listeners$
|
|
5149
|
+
listeners$7.delete(listener);
|
|
5017
5150
|
};
|
|
5018
5151
|
}
|
|
5019
5152
|
function usePanelHint(id) {
|
|
@@ -5029,6 +5162,16 @@ function panelRowName(label, hint, t) {
|
|
|
5029
5162
|
//#endregion
|
|
5030
5163
|
//#region src/app/layouts/rightbar/market-freshness.ts
|
|
5031
5164
|
var MARKET_STALE_MS = VERSION_CHECK_TTL_MS;
|
|
5165
|
+
function checkedAgoText(at, now, t) {
|
|
5166
|
+
const seconds = Math.max(0, Math.floor((now - at) / 1e3));
|
|
5167
|
+
if (seconds < 60) return t("panels.market.justNow");
|
|
5168
|
+
const minutes = Math.floor(seconds / 60);
|
|
5169
|
+
if (minutes < 60) return t("panels.market.minutesAgo", { n: String(minutes) });
|
|
5170
|
+
return t("panels.market.hoursAgo", { n: String(Math.floor(minutes / 60)) });
|
|
5171
|
+
}
|
|
5172
|
+
function checkedAgo(at, t) {
|
|
5173
|
+
return checkedAgoText(at, Date.now(), t);
|
|
5174
|
+
}
|
|
5032
5175
|
function marketSettled(freshness, installedRead) {
|
|
5033
5176
|
return freshness.loaded && installedRead !== false;
|
|
5034
5177
|
}
|
|
@@ -5037,85 +5180,6 @@ function shouldProbeOnEnter(input) {
|
|
|
5037
5180
|
return input.now - input.checkedAt >= input.staleMs;
|
|
5038
5181
|
}
|
|
5039
5182
|
//#endregion
|
|
5040
|
-
//#region src/app/layouts/rightbar/market-settle.ts
|
|
5041
|
-
var MODULE_SETTLE_MS = 15e3;
|
|
5042
|
-
function holdBack(installed, roster, active, previous) {
|
|
5043
|
-
const pending = installed.filter((unit) => !roster.has(unit));
|
|
5044
|
-
const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
|
|
5045
|
-
return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
|
|
5046
|
-
}
|
|
5047
|
-
var WORKBENCH_SWAP_MS = 18e4;
|
|
5048
|
-
function swapLanded(until, installed) {
|
|
5049
|
-
return until !== void 0 && installed === until;
|
|
5050
|
-
}
|
|
5051
|
-
function swapUntil(action, application, latest) {
|
|
5052
|
-
if (action !== "update-workbench" || application !== "restart-required") return void 0;
|
|
5053
|
-
return latest;
|
|
5054
|
-
}
|
|
5055
|
-
var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
|
|
5056
|
-
"update",
|
|
5057
|
-
"update-bundle",
|
|
5058
|
-
"update-dependency",
|
|
5059
|
-
"update-plugin"
|
|
5060
|
-
]);
|
|
5061
|
-
var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
|
|
5062
|
-
"remove-bundle",
|
|
5063
|
-
"uninstall",
|
|
5064
|
-
"uninstall-plugin"
|
|
5065
|
-
]);
|
|
5066
|
-
function awaitsReadBack(action, application, version) {
|
|
5067
|
-
if (application !== "applied") return false;
|
|
5068
|
-
if (REMOVAL_ACTIONS.has(action)) return true;
|
|
5069
|
-
if (!READ_BACK_ACTIONS.has(action)) return false;
|
|
5070
|
-
return action === "update-bundle" ? version !== void 0 : true;
|
|
5071
|
-
}
|
|
5072
|
-
function readBackDone(input) {
|
|
5073
|
-
if (input.action === "update") return !input.outdated;
|
|
5074
|
-
if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
|
|
5075
|
-
if (input.entry.latest === input.entry.installed) return true;
|
|
5076
|
-
if (input.clicked === void 0) return true;
|
|
5077
|
-
return input.entry.installed !== input.clicked;
|
|
5078
|
-
}
|
|
5079
|
-
function settleLanded(input) {
|
|
5080
|
-
if (input.until !== void 0) return swapLanded(input.until, input.installed);
|
|
5081
|
-
if (input.readBack !== true) return true;
|
|
5082
|
-
if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
|
|
5083
|
-
if (input.action === "uninstall-plugin") return input.pluginGone === true;
|
|
5084
|
-
const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
|
|
5085
|
-
if (input.action === "update-dependency") return settled(input.sharedState);
|
|
5086
|
-
if (input.action === "update-plugin") return input.pluginOutdated === false;
|
|
5087
|
-
return readBackDone({
|
|
5088
|
-
action: input.action,
|
|
5089
|
-
entry: input.entry,
|
|
5090
|
-
clicked: input.clicked,
|
|
5091
|
-
outdated: input.outdated
|
|
5092
|
-
});
|
|
5093
|
-
}
|
|
5094
|
-
function tailReason(tail) {
|
|
5095
|
-
if (tail === void 0) return void 0;
|
|
5096
|
-
const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
|
|
5097
|
-
if (last === void 0) return void 0;
|
|
5098
|
-
return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
|
|
5099
|
-
}
|
|
5100
|
-
function selfUpdateStop(input) {
|
|
5101
|
-
const { until, since, update } = input;
|
|
5102
|
-
if (until === void 0 || update === void 0 || update === null) return void 0;
|
|
5103
|
-
if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
|
|
5104
|
-
if (update.to !== until && update.version !== until) return void 0;
|
|
5105
|
-
if (since !== void 0 && update.at !== void 0) {
|
|
5106
|
-
const at = (0, import_dayjs_min.default)(update.at).valueOf();
|
|
5107
|
-
if (Number.isFinite(at) && at < since - 5e3) return void 0;
|
|
5108
|
-
}
|
|
5109
|
-
return {
|
|
5110
|
-
kind: update.state,
|
|
5111
|
-
...update.version === void 0 ? {} : { version: update.version },
|
|
5112
|
-
...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
|
|
5113
|
-
};
|
|
5114
|
-
}
|
|
5115
|
-
function holdWindowMs(until) {
|
|
5116
|
-
return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
|
|
5117
|
-
}
|
|
5118
|
-
//#endregion
|
|
5119
5183
|
//#region src/app/layouts/rightbar/market-shared-rows.ts
|
|
5120
5184
|
var SHARED_STATE_KEY = {
|
|
5121
5185
|
checking: "panels.market.checking",
|
|
@@ -5250,6 +5314,26 @@ function installedIdSet(installed) {
|
|
|
5250
5314
|
if (installed === void 0) return null;
|
|
5251
5315
|
return new Set(installed.map((item) => item.unit));
|
|
5252
5316
|
}
|
|
5317
|
+
function latestUnavailableNote(unavailable) {
|
|
5318
|
+
if (unavailable === "no-registry") return {
|
|
5319
|
+
key: "panels.market.latestNoRegistry",
|
|
5320
|
+
params: {}
|
|
5321
|
+
};
|
|
5322
|
+
if (unavailable === "probe-failed") return {
|
|
5323
|
+
key: "panels.market.latestProbeFailed",
|
|
5324
|
+
params: {}
|
|
5325
|
+
};
|
|
5326
|
+
}
|
|
5327
|
+
function latestCheckSummary(modules) {
|
|
5328
|
+
let checked = 0;
|
|
5329
|
+
let unknown = 0;
|
|
5330
|
+
for (const module of modules ?? []) if (module.latest !== void 0) checked += 1;
|
|
5331
|
+
else if (module.latestUnavailable === "no-registry" || module.latestUnavailable === "probe-failed") unknown += 1;
|
|
5332
|
+
return {
|
|
5333
|
+
checked,
|
|
5334
|
+
unknown
|
|
5335
|
+
};
|
|
5336
|
+
}
|
|
5253
5337
|
function installedRows(modules, manifests, listed, names, defaults = /* @__PURE__ */ new Set(), changed = {}) {
|
|
5254
5338
|
const titles = new Map(manifests.map((manifest) => [manifest.id, manifest.titleKey]));
|
|
5255
5339
|
const rows = [];
|
|
@@ -5263,16 +5347,17 @@ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE_
|
|
|
5263
5347
|
const pending = !loaded && refused.length === 0;
|
|
5264
5348
|
const titleKey = titles.get(module.unit);
|
|
5265
5349
|
const remembered = titleKey === void 0 ? names?.get(module.unit) : void 0;
|
|
5350
|
+
const note = refused.length > 0 ? {
|
|
5351
|
+
key: "panels.market.moduleRefused",
|
|
5352
|
+
params: {}
|
|
5353
|
+
} : latestUnavailableNote(module.latestUnavailable);
|
|
5266
5354
|
rows.push({
|
|
5267
5355
|
id: module.unit,
|
|
5268
5356
|
titleKey: titleKey ?? module.unit,
|
|
5269
5357
|
...remembered === void 0 ? {} : { label: remembered },
|
|
5270
5358
|
state: outdated ? "outdated" : refused.length > 0 ? "unusable" : pending ? "inactive" : "installed",
|
|
5271
5359
|
...pending ? { hint: "panels.market.moduleRestartHint" } : blocked === void 0 ? {} : { hint: updateBlockHintOf(blocked) },
|
|
5272
|
-
...
|
|
5273
|
-
key: "panels.market.moduleRefused",
|
|
5274
|
-
params: {}
|
|
5275
|
-
} },
|
|
5360
|
+
...note === void 0 ? {} : { note },
|
|
5276
5361
|
...module.local === true ? { local: true } : {},
|
|
5277
5362
|
pkg: module.pkg,
|
|
5278
5363
|
canInstall: false,
|
|
@@ -5285,8 +5370,10 @@ function installedRows(modules, manifests, listed, names, defaults = /* @__PURE_
|
|
|
5285
5370
|
...outdated ? { moduleUpdate: {
|
|
5286
5371
|
installed: module.installed,
|
|
5287
5372
|
latest,
|
|
5288
|
-
...blocked === void 0 ? {} : { blocked }
|
|
5373
|
+
...blocked === void 0 ? {} : { blocked },
|
|
5374
|
+
...module.market === void 0 ? {} : { market: module.market }
|
|
5289
5375
|
} } : {},
|
|
5376
|
+
...module.market === void 0 ? {} : { market: module.market },
|
|
5290
5377
|
defaultShown: defaults.has(module.unit),
|
|
5291
5378
|
defaultChanged: changed[module.unit] ?? 0
|
|
5292
5379
|
});
|
|
@@ -5297,6 +5384,13 @@ var SWITCH_LOCKED = /* @__PURE__ */ new Set(["unusable", "broken"]);
|
|
|
5297
5384
|
function marketSwitchLocked(row) {
|
|
5298
5385
|
return SWITCH_LOCKED.has(row.state);
|
|
5299
5386
|
}
|
|
5387
|
+
function marketAsksAgent(row) {
|
|
5388
|
+
if (row.workbench === true || row.plugin === true) return false;
|
|
5389
|
+
if (row.state === "installed" || row.state === "inactive" || row.state === "outdated") return false;
|
|
5390
|
+
if (row.state === "checking" || row.state === "pending-restart") return false;
|
|
5391
|
+
if (row.state === "pending-followup") return false;
|
|
5392
|
+
return !marketActions$1(row).includes("install");
|
|
5393
|
+
}
|
|
5300
5394
|
function marketActions$1(row) {
|
|
5301
5395
|
if (row.workbench === true) {
|
|
5302
5396
|
if (row.followUp !== void 0 && row.state === "pending-followup") return row.followUp.hard ? ["migrate-workbench"] : ["migrate-workbench", "dismiss-followup"];
|
|
@@ -5305,7 +5399,7 @@ function marketActions$1(row) {
|
|
|
5305
5399
|
if (row.plugin === true) return [...row.canUpdate ? ["update-plugin"] : [], ...row.canUninstall ? ["uninstall-plugin"] : []];
|
|
5306
5400
|
return [
|
|
5307
5401
|
...row.canInstall ? ["install"] : [],
|
|
5308
|
-
...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? ["update-bundle"] : [],
|
|
5402
|
+
...row.moduleUpdate === void 0 ? row.canUpdate ? ["update"] : [] : row.moduleUpdate.blocked === void 0 ? [row.market === void 0 || row.pkg === void 0 ? "update-bundle" : "install-version"] : [],
|
|
5309
5403
|
...row.canUninstall ? [row.pkg === void 0 ? "uninstall" : "remove-bundle"] : []
|
|
5310
5404
|
];
|
|
5311
5405
|
}
|
|
@@ -5394,7 +5488,8 @@ function marketUpdatesOf(modules) {
|
|
|
5394
5488
|
installed: module.installed,
|
|
5395
5489
|
...local || module.latest === void 0 ? {} : { latest: module.latest },
|
|
5396
5490
|
...local || module.latest === void 0 || module.latestBlocked === void 0 ? {} : { blocked: module.latestBlocked },
|
|
5397
|
-
...local ? { local: true } : {}
|
|
5491
|
+
...local ? { local: true } : {},
|
|
5492
|
+
...local || module.market === void 0 ? {} : { market: module.market }
|
|
5398
5493
|
};
|
|
5399
5494
|
}
|
|
5400
5495
|
return next;
|
|
@@ -5418,6 +5513,18 @@ function marketSections(rows) {
|
|
|
5418
5513
|
rows: rest
|
|
5419
5514
|
}]];
|
|
5420
5515
|
}
|
|
5516
|
+
function checkingRows(rows, scope) {
|
|
5517
|
+
return rows.map((row) => {
|
|
5518
|
+
if (row.state !== "unknown" && row.state !== "unchecked") return row;
|
|
5519
|
+
if (!scope.all && !scope.units.has(row.id)) return row;
|
|
5520
|
+
return {
|
|
5521
|
+
...row,
|
|
5522
|
+
state: "checking",
|
|
5523
|
+
hint: void 0,
|
|
5524
|
+
note: void 0
|
|
5525
|
+
};
|
|
5526
|
+
});
|
|
5527
|
+
}
|
|
5421
5528
|
function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE__ */ new Set(), changed = {}) {
|
|
5422
5529
|
const rows = [];
|
|
5423
5530
|
for (const manifest of manifests) {
|
|
@@ -5433,7 +5540,8 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
|
|
|
5433
5540
|
const moduleUpdate = entry === void 0 || entry.latest === void 0 || entry.latest === entry.installed ? void 0 : {
|
|
5434
5541
|
installed: entry.installed,
|
|
5435
5542
|
latest: entry.latest,
|
|
5436
|
-
...entry.blocked === void 0 ? {} : { blocked: entry.blocked }
|
|
5543
|
+
...entry.blocked === void 0 ? {} : { blocked: entry.blocked },
|
|
5544
|
+
...entry.market === void 0 ? {} : { market: entry.market }
|
|
5437
5545
|
};
|
|
5438
5546
|
const shown = moduleUpdate === void 0 ? state : "outdated";
|
|
5439
5547
|
const hint = moduleUpdate?.blocked === void 0 ? shown === "unknown" || shown === "unchecked" ? "panels.market.uncheckedHint" : void 0 : updateBlockHintOf(moduleUpdate.blocked);
|
|
@@ -5450,6 +5558,10 @@ function marketRows(manifests, capabilities, updates = {}, defaults = /* @__PURE
|
|
|
5450
5558
|
...entry.latest === void 0 ? {} : { latest: entry.latest }
|
|
5451
5559
|
} },
|
|
5452
5560
|
...moduleUpdate === void 0 ? {} : { moduleUpdate },
|
|
5561
|
+
...entry?.market === void 0 ? {} : {
|
|
5562
|
+
market: entry.market,
|
|
5563
|
+
pkg: entry.market.pkg
|
|
5564
|
+
},
|
|
5453
5565
|
...moduleUpdate === void 0 ? note === void 0 ? {} : { note } : {},
|
|
5454
5566
|
...local ? { local: true } : {},
|
|
5455
5567
|
defaultShown: defaults.has(manifest.id),
|
|
@@ -5541,8 +5653,9 @@ var UPDATES_KEY = "panels.market.hasNew";
|
|
|
5541
5653
|
function isProblem(row) {
|
|
5542
5654
|
return row.broken === true || row.state === "broken" || row.state === "unusable" || row.note?.key === "panels.market.moduleRefused";
|
|
5543
5655
|
}
|
|
5544
|
-
function isRestart(row) {
|
|
5545
|
-
|
|
5656
|
+
function isRestart(row, installing) {
|
|
5657
|
+
if (row.state === "pending-restart") return true;
|
|
5658
|
+
return !installing && row.state === "inactive";
|
|
5546
5659
|
}
|
|
5547
5660
|
function isUnknown(row, rosterRead) {
|
|
5548
5661
|
return row.state === "unchecked" || rosterRead && row.state === "unknown";
|
|
@@ -5552,9 +5665,10 @@ function awaitsRestart(manifests, installed) {
|
|
|
5552
5665
|
return installed.some((module) => !loaded.has(module.unit) && refusalReasons(module.refused, module.clientRefused).length === 0);
|
|
5553
5666
|
}
|
|
5554
5667
|
function marketHintOf(input) {
|
|
5555
|
-
const
|
|
5556
|
-
const
|
|
5557
|
-
const
|
|
5668
|
+
const installing = input.installing === true;
|
|
5669
|
+
const held = /* @__PURE__ */ new Set([...input.busy ?? [], ...input.applied ?? []]);
|
|
5670
|
+
const marketable = marketCatalog(input.manifests, input.installable).filter((manifest) => !held.has(manifest.id));
|
|
5671
|
+
const installed = (input.installed ?? []).filter((module) => !held.has(module.unit));
|
|
5558
5672
|
const catalog = marketRows(marketable, input.capabilities, marketUpdatesOf(input.modules));
|
|
5559
5673
|
const listed = new Set(catalog.map((row) => row.id));
|
|
5560
5674
|
const self = workbenchRow(input.workbench);
|
|
@@ -5565,10 +5679,10 @@ function marketHintOf(input) {
|
|
|
5565
5679
|
...self === void 0 ? [] : [self]
|
|
5566
5680
|
];
|
|
5567
5681
|
const problem = rows.some(isProblem);
|
|
5568
|
-
const restart = rows.some(isRestart) || awaitsRestart(input.manifests, installed);
|
|
5682
|
+
const restart = rows.some((row) => isRestart(row, installing)) || !installing && awaitsRestart(input.manifests, installed);
|
|
5569
5683
|
const followUp = rows.some((row) => row.state === "pending-followup");
|
|
5570
5684
|
const rosterRead = input.modules !== null;
|
|
5571
|
-
const unknown = rows.some((row) => isUnknown(row, rosterRead));
|
|
5685
|
+
const unknown = !installing && rows.some((row) => isUnknown(row, rosterRead));
|
|
5572
5686
|
const updates = marketHasUpdates(rows, sharedRows(marketable, input.capabilities));
|
|
5573
5687
|
const more = [];
|
|
5574
5688
|
if (problem) {
|
|
@@ -5616,11 +5730,91 @@ function marketHintOf(input) {
|
|
|
5616
5730
|
return null;
|
|
5617
5731
|
}
|
|
5618
5732
|
//#endregion
|
|
5733
|
+
//#region src/app/layouts/rightbar/market-settle.ts
|
|
5734
|
+
var MODULE_SETTLE_MS = 15e3;
|
|
5735
|
+
function holdBack(installed, roster, active, previous) {
|
|
5736
|
+
const pending = installed.filter((unit) => !roster.has(unit));
|
|
5737
|
+
const fresh = previous === null ? [] : pending.filter((unit) => !previous.has(unit));
|
|
5738
|
+
return pending.filter((unit) => active.has(unit) || fresh.includes(unit));
|
|
5739
|
+
}
|
|
5740
|
+
var WORKBENCH_SWAP_MS = 18e4;
|
|
5741
|
+
function swapLanded(until, installed) {
|
|
5742
|
+
return until !== void 0 && installed === until;
|
|
5743
|
+
}
|
|
5744
|
+
function swapUntil(action, application, latest) {
|
|
5745
|
+
if (action !== "update-workbench" || application !== "restart-required") return void 0;
|
|
5746
|
+
return latest;
|
|
5747
|
+
}
|
|
5748
|
+
var READ_BACK_ACTIONS = /* @__PURE__ */ new Set([
|
|
5749
|
+
"update",
|
|
5750
|
+
"update-bundle",
|
|
5751
|
+
"install-version",
|
|
5752
|
+
"update-dependency",
|
|
5753
|
+
"update-plugin"
|
|
5754
|
+
]);
|
|
5755
|
+
var REMOVAL_ACTIONS = /* @__PURE__ */ new Set([
|
|
5756
|
+
"remove-bundle",
|
|
5757
|
+
"uninstall",
|
|
5758
|
+
"uninstall-plugin"
|
|
5759
|
+
]);
|
|
5760
|
+
function awaitsReadBack(action, application, version) {
|
|
5761
|
+
if (application !== "applied") return false;
|
|
5762
|
+
if (REMOVAL_ACTIONS.has(action)) return true;
|
|
5763
|
+
if (!READ_BACK_ACTIONS.has(action)) return false;
|
|
5764
|
+
return action === "update-bundle" || action === "install-version" ? version !== void 0 : true;
|
|
5765
|
+
}
|
|
5766
|
+
function readBackDone(input) {
|
|
5767
|
+
if (input.action === "update") return !input.outdated;
|
|
5768
|
+
if (input.entry === void 0 || input.entry.local === true || input.entry.latest === void 0) return true;
|
|
5769
|
+
if (input.entry.latest === input.entry.installed) return true;
|
|
5770
|
+
if (input.clicked === void 0) return true;
|
|
5771
|
+
return input.entry.installed !== input.clicked;
|
|
5772
|
+
}
|
|
5773
|
+
function settleLanded(input) {
|
|
5774
|
+
if (input.until !== void 0) return swapLanded(input.until, input.installed);
|
|
5775
|
+
if (input.readBack !== true) return true;
|
|
5776
|
+
if (input.action === "remove-bundle" || input.action === "uninstall") return input.unitGone === true;
|
|
5777
|
+
if (input.action === "uninstall-plugin") return input.pluginGone === true;
|
|
5778
|
+
const settled = (state) => state !== void 0 && state !== "outdated" && state !== "unsatisfied" && state !== "checking" && state !== "unchecked";
|
|
5779
|
+
if (input.action === "update-dependency") return settled(input.sharedState);
|
|
5780
|
+
if (input.action === "update-plugin") return input.pluginOutdated === false;
|
|
5781
|
+
return readBackDone({
|
|
5782
|
+
action: input.action,
|
|
5783
|
+
entry: input.entry,
|
|
5784
|
+
clicked: input.clicked,
|
|
5785
|
+
outdated: input.outdated
|
|
5786
|
+
});
|
|
5787
|
+
}
|
|
5788
|
+
function tailReason(tail) {
|
|
5789
|
+
if (tail === void 0) return void 0;
|
|
5790
|
+
const last = tail.split(" / ").map((part) => part.trim()).filter((part) => part !== "").at(-1);
|
|
5791
|
+
if (last === void 0) return void 0;
|
|
5792
|
+
return last.length <= 240 ? last : `${last.slice(0, 240)}…`;
|
|
5793
|
+
}
|
|
5794
|
+
function selfUpdateStop(input) {
|
|
5795
|
+
const { until, since, update } = input;
|
|
5796
|
+
if (until === void 0 || update === void 0 || update === null) return void 0;
|
|
5797
|
+
if (update.state !== "failed" && update.state !== "rolled-back") return void 0;
|
|
5798
|
+
if (update.to !== until && update.version !== until) return void 0;
|
|
5799
|
+
if (since !== void 0 && update.at !== void 0) {
|
|
5800
|
+
const at = (0, import_dayjs_min.default)(update.at).valueOf();
|
|
5801
|
+
if (Number.isFinite(at) && at < since - 5e3) return void 0;
|
|
5802
|
+
}
|
|
5803
|
+
return {
|
|
5804
|
+
kind: update.state,
|
|
5805
|
+
...update.version === void 0 ? {} : { version: update.version },
|
|
5806
|
+
...update.state === "failed" && tailReason(update.tail) !== void 0 ? { reason: tailReason(update.tail) } : {}
|
|
5807
|
+
};
|
|
5808
|
+
}
|
|
5809
|
+
function holdWindowMs(until) {
|
|
5810
|
+
return until === void 0 ? MODULE_SETTLE_MS : WORKBENCH_SWAP_MS;
|
|
5811
|
+
}
|
|
5812
|
+
//#endregion
|
|
5619
5813
|
//#region src/app/layouts/rightbar/market-busy.ts
|
|
5620
|
-
var listeners$
|
|
5814
|
+
var listeners$6 = /* @__PURE__ */ new Set();
|
|
5621
5815
|
var published = /* @__PURE__ */ new Map();
|
|
5622
5816
|
var live$2 = /* @__PURE__ */ new Set();
|
|
5623
|
-
var timer$
|
|
5817
|
+
var timer$3;
|
|
5624
5818
|
var MARKET_BUSY_MS = WORKBENCH_SWAP_MS;
|
|
5625
5819
|
function marketBusyIds() {
|
|
5626
5820
|
return live$2;
|
|
@@ -5630,12 +5824,12 @@ function publishMarketBusy(ids) {
|
|
|
5630
5824
|
const next = /* @__PURE__ */ new Map();
|
|
5631
5825
|
for (const id of new Set(ids)) next.set(id, published.get(id) ?? now);
|
|
5632
5826
|
published = next;
|
|
5633
|
-
refresh(now);
|
|
5827
|
+
refresh$1(now);
|
|
5634
5828
|
}
|
|
5635
5829
|
function subscribeMarketBusy(listener) {
|
|
5636
|
-
listeners$
|
|
5830
|
+
listeners$6.add(listener);
|
|
5637
5831
|
return () => {
|
|
5638
|
-
listeners$
|
|
5832
|
+
listeners$6.delete(listener);
|
|
5639
5833
|
};
|
|
5640
5834
|
}
|
|
5641
5835
|
function useMarketBusy() {
|
|
@@ -5651,29 +5845,100 @@ function sameSet(left, right) {
|
|
|
5651
5845
|
for (const id of left) if (!right.has(id)) return false;
|
|
5652
5846
|
return true;
|
|
5653
5847
|
}
|
|
5654
|
-
function schedule$
|
|
5655
|
-
if (timer$
|
|
5656
|
-
timer$
|
|
5848
|
+
function schedule$2(now) {
|
|
5849
|
+
if (timer$3 !== void 0) clearTimeout(timer$3);
|
|
5850
|
+
timer$3 = void 0;
|
|
5657
5851
|
let soonest = Number.POSITIVE_INFINITY;
|
|
5658
5852
|
for (const at of published.values()) soonest = Math.min(soonest, at);
|
|
5659
5853
|
if (soonest === Number.POSITIVE_INFINITY) return;
|
|
5660
|
-
timer$
|
|
5854
|
+
timer$3 = setTimeout(() => refresh$1(Date.now()), Math.max(0, soonest + MARKET_BUSY_MS - now) + 1);
|
|
5661
5855
|
}
|
|
5662
|
-
function refresh(now) {
|
|
5856
|
+
function refresh$1(now) {
|
|
5663
5857
|
for (const [id, at] of published) if (now - at >= MARKET_BUSY_MS) published.delete(id);
|
|
5664
5858
|
const next = new Set(published.keys());
|
|
5665
5859
|
if (!sameSet(live$2, next)) {
|
|
5666
5860
|
live$2 = next;
|
|
5861
|
+
for (const listener of [...listeners$6]) listener();
|
|
5862
|
+
}
|
|
5863
|
+
schedule$2(now);
|
|
5864
|
+
}
|
|
5865
|
+
//#endregion
|
|
5866
|
+
//#region src/app/layouts/rightbar/market-install.ts
|
|
5867
|
+
var NO_UNITS$2 = /* @__PURE__ */ new Set();
|
|
5868
|
+
var IDLE$1 = {
|
|
5869
|
+
installing: false,
|
|
5870
|
+
applied: NO_UNITS$2
|
|
5871
|
+
};
|
|
5872
|
+
var tokens = /* @__PURE__ */ new Set();
|
|
5873
|
+
var applied = /* @__PURE__ */ new Map();
|
|
5874
|
+
var listeners$5 = /* @__PURE__ */ new Set();
|
|
5875
|
+
var snapshot$1 = IDLE$1;
|
|
5876
|
+
var timer$2;
|
|
5877
|
+
function sameUnits(left, right) {
|
|
5878
|
+
if (left.size !== right.size) return false;
|
|
5879
|
+
for (const unit of left) if (!right.has(unit)) return false;
|
|
5880
|
+
return true;
|
|
5881
|
+
}
|
|
5882
|
+
function schedule$1(now) {
|
|
5883
|
+
if (timer$2 !== void 0) clearTimeout(timer$2);
|
|
5884
|
+
timer$2 = void 0;
|
|
5885
|
+
if (applied.size === 0) return;
|
|
5886
|
+
let soonest = Number.POSITIVE_INFINITY;
|
|
5887
|
+
for (const at of applied.values()) soonest = Math.min(soonest, at);
|
|
5888
|
+
timer$2 = setTimeout(() => refresh(Date.now()), Math.max(0, soonest + MODULE_SETTLE_MS - now) + 1);
|
|
5889
|
+
}
|
|
5890
|
+
function refresh(now) {
|
|
5891
|
+
for (const [unit, at] of applied) if (now - at >= 15e3) applied.delete(unit);
|
|
5892
|
+
const next = tokens.size === 0 && applied.size === 0 ? IDLE$1 : {
|
|
5893
|
+
installing: tokens.size > 0,
|
|
5894
|
+
applied: applied.size === 0 ? NO_UNITS$2 : new Set(applied.keys())
|
|
5895
|
+
};
|
|
5896
|
+
if (next.installing !== snapshot$1.installing || !sameUnits(next.applied, snapshot$1.applied)) {
|
|
5897
|
+
snapshot$1 = next;
|
|
5667
5898
|
for (const listener of [...listeners$5]) listener();
|
|
5668
5899
|
}
|
|
5669
5900
|
schedule$1(now);
|
|
5670
5901
|
}
|
|
5902
|
+
function marketInstallState() {
|
|
5903
|
+
return snapshot$1;
|
|
5904
|
+
}
|
|
5905
|
+
function subscribeMarketInstall(listener) {
|
|
5906
|
+
listeners$5.add(listener);
|
|
5907
|
+
return () => {
|
|
5908
|
+
listeners$5.delete(listener);
|
|
5909
|
+
};
|
|
5910
|
+
}
|
|
5911
|
+
function publishMarketInstalling(token, active) {
|
|
5912
|
+
if (active) tokens.add(token);
|
|
5913
|
+
else tokens.delete(token);
|
|
5914
|
+
refresh(Date.now());
|
|
5915
|
+
}
|
|
5916
|
+
function publishMarketApplied(units) {
|
|
5917
|
+
const now = Date.now();
|
|
5918
|
+
for (const unit of new Set(units)) if (unit !== "" && !applied.has(unit)) applied.set(unit, now);
|
|
5919
|
+
refresh(now);
|
|
5920
|
+
}
|
|
5921
|
+
function useMarketInstallState() {
|
|
5922
|
+
return useSyncExternalStore(subscribeMarketInstall, marketInstallState);
|
|
5923
|
+
}
|
|
5924
|
+
function usePublishMarketInstalling(token, active) {
|
|
5925
|
+
useEffect(() => {
|
|
5926
|
+
publishMarketInstalling(token, active);
|
|
5927
|
+
return () => publishMarketInstalling(token, false);
|
|
5928
|
+
}, [token, active]);
|
|
5929
|
+
}
|
|
5671
5930
|
//#endregion
|
|
5672
5931
|
//#region src/shared/api/write-outcome.ts
|
|
5673
5932
|
function writeRoute(channel, resource) {
|
|
5674
5933
|
if (channel === "provision") return "provision";
|
|
5675
5934
|
return `${channel}/${resource}`;
|
|
5676
5935
|
}
|
|
5936
|
+
function installFailureOf(value) {
|
|
5937
|
+
if (typeof value !== "object" || value === null) return void 0;
|
|
5938
|
+
const record = value;
|
|
5939
|
+
if (typeof record.kind !== "string" || typeof record.command !== "string") return void 0;
|
|
5940
|
+
return value;
|
|
5941
|
+
}
|
|
5677
5942
|
function writeOutcomeOf(response, networkText) {
|
|
5678
5943
|
if (response === null) return {
|
|
5679
5944
|
ok: false,
|
|
@@ -5685,11 +5950,13 @@ function writeOutcomeOf(response, networkText) {
|
|
|
5685
5950
|
const fallback = typeof box.text === "string" && box.text !== "" ? box.text : networkText;
|
|
5686
5951
|
const detail = typeof box.error?.detail === "string" ? box.error.detail : void 0;
|
|
5687
5952
|
const helpUrl = typeof box.error?.helpUrl === "string" && box.error.helpUrl !== "" ? box.error.helpUrl : void 0;
|
|
5953
|
+
const failure = installFailureOf(box.error?.failure);
|
|
5688
5954
|
return {
|
|
5689
5955
|
ok: false,
|
|
5690
5956
|
message: own ?? fallback,
|
|
5691
5957
|
...detail === void 0 ? {} : { detail },
|
|
5692
|
-
...helpUrl === void 0 ? {} : { helpUrl }
|
|
5958
|
+
...helpUrl === void 0 ? {} : { helpUrl },
|
|
5959
|
+
...failure === void 0 ? {} : { failure }
|
|
5693
5960
|
};
|
|
5694
5961
|
}
|
|
5695
5962
|
return {
|
|
@@ -5896,138 +6163,138 @@ function useMarketTransient(input) {
|
|
|
5896
6163
|
};
|
|
5897
6164
|
}
|
|
5898
6165
|
var MarketPage_module_default = {
|
|
5899
|
-
marketList: "
|
|
5900
|
-
marketRow: "
|
|
5901
|
-
marketIcon: "
|
|
5902
|
-
marketMain: "
|
|
5903
|
-
marketName: "
|
|
5904
|
-
marketStatus: "
|
|
5905
|
-
marketStateText: "
|
|
5906
|
-
marketSep: "
|
|
5907
|
-
marketReason: "
|
|
5908
|
-
marketVersion: "
|
|
5909
|
-
marketLocalTag: "
|
|
5910
|
-
marketEnd: "
|
|
5911
|
-
marketSwitchSeat: "
|
|
5912
|
-
marketActions: "
|
|
5913
|
-
marketUpdateAction: "
|
|
5914
|
-
marketSelfDivider: "
|
|
5915
|
-
marketSection: "
|
|
5916
|
-
marketSectionHead: "
|
|
5917
|
-
marketSectionIcon: "
|
|
5918
|
-
marketSectionTitle: "
|
|
5919
|
-
marketSectionCount: "
|
|
5920
|
-
|
|
5921
|
-
|
|
5922
|
-
|
|
5923
|
-
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
|
|
5927
|
-
|
|
5928
|
-
|
|
5929
|
-
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
|
|
5933
|
-
|
|
5934
|
-
|
|
5935
|
-
|
|
5936
|
-
|
|
5937
|
-
|
|
5938
|
-
|
|
5939
|
-
|
|
5940
|
-
|
|
5941
|
-
|
|
5942
|
-
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5949
|
-
|
|
5950
|
-
|
|
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
|
-
discoverTransportTitle: "
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
discoverTransportCustom: "
|
|
6004
|
-
discoverTransportInput: "
|
|
6005
|
-
discoverInstallBar: "
|
|
6006
|
-
discoverInstallText: "
|
|
6007
|
-
discoverDialog: "
|
|
6008
|
-
discoverDialogBody: "
|
|
6009
|
-
discoverSourceList: "
|
|
6010
|
-
discoverSourceRow: "
|
|
6011
|
-
discoverSourceConfirm: "
|
|
6012
|
-
discoverSourcePick: "
|
|
6013
|
-
discoverSourceRadio: "
|
|
6014
|
-
discoverSourceMain: "
|
|
6015
|
-
discoverSourceHead: "
|
|
6016
|
-
discoverSourceUrl: "
|
|
6017
|
-
discoverSourceMore: "
|
|
6018
|
-
discoverSourceLoading: "
|
|
6019
|
-
discoverSourceHint: "
|
|
6020
|
-
discoverSourceError: "
|
|
6021
|
-
discoverSourceForm: "
|
|
6022
|
-
discoverGrow: "
|
|
6023
|
-
discoverField: "
|
|
6024
|
-
discoverFieldLabel: "
|
|
6025
|
-
discoverConfirmHead: "
|
|
6026
|
-
discoverSkeletonFill: "
|
|
6027
|
-
"wb-skeleton": "_wb-
|
|
6028
|
-
discoverSkeletonBar: "
|
|
6029
|
-
discoverSkeletonTitle: "
|
|
6030
|
-
discoverSkeletonDesc: "
|
|
6166
|
+
marketList: "_marketList_485ym_1",
|
|
6167
|
+
marketRow: "_marketRow_485ym_10",
|
|
6168
|
+
marketIcon: "_marketIcon_485ym_20",
|
|
6169
|
+
marketMain: "_marketMain_485ym_32",
|
|
6170
|
+
marketName: "_marketName_485ym_39",
|
|
6171
|
+
marketStatus: "_marketStatus_485ym_48",
|
|
6172
|
+
marketStateText: "_marketStateText_485ym_58",
|
|
6173
|
+
marketSep: "_marketSep_485ym_62",
|
|
6174
|
+
marketReason: "_marketReason_485ym_66",
|
|
6175
|
+
marketVersion: "_marketVersion_485ym_72",
|
|
6176
|
+
marketLocalTag: "_marketLocalTag_485ym_94",
|
|
6177
|
+
marketEnd: "_marketEnd_485ym_105",
|
|
6178
|
+
marketSwitchSeat: "_marketSwitchSeat_485ym_112",
|
|
6179
|
+
marketActions: "_marketActions_485ym_125",
|
|
6180
|
+
marketUpdateAction: "_marketUpdateAction_485ym_131",
|
|
6181
|
+
marketSelfDivider: "_marketSelfDivider_485ym_137",
|
|
6182
|
+
marketSection: "_marketSection_485ym_143",
|
|
6183
|
+
marketSectionHead: "_marketSectionHead_485ym_150",
|
|
6184
|
+
marketSectionIcon: "_marketSectionIcon_485ym_156",
|
|
6185
|
+
marketSectionTitle: "_marketSectionTitle_485ym_163",
|
|
6186
|
+
marketSectionCount: "_marketSectionCount_485ym_169",
|
|
6187
|
+
marketSectionAction: "_marketSectionAction_485ym_175",
|
|
6188
|
+
marketSectionQuiet: "_marketSectionQuiet_485ym_183",
|
|
6189
|
+
marketProgress: "_marketProgress_485ym_196",
|
|
6190
|
+
marketNote: "_marketNote_485ym_206",
|
|
6191
|
+
marketFailure: "_marketFailure_485ym_213",
|
|
6192
|
+
marketFailureSeat: "_marketFailureSeat_485ym_220",
|
|
6193
|
+
marketEmpty: "_marketEmpty_485ym_225",
|
|
6194
|
+
marketPage: "_marketPage_485ym_230",
|
|
6195
|
+
marketPageHead: "_marketPageHead_485ym_248",
|
|
6196
|
+
marketPageTitle: "_marketPageTitle_485ym_256",
|
|
6197
|
+
marketPageIntro: "_marketPageIntro_485ym_261",
|
|
6198
|
+
marketPageTools: "_marketPageTools_485ym_267",
|
|
6199
|
+
marketPanel: "_marketPanel_485ym_276",
|
|
6200
|
+
marketTabs: "_marketTabs_485ym_286",
|
|
6201
|
+
marketTabList: "_marketTabList_485ym_291",
|
|
6202
|
+
marketAddButton: "_marketAddButton_485ym_296",
|
|
6203
|
+
marketEmptyTitle: "_marketEmptyTitle_485ym_313",
|
|
6204
|
+
discoverPage: "_discoverPage_485ym_318",
|
|
6205
|
+
discoverBar: "_discoverBar_485ym_325",
|
|
6206
|
+
discoverTools: "_discoverTools_485ym_332",
|
|
6207
|
+
discoverMarket: "_discoverMarket_485ym_338",
|
|
6208
|
+
discoverMarketButton: "_discoverMarketButton_485ym_343",
|
|
6209
|
+
discoverMarketName: "_discoverMarketName_485ym_350",
|
|
6210
|
+
discoverLabels: "_discoverLabels_485ym_356",
|
|
6211
|
+
discoverSort: "_discoverSort_485ym_361",
|
|
6212
|
+
discoverRefresh: "_discoverRefresh_485ym_366",
|
|
6213
|
+
discoverSearch: "_discoverSearch_485ym_370",
|
|
6214
|
+
discoverSearchField: "_discoverSearchField_485ym_378",
|
|
6215
|
+
discoverSearchFieldFilled: "_discoverSearchFieldFilled_485ym_383",
|
|
6216
|
+
discoverSearchClear: "_discoverSearchClear_485ym_392",
|
|
6217
|
+
discoverChips: "_discoverChips_485ym_443",
|
|
6218
|
+
discoverList: "_discoverList_485ym_450",
|
|
6219
|
+
discoverCard: "_discoverCard_485ym_459",
|
|
6220
|
+
discoverArtwork: "_discoverArtwork_485ym_473",
|
|
6221
|
+
discoverArtworkImage: "_discoverArtworkImage_485ym_485",
|
|
6222
|
+
discoverMain: "_discoverMain_485ym_489",
|
|
6223
|
+
discoverTitleRow: "_discoverTitleRow_485ym_497",
|
|
6224
|
+
discoverCardOpen: "_discoverCardOpen_485ym_505",
|
|
6225
|
+
discoverStrong: "_discoverStrong_485ym_536",
|
|
6226
|
+
discoverDesc: "_discoverDesc_485ym_542",
|
|
6227
|
+
discoverMeta: "_discoverMeta_485ym_551",
|
|
6228
|
+
discoverMuted: "_discoverMuted_485ym_558",
|
|
6229
|
+
discoverEnd: "_discoverEnd_485ym_564",
|
|
6230
|
+
discoverUpdateAction: "_discoverUpdateAction_485ym_573",
|
|
6231
|
+
discoverBlocked: "_discoverBlocked_485ym_578",
|
|
6232
|
+
discoverEmpty: "_discoverEmpty_485ym_583",
|
|
6233
|
+
discoverEmptyTitle: "_discoverEmptyTitle_485ym_592",
|
|
6234
|
+
discoverDetail: "_discoverDetail_485ym_602",
|
|
6235
|
+
discoverCrumb: "_discoverCrumb_485ym_608",
|
|
6236
|
+
discoverCrumbIcon: "_discoverCrumbIcon_485ym_631",
|
|
6237
|
+
discoverDetailHead: "_discoverDetailHead_485ym_635",
|
|
6238
|
+
discoverDetailTitle: "_discoverDetailTitle_485ym_641",
|
|
6239
|
+
discoverDetailText: "_discoverDetailText_485ym_647",
|
|
6240
|
+
discoverDetailPanel: "_discoverDetailPanel_485ym_654",
|
|
6241
|
+
discoverDetailTabs: "_discoverDetailTabs_485ym_661",
|
|
6242
|
+
discoverDetailTabList: "_discoverDetailTabList_485ym_666",
|
|
6243
|
+
discoverDocBody: "_discoverDocBody_485ym_671",
|
|
6244
|
+
discoverDocNotice: "_discoverDocNotice_485ym_676",
|
|
6245
|
+
discoverSection: "_discoverSection_485ym_682",
|
|
6246
|
+
discoverSectionTitle: "_discoverSectionTitle_485ym_689",
|
|
6247
|
+
discoverFacts: "_discoverFacts_485ym_695",
|
|
6248
|
+
discoverFactRow: "_discoverFactRow_485ym_700",
|
|
6249
|
+
discoverFactKind: "_discoverFactKind_485ym_710",
|
|
6250
|
+
discoverFactValue: "_discoverFactValue_485ym_716",
|
|
6251
|
+
discoverCode: "_discoverCode_485ym_724",
|
|
6252
|
+
discoverTags: "_discoverTags_485ym_733",
|
|
6253
|
+
discoverLink: "_discoverLink_485ym_740",
|
|
6254
|
+
discoverVersions: "_discoverVersions_485ym_750",
|
|
6255
|
+
discoverVersionRow: "_discoverVersionRow_485ym_758",
|
|
6256
|
+
discoverVersionName: "_discoverVersionName_485ym_766",
|
|
6257
|
+
discoverError: "_discoverError_485ym_771",
|
|
6258
|
+
discoverFailure: "_discoverFailure_485ym_780",
|
|
6259
|
+
discoverLoading: "_discoverLoading_485ym_786",
|
|
6260
|
+
discoverNotice: "_discoverNotice_485ym_795",
|
|
6261
|
+
discoverMore: "_discoverMore_485ym_813",
|
|
6262
|
+
discoverTransport: "_discoverTransport_485ym_817",
|
|
6263
|
+
discoverTransportHead: "_discoverTransportHead_485ym_823",
|
|
6264
|
+
discoverTransportTitle: "_discoverTransportTitle_485ym_830",
|
|
6265
|
+
discoverTransportKind: "_discoverTransportKind_485ym_835",
|
|
6266
|
+
discoverTransportState: "_discoverTransportState_485ym_840",
|
|
6267
|
+
discoverTransportRows: "_discoverTransportRows_485ym_848",
|
|
6268
|
+
discoverTransportRow: "_discoverTransportRow_485ym_848",
|
|
6269
|
+
discoverTransportRadio: "_discoverTransportRadio_485ym_869",
|
|
6270
|
+
discoverTransportCustom: "_discoverTransportCustom_485ym_909",
|
|
6271
|
+
discoverTransportInput: "_discoverTransportInput_485ym_915",
|
|
6272
|
+
discoverInstallBar: "_discoverInstallBar_485ym_920",
|
|
6273
|
+
discoverInstallText: "_discoverInstallText_485ym_931",
|
|
6274
|
+
discoverDialog: "_discoverDialog_485ym_937",
|
|
6275
|
+
discoverDialogBody: "_discoverDialogBody_485ym_941",
|
|
6276
|
+
discoverSourceList: "_discoverSourceList_485ym_947",
|
|
6277
|
+
discoverSourceRow: "_discoverSourceRow_485ym_955",
|
|
6278
|
+
discoverSourceConfirm: "_discoverSourceConfirm_485ym_964",
|
|
6279
|
+
discoverSourcePick: "_discoverSourcePick_485ym_970",
|
|
6280
|
+
discoverSourceRadio: "_discoverSourceRadio_485ym_979",
|
|
6281
|
+
discoverSourceMain: "_discoverSourceMain_485ym_987",
|
|
6282
|
+
discoverSourceHead: "_discoverSourceHead_485ym_995",
|
|
6283
|
+
discoverSourceUrl: "_discoverSourceUrl_485ym_1003",
|
|
6284
|
+
discoverSourceMore: "_discoverSourceMore_485ym_1013",
|
|
6285
|
+
discoverSourceLoading: "_discoverSourceLoading_485ym_1017",
|
|
6286
|
+
discoverSourceHint: "_discoverSourceHint_485ym_1027",
|
|
6287
|
+
discoverSourceError: "_discoverSourceError_485ym_1041",
|
|
6288
|
+
discoverSourceForm: "_discoverSourceForm_485ym_1047",
|
|
6289
|
+
discoverGrow: "_discoverGrow_485ym_1053",
|
|
6290
|
+
discoverField: "_discoverField_485ym_1058",
|
|
6291
|
+
discoverFieldLabel: "_discoverFieldLabel_485ym_1064",
|
|
6292
|
+
discoverConfirmHead: "_discoverConfirmHead_485ym_1069",
|
|
6293
|
+
discoverSkeletonFill: "_discoverSkeletonFill_485ym_1075",
|
|
6294
|
+
"wb-skeleton": "_wb-skeleton_485ym_1",
|
|
6295
|
+
discoverSkeletonBar: "_discoverSkeletonBar_485ym_1084",
|
|
6296
|
+
discoverSkeletonTitle: "_discoverSkeletonTitle_485ym_1091",
|
|
6297
|
+
discoverSkeletonDesc: "_discoverSkeletonDesc_485ym_1095"
|
|
6031
6298
|
};
|
|
6032
6299
|
//#endregion
|
|
6033
6300
|
//#region src/app/layouts/market/discover-states.tsx
|
|
@@ -6108,6 +6375,151 @@ function MarketEmpty({ t }) {
|
|
|
6108
6375
|
return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEmpty }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEmptyTitle }, t("panels.market.empty")));
|
|
6109
6376
|
}
|
|
6110
6377
|
//#endregion
|
|
6378
|
+
//#region src/app/layouts/rightbar/failure-card-text.ts
|
|
6379
|
+
var TITLE_KEY = {
|
|
6380
|
+
permission: "panels.market.failure.permission",
|
|
6381
|
+
"disk-full": "panels.market.failure.diskFull",
|
|
6382
|
+
sandbox: "panels.market.failure.sandbox",
|
|
6383
|
+
unknown: "panels.market.failure.unknown"
|
|
6384
|
+
};
|
|
6385
|
+
var ASK_AGENT_KEY = "panels.market.failure.askAgent";
|
|
6386
|
+
function shellPath(path) {
|
|
6387
|
+
return /^[\w./@%+-]+$/.test(path) ? path : `'${path.replaceAll("'", "'\\''")}'`;
|
|
6388
|
+
}
|
|
6389
|
+
function ownerLabel(uid) {
|
|
6390
|
+
return uid === 0 ? "root" : `uid ${uid}`;
|
|
6391
|
+
}
|
|
6392
|
+
function failureCardOf(failure, t) {
|
|
6393
|
+
const path = failure.path ?? "";
|
|
6394
|
+
const fix = failure.fix;
|
|
6395
|
+
if (fix.kind === "chown") {
|
|
6396
|
+
const ownerUid = failure.owner?.uid;
|
|
6397
|
+
return {
|
|
6398
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6399
|
+
fact: ownerUid === void 0 ? t("panels.market.failure.factMode", {
|
|
6400
|
+
path,
|
|
6401
|
+
mode: failure.mode ?? "?"
|
|
6402
|
+
}) : t("panels.market.failure.factOwner", {
|
|
6403
|
+
path,
|
|
6404
|
+
owner: ownerLabel(ownerUid),
|
|
6405
|
+
me: ownerLabel(failure.current.uid)
|
|
6406
|
+
}),
|
|
6407
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6408
|
+
fix: `sudo chown -R ${fix.uid}:${fix.gid} ${shellPath(fix.path)}`,
|
|
6409
|
+
copiedHint: t("panels.market.failure.copiedHint"),
|
|
6410
|
+
command: failure.command,
|
|
6411
|
+
output: failure.output,
|
|
6412
|
+
exitCode: failure.exitCode
|
|
6413
|
+
};
|
|
6414
|
+
}
|
|
6415
|
+
if (fix.kind === "chmod") return {
|
|
6416
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6417
|
+
fact: t("panels.market.failure.factMode", {
|
|
6418
|
+
path,
|
|
6419
|
+
mode: failure.mode ?? "?"
|
|
6420
|
+
}),
|
|
6421
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6422
|
+
fix: `chmod -R u+w ${shellPath(fix.path)}`,
|
|
6423
|
+
copiedHint: t("panels.market.failure.copiedHint"),
|
|
6424
|
+
command: failure.command,
|
|
6425
|
+
output: failure.output,
|
|
6426
|
+
exitCode: failure.exitCode
|
|
6427
|
+
};
|
|
6428
|
+
if (fix.kind === "space") return {
|
|
6429
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6430
|
+
fact: t("panels.market.failure.factSpace", { path }),
|
|
6431
|
+
fixLabel: t("panels.market.failure.copyFix"),
|
|
6432
|
+
fix: `du -sh ${shellPath(fix.path)}`,
|
|
6433
|
+
copiedHint: t("panels.market.failure.copiedHint"),
|
|
6434
|
+
command: failure.command,
|
|
6435
|
+
output: failure.output,
|
|
6436
|
+
exitCode: failure.exitCode
|
|
6437
|
+
};
|
|
6438
|
+
return {
|
|
6439
|
+
title: t(TITLE_KEY[failure.kind]),
|
|
6440
|
+
fact: t("panels.market.failure.factStuck", { path: path === "" ? t("panels.market.failure.nowhere") : path }),
|
|
6441
|
+
fixLabel: t(ASK_AGENT_KEY),
|
|
6442
|
+
fix: t("panels.market.failure.askAgentText", {
|
|
6443
|
+
command: failure.command,
|
|
6444
|
+
path: path === "" ? t("panels.market.failure.nowhere") : path,
|
|
6445
|
+
code: failure.exitCode === null ? "?" : String(failure.exitCode)
|
|
6446
|
+
}),
|
|
6447
|
+
copiedHint: t("panels.market.failure.askAgentHint"),
|
|
6448
|
+
command: failure.command,
|
|
6449
|
+
output: failure.output,
|
|
6450
|
+
exitCode: failure.exitCode
|
|
6451
|
+
};
|
|
6452
|
+
}
|
|
6453
|
+
var FailureCard_module_default = {
|
|
6454
|
+
block: "_block_mxnbc_1",
|
|
6455
|
+
head: "_head_mxnbc_9",
|
|
6456
|
+
title: "_title_mxnbc_16",
|
|
6457
|
+
fact: "_fact_mxnbc_22",
|
|
6458
|
+
actions: "_actions_mxnbc_30",
|
|
6459
|
+
hint: "_hint_mxnbc_38",
|
|
6460
|
+
output: "_output_mxnbc_44"
|
|
6461
|
+
};
|
|
6462
|
+
//#endregion
|
|
6463
|
+
//#region src/app/layouts/rightbar/FailureCard.tsx
|
|
6464
|
+
var COPIED_MS$1 = 1200;
|
|
6465
|
+
function terminalLabels(t) {
|
|
6466
|
+
return {
|
|
6467
|
+
commandLine: (line) => t("panels.market.failure.term.commandLine", { line }),
|
|
6468
|
+
signal: (signal) => t("panels.market.failure.term.signal", { signal }),
|
|
6469
|
+
exitCode: (exitCode) => t("panels.market.failure.term.exitCode", { exitCode }),
|
|
6470
|
+
noExitCode: t("panels.market.failure.term.noExitCode"),
|
|
6471
|
+
running: t("panels.market.failure.term.running"),
|
|
6472
|
+
failed: t("panels.market.failure.term.failed"),
|
|
6473
|
+
done: t("panels.market.failure.term.done"),
|
|
6474
|
+
copy: t("panels.market.failure.term.copy"),
|
|
6475
|
+
copied: t("panels.market.failure.term.copied"),
|
|
6476
|
+
noOutput: t("panels.market.failure.term.noOutput"),
|
|
6477
|
+
collapseAria: t("panels.market.failure.term.collapse"),
|
|
6478
|
+
collapse: t("panels.market.failure.term.collapse"),
|
|
6479
|
+
expandAria: (hidden) => t("panels.market.failure.term.expandAria", { hidden }),
|
|
6480
|
+
expand: (hidden) => t("panels.market.failure.term.expand", { hidden })
|
|
6481
|
+
};
|
|
6482
|
+
}
|
|
6483
|
+
function FailureCard({ t, failure, onRecheck, rechecking }) {
|
|
6484
|
+
const model = failureCardOf(failure, t);
|
|
6485
|
+
const [copied, setCopied] = useState(false);
|
|
6486
|
+
const [open, setOpen] = useState(false);
|
|
6487
|
+
const onCopy = useCallback(() => {
|
|
6488
|
+
writeClipboard(model.fix).then((ok) => {
|
|
6489
|
+
if (!ok) return;
|
|
6490
|
+
setCopied(true);
|
|
6491
|
+
setTimeout(() => setCopied(false), COPIED_MS$1);
|
|
6492
|
+
});
|
|
6493
|
+
}, [model.fix]);
|
|
6494
|
+
return /* @__PURE__ */ createElement("div", { className: FailureCard_module_default.block }, /* @__PURE__ */ createElement("div", { className: FailureCard_module_default.head }, /* @__PURE__ */ createElement(StateDot, {
|
|
6495
|
+
state: "error",
|
|
6496
|
+
size: 8
|
|
6497
|
+
}), /* @__PURE__ */ createElement("span", { className: FailureCard_module_default.title }, model.title)), /* @__PURE__ */ createElement("p", { className: FailureCard_module_default.fact }, model.fact), /* @__PURE__ */ createElement("div", { className: FailureCard_module_default.actions }, /* @__PURE__ */ createElement(Button, {
|
|
6498
|
+
type: "button",
|
|
6499
|
+
size: "sm",
|
|
6500
|
+
variant: "ghost",
|
|
6501
|
+
onClick: onCopy
|
|
6502
|
+
}, copied ? t("panels.market.failure.copied") : model.fixLabel), /* @__PURE__ */ createElement(Button, {
|
|
6503
|
+
type: "button",
|
|
6504
|
+
size: "sm",
|
|
6505
|
+
variant: "ghost",
|
|
6506
|
+
disabled: rechecking,
|
|
6507
|
+
onClick: onRecheck
|
|
6508
|
+
}, t("panels.market.failure.recheck")), /* @__PURE__ */ createElement(Button, {
|
|
6509
|
+
type: "button",
|
|
6510
|
+
size: "sm",
|
|
6511
|
+
variant: "ghost",
|
|
6512
|
+
onClick: () => setOpen(!open)
|
|
6513
|
+
}, open ? t("panels.market.failure.hideOutput") : t("panels.market.failure.showOutput"))), copied ? /* @__PURE__ */ createElement("p", { className: FailureCard_module_default.hint }, model.copiedHint) : null, open ? /* @__PURE__ */ createElement(TerminalBlock, {
|
|
6514
|
+
command: model.command,
|
|
6515
|
+
output: model.output,
|
|
6516
|
+
exitCode: model.exitCode,
|
|
6517
|
+
maxLines: 8,
|
|
6518
|
+
labels: terminalLabels(t),
|
|
6519
|
+
className: FailureCard_module_default.output
|
|
6520
|
+
}) : null);
|
|
6521
|
+
}
|
|
6522
|
+
//#endregion
|
|
6111
6523
|
//#region src/app/layouts/rightbar/market-section-icon.ts
|
|
6112
6524
|
var SIZE$1 = 14;
|
|
6113
6525
|
function marketSectionIcon(kind) {
|
|
@@ -6156,6 +6568,7 @@ var PROGRESS_KEY = {
|
|
|
6156
6568
|
install: "panels.market.installing",
|
|
6157
6569
|
update: "panels.market.updating",
|
|
6158
6570
|
"update-bundle": "panels.market.updating",
|
|
6571
|
+
"install-version": "panels.market.updating",
|
|
6159
6572
|
"remove-bundle": "panels.market.uninstalling",
|
|
6160
6573
|
uninstall: "panels.market.uninstalling",
|
|
6161
6574
|
"update-dependency": "panels.market.updating",
|
|
@@ -6169,6 +6582,7 @@ var ACTION_LABEL_KEY = {
|
|
|
6169
6582
|
install: "panels.market.install",
|
|
6170
6583
|
update: "panels.market.update",
|
|
6171
6584
|
"update-bundle": "panels.market.update",
|
|
6585
|
+
"install-version": "panels.market.update",
|
|
6172
6586
|
"remove-bundle": "panels.market.uninstall",
|
|
6173
6587
|
uninstall: "panels.market.uninstall",
|
|
6174
6588
|
"update-dependency": "panels.market.update",
|
|
@@ -6275,9 +6689,21 @@ function pendingRowOf(input) {
|
|
|
6275
6689
|
...pending.version === void 0 ? {} : { version: { installed: pending.version } }
|
|
6276
6690
|
};
|
|
6277
6691
|
}
|
|
6692
|
+
function askAgentReason(row, t) {
|
|
6693
|
+
if (row.hint !== void 0) return t(row.hint);
|
|
6694
|
+
if (row.note !== void 0) return t(row.note.key, row.note.params);
|
|
6695
|
+
return t(MARKET_STATE_KEY[row.state]);
|
|
6696
|
+
}
|
|
6697
|
+
function askAgentText(row, t) {
|
|
6698
|
+
return t("panels.market.askAgentText", {
|
|
6699
|
+
name: marketRowTitle(row, t),
|
|
6700
|
+
unit: row.id,
|
|
6701
|
+
reason: askAgentReason(row, t)
|
|
6702
|
+
});
|
|
6703
|
+
}
|
|
6278
6704
|
//#endregion
|
|
6279
6705
|
//#region src/app/layouts/rightbar/SharedSection.tsx
|
|
6280
|
-
function SharedLine({ t, row, pending, failure, onAct }) {
|
|
6706
|
+
function SharedLine({ t, row, pending, failure, onAct, onRecheck, rechecking }) {
|
|
6281
6707
|
const running = pending !== null && pending.id === row.id ? pending : null;
|
|
6282
6708
|
const locked = pending !== null;
|
|
6283
6709
|
const actions = sharedActions(row);
|
|
@@ -6296,60 +6722,32 @@ function SharedLine({ t, row, pending, failure, onAct }) {
|
|
|
6296
6722
|
}, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, t("panels.market.sharedUsedBy", { modules: row.usedByKeys.map((key) => t(key)).join(t("panels.market.listSeparator")) })))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ createElement(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketActions }, actions.map((action) => /* @__PURE__ */ createElement(Button, {
|
|
6297
6723
|
key: action,
|
|
6298
6724
|
type: "button",
|
|
6299
|
-
size: "sm",
|
|
6300
|
-
variant: "outline",
|
|
6301
|
-
disabled: locked,
|
|
6302
|
-
onClick: () => onAct(action)
|
|
6303
|
-
}, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure)
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6311
|
-
|
|
6312
|
-
|
|
6313
|
-
|
|
6314
|
-
|
|
6315
|
-
|
|
6316
|
-
|
|
6317
|
-
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
|
|
6321
|
-
|
|
6322
|
-
|
|
6323
|
-
|
|
6324
|
-
}
|
|
6325
|
-
function rowKeys(rows) {
|
|
6326
|
-
return rows.map(rowKey).join(",");
|
|
6327
|
-
}
|
|
6328
|
-
function panelBoardSignature(units, plugins, own) {
|
|
6329
|
-
return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
|
|
6330
|
-
}
|
|
6331
|
-
function machineBoardSignature(defaults, changed) {
|
|
6332
|
-
const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
|
|
6333
|
-
return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
|
|
6334
|
-
}
|
|
6335
|
-
function nextPending(pending, signature) {
|
|
6336
|
-
return pending !== null && pending !== signature ? null : pending;
|
|
6337
|
-
}
|
|
6338
|
-
function useBoardSettle(signature) {
|
|
6339
|
-
const [held, setHeld] = useState(null);
|
|
6340
|
-
useEffect(() => {
|
|
6341
|
-
setHeld((current) => nextPending(current, signature));
|
|
6342
|
-
}, [signature]);
|
|
6343
|
-
useEffect(() => {
|
|
6344
|
-
if (held === null) return void 0;
|
|
6345
|
-
const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
|
|
6346
|
-
return () => clearTimeout(timer);
|
|
6347
|
-
}, [held]);
|
|
6348
|
-
return {
|
|
6349
|
-
pending: held !== null,
|
|
6350
|
-
begin: () => setHeld(signature),
|
|
6351
|
-
clear: () => setHeld(null)
|
|
6352
|
-
};
|
|
6725
|
+
size: "sm",
|
|
6726
|
+
variant: "outline",
|
|
6727
|
+
disabled: locked,
|
|
6728
|
+
onClick: () => onAct(action)
|
|
6729
|
+
}, t(ACTION_LABEL_KEY[action]))))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ createElement(FailureCard, {
|
|
6730
|
+
t,
|
|
6731
|
+
failure: failure.failure,
|
|
6732
|
+
onRecheck,
|
|
6733
|
+
rechecking
|
|
6734
|
+
})));
|
|
6735
|
+
}
|
|
6736
|
+
function SharedSection({ t, rows, pending, failureOf, act, onRecheck, rechecking }) {
|
|
6737
|
+
if (rows.length === 0) return null;
|
|
6738
|
+
return /* @__PURE__ */ createElement("section", { className: `${MarketPage_module_default.marketSection} ${MarketPage_module_default.marketSectionQuiet}` }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ createElement("span", {
|
|
6739
|
+
className: MarketPage_module_default.marketSectionIcon,
|
|
6740
|
+
"aria-hidden": "true"
|
|
6741
|
+
}, marketSectionIcon("shared")), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t("panels.market.sectionShared")), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionCount }, rows.length)), /* @__PURE__ */ createElement("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ createElement(SharedLine, {
|
|
6742
|
+
key: row.id,
|
|
6743
|
+
t,
|
|
6744
|
+
row,
|
|
6745
|
+
pending,
|
|
6746
|
+
failure: failureOf(row.id),
|
|
6747
|
+
onAct: (action) => void act(row.id, action),
|
|
6748
|
+
onRecheck,
|
|
6749
|
+
rechecking
|
|
6750
|
+
}))));
|
|
6353
6751
|
}
|
|
6354
6752
|
//#endregion
|
|
6355
6753
|
//#region src/shared/components/Tip.tsx
|
|
@@ -6371,6 +6769,25 @@ function Tip({ side = "bottom", align = "end", gap = 6, portal = true, ...rest }
|
|
|
6371
6769
|
});
|
|
6372
6770
|
}
|
|
6373
6771
|
//#endregion
|
|
6772
|
+
//#region src/app/layouts/rightbar/AskAgentButton.tsx
|
|
6773
|
+
var COPIED_MS = 1200;
|
|
6774
|
+
function AskAgentButton({ t, text, label }) {
|
|
6775
|
+
const [copied, setCopied] = useState(false);
|
|
6776
|
+
const onCopy = useCallback(() => {
|
|
6777
|
+
writeClipboard(text).then((ok) => {
|
|
6778
|
+
if (!ok) return;
|
|
6779
|
+
setCopied(true);
|
|
6780
|
+
setTimeout(() => setCopied(false), COPIED_MS);
|
|
6781
|
+
});
|
|
6782
|
+
}, [text]);
|
|
6783
|
+
return /* @__PURE__ */ createElement(Button, {
|
|
6784
|
+
type: "button",
|
|
6785
|
+
size: "sm",
|
|
6786
|
+
variant: "ghost",
|
|
6787
|
+
onClick: onCopy
|
|
6788
|
+
}, copied ? t("panels.market.askAgentCopied") : label);
|
|
6789
|
+
}
|
|
6790
|
+
//#endregion
|
|
6374
6791
|
//#region src/app/layouts/rightbar/market-section.tsx
|
|
6375
6792
|
var dangerActions = [
|
|
6376
6793
|
"uninstall",
|
|
@@ -6441,13 +6858,14 @@ function MarketLineStatus({ t, row, quiet }) {
|
|
|
6441
6858
|
"aria-hidden": "true"
|
|
6442
6859
|
}, "·"), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketReason }, noteText)));
|
|
6443
6860
|
}
|
|
6444
|
-
function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
6861
|
+
function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy, onRecheck, rechecking }) {
|
|
6445
6862
|
const running = pending !== null && pending.id === row.id ? pending : null;
|
|
6446
6863
|
const locked = pending !== null;
|
|
6447
6864
|
const [migrationOpen, setMigrationOpen] = useState(false);
|
|
6448
6865
|
const [dismissOpen, setDismissOpen] = useState(false);
|
|
6449
6866
|
const quiet = row.workbench === true && row.state === "installed" && row.hint === void 0;
|
|
6450
6867
|
const actions = marketActions$1(row);
|
|
6868
|
+
const asksAgent = marketAsksAgent(row);
|
|
6451
6869
|
const switchLocked = marketSwitchLocked(row);
|
|
6452
6870
|
return /* @__PURE__ */ createElement("li", { className: MarketPage_module_default.marketRow }, /* @__PURE__ */ createElement("span", {
|
|
6453
6871
|
className: MarketPage_module_default.marketIcon,
|
|
@@ -6459,7 +6877,11 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
|
6459
6877
|
t,
|
|
6460
6878
|
row,
|
|
6461
6879
|
quiet
|
|
6462
|
-
})), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ createElement(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketActions },
|
|
6880
|
+
})), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketEnd }, running !== null ? /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketProgress }, /* @__PURE__ */ createElement(Spinner, { size: 14 }), t(PROGRESS_KEY[running.action])) : actions.length === 0 && !asksAgent ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketActions }, asksAgent ? /* @__PURE__ */ createElement(AskAgentButton, {
|
|
6881
|
+
t,
|
|
6882
|
+
text: askAgentText(row, t),
|
|
6883
|
+
label: t("panels.market.askAgent")
|
|
6884
|
+
}) : null, actions.map((action) => {
|
|
6463
6885
|
const danger = dangerActions.includes(action);
|
|
6464
6886
|
const update = updateActions.includes(action);
|
|
6465
6887
|
return /* @__PURE__ */ createElement(Button, {
|
|
@@ -6482,7 +6904,12 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
|
6482
6904
|
disabled: boardBusy === true || locked || switchLocked,
|
|
6483
6905
|
label: `${marketRowTitle(row, t)} · ${t("panels.market.defaultLabel")}`,
|
|
6484
6906
|
onChange: (next) => onDefault?.(next)
|
|
6485
|
-
})))), failure === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure), /* @__PURE__ */ createElement(
|
|
6907
|
+
})))), failure === null ? null : failure.failure === void 0 ? /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailure }, failure.message) : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketFailureSeat }, /* @__PURE__ */ createElement(FailureCard, {
|
|
6908
|
+
t,
|
|
6909
|
+
failure: failure.failure,
|
|
6910
|
+
onRecheck,
|
|
6911
|
+
rechecking
|
|
6912
|
+
})), /* @__PURE__ */ createElement(MarketLineDialogs, {
|
|
6486
6913
|
t,
|
|
6487
6914
|
migrationOpen,
|
|
6488
6915
|
dismissOpen,
|
|
@@ -6498,12 +6925,12 @@ function MarketLine({ t, row, pending, failure, onAct, onDefault, boardBusy }) {
|
|
|
6498
6925
|
}
|
|
6499
6926
|
}));
|
|
6500
6927
|
}
|
|
6501
|
-
function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy }) {
|
|
6502
|
-
if (rows.length === 0) return null;
|
|
6928
|
+
function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confirmActions, onConfirming, onDefault, boardBusy, headAction, keepHead, onRecheck, rechecking }) {
|
|
6929
|
+
if (rows.length === 0 && keepHead !== true) return null;
|
|
6503
6930
|
return /* @__PURE__ */ createElement("section", { className: MarketPage_module_default.marketSection }, titleKey === void 0 ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketSectionHead }, /* @__PURE__ */ createElement("span", {
|
|
6504
6931
|
className: MarketPage_module_default.marketSectionIcon,
|
|
6505
6932
|
"aria-hidden": "true"
|
|
6506
|
-
}, icon), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), rows.length === 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.
|
|
6933
|
+
}, icon), /* @__PURE__ */ createElement("h2", { className: MarketPage_module_default.marketSectionTitle }, t(titleKey)), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionCount }, rows.length), headAction === void 0 ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.marketSectionAction }, headAction)), rows.length === 0 ? null : /* @__PURE__ */ createElement("ul", { className: MarketPage_module_default.marketList }, rows.map((row) => /* @__PURE__ */ createElement(MarketLine, {
|
|
6507
6934
|
key: row.id,
|
|
6508
6935
|
t,
|
|
6509
6936
|
row,
|
|
@@ -6511,7 +6938,9 @@ function MarketSection({ t, titleKey, icon, rows, pending, failureOf, act, confi
|
|
|
6511
6938
|
failure: failureOf(row.id),
|
|
6512
6939
|
onAct: (action) => confirmActions.includes(action) ? onConfirming(row.id) : void act(row.id, action),
|
|
6513
6940
|
onDefault: (next) => onDefault?.(row.id, next),
|
|
6514
|
-
boardBusy
|
|
6941
|
+
boardBusy,
|
|
6942
|
+
onRecheck,
|
|
6943
|
+
rechecking
|
|
6515
6944
|
}))));
|
|
6516
6945
|
}
|
|
6517
6946
|
//#endregion
|
|
@@ -6744,6 +7173,14 @@ function changeFailure(change, t) {
|
|
|
6744
7173
|
if (change === void 0 || SHIPPED$1.includes(change.application)) return void 0;
|
|
6745
7174
|
return failureReason(failureCode(change), change.application, t);
|
|
6746
7175
|
}
|
|
7176
|
+
function appliedUnitsOf(value) {
|
|
7177
|
+
if (changeOf(value)?.application !== "applied") return [];
|
|
7178
|
+
const module = value?.module;
|
|
7179
|
+
if (typeof module !== "object" || module === null) return [];
|
|
7180
|
+
const record = module;
|
|
7181
|
+
if (record.kind !== "module") return [];
|
|
7182
|
+
return typeof record.unit === "string" && record.unit !== "" ? [record.unit] : [];
|
|
7183
|
+
}
|
|
6747
7184
|
//#endregion
|
|
6748
7185
|
//#region src/app/layouts/rightbar/market-update-verdict.ts
|
|
6749
7186
|
function updateVerdictOf(input) {
|
|
@@ -6775,7 +7212,11 @@ function updateVerdictText(verdict, t, input) {
|
|
|
6775
7212
|
}
|
|
6776
7213
|
//#endregion
|
|
6777
7214
|
//#region src/app/layouts/rightbar/market-act.ts
|
|
6778
|
-
var STEADY_ACTIONS = /* @__PURE__ */ new Set([
|
|
7215
|
+
var STEADY_ACTIONS = /* @__PURE__ */ new Set([
|
|
7216
|
+
"update",
|
|
7217
|
+
"update-bundle",
|
|
7218
|
+
"install-version"
|
|
7219
|
+
]);
|
|
6779
7220
|
function assumedApplied(action) {
|
|
6780
7221
|
return action === "update" || action === "update-dependency" || action === "update-plugin" || REMOVAL_ACTIONS.has(action);
|
|
6781
7222
|
}
|
|
@@ -6819,18 +7260,34 @@ function marketActOf(options) {
|
|
|
6819
7260
|
seats.setConfirming(null);
|
|
6820
7261
|
seats.setFailed(null);
|
|
6821
7262
|
seats.setNotice(null);
|
|
7263
|
+
const dependency = action === "update-dependency";
|
|
7264
|
+
const byName = action === "remove-bundle" || action === "update-plugin" || action === "uninstall-plugin" || action === "update-workbench" || action === "migrate-workbench";
|
|
7265
|
+
const market = action === "install-version" ? row?.market : void 0;
|
|
7266
|
+
const marketSpec = market === void 0 || row?.pkg === void 0 ? void 0 : marketInstallTarget(row.pkg, market.version, market.source).spec;
|
|
7267
|
+
if (action === "install-version" && marketSpec === void 0) {
|
|
7268
|
+
seats.setPending(null);
|
|
7269
|
+
seats.setFailed({
|
|
7270
|
+
id,
|
|
7271
|
+
message: t("panels.market.failed", { reason: t("panels.market.noMarketSource") })
|
|
7272
|
+
});
|
|
7273
|
+
return;
|
|
7274
|
+
}
|
|
6822
7275
|
const outcome = await send(action === "dismiss-followup" ? {
|
|
6823
7276
|
action,
|
|
6824
7277
|
id: row?.followUp?.id ?? ""
|
|
6825
|
-
} :
|
|
7278
|
+
} : dependency ? {
|
|
6826
7279
|
action,
|
|
6827
7280
|
id
|
|
6828
|
-
} :
|
|
7281
|
+
} : byName ? {
|
|
6829
7282
|
action,
|
|
6830
7283
|
name: row?.pkg ?? ""
|
|
6831
|
-
} : {
|
|
7284
|
+
} : marketSpec === void 0 ? {
|
|
6832
7285
|
action,
|
|
6833
7286
|
unit: id
|
|
7287
|
+
} : {
|
|
7288
|
+
action,
|
|
7289
|
+
spec: marketSpec,
|
|
7290
|
+
requestId: globalThis.crypto.randomUUID()
|
|
6834
7291
|
});
|
|
6835
7292
|
if (!outcome.ok) {
|
|
6836
7293
|
onChanged({ force: true });
|
|
@@ -6838,7 +7295,8 @@ function marketActOf(options) {
|
|
|
6838
7295
|
seats.setHeld(void 0);
|
|
6839
7296
|
seats.setFailed({
|
|
6840
7297
|
id,
|
|
6841
|
-
message: t("panels.market.failed", { reason: outcome.message })
|
|
7298
|
+
message: t("panels.market.failed", { reason: outcome.message }),
|
|
7299
|
+
...outcome.failure === void 0 ? {} : { failure: outcome.failure }
|
|
6842
7300
|
});
|
|
6843
7301
|
return;
|
|
6844
7302
|
}
|
|
@@ -6895,6 +7353,109 @@ function marketActOf(options) {
|
|
|
6895
7353
|
});
|
|
6896
7354
|
};
|
|
6897
7355
|
}
|
|
7356
|
+
//#endregion
|
|
7357
|
+
//#region src/app/layouts/rightbar/panel-write.ts
|
|
7358
|
+
var PANEL_SETTLE_MS = 4e3;
|
|
7359
|
+
function rowKey(row) {
|
|
7360
|
+
return `${row.id}:${row.shown ? "1" : "0"}:${row.source}`;
|
|
7361
|
+
}
|
|
7362
|
+
function rowKeys(rows) {
|
|
7363
|
+
return rows.map(rowKey).join(",");
|
|
7364
|
+
}
|
|
7365
|
+
function panelBoardSignature(units, plugins, own) {
|
|
7366
|
+
return `${rowKeys(units)}|${rowKeys(plugins)}|${own ? "1" : "0"}`;
|
|
7367
|
+
}
|
|
7368
|
+
function machineBoardSignature(defaults, changed) {
|
|
7369
|
+
const counts = Object.entries(changed).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([id, count]) => `${id}:${String(count)}`);
|
|
7370
|
+
return `${[...defaults].sort().join(",")}|${counts.join(",")}`;
|
|
7371
|
+
}
|
|
7372
|
+
function nextPending(pending, signature) {
|
|
7373
|
+
return pending !== null && pending !== signature ? null : pending;
|
|
7374
|
+
}
|
|
7375
|
+
function useBoardSettle(signature) {
|
|
7376
|
+
const [held, setHeld] = useState(null);
|
|
7377
|
+
useEffect(() => {
|
|
7378
|
+
setHeld((current) => nextPending(current, signature));
|
|
7379
|
+
}, [signature]);
|
|
7380
|
+
useEffect(() => {
|
|
7381
|
+
if (held === null) return void 0;
|
|
7382
|
+
const timer = setTimeout(() => setHeld(null), PANEL_SETTLE_MS);
|
|
7383
|
+
return () => clearTimeout(timer);
|
|
7384
|
+
}, [held]);
|
|
7385
|
+
return {
|
|
7386
|
+
pending: held !== null,
|
|
7387
|
+
begin: () => setHeld(signature),
|
|
7388
|
+
clear: () => setHeld(null)
|
|
7389
|
+
};
|
|
7390
|
+
}
|
|
7391
|
+
//#endregion
|
|
7392
|
+
//#region src/app/layouts/rightbar/use-market-default.ts
|
|
7393
|
+
function useMarketDefault(input) {
|
|
7394
|
+
const { t, mocked, defaults, changed, setNotice } = input;
|
|
7395
|
+
const boardWrite = useHostWrite({
|
|
7396
|
+
channel: "prefs",
|
|
7397
|
+
resource: "panels",
|
|
7398
|
+
networkText: t("panels.failed")
|
|
7399
|
+
});
|
|
7400
|
+
const [writing, setWriting] = useState(false);
|
|
7401
|
+
const settle = useBoardSettle(machineBoardSignature(defaults, changed));
|
|
7402
|
+
const setDefault = async (id, next) => {
|
|
7403
|
+
if (mocked) return;
|
|
7404
|
+
setWriting(true);
|
|
7405
|
+
settle.begin();
|
|
7406
|
+
const outcome = await boardWrite.send({
|
|
7407
|
+
action: next ? "show" : "hide",
|
|
7408
|
+
id,
|
|
7409
|
+
scope: "machine"
|
|
7410
|
+
});
|
|
7411
|
+
setWriting(false);
|
|
7412
|
+
if (!outcome.ok) {
|
|
7413
|
+
settle.clear();
|
|
7414
|
+
setNotice(t("panels.failed"));
|
|
7415
|
+
}
|
|
7416
|
+
};
|
|
7417
|
+
return {
|
|
7418
|
+
pending: writing || settle.pending,
|
|
7419
|
+
setDefault
|
|
7420
|
+
};
|
|
7421
|
+
}
|
|
7422
|
+
var market_check_module_default = {
|
|
7423
|
+
check: "_check_1g6tv_1",
|
|
7424
|
+
status: "_status_1g6tv_8",
|
|
7425
|
+
button: "_button_1g6tv_15",
|
|
7426
|
+
icon: "_icon_1g6tv_22"
|
|
7427
|
+
};
|
|
7428
|
+
//#endregion
|
|
7429
|
+
//#region src/app/layouts/market/market-check.tsx
|
|
7430
|
+
function MarketCheck({ t, checkedAt, latestCheck = {
|
|
7431
|
+
checked: 0,
|
|
7432
|
+
unknown: 0
|
|
7433
|
+
}, checking, failed, disabled, onCheck }) {
|
|
7434
|
+
const parts = [];
|
|
7435
|
+
if (checking) parts.push(t("panels.market.checkingNow"));
|
|
7436
|
+
else {
|
|
7437
|
+
if (latestCheck.checked > 0 && checkedAt !== null) parts.push(t("panels.market.checkedAt", { time: checkedAgo(checkedAt, t) }));
|
|
7438
|
+
if (failed) parts.push(t("panels.market.checkFailed"));
|
|
7439
|
+
else if (latestCheck.unknown > 0) parts.push(t("panels.market.latestPartial", { n: String(latestCheck.unknown) }));
|
|
7440
|
+
}
|
|
7441
|
+
const status = parts.length === 0 ? null : parts.join(" · ");
|
|
7442
|
+
return /* @__PURE__ */ createElement("span", { className: market_check_module_default.check }, status === null ? null : /* @__PURE__ */ createElement("span", {
|
|
7443
|
+
className: market_check_module_default.status,
|
|
7444
|
+
"aria-live": "polite"
|
|
7445
|
+
}, status), /* @__PURE__ */ createElement(Tip, { label: t("panels.market.checkUpdates") }, /* @__PURE__ */ createElement(Button, {
|
|
7446
|
+
type: "button",
|
|
7447
|
+
variant: "ghost",
|
|
7448
|
+
size: "sm",
|
|
7449
|
+
className: market_check_module_default.button,
|
|
7450
|
+
"aria-label": t("panels.market.checkUpdates"),
|
|
7451
|
+
disabled: disabled || checking,
|
|
7452
|
+
icon: /* @__PURE__ */ createElement("span", {
|
|
7453
|
+
className: `${market_check_module_default.icon}${checking ? " wb-spinning" : ""}`,
|
|
7454
|
+
"aria-hidden": "true"
|
|
7455
|
+
}, /* @__PURE__ */ createElement(IconRefreshOutlineRegular, { size: 14 })),
|
|
7456
|
+
onClick: onCheck
|
|
7457
|
+
})));
|
|
7458
|
+
}
|
|
6898
7459
|
var PanelFoot_module_default = {
|
|
6899
7460
|
foot: "_foot_1ud1j_1",
|
|
6900
7461
|
footText: "_footText_1ud1j_13",
|
|
@@ -6912,6 +7473,8 @@ var CONFIRM_UNINSTALL = [
|
|
|
6912
7473
|
"remove-bundle",
|
|
6913
7474
|
"uninstall-plugin"
|
|
6914
7475
|
];
|
|
7476
|
+
var NO_ROWS = [];
|
|
7477
|
+
var NO_UNITS$1 = /* @__PURE__ */ new Set();
|
|
6915
7478
|
function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
|
|
6916
7479
|
const [acknowledged, setAcknowledged] = useState(false);
|
|
6917
7480
|
return /* @__PURE__ */ createElement(RiskConfirmation, {
|
|
@@ -6928,9 +7491,12 @@ function ConfirmUninstall({ t, name, onConfirm, onCancel }) {
|
|
|
6928
7491
|
onConfirm
|
|
6929
7492
|
});
|
|
6930
7493
|
}
|
|
6931
|
-
function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy }) {
|
|
6932
|
-
const failureOf = (id) => failed?.id === id ? failed
|
|
7494
|
+
function MarketBody({ t, self, shown, pluginList, installedList, shared, pending, failed, notice, act, onConfirming, setDefault, boardBusy, check, onRecheck, rechecking }) {
|
|
7495
|
+
const failureOf = (id) => failed?.id === id ? failed : null;
|
|
6933
7496
|
const foot = marketFootVisible(shown, installedList);
|
|
7497
|
+
const sections = marketSections(marketOrder([...shown, ...installedList], (row) => marketRowTitle(row, t)));
|
|
7498
|
+
const installed = sections.find((section) => section.id === "installed");
|
|
7499
|
+
const pendingSection = sections.find((section) => section.id === "not-installed");
|
|
6934
7500
|
return /* @__PURE__ */ createElement(Fragment, null, notice === null ? null : /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketNote }, notice), /* @__PURE__ */ createElement(MarketSection, {
|
|
6935
7501
|
t,
|
|
6936
7502
|
rows: self === void 0 ? [] : [self],
|
|
@@ -6940,35 +7506,57 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
|
|
|
6940
7506
|
failureOf,
|
|
6941
7507
|
act,
|
|
6942
7508
|
confirmActions: CONFIRM_UNINSTALL,
|
|
6943
|
-
onConfirming
|
|
7509
|
+
onConfirming,
|
|
7510
|
+
onRecheck,
|
|
7511
|
+
rechecking
|
|
6944
7512
|
}), self === void 0 ? null : /* @__PURE__ */ createElement("div", {
|
|
6945
7513
|
className: MarketPage_module_default.marketSelfDivider,
|
|
6946
7514
|
"aria-hidden": "true"
|
|
6947
|
-
}),
|
|
6948
|
-
|
|
7515
|
+
}), /* @__PURE__ */ createElement(MarketSection, {
|
|
7516
|
+
t,
|
|
7517
|
+
titleKey: "panels.market.sectionInstalled",
|
|
7518
|
+
icon: marketSectionIcon("installed"),
|
|
7519
|
+
rows: installed?.rows ?? NO_ROWS,
|
|
7520
|
+
keepHead: true,
|
|
7521
|
+
headAction: check,
|
|
7522
|
+
onDefault: setDefault,
|
|
7523
|
+
boardBusy,
|
|
7524
|
+
pending,
|
|
7525
|
+
failureOf,
|
|
7526
|
+
act,
|
|
7527
|
+
confirmActions: CONFIRM_UNINSTALL,
|
|
7528
|
+
onConfirming,
|
|
7529
|
+
onRecheck,
|
|
7530
|
+
rechecking
|
|
7531
|
+
}), pendingSection === void 0 ? null : /* @__PURE__ */ createElement(MarketSection, {
|
|
6949
7532
|
t,
|
|
6950
|
-
titleKey:
|
|
6951
|
-
icon: marketSectionIcon(
|
|
6952
|
-
rows:
|
|
7533
|
+
titleKey: pendingSection.titleKey,
|
|
7534
|
+
icon: marketSectionIcon("pending"),
|
|
7535
|
+
rows: pendingSection.rows,
|
|
6953
7536
|
onDefault: setDefault,
|
|
6954
7537
|
boardBusy,
|
|
6955
7538
|
pending,
|
|
6956
7539
|
failureOf,
|
|
6957
7540
|
act,
|
|
6958
7541
|
confirmActions: CONFIRM_UNINSTALL,
|
|
6959
|
-
onConfirming
|
|
6960
|
-
|
|
7542
|
+
onConfirming,
|
|
7543
|
+
onRecheck,
|
|
7544
|
+
rechecking
|
|
7545
|
+
}), /* @__PURE__ */ createElement(MarketSection, {
|
|
6961
7546
|
t,
|
|
6962
7547
|
titleKey: "panels.market.sectionPlugins",
|
|
6963
7548
|
icon: marketSectionIcon("plugins"),
|
|
6964
7549
|
rows: pluginList,
|
|
7550
|
+
headAction: check,
|
|
6965
7551
|
onDefault: setDefault,
|
|
6966
7552
|
boardBusy,
|
|
6967
7553
|
pending,
|
|
6968
7554
|
failureOf,
|
|
6969
7555
|
act,
|
|
6970
7556
|
confirmActions: CONFIRM_UNINSTALL,
|
|
6971
|
-
onConfirming
|
|
7557
|
+
onConfirming,
|
|
7558
|
+
onRecheck,
|
|
7559
|
+
rechecking
|
|
6972
7560
|
}), foot ? /* @__PURE__ */ createElement(PanelFoot, {
|
|
6973
7561
|
size: "md",
|
|
6974
7562
|
text: t("panels.market.foot")
|
|
@@ -6977,11 +7565,13 @@ function MarketBody({ t, self, shown, pluginList, installedList, shared, pending
|
|
|
6977
7565
|
rows: shared,
|
|
6978
7566
|
pending,
|
|
6979
7567
|
failureOf,
|
|
6980
|
-
act
|
|
7568
|
+
act,
|
|
7569
|
+
onRecheck,
|
|
7570
|
+
rechecking
|
|
6981
7571
|
}));
|
|
6982
7572
|
}
|
|
6983
7573
|
function useMarketScene(input) {
|
|
6984
|
-
const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, mock, defaults, changed, pending, failed } = input;
|
|
7574
|
+
const { t, titleOf, manifests, installable, capabilities, updates, installed, settling, installing, mock, defaults, changed, pending, failed } = input;
|
|
6985
7575
|
const names = marketNamesOf(t, installed ?? [], titleOf, mock !== void 0);
|
|
6986
7576
|
const catalog = mock?.manifests ?? manifests;
|
|
6987
7577
|
const marketable = mock === void 0 ? marketCatalog(manifests, installable) : catalog;
|
|
@@ -6989,7 +7579,10 @@ function useMarketScene(input) {
|
|
|
6989
7579
|
const source = liveManifests(marketable, effective, installedIdSet(mock === void 0 ? installed : void 0));
|
|
6990
7580
|
const byDefault = new Set(defaults);
|
|
6991
7581
|
const updateMap = mock?.updates ?? updates ?? {};
|
|
6992
|
-
const rows = marketRows(source, effective, updateMap, byDefault, changed)
|
|
7582
|
+
const rows = checkingRows(marketRows(source, effective, updateMap, byDefault, changed), {
|
|
7583
|
+
all: installing,
|
|
7584
|
+
units: settling ?? NO_UNITS$1
|
|
7585
|
+
});
|
|
6993
7586
|
const shared = sharedRows(source, effective);
|
|
6994
7587
|
const removing = removingIdOf(pending, failed);
|
|
6995
7588
|
const steady = useHeldRow(pending, (id) => catalog.some((manifest) => manifest.id === id));
|
|
@@ -7010,7 +7603,7 @@ function useMarketScene(input) {
|
|
|
7010
7603
|
busyId
|
|
7011
7604
|
};
|
|
7012
7605
|
}
|
|
7013
|
-
function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, installed, installedRead, workbench, selfUpdate, plugins, settling, mock, defaults = [], changed = {} }) {
|
|
7606
|
+
function MarketView({ t, titleOf, manifests, installable, capabilities, freshness, onChanged, onPending, updates, updatesCheckedAt = null, updatesFailed = false, installed, installedRead, workbench, selfUpdate, plugins, settling, installing = false, mock, defaults = [], changed = {} }) {
|
|
7014
7607
|
const { pending, setPending, confirming, setConfirming, failed, setFailed, notice, setNotice } = useMarketTransient({
|
|
7015
7608
|
mock,
|
|
7016
7609
|
onPending
|
|
@@ -7024,6 +7617,7 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7024
7617
|
updates,
|
|
7025
7618
|
installed,
|
|
7026
7619
|
settling,
|
|
7620
|
+
installing,
|
|
7027
7621
|
mock,
|
|
7028
7622
|
defaults,
|
|
7029
7623
|
changed,
|
|
@@ -7035,29 +7629,14 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7035
7629
|
channel: "provision",
|
|
7036
7630
|
networkText: t("panels.failed")
|
|
7037
7631
|
});
|
|
7038
|
-
const
|
|
7039
|
-
|
|
7040
|
-
|
|
7041
|
-
|
|
7632
|
+
const { pending: defaultPending, setDefault } = useMarketDefault({
|
|
7633
|
+
t,
|
|
7634
|
+
mocked: mock !== void 0,
|
|
7635
|
+
defaults,
|
|
7636
|
+
changed,
|
|
7637
|
+
setNotice
|
|
7042
7638
|
});
|
|
7043
|
-
const
|
|
7044
|
-
const settleDefault = useBoardSettle(machineBoardSignature(defaults, changed));
|
|
7045
|
-
const { busy: boardBusy } = useVisibleBusy(writingDefault || settleDefault.pending, 500);
|
|
7046
|
-
const setDefault = async (id, next) => {
|
|
7047
|
-
if (mock !== void 0) return;
|
|
7048
|
-
setWritingDefault(true);
|
|
7049
|
-
settleDefault.begin();
|
|
7050
|
-
const outcome = await boardWrite.send({
|
|
7051
|
-
action: next ? "show" : "hide",
|
|
7052
|
-
id,
|
|
7053
|
-
scope: "machine"
|
|
7054
|
-
});
|
|
7055
|
-
setWritingDefault(false);
|
|
7056
|
-
if (!outcome.ok) {
|
|
7057
|
-
settleDefault.clear();
|
|
7058
|
-
setNotice(t("panels.failed"));
|
|
7059
|
-
}
|
|
7060
|
-
};
|
|
7639
|
+
const { busy: boardBusy } = useVisibleBusy(defaultPending, 500);
|
|
7061
7640
|
const pendingRow = pendingRowOf({
|
|
7062
7641
|
pending,
|
|
7063
7642
|
removing,
|
|
@@ -7104,6 +7683,21 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7104
7683
|
});
|
|
7105
7684
|
const settled = marketSettled(freshness, installedRead);
|
|
7106
7685
|
const nothing = shown.length === 0 && self === void 0 && installedList.length === 0 && pluginList.length === 0;
|
|
7686
|
+
const { busy: checkingShown } = useVisibleBusy(freshness.checking, 500);
|
|
7687
|
+
const recheck = () => {
|
|
7688
|
+
setFailed(null);
|
|
7689
|
+
if (mock === void 0) onChanged({ force: true });
|
|
7690
|
+
};
|
|
7691
|
+
const latestCheck = latestCheckSummary(mock?.installed ?? installed);
|
|
7692
|
+
const check = /* @__PURE__ */ createElement(MarketCheck, {
|
|
7693
|
+
t,
|
|
7694
|
+
checkedAt: updatesCheckedAt,
|
|
7695
|
+
latestCheck,
|
|
7696
|
+
checking: checkingShown,
|
|
7697
|
+
failed: updatesFailed,
|
|
7698
|
+
disabled: pending !== null,
|
|
7699
|
+
onCheck: () => onChanged({ force: true })
|
|
7700
|
+
});
|
|
7107
7701
|
if (!settled || (settling?.size ?? 0) > 0 && shown.length === 0 && installedList.length === 0) return /* @__PURE__ */ createElement(MarketChecking, { t });
|
|
7108
7702
|
if (nothing) return /* @__PURE__ */ createElement(MarketEmpty, { t });
|
|
7109
7703
|
return /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement(MarketBody, {
|
|
@@ -7119,20 +7713,33 @@ function MarketView({ t, titleOf, manifests, installable, capabilities, freshnes
|
|
|
7119
7713
|
act,
|
|
7120
7714
|
onConfirming: setConfirming,
|
|
7121
7715
|
setDefault,
|
|
7122
|
-
boardBusy
|
|
7123
|
-
|
|
7716
|
+
boardBusy,
|
|
7717
|
+
check,
|
|
7718
|
+
onRecheck: recheck,
|
|
7719
|
+
rechecking: checkingShown
|
|
7720
|
+
}), /* @__PURE__ */ createElement(UninstallConfirm, {
|
|
7721
|
+
t,
|
|
7722
|
+
confirming,
|
|
7723
|
+
row: confirmingRow,
|
|
7724
|
+
onClose: () => setConfirming(null),
|
|
7725
|
+
act,
|
|
7726
|
+
rowById
|
|
7727
|
+
}));
|
|
7728
|
+
}
|
|
7729
|
+
function UninstallConfirm({ t, confirming, row, onClose, act, rowById }) {
|
|
7730
|
+
return /* @__PURE__ */ createElement(ConfirmUninstall, {
|
|
7124
7731
|
key: confirming ?? "",
|
|
7125
7732
|
t,
|
|
7126
|
-
name:
|
|
7127
|
-
onCancel:
|
|
7733
|
+
name: row === void 0 ? null : marketRowTitle(row, t),
|
|
7734
|
+
onCancel: onClose,
|
|
7128
7735
|
onConfirm: () => {
|
|
7129
7736
|
const id = confirming;
|
|
7130
|
-
|
|
7737
|
+
onClose();
|
|
7131
7738
|
if (id === null) return;
|
|
7132
|
-
const
|
|
7133
|
-
act(id,
|
|
7739
|
+
const target = rowById.get(id);
|
|
7740
|
+
act(id, target?.plugin === true ? "uninstall-plugin" : target?.pkg === void 0 ? "uninstall" : "remove-bundle");
|
|
7134
7741
|
}
|
|
7135
|
-
})
|
|
7742
|
+
});
|
|
7136
7743
|
}
|
|
7137
7744
|
//#endregion
|
|
7138
7745
|
//#region ../../node_modules/.pnpm/dayjs@1.11.23/node_modules/dayjs/plugin/localizedFormat.js
|
|
@@ -7409,13 +8016,17 @@ function MarketIcon({ src, size = ICON }) {
|
|
|
7409
8016
|
function EntryAction({ t, entry, title, onInstall, onShowInstalled, installDisabled = false }) {
|
|
7410
8017
|
const latest = latestVersionOf(entry);
|
|
7411
8018
|
if (latest === void 0) return null;
|
|
7412
|
-
if (latest.install === "installed" || latest.install === "update-available")
|
|
7413
|
-
|
|
7414
|
-
|
|
7415
|
-
|
|
7416
|
-
|
|
7417
|
-
|
|
7418
|
-
|
|
8019
|
+
if (latest.install === "installed" || latest.install === "update-available") {
|
|
8020
|
+
const update = latest.install === "update-available";
|
|
8021
|
+
return /* @__PURE__ */ createElement(Button, {
|
|
8022
|
+
type: "button",
|
|
8023
|
+
variant: "ghost",
|
|
8024
|
+
size: "sm",
|
|
8025
|
+
className: update ? MarketPage_module_default.discoverUpdateAction : void 0,
|
|
8026
|
+
"aria-label": t("panels.discover.openInstalled", { name: title }),
|
|
8027
|
+
onClick: () => onShowInstalled(entry.name)
|
|
8028
|
+
}, t(update ? "panels.discover.cardUpdate" : "panels.discover.cardInstalled"));
|
|
8029
|
+
}
|
|
7419
8030
|
if (latest.compat === "incompatible") return /* @__PURE__ */ createElement(Tooltip, {
|
|
7420
8031
|
label: t("panels.discover.noCompatibleVersion", { runtime: latest.engines?.dsh ?? "" }),
|
|
7421
8032
|
side: "bottom",
|
|
@@ -7516,6 +8127,7 @@ function DiscoverVersions({ t, locale, entry, onInstall, installDisabled = false
|
|
|
7516
8127
|
var MARKET_DISCOVER_ROUTE = "panels/market-discover";
|
|
7517
8128
|
var MARKET_DOC_ROUTE = "panels/market-doc";
|
|
7518
8129
|
var MARKET_GIT_PROBE_ROUTE = "panels/git-probe";
|
|
8130
|
+
var MARKET_INSTALLED_ROUTE = "panels/market-installed";
|
|
7519
8131
|
var MARKET_PUBLISH_PREVIEW_ROUTE = "panels/market-publish-preview";
|
|
7520
8132
|
var MARKET_SOURCES_ROUTE = "panels/market-sources";
|
|
7521
8133
|
//#endregion
|
|
@@ -7529,6 +8141,9 @@ function readMarketSources() {
|
|
|
7529
8141
|
function readGitProbe(url) {
|
|
7530
8142
|
return apiGet(MARKET_GIT_PROBE_ROUTE, { url });
|
|
7531
8143
|
}
|
|
8144
|
+
function readMarketInstalled() {
|
|
8145
|
+
return apiGet(MARKET_INSTALLED_ROUTE);
|
|
8146
|
+
}
|
|
7532
8147
|
function readMarketDoc(name, version, kind) {
|
|
7533
8148
|
return apiGet(MARKET_DOC_ROUTE, {
|
|
7534
8149
|
name,
|
|
@@ -7732,10 +8347,24 @@ function stateText(t, state) {
|
|
|
7732
8347
|
if (state === "unknown") return t("panels.discover.transportUnknown");
|
|
7733
8348
|
return t("panels.discover.transportChecking");
|
|
7734
8349
|
}
|
|
8350
|
+
function kindText(t, kind) {
|
|
8351
|
+
return t(kind === "ssh" ? "panels.discover.transportSsh" : "panels.discover.transportHttps");
|
|
8352
|
+
}
|
|
7735
8353
|
function DiscoverTransport({ t, transport }) {
|
|
8354
|
+
const [open, setOpen] = useState(false);
|
|
8355
|
+
const chosenRow = transport.rows.find((row) => row.url === transport.chosen);
|
|
8356
|
+
const chosenState = chosenRow === void 0 ? void 0 : transport.states[chosenRow.url] ?? "checking";
|
|
8357
|
+
const probing = transport.probing;
|
|
8358
|
+
const summary = chosenRow !== void 0 ? kindText(t, chosenRow.kind) : probing ? t("panels.discover.transportChecking") : t("panels.discover.transportNone");
|
|
8359
|
+
const summaryState = probing || chosenState === void 0 ? "" : stateText(t, chosenState);
|
|
7736
8360
|
const needsAuth = transport.rows.length > 0 && transport.rows.every((row) => transport.states[row.url] === "auth") && transport.customState !== "ok";
|
|
7737
8361
|
const customBusy = transport.customState === "checking";
|
|
7738
|
-
return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ createElement("
|
|
8362
|
+
return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransport }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransportHead }, /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportTitle }, t("panels.discover.transportTitle")), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportKind }, summary), summaryState === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, summaryState), /* @__PURE__ */ createElement(Button, {
|
|
8363
|
+
type: "button",
|
|
8364
|
+
variant: "ghost",
|
|
8365
|
+
size: "sm",
|
|
8366
|
+
onClick: () => setOpen((value) => !value)
|
|
8367
|
+
}, t(open ? "panels.discover.transportChangeHide" : "panels.discover.transportChange"))), open ? /* @__PURE__ */ createElement("div", {
|
|
7739
8368
|
className: MarketPage_module_default.discoverTransportRows,
|
|
7740
8369
|
role: "radiogroup",
|
|
7741
8370
|
"aria-label": t("panels.discover.transportTitle")
|
|
@@ -7754,8 +8383,8 @@ function DiscoverTransport({ t, transport }) {
|
|
|
7754
8383
|
value: row.url,
|
|
7755
8384
|
checked: transport.chosen === row.url,
|
|
7756
8385
|
onChange: () => transport.setChosen(row.url)
|
|
7757
|
-
}), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportKind }, t
|
|
7758
|
-
})), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ createElement(TextField, {
|
|
8386
|
+
}), /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportKind }, kindText(t, row.kind)), label === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, label));
|
|
8387
|
+
})) : null, open ? /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverTransportCustom }, /* @__PURE__ */ createElement(TextField, {
|
|
7759
8388
|
type: "text",
|
|
7760
8389
|
className: MarketPage_module_default.discoverTransportInput,
|
|
7761
8390
|
value: transport.custom,
|
|
@@ -7774,7 +8403,7 @@ function DiscoverTransport({ t, transport }) {
|
|
|
7774
8403
|
disabled: transport.custom.trim() === "" || customBusy,
|
|
7775
8404
|
"aria-busy": customBusy,
|
|
7776
8405
|
onClick: transport.checkCustom
|
|
7777
|
-
}, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))), needsAuth ? /* @__PURE__ */ createElement("p", {
|
|
8406
|
+
}, t(customBusy ? "panels.discover.transportChecking" : "panels.discover.transportTest")), transport.customState === null || stateText(t, transport.customState) === "" ? null : /* @__PURE__ */ createElement("span", { className: MarketPage_module_default.discoverTransportState }, stateText(t, transport.customState))) : null, needsAuth ? /* @__PURE__ */ createElement("p", {
|
|
7778
8407
|
className: MarketPage_module_default.discoverNotice,
|
|
7779
8408
|
role: "note"
|
|
7780
8409
|
}, /* @__PURE__ */ createElement(IconWarningOutlineRegular, {
|
|
@@ -7796,8 +8425,13 @@ function defaultOf(rows, states) {
|
|
|
7796
8425
|
const fallback = rows.find((row) => usable(states[row.url]));
|
|
7797
8426
|
return fallback === void 0 ? null : fallback.url;
|
|
7798
8427
|
}
|
|
7799
|
-
function useGitTransport(source) {
|
|
7800
|
-
const rows = useMemo(() =>
|
|
8428
|
+
function useGitTransport(source, preferredKind) {
|
|
8429
|
+
const rows = useMemo(() => {
|
|
8430
|
+
if (source === null) return [];
|
|
8431
|
+
const candidates = gitTransportCandidates(source.url);
|
|
8432
|
+
if (preferredKind === void 0) return candidates;
|
|
8433
|
+
return [...candidates].sort((left, right) => Number(right.kind === preferredKind) - Number(left.kind === preferredKind));
|
|
8434
|
+
}, [source, preferredKind]);
|
|
7801
8435
|
const [results, setResults] = useState({});
|
|
7802
8436
|
const [picked, setPicked] = useState(null);
|
|
7803
8437
|
const [custom, setCustom] = useState("");
|
|
@@ -7848,12 +8482,13 @@ function useGitTransport(source) {
|
|
|
7848
8482
|
}
|
|
7849
8483
|
//#endregion
|
|
7850
8484
|
//#region src/app/layouts/market/discover-confirm.tsx
|
|
7851
|
-
function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
|
|
8485
|
+
function DiscoverConfirm({ t, locale, choice, transports, onCancel, onConfirm }) {
|
|
7852
8486
|
if (choice === null) return null;
|
|
7853
8487
|
return /* @__PURE__ */ createElement(DiscoverConfirmBody, {
|
|
7854
8488
|
t,
|
|
7855
8489
|
locale,
|
|
7856
8490
|
choice,
|
|
8491
|
+
transports,
|
|
7857
8492
|
onCancel,
|
|
7858
8493
|
onConfirm
|
|
7859
8494
|
});
|
|
@@ -7861,9 +8496,10 @@ function DiscoverConfirm({ t, locale, choice, onCancel, onConfirm }) {
|
|
|
7861
8496
|
function factLabel(t, kind) {
|
|
7862
8497
|
return t(kind === "package" ? "panels.discover.factPackage" : kind === "registry" ? "panels.discover.factRegistry" : kind === "repository" ? "panels.discover.factRepository" : kind === "commit" ? "panels.discover.factCommit" : "panels.discover.factDirectory");
|
|
7863
8498
|
}
|
|
7864
|
-
function DiscoverConfirmBody({ t, locale, choice, onCancel, onConfirm }) {
|
|
8499
|
+
function DiscoverConfirmBody({ t, locale, choice, transports, onCancel, onConfirm }) {
|
|
7865
8500
|
const git = choice.version.source.type === "git" ? choice.version.source : null;
|
|
7866
|
-
const
|
|
8501
|
+
const host = git === null ? void 0 : gitAddressOf(git.url)?.host;
|
|
8502
|
+
const transport = useGitTransport(git, host === void 0 ? void 0 : transports[host]);
|
|
7867
8503
|
const title = displayTitleOf(choice.entry, locale) || choice.entry.name;
|
|
7868
8504
|
const facts = sourceFactsOf(choice.entry.name, choice.version).filter((fact) => git === null || fact.kind !== "repository");
|
|
7869
8505
|
const ready = git === null || transport.ready;
|
|
@@ -7884,7 +8520,7 @@ function DiscoverConfirmBody({ t, locale, choice, onCancel, onConfirm }) {
|
|
|
7884
8520
|
disabled: !ready,
|
|
7885
8521
|
"aria-busy": git !== null && transport.probing,
|
|
7886
8522
|
onClick: () => onConfirm(transport.chosen ?? void 0)
|
|
7887
|
-
}, t("panels.discover.cardInstall")))
|
|
8523
|
+
}, git !== null && transport.probing ? /* @__PURE__ */ createElement(Spinner, { size: 12 }) : null, t(git !== null && transport.probing ? "panels.discover.transportChecking" : "panels.discover.cardInstall")))
|
|
7888
8524
|
}, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverDialogBody }, /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.discoverConfirmHead }, /* @__PURE__ */ createElement("span", {
|
|
7889
8525
|
className: MarketPage_module_default.discoverArtwork,
|
|
7890
8526
|
"aria-hidden": "true"
|
|
@@ -8171,6 +8807,7 @@ function DiscoverDialogs({ t, d }) {
|
|
|
8171
8807
|
t,
|
|
8172
8808
|
locale: d.locale,
|
|
8173
8809
|
choice: d.choice,
|
|
8810
|
+
transports: d.transports,
|
|
8174
8811
|
onCancel: () => d.setChoice(null),
|
|
8175
8812
|
onConfirm: d.install
|
|
8176
8813
|
}), /* @__PURE__ */ createElement(DiscoverInitDialog, {
|
|
@@ -8412,6 +9049,8 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8412
9049
|
const [addingSource, setAddingSource] = useState(false);
|
|
8413
9050
|
const [pendingSourceId, setPendingSourceId] = useState(null);
|
|
8414
9051
|
const [knownSources, setKnownSources] = useState(null);
|
|
9052
|
+
const [installToken] = useState(() => `market-install:${globalThis.crypto.randomUUID()}`);
|
|
9053
|
+
usePublishMarketInstalling(installToken, installing !== null);
|
|
8415
9054
|
const loaded = useRef(false);
|
|
8416
9055
|
const loadTicket = useRef(0);
|
|
8417
9056
|
const sourceTicket = useRef(0);
|
|
@@ -8437,7 +9076,8 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8437
9076
|
if (response === null || !response.ok) return;
|
|
8438
9077
|
setKnownSources({
|
|
8439
9078
|
sources: sourceRowsOf(response.sources),
|
|
8440
|
-
selected: response.selected
|
|
9079
|
+
selected: response.selected,
|
|
9080
|
+
transports: response.transports ?? {}
|
|
8441
9081
|
});
|
|
8442
9082
|
}, []);
|
|
8443
9083
|
const load = useCallback(async (force = false) => {
|
|
@@ -8457,7 +9097,8 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8457
9097
|
setPayload(response);
|
|
8458
9098
|
setKnownSources({
|
|
8459
9099
|
sources: response.sources,
|
|
8460
|
-
selected: response.selected
|
|
9100
|
+
selected: response.selected,
|
|
9101
|
+
transports: {}
|
|
8461
9102
|
});
|
|
8462
9103
|
setLimit(50);
|
|
8463
9104
|
}, [t]);
|
|
@@ -8623,7 +9264,7 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8623
9264
|
setDetail(null);
|
|
8624
9265
|
beginSwitch();
|
|
8625
9266
|
setKnownSources((current) => current === null ? current : {
|
|
8626
|
-
|
|
9267
|
+
...current,
|
|
8627
9268
|
selected: id
|
|
8628
9269
|
});
|
|
8629
9270
|
sources.send({
|
|
@@ -8662,6 +9303,7 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8662
9303
|
...target.registry === void 0 ? {} : { registry: target.registry }
|
|
8663
9304
|
}).then((outcome) => {
|
|
8664
9305
|
if (!outcome.ok) return;
|
|
9306
|
+
publishMarketApplied(appliedUnitsOf(outcome.value));
|
|
8665
9307
|
const verdict = installVerdictOf(outcome.value, t);
|
|
8666
9308
|
if (verdict.kind === "failed") {
|
|
8667
9309
|
provision.fail(verdict.text);
|
|
@@ -8703,6 +9345,7 @@ function useDiscover(t, active, onInstalled) {
|
|
|
8703
9345
|
failure,
|
|
8704
9346
|
sources: knownSources?.sources ?? payload?.sources ?? [],
|
|
8705
9347
|
selected: knownSources?.selected ?? payload?.selected ?? null,
|
|
9348
|
+
transports: knownSources?.transports ?? {},
|
|
8706
9349
|
entries,
|
|
8707
9350
|
shown,
|
|
8708
9351
|
total: sorted.length,
|
|
@@ -8872,7 +9515,7 @@ function DiscoverPanel({ t, active, onInstalled, onShowInstalled }) {
|
|
|
8872
9515
|
}
|
|
8873
9516
|
//#endregion
|
|
8874
9517
|
//#region src/app/layouts/market/market-header.tsx
|
|
8875
|
-
function MarketHeader({ t, idPrefix, tab, busy,
|
|
9518
|
+
function MarketHeader({ t, idPrefix, tab, busy, onTab, onAdd }) {
|
|
8876
9519
|
const tabItems = useMemo(() => [{
|
|
8877
9520
|
value: "installed",
|
|
8878
9521
|
label: t("panels.market.tabInstalled"),
|
|
@@ -8884,23 +9527,14 @@ function MarketHeader({ t, idPrefix, tab, busy, checking, onTab, onReload, onAdd
|
|
|
8884
9527
|
id: `${idPrefix}-tab-discover`,
|
|
8885
9528
|
panelId: `${idPrefix}-panel-discover`
|
|
8886
9529
|
}], [idPrefix, t]);
|
|
8887
|
-
return /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ createElement(
|
|
8888
|
-
type: "button",
|
|
8889
|
-
className: `${MarketPage_module_default.marketIconButton}${checking ? ` ${MarketPage_module_default.marketIconButtonSpinning}` : ""}`,
|
|
8890
|
-
"aria-label": t("panels.market.checkUpdates"),
|
|
8891
|
-
disabled: busy,
|
|
8892
|
-
onClick: onReload
|
|
8893
|
-
}, /* @__PURE__ */ createElement("span", {
|
|
8894
|
-
className: MarketPage_module_default.marketIconWrap,
|
|
8895
|
-
"aria-hidden": "true"
|
|
8896
|
-
}, /* @__PURE__ */ createElement(IconRefreshOutlineRegular, null)))), /* @__PURE__ */ createElement(Button, {
|
|
9530
|
+
return /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("header", { className: MarketPage_module_default.marketPageHead }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("h1", { className: MarketPage_module_default.marketPageTitle }, t("panels.tab.market")), /* @__PURE__ */ createElement("p", { className: MarketPage_module_default.marketPageIntro }, t("panels.market.lead"))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketPageTools }, tab !== "installed" ? null : /* @__PURE__ */ createElement(Button, {
|
|
8897
9531
|
variant: "primary",
|
|
8898
9532
|
size: "sm",
|
|
8899
9533
|
className: MarketPage_module_default.marketAddButton,
|
|
8900
9534
|
icon: /* @__PURE__ */ createElement(IconPlusOutlineRegular, { size: 13 }),
|
|
8901
9535
|
disabled: busy,
|
|
8902
9536
|
onClick: onAdd
|
|
8903
|
-
}, t("panels.market.add.open"))))
|
|
9537
|
+
}, t("panels.market.add.open")))), /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketTabs }, /* @__PURE__ */ createElement(SegmentedTabs, {
|
|
8904
9538
|
className: MarketPage_module_default.marketTabList,
|
|
8905
9539
|
items: tabItems,
|
|
8906
9540
|
value: tab,
|
|
@@ -9274,6 +9908,30 @@ function useBoardWorkspace(workspaces, sessions) {
|
|
|
9274
9908
|
};
|
|
9275
9909
|
}
|
|
9276
9910
|
//#endregion
|
|
9911
|
+
//#region src/app/layouts/market/use-settling-modules.ts
|
|
9912
|
+
var NO_UNITS = /* @__PURE__ */ new Set();
|
|
9913
|
+
function unitsOf(key) {
|
|
9914
|
+
return key === "" ? [] : key.split("|");
|
|
9915
|
+
}
|
|
9916
|
+
function useSettlingModules(installedKey, rosterKey, activeKey) {
|
|
9917
|
+
const seenRef = useRef(null);
|
|
9918
|
+
const [settling, setSettling] = useState(NO_UNITS);
|
|
9919
|
+
useEffect(() => {
|
|
9920
|
+
const units = unitsOf(installedKey);
|
|
9921
|
+
const held = holdBack(units, new Set(unitsOf(rosterKey)), new Set(unitsOf(activeKey)), seenRef.current);
|
|
9922
|
+
seenRef.current = new Set(units);
|
|
9923
|
+
setSettling(held.length === 0 ? NO_UNITS : new Set(held));
|
|
9924
|
+
if (held.length === 0) return;
|
|
9925
|
+
const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
|
|
9926
|
+
return () => clearTimeout(timer);
|
|
9927
|
+
}, [
|
|
9928
|
+
installedKey,
|
|
9929
|
+
rosterKey,
|
|
9930
|
+
activeKey
|
|
9931
|
+
]);
|
|
9932
|
+
return settling;
|
|
9933
|
+
}
|
|
9934
|
+
//#endregion
|
|
9277
9935
|
//#region src/shared/api/installed-plugins.ts
|
|
9278
9936
|
var INSTALLED_PLUGINS_ROUTE = "panels/plugins";
|
|
9279
9937
|
//#endregion
|
|
@@ -9300,6 +9958,7 @@ var state = {
|
|
|
9300
9958
|
selfUpdate: null,
|
|
9301
9959
|
read: false,
|
|
9302
9960
|
checking: false,
|
|
9961
|
+
failed: false,
|
|
9303
9962
|
checkedAt: null
|
|
9304
9963
|
};
|
|
9305
9964
|
var listeners$2 = /* @__PURE__ */ new Set();
|
|
@@ -9319,6 +9978,18 @@ function subscribeModuleVersions(listener) {
|
|
|
9319
9978
|
listeners$2.delete(listener);
|
|
9320
9979
|
};
|
|
9321
9980
|
}
|
|
9981
|
+
function withMarketUpdates(modules, rows) {
|
|
9982
|
+
if (rows.length === 0) return modules;
|
|
9983
|
+
const byPkg = new Map(rows.map((row) => [row.pkg, row]));
|
|
9984
|
+
return modules.map((module) => {
|
|
9985
|
+
const row = byPkg.get(module.pkg);
|
|
9986
|
+
return row === void 0 ? module : {
|
|
9987
|
+
...module,
|
|
9988
|
+
latest: row.version,
|
|
9989
|
+
market: row
|
|
9990
|
+
};
|
|
9991
|
+
});
|
|
9992
|
+
}
|
|
9322
9993
|
function publish$1(next) {
|
|
9323
9994
|
state = next;
|
|
9324
9995
|
for (const listener of [...listeners$2]) listener();
|
|
@@ -9332,19 +10003,26 @@ function runModuleVersionsRead(force = false, fresh = false) {
|
|
|
9332
10003
|
...state,
|
|
9333
10004
|
checking: true
|
|
9334
10005
|
});
|
|
9335
|
-
const promise = Promise.all([
|
|
10006
|
+
const promise = Promise.all([
|
|
10007
|
+
readModuleVersions(force),
|
|
10008
|
+
readInstalledPlugins(force),
|
|
10009
|
+
readMarketInstalled()
|
|
10010
|
+
]).catch(() => null).then((responses) => {
|
|
9336
10011
|
if (at !== epoch) return;
|
|
9337
10012
|
if (!force && seq < newestForceSeq) return;
|
|
9338
10013
|
const versions = responses?.[0];
|
|
9339
10014
|
const plugins = responses?.[1];
|
|
10015
|
+
const market = responses?.[2];
|
|
10016
|
+
const read = versions?.ok === true;
|
|
9340
10017
|
publish$1({
|
|
9341
|
-
modules: versions?.ok === true ?
|
|
10018
|
+
modules: read ? withMarketUpdates(versions.modules, market?.ok === true ? market.modules : []) : state.modules,
|
|
9342
10019
|
plugins: plugins?.ok === true ? plugins.plugins : state.plugins,
|
|
9343
|
-
workbench:
|
|
9344
|
-
selfUpdate:
|
|
10020
|
+
workbench: read ? versions.workbench ?? null : state.workbench,
|
|
10021
|
+
selfUpdate: read ? versions.selfUpdate ?? null : state.selfUpdate,
|
|
9345
10022
|
read: true,
|
|
9346
10023
|
checking: false,
|
|
9347
|
-
|
|
10024
|
+
failed: !read,
|
|
10025
|
+
checkedAt: read ? Date.now() : state.checkedAt
|
|
9348
10026
|
});
|
|
9349
10027
|
}).finally(() => {
|
|
9350
10028
|
if (inFlight?.promise === promise) inFlight = null;
|
|
@@ -9380,6 +10058,7 @@ function useModuleVersions() {
|
|
|
9380
10058
|
selfUpdate: value.selfUpdate,
|
|
9381
10059
|
read: value.read,
|
|
9382
10060
|
checking: value.checking,
|
|
10061
|
+
failed: value.failed,
|
|
9383
10062
|
checkedAt: value.checkedAt,
|
|
9384
10063
|
reload
|
|
9385
10064
|
};
|
|
@@ -9635,18 +10314,79 @@ function AddModuleResult({ t, state }) {
|
|
|
9635
10314
|
}, t("panels.market.add.failed", { reason })) : kind === "restart" ? /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("p", { className: AddModule_module_default.resultWarn }, t("panels.market.add.doneRestart")), why === void 0 ? null : /* @__PURE__ */ createElement("p", { className: AddModule_module_default.resultMeta }, why)) : kind === "quiet" ? null : /* @__PURE__ */ createElement("p", { className: AddModule_module_default.result }, t("panels.market.add.tookEffect")), builds.length === 0 ? null : /* @__PURE__ */ createElement("div", { className: AddModule_module_default.approval }, /* @__PURE__ */ createElement("p", { className: AddModule_module_default.approvalTitle }, t("panels.market.add.approveTitle")), /* @__PURE__ */ createElement("p", { className: AddModule_module_default.approvalText }, t("panels.market.add.approveHint", { packages: builds.join("、") })), /* @__PURE__ */ 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__ */ createElement("p", { className: supplyTone(outcome.supply.state) }, t(supply, { reason: outcome.supply.reason ?? "" })), state.failure === null ? null : /* @__PURE__ */ createElement("p", { className: AddModule_module_default.problem }, state.failure), outcome.change.errorDetail === void 0 ? null : /* @__PURE__ */ createElement(Fragment, null, /* @__PURE__ */ createElement("p", { className: AddModule_module_default.detailLabel }, t("panels.market.add.details")), /* @__PURE__ */ createElement("p", { className: AddModule_module_default.detail }, outcome.change.errorDetail)));
|
|
9636
10315
|
}
|
|
9637
10316
|
//#endregion
|
|
10317
|
+
//#region src/app/layouts/market/add-module-registry-prefs.ts
|
|
10318
|
+
var DEFAULT_REGISTRY_CHOICE = {
|
|
10319
|
+
kind: "default",
|
|
10320
|
+
value: ""
|
|
10321
|
+
};
|
|
10322
|
+
function isRegistryKind(value) {
|
|
10323
|
+
return value === "default" || value === "url" || value === "custom";
|
|
10324
|
+
}
|
|
10325
|
+
function parseRegistryChoice(raw) {
|
|
10326
|
+
if (raw === null) return DEFAULT_REGISTRY_CHOICE;
|
|
10327
|
+
let value;
|
|
10328
|
+
try {
|
|
10329
|
+
value = JSON.parse(raw);
|
|
10330
|
+
} catch {
|
|
10331
|
+
return DEFAULT_REGISTRY_CHOICE;
|
|
10332
|
+
}
|
|
10333
|
+
if (typeof value !== "object" || value === null) return DEFAULT_REGISTRY_CHOICE;
|
|
10334
|
+
const record = value;
|
|
10335
|
+
if (!isRegistryKind(record.kind)) return DEFAULT_REGISTRY_CHOICE;
|
|
10336
|
+
if (record.kind === "default") return DEFAULT_REGISTRY_CHOICE;
|
|
10337
|
+
if (record.kind === "custom") return {
|
|
10338
|
+
kind: "custom",
|
|
10339
|
+
value: ""
|
|
10340
|
+
};
|
|
10341
|
+
if (typeof record.value !== "string" || !customRegistryAllowed(record.value)) return DEFAULT_REGISTRY_CHOICE;
|
|
10342
|
+
return {
|
|
10343
|
+
kind: "url",
|
|
10344
|
+
value: record.value.trim()
|
|
10345
|
+
};
|
|
10346
|
+
}
|
|
10347
|
+
function readRegistryPrefs() {
|
|
10348
|
+
const custom = readText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM);
|
|
10349
|
+
return {
|
|
10350
|
+
choice: parseRegistryChoice(readText(STORAGE_KEY_MARKET_REGISTRY)),
|
|
10351
|
+
custom: custom === null ? "" : custom.trim()
|
|
10352
|
+
};
|
|
10353
|
+
}
|
|
10354
|
+
function writeRegistryChoice(choice) {
|
|
10355
|
+
if (choice.kind === "custom") {
|
|
10356
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
|
|
10357
|
+
kind: "custom",
|
|
10358
|
+
value: ""
|
|
10359
|
+
}));
|
|
10360
|
+
return;
|
|
10361
|
+
}
|
|
10362
|
+
if (choice.kind === "url" && customRegistryAllowed(choice.value)) {
|
|
10363
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify({
|
|
10364
|
+
kind: "url",
|
|
10365
|
+
value: choice.value.trim()
|
|
10366
|
+
}));
|
|
10367
|
+
return;
|
|
10368
|
+
}
|
|
10369
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY, JSON.stringify(DEFAULT_REGISTRY_CHOICE));
|
|
10370
|
+
}
|
|
10371
|
+
function writeRegistryCustom(value) {
|
|
10372
|
+
const text = value.trim();
|
|
10373
|
+
writeText(STORAGE_KEY_MARKET_REGISTRY_CUSTOM, text === "" ? null : text);
|
|
10374
|
+
}
|
|
10375
|
+
function reconcileRegistryChoice(choice, choices) {
|
|
10376
|
+
if (choice.kind !== "url") return choice;
|
|
10377
|
+
return choices.some((option) => option.choice.kind === "url" && option.choice.value === choice.value) ? choice : DEFAULT_REGISTRY_CHOICE;
|
|
10378
|
+
}
|
|
10379
|
+
//#endregion
|
|
9638
10380
|
//#region src/app/layouts/market/use-add-module.ts
|
|
9639
10381
|
function newRequestId() {
|
|
9640
10382
|
return crypto.randomUUID();
|
|
9641
10383
|
}
|
|
9642
10384
|
function useAddModule(options) {
|
|
9643
10385
|
const { onInstalled, failedText } = options;
|
|
10386
|
+
const [prefs] = useState(readRegistryPrefs);
|
|
9644
10387
|
const [spec, setSpec] = useState("");
|
|
9645
|
-
const [choice, setChoice] = useState(
|
|
9646
|
-
|
|
9647
|
-
value: ""
|
|
9648
|
-
});
|
|
9649
|
-
const [custom, setCustom] = useState("");
|
|
10388
|
+
const [choice, setChoice] = useState(prefs.choice);
|
|
10389
|
+
const [custom, setCustom] = useState(prefs.custom);
|
|
9650
10390
|
const [registryOpen, setRegistryOpen] = useState(false);
|
|
9651
10391
|
const [guideOpen, setGuideOpen] = useState(false);
|
|
9652
10392
|
const [phase, setPhase] = useState("idle");
|
|
@@ -9658,6 +10398,8 @@ function useAddModule(options) {
|
|
|
9658
10398
|
const generationRef = useRef(0);
|
|
9659
10399
|
const requestIdRef = useRef("");
|
|
9660
10400
|
const { busy: classifying } = useVisibleBusy(phase === "inspecting", 500);
|
|
10401
|
+
const [installToken] = useState(() => `market-install:${newRequestId()}`);
|
|
10402
|
+
usePublishMarketInstalling(installToken, phase === "installing");
|
|
9661
10403
|
const write = useHostWrite({
|
|
9662
10404
|
channel: "provision",
|
|
9663
10405
|
networkText: failedText
|
|
@@ -9674,7 +10416,9 @@ function useAddModule(options) {
|
|
|
9674
10416
|
let alive = true;
|
|
9675
10417
|
readBundleRegistries().then((response) => {
|
|
9676
10418
|
if (!alive) return;
|
|
9677
|
-
|
|
10419
|
+
const options = registryOptions(response.ok ? response.registries : null);
|
|
10420
|
+
setChoices(options);
|
|
10421
|
+
setChoice((previous) => reconcileRegistryChoice(previous, options));
|
|
9678
10422
|
});
|
|
9679
10423
|
return () => {
|
|
9680
10424
|
alive = false;
|
|
@@ -9741,6 +10485,7 @@ function useAddModule(options) {
|
|
|
9741
10485
|
supply: value.supply,
|
|
9742
10486
|
...value.plugin === void 0 ? {} : { plugin: value.plugin }
|
|
9743
10487
|
});
|
|
10488
|
+
publishMarketApplied(appliedUnitsOf(value));
|
|
9744
10489
|
setPhase("result");
|
|
9745
10490
|
if (value.change.application === "applied" || value.change.application === "restart-required") onInstalled();
|
|
9746
10491
|
});
|
|
@@ -9785,6 +10530,14 @@ function useAddModule(options) {
|
|
|
9785
10530
|
setPreview(null);
|
|
9786
10531
|
setPhase("idle");
|
|
9787
10532
|
}, []);
|
|
10533
|
+
const choose = useCallback((next) => {
|
|
10534
|
+
setChoice(next);
|
|
10535
|
+
writeRegistryChoice(next);
|
|
10536
|
+
}, []);
|
|
10537
|
+
const chooseCustom = useCallback((value) => {
|
|
10538
|
+
setCustom(value);
|
|
10539
|
+
writeRegistryCustom(value);
|
|
10540
|
+
}, []);
|
|
9788
10541
|
return {
|
|
9789
10542
|
spec,
|
|
9790
10543
|
choice,
|
|
@@ -9800,10 +10553,8 @@ function useAddModule(options) {
|
|
|
9800
10553
|
removing,
|
|
9801
10554
|
builds: outcome?.change.pendingBuilds ?? [],
|
|
9802
10555
|
setSpec,
|
|
9803
|
-
setChoice:
|
|
9804
|
-
|
|
9805
|
-
}, []),
|
|
9806
|
-
setCustom,
|
|
10556
|
+
setChoice: choose,
|
|
10557
|
+
setCustom: chooseCustom,
|
|
9807
10558
|
toggleRegistry: useCallback(() => setRegistryOpen((value) => !value), []),
|
|
9808
10559
|
closeRegistry: useCallback(() => setRegistryOpen(false), []),
|
|
9809
10560
|
toggleGuide: useCallback(() => setGuideOpen((value) => !value), []),
|
|
@@ -9926,7 +10677,6 @@ var MOCK_FRESHNESS = {
|
|
|
9926
10677
|
checking: false,
|
|
9927
10678
|
checkedAt: null
|
|
9928
10679
|
};
|
|
9929
|
-
var NO_UNITS = /* @__PURE__ */ new Set();
|
|
9930
10680
|
function useLiveManifests(units) {
|
|
9931
10681
|
const subscribe = useCallback((listener) => units.subscribe(listener), [units]);
|
|
9932
10682
|
const revision = useCallback(() => units.version(), [units]);
|
|
@@ -9953,7 +10703,8 @@ function makeMarketEntryIcon(units) {
|
|
|
9953
10703
|
installed: modules === null ? void 0 : withClientRefusals(modules, units.refusals()),
|
|
9954
10704
|
plugins,
|
|
9955
10705
|
workbench,
|
|
9956
|
-
busy: useMarketBusy()
|
|
10706
|
+
busy: useMarketBusy(),
|
|
10707
|
+
...useMarketInstallState()
|
|
9957
10708
|
});
|
|
9958
10709
|
useEffect(() => {
|
|
9959
10710
|
publishPanelHint(MARKET_PANEL_ID, hint);
|
|
@@ -9968,8 +10719,9 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
9968
10719
|
const manifests = useLiveManifests(units);
|
|
9969
10720
|
const installable = useInstallableUnits(units);
|
|
9970
10721
|
const { capabilities, checkedAt, checking, forceProbe, reload: reloadCapability } = useCapabilityMap(0);
|
|
9971
|
-
const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, read: installedRead, reload: reloadVersions } = useModuleVersions();
|
|
10722
|
+
const { modules, plugins, workbench, selfUpdate, checking: versionsChecking, failed: versionsFailed, checkedAt: versionsCheckedAt, read: installedRead, reload: reloadVersions } = useModuleVersions();
|
|
9972
10723
|
const machineBoard = useEnabledUnits(0, null);
|
|
10724
|
+
const install = useMarketInstallState();
|
|
9973
10725
|
const [adding, setAdding] = useState(false);
|
|
9974
10726
|
const [acting, setActing] = useState(false);
|
|
9975
10727
|
const [tab, setTab] = useState("installed");
|
|
@@ -10011,27 +10763,11 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
10011
10763
|
forceProbe,
|
|
10012
10764
|
reloadVersions
|
|
10013
10765
|
]);
|
|
10014
|
-
const
|
|
10015
|
-
const
|
|
10016
|
-
const activeKey = Object.keys(capabilities ?? {}).join("|");
|
|
10017
|
-
const seenRef = useRef(null);
|
|
10018
|
-
const [settling, setSettling] = useState(NO_UNITS);
|
|
10019
|
-
useEffect(() => {
|
|
10020
|
-
const units = installedKey === "" ? [] : installedKey.split("|");
|
|
10021
|
-
const held = holdBack(units, new Set(rosterKey === "" ? [] : rosterKey.split("|")), new Set(activeKey === "" ? [] : activeKey.split("|")), seenRef.current);
|
|
10022
|
-
seenRef.current = new Set(units);
|
|
10023
|
-
setSettling(held.length === 0 ? NO_UNITS : new Set(held));
|
|
10024
|
-
if (held.length === 0) return;
|
|
10025
|
-
const timer = setTimeout(() => setSettling(NO_UNITS), MODULE_SETTLE_MS);
|
|
10026
|
-
return () => clearTimeout(timer);
|
|
10027
|
-
}, [
|
|
10028
|
-
installedKey,
|
|
10029
|
-
rosterKey,
|
|
10030
|
-
activeKey
|
|
10031
|
-
]);
|
|
10766
|
+
const settling = useSettlingModules((installed ?? []).map((module) => module.unit).join("|"), manifests.map((manifest) => manifest.id).join("|"), Object.keys(capabilities ?? {}).join("|"));
|
|
10767
|
+
const held = install.applied.size === 0 ? settling : /* @__PURE__ */ new Set([...settling, ...install.applied]);
|
|
10032
10768
|
const freshness = {
|
|
10033
10769
|
loaded: capabilities !== null,
|
|
10034
|
-
checking,
|
|
10770
|
+
checking: checking || versionsChecking,
|
|
10035
10771
|
checkedAt
|
|
10036
10772
|
};
|
|
10037
10773
|
const pendingFreshness = {
|
|
@@ -10044,16 +10780,13 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
10044
10780
|
const mockNonce = devMarket.pick.nonce;
|
|
10045
10781
|
const shownFreshness = mock === void 0 ? freshness : mock.loaded === false ? pendingFreshness : MOCK_FRESHNESS;
|
|
10046
10782
|
const shownRead = mock === void 0 ? installedRead : mock.installedRead ?? true;
|
|
10047
|
-
const
|
|
10048
|
-
const busy = !marketSettled(shownFreshness, shownRead) || shownChecking || acting;
|
|
10783
|
+
const busy = !marketSettled(shownFreshness, shownRead) || acting;
|
|
10049
10784
|
return /* @__PURE__ */ createElement("div", { className: MarketPage_module_default.marketPage }, /* @__PURE__ */ createElement(MarketHeader, {
|
|
10050
10785
|
t,
|
|
10051
10786
|
idPrefix: MARKET_PANEL_ID,
|
|
10052
10787
|
tab,
|
|
10053
10788
|
busy,
|
|
10054
|
-
checking: shownChecking,
|
|
10055
10789
|
onTab: setTab,
|
|
10056
|
-
onReload: () => reload({ force: true }),
|
|
10057
10790
|
onAdd: openAddModule
|
|
10058
10791
|
}), devMarket.strip, /* @__PURE__ */ createElement("div", {
|
|
10059
10792
|
id: `${MARKET_PANEL_ID}-panel-installed`,
|
|
@@ -10071,12 +10804,15 @@ function MarketPanel({ t, units, titleOf }) {
|
|
|
10071
10804
|
onChanged: reload,
|
|
10072
10805
|
onPending: setActing,
|
|
10073
10806
|
updates,
|
|
10807
|
+
updatesCheckedAt: versionsCheckedAt,
|
|
10808
|
+
updatesFailed: versionsFailed,
|
|
10074
10809
|
installed,
|
|
10075
10810
|
installedRead: shownRead,
|
|
10076
10811
|
workbench,
|
|
10077
10812
|
selfUpdate,
|
|
10078
10813
|
plugins,
|
|
10079
|
-
settling: mock === void 0 ?
|
|
10814
|
+
settling: mock === void 0 ? held : void 0,
|
|
10815
|
+
installing: mock === void 0 ? install.installing : false,
|
|
10080
10816
|
mock,
|
|
10081
10817
|
defaults: machineBoard?.defaults ?? [],
|
|
10082
10818
|
changed: machineBoard?.changed ?? {}
|
|
@@ -11563,6 +12299,7 @@ function createClientUnitRegistry(options = {}) {
|
|
|
11563
12299
|
return manifestsCache;
|
|
11564
12300
|
},
|
|
11565
12301
|
refusals: () => refusals,
|
|
12302
|
+
declared: () => [...known.values()],
|
|
11566
12303
|
installable: () => installableIds,
|
|
11567
12304
|
setManifests(manifests, installable) {
|
|
11568
12305
|
known = new Map(manifests.map((manifest) => [manifest.id, manifest]));
|
|
@@ -12507,6 +13244,45 @@ function MarketSourceApprovalSeat({ tool, args, t }) {
|
|
|
12507
13244
|
}, []);
|
|
12508
13245
|
return createElement(ApprovalPlan, { rows: marketSourceRows(tool, args, payload, t) });
|
|
12509
13246
|
}
|
|
13247
|
+
function pluginToolIndexOf(manifests) {
|
|
13248
|
+
const index = /* @__PURE__ */ new Map();
|
|
13249
|
+
for (const manifest of manifests) for (const tool of manifest.tools) {
|
|
13250
|
+
if (tool.opencli === void 0) continue;
|
|
13251
|
+
index.set(tool.name, tool.opencli);
|
|
13252
|
+
}
|
|
13253
|
+
return index;
|
|
13254
|
+
}
|
|
13255
|
+
function argText(value) {
|
|
13256
|
+
if (typeof value === "string") return value;
|
|
13257
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
13258
|
+
const text = JSON.stringify(value);
|
|
13259
|
+
return text === void 0 ? String(value) : text;
|
|
13260
|
+
}
|
|
13261
|
+
function pluginApprovalRows(origin, args, t) {
|
|
13262
|
+
const rows = [{
|
|
13263
|
+
label: t("approval.plugin.name"),
|
|
13264
|
+
value: origin.plugin
|
|
13265
|
+
}, {
|
|
13266
|
+
label: t("approval.plugin.command"),
|
|
13267
|
+
value: origin.command
|
|
13268
|
+
}];
|
|
13269
|
+
const note = args[APPROVAL_NOTE_ARG];
|
|
13270
|
+
if (typeof note === "string" && note.trim() !== "") rows.push({
|
|
13271
|
+
label: t("approval.plugin.note"),
|
|
13272
|
+
value: note.replace(/\s+/g, " ").trim()
|
|
13273
|
+
});
|
|
13274
|
+
for (const name of origin.args) {
|
|
13275
|
+
if (!(name in args)) continue;
|
|
13276
|
+
rows.push({
|
|
13277
|
+
label: name,
|
|
13278
|
+
value: argText(args[name])
|
|
13279
|
+
});
|
|
13280
|
+
}
|
|
13281
|
+
return rows;
|
|
13282
|
+
}
|
|
13283
|
+
function shellApprovalRenderer(manifests) {
|
|
13284
|
+
return (input, t) => shellApprovalDetail(input, t, pluginToolIndexOf(manifests()));
|
|
13285
|
+
}
|
|
12510
13286
|
function shellClaimsApprovalDetail(tool) {
|
|
12511
13287
|
return ALL_TOOLS.includes(tool);
|
|
12512
13288
|
}
|
|
@@ -12518,7 +13294,9 @@ function stopApprovalRows(args, t) {
|
|
|
12518
13294
|
value: `${unit === "" ? "<unit>" : unit} · ${id === "" ? "<id>" : id}`
|
|
12519
13295
|
}];
|
|
12520
13296
|
}
|
|
12521
|
-
function shellApprovalPlan(input, t) {
|
|
13297
|
+
function shellApprovalPlan(input, t, pluginTools) {
|
|
13298
|
+
const origin = pluginTools?.get(input.tool);
|
|
13299
|
+
if (origin !== void 0) return { rows: pluginApprovalRows(origin, input.args, t) };
|
|
12522
13300
|
if (input.tool === "workbench_diy_record_prepare") return {
|
|
12523
13301
|
rows: recordApprovalRows(input.args, t),
|
|
12524
13302
|
warn: t("approval.record.noSwitch")
|
|
@@ -12529,7 +13307,7 @@ function shellApprovalPlan(input, t) {
|
|
|
12529
13307
|
};
|
|
12530
13308
|
return shellClaimsApprovalDetail(input.tool) ? { rows: [] } : void 0;
|
|
12531
13309
|
}
|
|
12532
|
-
function shellApprovalDetail(input, t) {
|
|
13310
|
+
function shellApprovalDetail(input, t, pluginTools) {
|
|
12533
13311
|
if (input.tool === "workbench_diy_publish") return createElement(PublishApprovalSeat, {
|
|
12534
13312
|
args: input.args,
|
|
12535
13313
|
t
|
|
@@ -12539,7 +13317,7 @@ function shellApprovalDetail(input, t) {
|
|
|
12539
13317
|
args: input.args,
|
|
12540
13318
|
t
|
|
12541
13319
|
});
|
|
12542
|
-
const plan = shellApprovalPlan(input, t);
|
|
13320
|
+
const plan = shellApprovalPlan(input, t, pluginTools);
|
|
12543
13321
|
if (plan === void 0) return void 0;
|
|
12544
13322
|
if (plan.rows.length === 0) return createElement(Fragment, null);
|
|
12545
13323
|
return /* @__PURE__ */ createElement(ApprovalPlan, {
|
|
@@ -12889,6 +13667,10 @@ function Breadcrumbs({ trail, onGoTo, titleKeyOf, t }) {
|
|
|
12889
13667
|
}, /* @__PURE__ */ createElement("span", { className: Breadcrumbs_module_default.tabTitle }, stepLabel(step, titleKeyOf, t))));
|
|
12890
13668
|
}));
|
|
12891
13669
|
}
|
|
13670
|
+
var BoardEmpty_module_default = {
|
|
13671
|
+
actions: "_actions_smeq7_1",
|
|
13672
|
+
action: "_action_smeq7_1"
|
|
13673
|
+
};
|
|
12892
13674
|
//#endregion
|
|
12893
13675
|
//#region src/app/layouts/rightbar/BoardEmpty.tsx
|
|
12894
13676
|
function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
|
|
@@ -12896,20 +13678,23 @@ function BoardEmpty({ t, onBuildModule, onOpenModules, onOpenMarket }) {
|
|
|
12896
13678
|
icon: /* @__PURE__ */ createElement(IconBrandMark, { size: 32 }),
|
|
12897
13679
|
title: t("panels.empty"),
|
|
12898
13680
|
hint: t("panels.emptyHint"),
|
|
12899
|
-
action: /* @__PURE__ */ createElement(
|
|
13681
|
+
action: /* @__PURE__ */ createElement("div", { className: BoardEmpty_module_default.actions }, /* @__PURE__ */ createElement(Button, {
|
|
12900
13682
|
type: "button",
|
|
12901
13683
|
size: "sm",
|
|
12902
13684
|
variant: "primary",
|
|
13685
|
+
className: BoardEmpty_module_default.action,
|
|
12903
13686
|
onClick: onBuildModule
|
|
12904
13687
|
}, t("panels.buildModule")), /* @__PURE__ */ createElement(Button, {
|
|
12905
13688
|
type: "button",
|
|
12906
13689
|
size: "sm",
|
|
12907
13690
|
variant: "toolbar",
|
|
13691
|
+
className: BoardEmpty_module_default.action,
|
|
12908
13692
|
onClick: onOpenModules
|
|
12909
13693
|
}, t("panels.choose")), /* @__PURE__ */ createElement(Button, {
|
|
12910
13694
|
type: "button",
|
|
12911
13695
|
size: "sm",
|
|
12912
13696
|
variant: "toolbar",
|
|
13697
|
+
className: BoardEmpty_module_default.action,
|
|
12913
13698
|
onClick: onOpenMarket
|
|
12914
13699
|
}, t("panels.browseMarket")))
|
|
12915
13700
|
});
|
|
@@ -15452,7 +16237,7 @@ function messagesOf(units) {
|
|
|
15452
16237
|
...face.messages === void 0 ? {} : { messages: face.messages }
|
|
15453
16238
|
}));
|
|
15454
16239
|
}
|
|
15455
|
-
var COMPONENT_CSS_MARKER = ".wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n padding-top: 0;\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n}\n.wb-approvalRow {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n.wb-approvalLabel {\n flex: none;\n width: var(--wb-len-56);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-card-gutter);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n cursor: default;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-formProblem {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\n:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n.wb-selectSearch:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._marketList_jfyof_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_jfyof_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_jfyof_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_jfyof_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_jfyof_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketStatus_jfyof_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_jfyof_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_jfyof_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_jfyof_66 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._marketName_jfyof_39 ._marketVersion_jfyof_72 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_jfyof_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_jfyof_72::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketLocalTag_jfyof_94 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_jfyof_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_jfyof_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_jfyof_112::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_jfyof_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_jfyof_131 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_jfyof_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_jfyof_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_jfyof_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_jfyof_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_jfyof_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_jfyof_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketSectionTitle_jfyof_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketName_jfyof_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_jfyof_175 ._marketIcon_jfyof_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_jfyof_188 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_jfyof_198 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_jfyof_205 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketEmpty_jfyof_212 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_jfyof_217 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_jfyof_217 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_jfyof_235 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_jfyof_243 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_jfyof_248 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_jfyof_254 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketPanel_jfyof_263 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_jfyof_263[hidden] {\n display: none;\n}\n\n._marketTabs_jfyof_273 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_jfyof_278 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketIconButton_jfyof_283 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n color: var(--dsw-alias-label-caption);\n cursor: pointer;\n}\n\n._marketIconButton_jfyof_283:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketIconButton_jfyof_283:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._marketIconWrap_jfyof_308 {\n display: inline-flex;\n}\n\n._marketIconButtonSpinning_jfyof_312 svg {\n animation: _wb-spin_jfyof_1 var(--wb-dur-0-9) linear infinite;\n}\n\n._marketAddButton_jfyof_316 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_jfyof_212 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketEmptyTitle_jfyof_333 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n@keyframes _wb-spin_jfyof_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n._discoverPage_jfyof_347 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_jfyof_354 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_jfyof_361 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_jfyof_367 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_jfyof_372 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_jfyof_379 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_jfyof_385 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_jfyof_390 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_jfyof_395 {\n flex: none;\n}\n\n._discoverSearch_jfyof_399 {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n._discoverSearchField_jfyof_407 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_jfyof_412 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_jfyof_407 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_jfyof_399 ._discoverSearchClear_jfyof_421 {\n position: absolute;\n top: 50%;\n inset-inline-end: var(--wb-len-4);\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n color: var(--dsw-alias-label-tertiary);\n transform: translateY(-50%);\n}\n\n._discoverSearchClear_jfyof_421:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_jfyof_361 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_jfyof_367 {\n grid-area: market;\n }\n\n ._discoverMarketButton_jfyof_372 {\n margin-left: 0;\n }\n\n ._discoverLabels_jfyof_385 {\n grid-area: labels;\n }\n\n ._discoverSearch_jfyof_399 {\n grid-area: search;\n }\n\n ._discoverSort_jfyof_390 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_jfyof_395 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_jfyof_472 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_jfyof_479 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_jfyof_488 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_jfyof_488:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_jfyof_502 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_jfyof_514 {\n object-fit: contain;\n}\n\n._discoverMain_jfyof_518 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_jfyof_526 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_jfyof_534 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_jfyof_534::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_jfyof_534:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_jfyof_534:focus-visible::after {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverStrong_jfyof_565 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_jfyof_571 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_jfyof_580 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_jfyof_587 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_jfyof_593 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverBlocked_jfyof_602 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_jfyof_607 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_jfyof_616 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_jfyof_607 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_jfyof_626 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_jfyof_632 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_jfyof_632:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_jfyof_632:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverCrumbIcon_jfyof_655 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_jfyof_659 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_jfyof_665 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_jfyof_671 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_jfyof_678 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_jfyof_685 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_jfyof_690 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_jfyof_695 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_jfyof_700 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_jfyof_706 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_jfyof_713 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_jfyof_719 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_jfyof_724 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_jfyof_734 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_jfyof_740 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_jfyof_748 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_jfyof_757 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_jfyof_764 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_jfyof_764:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_jfyof_774 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_jfyof_782 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_jfyof_790 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_jfyof_795 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_jfyof_804 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_jfyof_810 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverNotice_jfyof_819 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_jfyof_819 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_jfyof_837 {\n align-self: center;\n}\n\n._discoverTransport_jfyof_841 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_jfyof_847 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRows_jfyof_852 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_jfyof_852 {\n display: flex;\n flex: 1;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n}\n\n._discoverTransportRow_jfyof_852:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_jfyof_852:has(._discoverTransportRadio_jfyof_873:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_jfyof_852:has(._discoverTransportRadio_jfyof_873:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_jfyof_873 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_jfyof_887 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_jfyof_893 {\n flex: none;\n margin-left: auto;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='ok'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='auth'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_jfyof_852[data-state='unreachable'] ._discoverTransportState_jfyof_893,\n._discoverTransportRow_jfyof_852[data-state='unknown'] ._discoverTransportState_jfyof_893 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_jfyof_913 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_jfyof_919 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_jfyof_924 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverInstallText_jfyof_935 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_jfyof_941 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_jfyof_945 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_jfyof_951 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_jfyof_959 {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wb-len-12);\n padding: var(--wb-len-10) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceConfirm_jfyof_968 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_jfyof_974 {\n display: flex;\n flex: 1;\n align-items: flex-start;\n gap: var(--wb-len-10);\n min-width: 0;\n cursor: pointer;\n}\n\n._discoverSourceRadio_jfyof_983 {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._discoverSourceMain_jfyof_991 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_jfyof_999 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverSourceUrl_jfyof_1007 {\n display: block;\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverSourceMore_jfyof_1017 {\n flex: none;\n}\n\n._discoverSourceLoading_jfyof_1021 {\n display: flex;\n flex: none;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceHint_jfyof_1031 {\n display: flex;\n flex-basis: 100%;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverSourceHint_jfyof_1031 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_jfyof_1045 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_jfyof_1051 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_jfyof_1057 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_jfyof_1062 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_jfyof_1068 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_jfyof_1073 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_jfyof_1079 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_jfyof_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_jfyof_502._discoverSkeletonFill_jfyof_1079 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_jfyof_1088 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_jfyof_1095 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_jfyof_1099 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_jfyof_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_jfyof_1079 {\n animation: none;\n }\n}\n\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1lv8f_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1lv8f_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1lv8f_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1lv8f_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1lv8f_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1lv8f_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1lv8f_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1lv8f_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1lv8f_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1lv8f_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1lv8f_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1lv8f_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1lv8f_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1lv8f_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1lv8f_351,\n._resultWarn_1lv8f_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1lv8f_383 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1lv8f_403 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_zyzt3_21 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_zyzt3_51 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_zyzt3_51 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_zyzt3_3 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_zyzt3_125 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_zyzt3_133 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_zyzt3_4 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_zyzt3_159 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_zyzt3_192 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_zyzt3_250 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._trigger_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_15ptp_119 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_15ptp_134 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_15ptp_170 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1cmz0_74 ._rowAction_1cmz0_84 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
|
|
16240
|
+
var COMPONENT_CSS_MARKER = ".wb-activityBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding-top: var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n.wb-activityBlock:first-child {\n padding-top: 0;\n border-top: none;\n}\n\n.wb-activityBlockHead {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8);\n}\n\n.wb-activityLine {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-activityLineText {\n flex: none;\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n max-height: var(--wb-len-72);\n overflow-y: auto;\n}\n\n.wb-activityLineAt {\n flex: none;\n margin-left: auto;\n font-size: var(--wb-font-10);\n line-height: var(--wb-line-16);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-activityLine > .wb-activityLineAt,\n.wb-activityLine > .wb-activityLineActions {\n margin-left: auto;\n}\n\n.wb-activityLine > .wb-activityLineAt + .wb-activityLineActions {\n margin-left: 0;\n}\n\n.wb-activityLineActions {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n.wb-activityActionFailed {\n color: var(--dsw-alias-state-error-primary);\n}\n.wb-note {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-problem {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalCommand {\n max-width: 100%;\n}\n.wb-approvalPlan {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-approvalHint {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n.wb-approvalRows {\n display: grid;\n grid-template-columns: minmax(var(--wb-len-56), auto) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-2);\n align-items: baseline;\n margin: 0;\n}\n.wb-approvalRow {\n display: contents;\n}\n.wb-approvalLabel {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n.wb-approvalValue {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-approvalWarn {\n color: var(--dsw-alias-label-secondary);\n}\n.wb-cardHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-8) var(--wb-card-gutter);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-cardTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-cardMeta {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-cardMeta::before {\n content: '\\00b7';\n margin-right: var(--wb-len-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardOpen ~ .wb-cardRefresh {\n margin-left: 0;\n}\n\n.wb-cardOpen:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh {\n margin-left: auto;\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-4);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardRefresh:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-cardRefresh:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-cardGear {\n flex: none;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: var(--wb-len-3);\n border-radius: var(--wb-radius-6);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-cardGear:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n.wb-card {\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-bg-layer-1);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: none;\n}\n.wb-cardBody {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-card-gutter);\n font-size: var(--dsw-font-xxs-12-font-size);\n}\n.wb-cardBleed {\n margin-inline: calc(-1 * var(--wb-card-gutter));\n}\n._anchor_yq4s2_1 {\n display: contents;\n}\n.wb-spinner {\n display: inline-flex;\n align-items: center;\n flex: none;\n}\n.wb-choiceMenu {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n background: transparent;\n}\n\n.wb-choiceMenu[data-variant='boxed'] {\n padding: var(--wb-len-4);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-choiceOption {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-choiceOptionOn {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-checkbox {\n position: absolute;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.wb-checkboxBox {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-xs);\n corner-shape: round;\n color: var(--dsw-alias-label-primary-foreground);\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-choiceOption:hover .wb-checkboxBox {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-checkbox:checked + .wb-checkboxBox {\n border-color: var(--dsw-alias-brand-primary);\n background: var(--dsw-alias-brand-primary);\n}\n\n.wb-checkbox:disabled + .wb-checkboxBox {\n cursor: default;\n}\n\n.wb-checkbox:focus-visible + .wb-checkboxBox {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n.wb-choiceOption:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-choiceOption:has(:disabled) {\n cursor: default;\n opacity: 0.5;\n}\n\n.wb-choiceOption:has(:disabled),\n.wb-choiceOption:has(:disabled):hover {\n background: transparent;\n}\n\n.wb-choiceLabel {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.wb-choiceLabelText {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceLabel:has(.wb-choiceDescription) .wb-choiceLabelText {\n overflow: visible;\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n.wb-choiceDescription {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n.wb-choiceLoading {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-choiceLoadingText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wb-choiceEmpty {\n display: flex;\n align-items: center;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-8);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio {\n appearance: none;\n -webkit-appearance: none;\n flex: none;\n box-sizing: border-box;\n width: var(--wb-len-12);\n height: var(--wb-len-12);\n margin: 0;\n border: 1px solid var(--dsw-alias-border-l3);\n border-radius: 50%;\n corner-shape: round;\n background-color: transparent;\n cursor: pointer;\n transition:\n background-color var(--wb-dur-0-12) ease, border-color var(--wb-dur-0-12) ease;\n}\n\n.wb-radio:not(:checked):hover {\n border-color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-radio:checked {\n border-color: var(--dsw-alias-brand-primary);\n background-image: radial-gradient(\n circle at center,\n var(--dsw-alias-brand-primary) 0 3px,\n transparent 3px\n );\n}\n\n.wb-radio:disabled {\n cursor: default;\n}\n\n.wb-radio:focus-visible {\n outline: var(--dsw-focus-ring-width, var(--wb-len-2)) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n.wb-formActions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n}\n\n.wb-formActionDanger {\n color: var(--dsw-alias-state-error-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent);\n}\n.wb-rows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n}\n.wb-rows > :not(.wb-row) {\n grid-column: 1 / -1;\n}\n.wb-row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: baseline;\n gap: var(--wb-len-8);\n padding: var(--wb-len-4) 0;\n}\n.wb-row + .wb-row {\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n.wb-rowKey {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-rowValue {\n min-width: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-rows > .wb-row {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-rows > .wb-row {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-confirmBar {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n width: 100%;\n box-sizing: border-box;\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n}\n.wb-confirmBarTitle {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 600;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n overflow-wrap: anywhere;\n}\n.wb-confirmBarHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n.wb-field {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n.wb-fieldLabel {\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-fieldHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-field:has(:disabled) .wb-fieldLabel {\n opacity: 0.4;\n}\n.wb-formRows {\n display: grid;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-12);\n}\n\n.wb-formRows > :not(.wb-formRow) {\n grid-column: 1 / -1;\n}\n\n.wb-formRow {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n align-items: center;\n column-gap: var(--wb-len-8);\n row-gap: var(--wb-len-8);\n}\n\n.wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n align-items: stretch;\n gap: var(--wb-len-6);\n}\n\n.wb-formRows > .wb-formRow[data-layout='stacked'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.wb-formLabel {\n justify-self: start;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: nowrap;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formLabel {\n white-space: normal;\n}\n\n.wb-formRow[data-layout='stacked'] .wb-formHint,\n.wb-formRow[data-layout='stacked'] .wb-formProblem {\n grid-column: 1 / -1;\n}\n\n.wb-formControl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n\n.wb-formControl\n > :where(\n .wb-selectAnchor,\n .wb-choiceMenu,\n input:not(\n [type='checkbox'],\n [type='radio'],\n [type='button'],\n [type='submit'],\n [type='reset'],\n [type='image'],\n [type='color'],\n [type='range']\n ),\n select,\n textarea\n ) {\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n}\n\n.wb-formHint {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-formProblem {\n grid-column: 2;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(.wb-formProblem) .wb-formLabel {\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-formRow:has(:disabled) .wb-formLabel {\n opacity: 0.4;\n}\n\n.wb-formRows > .wb-formRow {\n grid-template-columns: subgrid;\n}\n\n@supports not (grid-template-columns: subgrid) {\n .wb-formRows > .wb-formRow {\n grid-template-columns: minmax(72px, max-content) minmax(0, 1fr);\n }\n}\n.wb-form {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n width: 100%;\n}\n:where(.wb-link) {\n margin-left: var(--wb-len-2);\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n white-space: nowrap;\n vertical-align: baseline;\n}\n\n:where(.wb-link:hover) {\n text-decoration: underline;\n}\n\n:where(.wb-link:focus-visible) {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n.wb-longTask {\n padding-top: var(--wb-len-12);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n.wb-longTaskHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n}\n\n.wb-longTaskLink {\n flex: none;\n}\n\n.wb-longTaskHeadline {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-secondary);\n}\n\n.wb-longTaskProblem {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n.wb-longTaskDump {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-longTaskDump pre {\n margin: var(--wb-len-4) 0 0;\n max-height: var(--wb-len-220);\n overflow: auto;\n}\n\n.wb-longTaskStop {\n display: inline-flex;\n flex: none;\n align-items: center;\n align-self: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n padding: 0;\n margin-left: auto;\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-specific-menu);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n.wb-longTaskStop:hover:not(:disabled),\n.wb-longTaskStop:focus-visible {\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStop:disabled {\n cursor: default;\n}\n\n.wb-longTaskStopArmed,\n.wb-longTaskStopArmed:hover:not(:disabled),\n.wb-longTaskStopArmed:focus-visible {\n gap: var(--wb-len-4);\n width: auto;\n padding: 0 var(--wb-len-7);\n border-color: color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent);\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-longTaskStopLabel {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n.wb-longTaskStopWhy {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n.wb-centered.wb-centeredCompact {\n flex: none;\n min-height: 0;\n gap: var(--wb-len-8);\n padding: var(--wb-len-20) var(--wb-len-16);\n}\n\n.wb-centered.wb-centeredCompact .wb-centeredHero {\n margin-bottom: var(--wb-len-4);\n}\n\n.wb-skeleton {\n display: flex;\n flex-direction: column;\n}\n\n.wb-skeletonRow {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n}\n\n.wb-skeletonRow + .wb-skeletonRow::before {\n content: '';\n align-self: stretch;\n height: var(--wb-len-0-5);\n margin: 0 var(--wb-len-8) var(--wb-len-neg-0-5);\n background: var(--dsw-alias-border-l2);\n}\n\n.wb-skeletonBar {\n display: block;\n height: var(--wb-len-13);\n border-radius: var(--dsw-radius-xs);\n background: var(--dsw-alias-bg-skeleton);\n animation: wb-skeleton-pulse var(--wb-dur-1-4) var(--ds-ease-in-out) infinite;\n}\n\n.wb-skeletonBarTitle {\n width: 62%;\n}\n\n.wb-skeletonBarMeta {\n width: 32%;\n height: var(--wb-len-10);\n}\n\n.wb-skeletonRow:nth-child(2n) .wb-skeletonBarTitle {\n width: 74%;\n}\n\n.wb-skeletonRow:nth-child(3n) .wb-skeletonBarTitle {\n width: 52%;\n}\n\n@keyframes wb-skeleton-pulse {\n 50% {\n opacity: 0.45;\n }\n}\n\n.wb-centered {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: var(--wb-len-14);\n flex: 1;\n min-height: var(--wb-len-240);\n padding: 0 var(--wb-len-24) var(--wb-len-24);\n text-align: center;\n}\n\n.wb-centeredHero {\n display: flex;\n margin-bottom: var(--wb-len-16);\n color: var(--dsw-alias-label-dimmed);\n}\n\n.wb-centeredTitle {\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n color: var(--dsw-alias-label-primary);\n}\n\n.wb-centeredHint {\n max-width: var(--wb-len-300);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-centeredDetail {\n max-width: var(--wb-len-320);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-dimmed);\n word-break: break-all;\n}\n\n.wb-centeredAction {\n display: flex;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n@media (prefers-reduced-motion: reduce) {\n .wb-skeletonBar {\n animation: none;\n }}\n.wb-textField {\n box-sizing: border-box;\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n outline: none;\n}\n\n.wb-textField:focus {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-textField:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-textField[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-textField[aria-invalid='true']:focus {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n:where(.wb-textField) {\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n}\n:where(.wb-selectTrigger) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-primary);\n text-align: left;\n cursor: pointer;\n}\n\n.wb-selectTrigger:focus-visible {\n outline: none;\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true'] {\n border-color: var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger[aria-invalid='true']:focus-visible {\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-error-primary);\n}\n\n.wb-selectTrigger:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wb-selectLoading:disabled {\n cursor: default;\n opacity: 1;\n}\n\n.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: none;\n background: transparent;\n font-size: var(--wb-font-row);\n}\n\n.wb-selectGhost:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n.wb-selectGhost:focus-visible {\n outline: var(--dsw-focus-ring-width) solid\n var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n border-color: transparent;\n box-shadow: none;\n}\n\n.wb-selectIconOnly {\n width: var(--wb-len-36);\n height: var(--wb-len-36);\n min-height: 0;\n gap: 0;\n padding: 0;\n justify-content: center;\n}\n\n.wb-selectReveal {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.wb-selectIconOnly .wb-selectIcon {\n width: 100%;\n height: 100%;\n}\n\n.wb-selectAnchor {\n display: block;\n width: 100%;\n}\n\n.wb-selectIcon {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectValue {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n.wb-selectPlaceholder {\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-selectChevron {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-caption);\n}\n\n.wb-selectMenu {\n min-width: var(--wb-len-240);\n max-width: var(--wb-len-360);\n max-height: min(var(--wb-len-320), calc(100vh - var(--wb-len-24)));\n}\n\n:where(.wb-selectSearch) {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n width: 100%;\n min-height: var(--wb-len-28);\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n.wb-selectSearch:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: inset 0 0 0 0.5px var(--dsw-alias-state-business-primary);\n}\n\n.wb-selectSearch.wb-selectGhost {\n gap: var(--wb-gap-xs);\n min-height: 0;\n height: var(--wb-len-34);\n padding: 0 var(--wb-len-8);\n border: 0.5px solid var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n.wb-selectSearch.wb-selectGhost:focus-within {\n border-color: var(--dsw-alias-state-business-primary);\n box-shadow: none;\n}\n\n.wb-selectSearchIcon {\n flex: none;\n display: inline-flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n.wb-textField.wb-selectSearchInput {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n background: transparent;\n}\n\n.wb-textField.wb-selectSearchInput:focus {\n box-shadow: none;\n}\n\n.wb-selectFallback {\n width: 100%;\n}\n\n.wb-selectHint {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\nsection.wb-settings {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n padding: var(--wb-len-12) var(--wb-len-16);\n border: 0;\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-settings-card-fill);\n}\n.wb-settingsHead {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n.wb-settings .wb-settingsTitle {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-strong-14-font-size);\n line-height: var(--wb-line-24);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n.wb-stack {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n min-height: 0;\n}\n.wb-stateBlock {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n.wb-stateBlockTitle {\n margin: 0;\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n.wb-stateBlockHint {\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n.wb-stateBlockActions {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-2);\n}\n.wb-stateBlockResolving {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._marketList_485ym_1 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._marketRow_485ym_10 {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n align-items: center;\n column-gap: var(--wb-len-14);\n row-gap: var(--wb-len-4);\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-lg);\n}\n\n._marketIcon_485ym_20 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketMain_485ym_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._marketName_485ym_39 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketStatus_485ym_48 {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketStateText_485ym_58 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSep_485ym_62 {\n color: var(--dsw-alias-label-caption);\n}\n\n._marketReason_485ym_66 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._marketName_485ym_39 ._marketVersion_485ym_72 {\n margin-left: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n}\n\n._marketVersion_485ym_72 {\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketVersion_485ym_72::before {\n content: '';\n display: inline-block;\n width: var(--wb-len-1);\n height: var(--wb-len-10);\n margin: 0 var(--wb-len-8) 0 var(--wb-len-2);\n vertical-align: -1px;\n background: var(--dsw-alias-border-l2);\n}\n\n._marketLocalTag_485ym_94 {\n margin-left: var(--wb-len-8);\n padding: 0 var(--wb-len-6);\n border: var(--wb-len-1) solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n font-weight: 400;\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-caption);\n}\n\n._marketEnd_485ym_105 {\n flex: none;\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_485ym_112 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._marketSwitchSeat_485ym_112::before {\n content: '';\n width: 0;\n height: var(--wb-len-14);\n border-left: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketActions_485ym_125 {\n flex: none;\n display: flex;\n gap: var(--wb-len-6);\n}\n\n._marketUpdateAction_485ym_131 {\n color: var(--dsw-alias-state-warn-primary);\n border-color: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 30%, transparent);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._marketSelfDivider_485ym_137 {\n height: 0;\n margin-top: calc(0px - var(--wb-len-16));\n border-top: 0.5px solid var(--dsw-alias-border-l3);\n}\n\n._marketSection_485ym_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._marketSectionHead_485ym_150 {\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-8);\n}\n\n._marketSectionIcon_485ym_156 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionTitle_485ym_163 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._marketSectionCount_485ym_169 {\n font: var(--dsw-font-s-14);\n font-variant-numeric: tabular-nums;\n color: var(--dsw-alias-label-caption);\n}\n\n._marketSectionAction_485ym_175 {\n display: inline-flex;\n align-items: center;\n align-self: center;\n margin-left: auto;\n min-width: 0;\n}\n\n._marketSectionQuiet_485ym_183 ._marketSectionTitle_485ym_163 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_485ym_183 ._marketName_485ym_39 {\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketSectionQuiet_485ym_183 ._marketIcon_485ym_20 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n\n._marketProgress_485ym_196 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-height: var(--wb-len-32);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketNote_485ym_206 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-warn-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailure_485ym_213 {\n grid-column: 2 / -1;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._marketFailureSeat_485ym_220 {\n grid-column: 2 / -1;\n min-width: 0;\n}\n\n._marketEmpty_485ym_225 {\n padding: var(--wb-len-18) var(--wb-len-16);\n text-align: center;\n}\n\n._marketPage_485ym_230 {\n box-sizing: border-box;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-32);\n padding: 0 clamp(var(--wb-len-24), 4vw, var(--wb-len-48)) var(--wb-len-48);\n overflow-x: hidden;\n overflow-y: auto;\n color: var(--dsw-alias-label-primary);\n}\n\n._marketPage_485ym_230 > * {\n width: 100%;\n max-width: var(--wb-len-960);\n}\n\n._marketPageHead_485ym_248 {\n box-sizing: border-box;\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-16);\n padding-top: var(--wb-len-28);\n}\n\n._marketPageTitle_485ym_256 {\n margin: 0;\n font: var(--dsw-font-l-20);\n}\n\n._marketPageIntro_485ym_261 {\n margin: var(--wb-len-4) 0 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._marketPageTools_485ym_267 {\n flex: none;\n align-self: center;\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: var(--wb-len-16);\n}\n\n._marketPanel_485ym_276 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-32);\n}\n\n._marketPanel_485ym_276[hidden] {\n display: none;\n}\n\n._marketTabs_485ym_286 {\n display: flex;\n margin: calc(0px - var(--wb-len-16)) 0;\n}\n\n._marketTabList_485ym_291 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._marketAddButton_485ym_296 {\n height: var(--wb-len-32);\n padding: 0 var(--wb-len-12);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n border-radius: var(--dsw-radius-md);\n}\n\n._marketEmpty_485ym_225 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) var(--wb-len-16);\n text-align: center;\n}\n\n._marketEmptyTitle_485ym_313 {\n font: var(--dsw-font-base-strong-16);\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverPage_485ym_318 {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverBar_485ym_325 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n container-type: inline-size;\n}\n\n._discoverTools_485ym_332 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverMarket_485ym_338 {\n flex: 0 1 auto;\n min-width: 0;\n}\n\n._discoverMarketButton_485ym_343 {\n min-width: 0;\n max-width: var(--wb-len-240);\n margin-left: calc(0px - var(--wb-len-8));\n font-weight: 500;\n}\n\n._discoverMarketName_485ym_350 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverLabels_485ym_356 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverSort_485ym_361 {\n flex: none;\n white-space: nowrap;\n}\n\n._discoverRefresh_485ym_366 {\n flex: none;\n}\n\n._discoverSearch_485ym_370 {\n position: relative;\n box-sizing: border-box;\n display: flex;\n flex: 1 1 var(--wb-len-120);\n min-width: var(--wb-len-120);\n}\n\n._discoverSearchField_485ym_378 {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._discoverSearchFieldFilled_485ym_383 input {\n padding-inline-end: var(--wb-len-20);\n}\n\n._discoverSearchField_485ym_378 input::-webkit-search-cancel-button {\n appearance: none;\n -webkit-appearance: none;\n}\n\n._discoverSearch_485ym_370 ._discoverSearchClear_485ym_392 {\n position: absolute;\n top: 50%;\n inset-inline-end: var(--wb-len-4);\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n color: var(--dsw-alias-label-tertiary);\n transform: translateY(-50%);\n}\n\n._discoverSearchClear_485ym_392:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n@container (max-width: 560px) {\n ._discoverTools_485ym_332 {\n display: grid;\n grid-template-columns: minmax(0, auto) minmax(var(--wb-len-120), 1fr) auto;\n grid-template-areas:\n 'market search refresh'\n 'labels sort sort';\n }\n\n ._discoverMarket_485ym_338 {\n grid-area: market;\n }\n\n ._discoverMarketButton_485ym_343 {\n margin-left: 0;\n }\n\n ._discoverLabels_485ym_356 {\n grid-area: labels;\n }\n\n ._discoverSearch_485ym_370 {\n grid-area: search;\n }\n\n ._discoverSort_485ym_361 {\n grid-area: sort;\n justify-self: end;\n }\n\n ._discoverRefresh_485ym_366 {\n grid-area: refresh;\n }\n}\n\n._discoverChips_485ym_443 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-6);\n}\n\n._discoverList_485ym_450 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._discoverCard_485ym_459 {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n margin: 0 calc(0px - var(--wb-len-8));\n padding: var(--wb-len-8);\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCard_485ym_459:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._discoverArtwork_485ym_473 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-48);\n height: var(--wb-len-48);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverArtworkImage_485ym_485 {\n object-fit: contain;\n}\n\n._discoverMain_485ym_489 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-2);\n min-width: 0;\n}\n\n._discoverTitleRow_485ym_497 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverCardOpen_485ym_505 {\n max-width: 100%;\n padding: 0;\n border: 0;\n background: transparent;\n color: inherit;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n cursor: pointer;\n}\n\n._discoverCardOpen_485ym_505::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: var(--dsw-radius-xl);\n}\n\n._discoverCardOpen_485ym_505:focus-visible {\n outline: none;\n}\n\n._discoverCardOpen_485ym_505:focus-visible::after {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverStrong_485ym_536 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n overflow-wrap: anywhere;\n}\n\n._discoverDesc_485ym_542 {\n display: -webkit-box;\n overflow: hidden;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverMeta_485ym_551 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._discoverMuted_485ym_558 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._discoverEnd_485ym_564 {\n position: relative;\n z-index: var(--wb-z-10);\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverUpdateAction_485ym_573 {\n color: var(--dsw-alias-state-warn-primary);\n --dsw-alias-interactive-bg-hover: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._discoverBlocked_485ym_578 {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n._discoverEmpty_485ym_583 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-64) 0;\n text-align: center;\n}\n\n._discoverEmptyTitle_485ym_592 {\n margin: var(--wb-len-8) 0 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverEmpty_485ym_583 > button {\n margin-top: var(--wb-len-8);\n}\n\n._discoverDetail_485ym_602 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n}\n\n._discoverCrumb_485ym_608 {\n align-self: flex-start;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n padding: 0;\n border: 0;\n background: 0 0;\n color: var(--dsw-alias-label-tertiary);\n font: inherit;\n font-size: var(--wb-font-12-5);\n cursor: pointer;\n}\n\n._discoverCrumb_485ym_608:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._discoverCrumb_485ym_608:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: 2px;\n}\n\n._discoverCrumbIcon_485ym_631 {\n transform: rotate(90deg);\n}\n\n._discoverDetailHead_485ym_635 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverDetailTitle_485ym_641 {\n margin: 0;\n font: var(--dsw-font-l-20);\n font-weight: 500;\n}\n\n._discoverDetailText_485ym_647 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._discoverDetailPanel_485ym_654 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-16);\n min-width: 0;\n}\n\n._discoverDetailTabs_485ym_661 {\n display: flex;\n margin-bottom: calc(0px - var(--wb-len-4));\n}\n\n._discoverDetailTabList_485ym_666 {\n width: fit-content;\n min-width: var(--wb-len-240);\n}\n\n._discoverDocBody_485ym_671 {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDocNotice_485ym_676 {\n margin: var(--wb-len-16) 0 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverSection_485ym_682 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n margin-top: var(--wb-len-16);\n}\n\n._discoverSectionTitle_485ym_689 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverFacts_485ym_695 {\n margin: 0;\n padding: 0;\n}\n\n._discoverFactRow_485ym_700 {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--wb-len-16);\n min-height: var(--wb-len-44);\n padding: var(--wb-len-8) var(--wb-len-2);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverFactKind_485ym_710 {\n flex: none;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverFactValue_485ym_716 {\n min-width: 0;\n margin: 0;\n text-align: end;\n overflow-wrap: anywhere;\n font: var(--dsw-font-xs-13);\n}\n\n._discoverCode_485ym_724 {\n padding: var(--wb-len-2) var(--wb-len-6);\n border-radius: var(--wb-radius-6);\n background: var(--dsw-alias-bg-module-platform);\n font-family: var(--ds-font-family-code);\n font-size: var(--dsw-font-xxs-12-font-size);\n box-decoration-break: clone;\n}\n\n._discoverTags_485ym_733 {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--wb-len-6);\n}\n\n._discoverLink_485ym_740 {\n color: var(--dsw-alias-link);\n overflow-wrap: anywhere;\n text-decoration: none;\n}\n\n._discoverLink_485ym_740:hover {\n text-decoration: underline;\n}\n\n._discoverVersions_485ym_750 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverVersionRow_485ym_758 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverVersionName_485ym_766 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n}\n\n._discoverError_485ym_771 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverFailure_485ym_780 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n}\n\n._discoverLoading_485ym_786 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverNotice_485ym_795 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverNotice_485ym_795 svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverMore_485ym_813 {\n align-self: center;\n}\n\n._discoverTransport_485ym_817 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportHead_485ym_823 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportTitle_485ym_830 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportHead_485ym_823 ._discoverTransportKind_485ym_835 {\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportHead_485ym_823 ._discoverTransportState_485ym_840 {\n margin-left: 0;\n}\n\n._discoverTransportHead_485ym_823 > :last-child {\n margin-left: auto;\n}\n\n._discoverTransportRows_485ym_848 {\n display: flex;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportRow_485ym_848 {\n display: flex;\n flex: 1;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--dsw-radius-md);\n cursor: pointer;\n}\n\n._discoverTransportRow_485ym_848:hover {\n border-color: var(--dsw-alias-border-l3);\n}\n\n._discoverTransportRow_485ym_848:has(._discoverTransportRadio_485ym_869:checked) {\n border-color: var(--dsw-alias-label-primary);\n}\n\n._discoverTransportRow_485ym_848:has(._discoverTransportRadio_485ym_869:focus-visible) {\n outline: 2px solid var(--dsw-alias-label-primary);\n outline-offset: 1px;\n}\n\n._discoverTransportRadio_485ym_869 {\n flex: none;\n margin: 0;\n}\n\n._discoverTransportKind_485ym_835 {\n flex: none;\n font: var(--dsw-font-xs-13);\n font-weight: 500;\n}\n\n._discoverTransportState_485ym_840 {\n flex: none;\n margin-left: auto;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverTransportRow_485ym_848[data-state='ok'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._discoverTransportRow_485ym_848[data-state='auth'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._discoverTransportRow_485ym_848[data-state='unreachable'] ._discoverTransportState_485ym_840,\n._discoverTransportRow_485ym_848[data-state='unknown'] ._discoverTransportState_485ym_840 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverTransportCustom_485ym_909 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverTransportInput_485ym_915 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverInstallBar_485ym_920 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n}\n\n._discoverInstallText_485ym_931 {\n flex: 1;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n._discoverDialog_485ym_937 {\n width: min(var(--wb-len-560), calc(100vw - var(--wb-len-32)));\n}\n\n._discoverDialogBody_485ym_941 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._discoverSourceList_485ym_947 {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n}\n\n._discoverSourceRow_485ym_955 {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wb-len-12);\n padding: var(--wb-len-10) 0;\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._discoverSourceConfirm_485ym_964 {\n margin: 0;\n padding: var(--wb-len-2) 0 var(--wb-len-10);\n list-style: none;\n}\n\n._discoverSourcePick_485ym_970 {\n display: flex;\n flex: 1;\n align-items: flex-start;\n gap: var(--wb-len-10);\n min-width: 0;\n cursor: pointer;\n}\n\n._discoverSourceRadio_485ym_979 {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._discoverSourceMain_485ym_987 {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: var(--wb-len-4);\n min-width: 0;\n}\n\n._discoverSourceHead_485ym_995 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._discoverSourceUrl_485ym_1003 {\n display: block;\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._discoverSourceMore_485ym_1013 {\n flex: none;\n}\n\n._discoverSourceLoading_485ym_1017 {\n display: flex;\n flex: none;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n white-space: nowrap;\n}\n\n._discoverSourceHint_485ym_1027 {\n display: flex;\n flex-basis: 100%;\n align-items: center;\n gap: var(--wb-len-6);\n color: var(--dsw-alias-label-secondary);\n font: var(--dsw-font-xxs-12);\n}\n\n._discoverSourceHint_485ym_1027 svg {\n flex: none;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._discoverSourceError_485ym_1041 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._discoverSourceForm_485ym_1047 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._discoverGrow_485ym_1053 {\n flex: 1;\n min-width: 0;\n}\n\n._discoverField_485ym_1058 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._discoverFieldLabel_485ym_1064 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-secondary);\n}\n\n._discoverConfirmHead_485ym_1069 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-14);\n}\n\n._discoverSkeletonFill_485ym_1075 {\n background: var(--dsw-alias-bg-skeleton);\n animation: _wb-skeleton_485ym_1 var(--wb-dur-1-5) cubic-bezier(0.36, 0, 0.64, 1) infinite;\n}\n\n._discoverArtwork_485ym_473._discoverSkeletonFill_485ym_1075 {\n border-color: transparent;\n}\n\n._discoverSkeletonBar_485ym_1084 {\n display: block;\n height: var(--wb-len-12);\n margin: var(--wb-len-4) 0;\n border-radius: var(--dsw-radius-xs);\n}\n\n._discoverSkeletonTitle_485ym_1091 {\n width: min(var(--wb-len-144), 60%);\n}\n\n._discoverSkeletonDesc_485ym_1095 {\n width: min(var(--wb-len-280), 85%);\n}\n\n@keyframes _wb-skeleton_485ym_1 {\n 0% {\n opacity: 1;\n }\n 40% {\n opacity: 0.6;\n }\n 80%,\n to {\n opacity: 1;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._discoverSkeletonFill_485ym_1075 {\n animation: none;\n }\n}\n\n._block_mxnbc_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-2) 0 var(--wb-len-8);\n min-width: 0;\n}\n\n._head_mxnbc_9 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._title_mxnbc_16 {\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._fact_mxnbc_22 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._actions_mxnbc_30 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-2);\n margin-left: calc(-1 * var(--wb-len-8));\n}\n\n._hint_mxnbc_38 {\n margin: 0;\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._output_mxnbc_44 {\n margin-top: var(--wb-len-2);\n min-width: 0;\n}\n._check_1g6tv_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-10);\n min-width: 0;\n}\n\n._status_1g6tv_8 {\n font: var(--dsw-font-xxs-12);\n color: var(--dsw-alias-label-caption);\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n}\n\n._button_1g6tv_15 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n}\n\n._icon_1g6tv_22 {\n display: inline-flex;\n}\n\n@media (max-width: 720px) {\n ._status_1g6tv_8 {\n display: none;\n }\n}\n._foot_1ud1j_1 {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wb-len-8);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-10);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._footText_1ud1j_13 {\n flex: 1;\n min-width: 0;\n}\n\n._footTextMd_1ud1j_18 {\n flex: 1;\n min-width: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n._wide_1lv8f_1 {\n justify-content: center;\n width: 100%;\n height: var(--wb-len-40);\n border-radius: var(--dsw-radius-md);\n}\n\n._dialog_1lv8f_8 {\n width: min(var(--wb-len-560), 100%);\n max-height: min(var(--wb-len-800), 100%);\n}\n\n._content_1lv8f_13 {\n min-height: 0;\n overflow: auto;\n}\n\n._stack_1lv8f_18 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._body_1lv8f_25 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n\n._field_1lv8f_32 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._input_1lv8f_39 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-14);\n}\n\n._registryField_1lv8f_45 {\n height: var(--wb-len-32);\n margin-left: var(--wb-len-26);\n padding: 0 var(--wb-len-10);\n}\n\n._options_1lv8f_51 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-8) var(--wb-len-12);\n}\n\n._guideToggle_1lv8f_59 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-4);\n align-self: flex-start;\n margin-top: var(--wb-len-4);\n padding: 0;\n border: 0;\n background: transparent;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._guideToggle_1lv8f_59:hover {\n color: var(--dsw-alias-label-primary);\n}\n\n._guideToggle_1lv8f_59 svg,\n._registryToggle_1lv8f_78 svg {\n transition: transform var(--wb-dur-0-12) ease;\n}\n\n._guideToggle_1lv8f_59[aria-expanded='true'] svg,\n._registryToggle_1lv8f_78[aria-expanded='true'] svg {\n transform: rotate(180deg);\n}\n\n._registryWrap_1lv8f_87 {\n position: relative;\n flex: none;\n}\n\n._registryToggle_1lv8f_78 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n height: var(--wb-len-26);\n padding: 0 var(--wb-len-8) 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n font: inherit;\n font-size: var(--wb-font-12-5);\n color: var(--dsw-alias-label-secondary);\n cursor: pointer;\n}\n\n._registryToggle_1lv8f_78:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._registryToggle_1lv8f_78:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n._registryToggle_1lv8f_78[aria-expanded='true'] {\n border-color: var(--dsw-alias-border-l3);\n background: var(--dsw-alias-bg-layer-3);\n}\n\n._registryChosen_1lv8f_121 {\n color: var(--dsw-alias-label-primary);\n font-weight: 500;\n}\n\n._registry_1lv8f_45 {\n position: fixed;\n z-index: var(--wb-z-1100);\n box-sizing: border-box;\n width: min(var(--wb-len-440), 100vw - var(--wb-len-24));\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10) var(--wb-len-12);\n border: 0;\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-2);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l3);\n box-shadow: var(--dsw-elevation-prominent);\n}\n\n._registryOption_1lv8f_143 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid transparent;\n border-radius: var(--dsw-radius-lg);\n cursor: pointer;\n}\n\nlabel._registryOption_1lv8f_143 {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--wb-len-10);\n}\n\n._registryPick_1lv8f_159 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n cursor: pointer;\n}\n\n._registryOption_1lv8f_143[data-checked='true'] {\n border-color: color-mix(in srgb, var(--dsw-alias-brand-primary) 40%, transparent);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._registryOption_1lv8f_143 input[type='radio'] {\n flex: none;\n width: var(--wb-len-16);\n height: var(--wb-len-16);\n margin: var(--wb-len-2) 0 0;\n accent-color: var(--dsw-alias-brand-primary);\n}\n\n._registryTitle_1lv8f_179 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n font: var(--dsw-font-xs-13);\n line-height: var(--wb-line-20);\n color: var(--dsw-alias-label-primary);\n}\n\n._registryHint_1lv8f_189 {\n margin-left: var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._inputError_1lv8f_197 {\n margin: var(--wb-len-neg-4) 0 0 var(--wb-len-26);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._guide_1lv8f_59 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) var(--wb-len-14) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-border-l4);\n border-radius: var(--dsw-radius-lg);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._guideList_1lv8f_214 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._guideItem_1lv8f_223 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0;\n}\n\n._guideIndex_1lv8f_230 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n border-radius: var(--wb-radius-pill);\n corner-shape: round;\n background: var(--dsw-alias-bg-module-platform);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._guideMain_1lv8f_244 {\n display: flex;\n flex-direction: column;\n flex: 1;\n gap: 0;\n min-width: 0;\n}\n\n._guideTitle_1lv8f_252 {\n font: var(--dsw-font-s-14);\n font-weight: 500;\n color: var(--dsw-alias-label-primary);\n}\n\n._guideHint_1lv8f_258 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._guideExample_1lv8f_264 {\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._guideExample_1lv8f_264 code {\n font-family: var(--dsw-font-mono, monospace);\n}\n\n._guideExampleLabel_1lv8f_274 {\n color: var(--dsw-alias-label-caption);\n}\n\n._footer_1lv8f_278 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-20);\n width: 100%;\n}\n\n._hero_1lv8f_285 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-10);\n padding: var(--wb-len-8) 0 var(--wb-len-4);\n text-align: center;\n}\n\n._heroIcon_1lv8f_294 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-44);\n height: var(--wb-len-44);\n color: var(--dsw-alias-label-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='done'] {\n color: var(--dsw-alias-state-success-secondary);\n}\n\n._heroIcon_1lv8f_294[data-state='error'] {\n color: var(--dsw-alias-state-warn-label);\n}\n\n._pendingTitle_1lv8f_311 {\n margin: 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 500;\n color: var(--dsw-alias-label-secondary);\n}\n\n._wizardTitle_1lv8f_319 {\n margin: 0;\n font-size: var(--wb-font-18);\n line-height: var(--wb-len-26);\n font-weight: 600;\n}\n\n._subject_1lv8f_326 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n text-align: center;\n}\n\n._subjectName_1lv8f_337 {\n margin: 0;\n font: var(--dsw-font-base-strong-16);\n overflow-wrap: anywhere;\n}\n\n._subjectMeta_1lv8f_343,\n._subjectDesc_1lv8f_344 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._result_1lv8f_351,\n._resultWarn_1lv8f_352 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._resultWarn_1lv8f_352 {\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);\n}\n\n._resultMeta_1lv8f_365 {\n margin: 0;\n padding: 0 var(--wb-len-12);\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._approval_1lv8f_373 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-state-warn-primary);\n border-radius: var(--dsw-radius-lg);\n background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent);\n}\n\n._approvalTitle_1lv8f_383 {\n margin: 0;\n font: var(--dsw-font-s-14);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._approvalText_1lv8f_390 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-secondary);\n}\n\n._approvalCaution_1lv8f_396 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n font-weight: 600;\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._note_1lv8f_403 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n}\n\n._noteWarn_1lv8f_410 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._noteError_1lv8f_414 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._problem_1lv8f_418 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._detailLabel_1lv8f_425 {\n margin: 0;\n font: var(--dsw-font-xs-13);\n color: var(--dsw-alias-label-caption);\n}\n\n._detail_1lv8f_425 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l1);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-3);\n font-family: var(--dsw-font-mono, monospace);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n._note_1enlz_1 {\n display: flex;\n align-items: flex-start;\n gap: var(--wb-len-8);\n margin: 0;\n padding: var(--wb-len-10) var(--wb-len-12);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-state-warn-tertiary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._note_1enlz_1 > svg {\n flex: none;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-state-warn-primary);\n}\n._slot_1t7dx_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1t7dx_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1t7dx_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1t7dx_31 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._paused_1t7dx_35 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._trouble_1t7dx_39 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._pulse_1t7dx_43 {\n animation: _wb-debug-breathe_1t7dx_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-debug-breathe_1t7dx_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1t7dx_43 {\n animation: none;\n }\n}\n\n._entry_1t7dx_64 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1t7dx_71 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1t7dx_78 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1t7dx_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-22);\n height: var(--wb-len-22);\n padding: 0;\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n}\n\n._act_1t7dx_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1t7dx_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._actStop_1t7dx_110:hover,\n._actStop_1t7dx_110:focus-visible {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._actArmed_1t7dx_115,\n._actArmed_1t7dx_115:hover,\n._actArmed_1t7dx_115:focus-visible {\n background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent);\n width: auto;\n color: var(--dsw-alias-state-error-primary);\n gap: var(--wb-len-4);\n padding: 0 var(--wb-len-7);\n}\n\n._actLabel_1t7dx_125 {\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._entryLine_1t7dx_131 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1t7dx_138 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1t7dx_150 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1t7dx_156 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1t7dx_162 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._slot_1gkj9_1 {\n display: flex;\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._slot_1gkj9_1 > * {\n flex: 0 0 100%;\n min-width: 0;\n}\n\n._action_1gkj9_12 {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n flex: 1 1 0;\n width: 100%;\n min-width: 0;\n min-height: var(--wb-len-36);\n margin: 0 var(--wb-len-2);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n cursor: default;\n overflow: hidden;\n gap: var(--wb-len-4);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n}\n\n._live_1gkj9_31 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._done_1gkj9_35 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._pulse_1gkj9_39 {\n animation: _wb-record-breathe_1gkj9_1 var(--wb-dur-1-5) var(--ds-ease-in-out, ease-in-out) infinite;\n}\n\n@keyframes _wb-record-breathe_1gkj9_1 {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.35;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._pulse_1gkj9_39 {\n animation: none;\n }\n}\n\n._entry_1gkj9_60 {\n display: flex;\n align-items: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n._entryInner_1gkj9_67 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._acts_1gkj9_74 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-2);\n flex: none;\n}\n\n._act_1gkj9_12 {\n appearance: none;\n border: 0;\n background: transparent;\n color: var(--dsw-alias-label-secondary);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-22);\n padding: 0 var(--wb-len-7);\n border-radius: var(--dsw-radius-sm, var(--wb-len-6));\n flex: none;\n cursor: pointer;\n white-space: nowrap;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-18);\n}\n\n._act_1gkj9_12:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._act_1gkj9_12:focus-visible {\n outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary));\n outline-offset: -2px;\n}\n\n._entryLine_1gkj9_108 {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._actionRail_1gkj9_115 {\n justify-content: center;\n flex: none;\n width: var(--wb-len-36);\n min-width: var(--wb-len-36);\n height: var(--wb-len-36);\n margin: 0;\n padding: 0;\n corner-shape: round;\n border-radius: 50%;\n}\n\n._card_1gkj9_127 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._cardTitle_1gkj9_133 {\n color: var(--dsw-alias-label-primary);\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n}\n\n._cardNote_1gkj9_139 {\n color: var(--dsw-alias-label-secondary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n._item_lyox9_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-10);\n}\n\n._item_lyox9_1 + ._item_lyox9_1 {\n padding-top: var(--wb-len-14);\n border-top: var(--wb-len-0-5) solid var(--dsw-alias-settings-card-stroke);\n}\n\n._head_lyox9_12 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._title_lyox9_19 {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._description_lyox9_31 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._rows_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n._row_85r3w_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n padding: var(--wb-len-12) var(--wb-len-14);\n border: 0.5px solid var(--dsw-alias-settings-card-stroke);\n border-radius: var(--dsw-radius-xl);\n background: var(--dsw-alias-settings-card-fill);\n}\n\n._head_85r3w_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._pick_85r3w_27 {\n flex: 0 1 auto;\n min-width: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n}\n\n._pick_85r3w_27 > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._code_85r3w_39 {\n --dsl-code-block-background: var(--dsw-alias-bg-layer-1);\n margin: 0;\n}\n\n._missing_85r3w_44,\n._conflict_85r3w_45 {\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-state-warn-primary);\n}\n._body_11oac_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._sources_11oac_7 {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._sourcesLabel_11oac_14 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\nbutton._sourceOn_11oac_19 {\n border-color: var(--dsw-alias-brand-primary);\n}\n._sourceCount_11oac_22 {\n margin-left: var(--wb-len-4);\n font-variant-numeric: tabular-nums;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._reading_11oac_29 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-4);\n}\n\n._status_11oac_35 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failure_11oac_45 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n column-gap: var(--wb-len-10);\n row-gap: var(--wb-len-2);\n color: var(--dsw-alias-state-error-primary);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n}\n\n._failureTitle_11oac_55 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._failureHint_11oac_62 {\n grid-column: 1;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._failureAction_11oac_67 {\n grid-column: 2;\n grid-row: 1;\n justify-self: end;\n}\n\n._foot_11oac_73 {\n display: flex;\n justify-content: flex-end;\n}\n._body_lox98_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._field_lox98_7 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n}\n\n._input_lox98_13 {\n width: 100%;\n}\n\n._label_lox98_17 {\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-secondary);\n}\n\n._hint_lox98_22 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._copy_lox98_28 {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wb-len-8) var(--wb-len-16);\n margin: 0;\n padding: 0;\n border: 0;\n}\n\n._copy_lox98_28 legend {\n padding: 0;\n margin-bottom: var(--wb-len-6);\n}\n\n._actions_lox98_42 {\n display: flex;\n justify-content: flex-end;\n}\n\n._commandLabel_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n}\n\n._command_lox98_47 {\n display: block;\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-6) var(--wb-len-8);\n border-radius: var(--dsw-radius-md);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow-wrap: anywhere;\n}\n._body_zi2j5_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-12);\n}\n\n._lead_zi2j5_7 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n\n._title_zi2j5_14 {\n font-size: var(--wb-font-18);\n line-height: var(--wb-line-24);\n}\n._hint_zyzt3_1[hidden],\n._actions_zyzt3_2[hidden],\n._progress_zyzt3_3[hidden],\n._commandRow_zyzt3_4[hidden],\n._bridge_zyzt3_5[hidden],\n._raw_zyzt3_6[hidden] {\n display: none;\n}\n\n._gate_zyzt3_10 {\n position: fixed;\n inset: 0;\n z-index: var(--wb-z-top);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--wb-len-24);\n background: var(--dsw-alias-bg-base);\n}\n\n._card_zyzt3_21 {\n width: 100%;\n max-width: var(--wb-len-420);\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-16);\n text-align: center;\n}\n\n._card_zyzt3_21:has(._actions_zyzt3_2:not([hidden])),\n._card_zyzt3_21:has(._bridge_zyzt3_5:not([hidden])) {\n max-width: var(--wb-len-520);\n}\n\n._title_zyzt3_36 {\n margin: 0;\n font-size: var(--dsw-font-base-16-font-size);\n line-height: var(--wb-line-24);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._steps_zyzt3_51 {\n list-style: none;\n margin: var(--wb-len-6) 0 0;\n padding: 0;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n text-align: left;\n}\n\n._step_zyzt3_51 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-6) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._step_zyzt3_51[data-status='running'] {\n color: var(--dsw-alias-label-primary);\n}\n\n._mark_zyzt3_78 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-14);\n height: var(--wb-len-14);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._step_zyzt3_51[data-status='ok'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-success-primary);\n}\n\n._step_zyzt3_51[data-status='warn'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-warn-primary);\n}\n\n._step_zyzt3_51[data-status='failed'] ._mark_zyzt3_78 {\n color: var(--dsw-alias-state-error-primary);\n}\n\n._label_zyzt3_103 {\n flex: none;\n}\n\n._detail_zyzt3_107 {\n margin-left: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._progress_zyzt3_3 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-8);\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._elapsed_zyzt3_125 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n font-variant-numeric: tabular-nums;\n}\n\n._error_zyzt3_133 {\n margin: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n max-height: var(--wb-len-120);\n overflow: auto;\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n white-space: pre-wrap;\n word-break: break-all;\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._commandRow_zyzt3_4 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n margin: 0 0 var(--wb-len-8);\n padding-right: var(--wb-len-4);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-2);\n}\n\n._copy_zyzt3_159 {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-24);\n height: var(--wb-len-24);\n padding: 0;\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._copy_zyzt3_159:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._command_zyzt3_4 {\n flex: 1;\n min-width: 0;\n padding: var(--wb-len-8) var(--wb-len-10);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font-family: var(--ds-font-family-code, monospace);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n overflow-wrap: anywhere;\n color: var(--dsw-alias-label-primary);\n}\n\n._buttons_zyzt3_192 {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--wb-len-12);\n}\n\n._mockSlot_zyzt3_199 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n justify-content: center;\n background: var(--dsw-alias-bg-base);\n}\n\n._button_zyzt3_192 {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: transparent;\n font: inherit;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n cursor: pointer;\n}\n\n._button_zyzt3_192:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._button_zyzt3_192:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n._actions_zyzt3_2,\n._bridge_zyzt3_5 {\n box-sizing: border-box;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-4);\n padding: var(--wb-len-14) var(--wb-len-16);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-1);\n text-align: left;\n}\n\n._fixTitle_zyzt3_250 {\n margin: 0;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._actions_zyzt3_2 ._hint_zyzt3_1,\n._bridge_zyzt3_5 ._hint_zyzt3_1 {\n margin: 0;\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._actions_zyzt3_2 ._commandRow_zyzt3_4,\n._bridge_zyzt3_5 ._commandRow_zyzt3_4 {\n margin: 0;\n}\n\n._actions_zyzt3_2 ._buttons_zyzt3_192,\n._bridge_zyzt3_5 ._buttons_zyzt3_192 {\n justify-content: flex-start;\n}\n\n._raw_zyzt3_6 {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: left;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._rawSummary_zyzt3_286 {\n cursor: pointer;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._actions_zyzt3_2 ._error_zyzt3_133,\n._bridge_zyzt3_5 ._error_zyzt3_133 {\n margin-top: var(--wb-len-6);\n}\n\n._bridgeLines_zyzt3_296 {\n margin: 0;\n padding-left: var(--wb-len-18);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-19);\n color: var(--dsw-alias-label-secondary);\n}\n\n._bridgeLine_zyzt3_296 a {\n display: block;\n margin-top: var(--wb-len-4);\n width: fit-content;\n}\n\n._link_zyzt3_313 {\n color: var(--dsw-alias-label-primary);\n text-decoration: none;\n}\n\n._link_zyzt3_313::after {\n content: '↗';\n margin-left: var(--wb-len-2);\n}\n\n._link_zyzt3_313:hover {\n text-decoration: underline;\n}\n\n._loading_zyzt3_327 {\n flex: none;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._loading_zyzt3_327[hidden] {\n display: none;\n}\n\n._loadingMotion_zyzt3_336 {\n transform-origin: center;\n animation: _wb-spin_zyzt3_1 var(--wb-dur-1-5) linear infinite;\n}\n\n._loadingTrack_zyzt3_341,\n._loadingArc_zyzt3_342 {\n fill: none;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n}\n\n._loadingTrack_zyzt3_341 {\n opacity: 0.25;\n}\n\n._loadingArc_zyzt3_342 {\n stroke-dasharray: 12 150;\n animation: _wb-dash_zyzt3_1 var(--wb-dur-1-5) ease-in-out infinite;\n}\n\n@keyframes _wb-spin_zyzt3_1 {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes _wb-dash_zyzt3_1 {\n 0% {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n 50% {\n stroke-dasharray: 24 150;\n stroke-dashoffset: -6;\n }\n to {\n stroke-dasharray: 12 150;\n stroke-dashoffset: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n ._loadingMotion_zyzt3_336,\n ._loadingArc_zyzt3_342 {\n animation: none;\n }\n}\n._changelog_1q6pj_1 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-10);\n min-width: 0;\n}\n\n._changelogTitle_1q6pj_9 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-secondary);\n}\n\n._changelogMissing_1q6pj_15 {\n margin: 0;\n font: var(--dsw-font-s-14);\n color: var(--dsw-alias-label-primary);\n}\n\n._changelogBody_1q6pj_21 {\n max-height: var(--wb-len-320);\n overflow: auto;\n padding: var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-lg);\n}\n._group_1hxis_1 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-2);\n}\n\n._button_1hxis_7 {\n flex: none;\n width: var(--wb-len-28);\n height: var(--wb-len-28);\n padding: 0;\n color: var(--dsw-alias-label-secondary);\n}\n\n._button_1hxis_7:hover:not(:disabled) {\n color: var(--dsw-alias-label-primary);\n}\n\n._active_1hxis_19 {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._icon_1hxis_23 {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n._icon_1hxis_23 svg {\n display: block;\n width: var(--wb-len-15);\n height: var(--wb-len-15);\n}\n\n._mirror_1hxis_35 {\n transform: scaleX(-1);\n}\n._stripTabs_1dqp4_1 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-4);\n min-width: 0;\n overflow: hidden;\n}\n\n._tab_1dqp4_9 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n flex: none;\n height: var(--wb-len-28);\n padding: 0 var(--wb-len-10);\n border: 0;\n border-radius: var(--dsw-radius-sm);\n background: none;\n font: inherit;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-16);\n max-width: 100%;\n}\n\n._tabActive_1dqp4_25 {\n color: var(--dsw-alias-label-primary);\n}\n\n._tabQuiet_1dqp4_29 {\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._tabQuiet_1dqp4_29:hover {\n color: var(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._tabTitle_1dqp4_39 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._sep_1dqp4_49 {\n flex: none;\n color: var(--dsw-alias-label-dimmed);\n}\n._actions_smeq7_1 {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--wb-len-8);\n max-width: 100%;\n}\n\n._action_smeq7_1 {\n flex: none;\n white-space: nowrap;\n}\n\n@container (max-width: 340px) {\n ._actions_smeq7_1 {\n flex-direction: column;\n width: var(--wb-len-220);\n max-width: 100%;\n }\n\n ._action_smeq7_1 {\n width: 100%;\n }\n}\n._trigger_15ptp_1 {\n display: flex;\n align-items: center;\n}\n\n._pop_15ptp_6 {\n position: absolute;\n top: calc(var(--wb-len-38) + var(--wb-len-8));\n right: var(--wb-len-6);\n z-index: var(--wb-z-30);\n width: min(var(--wb-len-360), calc(100% - var(--wb-len-12)));\n max-width: calc(100vw - var(--wb-len-48));\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-radius: var(--wb-radius-14);\n background: var(--dsw-alias-bg-layer-2);\n box-shadow: var(--dsw-shadow-lv3);\n overflow: hidden;\n}\n\n._head_15ptp_20 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-10) var(--wb-len-12) var(--wb-len-9) var(--wb-len-14);\n border-bottom: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._title_15ptp_28 {\n flex: 1;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._rowControls_15ptp_36 {\n flex: none;\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-8);\n}\n\n._reset_15ptp_43 {\n flex: none;\n padding: var(--wb-len-3) var(--wb-len-8);\n border: none;\n border-radius: var(--wb-radius-6);\n background: transparent;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n cursor: pointer;\n}\n\n._reset_15ptp_43:hover:not(:disabled) {\n background: var(--dsw-alias-interactive-bg-hover);\n color: var(--dsw-alias-label-primary);\n}\n\n._reset_15ptp_43:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n._list_15ptp_65 {\n list-style: none;\n margin: 0;\n padding: var(--wb-len-6);\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-2);\n}\n\n._row_15ptp_36 {\n position: relative;\n display: grid;\n grid-template-columns: 12px minmax(0, 1fr) auto;\n align-items: center;\n gap: var(--wb-len-8);\n padding: var(--wb-len-7) var(--wb-len-8);\n border-radius: var(--dsw-radius-sm);\n cursor: default;\n}\n\n._rowDragging_15ptp_85 {\n cursor: grabbing;\n}\n\n._rowBlocked_15ptp_89 {\n cursor: not-allowed;\n}\n\n._listDragging_15ptp_93 ._rowControls_15ptp_36 {\n pointer-events: none;\n}\n\n._row_15ptp_36:hover {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n\n._rowOff_15ptp_101 {\n opacity: 0.55;\n}\n\n._rowOff_15ptp_101:hover {\n opacity: 1;\n}\n\n._rowOver_15ptp_109::before {\n content: '';\n position: absolute;\n top: var(--wb-len-neg-3);\n left: var(--wb-len-8);\n right: var(--wb-len-8);\n height: var(--wb-len-2);\n background: var(--dsw-alias-brand-primary);\n}\n\n._ghost_15ptp_119 {\n position: fixed;\n z-index: var(--wb-z-40);\n pointer-events: none;\n padding: var(--wb-len-4) var(--wb-len-10);\n border: 0.5px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n box-shadow: var(--wb-static-shadow-ghost);\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n white-space: nowrap;\n}\n\n._grip_15ptp_134 {\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n text-align: center;\n color: var(--dsw-alias-label-tertiary);\n user-select: none;\n cursor: grab;\n touch-action: none;\n}\n\n._gripDragging_15ptp_144 {\n cursor: grabbing;\n}\n\n._gripBlocked_15ptp_148 {\n cursor: not-allowed;\n}\n\n._label_15ptp_152 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n min-width: 0;\n}\n\n._name_15ptp_159 {\n min-width: 0;\n flex: 0 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-primary);\n}\n\n._error_15ptp_170 {\n margin: 0;\n padding: 0 var(--wb-len-14) var(--wb-len-10);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-state-error-primary);\n}\n\n._dep_15ptp_178 {\n flex: none;\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n color: var(--dsw-alias-label-tertiary);\n white-space: nowrap;\n}\n\n._group_15ptp_186 {\n padding-top: var(--wb-len-6);\n border-top: 0.5px solid var(--dsw-alias-border-l2);\n}\n\n._groupTitle_15ptp_191 {\n margin: 0;\n padding: var(--wb-len-2) var(--wb-len-8) 0 var(--wb-len-14);\n font-size: var(--dsw-font-xxxs-11-font-size);\n line-height: var(--wb-line-16);\n font-weight: 400;\n color: var(--dsw-alias-label-tertiary);\n}\n._panel_1whum_1 {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: var(--wb-z-10);\n visibility: hidden;\n}\n\n._panel_1whum_1[data-fullscreen] {\n z-index: var(--wb-z-40);\n}\n\n._panel_1whum_1[data-open] {\n visibility: visible;\n}\n\n._columns_1whum_18 {\n display: block;\n column-gap: var(--wb-len-12);\n}\n\n._cell_1whum_23 {\n display: flow-root;\n min-width: 0;\n break-inside: avoid;\n margin-bottom: var(--wb-len-12);\n}\n._root_1cmz0_1 {\n position: relative;\n flex: none;\n margin: 0 var(--wb-len-2) var(--wb-len-4);\n}\n\n._rail_1cmz0_7 {\n margin: 0 0 var(--wb-len-4);\n}\n\n._glyphBox_1cmz0_11 {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n._glyph_1cmz0_11 {\n position: relative;\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-16);\n height: var(--wb-len-20);\n color: var(--dsw-alias-label-tertiary);\n}\n\n._glyphActive_1cmz0_30 {\n color: var(--dsw-alias-state-business-primary);\n}\n\n._triggerName_1cmz0_34 {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: baseline;\n gap: var(--wb-len-6);\n font-size: var(--wb-font-row);\n line-height: var(--wb-line-20);\n overflow: hidden;\n}\n\n._dir_1cmz0_45 {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._name_1cmz0_53 {\n flex: 0 1 auto;\n max-width: 50%;\n font-size: var(--dsw-font-xxs-12-font-size);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n._triggerName_1cmz0_34 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._row_1cmz0_66 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n width: 100%;\n min-width: 0;\n}\n\n._trailing_1cmz0_74 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wb-len-20);\n height: var(--wb-len-20);\n margin-inline-start: auto;\n}\n\n._trailing_1cmz0_74 ._rowAction_1cmz0_84 {\n width: var(--wb-len-20);\n min-width: var(--wb-len-20);\n height: var(--wb-len-20);\n min-height: var(--wb-len-20);\n padding: 0;\n border-radius: var(--dsw-radius-sm);\n}\n\n._row_1cmz0_66 ._name_1cmz0_53 {\n color: var(--dsw-alias-label-tertiary);\n}\n\n._current_1cmz0_97 {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--dsw-alias-label-primary);\n}\n._dot_sosf1_1 {\n flex: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n._overlay_sosf1_8 {\n position: absolute;\n inset-block-start: var(--wb-len-neg-3);\n inset-inline-end: var(--wb-len-neg-3);\n}\n._tag_g9dg8_1 {\n flex: none;\n margin-inline-start: auto;\n}\n._dialog_1vye5_1 {\n width: min(var(--wb-len-420), 100%);\n}\n\n._stack_1vye5_5 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-8);\n min-width: 0;\n}\n\n._input_1vye5_12 {\n width: 100%;\n height: var(--wb-len-40);\n padding: 0 var(--wb-len-12);\n}\n\n._meta_1vye5_18 {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wb-len-12);\n min-width: 0;\n}\n._dot_14w1n_1 {\n display: inline-flex;\n align-items: center;\n}\n\n._hover_14w1n_6 {\n display: inline-flex;\n align-items: center;\n gap: var(--wb-len-6);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-secondary);\n}\n._blocker_1oaj0_1 {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--wb-len-6);\n padding: var(--wb-len-20) var(--wb-len-16);\n text-align: center;\n}\n\n._icon_1oaj0_10 {\n display: flex;\n color: var(--dsw-alias-label-tertiary);\n}\n\n._title_1oaj0_15 {\n margin: var(--wb-len-2) 0 0;\n font-size: var(--dsw-font-s-14-font-size);\n line-height: var(--wb-line-22);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._hint_1oaj0_23 {\n margin: 0;\n max-width: var(--wb-len-42em);\n font-size: var(--dsw-font-xxs-12-font-size);\n line-height: var(--wb-line-18);\n color: var(--dsw-alias-label-tertiary);\n text-wrap: pretty;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 {\n align-items: flex-start;\n gap: var(--wb-len-6);\n padding: var(--wb-len-4) 0 var(--wb-len-2);\n text-align: left;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._title_1oaj0_15 {\n font-size: var(--dsw-font-xs-13-font-size);\n line-height: var(--wb-line-20);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._hint_1oaj0_23 {\n max-width: 100%;\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._actions_1oaj0_48 {\n margin-top: var(--wb-len-8);\n}\n\n._blocker_1oaj0_1._blockerInline_1oaj0_32 ._raw_1oaj0_52 {\n margin-top: var(--wb-len-4);\n max-width: 100%;\n}\n\n._actions_1oaj0_48 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-10);\n margin-top: var(--wb-len-6);\n}\n\n._raw_1oaj0_52 {\n margin-top: var(--wb-len-10);\n width: 100%;\n max-width: var(--wb-len-360);\n text-align: left;\n}\n\n._notice_1oaj0_71 {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n column-gap: var(--wb-len-10);\n margin: 0 0 var(--wb-len-10);\n padding: var(--wb-len-10) var(--wb-len-12);\n border: 0.5px solid var(--dsw-alias-border-l2);\n border-left: 2px solid var(--dsw-alias-border-l3);\n border-radius: var(--dsw-radius-sm);\n background: var(--dsw-alias-bg-layer-1);\n}\n\n._notice_1oaj0_71._noticeFlat_1oaj0_84 {\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n}\n\n._noticeText_1oaj0_91 {\n display: flex;\n flex-direction: column;\n gap: var(--wb-len-3);\n min-width: 0;\n}\n\n._noticeTitle_1oaj0_98 {\n font-size: var(--wb-font-12-5);\n line-height: var(--wb-line-18);\n font-weight: 600;\n color: var(--dsw-alias-label-primary);\n}\n\n._noticeHint_1oaj0_105 {\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-label-tertiary);\n overflow-wrap: anywhere;\n}\n\n._noticeActions_1oaj0_112 {\n display: flex;\n align-items: center;\n gap: var(--wb-len-6);\n margin-top: var(--wb-len-neg-2);\n}\n\n._failure_1oaj0_119 {\n margin: var(--wb-len-8) 0 0;\n font-size: var(--wb-font-11-5);\n line-height: var(--wb-line-17);\n color: var(--dsw-alias-state-error-primary);\n overflow-wrap: anywhere;\n}\n\n._failureDetail_1oaj0_127 {\n display: block;\n margin-top: var(--wb-len-2);\n color: var(--dsw-alias-label-tertiary);\n white-space: pre-wrap;\n}\n\n._inlineAction_1oaj0_134 {\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n}\n\n._inlineAction_1oaj0_134:disabled {\n opacity: 0.6;\n cursor: default;\n}\n\n._rawText_1oaj0_146 {\n margin: var(--wb-len-6) 0 0;\n max-width: 100%;\n}\n/*$vite$:1*/";
|
|
15456
16241
|
function workbenchCss() {
|
|
15457
16242
|
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}`;
|
|
15458
16243
|
}
|
|
@@ -15701,7 +16486,7 @@ function mount(ctx) {
|
|
|
15701
16486
|
inject: () => ({
|
|
15702
16487
|
t: ctx.locale.bind(LOCALE_NS),
|
|
15703
16488
|
units: units.all(),
|
|
15704
|
-
renderShell:
|
|
16489
|
+
renderShell: shellApprovalRenderer(units.declared)
|
|
15705
16490
|
})
|
|
15706
16491
|
}, ApprovalDetail));
|
|
15707
16492
|
ctx.slots.inject("conversation.session.header.corner", () => ctx.slots.register({
|