@linxin666/dsh-client-ui-skin-center 0.3.21 → 0.3.23
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/contracts/semantic-attrs-v1.md +6 -0
- package/lib/client.js +88 -4
- package/lib/client.js.map +1 -1
- package/lib/index.js +7 -4
- package/package.json +1 -1
- package/skins/blue-fantasy/patches.css +72 -21
|
@@ -70,6 +70,12 @@ family / 插件区域:
|
|
|
70
70
|
| `column` | task-board | 状态列;`section[data-status]` |
|
|
71
71
|
| `card` | task-board | 任务卡;列内 `[data-status]` 条目 |
|
|
72
72
|
| `detail` | task-board | 任务详情面板 |
|
|
73
|
+
| `tag-filter` | task-board | 标签筛选条;`[data-dsh-taskboard-board] [data-dsh-part="tag-filter"]` |
|
|
74
|
+
| `tag-chip` | task-board | 筛选条内的标签胶囊;`[data-dsh-part="tag-chip"]`,`data-tag-tone` 为 0-5 调色板槽 |
|
|
75
|
+
| `tag-badge` | task-board | 卡片上的标签徽章;`[data-dsh-part="tag-badge"]`,`data-tag-tone` 同上 |
|
|
76
|
+
| `project-filter` | task-board | 项目分区下拉;`[data-dsh-part="project-filter"]`,筛选项为工作区 id,空值为「全部项目」 |
|
|
77
|
+
| `project-dialog` | task-board | 看板内新建项目表单;`[data-dsh-part="project-dialog"]`,含一个绝对路径输入与创建/取消按钮 |
|
|
78
|
+
| `ai-parse` | task-board | 新建任务弹窗内的「粘贴内容 → AI 解析」区块;`[data-dsh-part="ai-parse"]`,含文本框、模型下拉与解析按钮 |
|
|
73
79
|
| `tab-bar` / `tab` | ssh | 页签条/页签;`[role="tablist"]` / `[role="tab"]` |
|
|
74
80
|
| `host-table` / `host-row` | ssh | 主机表/行;`[data-dsh-ssh-view]` 内 table/tr |
|
|
75
81
|
| `terminal` | ssh | xterm 终端;面板内 termContainer(.xterm 辅锚) |
|
package/lib/client.js
CHANGED
|
@@ -2347,11 +2347,13 @@ window.__ModuleLoader__.load({
|
|
|
2347
2347
|
const blurContent = (0, react.useSyncExternalStore)(background.subscribe, background.blurContent);
|
|
2348
2348
|
const inputCardBlur = (0, react.useSyncExternalStore)(background.subscribe, background.inputCardBlur);
|
|
2349
2349
|
const bubbleOpacity = (0, react.useSyncExternalStore)(background.subscribe, background.bubbleOpacity);
|
|
2350
|
+
const bubbleBlur = (0, react.useSyncExternalStore)(background.subscribe, background.bubbleBlur);
|
|
2350
2351
|
const [shownOpacity, setShownOpacity] = useLiveValue(opacity);
|
|
2351
2352
|
const [shownBlurEmpty, setShownBlurEmpty] = useLiveValue(blurEmpty);
|
|
2352
2353
|
const [shownBlurContent, setShownBlurContent] = useLiveValue(blurContent);
|
|
2353
2354
|
const [shownInputCardBlur, setShownInputCardBlur] = useLiveValue(inputCardBlur);
|
|
2354
2355
|
const [shownBubbleOpacity, setShownBubbleOpacity] = useLiveValue(bubbleOpacity);
|
|
2356
|
+
const [shownBubbleBlur, setShownBubbleBlur] = useLiveValue(bubbleBlur);
|
|
2355
2357
|
const catalog = (0, react.useSyncExternalStore)(runtime.subscribe, runtime.catalog);
|
|
2356
2358
|
const state = (0, react.useSyncExternalStore)(runtime.subscribe, runtime.controller.getState);
|
|
2357
2359
|
const customThemeState = (0, react.useSyncExternalStore)(customTheme.subscribe, customTheme.getState);
|
|
@@ -2843,6 +2845,40 @@ window.__ModuleLoader__.load({
|
|
|
2843
2845
|
})
|
|
2844
2846
|
]
|
|
2845
2847
|
}),
|
|
2848
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2849
|
+
className: skin_center_module_css_default.backgroundRow,
|
|
2850
|
+
children: [
|
|
2851
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2852
|
+
className: skin_center_module_css_default.backgroundHead,
|
|
2853
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
2854
|
+
className: skin_center_module_css_default.backgroundLabel,
|
|
2855
|
+
children: t("bubbleBlur")
|
|
2856
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
2857
|
+
className: skin_center_module_css_default.backgroundValue,
|
|
2858
|
+
"aria-hidden": "true",
|
|
2859
|
+
children: [shownBubbleBlur, "px"]
|
|
2860
|
+
})]
|
|
2861
|
+
}),
|
|
2862
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SliderControl, {
|
|
2863
|
+
id: "skin-center-bubble-blur",
|
|
2864
|
+
className: skin_center_module_css_default.backgroundRange,
|
|
2865
|
+
min: 0,
|
|
2866
|
+
max: 20,
|
|
2867
|
+
step: 1,
|
|
2868
|
+
value: bubbleBlur,
|
|
2869
|
+
ariaValuetext: shownBubbleBlur + "px",
|
|
2870
|
+
ariaLabel: t("bubbleBlur"),
|
|
2871
|
+
onChanging: setShownBubbleBlur,
|
|
2872
|
+
onChange: (value) => {
|
|
2873
|
+
background.setBubbleBlur(value);
|
|
2874
|
+
}
|
|
2875
|
+
}),
|
|
2876
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
2877
|
+
className: skin_center_module_css_default.backgroundHint,
|
|
2878
|
+
children: t("bubbleBlurHint")
|
|
2879
|
+
})
|
|
2880
|
+
]
|
|
2881
|
+
}),
|
|
2846
2882
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(WallpaperPanel, {
|
|
2847
2883
|
t,
|
|
2848
2884
|
wallpaper
|
|
@@ -3000,7 +3036,8 @@ window.__ModuleLoader__.load({
|
|
|
3000
3036
|
backgroundBlurEmpty: 0,
|
|
3001
3037
|
backgroundBlurContent: 0,
|
|
3002
3038
|
inputCardBlur: 10,
|
|
3003
|
-
bubbleOpacity: 50
|
|
3039
|
+
bubbleOpacity: 50,
|
|
3040
|
+
bubbleBlur: 10
|
|
3004
3041
|
};
|
|
3005
3042
|
/** The fields normalize/sanitize know about; unknown keys are dropped. */
|
|
3006
3043
|
const SKIN_BACKGROUND_FIELDS = Object.keys(SKIN_BACKGROUND_DEFAULTS);
|
|
@@ -3012,7 +3049,8 @@ window.__ModuleLoader__.load({
|
|
|
3012
3049
|
backgroundBlurEmpty: [0, 20],
|
|
3013
3050
|
backgroundBlurContent: [0, 20],
|
|
3014
3051
|
inputCardBlur: [0, 20],
|
|
3015
|
-
bubbleOpacity: [0, 100]
|
|
3052
|
+
bubbleOpacity: [0, 100],
|
|
3053
|
+
bubbleBlur: [0, 20]
|
|
3016
3054
|
};
|
|
3017
3055
|
function isRecord$1(value) {
|
|
3018
3056
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -3080,10 +3118,13 @@ window.__ModuleLoader__.load({
|
|
|
3080
3118
|
const SCRIM_VAR = "--dsw-skin-scrim";
|
|
3081
3119
|
/** CSS custom property consumed by skins that expose translucent bubbles. */
|
|
3082
3120
|
const BUBBLE_ALPHA_VAR = "--dsh-skin-bubble-alpha";
|
|
3121
|
+
/** CSS custom property consumed by skins that expose a bubble backdrop blur. */
|
|
3122
|
+
const BUBBLE_BLUR_VAR = "--dsh-skin-bubble-blur";
|
|
3083
3123
|
/** CSS custom property consumed by the shared composer neutralizer. */
|
|
3084
3124
|
const INPUT_CARD_BLUR_VAR = "--dsh-input-card-blur";
|
|
3085
3125
|
SKIN_BACKGROUND_DEFAULTS.backgroundOpacity;
|
|
3086
3126
|
SKIN_BACKGROUND_DEFAULTS.bubbleOpacity;
|
|
3127
|
+
SKIN_BACKGROUND_DEFAULTS.bubbleBlur;
|
|
3087
3128
|
SKIN_BACKGROUND_DEFAULTS.backgroundBlurEmpty;
|
|
3088
3129
|
/**
|
|
3089
3130
|
* Selector for a conversation message row inside the shell's center column.
|
|
@@ -3111,6 +3152,7 @@ window.__ModuleLoader__.load({
|
|
|
3111
3152
|
blurContentValue = SKIN_BACKGROUND_DEFAULTS.backgroundBlurContent;
|
|
3112
3153
|
inputCardBlurValue = SKIN_BACKGROUND_DEFAULTS.inputCardBlur;
|
|
3113
3154
|
bubbleOpacityValue = SKIN_BACKGROUND_DEFAULTS.bubbleOpacity;
|
|
3155
|
+
bubbleBlurValue = SKIN_BACKGROUND_DEFAULTS.bubbleBlur;
|
|
3114
3156
|
listeners = /* @__PURE__ */ new Set();
|
|
3115
3157
|
persist;
|
|
3116
3158
|
/** The fixed backdrop-filter element, present only while active blur > 0. */
|
|
@@ -3132,6 +3174,7 @@ window.__ModuleLoader__.load({
|
|
|
3132
3174
|
this.applyOcclusion();
|
|
3133
3175
|
this.applyInputCardBlur();
|
|
3134
3176
|
this.applyBubbleOpacity();
|
|
3177
|
+
this.applyBubbleBlur();
|
|
3135
3178
|
this.syncBlur();
|
|
3136
3179
|
}
|
|
3137
3180
|
/**
|
|
@@ -3146,6 +3189,7 @@ window.__ModuleLoader__.load({
|
|
|
3146
3189
|
this.applyOcclusion();
|
|
3147
3190
|
this.applyInputCardBlur();
|
|
3148
3191
|
this.applyBubbleOpacity();
|
|
3192
|
+
this.applyBubbleBlur();
|
|
3149
3193
|
this.syncBlur();
|
|
3150
3194
|
this.publish();
|
|
3151
3195
|
}
|
|
@@ -3157,7 +3201,8 @@ window.__ModuleLoader__.load({
|
|
|
3157
3201
|
backgroundBlurEmpty: this.blurEmptyValue,
|
|
3158
3202
|
backgroundBlurContent: this.blurContentValue,
|
|
3159
3203
|
inputCardBlur: this.inputCardBlurValue,
|
|
3160
|
-
bubbleOpacity: this.bubbleOpacityValue
|
|
3204
|
+
bubbleOpacity: this.bubbleOpacityValue,
|
|
3205
|
+
bubbleBlur: this.bubbleBlurValue
|
|
3161
3206
|
};
|
|
3162
3207
|
}
|
|
3163
3208
|
enabled = () => this.enabledValue;
|
|
@@ -3166,6 +3211,7 @@ window.__ModuleLoader__.load({
|
|
|
3166
3211
|
this.applyOcclusion();
|
|
3167
3212
|
this.applyInputCardBlur();
|
|
3168
3213
|
this.applyBubbleOpacity();
|
|
3214
|
+
this.applyBubbleBlur();
|
|
3169
3215
|
this.syncBlur();
|
|
3170
3216
|
this.publish();
|
|
3171
3217
|
this.persist(this.snapshot());
|
|
@@ -3175,6 +3221,7 @@ window.__ModuleLoader__.load({
|
|
|
3175
3221
|
blurContent = () => this.blurContentValue;
|
|
3176
3222
|
inputCardBlur = () => this.inputCardBlurValue;
|
|
3177
3223
|
bubbleOpacity = () => this.bubbleOpacityValue;
|
|
3224
|
+
bubbleBlur = () => this.bubbleBlurValue;
|
|
3178
3225
|
subscribe = (listener) => {
|
|
3179
3226
|
this.listeners.add(listener);
|
|
3180
3227
|
return () => {
|
|
@@ -3213,6 +3260,12 @@ window.__ModuleLoader__.load({
|
|
|
3213
3260
|
this.publish();
|
|
3214
3261
|
this.persist(this.snapshot());
|
|
3215
3262
|
}
|
|
3263
|
+
setBubbleBlur(value) {
|
|
3264
|
+
this.bubbleBlurValue = this.clampBlur(value);
|
|
3265
|
+
this.applyBubbleBlur();
|
|
3266
|
+
this.publish();
|
|
3267
|
+
this.persist(this.snapshot());
|
|
3268
|
+
}
|
|
3216
3269
|
dispose() {
|
|
3217
3270
|
this.disposed = true;
|
|
3218
3271
|
if (this.rafId !== null) {
|
|
@@ -3222,6 +3275,7 @@ window.__ModuleLoader__.load({
|
|
|
3222
3275
|
this.removeBlurElement();
|
|
3223
3276
|
document.body.style.removeProperty(INPUT_CARD_BLUR_VAR);
|
|
3224
3277
|
document.body.style.removeProperty(BUBBLE_ALPHA_VAR);
|
|
3278
|
+
document.body.style.removeProperty(BUBBLE_BLUR_VAR);
|
|
3225
3279
|
if (this.observer !== null) {
|
|
3226
3280
|
this.observer.disconnect();
|
|
3227
3281
|
this.observer = null;
|
|
@@ -3236,6 +3290,7 @@ window.__ModuleLoader__.load({
|
|
|
3236
3290
|
this.blurContentValue = resolved.backgroundBlurContent;
|
|
3237
3291
|
this.inputCardBlurValue = resolved.inputCardBlur;
|
|
3238
3292
|
this.bubbleOpacityValue = resolved.bubbleOpacity;
|
|
3293
|
+
this.bubbleBlurValue = resolved.bubbleBlur;
|
|
3239
3294
|
}
|
|
3240
3295
|
clampBlur(value) {
|
|
3241
3296
|
return Math.max(0, Math.min(20, Math.round(value)));
|
|
@@ -3257,6 +3312,13 @@ window.__ModuleLoader__.load({
|
|
|
3257
3312
|
}
|
|
3258
3313
|
document.body.style.setProperty(BUBBLE_ALPHA_VAR, String(this.bubbleOpacityValue / 100));
|
|
3259
3314
|
}
|
|
3315
|
+
applyBubbleBlur() {
|
|
3316
|
+
if (!this.enabledValue) {
|
|
3317
|
+
document.body.style.removeProperty(BUBBLE_BLUR_VAR);
|
|
3318
|
+
return;
|
|
3319
|
+
}
|
|
3320
|
+
document.body.style.setProperty(BUBBLE_BLUR_VAR, this.bubbleBlurValue + "px");
|
|
3321
|
+
}
|
|
3260
3322
|
/** Write the current occlusion onto the body CSS variable (0..1 alpha). */
|
|
3261
3323
|
applyOcclusion() {
|
|
3262
3324
|
if (!this.enabledValue) {
|
|
@@ -3489,6 +3551,8 @@ window.__ModuleLoader__.load({
|
|
|
3489
3551
|
inputCardBlurHint: "Blurs only the area behind the input card while backdrop art is visible; it does not blur the entire wallpaper.",
|
|
3490
3552
|
bubbleOpacity: "Bubble opacity",
|
|
3491
3553
|
bubbleOpacityHint: "Controls translucent message bubbles for skins that expose bubble alpha, such as Whale Mom.",
|
|
3554
|
+
bubbleBlur: "Bubble blur",
|
|
3555
|
+
bubbleBlurHint: "Blurs the backdrop behind translucent message bubbles; independent of bubble opacity, 0 disables.",
|
|
3492
3556
|
backgroundBlurHint: "Applies a separate Gaussian blur to the backdrop for the empty conversation and the conversation with content; 0 disables.",
|
|
3493
3557
|
backgroundBlurInert: "Visible only with skins that paint a backdrop; the official default has none.",
|
|
3494
3558
|
backgroundHint: "Instantly veils the backdrop behind the panels — higher values obscure the art to help you focus.",
|
|
@@ -3609,6 +3673,8 @@ window.__ModuleLoader__.load({
|
|
|
3609
3673
|
inputCardBlurHint: "仅模糊输入卡背后的区域,不会让整张壁纸变糊。",
|
|
3610
3674
|
bubbleOpacity: "气泡不透明度",
|
|
3611
3675
|
bubbleOpacityHint: "调节支持气泡 alpha 的皮肤消息气泡,例如鲸鱼妈妈。",
|
|
3676
|
+
bubbleBlur: "气泡模糊程度",
|
|
3677
|
+
bubbleBlurHint: "模糊半透明消息气泡背后的区域,与「气泡不透明度」相互独立,0 为关闭。",
|
|
3612
3678
|
backgroundBlurHint: "对话为空与有内容时分别应用不同的背景高斯模糊强度,0 为关闭。",
|
|
3613
3679
|
backgroundBlurInert: "仅对带背景图插画的皮肤可见;官方默认无背景图。",
|
|
3614
3680
|
backgroundHint: "即时为面板背后的背景加遮罩——数值越高越能弱化插画,帮你集中注意力。",
|
|
@@ -4059,6 +4125,22 @@ window.__ModuleLoader__.load({
|
|
|
4059
4125
|
backdrop-filter: none !important;
|
|
4060
4126
|
-webkit-backdrop-filter: none !important;
|
|
4061
4127
|
}
|
|
4128
|
+
${scoped("[data-phase=\"active\"] [data-slot=\"conversation.input.dock\"] > [data-queue-dock]")} {
|
|
4129
|
+
/* The native queue dock stacks two boxes inside the input dock: a root
|
|
4130
|
+
wrapper that only supplies the shared dock inset, and the panel inside
|
|
4131
|
+
it that paints its own --dsw-specific-tip fill. Painting the wrapper as
|
|
4132
|
+
an accessory adds a second opaque plate one dock inset (8px) wider than
|
|
4133
|
+
the panel on each side, which reads as an extra sheet of paper under
|
|
4134
|
+
the queue (issue #1572). Reset the accessory surface so the panel stays
|
|
4135
|
+
the single layer; the wrapper keeps its inset, so the panel remains
|
|
4136
|
+
aligned with the composer card. */
|
|
4137
|
+
background: transparent !important;
|
|
4138
|
+
border: 0 !important;
|
|
4139
|
+
border-radius: 0 !important;
|
|
4140
|
+
box-shadow: none !important;
|
|
4141
|
+
backdrop-filter: none !important;
|
|
4142
|
+
-webkit-backdrop-filter: none !important;
|
|
4143
|
+
}
|
|
4062
4144
|
${scoped("[data-conversation-scroll]")},
|
|
4063
4145
|
${scoped("[data-dsh-part=\"scrollport\"]")} {
|
|
4064
4146
|
/* The composer is the scrollport's final in-flow child. Reserving physical
|
|
@@ -5075,7 +5157,7 @@ window.__ModuleLoader__.load({
|
|
|
5075
5157
|
/** The building package's version, when the bundle carries it. */
|
|
5076
5158
|
function bakedVersion() {
|
|
5077
5159
|
try {
|
|
5078
|
-
return "0.3.
|
|
5160
|
+
return "0.3.23";
|
|
5079
5161
|
} catch {
|
|
5080
5162
|
return;
|
|
5081
5163
|
}
|
|
@@ -5288,12 +5370,14 @@ window.__ModuleLoader__.load({
|
|
|
5288
5370
|
blurContent: () => background.blurContent(),
|
|
5289
5371
|
inputCardBlur: () => background.inputCardBlur(),
|
|
5290
5372
|
bubbleOpacity: () => background.bubbleOpacity(),
|
|
5373
|
+
bubbleBlur: () => background.bubbleBlur(),
|
|
5291
5374
|
subscribe: (listener) => background.subscribe(listener),
|
|
5292
5375
|
set: (opacity) => background.set(opacity),
|
|
5293
5376
|
setBlurEmpty: (value) => background.setBlurEmpty(value),
|
|
5294
5377
|
setBlurContent: (value) => background.setBlurContent(value),
|
|
5295
5378
|
setInputCardBlur: (value) => background.setInputCardBlur(value),
|
|
5296
5379
|
setBubbleOpacity: (value) => background.setBubbleOpacity(value),
|
|
5380
|
+
setBubbleBlur: (value) => background.setBubbleBlur(value),
|
|
5297
5381
|
dispose: () => background.dispose()
|
|
5298
5382
|
},
|
|
5299
5383
|
wallpaper: {
|