dsh-long-plugins 2.1.0 → 2.2.0
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 +9 -0
- package/client/client.js +101 -47
- package/dsh.plugin.json +1 -1
- package/lib/index.js +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -124,6 +124,15 @@ MIT
|
|
|
124
124
|
|
|
125
125
|
## Changelog / 更新记录
|
|
126
126
|
|
|
127
|
+
### v2.2.0
|
|
128
|
+
|
|
129
|
+
界面优化与重构
|
|
130
|
+
|
|
131
|
+
- 背景图独立层:背景图改为独立图层,新增「背景图模糊 / 背景图透明度」滑杆(单独一组,不影响磨砂卡),并新增「背景罩层颜色」色盘,背景图可模糊、可调透明度、罩色可选。
|
|
132
|
+
- 会话区:去掉会话区独立磨砂卡片,直接透出共享背景(背景图 + 罩层颜色 + 模糊),版面更通透。
|
|
133
|
+
- 输入区:整个输入区外围(composer 根/位置座)透明透出背景。
|
|
134
|
+
- 可读性:浅色主题下弱化标签/元信息文字加深,对比度更高。
|
|
135
|
+
|
|
127
136
|
### v2.1.0
|
|
128
137
|
- 增强:毛玻璃界面(玻璃拟态)进一步打磨。
|
|
129
138
|
- 主题感知磨砂:磨砂卡片颜色跟随系统深色/浅色主题自动反转(浅色=白磨砂深字 / 深色=深磨砂浅字)。
|
package/client/client.js
CHANGED
|
@@ -974,6 +974,8 @@ window.__ModuleLoader__.load({
|
|
|
974
974
|
const CSS = `
|
|
975
975
|
@font-face{font-family:DshChipCellInput;src:url(data:font/ttf;base64,AAEAAAAKAIAAAwAgT1MvMkT8SmIAAAEoAAAAYGNtYXAADQBPAAABkAAAADRnbHlmAAAAAAAAAcwAAAABaGVhZCwtPGoAAACsAAAANmhoZWEDIg7bAAAA5AAAACRobXR4EZQAAAAAAYgAAAAIbG9jYQAAAAAAAAHEAAAABm1heHAAAwACAAABCAAAACBuYW1lvljk2gAAAdAAAABscG9zdNNweNQAAAI8AAAALQABAAAAAQAAdia1tV8PPPUAAwPoAAAAAOaLfcUAAAAA5ot9xQAAAAAAAAAAAAAAAwACAAAAAAAAAAEAAAMg/zgAAA+gAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACAAEAAAACAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwjKAZAABQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAPz8/PwAA//z//AMg/zgAAAMgAMgAAAAAAAAAAAAAAAAAAAAgAAAB9AAAAAAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAIAAAAAQABAABAAD//P//AAD//P//AAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAEADYAAQAAAAAAAQALAAAAAQAAAAAAAgAHAAsAAwABBAkAAQAWABIAAwABBAkAAgAOAChEc2hDaGlwQ2VsbFJlZ3VsYXIARABzAGgAQwBoAGkAcABDAGUAbABsAFIAZQBnAHUAbABhAHIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAABAgZvYmpyZXAAAAA=)format("truetype")}
|
|
976
976
|
.uV2eYG_input,.uV2eYG_mirror{font-family:"DshChipCellInput",var(--dsw-font-family)!important}
|
|
977
|
+
/* 输入区随系统深/浅自动切换(原生系统色,文字/背景同源始终匹配),避免深色下白字配浅底 */
|
|
978
|
+
.uV2eYG_input{color-scheme:light dark;background-color:Canvas!important;color:CanvasText!important}
|
|
977
979
|
[data-decoration="chip"][title^="${HIDDEN_LABEL}"]{display:inline-block!important;width:0!important;height:0!important;overflow:hidden!important;background:transparent!important;border:none!important;box-shadow:none!important;margin:0!important;padding:0!important;font-size:0!important;line-height:0!important}
|
|
978
980
|
[data-decoration="chip"][title^="${HIDDEN_LABEL}"]:before,[data-decoration="chip"][title^="${HIDDEN_LABEL}"]>*{display:none!important}
|
|
979
981
|
.dsh-upload-control{display:flex;align-items:center;min-width:0}
|
|
@@ -3058,17 +3060,21 @@ window.__ModuleLoader__.load({
|
|
|
3058
3060
|
html[data-dsh-glass="on"] #root [class*="FJxK0a_root"] {
|
|
3059
3061
|
background-color: transparent !important;
|
|
3060
3062
|
}
|
|
3061
|
-
/*
|
|
3063
|
+
/* 会话滚动区:去掉独立磨砂卡片,直接透出共享背景(背景图+罩层颜色+模糊) */
|
|
3062
3064
|
html[data-dsh-glass="on"] #root [class*="wSkVaW_scrollBody"] {
|
|
3063
|
-
background:
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3065
|
+
background-color: transparent !important;
|
|
3066
|
+
background-image: none !important;
|
|
3067
|
+
backdrop-filter: none !important;
|
|
3068
|
+
-webkit-backdrop-filter: none !important;
|
|
3069
|
+
border-radius: 0 !important;
|
|
3070
|
+
box-shadow: none !important;
|
|
3067
3071
|
overflow: auto;
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3072
|
+
width: 100% !important;
|
|
3073
|
+
max-width: none !important;
|
|
3074
|
+
margin: 0 !important;
|
|
3071
3075
|
}
|
|
3076
|
+
/* 背景图独立层:铺满整页、位于内容之下,可单独设背景图模糊与透明度,不影响内容清晰度 */
|
|
3077
|
+
.dsh-glass-bgimg{position:fixed;inset:0;z-index:-1;pointer-events:none;background-size:cover;background-position:center;background-repeat:no-repeat;display:none;transform:translateZ(0);}
|
|
3072
3078
|
/* 滚动条:细、半透明、圆角,且左移贴在内容区(不占卡片最右边缘),让右边缘过渡柔和 */
|
|
3073
3079
|
html[data-dsh-glass="on"] #root [class*="wSkVaW_scrollBody"]::-webkit-scrollbar { width: 8px; }
|
|
3074
3080
|
html[data-dsh-glass="on"] #root [class*="wSkVaW_scrollBody"]::-webkit-scrollbar-track { background: transparent; }
|
|
@@ -3083,12 +3089,34 @@ window.__ModuleLoader__.load({
|
|
|
3083
3089
|
border-radius: 0 !important;
|
|
3084
3090
|
box-shadow: none !important;
|
|
3085
3091
|
}
|
|
3086
|
-
/*
|
|
3087
|
-
html[data-dsh-glass="on"]
|
|
3092
|
+
/* 输入区外围(composer根/位置座)透明透出背景;输入框盒子保留原生白/黑 */
|
|
3093
|
+
html[data-dsh-glass="on"] [class*="wSkVaW_composerSeat"],
|
|
3094
|
+
html[data-dsh-glass="on"] [class*="uV2eYG_root"] {
|
|
3095
|
+
background-color: transparent !important;
|
|
3096
|
+
background-image: none !important;
|
|
3097
|
+
box-shadow: none !important;
|
|
3098
|
+
backdrop-filter: none !important;
|
|
3099
|
+
-webkit-backdrop-filter: none !important;
|
|
3100
|
+
}
|
|
3101
|
+
/* 输入框盒子(uV2eYG_card):只在外层铺淡色底(可调);里层输入区透明避免拼缝白条;文字随主题色 */
|
|
3102
|
+
html[data-dsh-glass="on"] [class*="uV2eYG_card"] {
|
|
3088
3103
|
background: linear-gradient(var(--dsh-glass-input-white, rgba(255,255,255,0.3)), var(--dsh-glass-input-white, rgba(255,255,255,0.3))) var(--dsh-glass-input-bg, rgba(26,35,50,0.6)) !important;
|
|
3089
|
-
|
|
3090
|
-
-
|
|
3104
|
+
color: var(--dsw-alias-label-primary, #111827) !important;
|
|
3105
|
+
box-shadow: none !important;
|
|
3106
|
+
backdrop-filter: none !important;
|
|
3107
|
+
-webkit-backdrop-filter: none !important;
|
|
3091
3108
|
}
|
|
3109
|
+
html[data-dsh-glass="on"] [class*="uV2eYG_input"] {
|
|
3110
|
+
background-color: transparent !important;
|
|
3111
|
+
color: var(--dsw-alias-label-primary, #111827) !important;
|
|
3112
|
+
}
|
|
3113
|
+
@media (prefers-color-scheme: dark) {
|
|
3114
|
+
html[data-dsh-glass="on"] [class*="uV2eYG_card"],
|
|
3115
|
+
html[data-dsh-glass="on"] [class*="uV2eYG_input"] { color: var(--dsw-alias-label-primary, #e5e7eb) !important; }
|
|
3116
|
+
}
|
|
3117
|
+
/* 轮次/历史提问预览:默认隐藏(点开才显示),并去掉头部底色,避免底部露出白条 */
|
|
3118
|
+
.dsh-turn-preview:not(.open){display:none !important;}
|
|
3119
|
+
.dsh-turn-preview-head{background:transparent !important;}
|
|
3092
3120
|
|
|
3093
3121
|
html[data-dsh-glass="off"] #root [class*="sidebarCol"],
|
|
3094
3122
|
html[data-dsh-glass="off"] #root [class*="header"],
|
|
@@ -3137,6 +3165,14 @@ window.__ModuleLoader__.load({
|
|
|
3137
3165
|
backdrop-filter: none !important;
|
|
3138
3166
|
-webkit-backdrop-filter: none !important;
|
|
3139
3167
|
}
|
|
3168
|
+
/* 玻璃开启 + 浅色系统主题:加深弱化标签/元信息文字,避免浅灰字叠在浅磨砂卡上看不清 */
|
|
3169
|
+
@media (prefers-color-scheme: light) {
|
|
3170
|
+
html[data-dsh-glass="on"],
|
|
3171
|
+
html[data-dsh-glass="on"] * {
|
|
3172
|
+
--dsw-alias-label-secondary: #383d44 !important;
|
|
3173
|
+
--dsw-alias-label-tertiary: #50545b !important;
|
|
3174
|
+
}
|
|
3175
|
+
}
|
|
3140
3176
|
.dsh-glass-section{display:flex;flex-direction:column;gap:16px;min-width:0;padding:4px 2px 24px;color:var(--dsw-alias-label-primary)}
|
|
3141
3177
|
.dsh-glass-head{display:flex;align-items:center;justify-content:space-between;gap:16px}
|
|
3142
3178
|
.dsh-glass-head h2{margin:0;font-size:20px;line-height:28px}
|
|
@@ -3165,7 +3201,7 @@ window.__ModuleLoader__.load({
|
|
|
3165
3201
|
.dsh-glass-error{padding:10px 12px;border-radius:8px;background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);font-size:12px}
|
|
3166
3202
|
.dsh-glass-note{margin:0;font-size:12px;color:var(--dsw-alias-label-tertiary)}
|
|
3167
3203
|
`
|
|
3168
|
-
const GLASS_SWATCHES = ['#
|
|
3204
|
+
const GLASS_SWATCHES = ['#1a2332', '#0f1420', '#1e3a5f', '#1e5e46', '#5e2e5e', '#6e2323']
|
|
3169
3205
|
const glassText = (e) => (e && e.message) ? e.message : String(e)
|
|
3170
3206
|
function glassImageInput(value, onChange) {
|
|
3171
3207
|
return React.createElement('label', { className: 'dsh-glass-file' },
|
|
@@ -3226,12 +3262,13 @@ window.__ModuleLoader__.load({
|
|
|
3226
3262
|
setState((s) => ({ ...s, saving: true, error: '' }))
|
|
3227
3263
|
try {
|
|
3228
3264
|
const cfg = state.cfg || {}
|
|
3265
|
+
const num = (v, fb) => ((typeof v === 'number' && Number.isFinite(v) && v >= 0) ? v : fb)
|
|
3229
3266
|
const payload = {
|
|
3230
|
-
enabled: !!cfg.enabled, blur:
|
|
3231
|
-
bgImage: state.bgImage || cfg.bgImage || '', bgMask:
|
|
3267
|
+
enabled: !!cfg.enabled, blur: num(cfg.blur, 0),
|
|
3268
|
+
bgImage: state.bgImage || cfg.bgImage || '', bgMask: num(cfg.bgMask, 0.28), bgColor: cfg.bgColor || '#1a2332', bgBlur: num(cfg.bgBlur, 0), bgOpacity: num(cfg.bgOpacity, 1),
|
|
3232
3269
|
zone: {
|
|
3233
|
-
session: { enabled: cfg.session && cfg.session.enabled !== false, color: (cfg.session && cfg.session.color) || '#1a2332', mask:
|
|
3234
|
-
input: { color: (cfg.input && cfg.input.color) || '#1a2332', mask:
|
|
3270
|
+
session: { enabled: cfg.session && cfg.session.enabled !== false, color: (cfg.session && cfg.session.color) || '#1a2332', mask: num(cfg.session && cfg.session.mask, 0.45), opacity: num(cfg.session && cfg.session.opacity, 0.5) },
|
|
3271
|
+
input: { color: (cfg.input && cfg.input.color) || '#1a2332', mask: num(cfg.input && cfg.input.mask, 0.6), opacity: num(cfg.input && cfg.input.opacity, 0.55) },
|
|
3235
3272
|
},
|
|
3236
3273
|
}
|
|
3237
3274
|
const r = await fetch('/api/dsh-uploads/glass-config', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(payload) })
|
|
@@ -3255,8 +3292,6 @@ window.__ModuleLoader__.load({
|
|
|
3255
3292
|
React.createElement('input', { type: 'range', className: 'dsh-glass-range', min: 0, max: 80, value: cfg.blur ?? 20, onChange: (e) => patch({ blur: Number(e.target.value) }) }),
|
|
3256
3293
|
React.createElement('span', { className: 'dsh-glass-val' }, `${Number(cfg.blur ?? 20)} px`),
|
|
3257
3294
|
),
|
|
3258
|
-
React.createElement(GlassZoneCard, { title: '会话区', zone: cfg.session, onChange: (p) => patchZone('session', p), showGlassToggle: true }),
|
|
3259
|
-
React.createElement(GlassZoneCard, { title: '输入区', zone: cfg.input, onChange: (p) => patchZone('input', p) }),
|
|
3260
3295
|
React.createElement('div', { className: 'dsh-glass-row' },
|
|
3261
3296
|
React.createElement('label', null, '共用背景图'),
|
|
3262
3297
|
React.createElement('div', { className: 'dsh-glass-bg' }, glassImageInput(state.bgImage, (v) => setState((s) => ({ ...s, bgImage: v })))),
|
|
@@ -3266,7 +3301,21 @@ window.__ModuleLoader__.load({
|
|
|
3266
3301
|
React.createElement('input', { type: 'range', className: 'dsh-glass-range', min: 0, max: 0.95, step: 0.01, value: cfg.bgMask ?? 0.28, onChange: (e) => patch({ bgMask: Number(e.target.value) }) }),
|
|
3267
3302
|
React.createElement('span', { className: 'dsh-glass-val' }, `${Math.round((Number(cfg.bgMask ?? 0.28)) * 100)}%`),
|
|
3268
3303
|
),
|
|
3269
|
-
React.createElement('
|
|
3304
|
+
React.createElement('div', { className: 'dsh-glass-row' },
|
|
3305
|
+
React.createElement('label', null, '背景罩层颜色'),
|
|
3306
|
+
React.createElement('label', { className: 'dsh-glass-colorpicker' }, '色盘', React.createElement('input', { type: 'color', value: cfg.bgColor || '#1a2332', onChange: (e) => patch({ bgColor: e.target.value }) })),
|
|
3307
|
+
),
|
|
3308
|
+
React.createElement('div', { className: 'dsh-glass-row' },
|
|
3309
|
+
React.createElement('label', null, '背景图模糊'),
|
|
3310
|
+
React.createElement('input', { type: 'range', className: 'dsh-glass-range', min: 0, max: 60, value: cfg.bgBlur ?? 0, onChange: (e) => patch({ bgBlur: Number(e.target.value) }) }),
|
|
3311
|
+
React.createElement('span', { className: 'dsh-glass-val' }, `${Number(cfg.bgBlur ?? 0)} px`),
|
|
3312
|
+
),
|
|
3313
|
+
React.createElement('div', { className: 'dsh-glass-row' },
|
|
3314
|
+
React.createElement('label', null, '背景图透明度'),
|
|
3315
|
+
React.createElement('input', { type: 'range', className: 'dsh-glass-range', min: 0, max: 1, step: 0.01, value: cfg.bgOpacity ?? 1, onChange: (e) => patch({ bgOpacity: Number(e.target.value) }) }),
|
|
3316
|
+
React.createElement('span', { className: 'dsh-glass-val' }, `${Math.round((Number(cfg.bgOpacity ?? 1)) * 100)}%`),
|
|
3317
|
+
),
|
|
3318
|
+
React.createElement('p', { className: 'dsh-glass-note' }, '提示:背景图铺满整页(可加背景图罩);背景图模糊/透明度单独可调;会话区使用自己的罩色、罩强度与透明度;左栏/顶部透出背景图;输入框保持系统原生样式。'),
|
|
3270
3319
|
React.createElement('div', { className: 'dsh-glass-actions' },
|
|
3271
3320
|
React.createElement('button', { type: 'button', onClick: load }, '重置'),
|
|
3272
3321
|
React.createElement('button', { type: 'button', className: 'primary', disabled: state.saving, onClick: save }, state.saving ? '保存中…' : '保存生效'),
|
|
@@ -3318,48 +3367,53 @@ window.__ModuleLoader__.load({
|
|
|
3318
3367
|
b.style.backgroundImage = 'none'; b.style.backgroundSize = ''; b.style.backgroundPosition = ''; b.style.backgroundRepeat = ''
|
|
3319
3368
|
const fr = document.querySelector('#root > div > div') || document.querySelector('#root > div')
|
|
3320
3369
|
if (fr) { fr.style.backgroundColor = ''; fr.style.backgroundImage = 'none'; fr.style.backgroundSize = ''; fr.style.backgroundPosition = ''; fr.style.backgroundRepeat = '' }
|
|
3370
|
+
const bgEl = document.querySelector('.dsh-glass-bgimg'); if (bgEl) { bgEl.style.display = 'none' }
|
|
3321
3371
|
return
|
|
3322
3372
|
}
|
|
3323
3373
|
root.setAttribute('data-dsh-glass', c.enabled ? 'on' : 'off')
|
|
3324
3374
|
const sessOn = !(c.zone && c.zone.session && c.zone.session.enabled === false)
|
|
3325
3375
|
root.setAttribute('data-dsh-session-glass', sessOn ? 'on' : 'off')
|
|
3326
|
-
const
|
|
3376
|
+
const blurn = Number(c.blur); const blur = Math.max(0, Math.min(80, Number.isFinite(blurn) ? blurn : 16))
|
|
3327
3377
|
root.style.setProperty('--dsh-glass-blur', blur + 'px')
|
|
3328
3378
|
const zs = (c.zone && c.zone.session) || { color: '#1a2332', mask: 0.45, opacity: 0.5 }
|
|
3329
3379
|
const zi = (c.zone && c.zone.input) || { color: '#1a2332', mask: 0.6, opacity: 0.55 }
|
|
3330
|
-
|
|
3331
|
-
root.style.setProperty('--dsh-glass-
|
|
3332
|
-
const
|
|
3333
|
-
root.style.setProperty('--dsh-glass-
|
|
3334
|
-
|
|
3335
|
-
|
|
3380
|
+
const smn = Number(zs.mask); const sm = Math.min(0.95, Math.max(0, Number.isFinite(smn) ? smn : 0.45))
|
|
3381
|
+
root.style.setProperty('--dsh-glass-session-bg', `rgba(${hexToRgb(zs.color)},${sm})`)
|
|
3382
|
+
const imn = Number(zi.mask); const im = Math.min(0.95, Math.max(0, Number.isFinite(imn) ? imn : 0.6))
|
|
3383
|
+
root.style.setProperty('--dsh-glass-input-bg', `rgba(${hexToRgb(zi.color)},${im})`)
|
|
3384
|
+
// 透明度=透明程度:越大越透明(100%=>雾面无填充,完全透出背景)
|
|
3385
|
+
const sop = Math.min(1, Math.max(0, Number.isFinite(Number(zs.opacity)) ? Number(zs.opacity) : 0.5))
|
|
3386
|
+
root.style.setProperty('--dsh-glass-session-white', `color-mix(in srgb, var(--dsw-specific-input-major, #e8edf3) ${Math.round((1 - sop) * 100)}%, transparent)`)
|
|
3387
|
+
const iop = Math.min(1, Math.max(0, Number.isFinite(Number(zi.opacity)) ? Number(zi.opacity) : 0.55))
|
|
3388
|
+
root.style.setProperty('--dsh-glass-input-white', `color-mix(in srgb, var(--dsw-specific-input-major, #e8edf3) ${Math.round((1 - iop) * 100)}%, transparent)`)
|
|
3336
3389
|
// 背景图罩:整页背景图上叠一层半透明罩色
|
|
3337
3390
|
const bgc = c.bgColor || '#1a2332'
|
|
3338
|
-
const bgm = Math.min(0.95, Math.max(0, Number(
|
|
3391
|
+
const bgmn = Number(c.bgMask); const bgm = Math.min(0.95, Math.max(0, Number.isFinite(bgmn) ? bgmn : 0.28))
|
|
3339
3392
|
root.style.setProperty('--dsh-glass-bg-zone', `rgba(${hexToRgb(bgc)},${bgm})`)
|
|
3340
3393
|
|
|
3341
3394
|
const body = document.body
|
|
3342
3395
|
const frame = document.querySelector('#root > div > div') || document.querySelector('#root > div')
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3396
|
+
// 背景图独立层:铺满整页、位于内容之下;背景图模糊/透明度单独可调(不影响内容清晰度)
|
|
3397
|
+
let bgimg = document.querySelector('.dsh-glass-bgimg')
|
|
3398
|
+
if (!bgimg) { bgimg = document.createElement('div'); bgimg.className = 'dsh-glass-bgimg'; document.body.appendChild(bgimg) }
|
|
3399
|
+
const gz = root.style.getPropertyValue('--dsh-glass-bg-zone') || `rgba(${hexToRgb(c.bgColor || '#1a2332')},0.28)`
|
|
3400
|
+
if (c.enabled && c.bgImage) {
|
|
3401
|
+
bgimg.style.display = 'block'
|
|
3402
|
+
bgimg.style.backgroundImage = `linear-gradient(${gz},${gz}), url('${c.bgImage}')`
|
|
3403
|
+
bgimg.style.backgroundSize = 'cover'
|
|
3404
|
+
bgimg.style.backgroundPosition = 'center'
|
|
3405
|
+
bgimg.style.backgroundRepeat = 'no-repeat'
|
|
3406
|
+
const bblur = Math.max(0, Math.min(80, Number.isFinite(Number(c.bgBlur)) ? Number(c.bgBlur) : 0))
|
|
3407
|
+
bgimg.style.filter = bblur > 0 ? `blur(${bblur}px)` : 'none'
|
|
3408
|
+
const bop = Math.max(0, Math.min(1, Number.isFinite(Number(c.bgOpacity)) ? Number(c.bgOpacity) : 1))
|
|
3409
|
+
bgimg.style.opacity = String(bop)
|
|
3410
|
+
} else {
|
|
3411
|
+
bgimg.style.display = 'none'
|
|
3358
3412
|
}
|
|
3359
|
-
//
|
|
3413
|
+
// 移除 body/frame 上的锐利背景图(改由独立背景层显示),避免重复/遮盖
|
|
3414
|
+
body.style.backgroundImage = 'none'
|
|
3360
3415
|
if (c.enabled && c.bgImage) { body.style.backgroundColor = 'transparent' } else { body.style.backgroundColor = '' }
|
|
3361
|
-
|
|
3362
|
-
if (frame) { frame.style.backgroundColor = 'transparent'; applyBg(frame) }
|
|
3416
|
+
if (frame) { frame.style.backgroundImage = 'none'; frame.style.backgroundColor = 'transparent' }
|
|
3363
3417
|
centerScroll()
|
|
3364
3418
|
}
|
|
3365
3419
|
return () => {
|
|
@@ -3371,7 +3425,7 @@ window.__ModuleLoader__.load({
|
|
|
3371
3425
|
ctx.slots.inject('settings.section', () => ctx.slots.register({ name: 'settings.section', id: 'glass-ui', order: 40, label: '毛玻璃界面' }, GlassSettingsSection))
|
|
3372
3426
|
ctx.effect(() => {
|
|
3373
3427
|
fetch('/api/dsh-uploads/glass-config', { cache: 'no-store' }).then((r) => r.json()).then((b) => {
|
|
3374
|
-
if (b && b.cfg) { window.__dshGlassApply && window.__dshGlassApply({
|
|
3428
|
+
if (b && b.cfg) { window.__dshGlassApply && window.__dshGlassApply({ ...b.cfg, bgImage: b.bgImage }) }
|
|
3375
3429
|
}).catch(() => {})
|
|
3376
3430
|
}, 'dsh-long-plugins: glass boot')
|
|
3377
3431
|
},
|
package/dsh.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-long-plugins",
|
|
3
3
|
"description": "Merged DSH web plugins: upload manager (drag-and-drop attach any file to the message), workspace output files, skill docs, account balance, Markdown-to-Word (md2docx), and polished file preview (Word & PowerPoint real preview with zoom/pan, rendered Markdown), plus an auto-repair install for DSH core patches (reverse-proxy WebSocket heartbeat, upgrade relink). | 一个插件整合 DSH Web 的常用增强:上传管理(拖放上传:拖任意文件到会话框直接附加)、工作区「输出文件」面板、技能文档浏览、账户余额显示、Markdown 转 Word(md2docx)、Word/PowerPoint 真实预览(可缩放、翻页);并自带修复安装,自动重连 DSH 核心补丁(反代 WebSocket 心跳、升级重连)。",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"entry": {
|
|
6
6
|
"name": "dsh-long-plugins",
|
|
7
7
|
"inject": [
|
package/lib/index.js
CHANGED
|
@@ -681,6 +681,8 @@ function sanitizeGlass(input) {
|
|
|
681
681
|
if ("bgImage" in input) out.bgImage = sanitizeUri(input.bgImage);
|
|
682
682
|
if ("bgColor" in input) out.bgColor = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(String(input.bgColor)) ? String(input.bgColor) : undefined;
|
|
683
683
|
if ("bgMask" in input) { const n = Number(input.bgMask); out.bgMask = Number.isFinite(n) ? Math.max(0, Math.min(0.95, n)) : undefined; }
|
|
684
|
+
if ("bgBlur" in input) { const n = Number(input.bgBlur); out.bgBlur = Number.isFinite(n) ? Math.max(0, Math.min(80, n)) : undefined; }
|
|
685
|
+
if ("bgOpacity" in input) { const n = Number(input.bgOpacity); out.bgOpacity = Number.isFinite(n) ? Math.max(0, Math.min(1, n)) : undefined; }
|
|
684
686
|
// 会话区/输入区各自独立罩色+罩强度
|
|
685
687
|
if (input.zone && typeof input.zone === "object") {
|
|
686
688
|
const zo = {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-long-plugins",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Merged DSH web plugins: upload manager (drag-and-drop attach any file to the message), workspace output files, skill docs, account balance, Markdown-to-Word (md2docx), and polished file preview (Word & PowerPoint real preview with zoom/pan, rendered Markdown), plus an auto-repair install for DSH core patches (reverse-proxy WebSocket heartbeat, upgrade relink). | 一个插件整合 DSH Web 的常用增强:上传管理(拖放上传:拖任意文件到会话框直接附加)、工作区「输出文件」面板、技能文档浏览、账户余额显示、Markdown 转 Word(md2docx)、Word/PowerPoint 真实预览(可缩放、翻页);并自带修复安装,自动重连 DSH 核心补丁(反代 WebSocket 心跳、升级重连)。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|