@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.
Files changed (2) hide show
  1. package/lib/client.js +75 -15
  2. 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
- // 确认、灯箱)与 dsh-m / dsh-skins 弹层面板底色偏透,下层文字干扰阅读;
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: { imageLight, imageDark, overlayLight: scrimLight, overlayDark: scrimDark, blur: blurPx },
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(设置页各弹窗、风险确认、灯箱)与 dsh-m / dsh-skins 的弹层面板
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(设置页各弹窗、风险确认、灯箱)与 dsh-m / dsh-skins 的弹层面板
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: { imageLight, imageDark, overlayLight: null, overlayDark: null, blur: blurPx },
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,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iasiv5/dsh-skins",
3
3
  "description": "DSH Web 皮肤插件:多套品牌皮肤侧栏热切换。",
4
- "version": "1.5.0",
4
+ "version": "1.5.2",
5
5
  "homepage": "https://github.com/iasiv5/dsh-skins#readme",
6
6
  "repository": {
7
7
  "type": "git",