@chatcode/cco-better-sidebar 0.18.0-rc.3 → 0.18.0-rc.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/README.md +19 -1
- package/README_EN.md +19 -1
- package/lib/client-editor.js +326 -258
- package/lib/client-mermaid.js +312 -259
- package/lib/client-registry.js +1392 -605
- package/lib/client-terminal.js +328 -260
- package/lib/client.js +1352 -565
- package/lib/index.js +162 -5
- package/lib/types/client/LogoutConfirmDialog.d.ts +5 -0
- package/lib/types/client/PluginMarketSettingsSection.d.ts +7 -0
- package/lib/types/client/PluginMarketView.d.ts +7 -0
- package/lib/types/client/api.d.ts +15 -0
- package/lib/types/client/builtins/tabs.d.ts +6 -3
- package/lib/types/client/locales.d.ts +23 -0
- package/lib/types/client/plugin-market-catalog.d.ts +25 -0
- package/lib/types/client/ui-tweaks/branding.d.ts +1 -1
- package/lib/types/client/ui-tweaks/index.d.ts +1 -1
- package/lib/types/client/ui-tweaks/sidebar-header.d.ts +6 -0
- package/lib/types/client/ui-tweaks/typography.d.ts +9 -0
- package/lib/types/login-page-script.d.ts +2 -0
- package/lib/types/login-route.d.ts +2 -0
- package/lib/types/plugin-market-api.d.ts +5 -0
- package/lib/types/plugin-market-shared.d.ts +37 -0
- package/lib/types/ui-tweaks/config.d.ts +5 -6
- package/package.json +1 -1
- package/src/client/AccountMenu.tsx +12 -2
- package/src/client/LogoutConfirmDialog.tsx +39 -0
- package/src/client/PluginMarketSettingsSection.tsx +55 -0
- package/src/client/PluginMarketView.module.css +35 -0
- package/src/client/PluginMarketView.tsx +154 -0
- package/src/client/api.ts +7 -0
- package/src/client/builtins/tabs.tsx +16 -3
- package/src/client/index.tsx +10 -1
- package/src/client/locales-ja.ts +23 -0
- package/src/client/locales.ts +48 -0
- package/src/client/plugin-market-catalog.ts +90 -0
- package/src/client/sidebar.module.css +81 -19
- package/src/client/ui-tweaks/branding.tsx +25 -16
- package/src/client/ui-tweaks/index.tsx +36 -99
- package/src/client/ui-tweaks/sidebar-header.ts +73 -0
- package/src/client/ui-tweaks/typography.ts +38 -0
- package/src/index.ts +2 -0
- package/src/login-page-script.ts +107 -0
- package/src/login-route.ts +7 -4
- package/src/plugin-market-api.ts +42 -0
- package/src/plugin-market-shared.ts +21 -0
- package/src/ui-tweaks/config.ts +10 -10
package/lib/client-registry.js
CHANGED
|
@@ -2006,8 +2006,31 @@ window.__ModuleLoader__.load({
|
|
|
2006
2006
|
*/
|
|
2007
2007
|
/** The ja dictionary (key-set-equal to zh, enforced by the type annotation in locales.ts). */
|
|
2008
2008
|
const ja$1 = {
|
|
2009
|
+
pluginMarketTitle: "プラグインマーケット",
|
|
2010
|
+
pluginMarketProjectDirectory: "プロジェクトディレクトリ:{path}",
|
|
2011
|
+
pluginMarketInstalledTab: "インストール済み",
|
|
2012
|
+
pluginMarketRefresh: "更新",
|
|
2013
|
+
pluginMarketLoading: "プラグインを読み込み中…",
|
|
2014
|
+
pluginMarketRefreshing: "一覧を更新中…",
|
|
2015
|
+
pluginMarketEmpty: "プラグインはありません。",
|
|
2016
|
+
pluginMarketBack: "戻る",
|
|
2017
|
+
pluginMarketInstall: "インストール",
|
|
2018
|
+
pluginMarketUninstall: "アンインストール",
|
|
2019
|
+
pluginMarketProject: "プロジェクト",
|
|
2020
|
+
pluginMarketUser: "ユーザー",
|
|
2021
|
+
pluginMarketInstalled: "プラグインをインストールしました。",
|
|
2022
|
+
pluginMarketUninstalled: "プラグインをアンインストールしました。",
|
|
2023
|
+
pluginMarketSubtitle: "マーケットを参照し、プロジェクトまたはユーザー環境にインストールします。",
|
|
2024
|
+
pluginMarketSearch: "マーケットやプラグインを検索",
|
|
2025
|
+
pluginMarketDefault: "デフォルト",
|
|
2026
|
+
pluginMarketBrowse: "プラグインを見る",
|
|
2027
|
+
pluginMarketNoDescription: "説明なし",
|
|
2028
|
+
pluginMarketInstalling: "インストール中…",
|
|
2029
|
+
pluginMarketUninstalling: "アンインストール中…",
|
|
2009
2030
|
accountMenuSettings: "設定",
|
|
2010
2031
|
accountMenuLogout: "ログアウト",
|
|
2032
|
+
accountMenuLogoutConfirmTitle: "ログアウトしますか?",
|
|
2033
|
+
accountMenuLogoutConfirmDescription: "ChatCode CLI からログアウトしますか?続行するには再度ログインする必要があります。",
|
|
2011
2034
|
accountMenuLabel: "アカウントメニュー",
|
|
2012
2035
|
updateMenu: "更新を確認 / 今すぐ更新",
|
|
2013
2036
|
updateNav: "更新",
|
|
@@ -9582,8 +9605,31 @@ window.__ModuleLoader__.load({
|
|
|
9582
9605
|
*/
|
|
9583
9606
|
/** The zh dictionary (also registered into the ChatCode CLI locale registry under {@link LOCALE_NS}). */
|
|
9584
9607
|
const zh$1 = {
|
|
9608
|
+
pluginMarketTitle: "插件市场",
|
|
9609
|
+
pluginMarketProjectDirectory: "项目目录:{path}",
|
|
9610
|
+
pluginMarketInstalledTab: "已安装",
|
|
9611
|
+
pluginMarketRefresh: "刷新",
|
|
9612
|
+
pluginMarketLoading: "正在加载插件…",
|
|
9613
|
+
pluginMarketRefreshing: "正在刷新列表…",
|
|
9614
|
+
pluginMarketEmpty: "暂无插件。",
|
|
9615
|
+
pluginMarketBack: "返回",
|
|
9616
|
+
pluginMarketInstall: "安装",
|
|
9617
|
+
pluginMarketUninstall: "卸载",
|
|
9618
|
+
pluginMarketProject: "项目级",
|
|
9619
|
+
pluginMarketUser: "用户级",
|
|
9620
|
+
pluginMarketInstalled: "插件安装成功。",
|
|
9621
|
+
pluginMarketUninstalled: "插件卸载成功。",
|
|
9622
|
+
pluginMarketSubtitle: "浏览插件市场,选择安装到当前项目或用户环境。",
|
|
9623
|
+
pluginMarketSearch: "搜索市场或插件",
|
|
9624
|
+
pluginMarketDefault: "默认",
|
|
9625
|
+
pluginMarketBrowse: "查看插件",
|
|
9626
|
+
pluginMarketNoDescription: "暂无描述",
|
|
9627
|
+
pluginMarketInstalling: "安装中…",
|
|
9628
|
+
pluginMarketUninstalling: "卸载中…",
|
|
9585
9629
|
accountMenuSettings: "设置",
|
|
9586
9630
|
accountMenuLogout: "退出登录",
|
|
9631
|
+
accountMenuLogoutConfirmTitle: "退出登录?",
|
|
9632
|
+
accountMenuLogoutConfirmDescription: "确定要退出 ChatCode CLI 吗?退出后需要重新登录才能继续使用。",
|
|
9587
9633
|
accountMenuLabel: "账户菜单",
|
|
9588
9634
|
updateMenu: "检查更新 / 一键更新",
|
|
9589
9635
|
updateNav: "更新",
|
|
@@ -10052,8 +10098,31 @@ window.__ModuleLoader__.load({
|
|
|
10052
10098
|
};
|
|
10053
10099
|
/** The en dictionary (key-set-equal to zh, enforced by the type annotation). */
|
|
10054
10100
|
const en$1 = {
|
|
10101
|
+
pluginMarketTitle: "Plugin marketplace",
|
|
10102
|
+
pluginMarketProjectDirectory: "Project directory: {path}",
|
|
10103
|
+
pluginMarketInstalledTab: "Installed",
|
|
10104
|
+
pluginMarketRefresh: "Refresh",
|
|
10105
|
+
pluginMarketLoading: "Loading plugins…",
|
|
10106
|
+
pluginMarketRefreshing: "Refreshing list…",
|
|
10107
|
+
pluginMarketEmpty: "No plugins.",
|
|
10108
|
+
pluginMarketBack: "Back",
|
|
10109
|
+
pluginMarketInstall: "Install",
|
|
10110
|
+
pluginMarketUninstall: "Uninstall",
|
|
10111
|
+
pluginMarketProject: "Project",
|
|
10112
|
+
pluginMarketUser: "User",
|
|
10113
|
+
pluginMarketInstalled: "Plugin installed.",
|
|
10114
|
+
pluginMarketUninstalled: "Plugin uninstalled.",
|
|
10115
|
+
pluginMarketSubtitle: "Browse marketplaces and install plugins for your project or user.",
|
|
10116
|
+
pluginMarketSearch: "Search marketplaces or plugins",
|
|
10117
|
+
pluginMarketDefault: "Default",
|
|
10118
|
+
pluginMarketBrowse: "Browse plugins",
|
|
10119
|
+
pluginMarketNoDescription: "No description",
|
|
10120
|
+
pluginMarketInstalling: "Installing…",
|
|
10121
|
+
pluginMarketUninstalling: "Uninstalling…",
|
|
10055
10122
|
accountMenuSettings: "Settings",
|
|
10056
10123
|
accountMenuLogout: "Log out",
|
|
10124
|
+
accountMenuLogoutConfirmTitle: "Log out?",
|
|
10125
|
+
accountMenuLogoutConfirmDescription: "Are you sure you want to log out of ChatCode CLI? You will need to sign in again to continue.",
|
|
10057
10126
|
accountMenuLabel: "Account menu",
|
|
10058
10127
|
updateMenu: "Check for updates / Update now",
|
|
10059
10128
|
updateNav: "Update",
|
|
@@ -10526,6 +10595,8 @@ window.__ModuleLoader__.load({
|
|
|
10526
10595
|
*/
|
|
10527
10596
|
const LOCALE_NS = "betterSidebar";
|
|
10528
10597
|
const accountAndModelFallback = {
|
|
10598
|
+
accountMenuLogoutConfirmTitle: en$1.accountMenuLogoutConfirmTitle,
|
|
10599
|
+
accountMenuLogoutConfirmDescription: en$1.accountMenuLogoutConfirmDescription,
|
|
10529
10600
|
chatcodeGateChecking: en$1.chatcodeGateChecking,
|
|
10530
10601
|
chatcodeGateUnverified: en$1.chatcodeGateUnverified,
|
|
10531
10602
|
chatcodeGatePending: en$1.chatcodeGatePending,
|
|
@@ -12089,305 +12160,310 @@ window.__ModuleLoader__.load({
|
|
|
12089
12160
|
}
|
|
12090
12161
|
//#endregion
|
|
12091
12162
|
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/sidebar.module.css.mjs
|
|
12092
|
-
const css$5 = ".FV0QMq_releaseNotesOverlay{z-index:120;pointer-events:auto;background:color-mix(in srgb, var(--dsw-alias-bg-base) 72%, transparent);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.FV0QMq_releaseNotesDialog{width:min(720px,100%);max-height:min(760px,100vh - 48px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.FV0QMq_releaseNotesHeader,.FV0QMq_releaseNotesFooter{align-items:center;padding:16px 20px;display:flex}.FV0QMq_releaseNotesHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;gap:16px}.FV0QMq_releaseNotesHeader h2{font:var(--dsw-font-s-18);margin:0}.FV0QMq_releaseNotesContent{min-height:120px;font:var(--dsw-font-s-14);padding:20px;overflow:auto}.FV0QMq_releaseNotesFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end}.FV0QMq_releaseNotesIconButton,.FV0QMq_releaseNotesButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);cursor:pointer}.FV0QMq_releaseNotesIconButton:hover,.FV0QMq_releaseNotesButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_releaseNotesIconButton{width:32px;height:32px;font:var(--dsw-font-s-18);border-radius:50%;padding:0}.FV0QMq_releaseNotesButton{min-width:84px;min-height:36px;font:var(--dsw-font-s-14);border-radius:8px;padding:6px 16px}.FV0QMq_updateList{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.FV0QMq_updateList li{font:var(--dsw-font-s-14);justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateVersions{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-secondary)}.FV0QMq_updateOk{color:var(--dsw-alias-state-success-primary)}.FV0QMq_updateError,.FV0QMq_updateErrorText{color:var(--dsw-alias-state-error-primary)}.FV0QMq_updateErrorText{white-space:pre-wrap;font:var(--dsw-font-s-14);margin:12px 0 0}.FV0QMq_updateCommand{background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-code,var(--ds-font-family-code,monospace));white-space:pre-wrap;word-break:break-all;user-select:all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-size:12px;overflow-x:auto}.FV0QMq_updateSettingsRow{justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateSettingsText{flex-direction:column;gap:2px;min-width:0;display:flex}.FV0QMq_updateSettingsTitle{font:var(--dsw-font-s-14)}.FV0QMq_updateSettingsDesc{font:var(--dsw-font-s-13);color:var(--dsw-alias-label-secondary)}.FV0QMq_updateSettingsBlock{flex-direction:column;gap:12px;display:flex}.FV0QMq_updateBody{font:var(--dsw-font-s-14);margin:20px 0 0}.FV0QMq_updateFooter{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.FV0QMq_updateInline{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:16px}[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:clip}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}[data-dsh-pinned-sessions]{flex:none;min-width:0}.FV0QMq_pinnedSessions{border-bottom:1px solid var(--dsw-alias-border-l1);margin:0 0 6px;padding:4px 0 6px}.FV0QMq_pinnedSessionsHeading{height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);align-items:center;padding:0 4px;display:flex}.FV0QMq_pinnedSessionsList{gap:1px;display:grid}[data-slot=sidebar\\.workspaces] [class*=_sessionRow][data-dsh-session-pinned]{display:none}.FV0QMq_pinnedSessionRow{border-radius:8px;align-items:center;min-width:0;height:32px;display:flex;position:relative}.FV0QMq_pinnedSessionRow:hover,.FV0QMq_pinnedSessionRow:focus-within{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionOpen,.FV0QMq_pinnedSessionMore,.FV0QMq_pinnedSessionMenu button{font:inherit;cursor:pointer;border:0}.FV0QMq_pinnedSessionOpen{min-width:0;height:100%;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-s-14);background:0 0;flex:1;align-items:center;gap:8px;padding:0 6px 0 8px;display:flex}.FV0QMq_pinnedSessionOpen[aria-current=page]{color:var(--dsw-alias-brand-primary)}.FV0QMq_pinnedSessionDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_pinnedSessionDot[data-running]{background:var(--dsw-alias-state-success-primary)}.FV0QMq_pinnedSessionTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_pinnedSessionMore{width:28px;height:28px;color:var(--dsw-alias-label-secondary);letter-spacing:1px;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-right:2px;padding:0;display:inline-flex}.FV0QMq_pinnedSessionMore:hover,.FV0QMq_pinnedSessionMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedSessionMenu{z-index:1101;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);border-radius:10px;min-width:150px;padding:4px;position:absolute;top:calc(100% + 2px);right:0}.FV0QMq_pinnedSessionMenu button{width:100%;min-height:32px;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-xxs-12);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.FV0QMq_pinnedSessionMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px}.FV0QMq_accountMenu{z-index:3;box-sizing:border-box;width:var(--dsh-account-menu-width,280px);border-top:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);pointer-events:auto;position:absolute;bottom:0;left:0}.FV0QMq_accountTrigger,.FV0QMq_accountItem{color:var(--dsw-alias-fg-base);font:inherit;cursor:pointer;border:0}.FV0QMq_accountTrigger{box-sizing:border-box;width:100%;min-height:52px;padding:10px 14px max(10px, env(safe-area-inset-bottom));background:var(--dsw-alias-bg-layer-1);font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:0;align-items:center;gap:8px;display:flex}.FV0QMq_accountTrigger:hover,.FV0QMq_accountTrigger[aria-expanded=true]{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountTrigger:focus-visible,.FV0QMq_accountItem:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountAvatar{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);width:28px;height:28px;color:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;place-items:center;font-weight:600;display:grid;position:relative}.FV0QMq_accountName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_accountDropdown{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);z-index:1;border-radius:12px;width:min(252px,100% - 16px);padding:10px 8px 8px;display:grid;position:absolute;bottom:calc(100% + 8px);left:8px}.FV0QMq_accountDropdownHeader{min-height:36px;font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);align-items:center;gap:8px;padding:0 8px 8px;display:flex}.FV0QMq_accountMenuDivider{background:var(--dsw-alias-border-l2);height:1px;margin:0 4px 6px}.FV0QMq_accountItem{text-align:left;min-height:32px;font:var(--dsw-font-s-14);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:0 10px;display:flex}.FV0QMq_accountItem:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountPresence{box-sizing:content-box;border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:auto}.FV0QMq_accountTrigger .FV0QMq_accountPresence{border-color:var(--dsw-alias-bg-layer-1)}.FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(3px + env(safe-area-inset-top)));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.FV0QMq_toggleClusterNative{z-index:auto;flex:none;align-items:center;position:static;inset:auto}button[data-dsh-better-sidebar-toggle]{display:none}body:not([data-dsh-native-sidebar-toggle]) .FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:var(--dsh-sidebar-toggle-reserve,188px)}.FV0QMq_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.FV0QMq_manualButton{min-width:94px;height:28px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:6px;margin-right:4px;padding:0 10px;display:inline-flex}.FV0QMq_manualButton:hover,.FV0QMq_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_toggleButton:disabled,.FV0QMq_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.FV0QMq_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.FV0QMq_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.FV0QMq_panel[data-dragging]{transition:none}.FV0QMq_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.FV0QMq_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_panelBody{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.FV0QMq_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.FV0QMq_bottomPanel[data-dragging]{transition:none}.FV0QMq_panel,.FV0QMq_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .FV0QMq_panel,body[data-dsh-sidebar-dragging] .FV0QMq_bottomPanel{will-change:transform}.FV0QMq_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.FV0QMq_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_bottomClose{z-index:4;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:3px;right:6px}.FV0QMq_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_bottomPanel .FV0QMq_tabBar{padding-right:40px}.FV0QMq_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.FV0QMq_floatWindowDragging{will-change:left, top, width, height}.FV0QMq_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_floatWindowDragging .FV0QMq_floatHeader{cursor:grabbing}.FV0QMq_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.FV0QMq_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.FV0QMq_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.FV0QMq_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.FV0QMq_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_manualButton,.FV0QMq_tabBar,.FV0QMq_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(var(--dsh-title-bar-strip,40px) + 3px))}body[data-dsh-title-bar-compat] .FV0QMq_panel{padding-top:var(--dsh-title-bar-strip,40px)}.FV0QMq_cornerHandle{left:-6px;bottom:calc(var(--dsh-sidebar-height,0px) + 6px);z-index:2;cursor:nwse-resize;touch-action:none;width:12px;height:12px;position:absolute}.FV0QMq_cornerHandle:hover,.FV0QMq_cornerHandle[data-dragging]{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_iconButton:disabled{opacity:.4;cursor:default}.FV0QMq_workbench,.FV0QMq_split{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_splitRow{flex-direction:row}.FV0QMq_splitCol{flex-direction:column}.FV0QMq_splitChild{display:flex;position:relative;overflow:hidden}.FV0QMq_divider{z-index:3;touch-action:none;flex:none;position:relative}.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.FV0QMq_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.FV0QMq_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.FV0QMq_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.FV0QMq_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.FV0QMq_divider:hover:after,.FV0QMq_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.FV0QMq_dropLeft{width:25%;top:0;bottom:0;left:0}.FV0QMq_dropRight{width:25%;top:0;bottom:0;right:0}.FV0QMq_dropUp{height:25%;top:0;left:0;right:0}.FV0QMq_dropDown{height:25%;bottom:0;left:0;right:0}.FV0QMq_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.FV0QMq_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.FV0QMq_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_paneTabHidden{display:none}.FV0QMq_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.FV0QMq_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.FV0QMq_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.FV0QMq_paneCard:disabled{opacity:.45;cursor:default}.FV0QMq_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.FV0QMq_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.FV0QMq_tabList::-webkit-scrollbar{display:none}.FV0QMq_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.FV0QMq_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.FV0QMq_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.FV0QMq_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.FV0QMq_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.FV0QMq_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.FV0QMq_explorerRowRevealed+.FV0QMq_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.FV0QMq_explorerRowRevealed:has(+.FV0QMq_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.FV0QMq_explorerDir{font:var(--dsw-font-s-strong-14)}.FV0QMq_explorerHidden{opacity:.45}.FV0QMq_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerBroken .FV0QMq_explorerName{color:var(--dsw-alias-state-error-primary)}.FV0QMq_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.FV0QMq_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_explorerRow:hover .FV0QMq_explorerRef,.FV0QMq_explorerRow:focus-within .FV0QMq_explorerRef{display:inline-flex}.FV0QMq_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes FV0QMq_dsh-row-in{0%{opacity:0}}.FV0QMq_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.FV0QMq_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.FV0QMq_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.FV0QMq_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadDropChatHint{z-index:1002;pointer-events:none;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.FV0QMq_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.FV0QMq_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.FV0QMq_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.FV0QMq_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.FV0QMq_uploadOverlayTitle>svg{flex:none}.FV0QMq_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.FV0QMq_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.FV0QMq_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.FV0QMq_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.FV0QMq_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.FV0QMq_editor{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.FV0QMq_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_editorBody{flex:1;min-height:0;display:flex}.FV0QMq_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.FV0QMq_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.FV0QMq_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.FV0QMq_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_editorTreePanelFull{flex:1}.FV0QMq_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.FV0QMq_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.FV0QMq_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorStatusError{color:var(--dsw-alias-state-error-primary)}.FV0QMq_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.FV0QMq_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.FV0QMq_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.FV0QMq_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.FV0QMq_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.FV0QMq_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.FV0QMq_fenceError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.FV0QMq_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.FV0QMq_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.FV0QMq_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.FV0QMq_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.FV0QMq_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_sandboxStatusOff .FV0QMq_sandboxDot{background:var(--dsw-alias-state-error-primary)}.FV0QMq_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.FV0QMq_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browser{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.FV0QMq_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.FV0QMq_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.FV0QMq_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.FV0QMq_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.FV0QMq_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.FV0QMq_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.FV0QMq_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.FV0QMq_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.FV0QMq_editorCmHidden{display:none}.FV0QMq_editorCm .cm-editor{height:100%}.FV0QMq_editorCm .cm-scroller{padding:12px 16px}.FV0QMq_editorCm .cm-editor.cm-focused{outline:none}.FV0QMq_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.FV0QMq_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.FV0QMq_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.FV0QMq_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.FV0QMq_editorImageWrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.FV0QMq_editorImage{object-fit:contain;max-width:100%;max-height:100%}.FV0QMq_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.FV0QMq_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.FV0QMq_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.FV0QMq_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.FV0QMq_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.FV0QMq_mermaidBody svg{max-width:100%;height:auto}.FV0QMq_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.FV0QMq_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.FV0QMq_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.FV0QMq_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.FV0QMq_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.FV0QMq_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.FV0QMq_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.FV0QMq_mermaidModalStage svg:active{cursor:grabbing}.FV0QMq_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.FV0QMq_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.FV0QMq_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.FV0QMq_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.FV0QMq_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_editorPdfFrameBlocked{pointer-events:none}.FV0QMq_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.FV0QMq_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .FV0QMq_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .FV0QMq_editorPdfDragShield{pointer-events:auto!important}.FV0QMq_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.FV0QMq_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.FV0QMq_terminal .xterm{height:100%}.FV0QMq_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.FV0QMq_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.FV0QMq_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.FV0QMq_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.FV0QMq_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.FV0QMq_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.FV0QMq_terminalDepsHint{opacity:.9}.FV0QMq_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.FV0QMq_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.FV0QMq_terminalDepsNote{opacity:.85}.FV0QMq_terminalDepsActions{align-items:center;gap:8px;display:flex}.FV0QMq_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.FV0QMq_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.FV0QMq_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.FV0QMq_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.FV0QMq_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.FV0QMq_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.FV0QMq_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.FV0QMq_gitLink:hover:not(:disabled){text-decoration:underline}.FV0QMq_gitLink:disabled{opacity:.4;cursor:default}.FV0QMq_gitRow{min-height:34px;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.FV0QMq_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.FV0QMq_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.FV0QMq_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.FV0QMq_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.FV0QMq_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.FV0QMq_gitDiffFile:disabled{cursor:default}.FV0QMq_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.FV0QMq_gitDiffFileChevronExpanded{transform:rotate(90deg)}.FV0QMq_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.FV0QMq_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.FV0QMq_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.FV0QMq_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.FV0QMq_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.FV0QMq_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.FV0QMq_gitDiffCode{flex:1;min-width:0;overflow:visible}.FV0QMq_gitDiffCtx{color:var(--dsw-alias-label-primary)}.FV0QMq_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.FV0QMq_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.FV0QMq_gitDiffMeta{padding-left:2px}.FV0QMq_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.FV0QMq_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.FV0QMq_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.FV0QMq_gitCommitInput{flex:1;min-width:0}.FV0QMq_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.FV0QMq_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.FV0QMq_gitCommitButton:disabled{opacity:.45;cursor:default}.FV0QMq_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.FV0QMq_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.FV0QMq_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.FV0QMq_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.FV0QMq_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.FV0QMq_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_gitLogMore:disabled{opacity:.5;cursor:default}.FV0QMq_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.FV0QMq_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.FV0QMq_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_toggleButton:focus-visible,.FV0QMq_manualButton:focus-visible,.FV0QMq_bottomClose:focus-visible,.FV0QMq_iconButton:focus-visible,.FV0QMq_tab:focus-visible,.FV0QMq_tabClose:focus-visible,.FV0QMq_tabBarPlus:focus-visible,.FV0QMq_paneCard:focus-visible,.FV0QMq_explorerRow:focus-visible,.FV0QMq_explorerRef:focus-visible,.FV0QMq_gitRowMain:focus-visible,.FV0QMq_gitLink:focus-visible,.FV0QMq_gitCommitButton:focus-visible,.FV0QMq_gitLogRow:focus-visible,.FV0QMq_gitLogMore:focus-visible,.FV0QMq_gitDiffFile:focus-visible,.FV0QMq_gitDiffExpand:focus-visible,.FV0QMq_terminalRetry:focus-visible,.FV0QMq_editorModeButton:focus-visible,.FV0QMq_editorDownloadLink:focus-visible,.FV0QMq_editorPptxButton:focus-visible,.FV0QMq_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.FV0QMq_panel,.FV0QMq_panelHidden,.FV0QMq_bottomPanel,.FV0QMq_bottomPanelHidden,.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_tab,.FV0QMq_tabBarPlus,.FV0QMq_paneCard,.FV0QMq_explorerRow,.FV0QMq_gitRow,.FV0QMq_divider,.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:148px}.FV0QMq_tab{min-width:48px;max-width:128px}}.FV0QMq_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.FV0QMq_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.FV0QMq_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.FV0QMq_editorHtmlBlock{margin:8px 0}.FV0QMq_editorHtmlBlock img,.FV0QMq_editorHtmlBlock video{max-width:100%}.FV0QMq_editorHtmlBlock details{margin:4px 0;padding:4px 0}.FV0QMq_editorHtmlBlock summary{cursor:pointer}.FV0QMq_tocBar{z-index:3;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.FV0QMq_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.FV0QMq_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.FV0QMq_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.FV0QMq_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocItem[data-level=\"2\"]{padding-left:18px}.FV0QMq_tocItem[data-level=\"3\"]{padding-left:28px}.FV0QMq_tocItem[data-level=\"4\"]{padding-left:38px}.FV0QMq_tocItem[data-level=\"5\"]{padding-left:48px}.FV0QMq_tocItem[data-level=\"6\"]{padding-left:58px}.FV0QMq_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes FV0QMq_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.FV0QMq_tocFlash{border-radius:4px;animation:1.2s ease-out FV0QMq_dsh-toc-flash}.FV0QMq_chatcodeGate{z-index:2147483000;isolation:isolate;background-color:var(--dsw-alias-tooltip-bg);background-image:linear-gradient(135deg, var(--dsw-alias-tooltip-bg) 0%, var(--dsw-alias-brand-primary) 48%, var(--dsw-alias-tooltip-bg) 100%);color:var(--dsw-alias-fg-base);pointer-events:auto;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.FV0QMq_chatcodeGateCard{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:linear-gradient(145deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));width:min(460px,100%);box-shadow:var(--dsw-shadow-lv3);text-align:center;border-radius:20px;padding:40px 36px;position:relative}.FV0QMq_chatcodeGateContent{position:relative}.FV0QMq_chatcodeGateCard h1{font:var(--dsw-font-heading-lg);letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(32px,5vw,46px);line-height:1.1}.FV0QMq_chatcodeGateCard p{max-width:29em;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-s-14);margin:0 auto;line-height:1.7}.FV0QMq_chatcodeGateError{border:1px solid color-mix(in srgb, var(--dsw-alias-fg-error) 36%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-fg-error) 8%, transparent);border-radius:10px;padding:9px 11px;position:relative;color:var(--dsw-alias-fg-error)!important;font:var(--dsw-font-xxs-12)!important;margin-top:16px!important;line-height:1.5!important}.FV0QMq_chatcodeGateActions{justify-content:center;gap:10px;margin:28px 0 14px;display:flex;position:relative}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:42px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:10px;padding:9px 17px}.FV0QMq_chatcodeGateActions button:first-child{border-color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-state-error-primary);min-width:152px;min-height:46px;color:var(--dsw-alias-label-primary-inverted)}.FV0QMq_chatcodeGateActions button:first-child:hover:not(:disabled){box-shadow:var(--dsw-shadow-lv2);transform:translateY(-2px);border-color:var(--dsw-alias-state-error-primary)!important;background:var(--dsw-alias-state-error-primary)!important;color:var(--dsw-alias-label-primary-inverted)!important}.FV0QMq_chatcodeGateActions button:not(:first-child):hover:not(:disabled),.FV0QMq_chatcodeGateCard a:hover{border-color:var(--dsw-alias-button-primary-hover);background:var(--dsw-alias-button-primary-hover);color:var(--dsw-alias-label-primary-inverted);transform:translateY(-1px)}.FV0QMq_chatcodeGateActions button:disabled{cursor:default;opacity:.55}.FV0QMq_chatcodeGateCard a{align-items:center;text-decoration:none;display:inline-flex;position:relative}.FV0QMq_chatcodeGateActions button:focus-visible,.FV0QMq_chatcodeGateCard a:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:3px}@media (width<=480px){.FV0QMq_chatcodeGate{padding:16px}.FV0QMq_chatcodeGateCard{padding:32px 24px}.FV0QMq_chatcodeGateActions{flex-direction:column;align-items:stretch}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{justify-content:center}}";
|
|
12093
|
-
const tagId$
|
|
12094
|
-
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$
|
|
12163
|
+
const css$6 = ".FV0QMq_releaseNotesOverlay{z-index:120;pointer-events:auto;background:color-mix(in srgb, var(--dsw-alias-bg-base) 72%, transparent);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.FV0QMq_releaseNotesDialog{width:min(720px,100%);max-height:min(760px,100vh - 48px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.FV0QMq_releaseNotesHeader,.FV0QMq_releaseNotesFooter{align-items:center;padding:16px 20px;display:flex}.FV0QMq_releaseNotesHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;gap:16px}.FV0QMq_releaseNotesHeader h2{font:var(--dsw-font-s-18);margin:0}.FV0QMq_releaseNotesContent{min-height:120px;font:var(--dsw-font-s-14);padding:20px;overflow:auto}.FV0QMq_releaseNotesFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end}.FV0QMq_releaseNotesIconButton,.FV0QMq_releaseNotesButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);cursor:pointer}.FV0QMq_releaseNotesIconButton:hover,.FV0QMq_releaseNotesButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_releaseNotesIconButton{width:32px;height:32px;font:var(--dsw-font-s-18);border-radius:50%;padding:0}.FV0QMq_releaseNotesButton{min-width:84px;min-height:36px;font:var(--dsw-font-s-14);border-radius:8px;padding:6px 16px}.FV0QMq_updateList{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.FV0QMq_updateList li{font:var(--dsw-font-s-14);justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateVersions{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-secondary)}.FV0QMq_updateOk{color:var(--dsw-alias-state-success-primary)}.FV0QMq_updateError,.FV0QMq_updateErrorText{color:var(--dsw-alias-state-error-primary)}.FV0QMq_updateErrorText{white-space:pre-wrap;font:var(--dsw-font-s-14);margin:12px 0 0}.FV0QMq_updateCommand{background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-code,var(--ds-font-family-code,monospace));white-space:pre-wrap;word-break:break-all;user-select:all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-size:12px;overflow-x:auto}.FV0QMq_updateSettingsRow{justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateSettingsText{flex-direction:column;gap:2px;min-width:0;display:flex}.FV0QMq_updateSettingsTitle{font:var(--dsw-font-s-14)}.FV0QMq_updateSettingsDesc{font:var(--dsw-font-s-13);color:var(--dsw-alias-label-secondary)}.FV0QMq_updateSettingsBlock{flex-direction:column;gap:12px;display:flex}.FV0QMq_updateBody{font:var(--dsw-font-s-14);margin:20px 0 0}.FV0QMq_updateFooter{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.FV0QMq_updateInline{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:16px}[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:clip}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}[data-dsh-pinned-sessions]{flex:none;min-width:0}.FV0QMq_pinnedSessions{border-bottom:1px solid var(--dsw-alias-border-l1);margin:0 0 6px;padding:4px 0 6px}.FV0QMq_pinnedSessionsHeading{height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);align-items:center;padding:0 4px;display:flex}.FV0QMq_pinnedSessionsList{gap:1px;display:grid}[data-slot=sidebar\\.workspaces] [class*=_sessionRow][data-dsh-session-pinned]{display:none}.FV0QMq_pinnedSessionRow{border-radius:8px;align-items:center;min-width:0;height:32px;display:flex;position:relative}.FV0QMq_pinnedSessionRow:hover,.FV0QMq_pinnedSessionRow:focus-within{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionOpen,.FV0QMq_pinnedSessionMore,.FV0QMq_pinnedSessionMenu button{font:inherit;cursor:pointer;border:0}.FV0QMq_pinnedSessionOpen{min-width:0;height:100%;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-s-14);background:0 0;flex:1;align-items:center;gap:8px;padding:0 6px 0 8px;display:flex}.FV0QMq_pinnedSessionOpen[aria-current=page]{color:var(--dsw-alias-brand-primary)}.FV0QMq_pinnedSessionDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_pinnedSessionDot[data-running]{background:var(--dsw-alias-state-success-primary)}.FV0QMq_pinnedSessionTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_pinnedSessionMore{width:28px;height:28px;color:var(--dsw-alias-label-secondary);letter-spacing:1px;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-right:2px;padding:0;display:inline-flex}.FV0QMq_pinnedSessionMore:hover,.FV0QMq_pinnedSessionMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedSessionMenu{z-index:1101;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);border-radius:10px;min-width:150px;padding:4px;position:absolute;top:calc(100% + 2px);right:0}.FV0QMq_pinnedSessionMenu button{width:100%;min-height:32px;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-xxs-12);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.FV0QMq_pinnedSessionMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px}.FV0QMq_accountMenu{z-index:3;box-sizing:border-box;width:var(--dsh-account-menu-width,280px);border-top:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);pointer-events:auto;position:absolute;bottom:0;left:0}.FV0QMq_accountTrigger,.FV0QMq_accountItem{color:var(--dsw-alias-fg-base);font:inherit;cursor:pointer;border:0}.FV0QMq_accountTrigger{box-sizing:border-box;width:100%;min-height:44px;padding:8px 12px max(8px, env(safe-area-inset-bottom));background:var(--dsw-alias-bg-layer-1);font:var(--dsw-font-xs-13);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:0;align-items:center;gap:8px;display:flex}.FV0QMq_accountTrigger:hover,.FV0QMq_accountTrigger[aria-expanded=true]{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountTrigger:focus-visible,.FV0QMq_accountItem:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountAvatar{box-sizing:border-box;background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);width:24px;height:24px;color:var(--dsw-alias-fg-accent);font:var(--dsw-font-xxs-12);border-radius:50%;flex:none;place-items:center;font-weight:600;display:grid;position:relative}.FV0QMq_accountName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_accountDropdown{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);z-index:1;border-radius:10px;width:min(224px,100% - 16px);padding:8px 6px 6px;display:grid;position:absolute;bottom:calc(100% + 8px);left:8px}.FV0QMq_accountDropdownHeader{min-width:0;min-height:28px;font:var(--dsw-font-xs-13);align-items:center;gap:8px;padding:0 6px 6px;display:flex}.FV0QMq_accountMenuDivider{background:var(--dsw-alias-border-l2);height:1px;margin:0 4px 4px}.FV0QMq_accountItem{text-align:left;min-height:30px;font:var(--dsw-font-xs-13);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:0 8px;display:flex}.FV0QMq_accountItem:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountPresence{box-sizing:content-box;border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:auto}.FV0QMq_accountTrigger .FV0QMq_accountPresence{border-color:var(--dsw-alias-bg-layer-1)}.FV0QMq_accountLogoutDialog{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:min(400px,100vw - 32px);max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);color:var(--dsw-alias-fg-base);font:var(--dsw-font-s-14);border-radius:16px;margin:auto;padding:24px;overflow:auto}.FV0QMq_accountLogoutDialog::backdrop{background:var(--dsw-alias-bg-mask-1)}.FV0QMq_accountLogoutTitle{font:var(--dsw-font-base-strong-16);margin:0}.FV0QMq_accountLogoutDescription{color:var(--dsw-alias-label-secondary);margin:12px 0 24px}.FV0QMq_accountLogoutActions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.FV0QMq_accountLogoutActions button{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:34px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xs-13);cursor:pointer;border-radius:8px;padding:6px 14px}.FV0QMq_accountLogoutActions button:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountLogoutActions button:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountLogoutActions .FV0QMq_accountLogoutConfirm{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(3px + env(safe-area-inset-top)));z-index:45;pointer-events:auto;flex-direction:row;gap:4px;display:flex;position:absolute;right:10px}.FV0QMq_toggleClusterNative{z-index:auto;flex:none;align-items:center;position:static;inset:auto}button[data-dsh-better-sidebar-toggle]{display:none}body:not([data-dsh-native-sidebar-toggle]) .FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:var(--dsh-sidebar-toggle-reserve,188px)}.FV0QMq_toggleButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;display:flex}.FV0QMq_manualButton{min-width:94px;height:28px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), color var(--ds-transition-duration-slow) var(--ds-ease-in-out);background:0 0;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:6px;margin-right:4px;padding:0 10px;display:inline-flex}.FV0QMq_manualButton:hover,.FV0QMq_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_toggleButton:disabled,.FV0QMq_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.FV0QMq_panel{box-sizing:border-box;z-index:40;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;top:0;bottom:0;right:0}.FV0QMq_panelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), width var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translate(102%)}.FV0QMq_panel[data-dragging]{transition:none}.FV0QMq_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.FV0QMq_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_panelBody{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.FV0QMq_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.FV0QMq_bottomPanel[data-dragging]{transition:none}.FV0QMq_panel,.FV0QMq_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .FV0QMq_panel,body[data-dsh-sidebar-dragging] .FV0QMq_bottomPanel{will-change:transform}.FV0QMq_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.FV0QMq_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_bottomClose{z-index:4;width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:3px;right:6px}.FV0QMq_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_bottomPanel .FV0QMq_tabBar{padding-right:40px}.FV0QMq_floatWindow{z-index:42;pointer-events:auto;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);box-shadow:var(--dsw-shadow-lv3);contain:layout style;border-radius:8px;flex-direction:column;display:flex;position:absolute;overflow:hidden}.FV0QMq_floatWindowDragging{will-change:left, top, width, height}.FV0QMq_floatHeader{height:34px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;user-select:none;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_floatWindowDragging .FV0QMq_floatHeader{cursor:grabbing}.FV0QMq_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_floatClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.FV0QMq_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.FV0QMq_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.FV0QMq_floatDropHint{z-index:46;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);background:color-mix(in srgb, var(--dsw-alias-interactive-bg-hover-accent) 12%, transparent);border-radius:8px;justify-content:center;align-items:center;display:flex;position:absolute}.FV0QMq_floatDropHintLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:999px;padding:4px 12px}.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_manualButton,.FV0QMq_tabBar,.FV0QMq_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(var(--dsh-title-bar-strip,40px) + 3px))}body[data-dsh-title-bar-compat] .FV0QMq_panel{padding-top:var(--dsh-title-bar-strip,40px)}.FV0QMq_cornerHandle{left:-6px;bottom:calc(var(--dsh-sidebar-height,0px) + 6px);z-index:2;cursor:nwse-resize;touch-action:none;width:12px;height:12px;position:absolute}.FV0QMq_cornerHandle:hover,.FV0QMq_cornerHandle[data-dragging]{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_iconButton{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_iconButton:disabled{opacity:.4;cursor:default}.FV0QMq_workbench,.FV0QMq_split{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_splitRow{flex-direction:row}.FV0QMq_splitCol{flex-direction:column}.FV0QMq_splitChild{display:flex;position:relative;overflow:hidden}.FV0QMq_divider{z-index:3;touch-action:none;flex:none;position:relative}.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.FV0QMq_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.FV0QMq_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.FV0QMq_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.FV0QMq_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.FV0QMq_divider:hover:after,.FV0QMq_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.FV0QMq_dropLeft{width:25%;top:0;bottom:0;left:0}.FV0QMq_dropRight{width:25%;top:0;bottom:0;right:0}.FV0QMq_dropUp{height:25%;top:0;left:0;right:0}.FV0QMq_dropDown{height:25%;bottom:0;left:0;right:0}.FV0QMq_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.FV0QMq_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.FV0QMq_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_paneTabHidden{display:none}.FV0QMq_paneEmptyCards{flex:1;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));align-content:start;gap:8px;min-height:0;padding:12px;display:grid;overflow:hidden}.FV0QMq_paneCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;text-align:center;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:12px 8px;display:flex}.FV0QMq_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.FV0QMq_paneCard:disabled{opacity:.45;cursor:default}.FV0QMq_tabBar{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex:none;align-items:stretch;height:34px;display:flex}.FV0QMq_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.FV0QMq_tabList::-webkit-scrollbar{display:none}.FV0QMq_tab{min-width:64px;max-width:160px;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);border-right:1px solid var(--dsw-alias-border-l1);cursor:pointer;user-select:none;background:0 0;flex:none;align-items:center;gap:4px;padding:0 4px 0 10px;display:flex}.FV0QMq_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_tabBadge{min-width:16px;height:15px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-brand-primary);border-radius:8px;flex:none;justify-content:center;align-items:center;padding:0 4px;display:inline-flex}.FV0QMq_tabClose{width:18px;height:18px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.FV0QMq_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tabBarPlus{background:var(--dsw-alias-bg-layer-1);width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border:none;border-radius:5px;flex:none;justify-content:center;align-self:center;align-items:center;margin:0 6px;padding:0;display:inline-flex;position:sticky;right:0}.FV0QMq_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.FV0QMq_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.FV0QMq_explorerRow{box-sizing:border-box;width:100%;max-width:100%;height:34px;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);text-align:left;cursor:pointer;white-space:nowrap;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);background:0 0;border:none;border-radius:8px;align-items:center;gap:6px;padding:0 8px;display:flex}.FV0QMq_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.FV0QMq_explorerRowRevealed+.FV0QMq_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.FV0QMq_explorerRowRevealed:has(+.FV0QMq_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.FV0QMq_explorerDir{font:var(--dsw-font-s-strong-14)}.FV0QMq_explorerHidden{opacity:.45}.FV0QMq_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerBroken .FV0QMq_explorerName{color:var(--dsw-alias-state-error-primary)}.FV0QMq_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_explorerRef{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:20px;color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;align-items:center;padding:0 8px;display:none}.FV0QMq_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_explorerRow:hover .FV0QMq_explorerRef,.FV0QMq_explorerRow:focus-within .FV0QMq_explorerRef{display:inline-flex}.FV0QMq_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes FV0QMq_dsh-row-in{0%{opacity:0}}.FV0QMq_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_uploadDropZone{z-index:1001;pointer-events:none;border:2px dashed var(--dsw-alias-interactive-bg-hover-accent);box-shadow:0 0 0 200vmax var(--dsw-alias-bg-mask-drop);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:10px;justify-content:center;align-items:flex-start;padding:12px;display:flex;position:fixed}.FV0QMq_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.FV0QMq_uploadDropZonePill{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;display:flex}.FV0QMq_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadDropChatHint{z-index:1002;pointer-events:none;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;top:0;bottom:0;left:0}.FV0QMq_uploadDropChatCard{text-align:center;max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-strong-14);flex-direction:column;align-items:center;gap:12px;display:flex}.FV0QMq_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.FV0QMq_uploadOverlayCard{border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);min-width:280px;max-width:min(420px,100% - 48px);box-shadow:var(--dsw-shadow-lv3);border-radius:24px;flex-direction:column;gap:12px;padding:20px 24px;display:flex}.FV0QMq_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.FV0QMq_uploadOverlayTitle>svg{flex:none}.FV0QMq_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.FV0QMq_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.FV0QMq_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.FV0QMq_uploadOverlayStatus{min-height:1em;font:var(--dsw-font-xxs-12);font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadOverlayCancel{border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;background:0 0;border-radius:8px;align-self:flex-end;padding:0 14px}.FV0QMq_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.FV0QMq_editor{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorTitle{min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.FV0QMq_editorPathInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_editorBody{flex:1;min-height:0;display:flex}.FV0QMq_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.FV0QMq_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.FV0QMq_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.FV0QMq_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_editorTreePanelFull{flex:1}.FV0QMq_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_editorSearchInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.FV0QMq_editorSearchResult{width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:none;border-radius:6px;padding:4px 8px;display:block;overflow:hidden}.FV0QMq_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorStatusError{color:var(--dsw-alias-state-error-primary)}.FV0QMq_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.FV0QMq_editorPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;flex:1;justify-content:center;align-items:center;padding:16px;display:flex}.FV0QMq_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.FV0QMq_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.FV0QMq_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorDownloadLink{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:6px;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.FV0QMq_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.FV0QMq_fenceError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.FV0QMq_editorBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 8px}.FV0QMq_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.FV0QMq_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.FV0QMq_sandboxStatusOff{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);border-bottom:1px solid color-mix(in srgb, var(--dsw-alias-state-error-primary) 45%, transparent)}.FV0QMq_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_sandboxStatusOff .FV0QMq_sandboxDot{background:var(--dsw-alias-state-error-primary)}.FV0QMq_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_sandboxAction{border:1px solid var(--dsw-alias-border-l2);font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:6px;flex:none;padding:2px 8px}.FV0QMq_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browser{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.FV0QMq_browserInput{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 10px}.FV0QMq_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_browserMessage{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex:none;padding:4px 12px}.FV0QMq_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browserStart{text-align:center;min-height:0;font:var(--dsw-font-xs-13);color:var(--dsw-alias-label-tertiary);flex:1;justify-content:center;align-items:center;padding:20px;display:flex}.FV0QMq_browserBlocked{text-align:center;min-height:0;color:var(--dsw-alias-state-warn-primary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:6px;padding:24px;display:flex}.FV0QMq_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.FV0QMq_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.FV0QMq_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.FV0QMq_browserBlockedButton{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-11);cursor:pointer;border-radius:6px;padding:4px 12px}.FV0QMq_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.FV0QMq_editorCmHidden{display:none}.FV0QMq_editorCm .cm-editor{height:100%}.FV0QMq_editorCm .cm-scroller{padding:12px 16px}.FV0QMq_editorCm .cm-editor.cm-focused{outline:none}.FV0QMq_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.FV0QMq_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.FV0QMq_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.FV0QMq_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.FV0QMq_editorImageWrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.FV0QMq_editorImage{object-fit:contain;max-width:100%;max-height:100%}.FV0QMq_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.FV0QMq_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.FV0QMq_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.FV0QMq_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.FV0QMq_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.FV0QMq_mermaidBody svg{max-width:100%;height:auto}.FV0QMq_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.FV0QMq_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.FV0QMq_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.FV0QMq_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.FV0QMq_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.FV0QMq_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.FV0QMq_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.FV0QMq_mermaidModalStage svg:active{cursor:grabbing}.FV0QMq_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.FV0QMq_selectionPopup{z-index:60;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);height:28px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxxs-strong-11);white-space:nowrap;cursor:pointer;border-radius:6px;align-items:center;padding:0 10px;display:inline-flex;position:fixed;transform:translate(-50%,calc(-100% - 8px))}.FV0QMq_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.FV0QMq_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.FV0QMq_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_editorPdfFrameBlocked{pointer-events:none}.FV0QMq_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.FV0QMq_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .FV0QMq_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .FV0QMq_editorPdfDragShield{pointer-events:auto!important}.FV0QMq_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.FV0QMq_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.FV0QMq_terminal .xterm{height:100%}.FV0QMq_terminalBanner{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-wrap:wrap;flex:none;align-items:center;gap:8px;padding:3px 10px;display:flex}.FV0QMq_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.FV0QMq_boundaryError{z-index:50;background:var(--dsw-alias-bg-layer-1);border-left:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;align-items:flex-start;gap:8px;padding:16px;display:flex;position:fixed;top:0;bottom:0;right:0;overflow:auto}.FV0QMq_terminalRetry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-strong-11);cursor:pointer;border-radius:999px;flex:none;padding:1px 8px}.FV0QMq_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_terminalDepsBanner{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-warn-label);background:var(--dsw-alias-state-warn-tertiary);flex-direction:column;flex:none;gap:6px;padding:10px;display:flex}.FV0QMq_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.FV0QMq_terminalDepsHint{opacity:.9}.FV0QMq_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.FV0QMq_terminalRepairCommand{white-space:pre-wrap;word-break:break-all;user-select:text;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:4px;flex:1;max-height:160px;margin:0;padding:6px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.5;overflow:auto}.FV0QMq_terminalDepsNote{opacity:.85}.FV0QMq_terminalDepsActions{align-items:center;gap:8px;display:flex}.FV0QMq_tabBoundaryError{min-height:0;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-direction:column;flex:1;align-items:flex-start;gap:8px;padding:12px 16px;display:flex;overflow:auto}.FV0QMq_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.FV0QMq_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.FV0QMq_gitBranchSelect{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);min-width:0;height:26px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xxs-12);border-radius:6px;flex:1;padding:0 6px}.FV0QMq_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.FV0QMq_gitSectionHeader{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary);text-transform:uppercase;justify-content:space-between;align-items:center;padding:6px 12px 4px;display:flex}.FV0QMq_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.FV0QMq_gitLink:hover:not(:disabled){text-decoration:underline}.FV0QMq_gitLink:disabled{opacity:.4;cursor:default}.FV0QMq_gitRow{min-height:34px;animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);border-radius:8px;align-items:center;gap:6px;margin:0 6px;padding:0 8px;display:flex}.FV0QMq_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_gitRowMain{cursor:pointer;text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:8px;min-width:0;padding:3px 0;display:flex}.FV0QMq_gitBadge{width:20px;height:16px;font:var(--dsw-font-xxxs-strong-11);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_gitName{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.FV0QMq_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.FV0QMq_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.FV0QMq_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitDiffTabHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitDiffTabTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitDiffFile{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:baseline;gap:6px;padding:8px 2px 2px;display:flex}.FV0QMq_gitDiffFile:disabled{cursor:default}.FV0QMq_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.FV0QMq_gitDiffFileChevronExpanded{transform:rotate(90deg)}.FV0QMq_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffFileOld{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:40%;overflow:hidden}.FV0QMq_gitDiffFileTag{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:0 6px}.FV0QMq_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.FV0QMq_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.FV0QMq_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_gitDiffLine{font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;overflow-wrap:anywhere;align-items:stretch;min-width:0;line-height:20px;display:flex}.FV0QMq_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.FV0QMq_gitDiffCode{flex:1;min-width:0;overflow:visible}.FV0QMq_gitDiffCtx{color:var(--dsw-alias-label-primary)}.FV0QMq_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.FV0QMq_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.FV0QMq_gitDiffMeta{padding-left:2px}.FV0QMq_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_gitDiffExpand{width:100%;font:var(--dsw-font-xxs-12);color:var(--dsw-alias-brand-primary);cursor:pointer;text-align:center;background:0 0;border:none;margin:4px 0;display:block}.FV0QMq_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.FV0QMq_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.FV0QMq_gitCommitInput{flex:1;min-width:0}.FV0QMq_gitCommitButton{background:var(--dsw-alias-button-primary-fill);height:26px;color:var(--dsw-alias-label-primary-inverted);font:var(--dsw-font-xxs-strong-12);cursor:pointer;border:none;border-radius:6px;flex:none;padding:0 12px}.FV0QMq_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.FV0QMq_gitCommitButton:disabled{opacity:.45;cursor:default}.FV0QMq_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.FV0QMq_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.FV0QMq_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.FV0QMq_gitLogRef{border:1px solid var(--dsw-alias-border-l2);font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-brand-primary);white-space:nowrap;border-radius:999px;flex:none;padding:0 5px}.FV0QMq_gitLogSubject{text-overflow:ellipsis;white-space:nowrap;min-width:0;font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);flex:1;overflow:hidden}.FV0QMq_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_gitLogMore{border:1px solid var(--dsw-alias-border-l2);width:calc(100% - 24px);font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;margin:4px 12px 8px;padding:6px 0;display:block}.FV0QMq_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_gitLogMore:disabled{opacity:.5;cursor:default}.FV0QMq_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.FV0QMq_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_producedChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:200px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);cursor:pointer;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;display:inline-flex;overflow:hidden}.FV0QMq_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_toggleButton:focus-visible,.FV0QMq_manualButton:focus-visible,.FV0QMq_bottomClose:focus-visible,.FV0QMq_iconButton:focus-visible,.FV0QMq_tab:focus-visible,.FV0QMq_tabClose:focus-visible,.FV0QMq_tabBarPlus:focus-visible,.FV0QMq_paneCard:focus-visible,.FV0QMq_explorerRow:focus-visible,.FV0QMq_explorerRef:focus-visible,.FV0QMq_gitRowMain:focus-visible,.FV0QMq_gitLink:focus-visible,.FV0QMq_gitCommitButton:focus-visible,.FV0QMq_gitLogRow:focus-visible,.FV0QMq_gitLogMore:focus-visible,.FV0QMq_gitDiffFile:focus-visible,.FV0QMq_gitDiffExpand:focus-visible,.FV0QMq_terminalRetry:focus-visible,.FV0QMq_editorModeButton:focus-visible,.FV0QMq_editorDownloadLink:focus-visible,.FV0QMq_editorPptxButton:focus-visible,.FV0QMq_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.FV0QMq_panel,.FV0QMq_panelHidden,.FV0QMq_bottomPanel,.FV0QMq_bottomPanelHidden,.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_tab,.FV0QMq_tabBarPlus,.FV0QMq_paneCard,.FV0QMq_explorerRow,.FV0QMq_gitRow,.FV0QMq_divider,.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:148px}.FV0QMq_tab{min-width:48px;max-width:128px}}.FV0QMq_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.FV0QMq_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.FV0QMq_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_openWithPin{width:20px;height:20px;color:var(--dsw-alias-label-tertiary);cursor:pointer;border-radius:6px;flex:none;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.FV0QMq_editorHtmlBlock{margin:8px 0}.FV0QMq_editorHtmlBlock img,.FV0QMq_editorHtmlBlock video{max-width:100%}.FV0QMq_editorHtmlBlock details{margin:4px 0;padding:4px 0}.FV0QMq_editorHtmlBlock summary{cursor:pointer}.FV0QMq_tocBar{z-index:3;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.FV0QMq_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.FV0QMq_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.FV0QMq_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.FV0QMq_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocItem[data-level=\"2\"]{padding-left:18px}.FV0QMq_tocItem[data-level=\"3\"]{padding-left:28px}.FV0QMq_tocItem[data-level=\"4\"]{padding-left:38px}.FV0QMq_tocItem[data-level=\"5\"]{padding-left:48px}.FV0QMq_tocItem[data-level=\"6\"]{padding-left:58px}.FV0QMq_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes FV0QMq_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.FV0QMq_tocFlash{border-radius:4px;animation:1.2s ease-out FV0QMq_dsh-toc-flash}.FV0QMq_chatcodeGate{z-index:2147483000;isolation:isolate;background-color:var(--dsw-alias-tooltip-bg);background-image:linear-gradient(135deg, var(--dsw-alias-tooltip-bg) 0%, var(--dsw-alias-brand-primary) 48%, var(--dsw-alias-tooltip-bg) 100%);color:var(--dsw-alias-fg-base);pointer-events:auto;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.FV0QMq_chatcodeGateCard{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:linear-gradient(145deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));width:min(460px,100%);box-shadow:var(--dsw-shadow-lv3);text-align:center;border-radius:20px;padding:40px 36px;position:relative}.FV0QMq_chatcodeGateContent{position:relative}.FV0QMq_chatcodeGateCard h1{font:var(--dsw-font-heading-lg);letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(32px,5vw,46px);line-height:1.1}.FV0QMq_chatcodeGateCard p{max-width:29em;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-s-14);margin:0 auto;line-height:1.7}.FV0QMq_chatcodeGateError{border:1px solid color-mix(in srgb, var(--dsw-alias-fg-error) 36%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-fg-error) 8%, transparent);border-radius:10px;padding:9px 11px;position:relative;color:var(--dsw-alias-fg-error)!important;font:var(--dsw-font-xxs-12)!important;margin-top:16px!important;line-height:1.5!important}.FV0QMq_chatcodeGateActions{justify-content:center;gap:10px;margin:28px 0 14px;display:flex;position:relative}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:42px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), background var(--ds-transition-duration-slow) var(--ds-ease-in-out), border-color var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:10px;padding:9px 17px}.FV0QMq_chatcodeGateActions button:first-child{border-color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-state-error-primary);min-width:152px;min-height:46px;color:var(--dsw-alias-label-primary-inverted)}.FV0QMq_chatcodeGateActions button:first-child:hover:not(:disabled){box-shadow:var(--dsw-shadow-lv2);transform:translateY(-2px);border-color:var(--dsw-alias-state-error-primary)!important;background:var(--dsw-alias-state-error-primary)!important;color:var(--dsw-alias-label-primary-inverted)!important}.FV0QMq_chatcodeGateActions button:not(:first-child):hover:not(:disabled),.FV0QMq_chatcodeGateCard a:hover{border-color:var(--dsw-alias-button-primary-hover);background:var(--dsw-alias-button-primary-hover);color:var(--dsw-alias-label-primary-inverted);transform:translateY(-1px)}.FV0QMq_chatcodeGateActions button:disabled{cursor:default;opacity:.55}.FV0QMq_chatcodeGateCard a{align-items:center;text-decoration:none;display:inline-flex;position:relative}.FV0QMq_chatcodeGateActions button:focus-visible,.FV0QMq_chatcodeGateCard a:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:3px}@media (width<=480px){.FV0QMq_chatcodeGate{padding:16px}.FV0QMq_chatcodeGateCard{padding:32px 24px}.FV0QMq_chatcodeGateActions{flex-direction:column;align-items:stretch}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{justify-content:center}}";
|
|
12164
|
+
const tagId$6 = "dsh-external/dsh-better-sidebar/sidebar.module.css";
|
|
12165
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
|
|
12095
12166
|
const tag = document.createElement("style");
|
|
12096
12167
|
tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
|
|
12097
|
-
tag.dataset.pluginCss = tagId$
|
|
12098
|
-
tag.textContent = css$
|
|
12168
|
+
tag.dataset.pluginCss = tagId$6;
|
|
12169
|
+
tag.textContent = css$6;
|
|
12099
12170
|
document.head.appendChild(tag);
|
|
12100
12171
|
}
|
|
12101
12172
|
var sidebar_module_css_default = {
|
|
12102
|
-
"
|
|
12103
|
-
"
|
|
12104
|
-
"
|
|
12105
|
-
"
|
|
12106
|
-
"mermaidBody": "FV0QMq_mermaidBody",
|
|
12107
|
-
"uploadOverlayProgressFill": "FV0QMq_uploadOverlayProgressFill",
|
|
12108
|
-
"gitDiffDel": "FV0QMq_gitDiffDel",
|
|
12109
|
-
"tocItemText": "FV0QMq_tocItemText",
|
|
12110
|
-
"splitRow": "FV0QMq_splitRow",
|
|
12111
|
-
"gitLogHash": "FV0QMq_gitLogHash",
|
|
12112
|
-
"updateList": "FV0QMq_updateList",
|
|
12113
|
-
"mermaidHeader": "FV0QMq_mermaidHeader",
|
|
12114
|
-
"bottomPanel": "FV0QMq_bottomPanel",
|
|
12115
|
-
"iconButton": "FV0QMq_iconButton",
|
|
12116
|
-
"mermaidCode": "FV0QMq_mermaidCode",
|
|
12117
|
-
"gitDiffTab": "FV0QMq_gitDiffTab",
|
|
12118
|
-
"gitRow": "FV0QMq_gitRow",
|
|
12173
|
+
"browserMessage": "FV0QMq_browserMessage",
|
|
12174
|
+
"pinnedSessionsList": "FV0QMq_pinnedSessionsList",
|
|
12175
|
+
"dividerCol": "FV0QMq_dividerCol",
|
|
12176
|
+
"dropCenter": "FV0QMq_dropCenter",
|
|
12119
12177
|
"releaseNotesFooter": "FV0QMq_releaseNotesFooter",
|
|
12120
|
-
"
|
|
12121
|
-
"
|
|
12122
|
-
"
|
|
12123
|
-
"
|
|
12124
|
-
"mermaidModalStage": "FV0QMq_mermaidModalStage",
|
|
12125
|
-
"dropRight": "FV0QMq_dropRight",
|
|
12126
|
-
"editorPathInput": "FV0QMq_editorPathInput",
|
|
12127
|
-
"editorHeader": "FV0QMq_editorHeader",
|
|
12128
|
-
"gitCommitButton": "FV0QMq_gitCommitButton",
|
|
12129
|
-
"pinnedSessionTitle": "FV0QMq_pinnedSessionTitle",
|
|
12130
|
-
"explorerRowDropTarget": "FV0QMq_explorerRowDropTarget",
|
|
12131
|
-
"paneDrop": "FV0QMq_paneDrop",
|
|
12132
|
-
"gitRowMain": "FV0QMq_gitRowMain",
|
|
12133
|
-
"gitLink": "FV0QMq_gitLink",
|
|
12134
|
-
"uploadDropChatCard": "FV0QMq_uploadDropChatCard",
|
|
12135
|
-
"explorerBroken": "FV0QMq_explorerBroken",
|
|
12136
|
-
"selectionPopup": "FV0QMq_selectionPopup",
|
|
12137
|
-
"git": "FV0QMq_git",
|
|
12138
|
-
"sandboxDot": "FV0QMq_sandboxDot",
|
|
12139
|
-
"tabClose": "FV0QMq_tabClose",
|
|
12140
|
-
"updateBody": "FV0QMq_updateBody",
|
|
12141
|
-
"editorSearchHint": "FV0QMq_editorSearchHint",
|
|
12142
|
-
"gitSection": "FV0QMq_gitSection",
|
|
12143
|
-
"gitDiffCode": "FV0QMq_gitDiffCode",
|
|
12144
|
-
"toggleClusterNative": "FV0QMq_toggleClusterNative",
|
|
12145
|
-
"uploadOverlayCancel": "FV0QMq_uploadOverlayCancel",
|
|
12146
|
-
"editor": "FV0QMq_editor",
|
|
12147
|
-
"editorPdfDragShieldActive": "FV0QMq_editorPdfDragShieldActive",
|
|
12148
|
-
"editorTreePanel": "FV0QMq_editorTreePanel",
|
|
12149
|
-
"terminalDepsCommandRow": "FV0QMq_terminalDepsCommandRow",
|
|
12150
|
-
"mermaidWrap": "FV0QMq_mermaidWrap",
|
|
12151
|
-
"updateVersions": "FV0QMq_updateVersions",
|
|
12152
|
-
"toggleCluster": "FV0QMq_toggleCluster",
|
|
12153
|
-
"bottomPanelHidden": "FV0QMq_bottomPanelHidden",
|
|
12154
|
-
"openWithName": "FV0QMq_openWithName",
|
|
12178
|
+
"dropOverlay": "FV0QMq_dropOverlay",
|
|
12179
|
+
"editorBody": "FV0QMq_editorBody",
|
|
12180
|
+
"editorTreeDock": "FV0QMq_editorTreeDock",
|
|
12181
|
+
"uploadOverlay": "FV0QMq_uploadOverlay",
|
|
12155
12182
|
"updateSettingsTitle": "FV0QMq_updateSettingsTitle",
|
|
12156
|
-
"floatClose": "FV0QMq_floatClose",
|
|
12157
|
-
"editorBinaryNotice": "FV0QMq_editorBinaryNotice",
|
|
12158
|
-
"editorTreeResize": "FV0QMq_editorTreeResize",
|
|
12159
|
-
"editorPdfFrameBlocked": "FV0QMq_editorPdfFrameBlocked",
|
|
12160
|
-
"pinnedSessions": "FV0QMq_pinnedSessions",
|
|
12161
|
-
"openWithPinActive": "FV0QMq_openWithPinActive",
|
|
12162
|
-
"explorerDir": "FV0QMq_explorerDir",
|
|
12163
|
-
"editorError": "FV0QMq_editorError",
|
|
12164
|
-
"mermaidInfo": "FV0QMq_mermaidInfo",
|
|
12165
|
-
"chatcodeGateActions": "FV0QMq_chatcodeGateActions",
|
|
12166
|
-
"gitDiff": "FV0QMq_gitDiff",
|
|
12167
|
-
"pinnedSessionsList": "FV0QMq_pinnedSessionsList",
|
|
12168
|
-
"pinnedSessionMenuDivider": "FV0QMq_pinnedSessionMenuDivider",
|
|
12169
|
-
"terminalDepsHint": "FV0QMq_terminalDepsHint",
|
|
12170
|
-
"tab": "FV0QMq_tab",
|
|
12171
12183
|
"gitEmpty": "FV0QMq_gitEmpty",
|
|
12172
|
-
"
|
|
12173
|
-
"
|
|
12174
|
-
"
|
|
12175
|
-
"
|
|
12176
|
-
"
|
|
12184
|
+
"floatClose": "FV0QMq_floatClose",
|
|
12185
|
+
"tabBadge": "FV0QMq_tabBadge",
|
|
12186
|
+
"paneContent": "FV0QMq_paneContent",
|
|
12187
|
+
"explorerCopied": "FV0QMq_explorerCopied",
|
|
12188
|
+
"producedChip": "FV0QMq_producedChip",
|
|
12189
|
+
"editorBanner": "FV0QMq_editorBanner",
|
|
12177
12190
|
"browserStart": "FV0QMq_browserStart",
|
|
12178
|
-
"dropCenter": "FV0QMq_dropCenter",
|
|
12179
|
-
"terminalRepairCommand": "FV0QMq_terminalRepairCommand",
|
|
12180
|
-
"gitDiffLine": "FV0QMq_gitDiffLine",
|
|
12181
|
-
"gitDiffFileChevronExpanded": "FV0QMq_gitDiffFileChevronExpanded",
|
|
12182
12191
|
"gitLogRef": "FV0QMq_gitLogRef",
|
|
12183
|
-
"
|
|
12184
|
-
"
|
|
12185
|
-
"
|
|
12186
|
-
"sandboxStatusText": "FV0QMq_sandboxStatusText",
|
|
12192
|
+
"releaseNotesContent": "FV0QMq_releaseNotesContent",
|
|
12193
|
+
"releaseNotesHeader": "FV0QMq_releaseNotesHeader",
|
|
12194
|
+
"pinnedSessionDot": "FV0QMq_pinnedSessionDot",
|
|
12187
12195
|
"editorImage": "FV0QMq_editorImage",
|
|
12188
|
-
"
|
|
12189
|
-
"
|
|
12190
|
-
"
|
|
12191
|
-
"
|
|
12192
|
-
"
|
|
12193
|
-
"
|
|
12194
|
-
"
|
|
12195
|
-
"browserInput": "FV0QMq_browserInput",
|
|
12196
|
-
"gitSectionHeader": "FV0QMq_gitSectionHeader",
|
|
12197
|
-
"gitLogMeta": "FV0QMq_gitLogMeta",
|
|
12198
|
-
"tabBar": "FV0QMq_tabBar",
|
|
12199
|
-
"manualButton": "FV0QMq_manualButton",
|
|
12200
|
-
"gitDiffFileChevron": "FV0QMq_gitDiffFileChevron",
|
|
12201
|
-
"bottomClose": "FV0QMq_bottomClose",
|
|
12202
|
-
"gitLogRow": "FV0QMq_gitLogRow",
|
|
12203
|
-
"mermaidError": "FV0QMq_mermaidError",
|
|
12204
|
-
"mermaidModal": "FV0QMq_mermaidModal",
|
|
12205
|
-
"gitDiffFilePath": "FV0QMq_gitDiffFilePath",
|
|
12206
|
-
"explorerRowRevealed": "FV0QMq_explorerRowRevealed",
|
|
12207
|
-
"gitRowSelected": "FV0QMq_gitRowSelected",
|
|
12208
|
-
"releaseNotesDialog": "FV0QMq_releaseNotesDialog",
|
|
12209
|
-
"editorModeButton": "FV0QMq_editorModeButton",
|
|
12210
|
-
"terminalDepsNote": "FV0QMq_terminalDepsNote",
|
|
12211
|
-
"gitDiffMeta": "FV0QMq_gitDiffMeta",
|
|
12212
|
-
"uploadOverlayTitle": "FV0QMq_uploadOverlayTitle",
|
|
12213
|
-
"gitDiffFileOld": "FV0QMq_gitDiffFileOld",
|
|
12214
|
-
"gitBadge": "FV0QMq_gitBadge",
|
|
12215
|
-
"updateSettingsText": "FV0QMq_updateSettingsText",
|
|
12216
|
-
"dropDown": "FV0QMq_dropDown",
|
|
12217
|
-
"chatcodeGateCard": "FV0QMq_chatcodeGateCard",
|
|
12218
|
-
"terminalBanner": "FV0QMq_terminalBanner",
|
|
12219
|
-
"editorTitle": "FV0QMq_editorTitle",
|
|
12220
|
-
"boundaryError": "FV0QMq_boundaryError",
|
|
12221
|
-
"uploadDropZonePill": "FV0QMq_uploadDropZonePill",
|
|
12196
|
+
"terminalBannerUrl": "FV0QMq_terminalBannerUrl",
|
|
12197
|
+
"gitDiffHunk": "FV0QMq_gitDiffHunk",
|
|
12198
|
+
"editorPdfFrameBlocked": "FV0QMq_editorPdfFrameBlocked",
|
|
12199
|
+
"explorerRow": "FV0QMq_explorerRow",
|
|
12200
|
+
"tabList": "FV0QMq_tabList",
|
|
12201
|
+
"gitHeader": "FV0QMq_gitHeader",
|
|
12202
|
+
"dropLeft": "FV0QMq_dropLeft",
|
|
12222
12203
|
"floatHeader": "FV0QMq_floatHeader",
|
|
12223
|
-
"
|
|
12224
|
-
"
|
|
12225
|
-
"
|
|
12226
|
-
"
|
|
12227
|
-
"
|
|
12228
|
-
"
|
|
12229
|
-
"
|
|
12230
|
-
"
|
|
12231
|
-
"uploadDropZone": "FV0QMq_uploadDropZone",
|
|
12232
|
-
"editorStatus": "FV0QMq_editorStatus",
|
|
12233
|
-
"mermaidCopy": "FV0QMq_mermaidCopy",
|
|
12234
|
-
"browserBlocked": "FV0QMq_browserBlocked",
|
|
12235
|
-
"gitDiffTabHeader": "FV0QMq_gitDiffTabHeader",
|
|
12236
|
-
"gitConfirmDesc": "FV0QMq_gitConfirmDesc",
|
|
12204
|
+
"bottomPanel": "FV0QMq_bottomPanel",
|
|
12205
|
+
"tabBarPlus": "FV0QMq_tabBarPlus",
|
|
12206
|
+
"editorHeader": "FV0QMq_editorHeader",
|
|
12207
|
+
"gitDiffTabTitle": "FV0QMq_gitDiffTabTitle",
|
|
12208
|
+
"gitSectionHeader": "FV0QMq_gitSectionHeader",
|
|
12209
|
+
"dirtyDot": "FV0QMq_dirtyDot",
|
|
12210
|
+
"updateSettingsRow": "FV0QMq_updateSettingsRow",
|
|
12211
|
+
"orphanedType": "FV0QMq_orphanedType",
|
|
12237
12212
|
"tabBoundaryError": "FV0QMq_tabBoundaryError",
|
|
12238
|
-
"
|
|
12239
|
-
"
|
|
12213
|
+
"editorStatusError": "FV0QMq_editorStatusError",
|
|
12214
|
+
"editorMain": "FV0QMq_editorMain",
|
|
12240
12215
|
"accountMenuDivider": "FV0QMq_accountMenuDivider",
|
|
12241
|
-
"
|
|
12242
|
-
"
|
|
12243
|
-
"
|
|
12244
|
-
"
|
|
12245
|
-
"
|
|
12246
|
-
"
|
|
12247
|
-
"
|
|
12248
|
-
"
|
|
12249
|
-
"
|
|
12250
|
-
"
|
|
12251
|
-
"
|
|
12252
|
-
"
|
|
12253
|
-
"
|
|
12254
|
-
"
|
|
12255
|
-
"
|
|
12256
|
-
"
|
|
12257
|
-
"
|
|
12258
|
-
"
|
|
12259
|
-
"browser": "FV0QMq_browser",
|
|
12260
|
-
"dividerActive": "FV0QMq_dividerActive",
|
|
12261
|
-
"pinnedSessionRow": "FV0QMq_pinnedSessionRow",
|
|
12262
|
-
"gitLogMore": "FV0QMq_gitLogMore",
|
|
12263
|
-
"updateErrorText": "FV0QMq_updateErrorText",
|
|
12264
|
-
"browserFrame": "FV0QMq_browserFrame",
|
|
12265
|
-
"producedChip": "FV0QMq_producedChip",
|
|
12266
|
-
"bottomResizeActive": "FV0QMq_bottomResizeActive",
|
|
12216
|
+
"tab": "FV0QMq_tab",
|
|
12217
|
+
"uploadOverlayCard": "FV0QMq_uploadOverlayCard",
|
|
12218
|
+
"editorPlaceholder": "FV0QMq_editorPlaceholder",
|
|
12219
|
+
"updateList": "FV0QMq_updateList",
|
|
12220
|
+
"editorPdfToolbar": "FV0QMq_editorPdfToolbar",
|
|
12221
|
+
"gitRowSelected": "FV0QMq_gitRowSelected",
|
|
12222
|
+
"gitDiff": "FV0QMq_gitDiff",
|
|
12223
|
+
"uploadOverlayProgress": "FV0QMq_uploadOverlayProgress",
|
|
12224
|
+
"updateSettingsBlock": "FV0QMq_updateSettingsBlock",
|
|
12225
|
+
"gitDiffMetaText": "FV0QMq_gitDiffMetaText",
|
|
12226
|
+
"explorerBody": "FV0QMq_explorerBody",
|
|
12227
|
+
"gitDiffHunkSection": "FV0QMq_gitDiffHunkSection",
|
|
12228
|
+
"sandboxAction": "FV0QMq_sandboxAction",
|
|
12229
|
+
"editorModeActive": "FV0QMq_editorModeActive",
|
|
12230
|
+
"git": "FV0QMq_git",
|
|
12231
|
+
"updateVersions": "FV0QMq_updateVersions",
|
|
12232
|
+
"producedLabel": "FV0QMq_producedLabel",
|
|
12233
|
+
"accountDropdownHeader": "FV0QMq_accountDropdownHeader",
|
|
12267
12234
|
"editorPdf": "FV0QMq_editorPdf",
|
|
12268
|
-
"
|
|
12269
|
-
"
|
|
12235
|
+
"gitConfirmDesc": "FV0QMq_gitConfirmDesc",
|
|
12236
|
+
"updateCommand": "FV0QMq_updateCommand",
|
|
12237
|
+
"updateSettingsDesc": "FV0QMq_updateSettingsDesc",
|
|
12238
|
+
"pinnedSessionRow": "FV0QMq_pinnedSessionRow",
|
|
12239
|
+
"sandboxDot": "FV0QMq_sandboxDot",
|
|
12240
|
+
"gitBadge": "FV0QMq_gitBadge",
|
|
12241
|
+
"tabBar": "FV0QMq_tabBar",
|
|
12270
12242
|
"gitWorktreeRow": "FV0QMq_gitWorktreeRow",
|
|
12271
|
-
"
|
|
12243
|
+
"updateBody": "FV0QMq_updateBody",
|
|
12244
|
+
"gitError": "FV0QMq_gitError",
|
|
12245
|
+
"uploadOverlayStatus": "FV0QMq_uploadOverlayStatus",
|
|
12246
|
+
"editorPdfStage": "FV0QMq_editorPdfStage",
|
|
12247
|
+
"divider": "FV0QMq_divider",
|
|
12248
|
+
"browser": "FV0QMq_browser",
|
|
12249
|
+
"gitDiffHunkHeader": "FV0QMq_gitDiffHunkHeader",
|
|
12250
|
+
"updateSettingsText": "FV0QMq_updateSettingsText",
|
|
12251
|
+
"dividerRow": "FV0QMq_dividerRow",
|
|
12252
|
+
"editorSearchInput": "FV0QMq_editorSearchInput",
|
|
12272
12253
|
"editorImageWrap": "FV0QMq_editorImageWrap",
|
|
12273
|
-
"
|
|
12274
|
-
"
|
|
12254
|
+
"releaseNotesButton": "FV0QMq_releaseNotesButton",
|
|
12255
|
+
"accountTrigger": "FV0QMq_accountTrigger",
|
|
12256
|
+
"gitDiffFileOld": "FV0QMq_gitDiffFileOld",
|
|
12257
|
+
"mermaidMarkdown": "FV0QMq_mermaidMarkdown",
|
|
12258
|
+
"gitPlaceholder": "FV0QMq_gitPlaceholder",
|
|
12259
|
+
"browserBlockedActions": "FV0QMq_browserBlockedActions",
|
|
12260
|
+
"gitDiffTabHeader": "FV0QMq_gitDiffTabHeader",
|
|
12261
|
+
"uploadOverlayProgressFill": "FV0QMq_uploadOverlayProgressFill",
|
|
12262
|
+
"gitRowMain": "FV0QMq_gitRowMain",
|
|
12275
12263
|
"dsh-row-in": "FV0QMq_dsh-row-in",
|
|
12276
|
-
"
|
|
12277
|
-
"
|
|
12278
|
-
"
|
|
12279
|
-
"
|
|
12280
|
-
"
|
|
12281
|
-
"
|
|
12282
|
-
"
|
|
12283
|
-
"
|
|
12284
|
-
"
|
|
12285
|
-
"
|
|
12286
|
-
"
|
|
12287
|
-
"
|
|
12288
|
-
"
|
|
12289
|
-
"
|
|
12290
|
-
"floatDropHint": "FV0QMq_floatDropHint",
|
|
12264
|
+
"terminal": "FV0QMq_terminal",
|
|
12265
|
+
"gitDiffAdd": "FV0QMq_gitDiffAdd",
|
|
12266
|
+
"openWithName": "FV0QMq_openWithName",
|
|
12267
|
+
"editorCm": "FV0QMq_editorCm",
|
|
12268
|
+
"tabActive": "FV0QMq_tabActive",
|
|
12269
|
+
"floatDropHintLabel": "FV0QMq_floatDropHintLabel",
|
|
12270
|
+
"browserInput": "FV0QMq_browserInput",
|
|
12271
|
+
"uploadDropZonePill": "FV0QMq_uploadDropZonePill",
|
|
12272
|
+
"sandboxStatusOn": "FV0QMq_sandboxStatusOn",
|
|
12273
|
+
"explorerBroken": "FV0QMq_explorerBroken",
|
|
12274
|
+
"dropUp": "FV0QMq_dropUp",
|
|
12275
|
+
"editorTreeResize": "FV0QMq_editorTreeResize",
|
|
12276
|
+
"explorerError": "FV0QMq_explorerError",
|
|
12277
|
+
"mermaidBody": "FV0QMq_mermaidBody",
|
|
12291
12278
|
"editorBinary": "FV0QMq_editorBinary",
|
|
12292
|
-
"gitDiffTabTitle": "FV0QMq_gitDiffTabTitle",
|
|
12293
|
-
"paneCard": "FV0QMq_paneCard",
|
|
12294
|
-
"gitDiffHunk": "FV0QMq_gitDiffHunk",
|
|
12295
|
-
"pinnedSessionMore": "FV0QMq_pinnedSessionMore",
|
|
12296
|
-
"accountDropdownHeader": "FV0QMq_accountDropdownHeader",
|
|
12297
|
-
"tocFlash": "FV0QMq_tocFlash",
|
|
12298
|
-
"gitDiffNum": "FV0QMq_gitDiffNum",
|
|
12299
12279
|
"gitDiffFileTag": "FV0QMq_gitDiffFileTag",
|
|
12300
|
-
"
|
|
12301
|
-
"
|
|
12302
|
-
"
|
|
12303
|
-
"
|
|
12304
|
-
"
|
|
12305
|
-
"
|
|
12306
|
-
"
|
|
12280
|
+
"gitLogRow": "FV0QMq_gitLogRow",
|
|
12281
|
+
"terminalDepsActions": "FV0QMq_terminalDepsActions",
|
|
12282
|
+
"mermaidCopy": "FV0QMq_mermaidCopy",
|
|
12283
|
+
"accountAvatar": "FV0QMq_accountAvatar",
|
|
12284
|
+
"releaseNotesOverlay": "FV0QMq_releaseNotesOverlay",
|
|
12285
|
+
"uploadDropHero": "FV0QMq_uploadDropHero",
|
|
12286
|
+
"gitDiffExpand": "FV0QMq_gitDiffExpand",
|
|
12307
12287
|
"editorDocxZoomRange": "FV0QMq_editorDocxZoomRange",
|
|
12308
|
-
"
|
|
12309
|
-
"
|
|
12288
|
+
"mermaidModalButton": "FV0QMq_mermaidModalButton",
|
|
12289
|
+
"tocFlash": "FV0QMq_tocFlash",
|
|
12290
|
+
"editorPptxButton": "FV0QMq_editorPptxButton",
|
|
12291
|
+
"terminalDepsTitle": "FV0QMq_terminalDepsTitle",
|
|
12292
|
+
"pinnedSessionMore": "FV0QMq_pinnedSessionMore",
|
|
12310
12293
|
"explorer": "FV0QMq_explorer",
|
|
12311
|
-
"
|
|
12312
|
-
"
|
|
12313
|
-
"
|
|
12314
|
-
"
|
|
12315
|
-
"
|
|
12294
|
+
"toggleCluster": "FV0QMq_toggleCluster",
|
|
12295
|
+
"explorerSymlink": "FV0QMq_explorerSymlink",
|
|
12296
|
+
"editorPdfFrame": "FV0QMq_editorPdfFrame",
|
|
12297
|
+
"gitDiffCode": "FV0QMq_gitDiffCode",
|
|
12298
|
+
"openWithChevron": "FV0QMq_openWithChevron",
|
|
12299
|
+
"editorMd": "FV0QMq_editorMd",
|
|
12300
|
+
"split": "FV0QMq_split",
|
|
12301
|
+
"mermaidCode": "FV0QMq_mermaidCode",
|
|
12302
|
+
"chatcodeGateCard": "FV0QMq_chatcodeGateCard",
|
|
12303
|
+
"chatcodeGate": "FV0QMq_chatcodeGate",
|
|
12304
|
+
"mermaidInfo": "FV0QMq_mermaidInfo",
|
|
12305
|
+
"updateError": "FV0QMq_updateError",
|
|
12306
|
+
"bottomResizeActive": "FV0QMq_bottomResizeActive",
|
|
12307
|
+
"gitCommit": "FV0QMq_gitCommit",
|
|
12308
|
+
"tocBar": "FV0QMq_tocBar",
|
|
12309
|
+
"chatcodeGateActions": "FV0QMq_chatcodeGateActions",
|
|
12310
|
+
"floatWindow": "FV0QMq_floatWindow",
|
|
12311
|
+
"releaseNotesDialog": "FV0QMq_releaseNotesDialog",
|
|
12312
|
+
"terminalWrap": "FV0QMq_terminalWrap",
|
|
12313
|
+
"uploadDropZoneText": "FV0QMq_uploadDropZoneText",
|
|
12314
|
+
"panelResize": "FV0QMq_panelResize",
|
|
12315
|
+
"pinnedSessionsHeading": "FV0QMq_pinnedSessionsHeading",
|
|
12316
|
+
"paneEmptyCards": "FV0QMq_paneEmptyCards",
|
|
12317
|
+
"accountLogoutConfirm": "FV0QMq_accountLogoutConfirm",
|
|
12318
|
+
"gitName": "FV0QMq_gitName",
|
|
12319
|
+
"gitLogSubject": "FV0QMq_gitLogSubject",
|
|
12320
|
+
"paneDrop": "FV0QMq_paneDrop",
|
|
12321
|
+
"explorerName": "FV0QMq_explorerName",
|
|
12322
|
+
"editorPdfDragShield": "FV0QMq_editorPdfDragShield",
|
|
12323
|
+
"uploadDropZone": "FV0QMq_uploadDropZone",
|
|
12324
|
+
"tabClose": "FV0QMq_tabClose",
|
|
12316
12325
|
"editorDownloadLink": "FV0QMq_editorDownloadLink",
|
|
12317
|
-
"
|
|
12318
|
-
"
|
|
12319
|
-
"
|
|
12320
|
-
"
|
|
12321
|
-
"
|
|
12322
|
-
"
|
|
12323
|
-
"
|
|
12324
|
-
"
|
|
12325
|
-
"
|
|
12326
|
+
"sandboxStatus": "FV0QMq_sandboxStatus",
|
|
12327
|
+
"explorerHidden": "FV0QMq_explorerHidden",
|
|
12328
|
+
"tocPanel": "FV0QMq_tocPanel",
|
|
12329
|
+
"editorPathInput": "FV0QMq_editorPathInput",
|
|
12330
|
+
"mermaidModalStage": "FV0QMq_mermaidModalStage",
|
|
12331
|
+
"pinnedSessionMenuDivider": "FV0QMq_pinnedSessionMenuDivider",
|
|
12332
|
+
"releaseNotesIconButton": "FV0QMq_releaseNotesIconButton",
|
|
12333
|
+
"editorTreeToggleActive": "FV0QMq_editorTreeToggleActive",
|
|
12334
|
+
"openWithLabel": "FV0QMq_openWithLabel",
|
|
12335
|
+
"paneTab": "FV0QMq_paneTab",
|
|
12336
|
+
"explorerRoot": "FV0QMq_explorerRoot",
|
|
12337
|
+
"panelBody": "FV0QMq_panelBody",
|
|
12338
|
+
"bottomResize": "FV0QMq_bottomResize",
|
|
12339
|
+
"browserBlockedTitle": "FV0QMq_browserBlockedTitle",
|
|
12340
|
+
"editorTitle": "FV0QMq_editorTitle",
|
|
12341
|
+
"gitDiffLine": "FV0QMq_gitDiffLine",
|
|
12342
|
+
"gitLogLine1": "FV0QMq_gitLogLine1",
|
|
12343
|
+
"gitDiffTab": "FV0QMq_gitDiffTab",
|
|
12344
|
+
"editorSearchHint": "FV0QMq_editorSearchHint",
|
|
12345
|
+
"floatContent": "FV0QMq_floatContent",
|
|
12346
|
+
"editorTreeSearch": "FV0QMq_editorTreeSearch",
|
|
12347
|
+
"pinnedSessionOpen": "FV0QMq_pinnedSessionOpen",
|
|
12348
|
+
"browserBlockedDesc": "FV0QMq_browserBlockedDesc",
|
|
12349
|
+
"panel": "FV0QMq_panel",
|
|
12350
|
+
"bottomClose": "FV0QMq_bottomClose",
|
|
12351
|
+
"openWithPin": "FV0QMq_openWithPin",
|
|
12352
|
+
"mermaidWrap": "FV0QMq_mermaidWrap",
|
|
12353
|
+
"gitWorktreeLabel": "FV0QMq_gitWorktreeLabel",
|
|
12354
|
+
"updateErrorText": "FV0QMq_updateErrorText",
|
|
12355
|
+
"chatcodeGateError": "FV0QMq_chatcodeGateError",
|
|
12356
|
+
"pinnedTab": "FV0QMq_pinnedTab",
|
|
12357
|
+
"uploadOverlayCancel": "FV0QMq_uploadOverlayCancel",
|
|
12358
|
+
"bottomPanelHidden": "FV0QMq_bottomPanelHidden",
|
|
12359
|
+
"manualButton": "FV0QMq_manualButton",
|
|
12360
|
+
"toggleClusterNative": "FV0QMq_toggleClusterNative",
|
|
12361
|
+
"browserBlocked": "FV0QMq_browserBlocked",
|
|
12362
|
+
"explorerRowRevealed": "FV0QMq_explorerRowRevealed",
|
|
12363
|
+
"tabBarDrop": "FV0QMq_tabBarDrop",
|
|
12326
12364
|
"tabTitle": "FV0QMq_tabTitle",
|
|
12327
|
-
"
|
|
12328
|
-
"
|
|
12329
|
-
"
|
|
12330
|
-
"
|
|
12331
|
-
"
|
|
12332
|
-
"
|
|
12365
|
+
"explorerRowDropTarget": "FV0QMq_explorerRowDropTarget",
|
|
12366
|
+
"accountPresence": "FV0QMq_accountPresence",
|
|
12367
|
+
"editorHtml": "FV0QMq_editorHtml",
|
|
12368
|
+
"accountLogoutDescription": "FV0QMq_accountLogoutDescription",
|
|
12369
|
+
"terminalDepsNote": "FV0QMq_terminalDepsNote",
|
|
12370
|
+
"gitDiffFileChevron": "FV0QMq_gitDiffFileChevron",
|
|
12371
|
+
"gitDiffFilePath": "FV0QMq_gitDiffFilePath",
|
|
12372
|
+
"gitCommitButton": "FV0QMq_gitCommitButton",
|
|
12373
|
+
"gitLogLine2": "FV0QMq_gitLogLine2",
|
|
12374
|
+
"mermaidHeader": "FV0QMq_mermaidHeader",
|
|
12375
|
+
"browserFrame": "FV0QMq_browserFrame",
|
|
12376
|
+
"accountName": "FV0QMq_accountName",
|
|
12333
12377
|
"explorerRef": "FV0QMq_explorerRef",
|
|
12334
|
-
"
|
|
12335
|
-
"
|
|
12336
|
-
"
|
|
12337
|
-
"
|
|
12338
|
-
"
|
|
12339
|
-
"
|
|
12340
|
-
"
|
|
12341
|
-
"
|
|
12342
|
-
"
|
|
12343
|
-
"
|
|
12344
|
-
"
|
|
12345
|
-
"
|
|
12378
|
+
"uploadDropChatCard": "FV0QMq_uploadDropChatCard",
|
|
12379
|
+
"gitLogHash": "FV0QMq_gitLogHash",
|
|
12380
|
+
"gitRow": "FV0QMq_gitRow",
|
|
12381
|
+
"dropRight": "FV0QMq_dropRight",
|
|
12382
|
+
"gitDiffFileChevronExpanded": "FV0QMq_gitDiffFileChevronExpanded",
|
|
12383
|
+
"editorStatus": "FV0QMq_editorStatus",
|
|
12384
|
+
"selectionPopup": "FV0QMq_selectionPopup",
|
|
12385
|
+
"floatDropHint": "FV0QMq_floatDropHint",
|
|
12386
|
+
"browserBar": "FV0QMq_browserBar",
|
|
12387
|
+
"updateInline": "FV0QMq_updateInline",
|
|
12388
|
+
"terminalRetry": "FV0QMq_terminalRetry",
|
|
12389
|
+
"explorerHeader": "FV0QMq_explorerHeader",
|
|
12390
|
+
"gitLink": "FV0QMq_gitLink",
|
|
12391
|
+
"editorHtmlBlock": "FV0QMq_editorHtmlBlock",
|
|
12392
|
+
"tocItemText": "FV0QMq_tocItemText",
|
|
12346
12393
|
"explorerEmpty": "FV0QMq_explorerEmpty",
|
|
12347
|
-
"
|
|
12348
|
-
"
|
|
12349
|
-
"
|
|
12350
|
-
"
|
|
12351
|
-
"
|
|
12352
|
-
"
|
|
12353
|
-
"
|
|
12354
|
-
"
|
|
12355
|
-
"
|
|
12356
|
-
"
|
|
12394
|
+
"sandboxStatusText": "FV0QMq_sandboxStatusText",
|
|
12395
|
+
"floatTitle": "FV0QMq_floatTitle",
|
|
12396
|
+
"pinnedSessionTitle": "FV0QMq_pinnedSessionTitle",
|
|
12397
|
+
"updateFooter": "FV0QMq_updateFooter",
|
|
12398
|
+
"toggleButton": "FV0QMq_toggleButton",
|
|
12399
|
+
"splitChild": "FV0QMq_splitChild",
|
|
12400
|
+
"gitDiffCtx": "FV0QMq_gitDiffCtx",
|
|
12401
|
+
"tocItemLevel": "FV0QMq_tocItemLevel",
|
|
12402
|
+
"floatResize": "FV0QMq_floatResize",
|
|
12403
|
+
"dsh-toc-flash": "FV0QMq_dsh-toc-flash",
|
|
12404
|
+
"editorCmHidden": "FV0QMq_editorCmHidden",
|
|
12405
|
+
"gitLogMeta": "FV0QMq_gitLogMeta",
|
|
12406
|
+
"accountLogoutActions": "FV0QMq_accountLogoutActions",
|
|
12407
|
+
"paneTabHidden": "FV0QMq_paneTabHidden",
|
|
12408
|
+
"editorError": "FV0QMq_editorError",
|
|
12409
|
+
"pinnedSessions": "FV0QMq_pinnedSessions",
|
|
12410
|
+
"explorerDir": "FV0QMq_explorerDir",
|
|
12411
|
+
"editorPdfDragShieldActive": "FV0QMq_editorPdfDragShieldActive",
|
|
12412
|
+
"gitDiffFile": "FV0QMq_gitDiffFile",
|
|
12413
|
+
"editorModeButton": "FV0QMq_editorModeButton",
|
|
12414
|
+
"gitSection": "FV0QMq_gitSection",
|
|
12415
|
+
"paneCard": "FV0QMq_paneCard",
|
|
12416
|
+
"floatWindowDragging": "FV0QMq_floatWindowDragging",
|
|
12417
|
+
"mermaidError": "FV0QMq_mermaidError",
|
|
12418
|
+
"editorSearchResult": "FV0QMq_editorSearchResult",
|
|
12419
|
+
"boundaryError": "FV0QMq_boundaryError",
|
|
12420
|
+
"gitCommitInput": "FV0QMq_gitCommitInput",
|
|
12421
|
+
"editorModeToggle": "FV0QMq_editorModeToggle",
|
|
12422
|
+
"accountLogoutTitle": "FV0QMq_accountLogoutTitle",
|
|
12423
|
+
"terminalDepsHint": "FV0QMq_terminalDepsHint",
|
|
12424
|
+
"terminalDepsBanner": "FV0QMq_terminalDepsBanner",
|
|
12425
|
+
"chatcodeGateContent": "FV0QMq_chatcodeGateContent",
|
|
12426
|
+
"panelResizeActive": "FV0QMq_panelResizeActive",
|
|
12427
|
+
"editorBinaryNotice": "FV0QMq_editorBinaryNotice",
|
|
12428
|
+
"dropDown": "FV0QMq_dropDown",
|
|
12357
12429
|
"splitCol": "FV0QMq_splitCol",
|
|
12430
|
+
"browserBlockedButton": "FV0QMq_browserBlockedButton",
|
|
12431
|
+
"sandboxStatusOff": "FV0QMq_sandboxStatusOff",
|
|
12432
|
+
"mermaidModalHint": "FV0QMq_mermaidModalHint",
|
|
12433
|
+
"terminalBanner": "FV0QMq_terminalBanner",
|
|
12434
|
+
"gitDiffMeta": "FV0QMq_gitDiffMeta",
|
|
12435
|
+
"editorTreePanelFull": "FV0QMq_editorTreePanelFull",
|
|
12436
|
+
"openWithPinActive": "FV0QMq_openWithPinActive",
|
|
12437
|
+
"dividerActive": "FV0QMq_dividerActive",
|
|
12438
|
+
"editorTreePanel": "FV0QMq_editorTreePanel",
|
|
12439
|
+
"gitLogMore": "FV0QMq_gitLogMore",
|
|
12440
|
+
"iconButton": "FV0QMq_iconButton",
|
|
12441
|
+
"updateOk": "FV0QMq_updateOk",
|
|
12442
|
+
"uploadOverlayTitle": "FV0QMq_uploadOverlayTitle",
|
|
12443
|
+
"pane": "FV0QMq_pane",
|
|
12444
|
+
"workbench": "FV0QMq_workbench",
|
|
12445
|
+
"mermaidModal": "FV0QMq_mermaidModal",
|
|
12446
|
+
"gitDiffNum": "FV0QMq_gitDiffNum",
|
|
12358
12447
|
"pinnedSessionMenu": "FV0QMq_pinnedSessionMenu",
|
|
12359
|
-
"
|
|
12360
|
-
"panelBody": "FV0QMq_panelBody",
|
|
12361
|
-
"mermaidModalButton": "FV0QMq_mermaidModalButton",
|
|
12362
|
-
"mermaidMarkdown": "FV0QMq_mermaidMarkdown",
|
|
12363
|
-
"gitDiffAdd": "FV0QMq_gitDiffAdd",
|
|
12364
|
-
"panelResizeActive": "FV0QMq_panelResizeActive",
|
|
12365
|
-
"openWithLabel": "FV0QMq_openWithLabel",
|
|
12366
|
-
"paneContent": "FV0QMq_paneContent",
|
|
12367
|
-
"gitCommit": "FV0QMq_gitCommit",
|
|
12368
|
-
"browserBlockedTitle": "FV0QMq_browserBlockedTitle",
|
|
12369
|
-
"tabList": "FV0QMq_tabList",
|
|
12370
|
-
"editorPdfToolbar": "FV0QMq_editorPdfToolbar",
|
|
12371
|
-
"uploadOverlayProgress": "FV0QMq_uploadOverlayProgress",
|
|
12372
|
-
"sandboxStatus": "FV0QMq_sandboxStatus",
|
|
12373
|
-
"updateCommand": "FV0QMq_updateCommand",
|
|
12374
|
-
"releaseNotesContent": "FV0QMq_releaseNotesContent",
|
|
12375
|
-
"updateInline": "FV0QMq_updateInline",
|
|
12376
|
-
"updateSettingsRow": "FV0QMq_updateSettingsRow",
|
|
12377
|
-
"orphanedType": "FV0QMq_orphanedType",
|
|
12378
|
-
"browserMessage": "FV0QMq_browserMessage",
|
|
12448
|
+
"accountMenu": "FV0QMq_accountMenu",
|
|
12379
12449
|
"cornerHandle": "FV0QMq_cornerHandle",
|
|
12380
|
-
"
|
|
12381
|
-
"
|
|
12382
|
-
"
|
|
12383
|
-
"
|
|
12384
|
-
"
|
|
12385
|
-
"
|
|
12386
|
-
"
|
|
12387
|
-
"
|
|
12388
|
-
"
|
|
12389
|
-
"
|
|
12390
|
-
"
|
|
12450
|
+
"uploadDropChatHint": "FV0QMq_uploadDropChatHint",
|
|
12451
|
+
"editor": "FV0QMq_editor",
|
|
12452
|
+
"mermaidModalToolbar": "FV0QMq_mermaidModalToolbar",
|
|
12453
|
+
"terminalDepsCommandRow": "FV0QMq_terminalDepsCommandRow",
|
|
12454
|
+
"gitDiffDel": "FV0QMq_gitDiffDel",
|
|
12455
|
+
"producedMore": "FV0QMq_producedMore",
|
|
12456
|
+
"gitBranchSelect": "FV0QMq_gitBranchSelect",
|
|
12457
|
+
"accountDropdown": "FV0QMq_accountDropdown",
|
|
12458
|
+
"fenceError": "FV0QMq_fenceError",
|
|
12459
|
+
"terminalRepairCommand": "FV0QMq_terminalRepairCommand",
|
|
12460
|
+
"producedRow": "FV0QMq_producedRow",
|
|
12461
|
+
"tocItem": "FV0QMq_tocItem",
|
|
12462
|
+
"tocButton": "FV0QMq_tocButton",
|
|
12463
|
+
"accountItem": "FV0QMq_accountItem",
|
|
12464
|
+
"accountLogoutDialog": "FV0QMq_accountLogoutDialog",
|
|
12465
|
+
"splitRow": "FV0QMq_splitRow",
|
|
12466
|
+
"panelHidden": "FV0QMq_panelHidden"
|
|
12391
12467
|
};
|
|
12392
12468
|
//#endregion
|
|
12393
12469
|
//#region src/client/intercept.tsx
|
|
@@ -12649,6 +12725,21 @@ window.__ModuleLoader__.load({
|
|
|
12649
12725
|
}
|
|
12650
12726
|
/** The sidebar API surface (session scope threaded through every call). */
|
|
12651
12727
|
const api = {
|
|
12728
|
+
pluginMarketContext: (scope, signal) => call("plugins.context", scopePayload(scope, {}), signal),
|
|
12729
|
+
pluginMarketplaces: (signal) => call("plugins.marketplaces", {}, signal),
|
|
12730
|
+
pluginCatalog: (marketplaceId, signal) => call("plugins.catalog", {
|
|
12731
|
+
marketplaceId,
|
|
12732
|
+
includeMetadata: true
|
|
12733
|
+
}, signal),
|
|
12734
|
+
pluginsInstalled: (scope, signal) => call("plugins.installed", scopePayload(scope, {}), signal),
|
|
12735
|
+
pluginInstall: (scope, pluginId, installScope) => call("plugins.install", scopePayload(scope, {
|
|
12736
|
+
pluginId,
|
|
12737
|
+
scope: installScope
|
|
12738
|
+
})),
|
|
12739
|
+
pluginUninstall: (scope, pluginId, installScope) => call("plugins.uninstall", scopePayload(scope, {
|
|
12740
|
+
pluginId,
|
|
12741
|
+
scope: installScope
|
|
12742
|
+
})),
|
|
12652
12743
|
chatcodeStatus: (signal) => call("chatcode.status", {}, signal),
|
|
12653
12744
|
chatcodeStart: () => call("chatcode.start", {}),
|
|
12654
12745
|
chatcodeCancel: (sessionId) => call("chatcode.cancel", { sessionId }),
|
|
@@ -14949,82 +15040,82 @@ window.__ModuleLoader__.load({
|
|
|
14949
15040
|
}
|
|
14950
15041
|
//#endregion
|
|
14951
15042
|
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/SideCardSection.module.css.mjs
|
|
14952
|
-
const css$4 = ".N4aF0W_section{flex-direction:column;gap:16px;width:100%;max-width:760px;display:flex}.N4aF0W_intro{color:var(--dsw-alias-label-tertiary);margin:0;padding:0 2px;font-size:13px;line-height:20px}.N4aF0W_group{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:16px;flex-direction:column;flex:none;gap:8px;padding:20px;display:flex}.N4aF0W_groupHeading{color:var(--dsw-alias-label-primary);align-items:baseline;gap:7px;padding:0 2px 6px;font-size:13px;font-weight:600;line-height:20px;display:flex}.N4aF0W_count{background:var(--dsw-alias-accent-soft,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px}.N4aF0W_grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.N4aF0W_card{border:1px solid var(--dsw-alias-border-l2);min-height:106px;font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:12px;flex-direction:column;transition:background .12s,border-color .12s;display:flex;position:relative;overflow:hidden}.N4aF0W_card:not(.N4aF0W_cardOn):hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_cardOn{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 45%, transparent);background:var(--dsw-alias-interactive-bg-active)}.N4aF0W_cardMain{border-radius:inherit;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:6px;padding:12px;display:flex}.N4aF0W_cardMain:focus-visible,.N4aF0W_cardSettings:focus-visible,.N4aF0W_rowGear:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardTop{align-items:center;gap:8px;min-width:0;min-height:28px;display:flex}.N4aF0W_cardIconChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.N4aF0W_cardOn .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);background:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 12%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardTitle{min-width:0;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.N4aF0W_cardOn .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_cardSwitch{flex:none;align-items:center;display:inline-flex}.N4aF0W_cardSwitchTrack{box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;align-items:center;width:30px;height:16px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_cardSwitchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:10px;height:10px;transition:transform .15s,background .15s;display:block}.N4aF0W_cardOn .N4aF0W_cardSwitchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardOn .N4aF0W_cardSwitchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(14px)}.N4aF0W_cardDesc{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;line-height:16px;overflow:hidden}.N4aF0W_addCard{border-style:dashed;border-color:var(--dsw-alias-border-l2);text-align:left;align-items:flex-start;padding:12px}.N4aF0W_addCard:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_addCard:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardOn .N4aF0W_cardDesc{color:var(--dsw-alias-label-secondary)}.N4aF0W_cardSettings{border:0;border-top:1px solid var(--dsw-alias-border-l1);width:100%;color:var(--dsw-alias-label-secondary);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:6px;padding:6px 12px;font-size:11px;font-weight:500;line-height:16px;transition:background .12s,color .12s;display:flex}.N4aF0W_cardOn .N4aF0W_cardSettings{border-top-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 18%, transparent)}.N4aF0W_cardSettings:hover{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_rowGear{border:1px solid var(--dsw-alias-border-l2);width:22px;height:22px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.N4aF0W_rowGear:hover{border-color:var(--dsw-alias-interactive-bg-hover-accent);background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_row{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding:12px 2px;display:flex}.N4aF0W_row:last-child{border-bottom:none}.N4aF0W_rowText{flex-direction:column;gap:4px;min-width:0;display:flex}.N4aF0W_title{color:var(--dsw-alias-label-primary);font-size:14px;line-height:22px}.N4aF0W_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.N4aF0W_switch{cursor:pointer;flex:none;display:inline-flex;position:relative}.N4aF0W_switchInput{opacity:0;width:1px;height:1px;margin:0;position:absolute}.N4aF0W_switchTrack{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;align-items:center;width:36px;height:20px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_switchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:14px;height:14px;transition:transform .15s,background .15s;display:block}.N4aF0W_switch:hover .N4aF0W_switchTrack{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack .N4aF0W_switchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(16px)}.N4aF0W_switchInput:focus-visible+.N4aF0W_switchTrack{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_control{flex:none;align-items:center;gap:6px;display:flex}.N4aF0W_percentInput{width:76px}.N4aF0W_typedInput{width:200px}.N4aF0W_typedInputNumber{width:76px}.N4aF0W_selectAnchor{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);max-width:220px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:4px 8px;font-size:13px;line-height:20px;display:flex}.N4aF0W_selectAnchor:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_selectAnchorIcon{flex:none;display:inline-flex}.N4aF0W_selectAnchorText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.N4aF0W_selectOption{align-items:center;gap:10px;min-width:200px;display:flex}.N4aF0W_selectOptionIcon{color:var(--dsw-alias-label-secondary);flex:none;display:inline-flex}.N4aF0W_selectOptionText{flex-direction:column;min-width:0;display:flex}.N4aF0W_suffix{color:var(--dsw-alias-label-secondary);font-size:14px;line-height:22px}.N4aF0W_cssTextArea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-height:120px;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,monospace);resize:vertical;border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.6}.N4aF0W_cssTextArea:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_popupDialog.N4aF0W_popupDialog{width:min(460px,100%)}.N4aF0W_popupRows{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-scrollbar-bg-l2,transparent) transparent;flex-direction:column;gap:8px;width:100%;max-height:min(52vh,440px);padding-right:4px;display:flex;overflow:hidden auto}.N4aF0W_popupRows::-webkit-scrollbar{width:6px}.N4aF0W_popupRows::-webkit-scrollbar-thumb{background:var(--dsw-alias-scrollbar-bg-l2,var(--dsw-alias-border-l2));border-radius:3px}.N4aF0W_popupRows::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-scrollbar-hover-l2,var(--dsw-alias-label-dimmed))}.N4aF0W_popupRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:12px 14px;transition:border-color .16s,background .16s;display:flex}.N4aF0W_popupRow:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_done{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.N4aF0W_done:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.N4aF0W_error{color:var(--dsw-alias-state-error-primary);padding:10px 0 2px;font-size:12px;line-height:17px}.N4aF0W_pluginModal.N4aF0W_pluginModal{width:min(560px,100%)}.N4aF0W_pluginList{flex-direction:column;gap:12px;width:100%;display:flex}.N4aF0W_pluginTopicBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:8px;padding:6px 12px;font-size:12px;line-height:18px}.N4aF0W_pluginTopicBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginTopicBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEmpty{color:var(--dsw-alias-label-tertiary);padding:20px 2px;font-size:12px;line-height:18px}.N4aF0W_pluginEntry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;gap:4px;padding:12px;display:flex}.N4aF0W_pluginEntryHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.N4aF0W_pluginEntryActions{flex:none;align-items:center;gap:6px;display:inline-flex}.N4aF0W_pluginJumpBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginJumpBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginJumpBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginName{appearance:none;min-width:0;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600;line-height:20px;text-decoration:none;overflow:hidden}.N4aF0W_pluginName:hover{color:var(--dsw-alias-button-primary-fill);text-decoration:underline}.N4aF0W_pluginDesc{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.N4aF0W_pluginInstall{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);white-space:nowrap;border-radius:8px;padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:16px;display:block;overflow-x:auto}.N4aF0W_pluginCopyBtn{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginCopyBtn:hover{background:var(--dsw-alias-button-primary-hover)}.N4aF0W_pluginCopyBtn:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){.N4aF0W_card,.N4aF0W_cardSettings,.N4aF0W_cardSwitchTrack,.N4aF0W_cardSwitchThumb,.N4aF0W_rowGear,.N4aF0W_popupRow,.N4aF0W_switchTrack,.N4aF0W_switchThumb{transition:none}}.N4aF0W_pluginSearch{box-sizing:border-box;appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:8px;padding:6px 10px;font-size:12px;line-height:18px}.N4aF0W_pluginSearch::placeholder{color:var(--dsw-alias-label-tertiary)}.N4aF0W_pluginSearch:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEntries{flex-direction:column;gap:10px;max-height:46vh;padding-right:2px;display:flex;overflow:hidden auto}.N4aF0W_pluginGroup{flex-direction:column;gap:8px;display:flex}.N4aF0W_pluginGroupHeading{color:var(--dsw-alias-label-secondary);padding:2px 2px 0;font-size:12px;font-weight:600;line-height:18px}.N4aF0W_openWithEditorRow{grid-template-columns:1fr 1.5fr auto auto;align-items:center;gap:8px;min-width:0;display:grid}.N4aF0W_openWithEditorInput,.N4aF0W_openWithEditorTemplate{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:5px 8px;font-size:13px;line-height:20px}.N4aF0W_openWithEditorInput:focus-visible,.N4aF0W_openWithEditorTemplate:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.N4aF0W_openWithFamily{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.N4aF0W_openWithRemove{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.N4aF0W_openWithRemove:hover{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2)}.N4aF0W_openWithHint{color:var(--dsw-alias-state-error-primary);padding:0 2px;font-size:12px;line-height:17px}";
|
|
14953
|
-
const tagId$
|
|
14954
|
-
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$
|
|
15043
|
+
const css$5 = ".N4aF0W_section{flex-direction:column;gap:16px;width:100%;max-width:760px;display:flex}.N4aF0W_intro{color:var(--dsw-alias-label-tertiary);margin:0;padding:0 2px;font-size:13px;line-height:20px}.N4aF0W_group{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:16px;flex-direction:column;flex:none;gap:8px;padding:20px;display:flex}.N4aF0W_groupHeading{color:var(--dsw-alias-label-primary);align-items:baseline;gap:7px;padding:0 2px 6px;font-size:13px;font-weight:600;line-height:20px;display:flex}.N4aF0W_count{background:var(--dsw-alias-accent-soft,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:16px}.N4aF0W_grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;display:grid}.N4aF0W_card{border:1px solid var(--dsw-alias-border-l2);min-height:106px;font:inherit;color:inherit;cursor:pointer;background:0 0;border-radius:12px;flex-direction:column;transition:background .12s,border-color .12s;display:flex;position:relative;overflow:hidden}.N4aF0W_card:not(.N4aF0W_cardOn):hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_cardOn{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 45%, transparent);background:var(--dsw-alias-interactive-bg-active)}.N4aF0W_cardMain{border-radius:inherit;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;gap:6px;padding:12px;display:flex}.N4aF0W_cardMain:focus-visible,.N4aF0W_cardSettings:focus-visible,.N4aF0W_rowGear:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardTop{align-items:center;gap:8px;min-width:0;min-height:28px;display:flex}.N4aF0W_cardIconChip{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);border-radius:8px;flex:none;justify-content:center;align-items:center;display:inline-flex}.N4aF0W_cardOn .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);background:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 12%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardTitle{min-width:0;color:var(--dsw-alias-label-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:13px;font-weight:600;line-height:20px;overflow:hidden}.N4aF0W_cardOn .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_cardSwitch{flex:none;align-items:center;display:inline-flex}.N4aF0W_cardSwitchTrack{box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;align-items:center;width:30px;height:16px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_cardSwitchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:10px;height:10px;transition:transform .15s,background .15s;display:block}.N4aF0W_cardOn .N4aF0W_cardSwitchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_cardOn .N4aF0W_cardSwitchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(14px)}.N4aF0W_cardDesc{color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;line-height:16px;overflow:hidden}.N4aF0W_addCard{border-style:dashed;border-color:var(--dsw-alias-border-l2);text-align:left;align-items:flex-start;padding:12px}.N4aF0W_addCard:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardTitle{color:var(--dsw-alias-label-primary)}.N4aF0W_addCard:hover .N4aF0W_cardIconChip{border-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 35%, transparent);color:var(--dsw-alias-button-primary-fill)}.N4aF0W_addCard:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:2px}.N4aF0W_cardOn .N4aF0W_cardDesc{color:var(--dsw-alias-label-secondary)}.N4aF0W_cardSettings{border:0;border-top:1px solid var(--dsw-alias-border-l1);width:100%;color:var(--dsw-alias-label-secondary);font:inherit;text-align:left;cursor:pointer;background:0 0;align-items:center;gap:6px;padding:6px 12px;font-size:11px;font-weight:500;line-height:16px;transition:background .12s,color .12s;display:flex}.N4aF0W_cardOn .N4aF0W_cardSettings{border-top-color:color-mix(in srgb, var(--dsw-alias-button-primary-fill) 18%, transparent)}.N4aF0W_cardSettings:hover{background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_rowGear{border:1px solid var(--dsw-alias-border-l2);width:22px;height:22px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:6px;flex:none;justify-content:center;align-items:center;padding:0;transition:background .12s,border-color .12s,color .12s;display:inline-flex}.N4aF0W_rowGear:hover{border-color:var(--dsw-alias-interactive-bg-hover-accent);background:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-brand-primary)}.N4aF0W_row{border-bottom:1px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;padding:12px 2px;display:flex}.N4aF0W_row:last-child{border-bottom:none}.N4aF0W_rowText{flex-direction:column;gap:4px;min-width:0;display:flex}.N4aF0W_title{color:var(--dsw-alias-label-primary);font-size:14px;line-height:22px}.N4aF0W_desc{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.N4aF0W_switch{cursor:pointer;flex:none;display:inline-flex;position:relative}.N4aF0W_switchInput{opacity:0;width:1px;height:1px;margin:0;position:absolute}.N4aF0W_switchTrack{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;align-items:center;width:36px;height:20px;padding:2px;transition:background .15s,border-color .15s;display:inline-flex}.N4aF0W_switchThumb{background:var(--dsw-alias-label-tertiary);border-radius:50%;width:14px;height:14px;transition:transform .15s,background .15s;display:block}.N4aF0W_switch:hover .N4aF0W_switchTrack{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack{border-color:var(--dsw-alias-button-primary-fill);background:var(--dsw-alias-button-primary-fill)}.N4aF0W_switchInput:checked+.N4aF0W_switchTrack .N4aF0W_switchThumb{background:var(--dsw-alias-bg-layer-3);transform:translate(16px)}.N4aF0W_switchInput:focus-visible+.N4aF0W_switchTrack{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_control{flex:none;align-items:center;gap:6px;display:flex}.N4aF0W_percentInput{width:76px}.N4aF0W_typedInput{width:200px}.N4aF0W_typedInputNumber{width:76px}.N4aF0W_selectAnchor{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);max-width:220px;color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;align-items:center;gap:6px;padding:4px 8px;font-size:13px;line-height:20px;display:flex}.N4aF0W_selectAnchor:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_selectAnchorIcon{flex:none;display:inline-flex}.N4aF0W_selectAnchorText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.N4aF0W_selectOption{align-items:center;gap:10px;min-width:200px;display:flex}.N4aF0W_selectOptionIcon{color:var(--dsw-alias-label-secondary);flex:none;display:inline-flex}.N4aF0W_selectOptionText{flex-direction:column;min-width:0;display:flex}.N4aF0W_suffix{color:var(--dsw-alias-label-secondary);font-size:14px;line-height:22px}.N4aF0W_cssTextArea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-height:120px;color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code,monospace);resize:vertical;border-radius:8px;padding:8px 10px;font-size:12px;line-height:1.6}.N4aF0W_cssTextArea:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.N4aF0W_popupDialog.N4aF0W_popupDialog{width:min(460px,100%)}.N4aF0W_popupRows{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--dsw-alias-scrollbar-bg-l2,transparent) transparent;flex-direction:column;gap:8px;width:100%;max-height:min(52vh,440px);padding-right:4px;display:flex;overflow:hidden auto}.N4aF0W_popupRows::-webkit-scrollbar{width:6px}.N4aF0W_popupRows::-webkit-scrollbar-thumb{background:var(--dsw-alias-scrollbar-bg-l2,var(--dsw-alias-border-l2));border-radius:3px}.N4aF0W_popupRows::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-scrollbar-hover-l2,var(--dsw-alias-label-dimmed))}.N4aF0W_popupRow{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex:none;justify-content:space-between;align-items:center;gap:16px;min-width:0;padding:12px 14px;transition:border-color .16s,background .16s;display:flex}.N4aF0W_popupRow:hover{border-color:var(--dsw-alias-label-dimmed)}.N4aF0W_done{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5}.N4aF0W_done:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.N4aF0W_error{color:var(--dsw-alias-state-error-primary);padding:10px 0 2px;font-size:12px;line-height:17px}.N4aF0W_pluginModal.N4aF0W_pluginModal{width:min(560px,100%)}.N4aF0W_pluginList{flex-direction:column;gap:12px;width:100%;display:flex}.N4aF0W_pluginTopicBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);cursor:pointer;border-radius:8px;padding:6px 12px;font-size:12px;line-height:18px}.N4aF0W_pluginTopicBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginTopicBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEmpty{color:var(--dsw-alias-label-tertiary);padding:20px 2px;font-size:12px;line-height:18px}.N4aF0W_pluginEntry{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;flex-direction:column;gap:4px;padding:12px;display:flex}.N4aF0W_pluginEntryHead{justify-content:space-between;align-items:center;gap:12px;display:flex}.N4aF0W_pluginEntryActions{flex:none;align-items:center;gap:6px;display:inline-flex}.N4aF0W_pluginJumpBtn{appearance:none;border:1px solid var(--dsw-alias-border-l2);font:inherit;cursor:pointer;color:var(--dsw-alias-label-secondary);background:0 0;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginJumpBtn:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-interactive-bg-hover-accent);color:var(--dsw-alias-label-primary)}.N4aF0W_pluginJumpBtn:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginName{appearance:none;min-width:0;font:inherit;color:var(--dsw-alias-label-primary);text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;font-weight:600;line-height:20px;text-decoration:none;overflow:hidden}.N4aF0W_pluginName:hover{color:var(--dsw-alias-button-primary-fill);text-decoration:underline}.N4aF0W_pluginDesc{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.N4aF0W_pluginInstall{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);white-space:nowrap;border-radius:8px;padding:6px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:16px;display:block;overflow-x:auto}.N4aF0W_pluginCopyBtn{appearance:none;font:inherit;cursor:pointer;background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border:1px solid #0000;border-radius:8px;flex:none;padding:3px 12px;font-size:12px;line-height:1.5}.N4aF0W_pluginCopyBtn:hover{background:var(--dsw-alias-button-primary-hover)}.N4aF0W_pluginCopyBtn:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}@media (prefers-reduced-motion:reduce){.N4aF0W_card,.N4aF0W_cardSettings,.N4aF0W_cardSwitchTrack,.N4aF0W_cardSwitchThumb,.N4aF0W_rowGear,.N4aF0W_popupRow,.N4aF0W_switchTrack,.N4aF0W_switchThumb{transition:none}}.N4aF0W_pluginSearch{box-sizing:border-box;appearance:none;border:1px solid var(--dsw-alias-border-l2);width:100%;font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border-radius:8px;padding:6px 10px;font-size:12px;line-height:18px}.N4aF0W_pluginSearch::placeholder{color:var(--dsw-alias-label-tertiary)}.N4aF0W_pluginSearch:focus-visible{outline:2px solid var(--dsw-alias-border-l4);outline-offset:1px}.N4aF0W_pluginEntries{flex-direction:column;gap:10px;max-height:46vh;padding-right:2px;display:flex;overflow:hidden auto}.N4aF0W_pluginGroup{flex-direction:column;gap:8px;display:flex}.N4aF0W_pluginGroupHeading{color:var(--dsw-alias-label-secondary);padding:2px 2px 0;font-size:12px;font-weight:600;line-height:18px}.N4aF0W_openWithEditorRow{grid-template-columns:1fr 1.5fr auto auto;align-items:center;gap:8px;min-width:0;display:grid}.N4aF0W_openWithEditorInput,.N4aF0W_openWithEditorTemplate{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:5px 8px;font-size:13px;line-height:20px}.N4aF0W_openWithEditorInput:focus-visible,.N4aF0W_openWithEditorTemplate:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:1px}.N4aF0W_openWithFamily{color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;align-items:center;gap:5px;font-size:12px;display:inline-flex}.N4aF0W_openWithRemove{color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.N4aF0W_openWithRemove:hover{color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-bg-layer-2)}.N4aF0W_openWithHint{color:var(--dsw-alias-state-error-primary);padding:0 2px;font-size:12px;line-height:17px}";
|
|
15044
|
+
const tagId$5 = "dsh-external/dsh-better-sidebar/SideCardSection.module.css";
|
|
15045
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
|
|
14955
15046
|
const tag = document.createElement("style");
|
|
14956
15047
|
tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
|
|
14957
|
-
tag.dataset.pluginCss = tagId$
|
|
14958
|
-
tag.textContent = css$
|
|
15048
|
+
tag.dataset.pluginCss = tagId$5;
|
|
15049
|
+
tag.textContent = css$5;
|
|
14959
15050
|
document.head.appendChild(tag);
|
|
14960
15051
|
}
|
|
14961
15052
|
var SideCardSection_module_css_default = {
|
|
14962
|
-
"
|
|
14963
|
-
"
|
|
14964
|
-
"pluginModal": "N4aF0W_pluginModal",
|
|
14965
|
-
"selectOptionText": "N4aF0W_selectOptionText",
|
|
14966
|
-
"cardIconChip": "N4aF0W_cardIconChip",
|
|
14967
|
-
"pluginEntries": "N4aF0W_pluginEntries",
|
|
14968
|
-
"pluginEntry": "N4aF0W_pluginEntry",
|
|
14969
|
-
"cardSwitchTrack": "N4aF0W_cardSwitchTrack",
|
|
15053
|
+
"percentInput": "N4aF0W_percentInput",
|
|
15054
|
+
"popupDialog": "N4aF0W_popupDialog",
|
|
14970
15055
|
"openWithEditorTemplate": "N4aF0W_openWithEditorTemplate",
|
|
14971
|
-
"
|
|
14972
|
-
"
|
|
14973
|
-
"
|
|
14974
|
-
"
|
|
15056
|
+
"cardSwitch": "N4aF0W_cardSwitch",
|
|
15057
|
+
"count": "N4aF0W_count",
|
|
15058
|
+
"pluginEmpty": "N4aF0W_pluginEmpty",
|
|
15059
|
+
"cardDesc": "N4aF0W_cardDesc",
|
|
15060
|
+
"pluginEntryHead": "N4aF0W_pluginEntryHead",
|
|
15061
|
+
"pluginGroup": "N4aF0W_pluginGroup",
|
|
15062
|
+
"rowText": "N4aF0W_rowText",
|
|
14975
15063
|
"selectOption": "N4aF0W_selectOption",
|
|
14976
|
-
"
|
|
15064
|
+
"pluginEntry": "N4aF0W_pluginEntry",
|
|
15065
|
+
"openWithRemove": "N4aF0W_openWithRemove",
|
|
15066
|
+
"title": "N4aF0W_title",
|
|
14977
15067
|
"selectOptionIcon": "N4aF0W_selectOptionIcon",
|
|
15068
|
+
"rowGear": "N4aF0W_rowGear",
|
|
15069
|
+
"switchThumb": "N4aF0W_switchThumb",
|
|
15070
|
+
"control": "N4aF0W_control",
|
|
14978
15071
|
"suffix": "N4aF0W_suffix",
|
|
14979
|
-
"
|
|
14980
|
-
"pluginGroupHeading": "N4aF0W_pluginGroupHeading",
|
|
14981
|
-
"done": "N4aF0W_done",
|
|
14982
|
-
"openWithRemove": "N4aF0W_openWithRemove",
|
|
14983
|
-
"pluginInstall": "N4aF0W_pluginInstall",
|
|
15072
|
+
"groupHeading": "N4aF0W_groupHeading",
|
|
14984
15073
|
"addCard": "N4aF0W_addCard",
|
|
14985
|
-
"
|
|
14986
|
-
"
|
|
14987
|
-
"switchThumb": "N4aF0W_switchThumb",
|
|
14988
|
-
"switch": "N4aF0W_switch",
|
|
14989
|
-
"row": "N4aF0W_row",
|
|
15074
|
+
"popupRow": "N4aF0W_popupRow",
|
|
15075
|
+
"openWithEditorInput": "N4aF0W_openWithEditorInput",
|
|
14990
15076
|
"openWithHint": "N4aF0W_openWithHint",
|
|
14991
|
-
"
|
|
14992
|
-
"
|
|
15077
|
+
"pluginTopicBtn": "N4aF0W_pluginTopicBtn",
|
|
15078
|
+
"pluginGroupHeading": "N4aF0W_pluginGroupHeading",
|
|
15079
|
+
"pluginCopyBtn": "N4aF0W_pluginCopyBtn",
|
|
15080
|
+
"cardOn": "N4aF0W_cardOn",
|
|
15081
|
+
"selectAnchor": "N4aF0W_selectAnchor",
|
|
15082
|
+
"cssTextArea": "N4aF0W_cssTextArea",
|
|
14993
15083
|
"pluginJumpBtn": "N4aF0W_pluginJumpBtn",
|
|
14994
|
-
"
|
|
14995
|
-
"
|
|
15084
|
+
"error": "N4aF0W_error",
|
|
15085
|
+
"cardMain": "N4aF0W_cardMain",
|
|
15086
|
+
"pluginSearch": "N4aF0W_pluginSearch",
|
|
15087
|
+
"selectAnchorText": "N4aF0W_selectAnchorText",
|
|
15088
|
+
"cardSettings": "N4aF0W_cardSettings",
|
|
15089
|
+
"intro": "N4aF0W_intro",
|
|
14996
15090
|
"pluginName": "N4aF0W_pluginName",
|
|
15091
|
+
"section": "N4aF0W_section",
|
|
15092
|
+
"cardSwitchTrack": "N4aF0W_cardSwitchTrack",
|
|
15093
|
+
"typedInput": "N4aF0W_typedInput",
|
|
15094
|
+
"cardIconChip": "N4aF0W_cardIconChip",
|
|
15095
|
+
"row": "N4aF0W_row",
|
|
15096
|
+
"switch": "N4aF0W_switch",
|
|
15097
|
+
"switchInput": "N4aF0W_switchInput",
|
|
15098
|
+
"pluginList": "N4aF0W_pluginList",
|
|
14997
15099
|
"cardSwitchThumb": "N4aF0W_cardSwitchThumb",
|
|
14998
|
-
"
|
|
14999
|
-
"
|
|
15000
|
-
"pluginCopyBtn": "N4aF0W_pluginCopyBtn",
|
|
15001
|
-
"cardMain": "N4aF0W_cardMain",
|
|
15100
|
+
"popupRows": "N4aF0W_popupRows",
|
|
15101
|
+
"pluginEntries": "N4aF0W_pluginEntries",
|
|
15002
15102
|
"openWithEditorRow": "N4aF0W_openWithEditorRow",
|
|
15003
|
-
"
|
|
15004
|
-
"
|
|
15005
|
-
"rowGear": "N4aF0W_rowGear",
|
|
15006
|
-
"openWithFamily": "N4aF0W_openWithFamily",
|
|
15103
|
+
"pluginEntryActions": "N4aF0W_pluginEntryActions",
|
|
15104
|
+
"pluginModal": "N4aF0W_pluginModal",
|
|
15007
15105
|
"cardTop": "N4aF0W_cardTop",
|
|
15106
|
+
"desc": "N4aF0W_desc",
|
|
15008
15107
|
"cardTitle": "N4aF0W_cardTitle",
|
|
15009
|
-
"
|
|
15010
|
-
"
|
|
15011
|
-
"group": "N4aF0W_group",
|
|
15012
|
-
"pluginGroup": "N4aF0W_pluginGroup",
|
|
15013
|
-
"cardOn": "N4aF0W_cardOn",
|
|
15014
|
-
"rowText": "N4aF0W_rowText",
|
|
15015
|
-
"switchInput": "N4aF0W_switchInput",
|
|
15016
|
-
"error": "N4aF0W_error",
|
|
15017
|
-
"cardSettings": "N4aF0W_cardSettings",
|
|
15018
|
-
"popupDialog": "N4aF0W_popupDialog",
|
|
15019
|
-
"popupRows": "N4aF0W_popupRows",
|
|
15020
|
-
"section": "N4aF0W_section",
|
|
15108
|
+
"done": "N4aF0W_done",
|
|
15109
|
+
"selectAnchorIcon": "N4aF0W_selectAnchorIcon",
|
|
15021
15110
|
"grid": "N4aF0W_grid",
|
|
15022
|
-
"
|
|
15023
|
-
"
|
|
15024
|
-
"
|
|
15025
|
-
"
|
|
15026
|
-
"
|
|
15027
|
-
"
|
|
15111
|
+
"switchTrack": "N4aF0W_switchTrack",
|
|
15112
|
+
"group": "N4aF0W_group",
|
|
15113
|
+
"card": "N4aF0W_card",
|
|
15114
|
+
"typedInputNumber": "N4aF0W_typedInputNumber",
|
|
15115
|
+
"selectOptionText": "N4aF0W_selectOptionText",
|
|
15116
|
+
"openWithFamily": "N4aF0W_openWithFamily",
|
|
15117
|
+
"pluginInstall": "N4aF0W_pluginInstall",
|
|
15118
|
+
"pluginDesc": "N4aF0W_pluginDesc"
|
|
15028
15119
|
};
|
|
15029
15120
|
//#endregion
|
|
15030
15121
|
//#region src/client/open-with-settings.tsx
|
|
@@ -16992,6 +17083,462 @@ window.__ModuleLoader__.load({
|
|
|
16992
17083
|
});
|
|
16993
17084
|
}
|
|
16994
17085
|
//#endregion
|
|
17086
|
+
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/PluginMarketView.module.css.mjs
|
|
17087
|
+
const css$4 = ".wFPghq_root{box-sizing:border-box;height:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);padding:4px;overflow:auto}.wFPghq_head{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:8px;display:flex}.wFPghq_head>span{box-sizing:border-box;flex:1;min-width:220px;max-width:380px}.wFPghq_title{margin:0;font-size:16px;font-weight:600;line-height:24px}.wFPghq_subtitle,.wFPghq_project,.wFPghq_meta,.wFPghq_state{color:var(--dsw-alias-label-tertiary);margin:2px 0;font-size:12px;line-height:18px}.wFPghq_project{overflow-wrap:anywhere}.wFPghq_toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:16px 0 12px;display:flex}.wFPghq_tabs{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.wFPghq_tabs button{white-space:nowrap}.wFPghq_tabs button[aria-pressed=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);font-weight:600}.wFPghq_breadcrumb{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;align-items:center;gap:8px;margin:4px 0 12px;display:flex}.wFPghq_breadcrumb button{white-space:nowrap;flex-shrink:0}.wFPghq_breadcrumb>span:last-child{min-width:0}.wFPghq_warning{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:8px;margin:10px 0;padding:8px 10px;font-size:12px}.wFPghq_error,.wFPghq_notice{overflow-wrap:anywhere;border-radius:8px;margin:10px 0;padding:8px 10px;font-size:12px}.wFPghq_error{color:var(--dsw-alias-state-danger-primary);background:var(--dsw-alias-state-danger-bg)}.wFPghq_notice{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-bg)}.wFPghq_grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,260px),1fr));gap:10px;margin-top:12px;display:grid}.wFPghq_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:10px;flex-direction:column;min-width:0;min-height:150px;padding:12px;display:flex}.wFPghq_cardHead{justify-content:space-between;align-items:center;gap:8px;display:flex}.wFPghq_card h3{overflow-wrap:anywhere;margin:0;font-size:14px;font-weight:600;line-height:20px}.wFPghq_description{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;flex:1;margin:8px 0;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.wFPghq_meta{overflow-wrap:anywhere;min-height:18px}.wFPghq_actions{flex-wrap:wrap;gap:8px;margin-top:8px;display:flex}.wFPghq_projectInstall.wFPghq_projectInstall{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground)}.wFPghq_projectInstall.wFPghq_projectInstall:hover:not(:disabled){background-color:var(--dsw-alias-button-primary-fill)!important;color:var(--dsw-alias-label-primary-foreground)!important}.wFPghq_marketCard{text-align:left;color:inherit;font:inherit;cursor:pointer;width:100%}.wFPghq_marketCard:hover:not(:disabled){border-color:var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-hover)}.wFPghq_marketCard:disabled{cursor:not-allowed;opacity:.5}.wFPghq_spinning{animation:1s linear infinite wFPghq_marketRefresh;display:inline-flex}@keyframes wFPghq_marketRefresh{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.wFPghq_spinning{animation:none}}.wFPghq_marketCard:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}.wFPghq_enter{color:var(--dsw-alias-label-secondary);justify-content:space-between;align-items:center;gap:8px;font-size:12px;line-height:18px;display:flex}@media (width<=640px){.wFPghq_head{flex-direction:column}.wFPghq_head>span{width:100%;min-width:0;max-width:none}}";
|
|
17088
|
+
const tagId$4 = "dsh-external/dsh-better-sidebar/PluginMarketView.module.css";
|
|
17089
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
17090
|
+
const tag = document.createElement("style");
|
|
17091
|
+
tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
|
|
17092
|
+
tag.dataset.pluginCss = tagId$4;
|
|
17093
|
+
tag.textContent = css$4;
|
|
17094
|
+
document.head.appendChild(tag);
|
|
17095
|
+
}
|
|
17096
|
+
var PluginMarketView_module_css_default = {
|
|
17097
|
+
"cardHead": "wFPghq_cardHead",
|
|
17098
|
+
"actions": "wFPghq_actions",
|
|
17099
|
+
"toolbar": "wFPghq_toolbar",
|
|
17100
|
+
"project": "wFPghq_project",
|
|
17101
|
+
"marketCard": "wFPghq_marketCard",
|
|
17102
|
+
"subtitle": "wFPghq_subtitle",
|
|
17103
|
+
"breadcrumb": "wFPghq_breadcrumb",
|
|
17104
|
+
"head": "wFPghq_head",
|
|
17105
|
+
"tabs": "wFPghq_tabs",
|
|
17106
|
+
"marketRefresh": "wFPghq_marketRefresh",
|
|
17107
|
+
"error": "wFPghq_error",
|
|
17108
|
+
"notice": "wFPghq_notice",
|
|
17109
|
+
"card": "wFPghq_card",
|
|
17110
|
+
"projectInstall": "wFPghq_projectInstall",
|
|
17111
|
+
"enter": "wFPghq_enter",
|
|
17112
|
+
"root": "wFPghq_root",
|
|
17113
|
+
"state": "wFPghq_state",
|
|
17114
|
+
"meta": "wFPghq_meta",
|
|
17115
|
+
"warning": "wFPghq_warning",
|
|
17116
|
+
"grid": "wFPghq_grid",
|
|
17117
|
+
"description": "wFPghq_description",
|
|
17118
|
+
"title": "wFPghq_title",
|
|
17119
|
+
"spinning": "wFPghq_spinning"
|
|
17120
|
+
};
|
|
17121
|
+
//#endregion
|
|
17122
|
+
//#region src/client/PluginMarketView.tsx
|
|
17123
|
+
/** Two catalog levels with project/user actions directly on plugin cards. */
|
|
17124
|
+
function PluginMarketView({ scope, visible, catalog }) {
|
|
17125
|
+
const snapshot = (0, react.useSyncExternalStore)(catalog.subscribe, catalog.getSnapshot);
|
|
17126
|
+
const [marketId, setMarketId] = (0, react.useState)(null);
|
|
17127
|
+
const [tab, setTab] = (0, react.useState)("markets");
|
|
17128
|
+
const [query, setQuery] = (0, react.useState)("");
|
|
17129
|
+
const [installed, setInstalled] = (0, react.useState)([]);
|
|
17130
|
+
const [recordsReady, setRecordsReady] = (0, react.useState)(false);
|
|
17131
|
+
const [recordsError, setRecordsError] = (0, react.useState)("");
|
|
17132
|
+
const [message, setMessage] = (0, react.useState)();
|
|
17133
|
+
const [working, setWorking] = (0, react.useState)();
|
|
17134
|
+
const [revision, setRevision] = (0, react.useState)(0);
|
|
17135
|
+
const pending = (0, react.useRef)(false);
|
|
17136
|
+
const breadcrumbNode = (0, react.useRef)(null);
|
|
17137
|
+
const mutationVersion = (0, react.useRef)(0);
|
|
17138
|
+
const focusBack = (0, react.useRef)(false);
|
|
17139
|
+
const scopeKey = `${scope.sessionId}\0${scope.cwd ?? ""}`;
|
|
17140
|
+
const latestScope = (0, react.useRef)(scopeKey);
|
|
17141
|
+
latestScope.current = scopeKey;
|
|
17142
|
+
const markets = snapshot.markets?.data?.marketplaces ?? [];
|
|
17143
|
+
const market = markets.find((item) => item.id === marketId);
|
|
17144
|
+
const catalogEntry = tab === "markets" && marketId ? snapshot.plugins[marketId] : snapshot.markets;
|
|
17145
|
+
const loading = snapshot.refresh?.status === "loading" || tab === "markets" && (!catalogEntry || catalogEntry.status === "loading");
|
|
17146
|
+
const blocked = loading || snapshot.refresh?.status === "error";
|
|
17147
|
+
(0, react.useEffect)(() => {
|
|
17148
|
+
if (!visible) return;
|
|
17149
|
+
catalog.start();
|
|
17150
|
+
if (tab === "markets" && marketId) catalog.ensure(marketId);
|
|
17151
|
+
}, [
|
|
17152
|
+
catalog,
|
|
17153
|
+
visible,
|
|
17154
|
+
tab,
|
|
17155
|
+
marketId
|
|
17156
|
+
]);
|
|
17157
|
+
(0, react.useEffect)(() => {
|
|
17158
|
+
setQuery("");
|
|
17159
|
+
}, [tab, marketId]);
|
|
17160
|
+
(0, react.useEffect)(() => {
|
|
17161
|
+
if (focusBack.current) {
|
|
17162
|
+
breadcrumbNode.current?.querySelector("button")?.focus();
|
|
17163
|
+
focusBack.current = false;
|
|
17164
|
+
}
|
|
17165
|
+
}, [marketId]);
|
|
17166
|
+
(0, react.useEffect)(() => {
|
|
17167
|
+
setInstalled([]);
|
|
17168
|
+
setRecordsReady(false);
|
|
17169
|
+
setRecordsError("");
|
|
17170
|
+
setMessage(void 0);
|
|
17171
|
+
}, [scopeKey]);
|
|
17172
|
+
(0, react.useEffect)(() => {
|
|
17173
|
+
if (!visible) return;
|
|
17174
|
+
const controller = new AbortController();
|
|
17175
|
+
let active = true;
|
|
17176
|
+
let reading = false;
|
|
17177
|
+
const read = async () => {
|
|
17178
|
+
if (pending.current || reading) return;
|
|
17179
|
+
reading = true;
|
|
17180
|
+
const version = mutationVersion.current;
|
|
17181
|
+
try {
|
|
17182
|
+
const records = await api.pluginsInstalled(scope, controller.signal);
|
|
17183
|
+
if (active && !pending.current && version === mutationVersion.current) {
|
|
17184
|
+
setInstalled(records);
|
|
17185
|
+
setRecordsReady(true);
|
|
17186
|
+
setRecordsError("");
|
|
17187
|
+
}
|
|
17188
|
+
} catch (cause) {
|
|
17189
|
+
if (active && version === mutationVersion.current) setRecordsError(cause instanceof Error ? cause.message : String(cause));
|
|
17190
|
+
} finally {
|
|
17191
|
+
reading = false;
|
|
17192
|
+
}
|
|
17193
|
+
};
|
|
17194
|
+
read();
|
|
17195
|
+
const timer = setInterval(() => {
|
|
17196
|
+
read();
|
|
17197
|
+
}, 2e3);
|
|
17198
|
+
return () => {
|
|
17199
|
+
active = false;
|
|
17200
|
+
clearInterval(timer);
|
|
17201
|
+
controller.abort();
|
|
17202
|
+
};
|
|
17203
|
+
}, [
|
|
17204
|
+
scopeKey,
|
|
17205
|
+
visible,
|
|
17206
|
+
revision
|
|
17207
|
+
]);
|
|
17208
|
+
const perform = async (plugin, installScope) => {
|
|
17209
|
+
const refreshStatus = catalog.getSnapshot().refresh?.status;
|
|
17210
|
+
if (pending.current || !recordsReady || blocked || refreshStatus === "loading" || refreshStatus === "error") return;
|
|
17211
|
+
const key = scopeKey;
|
|
17212
|
+
const present = installed.some((item) => item.id === plugin.id && item.scope === installScope);
|
|
17213
|
+
pending.current = true;
|
|
17214
|
+
mutationVersion.current++;
|
|
17215
|
+
setWorking({
|
|
17216
|
+
id: plugin.id,
|
|
17217
|
+
scope: installScope
|
|
17218
|
+
});
|
|
17219
|
+
setMessage(void 0);
|
|
17220
|
+
try {
|
|
17221
|
+
if (present) await api.pluginUninstall(scope, plugin.id, installScope);
|
|
17222
|
+
else await api.pluginInstall(scope, plugin.id, installScope);
|
|
17223
|
+
const records = await api.pluginsInstalled(scope);
|
|
17224
|
+
if (latestScope.current === key) {
|
|
17225
|
+
setInstalled(records);
|
|
17226
|
+
setRecordsReady(true);
|
|
17227
|
+
setRecordsError("");
|
|
17228
|
+
setMessage({
|
|
17229
|
+
text: t(present ? "pluginMarketUninstalled" : "pluginMarketInstalled"),
|
|
17230
|
+
error: false
|
|
17231
|
+
});
|
|
17232
|
+
}
|
|
17233
|
+
} catch (cause) {
|
|
17234
|
+
if (latestScope.current === key) setMessage({
|
|
17235
|
+
text: cause instanceof Error ? cause.message : String(cause),
|
|
17236
|
+
error: true
|
|
17237
|
+
});
|
|
17238
|
+
} finally {
|
|
17239
|
+
pending.current = false;
|
|
17240
|
+
setWorking(void 0);
|
|
17241
|
+
}
|
|
17242
|
+
};
|
|
17243
|
+
const refresh = () => {
|
|
17244
|
+
if (loading || pending.current) return;
|
|
17245
|
+
catalog.refresh(tab === "markets" && marketId ? marketId : void 0);
|
|
17246
|
+
setRevision((value) => value + 1);
|
|
17247
|
+
setMessage(void 0);
|
|
17248
|
+
};
|
|
17249
|
+
const term = query.trim().toLocaleLowerCase();
|
|
17250
|
+
const matches = (item) => `${item.name} ${item.description}`.toLocaleLowerCase().includes(term);
|
|
17251
|
+
const filteredPlugins = (tab === "installed" ? [...new Map(installed.map((item) => [item.id, item])).values()] : marketId ? snapshot.plugins[marketId]?.data ?? [] : []).filter(matches);
|
|
17252
|
+
const filteredMarkets = markets.filter(matches);
|
|
17253
|
+
const showMarkets = tab === "markets" && !marketId;
|
|
17254
|
+
const error = snapshot.refresh?.error || (tab === "markets" ? catalogEntry?.error : "") || recordsError;
|
|
17255
|
+
const warning = [snapshot.markets?.data?.warning, marketId ? snapshot.plugins[marketId]?.warning : ""].filter(Boolean).join("\n");
|
|
17256
|
+
const hasData = tab === "installed" ? recordsReady : !!catalogEntry?.data;
|
|
17257
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
17258
|
+
className: PluginMarketView_module_css_default.root,
|
|
17259
|
+
"aria-label": t("pluginMarketTitle"),
|
|
17260
|
+
"aria-busy": loading,
|
|
17261
|
+
"data-chatcode-plugin-market": true,
|
|
17262
|
+
children: [
|
|
17263
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
17264
|
+
className: PluginMarketView_module_css_default.head,
|
|
17265
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
17266
|
+
className: PluginMarketView_module_css_default.title,
|
|
17267
|
+
children: t("pluginMarketTitle")
|
|
17268
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17269
|
+
className: PluginMarketView_module_css_default.subtitle,
|
|
17270
|
+
children: t("pluginMarketSubtitle")
|
|
17271
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Input, {
|
|
17272
|
+
disabled: blocked,
|
|
17273
|
+
value: query,
|
|
17274
|
+
onChange: (event) => setQuery(event.target.value),
|
|
17275
|
+
placeholder: t("pluginMarketSearch"),
|
|
17276
|
+
"aria-label": t("pluginMarketSearch")
|
|
17277
|
+
})]
|
|
17278
|
+
}),
|
|
17279
|
+
scope.cwd ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17280
|
+
className: PluginMarketView_module_css_default.project,
|
|
17281
|
+
children: t("pluginMarketProjectDirectory", { path: scope.cwd })
|
|
17282
|
+
}) : null,
|
|
17283
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
17284
|
+
className: PluginMarketView_module_css_default.toolbar,
|
|
17285
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
17286
|
+
className: PluginMarketView_module_css_default.tabs,
|
|
17287
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
17288
|
+
size: "sm",
|
|
17289
|
+
variant: "ghost",
|
|
17290
|
+
disabled: blocked,
|
|
17291
|
+
"aria-pressed": tab === "markets",
|
|
17292
|
+
onClick: () => setTab("markets"),
|
|
17293
|
+
children: t("pluginMarketTitle")
|
|
17294
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
17295
|
+
size: "sm",
|
|
17296
|
+
variant: "ghost",
|
|
17297
|
+
disabled: blocked,
|
|
17298
|
+
"aria-pressed": tab === "installed",
|
|
17299
|
+
onClick: () => setTab("installed"),
|
|
17300
|
+
children: t("pluginMarketInstalledTab")
|
|
17301
|
+
})]
|
|
17302
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
17303
|
+
size: "sm",
|
|
17304
|
+
variant: "outline",
|
|
17305
|
+
"aria-label": t("pluginMarketRefresh"),
|
|
17306
|
+
disabled: snapshot.markets?.status === "loading" || loading || !!working,
|
|
17307
|
+
onClick: refresh,
|
|
17308
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
17309
|
+
"aria-hidden": "true",
|
|
17310
|
+
className: loading ? PluginMarketView_module_css_default.spinning : void 0,
|
|
17311
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline14, {})
|
|
17312
|
+
}), t(loading ? "pluginMarketRefreshing" : "pluginMarketRefresh")]
|
|
17313
|
+
})]
|
|
17314
|
+
}),
|
|
17315
|
+
warning && tab === "markets" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17316
|
+
className: PluginMarketView_module_css_default.warning,
|
|
17317
|
+
role: "status",
|
|
17318
|
+
children: warning
|
|
17319
|
+
}) : null,
|
|
17320
|
+
error ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17321
|
+
className: PluginMarketView_module_css_default.error,
|
|
17322
|
+
role: "status",
|
|
17323
|
+
children: error
|
|
17324
|
+
}) : null,
|
|
17325
|
+
message ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17326
|
+
className: message.error ? PluginMarketView_module_css_default.error : PluginMarketView_module_css_default.notice,
|
|
17327
|
+
role: "status",
|
|
17328
|
+
children: message.text
|
|
17329
|
+
}) : null,
|
|
17330
|
+
tab === "markets" && marketId ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
17331
|
+
ref: breadcrumbNode,
|
|
17332
|
+
className: PluginMarketView_module_css_default.breadcrumb,
|
|
17333
|
+
children: [
|
|
17334
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
17335
|
+
size: "sm",
|
|
17336
|
+
variant: "ghost",
|
|
17337
|
+
disabled: blocked,
|
|
17338
|
+
onClick: () => setMarketId(null),
|
|
17339
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronLeftOutline14, {}), t("pluginMarketBack")]
|
|
17340
|
+
}),
|
|
17341
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
17342
|
+
"aria-hidden": "true",
|
|
17343
|
+
children: "/"
|
|
17344
|
+
}),
|
|
17345
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: market?.name ?? marketId })
|
|
17346
|
+
]
|
|
17347
|
+
}) : null,
|
|
17348
|
+
loading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17349
|
+
className: PluginMarketView_module_css_default.state,
|
|
17350
|
+
role: "status",
|
|
17351
|
+
children: t(hasData ? "pluginMarketRefreshing" : "pluginMarketLoading")
|
|
17352
|
+
}) : null,
|
|
17353
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
17354
|
+
className: PluginMarketView_module_css_default.grid,
|
|
17355
|
+
"aria-busy": loading,
|
|
17356
|
+
children: showMarkets ? filteredMarkets.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
17357
|
+
type: "button",
|
|
17358
|
+
disabled: blocked,
|
|
17359
|
+
className: `${PluginMarketView_module_css_default.card} ${PluginMarketView_module_css_default.marketCard}`,
|
|
17360
|
+
onClick: () => {
|
|
17361
|
+
focusBack.current = true;
|
|
17362
|
+
setMarketId(item.id);
|
|
17363
|
+
},
|
|
17364
|
+
children: [
|
|
17365
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
17366
|
+
className: PluginMarketView_module_css_default.cardHead,
|
|
17367
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: item.name }), item.official ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: t("pluginMarketDefault") }) : null]
|
|
17368
|
+
}),
|
|
17369
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17370
|
+
className: PluginMarketView_module_css_default.description,
|
|
17371
|
+
children: item.description || t("pluginMarketNoDescription")
|
|
17372
|
+
}),
|
|
17373
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
17374
|
+
className: PluginMarketView_module_css_default.enter,
|
|
17375
|
+
children: [t("pluginMarketBrowse"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronRightOutline14, {})]
|
|
17376
|
+
})
|
|
17377
|
+
]
|
|
17378
|
+
}, item.id)) : filteredPlugins.map((item) => {
|
|
17379
|
+
const records = installed.filter((record) => record.id === item.id);
|
|
17380
|
+
const marketName = markets.find((value) => value.id === item.marketplaceId)?.name ?? item.marketplaceId;
|
|
17381
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("article", {
|
|
17382
|
+
className: PluginMarketView_module_css_default.card,
|
|
17383
|
+
"aria-label": item.name,
|
|
17384
|
+
"data-plugin-id": item.id,
|
|
17385
|
+
children: [
|
|
17386
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
17387
|
+
className: PluginMarketView_module_css_default.cardHead,
|
|
17388
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", { children: item.name }), records.length ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Pill, { children: t("pluginMarketInstalledTab") }) : null]
|
|
17389
|
+
}),
|
|
17390
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17391
|
+
className: PluginMarketView_module_css_default.description,
|
|
17392
|
+
children: item.description || t("pluginMarketNoDescription")
|
|
17393
|
+
}),
|
|
17394
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
17395
|
+
className: PluginMarketView_module_css_default.meta,
|
|
17396
|
+
children: [marketName, tab === "installed" && records[0]?.version ? ` · ${records[0].version}` : ""]
|
|
17397
|
+
}),
|
|
17398
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
17399
|
+
className: PluginMarketView_module_css_default.actions,
|
|
17400
|
+
children: ["project", "user"].map((installScope) => {
|
|
17401
|
+
const present = records.some((record) => record.scope === installScope);
|
|
17402
|
+
const busy = working?.id === item.id && working.scope === installScope;
|
|
17403
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
17404
|
+
size: "sm",
|
|
17405
|
+
variant: installScope === "project" && !present ? "primary" : "outline",
|
|
17406
|
+
className: installScope === "project" && !present ? PluginMarketView_module_css_default.projectInstall : void 0,
|
|
17407
|
+
disabled: blocked || !!working || !recordsReady,
|
|
17408
|
+
onClick: () => {
|
|
17409
|
+
perform(item, installScope);
|
|
17410
|
+
},
|
|
17411
|
+
children: [
|
|
17412
|
+
t(busy ? present ? "pluginMarketUninstalling" : "pluginMarketInstalling" : present ? "pluginMarketUninstall" : "pluginMarketInstall"),
|
|
17413
|
+
" · ",
|
|
17414
|
+
t(installScope === "project" ? "pluginMarketProject" : "pluginMarketUser")
|
|
17415
|
+
]
|
|
17416
|
+
}, installScope);
|
|
17417
|
+
})
|
|
17418
|
+
})
|
|
17419
|
+
]
|
|
17420
|
+
}, item.id);
|
|
17421
|
+
})
|
|
17422
|
+
}),
|
|
17423
|
+
!loading && hasData && (showMarkets ? filteredMarkets : filteredPlugins).length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
17424
|
+
className: PluginMarketView_module_css_default.state,
|
|
17425
|
+
children: t("pluginMarketEmpty")
|
|
17426
|
+
}) : null
|
|
17427
|
+
]
|
|
17428
|
+
});
|
|
17429
|
+
}
|
|
17430
|
+
//#endregion
|
|
17431
|
+
//#region src/client/plugin-market-catalog.ts
|
|
17432
|
+
/** App-lifetime remote catalogs, shared by Settings and the sidebar tab. */
|
|
17433
|
+
function createPluginMarketCatalog() {
|
|
17434
|
+
let snapshot = { plugins: {} };
|
|
17435
|
+
let disposed = false;
|
|
17436
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
17437
|
+
const controllers = /* @__PURE__ */ new Set();
|
|
17438
|
+
const requests = /* @__PURE__ */ new Map();
|
|
17439
|
+
const publish = (next) => {
|
|
17440
|
+
if (disposed) return;
|
|
17441
|
+
snapshot = next;
|
|
17442
|
+
listeners.forEach((listener) => listener());
|
|
17443
|
+
};
|
|
17444
|
+
const load = (key, current, update, request) => {
|
|
17445
|
+
if (disposed) return Promise.resolve(void 0);
|
|
17446
|
+
const pending = requests.get(key);
|
|
17447
|
+
if (pending) return pending;
|
|
17448
|
+
const entry = {
|
|
17449
|
+
status: "loading",
|
|
17450
|
+
data: current()?.data
|
|
17451
|
+
};
|
|
17452
|
+
const controller = new AbortController();
|
|
17453
|
+
controllers.add(controller);
|
|
17454
|
+
update(entry);
|
|
17455
|
+
const result = request(controller.signal).then(({ data, warning }) => {
|
|
17456
|
+
if (current() === entry) update({
|
|
17457
|
+
status: "ready",
|
|
17458
|
+
data,
|
|
17459
|
+
...warning ? { warning } : {}
|
|
17460
|
+
});
|
|
17461
|
+
}, (cause) => {
|
|
17462
|
+
const error = cause instanceof Error ? cause.message : String(cause);
|
|
17463
|
+
if (current() === entry) update({
|
|
17464
|
+
status: "error",
|
|
17465
|
+
data: entry.data,
|
|
17466
|
+
error
|
|
17467
|
+
});
|
|
17468
|
+
return error;
|
|
17469
|
+
}).finally(() => {
|
|
17470
|
+
controllers.delete(controller);
|
|
17471
|
+
requests.delete(key);
|
|
17472
|
+
});
|
|
17473
|
+
requests.set(key, result);
|
|
17474
|
+
return result;
|
|
17475
|
+
};
|
|
17476
|
+
const markets = (force = false) => {
|
|
17477
|
+
if (!force && snapshot.markets) return Promise.resolve(void 0);
|
|
17478
|
+
return load("markets", () => snapshot.markets, (entry) => publish({
|
|
17479
|
+
...snapshot,
|
|
17480
|
+
markets: entry
|
|
17481
|
+
}), async (signal) => ({ data: await api.pluginMarketplaces(signal) }));
|
|
17482
|
+
};
|
|
17483
|
+
const plugins = (id, force = false) => {
|
|
17484
|
+
if (!force && snapshot.plugins[id]) return Promise.resolve(void 0);
|
|
17485
|
+
return load(`plugins:${id}`, () => snapshot.plugins[id], (entry) => publish({
|
|
17486
|
+
...snapshot,
|
|
17487
|
+
plugins: {
|
|
17488
|
+
...snapshot.plugins,
|
|
17489
|
+
[id]: entry
|
|
17490
|
+
}
|
|
17491
|
+
}), async (signal) => {
|
|
17492
|
+
const result = await api.pluginCatalog(id, signal);
|
|
17493
|
+
return Array.isArray(result) ? { data: result } : {
|
|
17494
|
+
data: result.plugins,
|
|
17495
|
+
warning: result.warning
|
|
17496
|
+
};
|
|
17497
|
+
});
|
|
17498
|
+
};
|
|
17499
|
+
return {
|
|
17500
|
+
subscribe: (listener) => {
|
|
17501
|
+
listeners.add(listener);
|
|
17502
|
+
return () => {
|
|
17503
|
+
listeners.delete(listener);
|
|
17504
|
+
};
|
|
17505
|
+
},
|
|
17506
|
+
getSnapshot: () => snapshot,
|
|
17507
|
+
start: () => {
|
|
17508
|
+
markets();
|
|
17509
|
+
},
|
|
17510
|
+
ensure: (id) => {
|
|
17511
|
+
plugins(id);
|
|
17512
|
+
},
|
|
17513
|
+
refresh: (id) => {
|
|
17514
|
+
if (disposed || snapshot.refresh?.status === "loading") return;
|
|
17515
|
+
const ids = new Set(Object.keys(snapshot.plugins));
|
|
17516
|
+
if (id) ids.add(id);
|
|
17517
|
+
publish({
|
|
17518
|
+
...snapshot,
|
|
17519
|
+
refresh: { status: "loading" }
|
|
17520
|
+
});
|
|
17521
|
+
Promise.all([markets(true), ...[...ids].map((key) => plugins(key, true))]).then((results) => {
|
|
17522
|
+
const errors = [...new Set(results.filter((value) => value !== void 0))];
|
|
17523
|
+
publish({
|
|
17524
|
+
...snapshot,
|
|
17525
|
+
refresh: errors.length ? {
|
|
17526
|
+
status: "error",
|
|
17527
|
+
error: errors.join("\n")
|
|
17528
|
+
} : { status: "ready" }
|
|
17529
|
+
});
|
|
17530
|
+
});
|
|
17531
|
+
},
|
|
17532
|
+
dispose: () => {
|
|
17533
|
+
disposed = true;
|
|
17534
|
+
controllers.forEach((controller) => controller.abort());
|
|
17535
|
+
controllers.clear();
|
|
17536
|
+
requests.clear();
|
|
17537
|
+
listeners.clear();
|
|
17538
|
+
}
|
|
17539
|
+
};
|
|
17540
|
+
}
|
|
17541
|
+
//#endregion
|
|
16995
17542
|
//#region src/client/builtins/tabs.tsx
|
|
16996
17543
|
/**
|
|
16997
17544
|
* Lazy wrapper over the terminal view: xterm (and its stylesheet) is fetched
|
|
@@ -17015,8 +17562,9 @@ window.__ModuleLoader__.load({
|
|
|
17015
17562
|
function uiTerminalCount(state) {
|
|
17016
17563
|
return allLeaves(state.splits).flatMap((leaf) => leaf.tabs).filter((tab) => tab.type === "terminal" && !isAgentTabId(tab.id)).length;
|
|
17017
17564
|
}
|
|
17018
|
-
/** The
|
|
17565
|
+
/** The 6 built-in tab descriptors. */
|
|
17019
17566
|
function builtinTabs(ctx, options = {}) {
|
|
17567
|
+
const pluginMarketCatalog = options.pluginMarketCatalog ?? createPluginMarketCatalog();
|
|
17020
17568
|
return [
|
|
17021
17569
|
{
|
|
17022
17570
|
id: "editor",
|
|
@@ -17188,6 +17736,18 @@ window.__ModuleLoader__.load({
|
|
|
17188
17736
|
}),
|
|
17189
17737
|
component: (props) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BrowserView, { ...props })
|
|
17190
17738
|
},
|
|
17739
|
+
{
|
|
17740
|
+
id: "plugin-market",
|
|
17741
|
+
title: () => t("pluginMarketTitle"),
|
|
17742
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconGlobeOutline16, { size }),
|
|
17743
|
+
order: 60,
|
|
17744
|
+
single: true,
|
|
17745
|
+
component: ({ scope, visible }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginMarketView, {
|
|
17746
|
+
scope,
|
|
17747
|
+
visible,
|
|
17748
|
+
catalog: pluginMarketCatalog
|
|
17749
|
+
})
|
|
17750
|
+
},
|
|
17191
17751
|
{
|
|
17192
17752
|
id: "diff",
|
|
17193
17753
|
title: () => t("git"),
|
|
@@ -18835,6 +19395,62 @@ window.__ModuleLoader__.load({
|
|
|
18835
19395
|
location.replace(chatcodeLoginRoute(location));
|
|
18836
19396
|
}
|
|
18837
19397
|
//#endregion
|
|
19398
|
+
//#region src/client/LogoutConfirmDialog.tsx
|
|
19399
|
+
/** Native modal supplies an inert background and default Cancel focus until a choice is made. */
|
|
19400
|
+
function LogoutConfirmDialog({ onCancel, onConfirm }) {
|
|
19401
|
+
const ref = (0, react.useRef)(null);
|
|
19402
|
+
const titleId = (0, react.useId)();
|
|
19403
|
+
const descriptionId = (0, react.useId)();
|
|
19404
|
+
(0, react.useEffect)(() => {
|
|
19405
|
+
const dialog = ref.current;
|
|
19406
|
+
dialog?.showModal();
|
|
19407
|
+
return () => {
|
|
19408
|
+
if (dialog?.open) dialog.close();
|
|
19409
|
+
};
|
|
19410
|
+
}, []);
|
|
19411
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("dialog", {
|
|
19412
|
+
ref,
|
|
19413
|
+
className: sidebar_module_css_default.accountLogoutDialog,
|
|
19414
|
+
role: "alertdialog",
|
|
19415
|
+
"aria-modal": "true",
|
|
19416
|
+
"aria-labelledby": titleId,
|
|
19417
|
+
"aria-describedby": descriptionId,
|
|
19418
|
+
onCancel: (event) => {
|
|
19419
|
+
event.preventDefault();
|
|
19420
|
+
onCancel();
|
|
19421
|
+
},
|
|
19422
|
+
onKeyDown: (event) => {
|
|
19423
|
+
event.stopPropagation();
|
|
19424
|
+
},
|
|
19425
|
+
children: [
|
|
19426
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
|
|
19427
|
+
id: titleId,
|
|
19428
|
+
className: sidebar_module_css_default.accountLogoutTitle,
|
|
19429
|
+
children: t("accountMenuLogoutConfirmTitle")
|
|
19430
|
+
}),
|
|
19431
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
19432
|
+
id: descriptionId,
|
|
19433
|
+
className: sidebar_module_css_default.accountLogoutDescription,
|
|
19434
|
+
children: t("accountMenuLogoutConfirmDescription")
|
|
19435
|
+
}),
|
|
19436
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
19437
|
+
className: sidebar_module_css_default.accountLogoutActions,
|
|
19438
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
19439
|
+
type: "button",
|
|
19440
|
+
autoFocus: true,
|
|
19441
|
+
onClick: onCancel,
|
|
19442
|
+
children: t("cancel")
|
|
19443
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
19444
|
+
type: "button",
|
|
19445
|
+
className: sidebar_module_css_default.accountLogoutConfirm,
|
|
19446
|
+
onClick: onConfirm,
|
|
19447
|
+
children: t("accountMenuLogout")
|
|
19448
|
+
})]
|
|
19449
|
+
})
|
|
19450
|
+
]
|
|
19451
|
+
});
|
|
19452
|
+
}
|
|
19453
|
+
//#endregion
|
|
18838
19454
|
//#region src/client/AccountMenu.tsx
|
|
18839
19455
|
/**
|
|
18840
19456
|
* Bottom-left account control.
|
|
@@ -18926,6 +19542,7 @@ window.__ModuleLoader__.load({
|
|
|
18926
19542
|
function AccountMenu() {
|
|
18927
19543
|
const rootRef = (0, react.useRef)(null);
|
|
18928
19544
|
const [open, setOpen] = (0, react.useState)(false);
|
|
19545
|
+
const [logoutTarget, setLogoutTarget] = (0, react.useState)();
|
|
18929
19546
|
const [userName, setUserName] = (0, react.useState)("User");
|
|
18930
19547
|
const { chatcode, busy, error, loginUrl, startLogin, logout: logoutChatcode } = useChatcodeAccount();
|
|
18931
19548
|
(0, react.useEffect)(() => {
|
|
@@ -18948,143 +19565,160 @@ window.__ModuleLoader__.load({
|
|
|
18948
19565
|
}, []);
|
|
18949
19566
|
(0, react.useEffect)(() => {
|
|
18950
19567
|
if (error === "status") redirectToChatcodeLogin();
|
|
18951
|
-
}, [error]);
|
|
18952
|
-
(0, react.useEffect)(() => {
|
|
18953
|
-
let current;
|
|
18954
|
-
let originalStyle;
|
|
18955
|
-
const sync = () => {
|
|
18956
|
-
const next = nativeSettingsButton(rootRef.current);
|
|
18957
|
-
const width = railWidthOf(next);
|
|
18958
|
-
if (width !== void 0) rootRef.current?.style.setProperty("--dsh-account-menu-width", `${width}px`);
|
|
18959
|
-
if (next === current) return;
|
|
18960
|
-
if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
|
|
18961
|
-
current = next;
|
|
18962
|
-
originalStyle = current?.style.cssText;
|
|
18963
|
-
if (current !== void 0) current.style.visibility = "hidden";
|
|
18964
|
-
};
|
|
18965
|
-
sync();
|
|
18966
|
-
const observer = new MutationObserver(sync);
|
|
18967
|
-
observer.observe(document.body, {
|
|
18968
|
-
childList: true,
|
|
18969
|
-
subtree: true,
|
|
18970
|
-
characterData: true
|
|
18971
|
-
});
|
|
18972
|
-
return () => {
|
|
18973
|
-
observer.disconnect();
|
|
18974
|
-
if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
|
|
18975
|
-
};
|
|
18976
|
-
}, []);
|
|
18977
|
-
const openSettings = () => {
|
|
18978
|
-
setOpen(false);
|
|
18979
|
-
nativeSettingsButton(rootRef.current)?.click();
|
|
18980
|
-
};
|
|
18981
|
-
const chatcodeName = chatcode?.userName?.trim() || chatcode?.emailAddress?.trim() || userName;
|
|
18982
|
-
const signedIn = chatcode?.validation === "valid" && chatcode.expired !== true;
|
|
18983
|
-
const hasChatcodeAccount = chatcode?.available === true && chatcode.configured === true;
|
|
18984
|
-
const canStartChatcodeLogin = chatcode?.available === true && !hasChatcodeAccount && !(chatcode.configured === true && chatcode.validation === "unavailable");
|
|
18985
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
18986
|
-
ref: rootRef,
|
|
18987
|
-
className: sidebar_module_css_default.accountMenu,
|
|
18988
|
-
children: [
|
|
18989
|
-
|
|
18990
|
-
|
|
18991
|
-
|
|
18992
|
-
|
|
18993
|
-
|
|
18994
|
-
|
|
18995
|
-
|
|
18996
|
-
|
|
18997
|
-
|
|
18998
|
-
|
|
18999
|
-
|
|
19000
|
-
|
|
19001
|
-
|
|
19002
|
-
|
|
19003
|
-
|
|
19004
|
-
|
|
19005
|
-
|
|
19006
|
-
|
|
19007
|
-
|
|
19008
|
-
|
|
19009
|
-
|
|
19010
|
-
|
|
19011
|
-
|
|
19012
|
-
|
|
19013
|
-
|
|
19014
|
-
|
|
19015
|
-
|
|
19016
|
-
|
|
19017
|
-
|
|
19018
|
-
|
|
19019
|
-
|
|
19020
|
-
|
|
19021
|
-
|
|
19022
|
-
|
|
19023
|
-
|
|
19024
|
-
|
|
19025
|
-
|
|
19026
|
-
|
|
19027
|
-
|
|
19028
|
-
|
|
19029
|
-
|
|
19030
|
-
|
|
19031
|
-
|
|
19032
|
-
|
|
19033
|
-
|
|
19034
|
-
|
|
19035
|
-
|
|
19036
|
-
event
|
|
19037
|
-
|
|
19038
|
-
|
|
19039
|
-
|
|
19040
|
-
|
|
19041
|
-
|
|
19042
|
-
|
|
19043
|
-
|
|
19044
|
-
|
|
19045
|
-
|
|
19046
|
-
|
|
19047
|
-
|
|
19048
|
-
|
|
19049
|
-
|
|
19050
|
-
|
|
19051
|
-
|
|
19052
|
-
|
|
19053
|
-
|
|
19054
|
-
|
|
19055
|
-
|
|
19056
|
-
|
|
19057
|
-
|
|
19058
|
-
|
|
19059
|
-
|
|
19060
|
-
|
|
19061
|
-
|
|
19062
|
-
|
|
19063
|
-
|
|
19064
|
-
|
|
19065
|
-
|
|
19066
|
-
|
|
19067
|
-
|
|
19068
|
-
|
|
19069
|
-
|
|
19070
|
-
|
|
19071
|
-
|
|
19072
|
-
|
|
19073
|
-
|
|
19074
|
-
|
|
19075
|
-
|
|
19076
|
-
|
|
19077
|
-
|
|
19078
|
-
|
|
19079
|
-
|
|
19080
|
-
|
|
19081
|
-
|
|
19082
|
-
|
|
19083
|
-
|
|
19084
|
-
|
|
19085
|
-
|
|
19086
|
-
|
|
19087
|
-
|
|
19568
|
+
}, [error]);
|
|
19569
|
+
(0, react.useEffect)(() => {
|
|
19570
|
+
let current;
|
|
19571
|
+
let originalStyle;
|
|
19572
|
+
const sync = () => {
|
|
19573
|
+
const next = nativeSettingsButton(rootRef.current);
|
|
19574
|
+
const width = railWidthOf(next);
|
|
19575
|
+
if (width !== void 0) rootRef.current?.style.setProperty("--dsh-account-menu-width", `${width}px`);
|
|
19576
|
+
if (next === current) return;
|
|
19577
|
+
if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
|
|
19578
|
+
current = next;
|
|
19579
|
+
originalStyle = current?.style.cssText;
|
|
19580
|
+
if (current !== void 0) current.style.visibility = "hidden";
|
|
19581
|
+
};
|
|
19582
|
+
sync();
|
|
19583
|
+
const observer = new MutationObserver(sync);
|
|
19584
|
+
observer.observe(document.body, {
|
|
19585
|
+
childList: true,
|
|
19586
|
+
subtree: true,
|
|
19587
|
+
characterData: true
|
|
19588
|
+
});
|
|
19589
|
+
return () => {
|
|
19590
|
+
observer.disconnect();
|
|
19591
|
+
if (current !== void 0 && originalStyle !== void 0) current.style.cssText = originalStyle;
|
|
19592
|
+
};
|
|
19593
|
+
}, []);
|
|
19594
|
+
const openSettings = () => {
|
|
19595
|
+
setOpen(false);
|
|
19596
|
+
nativeSettingsButton(rootRef.current)?.click();
|
|
19597
|
+
};
|
|
19598
|
+
const chatcodeName = chatcode?.userName?.trim() || chatcode?.emailAddress?.trim() || userName;
|
|
19599
|
+
const signedIn = chatcode?.validation === "valid" && chatcode.expired !== true;
|
|
19600
|
+
const hasChatcodeAccount = chatcode?.available === true && chatcode.configured === true;
|
|
19601
|
+
const canStartChatcodeLogin = chatcode?.available === true && !hasChatcodeAccount && !(chatcode.configured === true && chatcode.validation === "unavailable");
|
|
19602
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
19603
|
+
ref: rootRef,
|
|
19604
|
+
className: sidebar_module_css_default.accountMenu,
|
|
19605
|
+
children: [
|
|
19606
|
+
open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
19607
|
+
className: sidebar_module_css_default.accountDropdown,
|
|
19608
|
+
role: "menu",
|
|
19609
|
+
"aria-label": t("accountMenuLabel"),
|
|
19610
|
+
children: [
|
|
19611
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
19612
|
+
className: sidebar_module_css_default.accountDropdownHeader,
|
|
19613
|
+
children: [
|
|
19614
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19615
|
+
className: sidebar_module_css_default.accountAvatar,
|
|
19616
|
+
children: chatcodeName.slice(0, 1).toUpperCase()
|
|
19617
|
+
}),
|
|
19618
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19619
|
+
className: sidebar_module_css_default.accountName,
|
|
19620
|
+
children: chatcodeName
|
|
19621
|
+
}),
|
|
19622
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19623
|
+
className: sidebar_module_css_default.accountPresence,
|
|
19624
|
+
style: { opacity: signedIn ? 1 : .25 },
|
|
19625
|
+
"aria-hidden": "true"
|
|
19626
|
+
})
|
|
19627
|
+
]
|
|
19628
|
+
}),
|
|
19629
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: sidebar_module_css_default.accountMenuDivider }),
|
|
19630
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
19631
|
+
type: "button",
|
|
19632
|
+
role: "menuitem",
|
|
19633
|
+
className: sidebar_module_css_default.accountItem,
|
|
19634
|
+
onClick: openSettings,
|
|
19635
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsIcon, {}), t("accountMenuSettings")]
|
|
19636
|
+
}),
|
|
19637
|
+
error === "operation" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
19638
|
+
role: "alert",
|
|
19639
|
+
className: sidebar_module_css_default.accountItem,
|
|
19640
|
+
children: t("accountMenuChatcodeError")
|
|
19641
|
+
}),
|
|
19642
|
+
(chatcode?.login?.state === "failed" || chatcode?.login?.state === "timed-out") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
19643
|
+
role: "alert",
|
|
19644
|
+
className: sidebar_module_css_default.accountItem,
|
|
19645
|
+
children: t("accountMenuChatcodeRetry")
|
|
19646
|
+
}),
|
|
19647
|
+
loginUrl && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
19648
|
+
"data-dsh-external": "true",
|
|
19649
|
+
className: sidebar_module_css_default.accountItem,
|
|
19650
|
+
href: loginUrl,
|
|
19651
|
+
target: "_blank",
|
|
19652
|
+
rel: "noopener noreferrer",
|
|
19653
|
+
onClick: (event) => {
|
|
19654
|
+
event.stopPropagation();
|
|
19655
|
+
},
|
|
19656
|
+
children: t("accountMenuChatcodeOpen")
|
|
19657
|
+
}),
|
|
19658
|
+
chatcode?.available === true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [canStartChatcodeLogin && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
19659
|
+
type: "button",
|
|
19660
|
+
role: "menuitem",
|
|
19661
|
+
className: sidebar_module_css_default.accountItem,
|
|
19662
|
+
disabled: busy,
|
|
19663
|
+
onClick: startLogin,
|
|
19664
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), busy ? t("accountMenuChatcodeStarting") : t("accountMenuChatcodeLogin")]
|
|
19665
|
+
}), hasChatcodeAccount && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
19666
|
+
type: "button",
|
|
19667
|
+
role: "menuitem",
|
|
19668
|
+
className: sidebar_module_css_default.accountItem,
|
|
19669
|
+
disabled: busy,
|
|
19670
|
+
onClick: () => {
|
|
19671
|
+
setLogoutTarget("chatcode");
|
|
19672
|
+
},
|
|
19673
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), t("accountMenuLogout")]
|
|
19674
|
+
})] }),
|
|
19675
|
+
chatcode?.available === false && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
19676
|
+
type: "button",
|
|
19677
|
+
role: "menuitem",
|
|
19678
|
+
className: sidebar_module_css_default.accountItem,
|
|
19679
|
+
onClick: () => {
|
|
19680
|
+
setLogoutTarget("browser");
|
|
19681
|
+
},
|
|
19682
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutIcon, {}), t("accountMenuLogout")]
|
|
19683
|
+
})
|
|
19684
|
+
]
|
|
19685
|
+
}),
|
|
19686
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
19687
|
+
type: "button",
|
|
19688
|
+
className: sidebar_module_css_default.accountTrigger,
|
|
19689
|
+
"aria-expanded": open,
|
|
19690
|
+
"aria-haspopup": "menu",
|
|
19691
|
+
"aria-label": t("accountMenuLabel"),
|
|
19692
|
+
onClick: () => {
|
|
19693
|
+
setOpen((value) => !value);
|
|
19694
|
+
},
|
|
19695
|
+
children: [
|
|
19696
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19697
|
+
className: sidebar_module_css_default.accountAvatar,
|
|
19698
|
+
children: chatcodeName.slice(0, 1).toUpperCase()
|
|
19699
|
+
}),
|
|
19700
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19701
|
+
className: sidebar_module_css_default.accountName,
|
|
19702
|
+
children: chatcodeName
|
|
19703
|
+
}),
|
|
19704
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
19705
|
+
className: sidebar_module_css_default.accountPresence,
|
|
19706
|
+
style: { opacity: signedIn ? 1 : .25 },
|
|
19707
|
+
"aria-hidden": "true"
|
|
19708
|
+
})
|
|
19709
|
+
]
|
|
19710
|
+
}),
|
|
19711
|
+
logoutTarget !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LogoutConfirmDialog, {
|
|
19712
|
+
onCancel: () => {
|
|
19713
|
+
setLogoutTarget(void 0);
|
|
19714
|
+
},
|
|
19715
|
+
onConfirm: () => {
|
|
19716
|
+
setLogoutTarget(void 0);
|
|
19717
|
+
if (logoutTarget === "chatcode") logoutChatcode();
|
|
19718
|
+
else logout();
|
|
19719
|
+
}
|
|
19720
|
+
})
|
|
19721
|
+
]
|
|
19088
19722
|
});
|
|
19089
19723
|
}
|
|
19090
19724
|
//#endregion
|
|
@@ -21730,21 +22364,21 @@ window.__ModuleLoader__.load({
|
|
|
21730
22364
|
document.head.appendChild(tag);
|
|
21731
22365
|
}
|
|
21732
22366
|
var CodingPlanModelsSettings_module_css_default = {
|
|
21733
|
-
"
|
|
21734
|
-
"
|
|
22367
|
+
"models": "kn_HcG_models",
|
|
22368
|
+
"modelSelected": "kn_HcG_modelSelected",
|
|
21735
22369
|
"meta": "kn_HcG_meta",
|
|
21736
|
-
"refresh": "kn_HcG_refresh",
|
|
21737
22370
|
"selected": "kn_HcG_selected",
|
|
21738
|
-
"group": "kn_HcG_group",
|
|
21739
|
-
"heading": "kn_HcG_heading",
|
|
21740
|
-
"headingRow": "kn_HcG_headingRow",
|
|
21741
|
-
"modelId": "kn_HcG_modelId",
|
|
21742
22371
|
"modelTop": "kn_HcG_modelTop",
|
|
21743
|
-
"
|
|
21744
|
-
"
|
|
22372
|
+
"modelId": "kn_HcG_modelId",
|
|
22373
|
+
"refresh": "kn_HcG_refresh",
|
|
22374
|
+
"status": "kn_HcG_status",
|
|
21745
22375
|
"description": "kn_HcG_description",
|
|
21746
|
-
"
|
|
21747
|
-
"
|
|
22376
|
+
"model": "kn_HcG_model",
|
|
22377
|
+
"modelName": "kn_HcG_modelName",
|
|
22378
|
+
"headingRow": "kn_HcG_headingRow",
|
|
22379
|
+
"heading": "kn_HcG_heading",
|
|
22380
|
+
"modelDescription": "kn_HcG_modelDescription",
|
|
22381
|
+
"group": "kn_HcG_group"
|
|
21748
22382
|
};
|
|
21749
22383
|
//#endregion
|
|
21750
22384
|
//#region src/client/CodingPlanModelsSettings.tsx
|
|
@@ -22913,48 +23547,48 @@ window.__ModuleLoader__.load({
|
|
|
22913
23547
|
document.head.appendChild(tag);
|
|
22914
23548
|
}
|
|
22915
23549
|
var UsageHeatmapSection_module_css_default = {
|
|
22916
|
-
"
|
|
22917
|
-
"
|
|
22918
|
-
"
|
|
22919
|
-
"
|
|
23550
|
+
"cellDay": "iUwB6a_cellDay",
|
|
23551
|
+
"cellTokens": "iUwB6a_cellTokens",
|
|
23552
|
+
"cellToday": "iUwB6a_cellToday",
|
|
23553
|
+
"tooltipBelow": "iUwB6a_tooltipBelow",
|
|
23554
|
+
"state": "iUwB6a_state",
|
|
22920
23555
|
"monthLabel": "iUwB6a_monthLabel",
|
|
22921
|
-
"
|
|
23556
|
+
"section": "iUwB6a_section",
|
|
23557
|
+
"stats": "iUwB6a_stats",
|
|
23558
|
+
"dshSidebarUsageSpin": "iUwB6a_dshSidebarUsageSpin",
|
|
22922
23559
|
"stat": "iUwB6a_stat",
|
|
22923
|
-
"
|
|
22924
|
-
"
|
|
22925
|
-
"
|
|
22926
|
-
"
|
|
22927
|
-
"total": "iUwB6a_total",
|
|
23560
|
+
"empty": "iUwB6a_empty",
|
|
23561
|
+
"totalNumber": "iUwB6a_totalNumber",
|
|
23562
|
+
"cellHover": "iUwB6a_cellHover",
|
|
23563
|
+
"tooltipDate": "iUwB6a_tooltipDate",
|
|
22928
23564
|
"stateError": "iUwB6a_stateError",
|
|
22929
|
-
"
|
|
23565
|
+
"cellFuture": "iUwB6a_cellFuture",
|
|
23566
|
+
"footer": "iUwB6a_footer",
|
|
22930
23567
|
"overview": "iUwB6a_overview",
|
|
22931
|
-
"
|
|
22932
|
-
"
|
|
22933
|
-
"gridBody": "iUwB6a_gridBody",
|
|
22934
|
-
"spin": "iUwB6a_spin",
|
|
22935
|
-
"cell": "iUwB6a_cell",
|
|
23568
|
+
"legendSwatch": "iUwB6a_legendSwatch",
|
|
23569
|
+
"tooltip": "iUwB6a_tooltip",
|
|
22936
23570
|
"statLabel": "iUwB6a_statLabel",
|
|
23571
|
+
"totalValue": "iUwB6a_totalValue",
|
|
23572
|
+
"tooltipTokens": "iUwB6a_tooltipTokens",
|
|
22937
23573
|
"weekdays": "iUwB6a_weekdays",
|
|
22938
|
-
"
|
|
22939
|
-
"
|
|
22940
|
-
"totalUnit": "iUwB6a_totalUnit",
|
|
22941
|
-
"cellFuture": "iUwB6a_cellFuture",
|
|
22942
|
-
"state": "iUwB6a_state",
|
|
22943
|
-
"dshSidebarUsageSpin": "iUwB6a_dshSidebarUsageSpin",
|
|
22944
|
-
"tooltip": "iUwB6a_tooltip",
|
|
22945
|
-
"monthNav": "iUwB6a_monthNav",
|
|
22946
|
-
"cellDay": "iUwB6a_cellDay",
|
|
22947
|
-
"statValue": "iUwB6a_statValue",
|
|
22948
|
-
"footer": "iUwB6a_footer",
|
|
23574
|
+
"spin": "iUwB6a_spin",
|
|
23575
|
+
"headerRow": "iUwB6a_headerRow",
|
|
22949
23576
|
"tooltipToday": "iUwB6a_tooltipToday",
|
|
22950
|
-
"
|
|
22951
|
-
"
|
|
23577
|
+
"legend": "iUwB6a_legend",
|
|
23578
|
+
"grid": "iUwB6a_grid",
|
|
22952
23579
|
"monthButton": "iUwB6a_monthButton",
|
|
22953
|
-
"
|
|
22954
|
-
"
|
|
22955
|
-
"
|
|
23580
|
+
"monthNav": "iUwB6a_monthNav",
|
|
23581
|
+
"refreshButton": "iUwB6a_refreshButton",
|
|
23582
|
+
"statValue": "iUwB6a_statValue",
|
|
23583
|
+
"totalUnit": "iUwB6a_totalUnit",
|
|
23584
|
+
"tooltipSplit": "iUwB6a_tooltipSplit",
|
|
23585
|
+
"gridBody": "iUwB6a_gridBody",
|
|
23586
|
+
"group": "iUwB6a_group",
|
|
23587
|
+
"total": "iUwB6a_total",
|
|
23588
|
+
"todayLabel": "iUwB6a_todayLabel",
|
|
23589
|
+
"cell": "iUwB6a_cell",
|
|
22956
23590
|
"retry": "iUwB6a_retry",
|
|
22957
|
-
"
|
|
23591
|
+
"todayDot": "iUwB6a_todayDot"
|
|
22958
23592
|
};
|
|
22959
23593
|
//#endregion
|
|
22960
23594
|
//#region src/client/UsageHeatmapSection.tsx
|
|
@@ -23330,34 +23964,34 @@ window.__ModuleLoader__.load({
|
|
|
23330
23964
|
document.head.appendChild(tag);
|
|
23331
23965
|
}
|
|
23332
23966
|
var AiRatioSection_module_css_default = {
|
|
23333
|
-
"
|
|
23334
|
-
"
|
|
23335
|
-
"overview": "JtMahq_overview",
|
|
23967
|
+
"section": "JtMahq_section",
|
|
23968
|
+
"adoptedValue": "JtMahq_adoptedValue",
|
|
23336
23969
|
"cardRatio": "JtMahq_cardRatio",
|
|
23337
|
-
"
|
|
23338
|
-
"
|
|
23970
|
+
"dash": "JtMahq_dash",
|
|
23971
|
+
"exportButton": "JtMahq_exportButton",
|
|
23339
23972
|
"primaryButton": "JtMahq_primaryButton",
|
|
23340
23973
|
"dateInput": "JtMahq_dateInput",
|
|
23341
|
-
"
|
|
23342
|
-
"ratioCardHigh": "JtMahq_ratioCardHigh",
|
|
23343
|
-
"exportButton": "JtMahq_exportButton",
|
|
23344
|
-
"dash": "JtMahq_dash",
|
|
23345
|
-
"cardValue": "JtMahq_cardValue",
|
|
23346
|
-
"ratioCardLow": "JtMahq_ratioCardLow",
|
|
23974
|
+
"tableWrap": "JtMahq_tableWrap",
|
|
23347
23975
|
"table": "JtMahq_table",
|
|
23348
|
-
"
|
|
23349
|
-
"
|
|
23976
|
+
"num": "JtMahq_num",
|
|
23977
|
+
"ratioCardLow": "JtMahq_ratioCardLow",
|
|
23350
23978
|
"ratioValue": "JtMahq_ratioValue",
|
|
23351
|
-
"
|
|
23352
|
-
"tableHeading": "JtMahq_tableHeading",
|
|
23353
|
-
"card": "JtMahq_card",
|
|
23979
|
+
"ratioBar": "JtMahq_ratioBar",
|
|
23354
23980
|
"dateCell": "JtMahq_dateCell",
|
|
23981
|
+
"state": "JtMahq_state",
|
|
23982
|
+
"ratioCardHigh": "JtMahq_ratioCardHigh",
|
|
23355
23983
|
"cardLabel": "JtMahq_cardLabel",
|
|
23356
|
-
"
|
|
23984
|
+
"pager": "JtMahq_pager",
|
|
23985
|
+
"cardValue": "JtMahq_cardValue",
|
|
23986
|
+
"stateError": "JtMahq_stateError",
|
|
23987
|
+
"overview": "JtMahq_overview",
|
|
23988
|
+
"card": "JtMahq_card",
|
|
23357
23989
|
"commitsValue": "JtMahq_commitsValue",
|
|
23358
|
-
"
|
|
23990
|
+
"aiValue": "JtMahq_aiValue",
|
|
23359
23991
|
"pageInfo": "JtMahq_pageInfo",
|
|
23360
|
-
"
|
|
23992
|
+
"tableHeading": "JtMahq_tableHeading",
|
|
23993
|
+
"addedValue": "JtMahq_addedValue",
|
|
23994
|
+
"queryRow": "JtMahq_queryRow"
|
|
23361
23995
|
};
|
|
23362
23996
|
//#endregion
|
|
23363
23997
|
//#region src/client/AiRatioSection.tsx
|
|
@@ -23954,6 +24588,77 @@ window.__ModuleLoader__.load({
|
|
|
23954
24588
|
});
|
|
23955
24589
|
}
|
|
23956
24590
|
//#endregion
|
|
24591
|
+
//#region src/client/PluginMarketSettingsSection.tsx
|
|
24592
|
+
/** Replace the product's market settings seat through the public slot API. */
|
|
24593
|
+
function PluginMarketSettingsSection({ ctx, catalog }) {
|
|
24594
|
+
const sessionId = useCurrentSessionId(ctx) ?? "";
|
|
24595
|
+
const sessions = (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => ctx.sessions.list.subscribe(listener), [ctx]), (0, react.useCallback)(() => ctx.sessions.list.getSnapshot(), [ctx]));
|
|
24596
|
+
(0, react.useSyncExternalStore)((0, react.useCallback)((listener) => ctx.locale.subscribe(listener), [ctx]), (0, react.useCallback)(() => ctx.locale.getSnapshot(), [ctx]));
|
|
24597
|
+
const cwd = sessions.byId[sessionId]?.cwd;
|
|
24598
|
+
const key = `${sessionId}\0${cwd ?? ""}`;
|
|
24599
|
+
const [context, setContext] = (0, react.useState)();
|
|
24600
|
+
const [error, setError] = (0, react.useState)("");
|
|
24601
|
+
const [revision, setRevision] = (0, react.useState)(0);
|
|
24602
|
+
(0, react.useEffect)(() => {
|
|
24603
|
+
const controller = new AbortController();
|
|
24604
|
+
let active = true;
|
|
24605
|
+
setError("");
|
|
24606
|
+
api.pluginMarketContext({
|
|
24607
|
+
sessionId,
|
|
24608
|
+
cwd
|
|
24609
|
+
}, controller.signal).then((scope) => {
|
|
24610
|
+
if (active) setContext({
|
|
24611
|
+
key,
|
|
24612
|
+
scope
|
|
24613
|
+
});
|
|
24614
|
+
}).catch((cause) => {
|
|
24615
|
+
if (active) setError(cause instanceof Error ? cause.message : String(cause));
|
|
24616
|
+
});
|
|
24617
|
+
return () => {
|
|
24618
|
+
active = false;
|
|
24619
|
+
controller.abort();
|
|
24620
|
+
};
|
|
24621
|
+
}, [
|
|
24622
|
+
sessionId,
|
|
24623
|
+
cwd,
|
|
24624
|
+
revision
|
|
24625
|
+
]);
|
|
24626
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
24627
|
+
"data-chatcode-plugin-market-settings": true,
|
|
24628
|
+
children: context?.key === key ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginMarketView, {
|
|
24629
|
+
scope: context.scope,
|
|
24630
|
+
catalog,
|
|
24631
|
+
visible: true
|
|
24632
|
+
}, key) : error ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
24633
|
+
role: "status",
|
|
24634
|
+
children: error
|
|
24635
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
24636
|
+
type: "button",
|
|
24637
|
+
onClick: () => setRevision((value) => value + 1),
|
|
24638
|
+
children: t("pluginMarketRefresh")
|
|
24639
|
+
})] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
24640
|
+
role: "status",
|
|
24641
|
+
children: t("pluginMarketLoading")
|
|
24642
|
+
})
|
|
24643
|
+
});
|
|
24644
|
+
}
|
|
24645
|
+
function registerPluginMarketSettings(ctx, catalog) {
|
|
24646
|
+
ctx.slots.inject("settings.section", () => ctx.slots.register({
|
|
24647
|
+
name: "settings.section",
|
|
24648
|
+
id: "market",
|
|
24649
|
+
order: 40,
|
|
24650
|
+
priority: -10,
|
|
24651
|
+
label: () => t("pluginMarketTitle"),
|
|
24652
|
+
inject: () => ({
|
|
24653
|
+
ctx,
|
|
24654
|
+
catalog
|
|
24655
|
+
})
|
|
24656
|
+
}, ({ ctx, catalog }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PluginMarketSettingsSection, {
|
|
24657
|
+
ctx,
|
|
24658
|
+
catalog
|
|
24659
|
+
}) })));
|
|
24660
|
+
}
|
|
24661
|
+
//#endregion
|
|
23957
24662
|
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/layout.css.mjs
|
|
23958
24663
|
const css = "/**\n * Layout push: when a panel is open it OCCUPIES the layout instead of\n * floating over it — the app shell (#root, the AppFrame three-column grid)\n * gives up space. Only the center column is flexible (1fr), so the right\n * panel's width squeeze (margin-right on #root) lands exactly on the\n * conversation output and the input bar, like a VSCode sidebar.\n *\n * The width rides `calc(100% - var(...))` instead of a bare margin on a\n * full-width box: some desktop shells (DSH Desktop, #208) set #root to\n * width:100%, where a margin would overflow the viewport additively —\n * the calc keeps the box at exactly 100% minus the push in every shell.\n * Width and margin transition in lockstep (same variable, same duration\n * and easing), so expand/collapse animates the content width exactly as\n * the bare-margin version did.\n *\n * The bottom panel squeezes ONLY the center column — it must not cover the\n * app's own left sidebar or the right panel. The anchor is the frame's\n * center grid item through stable slot/data attributes, not a positional\n * path: current hosts put [data-slot=\"main\"] directly inside the center\n * column, while earlier hosts exposed [data-pane=\"conversation\"] or a\n * [data-slot=\"conversation\"] child. A stretched grid item shrinks by its\n * margins, so the conversation content (output + input bar) lifts without\n * touching the sidebars.\n *\n * The sizes ride CSS variables updated by the Sidebar shell (0 while\n * collapsed); expand/collapse animates both the margins and the panel\n * slides on the same theme duration. Drags disable the transition so the\n * layout tracks the pointer.\n */\n#root {\n margin-right: var(--dsh-sidebar-width, 0px);\n width: calc(100% - var(--dsh-sidebar-width, 0px));\n transition:\n margin-right var(--ds-transition-duration-slow) var(--ds-ease-in-out),\n width var(--ds-transition-duration-slow) var(--ds-ease-in-out);\n}\n\n/* The AppFrame's center column, anchored by data attributes (see above).\n Composite selector: current DSH puts `[data-slot=\"main\"]` directly inside\n the center grid item; earlier shells name the item\n `[data-pane=\"conversation\"]` or put `[data-slot=\"conversation\"]` inside it.\n Every selector resolves to that same center element. */\n#root :has(> [data-slot=\"main\"]),\n#root [data-dsh-frame] > [data-pane=\"conversation\"],\n#root :has(> [data-slot=\"conversation\"]) {\n margin-bottom: var(--dsh-sidebar-height, 0px);\n /* Grid/flex items default to min-height:auto. A long unbreakable token\n (OAuth URL) then grows this column past the viewport and clips the\n composer + left-rail Settings row. min-height:0 lets the cell shrink;\n overflow-wrap lets the token wrap instead of forcing its intrinsic\n size. The host's own descendants remain responsible for scrolling. */\n min-height: 0;\n overflow-wrap: anywhere;\n transition: margin-bottom var(--ds-transition-duration-slow) var(--ds-ease-in-out);\n}\n\n/* On older hosts, a collapsed sidebar puts the fallback cluster in the\n top-right corner. Push the DSH session header's right padding out so its\n utilities yield instead of hiding under the cluster. Current DSH hosts put\n the controls directly beside the Session log action and set\n data-dsh-native-sidebar-toggle, so this rule stays inactive. The Sidebar\n shell publishes the required reserve; 188px is the older-host fallback. Anchor on\n the header's slot host wrapper ([data-slot=\"conversation.session.header\"])\n rather than a positional path: DSH 0.1.x nests the header several levels\n under the center column. The Sidebar shell toggles the body attributes with\n the host capability and panel open state. */\nbody[data-dsh-sidebar-collapsed]:not([data-dsh-native-sidebar-toggle]) [data-slot=\"conversation.session.header\"] > header {\n padding-right: var(--dsh-sidebar-toggle-reserve, 188px);\n}\n\nbody[data-dsh-sidebar-dragging] #root,\nbody[data-dsh-sidebar-dragging] #root :has(> [data-slot=\"main\"]),\nbody[data-dsh-sidebar-dragging] #root [data-dsh-frame] > [data-pane=\"conversation\"],\nbody[data-dsh-sidebar-dragging] #root :has(> [data-slot=\"conversation\"]) {\n transition: none;\n}\n\n/* DSH 0.1.x gives external settings sections a generic gear and exposes no\n icon field in the settings.section contract. settings-nav-icon.ts marks\n only this plugin's localized row; render the requested Lucide\n gallery-horizontal-end SVG as a currentColor mask so it follows the native\n nav hover/active colors without changing the shell's 16px icon rhythm. */\n[data-dsh-better-sidebar-settings-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-settings-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 7v10'/%3E%3Cpath d='M6 5v14'/%3E%3Crect width='12' height='18' x='10' y='3' rx='2'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 7v10'/%3E%3Cpath d='M6 5v14'/%3E%3Crect width='12' height='18' x='10' y='3' rx='2'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n/* Some host/plugin settings rows receive their SVG only after the global\n plugin group is expanded. Paint stable fallbacks immediately so the nav\n never opens with blank icon slots; a late host SVG is hidden to avoid a\n duplicate. */\n[data-dsh-better-sidebar-general-nav] > svg:first-child,\n[data-dsh-better-sidebar-plugin-market-nav] > svg:first-child,\n[data-dsh-better-sidebar-ui-tweaks-nav] > svg:first-child,\n[data-dsh-better-sidebar-skill-market-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-general-nav]::before,\n[data-dsh-better-sidebar-plugin-market-nav]::before,\n[data-dsh-better-sidebar-ui-tweaks-nav]::before,\n[data-dsh-better-sidebar-skill-market-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n}\n\n[data-dsh-better-sidebar-general-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M19.1 4.9 17 7M7 17l-2.1 2.1'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3Cpath d='M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M19.1 4.9 17 7M7 17l-2.1 2.1'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-plugin-market-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='7' rx='1'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-ui-tweaks-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-skill-market-nav]::before {\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 3-1.7 4.3L6 9l4.3 1.7L12 15l1.7-4.3L18 9l-4.3-1.7Z'/%3E%3Cpath d='m5 15-.8 2.2L2 18l2.2.8L5 21l.8-2.2L8 18l-2.2-.8Z'/%3E%3Cpath d='m19 14-1 2.5-2.5 1L18 18.5l1 2.5 1-2.5 2.5-1-2.5-1Z'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m12 3-1.7 4.3L6 9l4.3 1.7L12 15l1.7-4.3L18 9l-4.3-1.7Z'/%3E%3Cpath d='m5 15-.8 2.2L2 18l2.2.8L5 21l.8-2.2L8 18l-2.2-.8Z'/%3E%3Cpath d='m19 14-1 2.5-2.5 1L18 18.5l1 2.5 1-2.5 2.5-1-2.5-1Z'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n/* The \"Token 用量\" heatmap section's nav row: same marker scheme as above,\n painting a calendar glyph (Lucide calendar-days) — a month of days is the\n section's whole subject. */\n[data-dsh-better-sidebar-usage-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-usage-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M16 2v4'/%3E%3Cpath d='M8 2v4'/%3E%3Cpath d='M3 10h18'/%3E%3Cpath d='M8 14h.01'/%3E%3Cpath d='M12 14h.01'/%3E%3Cpath d='M16 14h.01'/%3E%3Cpath d='M8 18h.01'/%3E%3Cpath d='M12 18h.01'/%3E%3Cpath d='M16 18h.01'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect width='18' height='18' x='3' y='4' rx='2'/%3E%3Cpath d='M16 2v4'/%3E%3Cpath d='M8 2v4'/%3E%3Cpath d='M3 10h18'/%3E%3Cpath d='M8 14h.01'/%3E%3Cpath d='M12 14h.01'/%3E%3Cpath d='M16 14h.01'/%3E%3Cpath d='M8 18h.01'/%3E%3Cpath d='M12 18h.01'/%3E%3Cpath d='M16 18h.01'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n[data-dsh-better-sidebar-ai-ratio-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-ai-ratio-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M2.25 13.75h11.5M4.5 13.75v-3.5M7.5 13.75v-6.5M10.5 13.75v-4.5' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3Cpath d='M13 .9l.5 1.6 1.6.5-1.6.5-.5 1.6-.5-1.6-1.6-.5 1.6-.5z' fill='black'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M2.25 13.75h11.5M4.5 13.75v-3.5M7.5 13.75v-6.5M10.5 13.75v-4.5' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3Cpath d='M13 .9l.5 1.6 1.6.5-1.6.5-.5 1.6-.5-1.6-1.6-.5 1.6-.5z' fill='black'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n/* The \"更新\" section's nav row: same marker scheme, painting an upward\n arrow (Lucide arrow-up) — an upgrade/one-click-update is the section's\n whole purpose. */\n[data-dsh-better-sidebar-update-nav] > svg:first-child {\n display: none;\n}\n\n[data-dsh-better-sidebar-update-nav]::before {\n content: '';\n flex: none;\n width: 16px;\n height: 16px;\n background: currentColor;\n -webkit-mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 7-7 7 7'/%3E%3Cpath d='M12 19V5'/%3E%3C/svg%3E\") center / contain no-repeat;\n mask: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 7-7 7 7'/%3E%3Cpath d='M12 19V5'/%3E%3C/svg%3E\") center / contain no-repeat;\n}\n\n@media (prefers-reduced-motion: reduce) {\n #root,\n #root :has(> [data-slot=\"main\"]),\n #root [data-dsh-frame] > [data-pane=\"conversation\"],\n #root :has(> [data-slot=\"conversation\"]) {\n transition: none;\n }\n}\n\n[data-dsh-hidden-runtime-context] {\n display: none !important;\n}\n";
|
|
23959
24664
|
const tagId = "dsh-external/dsh-better-sidebar/layout.css";
|
|
@@ -28530,6 +29235,69 @@ to{transform:translateX(-8px)}
|
|
|
28530
29235
|
};
|
|
28531
29236
|
}
|
|
28532
29237
|
//#endregion
|
|
29238
|
+
//#region src/client/ui-tweaks/sidebar-header.ts
|
|
29239
|
+
/** Compact sidebar chrome; the host retains every button, shortcut and drag surface. */
|
|
29240
|
+
const SIDEBAR_HEADER_CSS = `
|
|
29241
|
+
.dut-sidebar-header{height:44px !important;padding:0 4px !important;margin-bottom:8px !important;gap:8px !important}
|
|
29242
|
+
.dut-sidebar-brand{min-width:0 !important;background:transparent !important;box-shadow:none !important}
|
|
29243
|
+
.dut-sidebar-identity{height:24px !important;gap:8px !important}
|
|
29244
|
+
.dut-sidebar-wordmark{font:var(--dsw-font-s-strong-14) !important;letter-spacing:-.01em !important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
29245
|
+
.dut-sidebar-toggle{width:28px !important;height:28px !important;border-radius:8px !important;color:var(--dsw-alias-label-secondary) !important}
|
|
29246
|
+
.dut-sidebar-toggle:hover{background:var(--dsw-alias-interactive-bg-hover) !important}
|
|
29247
|
+
/* Reuse the original ChatCode primary-action red, scoped to this marked CTA. */
|
|
29248
|
+
.dut-sidebar-new-session{height:40px !important;justify-content:flex-start !important;gap:8px !important;margin:0 0 10px !important;padding:8px 10px !important;border:1px solid #9B0B09 !important;border-radius:10px !important;background:linear-gradient(135deg,#9B0B09,#b71916) !important;color:#fff !important;font:var(--dsw-font-s-strong-14) !important;font-weight:600 !important;box-shadow:none !important;transform:none !important}
|
|
29249
|
+
.dut-sidebar-new-session:hover{background:linear-gradient(135deg,#b71916,#cf302c) !important}
|
|
29250
|
+
.dut-sidebar-new-session:active{background:#9B0B09 !important}
|
|
29251
|
+
.dut-sidebar-new-session:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}
|
|
29252
|
+
.dut-sidebar-new-session > span:first-child{flex:1;min-width:0;overflow:hidden;mask-image:none !important}
|
|
29253
|
+
.dut-sidebar-new-session > span:first-child > span{width:auto !important;justify-content:flex-start !important;gap:8px !important;min-width:0}
|
|
29254
|
+
.dut-sidebar-new-session > span:first-child > span > svg{width:16px;height:16px;flex:none;color:inherit}
|
|
29255
|
+
.dut-sidebar-new-session > span:first-child > span > span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
29256
|
+
.dut-sidebar-new-session > span + span{opacity:1 !important;flex:none;color:color-mix(in srgb,currentColor 75%,transparent);font:var(--dsw-font-xxs-12)}
|
|
29257
|
+
/* Temporary navigation-only hide. Remove this block to restore Plugins;
|
|
29258
|
+
registrations, settings, installed plugins and other panel entries stay intact. */
|
|
29259
|
+
nav:is([aria-label="全局面板"],[aria-label="Global panels"]) > button:is([aria-label="插件"],[aria-label="Plugins"]),
|
|
29260
|
+
nav:is([aria-label="全局面板"],[aria-label="Global panels"]):has(> button:is([aria-label="插件"],[aria-label="Plugins"]):only-child){display:none !important}
|
|
29261
|
+
`;
|
|
29262
|
+
const HEADER_CLASSES = [
|
|
29263
|
+
"dut-sidebar-header",
|
|
29264
|
+
"dut-sidebar-brand",
|
|
29265
|
+
"dut-sidebar-identity",
|
|
29266
|
+
"dut-sidebar-wordmark",
|
|
29267
|
+
"dut-sidebar-toggle",
|
|
29268
|
+
"dut-sidebar-new-session"
|
|
29269
|
+
];
|
|
29270
|
+
/** Mark only the expanded brand row and its adjacent native New Session button. */
|
|
29271
|
+
function syncSidebarHeader() {
|
|
29272
|
+
const desired = /* @__PURE__ */ new Map();
|
|
29273
|
+
const mark = (element, className) => {
|
|
29274
|
+
if (!(element instanceof HTMLElement)) return;
|
|
29275
|
+
const classes = desired.get(element) ?? /* @__PURE__ */ new Set();
|
|
29276
|
+
classes.add(className);
|
|
29277
|
+
desired.set(element, classes);
|
|
29278
|
+
};
|
|
29279
|
+
for (const name of document.querySelectorAll(".dut-sidebar-brand-name,.dut-brand-title")) {
|
|
29280
|
+
const row = name.closest("[data-window-drag]");
|
|
29281
|
+
const logo = row?.querySelector(".dut-sidebar-logo,.dut-left-logo");
|
|
29282
|
+
if (!row || !logo) continue;
|
|
29283
|
+
const brand = [...row.children].find((child) => child.contains(name) && child.contains(logo));
|
|
29284
|
+
if (!brand) continue;
|
|
29285
|
+
mark(row, "dut-sidebar-header");
|
|
29286
|
+
mark(brand, "dut-sidebar-brand");
|
|
29287
|
+
mark(logo.closest("[class*=\"brandIdentity\"]"), "dut-sidebar-identity");
|
|
29288
|
+
mark(name, "dut-sidebar-wordmark");
|
|
29289
|
+
for (const button of row.querySelectorAll("button")) if (!brand.contains(button) && button !== brand) mark(button, "dut-sidebar-toggle");
|
|
29290
|
+
const next = row.nextElementSibling;
|
|
29291
|
+
if (next instanceof HTMLButtonElement) mark(next, "dut-sidebar-new-session");
|
|
29292
|
+
}
|
|
29293
|
+
for (const className of HEADER_CLASSES) for (const element of document.querySelectorAll(`.${className}`)) if (!desired.get(element)?.has(className)) element.classList.remove(className);
|
|
29294
|
+
for (const [element, classes] of desired) element.classList.add(...classes);
|
|
29295
|
+
}
|
|
29296
|
+
/** Restore native header styling when the branding effect is disposed. */
|
|
29297
|
+
function clearSidebarHeader() {
|
|
29298
|
+
for (const className of HEADER_CLASSES) for (const element of document.querySelectorAll(`.${className}`)) element.classList.remove(className);
|
|
29299
|
+
}
|
|
29300
|
+
//#endregion
|
|
28533
29301
|
//#region src/client/ui-tweaks/branding.tsx
|
|
28534
29302
|
/** Browser URL for the project-owned `assets/logo.svg` file. */
|
|
28535
29303
|
const PROJECT_LOGO_URL = "/_dsh/ui-tweaks/assets/logo.svg";
|
|
@@ -28537,6 +29305,8 @@ to{transform:translateX(-8px)}
|
|
|
28537
29305
|
const HERO_TITLE = "与世界,深一度对话";
|
|
28538
29306
|
const LEGACY_HOST_BRAND_TEXT = /DSH\s*(?:Local\s*Build|本地构建)|DeepSeek\s*Harness|ChatCode\s*CLI/giu;
|
|
28539
29307
|
const LEGACY_HOST_BRAND_LABEL_TEXT = /^(?:DSH\s*(?:Local\s*Build|本地构建)|ChatCode\s*CLI)$/iu;
|
|
29308
|
+
const BRAND_SURFACE = "[class*=\"brandIdentity\"],[class*=\"brandName\"],[class*=\"headline\"],.dut-sidebar-brand-name";
|
|
29309
|
+
const USER_CONTENT = "input,textarea,[contenteditable],[role=\"textbox\"],pre,code,script,style";
|
|
28540
29310
|
const HOST_BUILD_VERSION_TEXT = /^v?\d+\.\d+\.\d+(?:[-+][0-9a-z.-]+)*$/iu;
|
|
28541
29311
|
const HERO_HEADLINE = /探索未至之境/u;
|
|
28542
29312
|
const HERO_PREVIEW_TEXT = /^(?:预览版|Preview)$/iu;
|
|
@@ -28603,14 +29373,11 @@ body:not([data-ds-dark-theme]) .dut-unicom-primary-action:active{transform:trans
|
|
|
28603
29373
|
hovered, the host owns the complete interaction treatment again. */
|
|
28604
29374
|
body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B09 !important}
|
|
28605
29375
|
.dut-project-logo{display:block;object-fit:contain}
|
|
28606
|
-
.dut-left-logo{width:
|
|
28607
|
-
.dut-brand-title{font-
|
|
28608
|
-
.dut-sidebar-logo{width:
|
|
28609
|
-
|
|
28610
|
-
|
|
28611
|
-
44px knot is not cropped by that host-owned overflow boundary. */
|
|
28612
|
-
[class*="brandIdentity"]:has(.dut-sidebar-logo){height:44px !important}
|
|
28613
|
-
.dut-sidebar-brand-name{font-size:18px !important;line-height:22px !important;font-weight:600 !important;letter-spacing:0 !important;white-space:nowrap}
|
|
29376
|
+
.dut-left-logo{width:24px !important;height:24px !important}
|
|
29377
|
+
.dut-brand-title{font:var(--dsw-font-s-strong-14) !important}
|
|
29378
|
+
.dut-sidebar-logo{width:24px !important;height:24px !important}
|
|
29379
|
+
.dut-sidebar-brand-name{font:var(--dsw-font-s-strong-14) !important;letter-spacing:-.01em !important;white-space:nowrap}
|
|
29380
|
+
${SIDEBAR_HEADER_CSS}
|
|
28614
29381
|
.dut-brand-version{display:none !important}
|
|
28615
29382
|
.dut-hero-preview{display:none !important}
|
|
28616
29383
|
.dut-hero-logo{width:60px !important;height:60px !important}
|
|
@@ -28619,8 +29386,10 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28619
29386
|
.dut-settings-logo{width:19px;height:19px;object-fit:contain}
|
|
28620
29387
|
`;
|
|
28621
29388
|
function hasPrimaryLabel(button) {
|
|
29389
|
+
if (button.closest("[data-chatcode-plugin-market], [data-plugin-module]")) return false;
|
|
28622
29390
|
const label = `${button.textContent ?? ""} ${button.getAttribute("aria-label") ?? ""} ${button.title}`.trim().toLowerCase();
|
|
28623
|
-
|
|
29391
|
+
if (button.classList.contains("dut-sidebar-brand") || button.classList.contains("dut-sidebar-new-session")) return false;
|
|
29392
|
+
return /(?:^|\s)(send|install)(?:\s|$)|发送|(?:^|\s)安装(?:\s|$)/u.test(label);
|
|
28624
29393
|
}
|
|
28625
29394
|
/** Replace one host SVG while retaining its generated layout class names. */
|
|
28626
29395
|
function replaceHostLogo(svg) {
|
|
@@ -28687,17 +29456,21 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28687
29456
|
badge.classList.add("dut-hero-preview");
|
|
28688
29457
|
badge.setAttribute("aria-hidden", "true");
|
|
28689
29458
|
});
|
|
28690
|
-
document.querySelectorAll(
|
|
28691
|
-
|
|
28692
|
-
|
|
28693
|
-
|
|
28694
|
-
|
|
28695
|
-
|
|
29459
|
+
document.querySelectorAll(BRAND_SURFACE).forEach((surface) => {
|
|
29460
|
+
surface.querySelectorAll("*").forEach((element) => {
|
|
29461
|
+
if (element.closest(USER_CONTENT) !== null) return;
|
|
29462
|
+
if (element.childElementCount !== 0 || !LEGACY_HOST_BRAND_LABEL_TEXT.test(element.textContent?.trim() ?? "")) return;
|
|
29463
|
+
if (element.textContent !== PROJECT_NAME) element.textContent = PROJECT_NAME;
|
|
29464
|
+
element.classList.add("dut-brand-title");
|
|
29465
|
+
replaceLogoBesideBrandLabel(element);
|
|
29466
|
+
hideVersionBesideBrandLabel(element);
|
|
29467
|
+
});
|
|
28696
29468
|
});
|
|
28697
29469
|
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
|
|
28698
29470
|
let node;
|
|
28699
29471
|
while ((node = walker.nextNode()) !== null) {
|
|
28700
|
-
|
|
29472
|
+
const parent = node.parentElement;
|
|
29473
|
+
if (parent === null || parent.closest(USER_CONTENT) !== null || parent.closest(BRAND_SURFACE) === null) continue;
|
|
28701
29474
|
if (LEGACY_HOST_BRAND_TEXT.test(node.data)) {
|
|
28702
29475
|
LEGACY_HOST_BRAND_TEXT.lastIndex = 0;
|
|
28703
29476
|
node.data = node.data.replace(LEGACY_HOST_BRAND_TEXT, PROJECT_NAME);
|
|
@@ -28717,6 +29490,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28717
29490
|
const svg = host.matches("svg") ? host : host.querySelector("svg");
|
|
28718
29491
|
if (svg instanceof SVGElement) replaceHostLogo(svg);
|
|
28719
29492
|
});
|
|
29493
|
+
syncSidebarHeader();
|
|
28720
29494
|
document.querySelectorAll("button").forEach((button) => {
|
|
28721
29495
|
button.classList.toggle("dut-unicom-primary-action", hasPrimaryLabel(button));
|
|
28722
29496
|
});
|
|
@@ -28761,11 +29535,50 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28761
29535
|
return () => {
|
|
28762
29536
|
observer.disconnect();
|
|
28763
29537
|
if (frame !== void 0) window.cancelAnimationFrame(frame);
|
|
29538
|
+
clearSidebarHeader();
|
|
28764
29539
|
favicon.remove();
|
|
28765
29540
|
style.remove();
|
|
28766
29541
|
};
|
|
28767
29542
|
}
|
|
28768
29543
|
//#endregion
|
|
29544
|
+
//#region src/client/ui-tweaks/typography.ts
|
|
29545
|
+
/** Font overrides for the conversation, preserving the live theme families. */
|
|
29546
|
+
/**
|
|
29547
|
+
* Apply the UI Tweaks size and spacing preferences to the host's prose tokens.
|
|
29548
|
+
* @param fontSize - Selected body size in pixels.
|
|
29549
|
+
* @param lineHeight - Vertical-spacing unit; 16 retains the normal rhythm.
|
|
29550
|
+
* @param codeFontSize - Selected code-block size in pixels.
|
|
29551
|
+
* @returns Theme-token overrides for a runtime stylesheet.
|
|
29552
|
+
*/
|
|
29553
|
+
function buildFontCss(fontSize, lineHeight, codeFontSize) {
|
|
29554
|
+
const parts = [];
|
|
29555
|
+
const base = "var(--dsw-font-markdown-base-font-family, var(--dsw-font-family))";
|
|
29556
|
+
const code = "var(--dsw-font-markdown-code-block-font-family, var(--ds-font-family-code))";
|
|
29557
|
+
const token = (name, size, leading, family, weight = 400, style = "normal") => {
|
|
29558
|
+
const line = Math.max(12, Math.round(leading * (lineHeight / 16)));
|
|
29559
|
+
parts.push(`--${name}:${style} ${weight} ${size}px/${line}px ${family}`);
|
|
29560
|
+
parts.push(`--${name}-font-size:${size}px`);
|
|
29561
|
+
parts.push(`--${name}-line-height:${line}px`);
|
|
29562
|
+
parts.push(`--${name}-font-weight:${weight}`);
|
|
29563
|
+
parts.push(`--${name}-font-style:${style}`);
|
|
29564
|
+
};
|
|
29565
|
+
const bodyLine = fontSize + 10;
|
|
29566
|
+
token("dsw-font-markdown-base", fontSize, bodyLine, base);
|
|
29567
|
+
token("dsw-font-markdown-base-strong", fontSize, bodyLine, base, 600);
|
|
29568
|
+
token("dsw-font-markdown-base-italic", fontSize, bodyLine, base, 400, "italic");
|
|
29569
|
+
token("dsw-font-markdown-base-strong-italic", fontSize, bodyLine, base, 600, "italic");
|
|
29570
|
+
token("dsw-font-markdown-h1", fontSize + 4, bodyLine + 4, base, 600);
|
|
29571
|
+
token("dsw-font-markdown-h2", fontSize + 2, bodyLine + 2, base, 600);
|
|
29572
|
+
token("dsw-font-markdown-h3", fontSize + 1, bodyLine + 1, base, 600);
|
|
29573
|
+
token("dsw-font-markdown-h4", fontSize, bodyLine, base, 600);
|
|
29574
|
+
token("dsw-font-markdown-table", fontSize, bodyLine, base);
|
|
29575
|
+
token("dsw-font-markdown-table-head", fontSize, bodyLine, base, 500);
|
|
29576
|
+
token("dsw-font-markdown-code", codeFontSize, codeFontSize + 7, "var(--dsw-font-markdown-code-font-family, var(--ds-font-family-code))");
|
|
29577
|
+
token("dsw-font-markdown-code-block", codeFontSize, codeFontSize + 7, code);
|
|
29578
|
+
token("dsw-font-markdown-code-block-small", Math.max(8, codeFontSize - 2), codeFontSize + 3, code);
|
|
29579
|
+
return `body{${parts.join(";")}}`;
|
|
29580
|
+
}
|
|
29581
|
+
//#endregion
|
|
28769
29582
|
//#region src/client/ui-tweaks/index.tsx
|
|
28770
29583
|
/**
|
|
28771
29584
|
* dsh-ui-tweaks — browser half.
|
|
@@ -28777,12 +29590,12 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28777
29590
|
*/
|
|
28778
29591
|
const NS = "ui-tweaks";
|
|
28779
29592
|
const SETTINGS_ROUTE = "/_dsh/ui-tweaks/settings";
|
|
28780
|
-
const DEFAULT_FONT_SIZE =
|
|
29593
|
+
const DEFAULT_FONT_SIZE = 14;
|
|
28781
29594
|
const MIN_FONT_SIZE = 10;
|
|
28782
29595
|
const MAX_FONT_SIZE = 32;
|
|
28783
29596
|
/** Legacy: code font as a percentage of the message font size (81% = stock 13/16). */
|
|
28784
29597
|
const DEFAULT_CODE_FONT_SCALE = 81;
|
|
28785
|
-
/**
|
|
29598
|
+
/** Default absolute code-block size, paired with 14px prose. */
|
|
28786
29599
|
const DEFAULT_CODE_FONT_SIZE = 13;
|
|
28787
29600
|
const MIN_CODE_FONT_SIZE = 8;
|
|
28788
29601
|
const MAX_CODE_FONT_SIZE = 32;
|
|
@@ -28800,7 +29613,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28800
29613
|
fontSize: "Message font size",
|
|
28801
29614
|
fontSizeHint: `Number between ${MIN_FONT_SIZE} and ${MAX_FONT_SIZE}; applies to message text, headings, tables and code.`,
|
|
28802
29615
|
codeFontSize: "Code font size",
|
|
28803
|
-
codeFontSizeHint: `Absolute code size in px (${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}); ${DEFAULT_CODE_FONT_SIZE}px is ChatCode CLI's default at a
|
|
29616
|
+
codeFontSizeHint: `Absolute code size in px (${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}); ${DEFAULT_CODE_FONT_SIZE}px is ChatCode CLI's default at a 14px body. Applies to code blocks; inline code follows proportionally.`,
|
|
28804
29617
|
lineHeight: "Line spacing",
|
|
28805
29618
|
lineHeightHint: `Base vertical spacing in px: gaps between message rows (Think ↔ tool cards) and blocks inside one reply, plus text line-height, paragraph and list margins, all scale from it; ${DEFAULT_LINE_HEIGHT} is ChatCode CLI's default.`,
|
|
28806
29619
|
tableStyle: "Table style",
|
|
@@ -28997,7 +29810,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28997
29810
|
fontSize: "消息字体大小",
|
|
28998
29811
|
fontSizeHint: `取值 ${MIN_FONT_SIZE}–${MAX_FONT_SIZE},作用于消息正文、标题、表格与代码。`,
|
|
28999
29812
|
codeFontSize: "代码字号",
|
|
29000
|
-
codeFontSizeHint: `代码绝对字号,取值 ${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}px;${DEFAULT_CODE_FONT_SIZE}px 为 ChatCode CLI 默认(正文
|
|
29813
|
+
codeFontSizeHint: `代码绝对字号,取值 ${MIN_CODE_FONT_SIZE}–${MAX_CODE_FONT_SIZE}px;${DEFAULT_CODE_FONT_SIZE}px 为 ChatCode CLI 默认(正文 14 时)。作用于代码块,行内代码按比例跟随。`,
|
|
29001
29814
|
lineHeight: "行高",
|
|
29002
29815
|
lineHeightHint: `回复区垂直间距的基准值:消息之间(如 Think ↔ 工具卡片)、回复内块之间、正文行高、段落与列表边距都按它缩放;取值 ${MIN_LINE_HEIGHT}–${MAX_LINE_HEIGHT}px,${DEFAULT_LINE_HEIGHT} 为 ChatCode CLI 默认。`,
|
|
29003
29816
|
tableStyle: "表格样式",
|
|
@@ -29186,9 +29999,10 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
29186
29999
|
};
|
|
29187
30000
|
function resolveValue(value) {
|
|
29188
30001
|
const fontSize = typeof value?.fontSize === "number" ? value.fontSize : DEFAULT_FONT_SIZE;
|
|
30002
|
+
const codeFontScale = value?.codeFontScale ?? DEFAULT_CODE_FONT_SCALE;
|
|
29189
30003
|
return {
|
|
29190
30004
|
fontSize,
|
|
29191
|
-
codeFontSize: typeof value?.codeFontSize === "number" ? Math.min(MAX_CODE_FONT_SIZE, Math.max(MIN_CODE_FONT_SIZE, value.codeFontSize)) : Math.max(8, Math.round(fontSize * (13 / 16) * (
|
|
30005
|
+
codeFontSize: typeof value?.codeFontSize === "number" ? Math.min(MAX_CODE_FONT_SIZE, Math.max(MIN_CODE_FONT_SIZE, value.codeFontSize)) : codeFontScale === DEFAULT_CODE_FONT_SCALE ? DEFAULT_CODE_FONT_SIZE : Math.max(8, Math.round(fontSize * (13 / 16) * (codeFontScale / DEFAULT_CODE_FONT_SCALE))),
|
|
29192
30006
|
lineHeight: typeof value?.lineHeight === "number" ? value.lineHeight : DEFAULT_LINE_HEIGHT,
|
|
29193
30007
|
tableStyle: value?.tableStyle === "claude" ? "claude" : "default",
|
|
29194
30008
|
gitBarEnabled: value?.gitBarEnabled ?? false,
|
|
@@ -29206,41 +30020,6 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
29206
30020
|
notifySound: value?.notifySound ?? false
|
|
29207
30021
|
};
|
|
29208
30022
|
}
|
|
29209
|
-
/** Scale one theme px value proportionally to the chosen base size. */
|
|
29210
|
-
function rel(base, fontSize) {
|
|
29211
|
-
return Math.max(8, Math.round(base / DEFAULT_FONT_SIZE * fontSize));
|
|
29212
|
-
}
|
|
29213
|
-
/** Rebuild the markdown font tokens for the chosen base size, keeping the theme faces. */
|
|
29214
|
-
function buildFontCss(fontSize, lineHeight, codeFontSize) {
|
|
29215
|
-
const cs = getComputedStyle(document.body);
|
|
29216
|
-
const fam = (name, fallback) => {
|
|
29217
|
-
const value = cs.getPropertyValue(name).trim();
|
|
29218
|
-
return value.length > 0 ? value : fallback;
|
|
29219
|
-
};
|
|
29220
|
-
const base = fam("--dsw-font-markdown-base-font-family", "-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif");
|
|
29221
|
-
const code = fam("--dsw-font-markdown-code-font-family", "\"SF Mono\", Consolas, monospace");
|
|
29222
|
-
const codeBlock = fam("--dsw-font-markdown-code-block-font-family", "\"SF Mono\", Consolas, monospace");
|
|
29223
|
-
const parts = [];
|
|
29224
|
-
const token = (shorthand, size, baseLine, family) => {
|
|
29225
|
-
const line = Math.max(12, Math.round(baseLine / DEFAULT_FONT_SIZE * fontSize * (lineHeight / DEFAULT_LINE_HEIGHT)));
|
|
29226
|
-
parts.push(`--${shorthand}:${size}px/${line}px ${family}`);
|
|
29227
|
-
parts.push(`--${shorthand}-font-size:${size}px`);
|
|
29228
|
-
parts.push(`--${shorthand}-line-height:${line}px`);
|
|
29229
|
-
};
|
|
29230
|
-
const codePx = (blockRatio) => Math.max(8, Math.round(codeFontSize * blockRatio));
|
|
29231
|
-
token("dsw-font-markdown-base", fontSize, 28, base);
|
|
29232
|
-
token("dsw-font-markdown-base-strong", fontSize, 28, base);
|
|
29233
|
-
token("dsw-font-markdown-base-italic", fontSize, 28, base);
|
|
29234
|
-
token("dsw-font-markdown-base-strong-italic", fontSize, 28, base);
|
|
29235
|
-
token("dsw-font-markdown-h1", rel(24, fontSize), 34, base);
|
|
29236
|
-
token("dsw-font-markdown-h2", rel(22, fontSize), 32, base);
|
|
29237
|
-
token("dsw-font-markdown-h3", rel(20, fontSize), 30, base);
|
|
29238
|
-
token("dsw-font-markdown-h4", fontSize, 28, base);
|
|
29239
|
-
token("dsw-font-markdown-code", codePx(14 / 13), 22, code);
|
|
29240
|
-
token("dsw-font-markdown-code-block", codePx(1), 22, codeBlock);
|
|
29241
|
-
token("dsw-font-markdown-code-block-small", codePx(12 / 13), 18, codeBlock);
|
|
29242
|
-
return `body{${parts.join(";")}}`;
|
|
29243
|
-
}
|
|
29244
30023
|
/**
|
|
29245
30024
|
* Claude Desktop-ish markdown table look: light-gray rounded cell cards with
|
|
29246
30025
|
* small gaps, no borders. Cells share the theme's inline-code background and
|
|
@@ -29248,7 +30027,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
29248
30027
|
* renderer, so headers and cells always match.
|
|
29249
30028
|
*/
|
|
29250
30029
|
const CLAUDE_TABLE_CSS = `
|
|
29251
|
-
div[data-slot="conversation.chat.node"] table{
|
|
30030
|
+
div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table{
|
|
29252
30031
|
border-collapse:separate !important;
|
|
29253
30032
|
border-spacing:3px !important;
|
|
29254
30033
|
width:100% !important;
|
|
@@ -29259,7 +30038,7 @@ div[data-slot="conversation.chat.node"] table{
|
|
|
29259
30038
|
border:none !important;
|
|
29260
30039
|
font-size:var(--dsw-font-markdown-base-font-size) !important;
|
|
29261
30040
|
}
|
|
29262
|
-
div[data-slot="conversation.chat.node"] table thead th{
|
|
30041
|
+
div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table thead th{
|
|
29263
30042
|
background:var(--dsw-alias-markdown-inline-code) !important;
|
|
29264
30043
|
color:inherit !important;
|
|
29265
30044
|
font-weight:400 !important;
|
|
@@ -29268,7 +30047,7 @@ div[data-slot="conversation.chat.node"] table thead th{
|
|
|
29268
30047
|
border:none !important;
|
|
29269
30048
|
border-radius:6px !important;
|
|
29270
30049
|
}
|
|
29271
|
-
div[data-slot="conversation.chat.node"] table tbody td{
|
|
30050
|
+
div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table tbody td{
|
|
29272
30051
|
background:var(--dsw-alias-markdown-inline-code) !important;
|
|
29273
30052
|
color:inherit !important;
|
|
29274
30053
|
font-size:inherit !important;
|
|
@@ -29277,8 +30056,8 @@ div[data-slot="conversation.chat.node"] table tbody td{
|
|
|
29277
30056
|
border:none !important;
|
|
29278
30057
|
border-radius:6px !important;
|
|
29279
30058
|
}
|
|
29280
|
-
div[data-slot="conversation.chat.node"] table code,
|
|
29281
|
-
div[data-slot="conversation.chat.node"] table pre{
|
|
30059
|
+
div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table code,
|
|
30060
|
+
div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table pre{
|
|
29282
30061
|
background:transparent !important;
|
|
29283
30062
|
border:none !important;
|
|
29284
30063
|
box-shadow:none !important;
|
|
@@ -29287,24 +30066,23 @@ div[data-slot="conversation.chat.node"] table pre{
|
|
|
29287
30066
|
function buildRuntimeCss(value) {
|
|
29288
30067
|
const rules = [];
|
|
29289
30068
|
rules.push(buildFontCss(value.fontSize, value.lineHeight, value.codeFontSize));
|
|
29290
|
-
rules.push(`[data-chat-flow-kind="user"] [class
|
|
29291
|
-
rules.push(`[data-composer-card
|
|
29292
|
-
rules.push(`[data-
|
|
29293
|
-
|
|
29294
|
-
const stockCodeBlock = value.fontSize * (13 / 16);
|
|
30069
|
+
rules.push(`[data-chat-flow-kind="user"] [class*="_bubble"],[data-chat-flow-kind="steering"] [class*="_bubble"],[data-pending-steering] [class*="_bubble"]{font-size:var(--dsw-font-markdown-base-font-size) !important;line-height:var(--dsw-font-markdown-base-line-height) !important}`);
|
|
30070
|
+
rules.push(`[data-composer-card]{font:var(--dsw-font-markdown-base) !important}`);
|
|
30071
|
+
rules.push(`div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table th,div[data-slot="conversation.chat.node"] [class*="_markdown"]:not([data-markdown-variant="compact"]) table td{font-size:var(--dsw-font-markdown-base-font-size) !important;line-height:var(--dsw-font-markdown-base-line-height) !important}`);
|
|
30072
|
+
const stockCodeBlock = value.fontSize * (13 / 14);
|
|
29295
30073
|
if (Math.abs(value.codeFontSize - stockCodeBlock) > .5) {
|
|
29296
|
-
const em = (.
|
|
29297
|
-
rules.push(`div[data-slot="conversation.chat.node"] div[class*="
|
|
30074
|
+
const em = (.92 * (value.codeFontSize / stockCodeBlock)).toFixed(3);
|
|
30075
|
+
rules.push(`div[data-slot="conversation.chat.node"] div[class*="_markdown"]:not([data-markdown-variant="compact"]) :not(pre)>code{font-size:${em}em !important}`);
|
|
29298
30076
|
}
|
|
29299
30077
|
if (value.lineHeight !== DEFAULT_LINE_HEIGHT) {
|
|
29300
30078
|
const n = value.lineHeight;
|
|
29301
|
-
const md = `div[data-slot="conversation.chat.node"] div[class*="
|
|
29302
|
-
const liGap = Math.max(2, Math.round(
|
|
30079
|
+
const md = `div[data-slot="conversation.chat.node"] div[class*="_markdown"]:not([data-markdown-variant="compact"])`;
|
|
30080
|
+
const liGap = Math.max(2, Math.round(4 * n / DEFAULT_LINE_HEIGHT));
|
|
29303
30081
|
const liPGap = Math.max(2, Math.round(8 * n / DEFAULT_LINE_HEIGHT));
|
|
29304
|
-
rules.push(`div[data-slot="conversation.view"]
|
|
29305
|
-
rules.push(`div[data-slot="conversation.chat.node"]
|
|
29306
|
-
rules.push(`${md} p{margin:${n}px 0 !important}`);
|
|
29307
|
-
rules.push(`${md} ul,${md} ol{margin:${n}px 0 !important}`);
|
|
30082
|
+
rules.push(`div[data-slot="conversation.view"] [data-chat-flow]{gap:${n}px !important}`);
|
|
30083
|
+
rules.push(`div[data-slot="conversation.chat.node"] [data-assistant-body]{--dsh-assistant-block-gap:${n}px}`);
|
|
30084
|
+
rules.push(`${md} p{margin:${Math.round(.75 * n)}px 0 !important}`);
|
|
30085
|
+
rules.push(`${md} ul,${md} ol{margin:${Math.round(.75 * n)}px 0 !important}`);
|
|
29308
30086
|
rules.push(`${md} pre{margin:${n}px 0 !important}`);
|
|
29309
30087
|
const codePad = Math.max(4, Math.round(16 * n / DEFAULT_LINE_HEIGHT));
|
|
29310
30088
|
rules.push(`${md} pre{padding-top:${codePad}px !important;padding-bottom:${codePad}px !important}`);
|
|
@@ -29314,7 +30092,7 @@ div[data-slot="conversation.chat.node"] table pre{
|
|
|
29314
30092
|
}
|
|
29315
30093
|
rules.push(`${md} li:not(:first-child){margin-top:${liGap}px !important}`);
|
|
29316
30094
|
rules.push(`${md} li>p{margin:${liPGap}px 0 !important}`);
|
|
29317
|
-
rules.push(`${md} h1,${md} h2,${md} h3{margin:${
|
|
30095
|
+
rules.push(`${md} h1,${md} h2,${md} h3{margin:${Math.round(1.5 * n)}px 0 ${Math.round(.75 * n)}px !important}`);
|
|
29318
30096
|
rules.push(`${md} h4,${md} h5,${md} h6{margin:${n}px 0 !important}`);
|
|
29319
30097
|
rules.push(`${md} hr{margin:${2 * n}px 0 !important}`);
|
|
29320
30098
|
rules.push(`${md} blockquote{margin:${n}px 0 0 !important}`);
|
|
@@ -30827,6 +31605,11 @@ div[data-slot="conversation.chat.node"] table pre{
|
|
|
30827
31605
|
};
|
|
30828
31606
|
}, "dsh-better-sidebar: better-locale lazy integration");
|
|
30829
31607
|
const sidebarStore = createSidebarStore();
|
|
31608
|
+
const pluginMarketCatalog = createPluginMarketCatalog();
|
|
31609
|
+
ctx.effect(() => {
|
|
31610
|
+
pluginMarketCatalog.start();
|
|
31611
|
+
return () => pluginMarketCatalog.dispose();
|
|
31612
|
+
}, "dsh-better-sidebar: plugin catalogs");
|
|
30830
31613
|
ctx.effect(() => installSessionPins(ctx, sidebarStore), "dsh-better-sidebar: session pins");
|
|
30831
31614
|
const service = createBetterSidebarService(sidebarStore);
|
|
30832
31615
|
ctx.provide("betterSidebar", service);
|
|
@@ -30839,7 +31622,10 @@ div[data-slot="conversation.chat.node"] table pre{
|
|
|
30839
31622
|
const tabs = allLeaves(snapshot.state.splits).concat(allLeaves(snapshot.state.bottomSplits)).flatMap((leaf) => leaf.tabs);
|
|
30840
31623
|
for (const tab of tabs) if (tab.type === "terminal" && !isAgentTabId(tab.id) && tab.title === fallbackTitle) service.updateTab(tab.id, { title: name });
|
|
30841
31624
|
}).catch(() => {});
|
|
30842
|
-
ctx.effect(() => registerBuiltins(ctx, service, {
|
|
31625
|
+
ctx.effect(() => registerBuiltins(ctx, service, {
|
|
31626
|
+
terminalTitle: () => terminalTitle,
|
|
31627
|
+
pluginMarketCatalog
|
|
31628
|
+
}), "dsh-better-sidebar: register built-in tabs and viewers");
|
|
30843
31629
|
const fail = (phase, error) => {
|
|
30844
31630
|
console.error(`[dsh-better-sidebar] ${phase} error:`, error);
|
|
30845
31631
|
try {
|
|
@@ -31047,6 +31833,7 @@ div[data-slot="conversation.chat.node"] table pre{
|
|
|
31047
31833
|
"Skill marketplace",
|
|
31048
31834
|
"Skill Market"
|
|
31049
31835
|
], SKILL_MARKET_NAV_MARKER), "dsh-better-sidebar: skill market navigation icon fallback");
|
|
31836
|
+
registerPluginMarketSettings(ctx, pluginMarketCatalog);
|
|
31050
31837
|
ctx.slots.inject("settings.section", () => ctx.slots.register({
|
|
31051
31838
|
name: "settings.section",
|
|
31052
31839
|
id: "better-sidebar",
|