@iasiv5/dsh-skins 1.5.0 → 1.5.2
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/lib/client.js +75 -15
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -306,6 +306,14 @@
|
|
|
306
306
|
}
|
|
307
307
|
const blur = backdrop.blur ?? 0;
|
|
308
308
|
if (typeof blur !== "number" || !(blur >= 0 && blur <= 24)) return null;
|
|
309
|
+
const desktopBlur = backdrop.desktopBlur ?? null;
|
|
310
|
+
if (desktopBlur !== null) {
|
|
311
|
+
if (!isPlainObject(desktopBlur)) return null;
|
|
312
|
+
for (const key of ["light", "dark"]) {
|
|
313
|
+
const value = desktopBlur[key];
|
|
314
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0 || value > 24) return null;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
309
317
|
}
|
|
310
318
|
const tokenOverrides = source.tokenOverrides ?? null;
|
|
311
319
|
if (tokenOverrides !== null) {
|
|
@@ -340,7 +348,8 @@
|
|
|
340
348
|
imageDark: backdrop.imageDark ?? null,
|
|
341
349
|
overlayLight: backdrop.overlayLight ?? null,
|
|
342
350
|
overlayDark: backdrop.overlayDark ?? null,
|
|
343
|
-
blur: backdrop.blur ?? 0
|
|
351
|
+
blur: backdrop.blur ?? 0,
|
|
352
|
+
desktopBlur: backdrop.desktopBlur ?? null
|
|
344
353
|
},
|
|
345
354
|
tokenOverrides,
|
|
346
355
|
cssVariables,
|
|
@@ -503,6 +512,23 @@
|
|
|
503
512
|
rules.push(`${darkSelector}::after{background-image:${backdrop.overlayDark}}`);
|
|
504
513
|
}
|
|
505
514
|
}
|
|
515
|
+
const desktopBlur = backdrop.desktopBlur ?? null;
|
|
516
|
+
if (desktopBlur !== null && (backdrop.imageLight !== null || backdrop.imageDark !== null)) {
|
|
517
|
+
const desktopSelector = `html[data-windows-titlebar] ${selector}`;
|
|
518
|
+
const blurDeclarations = (blur) => `filter:blur(${blur}px);transform:scale(1.02);`;
|
|
519
|
+
if (desktopBlur.light === desktopBlur.dark) {
|
|
520
|
+
if (desktopBlur.light > 0) {
|
|
521
|
+
rules.push(`${desktopSelector}::before{${blurDeclarations(desktopBlur.light)}}`);
|
|
522
|
+
}
|
|
523
|
+
} else {
|
|
524
|
+
if (desktopBlur.light > 0) {
|
|
525
|
+
rules.push(`${desktopSelector}:not([data-ds-dark-theme])::before{${blurDeclarations(desktopBlur.light)}}`);
|
|
526
|
+
}
|
|
527
|
+
if (desktopBlur.dark > 0) {
|
|
528
|
+
rules.push(`${desktopSelector}[data-ds-dark-theme]::before{${blurDeclarations(desktopBlur.dark)}}`);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
506
532
|
return rules.length === 0 ? null : rules.join("\n");
|
|
507
533
|
}
|
|
508
534
|
function variablesCss(effects) {
|
|
@@ -2377,13 +2403,17 @@ ${names}`);
|
|
|
2377
2403
|
`${SCOPE}{--dsw-menu-surface-fill:rgba(250, 249, 246, 0.94);--dsw-alias-menu-group-header-fill:rgba(250, 249, 246, 0.94);--dsw-specific-menu:rgba(250, 249, 246, 0.94)}`,
|
|
2378
2404
|
`${SCOPE}[data-ds-dark-theme]{--dsw-menu-surface-fill:rgba(18, 18, 26, 0.94);--dsw-alias-menu-group-header-fill:rgba(18, 18, 26, 0.94);--dsw-specific-menu:rgba(18, 18, 26, 0.94)}`,
|
|
2379
2405
|
// 弹窗毛玻璃(dsh-quota-watch 同款配方):宿主 Modal(设置页各弹窗、风险
|
|
2380
|
-
//
|
|
2406
|
+
// 确认)与 dsh-m / dsh-skins 弹层面板底色偏透,下层文字干扰阅读;
|
|
2381
2407
|
// 统一 86% 不透明皮肤底(暖雾白/玄夜)+ blur14 提饱和,下层内容只余柔光。
|
|
2382
2408
|
// 宿主弹窗经 CSS modules 哈希 → role/aria 定位;.dshm-*/.dsh-skins-pop 为
|
|
2383
2409
|
// 各插件自有稳定类名。--dsw-mask-blur 点亮官方默认 none 的遮罩模糊。
|
|
2410
|
+
// 1.5.1 豁免(ADR-0007 amendment):dsh-m 截图灯箱 .dsvm-lightbox 根同带
|
|
2411
|
+
// role/aria 语义,浅色 tint 会把影院式黑遮罩染成浅毛玻璃、白色控件整体隐形
|
|
2412
|
+
// (用户双模式实拍);影院遮罩归 dsh-m 自有不变量(0.9.62 起 background
|
|
2413
|
+
// !important 自持),此处 :not 双保险、语义归位。
|
|
2384
2414
|
`${SCOPE}{--dsw-mask-blur:blur(10px)}`,
|
|
2385
|
-
`${SCOPE} [role="dialog"][aria-modal="true"],${SCOPE} .dshm-panel,${SCOPE} .dshm-compat-dialog,${SCOPE} .dshm-dshchip-tip,${SCOPE} .dsh-skins-pop{background:color-mix(in srgb,rgb(250, 249, 246) 86%,transparent);backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3)}`,
|
|
2386
|
-
`${SCOPE}[data-ds-dark-theme] [role="dialog"][aria-modal="true"],${SCOPE}[data-ds-dark-theme] .dshm-panel,${SCOPE}[data-ds-dark-theme] .dshm-compat-dialog,${SCOPE}[data-ds-dark-theme] .dshm-dshchip-tip,${SCOPE}[data-ds-dark-theme] .dsh-skins-pop{background:color-mix(in srgb,rgb(18, 18, 26) 86%,transparent)}`,
|
|
2415
|
+
`${SCOPE} [role="dialog"][aria-modal="true"]:not(.dsvm-lightbox),${SCOPE} .dshm-panel,${SCOPE} .dshm-compat-dialog,${SCOPE} .dshm-dshchip-tip,${SCOPE} .dsh-skins-pop{background:color-mix(in srgb,rgb(250, 249, 246) 86%,transparent);backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3)}`,
|
|
2416
|
+
`${SCOPE}[data-ds-dark-theme] [role="dialog"][aria-modal="true"]:not(.dsvm-lightbox),${SCOPE}[data-ds-dark-theme] .dshm-panel,${SCOPE}[data-ds-dark-theme] .dshm-compat-dialog,${SCOPE}[data-ds-dark-theme] .dshm-dshchip-tip,${SCOPE}[data-ds-dark-theme] .dsh-skins-pop{background:color-mix(in srgb,rgb(18, 18, 26) 86%,transparent)}`,
|
|
2387
2417
|
// 浮层毛玻璃 v2(补漏,ADR-0007):v1 只盖宿主 Modal 与 .dshm-*/.dsh-skins-pop;
|
|
2388
2418
|
// 逐面排查后的剩余缺口——dockkit 悬浮窗壳 _float_(bg-layer-2 皮肤下 α≈0.6
|
|
2389
2419
|
// 且无 blur)、宿主对话框非 modal 变体(无 aria-modal,用 _dialog_ 结构兜底)、
|
|
@@ -2468,6 +2498,7 @@ ${names}`);
|
|
|
2468
2498
|
const scrimLight = `linear-gradient(rgba(252, 250, 246, ${s}) 0%, rgba(252, 250, 246, ${s}) 100%)`;
|
|
2469
2499
|
const scrimDark = `linear-gradient(rgba(16, 16, 26, ${s}) 0%, rgba(16, 16, 26, ${s}) 100%)`;
|
|
2470
2500
|
const blurPx = Math.round(12 * t * t);
|
|
2501
|
+
const desktopBlurPx = Math.min(24, blurPx + values.panelOpacity / 55);
|
|
2471
2502
|
const wallpaperUrl = assets?.wallpaper?.url ?? null;
|
|
2472
2503
|
const imageLight = wallpaperUrl === null ? null : `url("${wallpaperUrl}")`;
|
|
2473
2504
|
const imageDark = wallpaperUrl === null ? null : `url("${wallpaperUrl}")`;
|
|
@@ -2476,7 +2507,14 @@ ${names}`);
|
|
|
2476
2507
|
slogans: values.slogan ?? SLOGANS,
|
|
2477
2508
|
titleBrand: "美人志",
|
|
2478
2509
|
favicon: { href: MARK_URL, mime: "image/webp" },
|
|
2479
|
-
backdrop: {
|
|
2510
|
+
backdrop: {
|
|
2511
|
+
imageLight,
|
|
2512
|
+
imageDark,
|
|
2513
|
+
overlayLight: scrimLight,
|
|
2514
|
+
overlayDark: scrimDark,
|
|
2515
|
+
blur: blurPx,
|
|
2516
|
+
desktopBlur: { light: desktopBlurPx, dark: desktopBlurPx }
|
|
2517
|
+
},
|
|
2480
2518
|
tokenOverrides,
|
|
2481
2519
|
cssVariables: blurPx > 0 ? { "--dsh-mrz-glass-blur": { light: `${blurPx}px`, dark: `${blurPx}px` } } : null,
|
|
2482
2520
|
staticCss: blurPx > 0 ? CSS2 + "\n" + GLASS_RULE : CSS2,
|
|
@@ -2833,13 +2871,17 @@ ${names}`);
|
|
|
2833
2871
|
* 类名不可预测;一律通过 token 或 data-* 属性作用。 */
|
|
2834
2872
|
|
|
2835
2873
|
/* ---------- ⑧ 弹窗毛玻璃(dsh-quota-watch 同款配方) ----------
|
|
2836
|
-
* 宿主 Modal
|
|
2874
|
+
* 宿主 Modal(设置页各弹窗、风险确认)与 dsh-m / dsh-skins 的弹层面板
|
|
2837
2875
|
* 底色偏透,下层文字会干扰阅读:统一改为 86% 不透明皮肤底色 + blur14 提饱和,
|
|
2838
2876
|
* 下层内容被盖住只余柔光。遮罩/对话框由宿主 CSS modules 渲染,类名不可测 →
|
|
2839
2877
|
* role/aria 属性定位;.dshm-* / .dsh-skins-pop 是各插件自有稳定类名词汇。
|
|
2840
|
-
* --dsw-mask-blur 点亮官方默认 none 的遮罩模糊,弹窗四周页面一并磨砂。
|
|
2878
|
+
* --dsw-mask-blur 点亮官方默认 none 的遮罩模糊,弹窗四周页面一并磨砂。
|
|
2879
|
+
* 1.5.1 豁免(ADR-0007 amendment):dsh-m 截图灯箱 .dsvm-lightbox 根同带
|
|
2880
|
+
* role/aria 语义,浅色 tint 会把影院式黑遮罩染成浅毛玻璃、白色控件整体隐形
|
|
2881
|
+
* (用户双模式实拍);影院遮罩归 dsh-m 自有不变量(0.9.62 起 background
|
|
2882
|
+
* !important 自持),此处 :not 双保险、语义归位。 */
|
|
2841
2883
|
body[data-dsh-openbmc-skin] { --dsw-mask-blur: blur(10px); }
|
|
2842
|
-
body[data-dsh-openbmc-skin] [role="dialog"][aria-modal="true"],
|
|
2884
|
+
body[data-dsh-openbmc-skin] [role="dialog"][aria-modal="true"]:not(.dsvm-lightbox),
|
|
2843
2885
|
body[data-dsh-openbmc-skin] .dshm-panel,
|
|
2844
2886
|
body[data-dsh-openbmc-skin] .dshm-compat-dialog,
|
|
2845
2887
|
body[data-dsh-openbmc-skin] .dshm-dshchip-tip,
|
|
@@ -2848,7 +2890,7 @@ ${names}`);
|
|
|
2848
2890
|
backdrop-filter: blur(14px) saturate(1.3);
|
|
2849
2891
|
-webkit-backdrop-filter: blur(14px) saturate(1.3);
|
|
2850
2892
|
}
|
|
2851
|
-
body[data-dsh-openbmc-skin][data-ds-dark-theme] [role="dialog"][aria-modal="true"],
|
|
2893
|
+
body[data-dsh-openbmc-skin][data-ds-dark-theme] [role="dialog"][aria-modal="true"]:not(.dsvm-lightbox),
|
|
2852
2894
|
body[data-dsh-openbmc-skin][data-ds-dark-theme] .dshm-panel,
|
|
2853
2895
|
body[data-dsh-openbmc-skin][data-ds-dark-theme] .dshm-compat-dialog,
|
|
2854
2896
|
body[data-dsh-openbmc-skin][data-ds-dark-theme] .dshm-dshchip-tip,
|
|
@@ -2987,12 +3029,18 @@ ${names}`);
|
|
|
2987
3029
|
const imageLight = custom ? `url("${url}")` : BACKGROUND_ART === "" ? PLACEHOLDER_LIGHT : scrimLight;
|
|
2988
3030
|
const imageDark = custom ? `url("${url}")` : BACKGROUND_ART === "" ? PLACEHOLDER_DARK : scrimDark;
|
|
2989
3031
|
const blurPx = Math.round(24 * Math.pow(Math.max(0, (P - 55) / 45), 2));
|
|
3032
|
+
const desktopExtraBlurPx = P / 55;
|
|
3033
|
+
const desktopBlur = {
|
|
3034
|
+
light: Math.min(24, blurPx + desktopExtraBlurPx),
|
|
3035
|
+
dark: blurPx
|
|
3036
|
+
// OpenBMC dark remains the approved reference baseline.
|
|
3037
|
+
};
|
|
2990
3038
|
return {
|
|
2991
3039
|
bodyAttribute: "dshOpenbmcSkin",
|
|
2992
3040
|
slogans: values.slogan ?? SLOGANS2,
|
|
2993
3041
|
titleBrand: "OpenBMC Studio",
|
|
2994
3042
|
favicon: { href: FAVICON_DATA_URL, mime: FAVICON_MIME },
|
|
2995
|
-
backdrop: { imageLight, imageDark, overlayLight: null, overlayDark: null, blur: blurPx },
|
|
3043
|
+
backdrop: { imageLight, imageDark, overlayLight: null, overlayDark: null, blur: blurPx, desktopBlur },
|
|
2996
3044
|
tokenOverrides,
|
|
2997
3045
|
cssVariables: blurPx > 0 ? { "--dsh-openbmc-glass-blur": { light: `${blurPx}px`, dark: `${blurPx}px` } } : null,
|
|
2998
3046
|
staticCss: blurPx > 0 ? CSS3 + "\n" + GLASS_RULE2 : CSS3,
|
|
@@ -3146,13 +3194,17 @@ body[data-dsh-uefi-harness][data-ds-dark-theme] :is([class*="oRe1gG_bubble"], [c
|
|
|
3146
3194
|
}
|
|
3147
3195
|
|
|
3148
3196
|
/* ---------- 弹窗毛玻璃(dsh-quota-watch 同款配方) ----------
|
|
3149
|
-
* 宿主 Modal
|
|
3197
|
+
* 宿主 Modal(设置页各弹窗、风险确认)与 dsh-m / dsh-skins 的弹层面板
|
|
3150
3198
|
* 底色偏透,下层文字会干扰阅读:统一改为 86% 不透明皮肤底色 + blur14 提饱和,
|
|
3151
3199
|
* 下层内容被盖住只余柔光。遮罩/对话框由宿主 CSS modules 渲染,类名不可测 →
|
|
3152
3200
|
* role/aria 属性定位;.dshm-* / .dsh-skins-pop 是各插件自有稳定类名词汇。
|
|
3153
|
-
* --dsw-mask-blur 点亮官方默认 none 的遮罩模糊,弹窗四周页面一并磨砂。
|
|
3201
|
+
* --dsw-mask-blur 点亮官方默认 none 的遮罩模糊,弹窗四周页面一并磨砂。
|
|
3202
|
+
* 1.5.1 豁免(ADR-0007 amendment):dsh-m 截图灯箱 .dsvm-lightbox 根同带
|
|
3203
|
+
* role/aria 语义,浅色 tint 会把影院式黑遮罩染成浅毛玻璃、白色控件整体隐形
|
|
3204
|
+
* (用户双模式实拍);影院遮罩归 dsh-m 自有不变量(0.9.62 起 background
|
|
3205
|
+
* !important 自持),此处 :not 双保险、语义归位。 */
|
|
3154
3206
|
body[data-dsh-uefi-harness] { --dsw-mask-blur: blur(10px); }
|
|
3155
|
-
body[data-dsh-uefi-harness] [role="dialog"][aria-modal="true"],
|
|
3207
|
+
body[data-dsh-uefi-harness] [role="dialog"][aria-modal="true"]:not(.dsvm-lightbox),
|
|
3156
3208
|
body[data-dsh-uefi-harness] .dshm-panel,
|
|
3157
3209
|
body[data-dsh-uefi-harness] .dshm-compat-dialog,
|
|
3158
3210
|
body[data-dsh-uefi-harness] .dshm-dshchip-tip,
|
|
@@ -3161,7 +3213,7 @@ body[data-dsh-uefi-harness] .dsh-skins-pop {
|
|
|
3161
3213
|
backdrop-filter: blur(14px) saturate(1.3);
|
|
3162
3214
|
-webkit-backdrop-filter: blur(14px) saturate(1.3);
|
|
3163
3215
|
}
|
|
3164
|
-
body[data-dsh-uefi-harness][data-ds-dark-theme] [role="dialog"][aria-modal="true"],
|
|
3216
|
+
body[data-dsh-uefi-harness][data-ds-dark-theme] [role="dialog"][aria-modal="true"]:not(.dsvm-lightbox),
|
|
3165
3217
|
body[data-dsh-uefi-harness][data-ds-dark-theme] .dshm-panel,
|
|
3166
3218
|
body[data-dsh-uefi-harness][data-ds-dark-theme] .dshm-compat-dialog,
|
|
3167
3219
|
body[data-dsh-uefi-harness][data-ds-dark-theme] .dshm-dshchip-tip,
|
|
@@ -3296,12 +3348,20 @@ body[data-dsh-uefi-harness][data-ds-dark-theme] .lc-tip {
|
|
|
3296
3348
|
const imageLight = custom ? `url("${url}")` : scrimLight;
|
|
3297
3349
|
const imageDark = custom ? `url("${url}")` : scrimDark;
|
|
3298
3350
|
const blurPx = Math.round(24 * Math.pow(Math.max(0, (P - 55) / 45), 2));
|
|
3351
|
+
const desktopBlurPx = Math.min(24, blurPx + P / 55);
|
|
3299
3352
|
return {
|
|
3300
3353
|
bodyAttribute: "dshUefiHarness",
|
|
3301
3354
|
slogans: values.slogan ?? SLOGANS2,
|
|
3302
3355
|
titleBrand: "UEFI Studio",
|
|
3303
3356
|
favicon: { href: favicon, mime: "image/svg+xml" },
|
|
3304
|
-
backdrop: {
|
|
3357
|
+
backdrop: {
|
|
3358
|
+
imageLight,
|
|
3359
|
+
imageDark,
|
|
3360
|
+
overlayLight: null,
|
|
3361
|
+
overlayDark: null,
|
|
3362
|
+
blur: blurPx,
|
|
3363
|
+
desktopBlur: { light: desktopBlurPx, dark: desktopBlurPx }
|
|
3364
|
+
},
|
|
3305
3365
|
tokenOverrides,
|
|
3306
3366
|
cssVariables: blurPx > 0 ? { "--dsh-uefi-glass-blur": { light: `${blurPx}px`, dark: `${blurPx}px` } } : null,
|
|
3307
3367
|
staticCss: blurPx > 0 ? css + "\n" + GLASS_RULE2 : css,
|