dsh-pocket 2.1.3 → 2.1.4
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.en.md +1 -1
- package/README.md +1 -1
- package/client/client.js +34 -3
- package/client/mobile/mobile.css.ts +34 -3
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -191,7 +191,7 @@ Such tools take over all traffic and often cut cloudflared's tunnel-edge connect
|
|
|
191
191
|
```sh
|
|
192
192
|
npm install
|
|
193
193
|
node client/build.mjs # rebuild after editing client/
|
|
194
|
-
npm test # proxy / auth / compression / tunnel / service / RPC / settings (
|
|
194
|
+
npm test # proxy / auth / compression / tunnel / service / RPC / settings (93 tests)
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
**Want to try your changes locally without publishing?** Point the installed plugin at your local checkout with a symlink and restart dsh web. Full steps (including switching back to the npm release) are in [LOCAL-DEV.md](./LOCAL-DEV.md).
|
package/README.md
CHANGED
|
@@ -192,7 +192,7 @@ npx @deepseek-ai/dsh web
|
|
|
192
192
|
```sh
|
|
193
193
|
npm install
|
|
194
194
|
node client/build.mjs # 改 client/ 后重新打包
|
|
195
|
-
npm test # 代理 / 认证 / 压缩 / 隧道 / 服务 / RPC / 设置(
|
|
195
|
+
npm test # 代理 / 认证 / 压缩 / 隧道 / 服务 / RPC / 设置(93 测试)
|
|
196
196
|
```
|
|
197
197
|
|
|
198
198
|
**改完想在本机先试?** 不用发版:把插件换成指向本地仓库的软链,重启 dsh web 就是本地代码。完整步骤(含怎么换回 npm 官方版本)见 [LOCAL-DEV.md](./LOCAL-DEV.md)。
|
package/client/client.js
CHANGED
|
@@ -535,14 +535,19 @@ var MOBILE_CSS = `
|
|
|
535
535
|
it to 500), and when the layer outranks the drawer, the backdrop paints
|
|
536
536
|
ABOVE the drawer and swallows every tap \u2014 the drawer opens but no row
|
|
537
537
|
can be pressed (every tap just closes it). The drawer must therefore
|
|
538
|
-
outrank any such raise
|
|
539
|
-
|
|
538
|
+
outrank any such raise.
|
|
539
|
+
1200 (was 600) clears the mobile layers shipped by
|
|
540
|
+
@linxin666/dsh-web-ui-all \u2014 its sidebar pane is z-index 1100, its
|
|
541
|
+
details pane 1000 and its full-screen frame ::after mask 1050 (issue
|
|
542
|
+
#67: that mask sat on top of the 600 drawer and ate every tap). Still
|
|
543
|
+
far under the fixed-position banners/toasts (z 9999) that float at the
|
|
544
|
+
viewport level. */
|
|
540
545
|
[data-mobile-nav="frame"] > :first-child {
|
|
541
546
|
position: absolute !important;
|
|
542
547
|
inset: 0 auto 0 0 !important;
|
|
543
548
|
width: max-content !important;
|
|
544
549
|
max-width: 92vw !important;
|
|
545
|
-
z-index:
|
|
550
|
+
z-index: 1200 !important;
|
|
546
551
|
transform: translateX(-110%);
|
|
547
552
|
transition: transform .28s var(--ds-ease-in-out, ease-in-out);
|
|
548
553
|
background: var(--dsw-alias-bg-base, #ffffff);
|
|
@@ -571,6 +576,32 @@ var MOBILE_CSS = `
|
|
|
571
576
|
transform: none !important;
|
|
572
577
|
}
|
|
573
578
|
|
|
579
|
+
/* Kill a competing full-screen mask (issue #67).
|
|
580
|
+
@linxin666/dsh-web-ui-all ships its own mobile drawer, and part of it is
|
|
581
|
+
|
|
582
|
+
[data-dsh-frame]:not([data-sidebar-collapsed])::after {
|
|
583
|
+
content: ""; position: fixed; inset: 0; z-index: 1050;
|
|
584
|
+
background: rgb(0 0 0 / 24%);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
The pseudo-element belongs to the frame we already mark, and the frame
|
|
588
|
+
carries only "position: relative" with z-index auto \u2014 no stacking context
|
|
589
|
+
\u2014 so this mask competes with the drawer in the parent stacking context
|
|
590
|
+
and, at 1050, paints over it. It covers the whole viewport, so every tap
|
|
591
|
+
on a session row lands on the mask instead: the drawer opens but nothing
|
|
592
|
+
inside it can be pressed, and the page behind cannot be scrolled.
|
|
593
|
+
Removing it is safe: the mobile stylesheet already renders its own
|
|
594
|
+
backdrop, and tapping outside the drawer is handled in JS.
|
|
595
|
+
|
|
596
|
+
The attribute selector is repeated on purpose. Their rule has the same
|
|
597
|
+
specificity (0,2,1) once ours is written the obvious way, and plugin
|
|
598
|
+
stylesheets are injected in load order, so a tie would be decided by
|
|
599
|
+
whichever plugin happened to load last. Doubling the attribute makes it
|
|
600
|
+
(0,3,1) and deterministic. */
|
|
601
|
+
[data-mobile-nav="frame"][data-mobile-nav="frame"]:not([data-sidebar-collapsed])::after {
|
|
602
|
+
content: none !important;
|
|
603
|
+
}
|
|
604
|
+
|
|
574
605
|
/* Drag handles are useless on touch and would float over the drawer. */
|
|
575
606
|
[data-side="sidebar"],
|
|
576
607
|
[data-side="details"] {
|
|
@@ -210,14 +210,19 @@ export const MOBILE_CSS = `
|
|
|
210
210
|
it to 500), and when the layer outranks the drawer, the backdrop paints
|
|
211
211
|
ABOVE the drawer and swallows every tap — the drawer opens but no row
|
|
212
212
|
can be pressed (every tap just closes it). The drawer must therefore
|
|
213
|
-
outrank any such raise
|
|
214
|
-
|
|
213
|
+
outrank any such raise.
|
|
214
|
+
1200 (was 600) clears the mobile layers shipped by
|
|
215
|
+
@linxin666/dsh-web-ui-all — its sidebar pane is z-index 1100, its
|
|
216
|
+
details pane 1000 and its full-screen frame ::after mask 1050 (issue
|
|
217
|
+
#67: that mask sat on top of the 600 drawer and ate every tap). Still
|
|
218
|
+
far under the fixed-position banners/toasts (z 9999) that float at the
|
|
219
|
+
viewport level. */
|
|
215
220
|
[data-mobile-nav="frame"] > :first-child {
|
|
216
221
|
position: absolute !important;
|
|
217
222
|
inset: 0 auto 0 0 !important;
|
|
218
223
|
width: max-content !important;
|
|
219
224
|
max-width: 92vw !important;
|
|
220
|
-
z-index:
|
|
225
|
+
z-index: 1200 !important;
|
|
221
226
|
transform: translateX(-110%);
|
|
222
227
|
transition: transform .28s var(--ds-ease-in-out, ease-in-out);
|
|
223
228
|
background: var(--dsw-alias-bg-base, #ffffff);
|
|
@@ -246,6 +251,32 @@ export const MOBILE_CSS = `
|
|
|
246
251
|
transform: none !important;
|
|
247
252
|
}
|
|
248
253
|
|
|
254
|
+
/* Kill a competing full-screen mask (issue #67).
|
|
255
|
+
@linxin666/dsh-web-ui-all ships its own mobile drawer, and part of it is
|
|
256
|
+
|
|
257
|
+
[data-dsh-frame]:not([data-sidebar-collapsed])::after {
|
|
258
|
+
content: ""; position: fixed; inset: 0; z-index: 1050;
|
|
259
|
+
background: rgb(0 0 0 / 24%);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
The pseudo-element belongs to the frame we already mark, and the frame
|
|
263
|
+
carries only "position: relative" with z-index auto — no stacking context
|
|
264
|
+
— so this mask competes with the drawer in the parent stacking context
|
|
265
|
+
and, at 1050, paints over it. It covers the whole viewport, so every tap
|
|
266
|
+
on a session row lands on the mask instead: the drawer opens but nothing
|
|
267
|
+
inside it can be pressed, and the page behind cannot be scrolled.
|
|
268
|
+
Removing it is safe: the mobile stylesheet already renders its own
|
|
269
|
+
backdrop, and tapping outside the drawer is handled in JS.
|
|
270
|
+
|
|
271
|
+
The attribute selector is repeated on purpose. Their rule has the same
|
|
272
|
+
specificity (0,2,1) once ours is written the obvious way, and plugin
|
|
273
|
+
stylesheets are injected in load order, so a tie would be decided by
|
|
274
|
+
whichever plugin happened to load last. Doubling the attribute makes it
|
|
275
|
+
(0,3,1) and deterministic. */
|
|
276
|
+
[data-mobile-nav="frame"][data-mobile-nav="frame"]:not([data-sidebar-collapsed])::after {
|
|
277
|
+
content: none !important;
|
|
278
|
+
}
|
|
279
|
+
|
|
249
280
|
/* Drag handles are useless on touch and would float over the drawer. */
|
|
250
281
|
[data-side="sidebar"],
|
|
251
282
|
[data-side="details"] {
|
package/package.json
CHANGED