@wenbin_wb/dsh-bridge 2.10.13 → 2.10.15
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/CHANGELOG.md +35 -0
- package/client/client.js +413 -18
- package/client/index.js +163 -3
- package/client/mobile-styles.js +305 -13
- package/lib/cloudflared-manager.mjs +19 -6
- package/lib/feishu/lark-bundled.mjs +230 -76
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,41 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [v2.10.15] - 2026-09-25
|
|
8
|
+
|
|
9
|
+
> 本版为设置页关闭按钮的可用性微调:手机上「✕」更容易点中。
|
|
10
|
+
|
|
11
|
+
### 🐞 修复
|
|
12
|
+
|
|
13
|
+
- **设置页「✕」触控区偏小**:宿主原生为 28px(本插件移动端曾放到 32px),低于移动端推荐的可点尺寸。现放大到 **40×40**,并把 `top/right` 调整为 4px 使按钮中心与标题/返回行的文字中心基本重合(实测相差 1px);标题右侧 52px 留白仍完整覆盖按钮 44px 的占位,长标题与不可折行超长 token 都不会钻到按钮下面。
|
|
14
|
+
|
|
15
|
+
> ⚠️ 生效说明:纯前端样式调整,刷新页面即可生效,无需重启 dsh。
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## [v2.10.14] - 2026-09-25
|
|
20
|
+
|
|
21
|
+
> 本版为移动端设置页的体验修复:解决内容被静默裁切、窄屏菜单拥挤、弹窗「✕」位置错乱,以及插件市场的安装确认框被设置弹窗盖住(点「安装」没反应)/ 矮屏下超出屏幕点不到按钮等问题。纯前端样式与交互调整,刷新页面即生效。
|
|
22
|
+
|
|
23
|
+
### 🐞 修复
|
|
24
|
+
|
|
25
|
+
- **手机设置页内容被静默裁切、页签点不到**:插件此前给设置内容区强制 `overflow-x: hidden`,把宿主本可横向滚动的内容降级成「看不到也滑不出来」(375px 下溢出 42px);第三方设置页(如插件市场)的「已安装」等页签因此完全不可达。现恢复为可滚动,任何设置页的内容至少可达。
|
|
26
|
+
- **窄屏设置菜单拥挤、内容列过窄**:≤480px 改为「分类列表 → 内容页」两级导航,内容列由 277px 提升到 355px(+28%),分类文字由 10.5px 恢复到 15px、触控行 52px;481–767px 保留左侧轨道但放宽到 88px / 11.5px,并去掉会从词中间断字的 `word-break: break-all`。
|
|
27
|
+
- **横屏小屏设置分类末项被切**:导航单元格不再被压缩,并对矮视口单独收紧,6 个分类无需滚动即全部落位(此前末项被切约 7px)。
|
|
28
|
+
- **设置弹窗「✕」位置错乱**:宿主 DOM 中「✕」属于内容区头部、标题属于导航区,此前两者被拆到两行(列表页「✕」在标题上一行、内容页「✕」在返回行下一行)。现「✕」回到面板右上角并与标题/返回行同一行;宿主与第三方的页面操作按钮统一下沉为底部动作栏。
|
|
29
|
+
- **插件市场点「安装」没有反应**:本插件把设置弹窗抬到 `z-index: 10002`,而第三方安装确认框的模态根只有 `1000`;其内部对话框虽被既有规则抬到 `10005`,但 `z-index` 逃不出祖先层叠上下文,整棵子树被盖死。现按「`<body>` 直接子级 + 自带遮罩/含 `role=dialog` 子元素」这一结构特征,把此类浮层抬到设置弹窗之上(仅在设置弹窗打开时生效,不硬编码第三方类名)。
|
|
30
|
+
- **矮屏下安装确认框超出视口、按钮点不到**:该确认框固定 584px 高且 `overflow-y: hidden`,横屏手机(375px 高)下被居中撑开后上下同时被切、底部按钮落到视口外。现约束其不超过视口并允许框内滚动(自限性:正常竖屏下不产生任何视觉变化)。
|
|
31
|
+
- **「远程访问」版本状态行把「检查更新」按钮顶出可视区**:状态行左组补 `flexWrap`/`minWidth:0`,按钮补 `nowrap` + `flexShrink:0`。
|
|
32
|
+
- **设置页内页签被切断却无从得知可以横滑**:Tab 条增加边缘渐隐提示,切换时当前页签自动滚入可视区。
|
|
33
|
+
|
|
34
|
+
### 🧪 测试
|
|
35
|
+
|
|
36
|
+
- 新增 `test/mobile-settings-narrow-layout.test.mjs`(12 条):断点与产物同步、钻取布局与就绪开关门控、`✕` 同行与让位、第三方模态框层叠与视口约束、跨文件断点一致性等结构断言,并配四套变异自检(共 32 组绕过尝试,全部被拦下)。
|
|
37
|
+
|
|
38
|
+
> ⚠️ 生效说明:纯前端改动,刷新页面即可生效,无需重启 dsh。
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
7
42
|
## [v2.10.13] - 2026-09-23
|
|
8
43
|
|
|
9
44
|
> 本版为可靠性与兼容性加固:修复 cloudflared 连接器"假死"(进程存活但边缘连接全掉)造成的公网隧道静默失效(新增运行时健康探针与输出落盘);跟随 DSH 0.1.5 的官方目录选择器,让本机访问不再误弹插件的远程抽屉;并修复添加工作区弹窗的状态泄漏卡死。
|
package/client/client.js
CHANGED
|
@@ -51,6 +51,55 @@ var MOBILE_STYLES_CSS = `
|
|
|
51
51
|
--dsh-mobile-safe-bottom: env(safe-area-inset-bottom, 0px);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
/* \u6302\u5728 <body> \u4E0B\u3001\u81EA\u5E26\u906E\u7F69\u7684\u300C\u6A21\u6001\u6839\u300D\u5FC5\u987B\u80FD\u76D6\u5728\u8BBE\u7F6E\u5F39\u7A97\u4E4B\u4E0A\u3002
|
|
55
|
+
\u2014\u2014 \u8FD9\u662F\u672C\u63D2\u4EF6\u62AC\u9AD8\u8BBE\u7F6E\u5F39\u7A97\u5C42\u53E0\u540E\u5FC5\u987B\u81EA\u5DF1\u8865\u4E0A\u7684\u4E00\u73AF\uFF08\u8C01\u62AC\u7684\u8C01\u8D1F\u8D23\uFF09\u3002
|
|
56
|
+
|
|
57
|
+
\u6545\u969C\u73B0\u8C61\uFF1A\u63D2\u4EF6\u5E02\u573A\u8BBE\u7F6E\u9875\u70B9\u300C\u5B89\u88C5\u300D\u6CA1\u6709\u4EFB\u4F55\u53CD\u5E94\u3002
|
|
58
|
+
\u6839\u56E0\u94FE\uFF1A
|
|
59
|
+
1) \u672C\u63D2\u4EF6\u628A\u8BBE\u7F6E\u5F39\u7A97\u62AC\u5230 z-index:10002\uFF08\u89C1\u4E0B\u9762 @media \u5757\uFF09\uFF0C\u4EE5\u4FBF\u76D6\u4F4F\u81EA\u5DF1\u6E32\u67D3\u7684
|
|
60
|
+
\u79FB\u52A8\u7AEF\u9876\u680F(9998)/\u62BD\u5C49\u906E\u7F69(9999)\uFF1B
|
|
61
|
+
2) \u63D2\u4EF6\u5E02\u573A\uFF08dshmarket 1.44.0\uFF09\u7684\u5B89\u88C5\u786E\u8BA4\u6846\u662F\u6302\u5728 <body> \u4E0B\u7684
|
|
62
|
+
div._root_w1urq_2\uFF0Cposition:fixed\uFF0C\u4F46\u53EA\u6709 z-index:1000\uFF1B
|
|
63
|
+
3) \u8BE5\u6D6E\u5C42\u5185\u90E8\u7684\u5BF9\u8BDD\u6846 div._dialog_w1urq_22 \u867D\u7136\u5E26 role="dialog"\u3001\u88AB\u4E0B\u9762\u7684
|
|
64
|
+
10005 \u89C4\u5219\u62AC\u8D77\u6765\u4E86\uFF0C**\u4F46 z-index \u65E0\u6CD5\u9003\u51FA\u7956\u5148\u7684\u5C42\u53E0\u4E0A\u4E0B\u6587** \u2014\u2014 \u5916\u5C42\u6A21\u6001\u6839
|
|
65
|
+
\u53EA\u6709 1000\uFF0C\u6574\u68F5\u5B50\u6811\uFF08\u8FDE\u540C\u90A3\u4E2A 10005\uFF09\u4E00\u8D77\u88AB\u8BBE\u7F6E\u5F39\u7A97(10002)\u76D6\u6B7B\uFF1B
|
|
66
|
+
4) \u7ED3\u679C\uFF1A\u7AD6\u5C4F\u70B9\u5B89\u88C5\u5B8C\u5168\u770B\u4E0D\u5230\u6D6E\u5C42\uFF08\u8BBE\u7F6E\u5F39\u7A97\u7684\u906E\u7F69\u5728 elementFromPoint \u4E0A\u547D\u4E2D\uFF09\uFF1B
|
|
67
|
+
\u6A2A\u5C4F\uFF08\u5BBD\u5EA6 > 767 \u65F6\u672C\u63D2\u4EF6\u6837\u5F0F\u4E0D\u751F\u6548\uFF0C\u8BBE\u7F6E\u5F39\u7A97\u56DE\u843D\u6210\u5BBF\u4E3B\u7684 1000\uFF09\u6D6E\u5C42\u867D\u51FA\u73B0\uFF0C
|
|
68
|
+
\u5374\u4E0E\u9875\u9762\u5185\u5BB9\u4E92\u76F8\u7A7F\u900F\u3001\u663E\u793A\u4E0D\u5B8C\u6574\u3002
|
|
69
|
+
|
|
70
|
+
\u9009\u62E9\u5668\u523B\u610F\u4E0D\u786C\u7F16\u7801\u4EFB\u4F55\u7B2C\u4E09\u65B9\u7C7B\u540D/\u54C8\u5E0C\uFF0C\u53EA\u8BA4\u6A21\u6001\u6839\u7684\u4E24\u4E2A**\u7ED3\u6784\u7279\u5F81**\uFF1A
|
|
71
|
+
\u300Cbody \u7684\u76F4\u63A5\u5B50\u7EA7\u300D+\u300C\u81EA\u5E26\u906E\u7F69\u5B50\u5143\u7D20\uFF08\u6216\u6709 role=dialog \u5B50\u5143\u7D20\uFF09\u300D\u3002
|
|
72
|
+
\u5B9E\u6D4B\u5728\u6253\u5F00\u8BBE\u7F6E\u524D/\u540E/\u70B9\u5B89\u88C5\u540E\u4E09\u4E2A\u9636\u6BB5\uFF0C\u672C\u9875\u9762\u4E0A\u8BE5\u9009\u62E9\u5668**\u53EA\u547D\u4E2D\u5E02\u573A\u90A3\u4E00\u4E2A\u6D6E\u5C42**\uFF0C
|
|
73
|
+
\u65E0\u8BEF\u4F24\uFF1B\u672C\u63D2\u4EF6\u81EA\u5DF1\u7684 #dsh-remote-workspace-modal \u6709 ID \u89C4\u5219(100000)\uFF0C\u4F18\u5148\u7EA7\u66F4\u9AD8\uFF0C
|
|
74
|
+
\u4E0D\u53D7\u5F71\u54CD\u3002\u4EC5\u5728\u8BBE\u7F6E\u5F39\u7A97\u6253\u5F00\u65F6\u751F\u6548\uFF08body:has(...)\uFF09\uFF0C\u628A\u5F71\u54CD\u9762\u538B\u5230\u6700\u5C0F\u3002
|
|
75
|
+
|
|
76
|
+
\u3010\u5DF2\u77E5\u8FB9\u754C\u3011\u5224\u636E\u53EA\u770B\u7ED3\u6784\uFF0C\u65E0\u6CD5\u533A\u5206\u300C\u771F\u6A21\u6001\u300D\u4E0E\u300C\u6070\u597D\u957F\u6210\u8FD9\u6837\u3001\u4E14\u4E0D\u53EF\u5173\u95ED\u7684\u5168\u5C4F
|
|
77
|
+
\u906E\u7F69\u300D\u3002\u82E5\u67D0\u4E2A\u63D2\u4EF6\u5F80 <body> \u4E0B\u6302\u4E00\u4E2A\u5E26 mask \u5B50\u5143\u7D20\u7684\u5168\u5C4F\u5C42\uFF0C\u5B83\u4E5F\u4F1A\u88AB\u62AC\u5230\u8BBE\u7F6E
|
|
78
|
+
\u5F39\u7A97\u4E4B\u4E0A\u5E76\u76D6\u4F4F\u8BBE\u7F6E\u9875\u3002\u8FD9\u662F\u300C\u6A21\u6001\u5C31\u8BE5\u76D6\u5728\u8BBE\u7F6E\u5F39\u7A97\u4E4B\u4E0A\u300D\u7684\u65E2\u5B9A\u53D6\u820D\uFF1A\u5B81\u53EF\u8BA9\u771F\u6A21\u6001
|
|
79
|
+
\u53EF\u89C1\uFF0C\u4E5F\u4E0D\u63A5\u53D7"\u5F39\u4E86\u5374\u70B9\u4E0D\u5230"\u3002\u72EC\u7ACB\u9A8C\u6536\u5DF2\u5B9E\u6D4B\u8BE5\u6784\u9020\u4F1A\u547D\u4E2D\uFF1B\u82E5\u5C06\u6765\u771F\u8E29\u5230\uFF0C
|
|
80
|
+
\u5E94\u6539\u4E3A\u6309\u300C\u8BE5\u6D6E\u5C42\u662F\u5426\u53EF\u5173\u95ED\u300D\u8FDB\u4E00\u6B65\u6536\u7A84\uFF0C\u800C\u4E0D\u662F\u56DE\u9000\u8FD9\u6761\u89C4\u5219\u3002 */
|
|
81
|
+
body:has(div[class*="VOzbGW_overlay"]) > div:has(> div[class*="mask"], > div[role="dialog"]) {
|
|
82
|
+
z-index: 10050 !important;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* \u540C\u4E0A\u573A\u666F\u7684\u7B2C\u4E8C\u4E2A\u72EC\u7ACB\u95EE\u9898\uFF1A\u7B2C\u4E09\u65B9\u6A21\u6001\u5BF9\u8BDD\u6846\u300C\u6BD4\u89C6\u53E3\u8FD8\u9AD8\u300D\u3002
|
|
86
|
+
\u63D2\u4EF6\u5E02\u573A\u7684\u5B89\u88C5\u786E\u8BA4\u6846\u662F\u56FA\u5B9A 584px \u9AD8 + overflow-y:hidden\uFF0C\u5728\u77EE\u89C6\u53E3\uFF08\u6A2A\u5C4F\u624B\u673A
|
|
87
|
+
320\u2013430px \u9AD8\uFF0C\u4EE5\u53CA 320\xD7480 \u8FD9\u7C7B\u5C0F\u5C4F\uFF09\u91CC\u88AB\u5C45\u4E2D\u6491\u5F00 \u2192 \u4E0A\u4E0B\u540C\u65F6\u88AB\u5207\u6389\uFF0C\u5E95\u90E8
|
|
88
|
+
\u300CCancel / Confirm install\u300D\u843D\u5230\u89C6\u53E3\u4E4B\u5916\uFF0C\u7528\u6237\u70B9\u4E0D\u5230\u3001\u6D41\u7A0B\u8D70\u4E0D\u4E0B\u53BB
|
|
89
|
+
\uFF08\u5B9E\u6D4B 667\xD7375 \u65F6\u5BF9\u8BDD\u6846 rect y=-116 h=608\u3001\u6309\u94AE y=432\uFF1B844\xD7390 \u540C\u6837\uFF09\u3002
|
|
90
|
+
|
|
91
|
+
\u4FEE\u6CD5\u662F\u8BA9\u6A21\u6001\u5BF9\u8BDD\u6846\u4E0D\u8D85\u8FC7\u89C6\u53E3\u5E76\u5141\u8BB8\u5185\u90E8\u6EDA\u52A8\u3002\u8FD9\u6761\u662F**\u81EA\u9650\u6027**\u7684\uFF1A
|
|
92
|
+
max-height \u53EA\u5728\u300C\u89C6\u53E3\u6BD4\u5BF9\u8BDD\u6846\u77EE\u300D\u65F6\u624D\u8D77\u4F5C\u7528 \u2014\u2014 375\xD7667 / 390\xD7844 \u7B49\u6B63\u5E38\u7AD6\u5C4F\u4E0B
|
|
93
|
+
100dvh-16px(=651/828) > 584\uFF0C\u58F0\u660E\u4E0D\u4EA7\u751F\u4EFB\u4F55\u89C6\u89C9\u53D8\u5316\u3002
|
|
94
|
+
vh \u4E0E dvh \u5404\u5199\u4E00\u904D\uFF1A\u4E0D\u652F\u6301 dvh \u7684\u73AF\u5883\u9000\u56DE vh\uFF1B\u4E24\u6761\u90FD\u5931\u6548\u4E5F\u53EA\u662F\u4FDD\u6301\u539F\u6837\u3002 */
|
|
95
|
+
body:has(div[class*="VOzbGW_overlay"]) > div:has(> div[role="dialog"]) > div[role="dialog"] {
|
|
96
|
+
/* \u7559 32px \u800C\u4E0D\u662F 16px\uFF1A\u8BE5\u5BF9\u8BDD\u6846\u662F content-box + 24px \u7EB5\u5411\u5185\u8FB9\u8DDD\uFF0C
|
|
97
|
+
\u6309\u5185\u5BB9\u76D2\u7B97\u7684 max-height \u4F1A\u518D\u591A\u51FA\u5185\u8FB9\u8DDD\u7684\u8FB9\u6846\u76D2\u9AD8\u5EA6\uFF0C16px \u65F6\u4ECD\u6EA2\u51FA 4px\u3002 */
|
|
98
|
+
max-height: calc(100vh - 32px) !important;
|
|
99
|
+
max-height: calc(100dvh - 32px) !important;
|
|
100
|
+
overflow-y: auto !important;
|
|
101
|
+
}
|
|
102
|
+
|
|
54
103
|
/* \u65AD\u70B9\u4E0E\u5BBF\u4E3B\u5224\u636E\u5BF9\u9F50\uFF1A\u5BBF\u4E3B\u7528 viewportWidth < 768 \u51B3\u5B9A\u53F3\u4FA7\u680F\u81EA\u52A8\u5168\u5C4F
|
|
55
104
|
\uFF08dsh-client-ui-sidebar-right/lib/client.js\uFF09\uFF0C\u6545\u79FB\u52A8\u7AEF\u6837\u5F0F\u53D6 <=767px\uFF0C
|
|
56
105
|
768px \u8D77\u5F7B\u5E95\u4EA4\u8FD8\u684C\u9762\u5E03\u5C40\uFF0C\u907F\u514D"\u6865\u6E32\u67D3\u9876\u680F\u3001\u5BBF\u4E3B\u5374\u672A\u5168\u5C4F"\u7684\u9519\u4F4D\u3002 */
|
|
@@ -695,56 +744,91 @@ var MOBILE_STYLES_CSS = `
|
|
|
695
744
|
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.25) !important;
|
|
696
745
|
background: var(--dsw-alias-bg-layer-1, #ffffff) !important;
|
|
697
746
|
}
|
|
747
|
+
/* 6.1 481\u2013767px\uFF1A\u4FDD\u7559\u5DE6\u4FA7\u56FE\u6807\u8F68\u9053\u3002
|
|
748
|
+
78px \u8F68\u9053\u628A "Agent presets"/"Plugin Market" \u6324\u5230\u4E24\u4FA7\u53EA\u5269 ~5px\u3001\u6807\u7B7E\u88AB\u538B\u5230
|
|
749
|
+
10.5px \u4E14 word-break:break-all \u4F1A\u4ECE\u8BCD\u4E2D\u95F4\u65AD\u5B57\uFF0C\u6545\u653E\u5BBD\u5230 88px / 11.5px\uFF0C
|
|
750
|
+
\u5E76\u6539\u7528 overflow-wrap \u515C\u5E95\uFF08\u6B63\u5E38\u5355\u8BCD\u4E0D\u518D\u88AB\u62C6\uFF09\u3002 */
|
|
698
751
|
nav[class*="VOzbGW_nav"] {
|
|
699
|
-
width:
|
|
700
|
-
min-width:
|
|
701
|
-
max-width:
|
|
702
|
-
padding: 10px
|
|
752
|
+
width: 88px !important;
|
|
753
|
+
min-width: 88px !important;
|
|
754
|
+
max-width: 88px !important;
|
|
755
|
+
padding: 10px 6px !important;
|
|
703
756
|
box-sizing: border-box !important;
|
|
704
757
|
border-right: 1px solid var(--dsw-alias-border-l2, #e5e7eb) !important;
|
|
705
758
|
display: flex !important;
|
|
706
759
|
flex-direction: column !important;
|
|
707
760
|
gap: 6px !important;
|
|
708
761
|
overflow-y: auto !important;
|
|
762
|
+
overscroll-behavior: contain !important;
|
|
709
763
|
}
|
|
710
764
|
nav[class*="VOzbGW_nav"] button[class*="VOzbGW_navCell"],
|
|
711
765
|
button[class*="VOzbGW_navCell"] {
|
|
712
|
-
padding:
|
|
766
|
+
padding: 7px 2px !important;
|
|
713
767
|
display: flex !important;
|
|
714
768
|
flex-direction: column !important;
|
|
715
769
|
align-items: center !important;
|
|
716
770
|
justify-content: center !important;
|
|
717
771
|
text-align: center !important;
|
|
718
772
|
height: auto !important;
|
|
719
|
-
min-height:
|
|
720
|
-
|
|
773
|
+
min-height: 46px !important;
|
|
774
|
+
/* flex:none\uFF1A\u5355\u5143\u683C\u4E0D\u5F97\u88AB\u538B\u7F29\uFF0C\u5426\u5219\u77EE\u89C6\u53E3\u4E0B\u672B\u9879\u4F1A\u8D34\u7740\u8F68\u9053\u4E0B\u6CBF\u88AB\u5207\u6389 */
|
|
775
|
+
flex: 0 0 auto !important;
|
|
776
|
+
gap: 3px !important;
|
|
721
777
|
border-radius: 10px !important;
|
|
722
778
|
}
|
|
723
779
|
span[class*="VOzbGW_navLabel"] {
|
|
724
|
-
font-size:
|
|
725
|
-
line-height: 1.
|
|
780
|
+
font-size: 11.5px !important;
|
|
781
|
+
line-height: 1.25 !important;
|
|
726
782
|
white-space: normal !important;
|
|
727
|
-
word-break:
|
|
783
|
+
word-break: normal !important;
|
|
784
|
+
overflow-wrap: anywhere !important;
|
|
728
785
|
text-align: center !important;
|
|
729
786
|
}
|
|
787
|
+
|
|
788
|
+
/* \u77EE\u89C6\u53E3\uFF08\u6A2A\u5C4F\u624B\u673A\uFF09\uFF1A\u538B\u7F29\u8F68\u9053\u5355\u5143\u683C\uFF0C\u4FDD\u8BC1 6 \u4E2A\u5206\u7C7B\u5168\u90E8\u843D\u5728\u9762\u677F\u5185\uFF0C
|
|
789
|
+
\u800C\u4E0D\u662F\u9760 nav \u81EA\u8EAB\u7684 overflow-y \u6EDA\u52A8\u628A\u672B\u9879\u85CF\u8D77\u6765\uFF08\u5F53\u524D\u65E0\u4EFB\u4F55\u53EF\u6EDA\u52A8\u63D0\u793A\uFF09\u3002 */
|
|
790
|
+
@media (max-height: 500px) {
|
|
791
|
+
nav[class*="VOzbGW_nav"] {
|
|
792
|
+
padding: 8px 6px !important;
|
|
793
|
+
gap: 4px !important;
|
|
794
|
+
}
|
|
795
|
+
nav[class*="VOzbGW_nav"] button[class*="VOzbGW_navCell"],
|
|
796
|
+
button[class*="VOzbGW_navCell"] {
|
|
797
|
+
min-height: 40px !important;
|
|
798
|
+
padding: 4px 2px !important;
|
|
799
|
+
}
|
|
800
|
+
div[class*="VOzbGW_navTitle"] {
|
|
801
|
+
font-size: 13px !important;
|
|
802
|
+
line-height: 1.3 !important;
|
|
803
|
+
padding: 0 4px !important;
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
|
|
730
807
|
div[class*="VOzbGW_content"] {
|
|
731
808
|
flex: 1 1 auto !important;
|
|
732
809
|
min-width: 0 !important;
|
|
733
|
-
width: calc(100% -
|
|
734
|
-
max-width: calc(100% -
|
|
810
|
+
width: calc(100% - 88px) !important;
|
|
811
|
+
max-width: calc(100% - 88px) !important;
|
|
735
812
|
display: flex !important;
|
|
736
813
|
flex-direction: column !important;
|
|
737
814
|
overflow: hidden !important;
|
|
738
815
|
}
|
|
816
|
+
/* overflow-x \u5FC5\u987B\u662F auto \u800C\u4E0D\u662F hidden\uFF1A\u5BBF\u4E3B\u539F\u6837\u5F0F\u53EA\u5199\u4E86 overflow-y:auto\uFF0C
|
|
817
|
+
\u6309 CSS Overflow \u89C4\u8303 overflow-x \u4F1A\u8BA1\u7B97\u4E3A auto\uFF08\u53EF\u6A2A\u6ED1\uFF09\u3002\u6B64\u524D\u63D2\u4EF6\u5F3A\u5236
|
|
818
|
+
hidden\uFF0C\u628A\u300C\u53EF\u6EDA\u52A8\u300D\u964D\u7EA7\u6210\u300C\u9759\u9ED8\u88C1\u5207\u300D\u2014\u2014\u6EA2\u51FA\u5185\u5BB9\u65E2\u770B\u4E0D\u5230\u4E5F\u6ED1\u4E0D\u51FA\u6765
|
|
819
|
+
\uFF08\u5B9E\u6D4B 375px \u4E0B\u88C1\u6389 42px\uFF0CPlugin Market \u7684 Installed/Advanced \u4E24\u4E2A Tab
|
|
820
|
+
\u76F4\u63A5\u4E0D\u53EF\u8FBE\uFF09\u3002\u8FD9\u91CC\u6062\u590D\u5BBF\u4E3B\u9ED8\u8BA4\uFF0C\u4FDD\u8BC1\u4EFB\u4F55\u7B2C\u4E09\u65B9\u8BBE\u7F6E\u8282\u7684\u5185\u5BB9\u81F3\u5C11\u53EF\u8FBE\u3002 */
|
|
739
821
|
div[class*="VOzbGW_options"] {
|
|
740
822
|
flex: 1 1 auto !important;
|
|
741
823
|
width: 100% !important;
|
|
742
824
|
max-width: 100% !important;
|
|
825
|
+
min-width: 0 !important;
|
|
743
826
|
box-sizing: border-box !important;
|
|
744
827
|
padding: 0 14px 20px !important;
|
|
745
|
-
overflow-x:
|
|
828
|
+
overflow-x: auto !important;
|
|
746
829
|
overflow-y: auto !important;
|
|
747
830
|
-webkit-overflow-scrolling: touch !important;
|
|
831
|
+
overscroll-behavior: contain !important;
|
|
748
832
|
}
|
|
749
833
|
|
|
750
834
|
/* \u8BBE\u7F6E\u4E2D\u5FC3\u9009\u9879\u884C\u624B\u673A\u81EA\u9002\u5E94\uFF08\u5782\u76F4\u6D41\u5F0F\uFF0C\u9632\u6587\u5B57\u5355\u5B57\u6298\u884C\uFF09 */
|
|
@@ -754,12 +838,15 @@ var MOBILE_STYLES_CSS = `
|
|
|
754
838
|
align-items: stretch !important;
|
|
755
839
|
gap: 8px !important;
|
|
756
840
|
width: 100% !important;
|
|
841
|
+
/* min-width:0\uFF1A\u8BA9 flex \u5B50\u9879\u53EF\u4EE5\u771F\u6B63\u6536\u7F29\uFF0C\u800C\u4E0D\u662F\u628A\u7236\u5BB9\u5668\u9876\u5BBD\u540E\u6EA2\u51FA */
|
|
842
|
+
min-width: 0 !important;
|
|
757
843
|
padding: 12px 0 !important;
|
|
758
844
|
box-sizing: border-box !important;
|
|
759
845
|
}
|
|
760
846
|
div[class*="VOzbGW_options"] div[class*="_rowText"] {
|
|
761
847
|
width: 100% !important;
|
|
762
848
|
max-width: 100% !important;
|
|
849
|
+
min-width: 0 !important;
|
|
763
850
|
}
|
|
764
851
|
div[class*="VOzbGW_options"] button[class*="_selector"],
|
|
765
852
|
div[class*="VOzbGW_options"] select,
|
|
@@ -827,6 +914,211 @@ var MOBILE_STYLES_CSS = `
|
|
|
827
914
|
}
|
|
828
915
|
}
|
|
829
916
|
|
|
917
|
+
/* 6.2 <=480px \u624B\u673A\u7AD6\u5C4F\uFF1A\u8BBE\u7F6E\u4E2D\u5FC3\u6539\u4E3A\u300C\u4E24\u7EA7\u94BB\u53D6\u300D\u3002
|
|
918
|
+
\u4FA7\u8FB9\u8F68\u9053\u5728 375px \u5C4F\u4E0A\u8981\u5403\u6389 88px\uFF0821% \u5BBD\u5EA6\uFF09\uFF0C\u5185\u5BB9\u5217\u53EA\u5269 277px\uFF0C\u7B2C\u4E09\u65B9\u8BBE\u7F6E\u8282
|
|
919
|
+
\uFF08Plugin Market \u7684 Tab \u6761\u9700 470px\uFF09\u5FC5\u7136\u6EA2\u51FA\u3002\u6539\u4E3A\uFF1A\u5206\u7C7B\u5217\u8868\u9875 \u2194 \u5185\u5BB9\u8BE6\u60C5\u9875\uFF0C
|
|
920
|
+
\u5185\u5BB9\u72EC\u5360\u6574\u5BBD\uFF08375px \u4E0B\u7531 277px \u63D0\u5347\u5230 355px\uFF0C+28%\uFF09\uFF0C\u6807\u7B7E\u56DE\u5230 15px\u3001\u89E6\u63A7\u884C 52px\u3002
|
|
921
|
+
|
|
922
|
+
\u3010\u6574\u5757\u7531 html[data-dshbr-drilldown="ready"] \u95E8\u63A7\u3011
|
|
923
|
+
\u672C\u5757\u9ED8\u8BA4\u628A\u5185\u5BB9\u533A\uFF08options\uFF09\u9690\u85CF\u3001\u53EA\u663E\u793A\u5206\u7C7B\u5217\u8868\uFF1B\u80FD\u4E0D\u80FD\u4ECE\u5217\u8868\u8D70\u8FDB\u5185\u5BB9\uFF0C\u5B8C\u5168
|
|
924
|
+
\u53D6\u51B3\u4E8E client/index.js \u7684\u70B9\u51FB\u76D1\u542C\u5668\u3002\u6240\u4EE5\u672C\u5757\u4E0D\u80FD\u4EE5\u300CJS \u4E00\u5B9A\u5728\u300D\u4E3A\u65E0\u6761\u4EF6\u524D\u63D0\uFF1A
|
|
925
|
+
\u5F00\u5173\u6CA1\u6253\u5F00\u65F6\u672C\u5757\u6574\u4F53\u60F0\u6027\uFF0C<=480px \u9000\u56DE 767 \u5757\u7684 88px \u56FE\u6807\u8F68\u9053\uFF08\u7A84\uFF0C\u4F46\u5206\u7C7B\u4E0E
|
|
926
|
+
\u5185\u5BB9\u90FD\u5B8C\u6574\u53EF\u8FBE\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u300C\u5185\u5BB9\u88AB\u85CF\u4E86\u3001\u53C8\u6CA1\u4EBA\u80FD\u628A\u7528\u6237\u5E26\u8FDB\u53BB\u300D\u7684\u6B7B\u5217\u8868\u3002
|
|
927
|
+
|
|
928
|
+
\u5F00\u5173\u4F55\u65F6\u6253\u5F00\uFF08client/index.js \u7684 setupSettingsDrilldown\uFF09\uFF1A
|
|
929
|
+
- \u8BE5\u51FD\u6570\u662F apply() \u7684\u7B2C\u4E00\u6761\u8BED\u53E5\uFF0C\u65E9\u4E8E\u6CE8\u5165\u672C CSS \u7684 injectMobileStyles()\uFF1B
|
|
930
|
+
- \u53EA\u6709 document.addEventListener('click', \u2026) \u6210\u529F\u8FD4\u56DE\u540E\u624D\u6253\u4E0A ready\u3002
|
|
931
|
+
\u56E0\u6B64\u300C\u672C CSS \u5DF2\u751F\u6548\u3001\u800C\u70B9\u51FB\u76D1\u542C\u5668\u6CA1\u88C5\u4E0A\u300D\u5728\u53EF\u6267\u884C\u8DEF\u5F84\u4E0A\u4E0D\u53EF\u8FBE\uFF1B\u5373\u4F7F\u5C06\u6765\u6709\u4EBA\u628A
|
|
932
|
+
\u8BE5\u8C03\u7528\u632A\u5230\u4F1A\u629B\u5F02\u5E38\u7684\u521D\u59CB\u5316\u4E4B\u540E\uFF0C\u5F00\u5173\u672A\u5F00\u4E5F\u53EA\u662F\u9000\u56DE\u8F68\u9053\u5E03\u5C40\u3002
|
|
933
|
+
|
|
934
|
+
\u660E\u786E\u672A\u8986\u76D6\uFF1A\u65E0\u6CD5\u5728\u811A\u672C\u5185\u63A2\u6D4B\u300CaddEventListener \u88AB\u73AF\u5883\u9759\u9ED8\u4E22\u5F03\u300D\u8FD9\u7C7B\u5F02\u5E38 \u2014\u2014
|
|
935
|
+
\u8981\u505A\u8FD9\u79CD\u81EA\u68C0\u5C31\u5FC5\u987B\u5728 document \u4E0A\u6D3E\u53D1\u5408\u6210 click\uFF0C\u800C\u5BBF\u4E3B\u4E0E\u7B2C\u4E09\u65B9\u63D2\u4EF6\u5408\u8BA1\u6709 6 \u4E2A
|
|
936
|
+
document \u7EA7 click \u76D1\u542C\uFF08\u53E6\u6709\u591A\u7EC4 mousedown/pointerdown\uFF09\u4F1A\u88AB\u8BEF\u89E6\u53D1\uFF0C\u5F97\u4E0D\u507F\u5931\u3002
|
|
937
|
+
\u63D2\u4EF6 JS \u5B8C\u5168\u4E0D\u6267\u884C\u65F6\u672C CSS \u4E5F\u4E0D\u4F1A\u6CE8\u5165\uFF0C\u540C\u6837\u4E0D\u4F1A\u85CF\u5185\u5BB9\u3002
|
|
938
|
+
|
|
939
|
+
\u5F00\u5173\u653E\u5728 <html> \u800C\u975E panel\uFF1A\u76D1\u542C\u5668\u5FC5\u987B\u5728\u5F39\u7A97\u51FA\u73B0\u4E4B\u524D\u5C31\u88C5\u597D\uFF0C\u90A3\u65F6 panel \u8FD8\u4E0D\u5B58\u5728\u3002
|
|
940
|
+
|
|
941
|
+
panel \u4E0A\u7684 data-dshbr-settings-view \u53EA\u8868\u8FBE\u300C\u5217\u8868\u9875 / \u8BE6\u60C5\u9875\u300D\uFF1A
|
|
942
|
+
- \u65E0\u8BE5\u5C5E\u6027\uFF08\u542B\u5F00\u5173\u521A\u6253\u5F00\u7684\u9996\u5E27\uFF09\u2192 \u5206\u7C7B\u5217\u8868\u9875
|
|
943
|
+
- "detail" \u2192 \u5185\u5BB9\u8BE6\u60C5\u9875 */
|
|
944
|
+
@media (max-width: 480px) {
|
|
945
|
+
/* \u9762\u677F\u7531 767 \u5757\u7684\u6A2A\u5411\u8F68\u9053\u5E03\u5C40\uFF08row\uFF09\u6539\u4E3A\u7EB5\u5411\uFF1A\u5217\u8868\u9875/\u8BE6\u60C5\u9875\u90FD\u662F\u4E0A\u4E0B\u7ED3\u6784\u3002
|
|
946
|
+
\u6F0F\u6389\u8FD9\u4E00\u6761\u4F1A\u8BA9 nav \u4E0E content \u5E76\u6392\u62A2\u5BBD\u5EA6\uFF0C\u5206\u7C7B\u5217\u8868\u88AB\u538B\u6210 0 \u5BBD\uFF08\u5B9E\u6D4B options
|
|
947
|
+
\u53EA\u5269 24px\uFF09\uFF0C\u662F\u672C\u65B9\u6848\u6700\u5BB9\u6613\u6F0F\u7684\u5173\u952E\u4E00\u6B65\u3002 */
|
|
948
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"] {
|
|
949
|
+
flex-direction: column !important;
|
|
950
|
+
/* \u2715 \u8981\u7EDD\u5BF9\u5B9A\u4F4D\u5230\u9762\u677F\u53F3\u4E0A\u89D2\uFF0C\u5FC5\u987B\u6709\u5B9A\u4F4D\u7956\u5148 */
|
|
951
|
+
position: relative !important;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
/* \u5173\u95ED\u6309\u94AE\u9489\u5728\u9762\u677F\u53F3\u4E0A\u89D2\uFF0C\u4E0E\u6807\u9898/\u8FD4\u56DE\u884C\u540C\u5904\u7B2C\u4E00\u884C \u2014\u2014 \u8FD9\u662F\u5F39\u7A97\u7684\u5E38\u89C4\u7EA6\u5B9A\u3002
|
|
955
|
+
\u4E4B\u6240\u4EE5\u8981\u7EDD\u5BF9\u5B9A\u4F4D\uFF1A\u5BBF\u4E3B DOM \u91CC \u2715 \u5C5E\u4E8E content>header\uFF0C\u800C\u6807\u9898\u5C5E\u4E8E nav\uFF0C\u4E8C\u8005\u662F
|
|
956
|
+
\u4E24\u68F5\u5B50\u6811\u3002\u6B64\u524D\u9760 order:-1 \u628A content \u63D0\u5230 nav \u4E4B\u524D\uFF0C\u7ED3\u679C \u2715 \u843D\u5728\u6807\u9898\u4E0A\u9762\u4E00\u884C\uFF1B
|
|
957
|
+
\u8BE6\u60C5\u9875\u53CD\u8FC7\u6765\uFF0C\u2715 \u843D\u5230\u8FD4\u56DE\u884C\u4E0B\u9762\u4E00\u884C\u3002\u7EDD\u5BF9\u5B9A\u4F4D\u662F\u552F\u4E00\u80FD\u5728\u4E0D\u6CE8\u5165 DOM \u7684\u524D\u63D0\u4E0B
|
|
958
|
+
\u628A\u4E24\u8005\u62C9\u56DE\u540C\u4E00\u884C\u7684\u529E\u6CD5\u3002 */
|
|
959
|
+
html[data-dshbr-drilldown="ready"] button[class*="VOzbGW_close"] {
|
|
960
|
+
position: absolute !important;
|
|
961
|
+
/* 40\xD740 \u89E6\u63A7\u533A\uFF08\u5BBF\u4E3B\u539F\u4E3A 28px\uFF09\uFF1A\u914D top/right 4px \u540E\u4E2D\u5FC3\u843D\u5728 y=24\uFF0C
|
|
962
|
+
\u4E0E\u6807\u9898\u6587\u5B57\u4E2D\u5FC3\uFF08\u7EA6 23\uFF09\u57FA\u672C\u91CD\u5408\uFF1B\u53F3\u4FA7 4+40=44px \u7684\u5360\u4F4D\u4ECD\u5728\u6807\u9898 52px \u7559\u767D\u4E4B\u5185\u3002 */
|
|
963
|
+
top: 4px !important;
|
|
964
|
+
right: 4px !important;
|
|
965
|
+
width: 40px !important;
|
|
966
|
+
height: 40px !important;
|
|
967
|
+
z-index: 5 !important;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/* \u5206\u7C7B\u5217\u8868\u9875\uFF1A\u5185\u5BB9\u533A\u53EA\u5269 header\uFF08\u5BBF\u4E3B/\u7B2C\u4E09\u65B9 action \u69FD\uFF09\uFF0C\u4E0B\u6C89\u4E3A\u5E95\u90E8\u52A8\u4F5C\u680F\u3002
|
|
971
|
+
\u4E0D\u518D\u7528 order:-1 \u2014\u2014 \u6807\u9898\u56DE\u5230 DOM \u987A\u5E8F\u7684\u7B2C\u4E00\u884C\uFF0C\u987A\u5E26\u8BA9\u7126\u70B9\u987A\u5E8F\u4E0E\u89C6\u89C9\u987A\u5E8F\u4E00\u81F4\u3002 */
|
|
972
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"]:not([data-dshbr-settings-view="detail"]) > div[class*="VOzbGW_content"] {
|
|
973
|
+
flex: 0 0 auto !important;
|
|
974
|
+
width: 100% !important;
|
|
975
|
+
max-width: 100% !important;
|
|
976
|
+
border-top: 1px solid var(--dsw-alias-border-l2, #e5e7eb) !important;
|
|
977
|
+
}
|
|
978
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"]:not([data-dshbr-settings-view="detail"]) div[class*="VOzbGW_options"] {
|
|
979
|
+
display: none !important;
|
|
980
|
+
}
|
|
981
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"]:not([data-dshbr-settings-view="detail"]) > nav[class*="VOzbGW_nav"] {
|
|
982
|
+
flex: 1 1 auto !important;
|
|
983
|
+
min-height: 0 !important;
|
|
984
|
+
overflow-y: auto !important;
|
|
985
|
+
overscroll-behavior: contain !important;
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
/* \u8BE6\u60C5\u9875\uFF1A\u6298\u53E0\u5BFC\u822A\u4E3A\u300C\u2039 \u6807\u9898\u300D\u4E00\u884C\uFF0C\u5145\u5F53\u8FD4\u56DE\u5165\u53E3 */
|
|
989
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] div[class*="VOzbGW_navList"] {
|
|
990
|
+
display: none !important;
|
|
991
|
+
}
|
|
992
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] > nav[class*="VOzbGW_nav"] {
|
|
993
|
+
flex: 0 0 auto !important;
|
|
994
|
+
overflow: visible !important;
|
|
995
|
+
cursor: pointer !important;
|
|
996
|
+
}
|
|
997
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] > nav[class*="VOzbGW_nav"]:active {
|
|
998
|
+
background: var(--dsw-alias-interactive-bg-hover, rgba(0, 0, 0, 0.05)) !important;
|
|
999
|
+
}
|
|
1000
|
+
/* \u8BE6\u60C5\u9875\u4E5F\u628A\u52A8\u4F5C\u680F\u6C89\u5230\u5E95\u90E8\uFF0C\u4E0E\u5217\u8868\u9875\u4FDD\u6301\u4E00\u81F4\u3002
|
|
1001
|
+
\u7528 flex order \u4EA4\u6362 header/options \u7684\u89C6\u89C9\u4F4D\u7F6E\uFF1Aoptions \u4ECD\u662F\u90A3\u4E2A overflow:auto
|
|
1002
|
+
\u7684\u6EDA\u52A8\u5BB9\u5668\uFF0C\u6EDA\u52A8\u8BED\u4E49\u4E0D\u53D8\uFF08\u4E0D\u7528 column-reverse\uFF0C\u907F\u514D\u6EDA\u52A8\u539F\u70B9\u7FFB\u8F6C\uFF09\u3002 */
|
|
1003
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] div[class*="VOzbGW_header"] {
|
|
1004
|
+
order: 2 !important;
|
|
1005
|
+
border-top: 1px solid var(--dsw-alias-border-l2, #e5e7eb) !important;
|
|
1006
|
+
}
|
|
1007
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] div[class*="VOzbGW_options"] {
|
|
1008
|
+
order: 1 !important;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
/* \u8F68\u9053\u5728\u7A84\u5C4F\u6539\u6210\u6574\u5BBD\u5217\u8868\u5BB9\u5668 */
|
|
1012
|
+
html[data-dshbr-drilldown="ready"] nav[class*="VOzbGW_nav"] {
|
|
1013
|
+
width: 100% !important;
|
|
1014
|
+
min-width: 0 !important;
|
|
1015
|
+
max-width: 100% !important;
|
|
1016
|
+
padding: 10px 12px 12px !important;
|
|
1017
|
+
gap: 4px !important;
|
|
1018
|
+
border-right: none !important;
|
|
1019
|
+
border-bottom: none !important;
|
|
1020
|
+
}
|
|
1021
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_navTitle"] {
|
|
1022
|
+
font-size: 17px !important;
|
|
1023
|
+
line-height: 1.3 !important;
|
|
1024
|
+
/* \u4E0D\u53EF\u6298\u884C\u7684\u8D85\u957F token\uFF08\u65E0\u7A7A\u683C\u957F\u4E32\uFF09\u4F1A\u6574\u5757\u6EA2\u51FA\u3001\u628A\u6587\u5B57\u9876\u5230 \u2715 \u4E0B\u9762\u3002
|
|
1025
|
+
\u72EC\u7ACB\u9A8C\u6536\u5B9E\u6D4B 81 \u5B57\u7B26\u65E0\u7A7A\u683C\u6807\u9898\u65F6\u6587\u5B57\u53F3\u7AEF 823px\u3001\u4E0E \u2715 \u4EA4\u53E0 707px\xB2\u3002
|
|
1026
|
+
overflow-wrap: anywhere \u8BA9\u8FD9\u79CD token \u4E5F\u80FD\u65AD\u884C \u2014\u2014 \u7559\u767D\u53EA\u7BA1\u76D2\u5185\uFF0C\u7BA1\u4E0D\u4F4F\u6EA2\u51FA\u3002 */
|
|
1027
|
+
overflow-wrap: anywhere !important;
|
|
1028
|
+
/* \u53F3\u4FA7 52px \u7ED9\u7EDD\u5BF9\u5B9A\u4F4D\u7684 \u2715 \u8BA9\u4F4D\uFF08\u7D27\u90BB\u89C4\u5219\u91CC\u7684\u58F0\u660E\u4F1A\u88AB\u540E\u7F6E\u540C\u540D\u89C4\u5219\u8986\u76D6\uFF0C
|
|
1029
|
+
\u6240\u4EE5\u7559\u767D\u5FC5\u987B\u5199\u5728\u8FD9\u4E00\u6761\u4E0A\uFF0C\u4E0D\u80FD\u53EA\u5199\u5728\u524D\u9762\u90A3\u6761\uFF09 */
|
|
1030
|
+
padding: 0 52px 4px 4px !important;
|
|
1031
|
+
}
|
|
1032
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_navList"] {
|
|
1033
|
+
flex-direction: column !important;
|
|
1034
|
+
gap: 2px !important;
|
|
1035
|
+
width: 100% !important;
|
|
1036
|
+
min-width: 0 !important;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
/* \u5217\u8868\u884C\uFF1A\u56FE\u6807\u5DE6\u3001\u6587\u5B57\u53F3\u3001\u884C\u5C3E \u203A \u6307\u793A */
|
|
1040
|
+
html[data-dshbr-drilldown="ready"] nav[class*="VOzbGW_nav"] button[class*="VOzbGW_navCell"],
|
|
1041
|
+
html[data-dshbr-drilldown="ready"] button[class*="VOzbGW_navCell"] {
|
|
1042
|
+
flex-direction: row !important;
|
|
1043
|
+
justify-content: flex-start !important;
|
|
1044
|
+
align-items: center !important;
|
|
1045
|
+
text-align: left !important;
|
|
1046
|
+
width: 100% !important;
|
|
1047
|
+
min-height: 52px !important;
|
|
1048
|
+
padding: 12px 14px !important;
|
|
1049
|
+
gap: 12px !important;
|
|
1050
|
+
border-radius: 12px !important;
|
|
1051
|
+
}
|
|
1052
|
+
html[data-dshbr-drilldown="ready"] nav[class*="VOzbGW_nav"] button[class*="VOzbGW_navCell"]::after {
|
|
1053
|
+
content: '' !important;
|
|
1054
|
+
width: 7px !important;
|
|
1055
|
+
height: 7px !important;
|
|
1056
|
+
margin-left: auto !important;
|
|
1057
|
+
flex: none !important;
|
|
1058
|
+
border-right: 1.7px solid var(--dsw-alias-label-tertiary, #9ca3af) !important;
|
|
1059
|
+
border-bottom: 1.7px solid var(--dsw-alias-label-tertiary, #9ca3af) !important;
|
|
1060
|
+
transform: rotate(-45deg) !important;
|
|
1061
|
+
}
|
|
1062
|
+
html[data-dshbr-drilldown="ready"] nav[class*="VOzbGW_nav"] button[class*="VOzbGW_navCell"] svg {
|
|
1063
|
+
width: 20px !important;
|
|
1064
|
+
height: 20px !important;
|
|
1065
|
+
}
|
|
1066
|
+
html[data-dshbr-drilldown="ready"] span[class*="VOzbGW_navLabel"] {
|
|
1067
|
+
font-size: 15px !important;
|
|
1068
|
+
line-height: 1.35 !important;
|
|
1069
|
+
white-space: normal !important;
|
|
1070
|
+
word-break: normal !important;
|
|
1071
|
+
text-align: left !important;
|
|
1072
|
+
flex: 0 1 auto !important;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
/* \u8BE6\u60C5\u9875\u8FD4\u56DE\u884C\uFF1A\u2039 \u7BAD\u5934 + \u6807\u9898 */
|
|
1076
|
+
/* \u8BE6\u60C5\u9875\u8FD4\u56DE\u884C\uFF1A\u2039 \u7BAD\u5934 + \u6807\u9898\u3002\u53F3\u4FA7\u540C\u6837\u8981\u7559 52px \u7ED9 \u2715 \u2014\u2014
|
|
1077
|
+
\u672C\u6761\u6BD4\u57FA\u7C7B\u591A\u4E00\u4E2A\u5C5E\u6027\u9009\u62E9\u5668\u3001\u7279\u5F02\u6027\u66F4\u9AD8\uFF0C\u4F1A**\u6574\u4F53\u8986\u76D6**\u57FA\u7C7B\u7684 padding\uFF0C
|
|
1078
|
+
\u6240\u4EE5\u7559\u767D\u5FC5\u987B\u5728\u8FD9\u91CC\u518D\u5199\u4E00\u904D\uFF08\u6F0F\u5199\u65F6\u57FA\u7C7B\u7684 52px \u4F1A\u88AB\u8FD9\u6761\u7684 4px \u9876\u6389\uFF0C
|
|
1079
|
+
\u957F\u6807\u9898\u4F1A\u94BB\u5230 \u2715 \u4E0B\u9762\uFF1B\u72EC\u7ACB\u9A8C\u6536\u5B9E\u6D4B\u6CE8\u5165 61 \u5B57\u7B26\u6807\u9898\u540E\u4EA4\u53E0 608/707 px\xB2\uFF09\u3002 */
|
|
1080
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] div[class*="VOzbGW_navTitle"] {
|
|
1081
|
+
display: flex !important;
|
|
1082
|
+
align-items: center !important;
|
|
1083
|
+
overflow-wrap: anywhere !important;
|
|
1084
|
+
padding: 2px 52px 2px 4px !important;
|
|
1085
|
+
}
|
|
1086
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_panel"][data-dshbr-settings-view="detail"] div[class*="VOzbGW_navTitle"]::before {
|
|
1087
|
+
content: '' !important;
|
|
1088
|
+
width: 8px !important;
|
|
1089
|
+
height: 8px !important;
|
|
1090
|
+
margin: 0 10px 0 6px !important;
|
|
1091
|
+
flex: none !important;
|
|
1092
|
+
border-left: 2px solid var(--dsw-alias-label-primary, #111827) !important;
|
|
1093
|
+
border-bottom: 2px solid var(--dsw-alias-label-primary, #111827) !important;
|
|
1094
|
+
transform: rotate(45deg) !important;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
/* content/header \u5FC5\u987B\u662F static \u2014\u2014 \u2715 \u662F\u7EDD\u5BF9\u5B9A\u4F4D\u7684\uFF0C\u5B83\u7684\u5305\u542B\u5757\u53D6\u51B3\u4E8E\u6700\u8FD1\u7684**\u5B9A\u4F4D\u7956\u5148**\u3002
|
|
1098
|
+
\u672C\u6765\u8FD9\u4E2A\u7956\u5148\u5C31\u662F panel\uFF08\u5BBF\u4E3B\u81EA\u5E26 position:relative\uFF09\uFF1B\u4F46\u4E00\u65E6 content \u6216 header \u88AB
|
|
1099
|
+
\u4EFB\u4F55\u6765\u6E90\uFF08\u672C\u5757\u3001\u5BBF\u4E3B\u5176\u5B83\u89C4\u5219\u3001\u7B2C\u4E09\u65B9\u63D2\u4EF6\uFF09\u8BBE\u6210 relative/absolute\uFF0C\u5305\u542B\u5757\u5C31\u4F1A\u4E0B\u79FB\uFF0C
|
|
1100
|
+
\u2715 \u4F1A\u4ECE\u9762\u677F\u53F3\u4E0A\u89D2\u8DD1\u5230\u5185\u5BB9\u533A\u91CC\u53BB\u3002\u72EC\u7ACB\u9A8C\u6536\u5B9E\u6D4B\uFF1A\u7ED9 content \u52A0 position:relative \u540E
|
|
1101
|
+
\u2715 \u7684 relTop \u7531 9 \u53D8\u6210 579\u3001\u5E76\u4E0E\u5E95\u90E8\u52A8\u4F5C\u680F\u91CD\u53E0 837 px\xB2\u3002 */
|
|
1102
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_content"] {
|
|
1103
|
+
position: static !important;
|
|
1104
|
+
width: 100% !important;
|
|
1105
|
+
max-width: 100% !important;
|
|
1106
|
+
flex: 1 1 auto !important;
|
|
1107
|
+
}
|
|
1108
|
+
/* header \u4E0D\u518D\u5F53\u9876\u680F\u7528\uFF1A\u5B83\u73B0\u5728\u53EA\u627F\u8F7D action \u69FD\uFF0C\u9AD8\u5EA6\u968F\u5185\u5BB9\uFF08\u53EF\u80FD\u662F\u5BBF\u4E3B\u7684\u4E00\u4E2A
|
|
1109
|
+
\u6309\u94AE\uFF0C\u4E5F\u53EF\u80FD\u662F\u591A\u4E2A\u63D2\u4EF6\u6CE8\u5165\u7684\u591A\u884C\u6309\u94AE\uFF09\uFF0C\u9760 flex \u81EA\u7136\u6491\u5F00\uFF0C\u4E0D\u8BBE\u56FA\u5B9A\u9AD8\u5EA6\u3002 */
|
|
1110
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_header"] {
|
|
1111
|
+
position: static !important;
|
|
1112
|
+
height: auto !important;
|
|
1113
|
+
padding: 8px 10px !important;
|
|
1114
|
+
align-items: center !important;
|
|
1115
|
+
justify-content: flex-end !important;
|
|
1116
|
+
}
|
|
1117
|
+
html[data-dshbr-drilldown="ready"] div[class*="VOzbGW_options"] {
|
|
1118
|
+
padding: 0 12px 16px !important;
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
830
1122
|
/* \u8FDC\u7A0B\u5DE5\u4F5C\u533A\u9009\u62E9\u5F39\u7A97\u79FB\u52A8\u7AEF/\u684C\u9762\u7AEF\u81EA\u9002\u5E94\u6837\u5F0F */
|
|
831
1123
|
#dsh-remote-workspace-modal {
|
|
832
1124
|
position: fixed !important;
|
|
@@ -1232,6 +1524,12 @@ if (typeof window !== "undefined") {
|
|
|
1232
1524
|
var RESOURCE_URL_COMPAT = installResourceUrlCompat();
|
|
1233
1525
|
if (typeof window !== "undefined") window.__dshResourceUrlCompat = RESOURCE_URL_COMPAT;
|
|
1234
1526
|
var MOBILE_MAX_WIDTH = 767;
|
|
1527
|
+
var SETTINGS_DRILLDOWN_MAX_WIDTH = 480;
|
|
1528
|
+
var DRILLDOWN_GATE_ATTR = "data-dshbr-drilldown";
|
|
1529
|
+
var DRILLDOWN_GATE_READY = "ready";
|
|
1530
|
+
var DRILLDOWN_GATE_FLAG = "dshBrDrilldownGate";
|
|
1531
|
+
var SETTINGS_VIEW_ATTR = "data-dshbr-settings-view";
|
|
1532
|
+
var SETTINGS_VIEW_DETAIL = "detail";
|
|
1235
1533
|
function isLocalEnvironment() {
|
|
1236
1534
|
if (typeof window === "undefined") return true;
|
|
1237
1535
|
const host = window.location.hostname || "";
|
|
@@ -4095,9 +4393,13 @@ function VersionBanner({ rpcCall }) {
|
|
|
4095
4393
|
gap: 8
|
|
4096
4394
|
}
|
|
4097
4395
|
},
|
|
4396
|
+
// 左组:版本徽标 + DSH 版本 + 检查更新。
|
|
4397
|
+
// flexWrap + minWidth:0 是必需的:此前只写 display:flex,左组既不能收缩也不能换行,
|
|
4398
|
+
// 会把整行顶到 305px;手机设置页内容列只有 277px,溢出部分被
|
|
4399
|
+
// overflow-x:hidden 静默裁掉(「检查更新」按钮被切一半)。
|
|
4098
4400
|
React.createElement(
|
|
4099
4401
|
"div",
|
|
4100
|
-
{ style: { display: "flex", alignItems: "center", gap: 8 } },
|
|
4402
|
+
{ style: { display: "flex", alignItems: "center", gap: 8, flexWrap: "wrap", minWidth: 0 } },
|
|
4101
4403
|
// 版本状态徽标
|
|
4102
4404
|
React.createElement(
|
|
4103
4405
|
"span",
|
|
@@ -4153,7 +4455,11 @@ function VersionBanner({ rpcCall }) {
|
|
|
4153
4455
|
padding: "0 8px",
|
|
4154
4456
|
fontSize: 11,
|
|
4155
4457
|
opacity: loading ? 0.5 : 1,
|
|
4156
|
-
gap: 4
|
|
4458
|
+
gap: 4,
|
|
4459
|
+
// 按钮是 inline-flex,文字会成为匿名 flex 项;被挤窄时会把「检查更新」
|
|
4460
|
+
// 折成两行。nowrap + flexShrink:0 保证它整体换行(由父级 flexWrap 负责)。
|
|
4461
|
+
whiteSpace: "nowrap",
|
|
4462
|
+
flexShrink: 0
|
|
4157
4463
|
},
|
|
4158
4464
|
onClick: check,
|
|
4159
4465
|
disabled: loading || upgrading || restarting,
|
|
@@ -4445,9 +4751,49 @@ var TABS = [
|
|
|
4445
4751
|
{ id: "ops", label: "\u8FD0\u7EF4\u76D1\u63A7", icon: Icons.ops }
|
|
4446
4752
|
];
|
|
4447
4753
|
function TabBar({ active, onChange, dots }) {
|
|
4754
|
+
const scrollRef = React.useRef(null);
|
|
4755
|
+
const [edges, setEdges] = React.useState({ left: false, right: false });
|
|
4756
|
+
React.useEffect(() => {
|
|
4757
|
+
const el = scrollRef.current;
|
|
4758
|
+
if (!el) return void 0;
|
|
4759
|
+
const update = () => {
|
|
4760
|
+
const max = el.scrollWidth - el.clientWidth;
|
|
4761
|
+
const left = el.scrollLeft > 1;
|
|
4762
|
+
const right = max > 1 && el.scrollLeft < max - 1;
|
|
4763
|
+
setEdges((prev) => prev.left === left && prev.right === right ? prev : { left, right });
|
|
4764
|
+
};
|
|
4765
|
+
update();
|
|
4766
|
+
el.addEventListener("scroll", update, { passive: true });
|
|
4767
|
+
let observer = null;
|
|
4768
|
+
if (typeof ResizeObserver === "function") {
|
|
4769
|
+
observer = new ResizeObserver(update);
|
|
4770
|
+
observer.observe(el);
|
|
4771
|
+
}
|
|
4772
|
+
return () => {
|
|
4773
|
+
el.removeEventListener("scroll", update);
|
|
4774
|
+
if (observer) observer.disconnect();
|
|
4775
|
+
};
|
|
4776
|
+
}, []);
|
|
4777
|
+
React.useEffect(() => {
|
|
4778
|
+
const el = scrollRef.current;
|
|
4779
|
+
if (!el) return;
|
|
4780
|
+
const target = el.querySelector('[data-dsh-tab-active="true"]');
|
|
4781
|
+
if (!target) return;
|
|
4782
|
+
const elRect = el.getBoundingClientRect();
|
|
4783
|
+
const tabRect = target.getBoundingClientRect();
|
|
4784
|
+
if (tabRect.left < elRect.left) el.scrollLeft -= elRect.left - tabRect.left + 8;
|
|
4785
|
+
else if (tabRect.right > elRect.right) el.scrollLeft += tabRect.right - elRect.right + 8;
|
|
4786
|
+
}, [active]);
|
|
4787
|
+
const maskStops = [];
|
|
4788
|
+
if (edges.left) maskStops.push("transparent 0px", "#000 20px");
|
|
4789
|
+
else maskStops.push("#000 0px");
|
|
4790
|
+
if (edges.right) maskStops.push("#000 calc(100% - 20px)", "transparent 100%");
|
|
4791
|
+
else maskStops.push("#000 100%");
|
|
4792
|
+
const maskImage = `linear-gradient(to right, ${maskStops.join(", ")})`;
|
|
4448
4793
|
return React.createElement(
|
|
4449
4794
|
"div",
|
|
4450
4795
|
{
|
|
4796
|
+
ref: scrollRef,
|
|
4451
4797
|
className: "dsh-tabbar-container",
|
|
4452
4798
|
style: {
|
|
4453
4799
|
display: "flex",
|
|
@@ -4459,7 +4805,9 @@ function TabBar({ active, onChange, dots }) {
|
|
|
4459
4805
|
maxWidth: "100%",
|
|
4460
4806
|
flexWrap: "nowrap",
|
|
4461
4807
|
scrollbarWidth: "none",
|
|
4462
|
-
msOverflowStyle: "none"
|
|
4808
|
+
msOverflowStyle: "none",
|
|
4809
|
+
WebkitMaskImage: maskImage,
|
|
4810
|
+
maskImage
|
|
4463
4811
|
}
|
|
4464
4812
|
},
|
|
4465
4813
|
TABS.map(({ id, label, icon: TabIcon }) => {
|
|
@@ -4469,6 +4817,7 @@ function TabBar({ active, onChange, dots }) {
|
|
|
4469
4817
|
"button",
|
|
4470
4818
|
{
|
|
4471
4819
|
key: id,
|
|
4820
|
+
"data-dsh-tab-active": isActive ? "true" : void 0,
|
|
4472
4821
|
onClick: () => onChange(id),
|
|
4473
4822
|
style: {
|
|
4474
4823
|
font: "inherit",
|
|
@@ -5304,6 +5653,53 @@ function injectMobileStyles() {
|
|
|
5304
5653
|
style.textContent = MOBILE_STYLES_CSS;
|
|
5305
5654
|
document.head.appendChild(style);
|
|
5306
5655
|
}
|
|
5656
|
+
function setupSettingsDrilldown() {
|
|
5657
|
+
if (typeof document === "undefined" || typeof window === "undefined") return;
|
|
5658
|
+
const root = document.documentElement;
|
|
5659
|
+
if (root.dataset[DRILLDOWN_GATE_FLAG] === "1") return;
|
|
5660
|
+
root.dataset[DRILLDOWN_GATE_FLAG] = "1";
|
|
5661
|
+
if (typeof window.matchMedia !== "function") return;
|
|
5662
|
+
let narrowQuery;
|
|
5663
|
+
try {
|
|
5664
|
+
narrowQuery = window.matchMedia(`(max-width: ${SETTINGS_DRILLDOWN_MAX_WIDTH}px)`);
|
|
5665
|
+
} catch {
|
|
5666
|
+
return;
|
|
5667
|
+
}
|
|
5668
|
+
if (!narrowQuery) return;
|
|
5669
|
+
const isNarrow = () => narrowQuery.matches === true;
|
|
5670
|
+
const onDocumentClick = (event) => {
|
|
5671
|
+
if (!isNarrow()) return;
|
|
5672
|
+
const target = event.target;
|
|
5673
|
+
if (!target || typeof target.closest !== "function") return;
|
|
5674
|
+
const panel = target.closest('div[class*="VOzbGW_panel"]');
|
|
5675
|
+
if (!panel) return;
|
|
5676
|
+
const nav = panel.querySelector('nav[class*="VOzbGW_nav"]');
|
|
5677
|
+
if (!nav || !nav.contains(target)) return;
|
|
5678
|
+
if (target.closest('button[class*="VOzbGW_navCell"]')) {
|
|
5679
|
+
panel.setAttribute(SETTINGS_VIEW_ATTR, SETTINGS_VIEW_DETAIL);
|
|
5680
|
+
if (nav.scrollTop) nav.scrollTop = 0;
|
|
5681
|
+
return;
|
|
5682
|
+
}
|
|
5683
|
+
if (panel.getAttribute(SETTINGS_VIEW_ATTR) === SETTINGS_VIEW_DETAIL) {
|
|
5684
|
+
panel.removeAttribute(SETTINGS_VIEW_ATTR);
|
|
5685
|
+
}
|
|
5686
|
+
};
|
|
5687
|
+
const syncGate = () => {
|
|
5688
|
+
if (narrowQuery.matches === true) root.setAttribute(DRILLDOWN_GATE_ATTR, DRILLDOWN_GATE_READY);
|
|
5689
|
+
else root.removeAttribute(DRILLDOWN_GATE_ATTR);
|
|
5690
|
+
};
|
|
5691
|
+
try {
|
|
5692
|
+
document.addEventListener("click", onDocumentClick, false);
|
|
5693
|
+
} catch {
|
|
5694
|
+
return;
|
|
5695
|
+
}
|
|
5696
|
+
try {
|
|
5697
|
+
if (typeof narrowQuery.addEventListener === "function") narrowQuery.addEventListener("change", syncGate);
|
|
5698
|
+
else if (typeof narrowQuery.addListener === "function") narrowQuery.addListener(syncGate);
|
|
5699
|
+
} catch {
|
|
5700
|
+
}
|
|
5701
|
+
syncGate();
|
|
5702
|
+
}
|
|
5307
5703
|
function setupMobileExperience(rpcCall, ctx) {
|
|
5308
5704
|
if (typeof document === "undefined" || typeof window === "undefined") return;
|
|
5309
5705
|
injectMobileStyles();
|
|
@@ -5997,7 +6393,6 @@ function showRemoteWorkspaceDialog(rpcCall, onWorkspaceAdded, clientCtx, onPicke
|
|
|
5997
6393
|
if (!switched && res?.sessionId && clientCtx?.sessions?.open) {
|
|
5998
6394
|
try {
|
|
5999
6395
|
clientCtx.sessions.open(res.sessionId);
|
|
6000
|
-
switched = true;
|
|
6001
6396
|
} catch (e) {
|
|
6002
6397
|
}
|
|
6003
6398
|
}
|
|
@@ -6108,7 +6503,6 @@ function showRemoteWorkspaceDialog(rpcCall, onWorkspaceAdded, clientCtx, onPicke
|
|
|
6108
6503
|
if (!switched && clientCtx?.sessions?.open && res.sessionId) {
|
|
6109
6504
|
try {
|
|
6110
6505
|
clientCtx.sessions.open(res.sessionId);
|
|
6111
|
-
switched = true;
|
|
6112
6506
|
} catch (e) {
|
|
6113
6507
|
console.warn("[dsh-bridge] sessions.open failed:", e);
|
|
6114
6508
|
}
|
|
@@ -6398,6 +6792,7 @@ function setupComposerCollapse() {
|
|
|
6398
6792
|
}
|
|
6399
6793
|
function apply(ctx) {
|
|
6400
6794
|
window.__dshClientCtx = ctx;
|
|
6795
|
+
setupSettingsDrilldown();
|
|
6401
6796
|
const rpcCall = (endpoint, payload, signal) => ctx.connection.rpc.call(BRIDGE_RPC_CHANNEL, endpoint, payload, signal);
|
|
6402
6797
|
window.__dshOpenRemoteWorkspaceModal = (onAdded, onPickDirect, onCancel) => showRemoteWorkspaceDialog(rpcCall, onAdded, ctx, onPickDirect, onCancel);
|
|
6403
6798
|
setupIosKeyboardAdapter();
|