@dsh-plus/image-studio 0.1.1 → 0.1.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 +175 -156
- package/package.json +3 -3
- package/src/client/panel/gallery.tsx +13 -13
- package/src/client/panel/panel.tsx +12 -13
- package/src/client/panel/picker.tsx +8 -14
- package/src/client/styles.ts +142 -125
package/lib/client.js
CHANGED
|
@@ -1718,19 +1718,17 @@ ${extra}
|
|
|
1718
1718
|
});
|
|
1719
1719
|
};
|
|
1720
1720
|
const paramRows = Object.entries(item.params);
|
|
1721
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1721
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
|
|
1722
|
+
open: true,
|
|
1723
|
+
onClose,
|
|
1724
|
+
title: item.prompt.slice(0, 40),
|
|
1725
|
+
headless: true,
|
|
1726
|
+
className: "ims-detailModal",
|
|
1725
1727
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1726
|
-
className: "ims-
|
|
1727
|
-
role: "dialog",
|
|
1728
|
-
"aria-modal": "true",
|
|
1729
|
-
"aria-label": item.prompt.slice(0, 40),
|
|
1730
|
-
onClick: (event) => event.stopPropagation(),
|
|
1728
|
+
className: "ims-sub",
|
|
1731
1729
|
children: [
|
|
1732
1730
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1733
|
-
className: "ims-
|
|
1731
|
+
className: "ims-subHead",
|
|
1734
1732
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
1735
1733
|
className: "ims-detailMeta",
|
|
1736
1734
|
children: [
|
|
@@ -1823,7 +1821,7 @@ ${extra}
|
|
|
1823
1821
|
})]
|
|
1824
1822
|
}),
|
|
1825
1823
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1826
|
-
className: "ims-
|
|
1824
|
+
className: "ims-subFoot",
|
|
1827
1825
|
children: [
|
|
1828
1826
|
error !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1829
1827
|
className: "ims-status ims-statusError",
|
|
@@ -2189,21 +2187,19 @@ ${extra}
|
|
|
2189
2187
|
}
|
|
2190
2188
|
setSelected((current) => current.includes(imageId) ? [] : [imageId]);
|
|
2191
2189
|
};
|
|
2192
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2190
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
|
|
2191
|
+
open: true,
|
|
2192
|
+
onClose,
|
|
2193
|
+
title,
|
|
2194
|
+
headless: true,
|
|
2195
|
+
className: "ims-pickerModal",
|
|
2196
2196
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2197
|
-
className: "ims-
|
|
2198
|
-
role: "dialog",
|
|
2199
|
-
"aria-modal": "true",
|
|
2200
|
-
"aria-label": title,
|
|
2201
|
-
onClick: (event) => event.stopPropagation(),
|
|
2197
|
+
className: "ims-sub",
|
|
2202
2198
|
children: [
|
|
2203
2199
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2204
|
-
className: "ims-
|
|
2200
|
+
className: "ims-subHead",
|
|
2205
2201
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
|
|
2206
|
-
className: "ims-
|
|
2202
|
+
className: "ims-subTitle",
|
|
2207
2203
|
children: title
|
|
2208
2204
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2209
2205
|
type: "button",
|
|
@@ -2240,7 +2236,7 @@ ${extra}
|
|
|
2240
2236
|
})
|
|
2241
2237
|
}),
|
|
2242
2238
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2243
|
-
className: "ims-
|
|
2239
|
+
className: "ims-subFoot",
|
|
2244
2240
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2245
2241
|
type: "button",
|
|
2246
2242
|
className: "ims-btn ims-btnPrimary",
|
|
@@ -2829,6 +2825,15 @@ ${extra}
|
|
|
2829
2825
|
}
|
|
2830
2826
|
//#endregion
|
|
2831
2827
|
//#region src/client/panel/panel.tsx
|
|
2828
|
+
/**
|
|
2829
|
+
* 图像工作室面板根组件:侧栏 footer 入口打开的 overlay 工作台。
|
|
2830
|
+
* 三个标签(文生图/图生图/画廊)+ 底部任务条;两个生图表单常驻挂载
|
|
2831
|
+
* (hidden 切换,保留各自表单态)。数据归口:providers 一次性加载,
|
|
2832
|
+
* presets/gallery/tasks 面板打开时加载,任务 2s 轮询并侦测成功转移
|
|
2833
|
+
* 自动刷画廊。
|
|
2834
|
+
* 响应式:桌面居中模态(≤1100px),≤767px 全屏抽屉(见 styles.ts)。
|
|
2835
|
+
* @module image-studio/client/panel/panel
|
|
2836
|
+
*/
|
|
2832
2837
|
const EMPTY_PRESETS = {
|
|
2833
2838
|
promptPresets: [],
|
|
2834
2839
|
paramPresets: [],
|
|
@@ -2887,7 +2892,6 @@ ${extra}
|
|
|
2887
2892
|
reloadGallery,
|
|
2888
2893
|
reloadTasks
|
|
2889
2894
|
]);
|
|
2890
|
-
if (!open) return null;
|
|
2891
2895
|
const catalog = providers?.params ?? [];
|
|
2892
2896
|
const protocols = providers?.protocols ?? [];
|
|
2893
2897
|
const tabs = [
|
|
@@ -2907,16 +2911,14 @@ ${extra}
|
|
|
2907
2911
|
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconImage, { size: 15 })
|
|
2908
2912
|
}
|
|
2909
2913
|
];
|
|
2910
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
|
|
2915
|
+
open,
|
|
2916
|
+
onClose: () => studio.setOpen(false),
|
|
2917
|
+
title: t("panel.title"),
|
|
2918
|
+
headless: true,
|
|
2919
|
+
className: "ims-modal",
|
|
2914
2920
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
2915
2921
|
className: "ims-panel",
|
|
2916
|
-
role: "dialog",
|
|
2917
|
-
"aria-modal": "true",
|
|
2918
|
-
"aria-label": t("panel.title"),
|
|
2919
|
-
onClick: (event) => event.stopPropagation(),
|
|
2920
2922
|
children: [
|
|
2921
2923
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
2922
2924
|
className: "ims-head",
|
|
@@ -3007,10 +3009,11 @@ ${extra}
|
|
|
3007
3009
|
//#endregion
|
|
3008
3010
|
//#region src/client/styles.ts
|
|
3009
3011
|
/**
|
|
3010
|
-
* 图像工作室前端样式:侧栏入口 +
|
|
3011
|
-
*
|
|
3012
|
-
*
|
|
3013
|
-
*
|
|
3012
|
+
* 图像工作室前端样式:侧栏入口 + 工作台(官方 Modal 承载)+ 配置卡片附加件。
|
|
3013
|
+
* 设计令牌仅用 dsh-client-ui-theme 实测存在的 --dsw-alias-*(深浅色自适应);
|
|
3014
|
+
* 模态骨架(遮罩/Escape/portal 层叠)由官方 Modal 原语承载,本表只覆写尺寸
|
|
3015
|
+
* 与内部布局(.ims-modal 等,模式同 web-files/web-terminal 的 wf-/wt-modal)。
|
|
3016
|
+
* 响应式断点 767px 与 @dsh-plus/ui-mobile-fit 对齐(移动端全屏、单列、44px 热区)。
|
|
3014
3017
|
* @module image-studio/client/styles
|
|
3015
3018
|
*/
|
|
3016
3019
|
const PKG = "@dsh-plus/image-studio";
|
|
@@ -3031,14 +3034,14 @@ ${extra}
|
|
|
3031
3034
|
border: none;
|
|
3032
3035
|
border-radius: 12px;
|
|
3033
3036
|
background: transparent;
|
|
3034
|
-
color: var(--dsw-alias-label-primary
|
|
3037
|
+
color: var(--dsw-alias-label-primary);
|
|
3035
3038
|
font-family: inherit;
|
|
3036
3039
|
font-size: 14px;
|
|
3037
3040
|
line-height: 22px;
|
|
3038
3041
|
cursor: pointer;
|
|
3039
3042
|
overflow: hidden;
|
|
3040
3043
|
}
|
|
3041
|
-
.ims-entry:hover { background: var(--dsw-alias-interactive-bg-hover
|
|
3044
|
+
.ims-entry:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
3042
3045
|
.ims-entry-rail {
|
|
3043
3046
|
flex: none;
|
|
3044
3047
|
width: 36px;
|
|
@@ -3051,26 +3054,26 @@ ${extra}
|
|
|
3051
3054
|
}
|
|
3052
3055
|
.ims-entry-label { white-space: nowrap; overflow: hidden; }
|
|
3053
3056
|
|
|
3054
|
-
/* ──
|
|
3055
|
-
.ims-
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3057
|
+
/* ── 工作台模态尺寸覆写(官方 Modal headless 卡片)── */
|
|
3058
|
+
.ims-modal {
|
|
3059
|
+
width: min(1100px, 94vw) !important;
|
|
3060
|
+
max-width: none !important;
|
|
3061
|
+
height: min(780px, 88vh);
|
|
3062
|
+
padding: 0 !important;
|
|
3063
|
+
gap: 0 !important;
|
|
3059
3064
|
display: flex;
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
background: var(--dsw-alias-overlay-bg, rgba(0,0,0,.4));
|
|
3065
|
+
flex-direction: column;
|
|
3066
|
+
overflow: hidden;
|
|
3063
3067
|
}
|
|
3068
|
+
|
|
3069
|
+
/* ── 面板骨架 ── */
|
|
3064
3070
|
.ims-panel {
|
|
3065
3071
|
display: flex;
|
|
3066
3072
|
flex-direction: column;
|
|
3067
|
-
|
|
3068
|
-
height:
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
color: var(--dsw-alias-label-primary, #1f2328);
|
|
3072
|
-
box-shadow: 0 16px 48px rgba(0,0,0,.24);
|
|
3073
|
-
overflow: hidden;
|
|
3073
|
+
height: 100%;
|
|
3074
|
+
min-height: 0;
|
|
3075
|
+
position: relative;
|
|
3076
|
+
color: var(--dsw-alias-label-primary);
|
|
3074
3077
|
}
|
|
3075
3078
|
.ims-head {
|
|
3076
3079
|
display: flex;
|
|
@@ -3078,7 +3081,7 @@ ${extra}
|
|
|
3078
3081
|
align-items: center;
|
|
3079
3082
|
gap: 8px;
|
|
3080
3083
|
padding: 10px 12px;
|
|
3081
|
-
border-bottom:
|
|
3084
|
+
border-bottom: 1px solid var(--dsw-alias-border-l3);
|
|
3082
3085
|
}
|
|
3083
3086
|
.ims-tabs { display: flex; flex: 1; gap: 4px; min-width: 0; }
|
|
3084
3087
|
.ims-tab {
|
|
@@ -3090,16 +3093,16 @@ ${extra}
|
|
|
3090
3093
|
border: none;
|
|
3091
3094
|
border-radius: 10px;
|
|
3092
3095
|
background: transparent;
|
|
3093
|
-
color: var(--dsw-alias-label-secondary
|
|
3096
|
+
color: var(--dsw-alias-label-secondary);
|
|
3094
3097
|
font-family: inherit;
|
|
3095
3098
|
font-size: 14px;
|
|
3096
3099
|
cursor: pointer;
|
|
3097
3100
|
white-space: nowrap;
|
|
3098
3101
|
}
|
|
3099
|
-
.ims-tab:hover { background: var(--dsw-alias-interactive-bg-hover
|
|
3102
|
+
.ims-tab:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
3100
3103
|
.ims-tabActive {
|
|
3101
|
-
background: var(--dsw-alias-button-elevated-fill
|
|
3102
|
-
color: var(--dsw-alias-label-primary
|
|
3104
|
+
background: var(--dsw-alias-button-elevated-fill);
|
|
3105
|
+
color: var(--dsw-alias-label-primary);
|
|
3103
3106
|
font-weight: 500;
|
|
3104
3107
|
}
|
|
3105
3108
|
.ims-iconBtn {
|
|
@@ -3112,10 +3115,10 @@ ${extra}
|
|
|
3112
3115
|
border: none;
|
|
3113
3116
|
border-radius: 8px;
|
|
3114
3117
|
background: transparent;
|
|
3115
|
-
color: var(--dsw-alias-label-primary
|
|
3118
|
+
color: var(--dsw-alias-label-primary);
|
|
3116
3119
|
cursor: pointer;
|
|
3117
3120
|
}
|
|
3118
|
-
.ims-iconBtn:hover { background: var(--dsw-alias-interactive-bg-hover
|
|
3121
|
+
.ims-iconBtn:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
3119
3122
|
.ims-body { flex: 1; min-height: 0; overflow-y: auto; }
|
|
3120
3123
|
|
|
3121
3124
|
/* ── 通用件 ── */
|
|
@@ -3124,15 +3127,15 @@ ${extra}
|
|
|
3124
3127
|
width: 100%;
|
|
3125
3128
|
min-height: 34px;
|
|
3126
3129
|
padding: 6px 10px;
|
|
3127
|
-
border:
|
|
3130
|
+
border: 1px solid var(--dsw-alias-border-l2);
|
|
3128
3131
|
border-radius: 8px;
|
|
3129
|
-
background: var(--dsw-alias-bg-
|
|
3130
|
-
color: var(--dsw-alias-label-primary
|
|
3132
|
+
background: var(--dsw-alias-bg-layer-3);
|
|
3133
|
+
color: var(--dsw-alias-label-primary);
|
|
3131
3134
|
font-family: inherit;
|
|
3132
3135
|
font-size: 13px;
|
|
3133
3136
|
line-height: 20px;
|
|
3134
3137
|
}
|
|
3135
|
-
.ims-input:focus { outline: 2px solid var(--dsw-alias-
|
|
3138
|
+
.ims-input:focus { outline: 2px solid var(--dsw-alias-brand-primary); outline-offset: 0; }
|
|
3136
3139
|
.ims-btn {
|
|
3137
3140
|
display: inline-flex;
|
|
3138
3141
|
align-items: center;
|
|
@@ -3150,23 +3153,24 @@ ${extra}
|
|
|
3150
3153
|
}
|
|
3151
3154
|
.ims-btn:disabled { opacity: .5; cursor: not-allowed; }
|
|
3152
3155
|
.ims-btnPrimary {
|
|
3153
|
-
background: var(--dsw-alias-button-primary-fill
|
|
3154
|
-
color: var(--dsw-alias-
|
|
3156
|
+
background: var(--dsw-alias-button-primary-fill);
|
|
3157
|
+
color: var(--dsw-alias-label-primary-inverted);
|
|
3155
3158
|
}
|
|
3159
|
+
.ims-btnPrimary:hover:not(:disabled) { background: var(--dsw-alias-button-primary-hover); }
|
|
3156
3160
|
.ims-btnGhost {
|
|
3157
3161
|
background: transparent;
|
|
3158
|
-
color: var(--dsw-alias-label-primary
|
|
3159
|
-
border:
|
|
3162
|
+
color: var(--dsw-alias-label-primary);
|
|
3163
|
+
border: 1px solid var(--dsw-alias-border-l2);
|
|
3160
3164
|
}
|
|
3161
|
-
.ims-btnGhost:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover
|
|
3162
|
-
.ims-btnDanger { background: var(--dsw-alias-
|
|
3165
|
+
.ims-btnGhost:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }
|
|
3166
|
+
.ims-btnDanger { background: var(--dsw-alias-state-error-primary); color: var(--dsw-alias-label-primary-inverted); }
|
|
3163
3167
|
.ims-btnSmall { min-height: 28px; padding: 3px 10px; font-size: 12px; }
|
|
3164
|
-
.ims-hint { margin: 4px 0 0; font-size: 12px; color: var(--dsw-alias-label-
|
|
3168
|
+
.ims-hint { margin: 4px 0 0; font-size: 12px; color: var(--dsw-alias-label-tertiary); }
|
|
3165
3169
|
.ims-empty {
|
|
3166
3170
|
padding: 32px 16px;
|
|
3167
3171
|
text-align: center;
|
|
3168
3172
|
font-size: 13px;
|
|
3169
|
-
color: var(--dsw-alias-label-
|
|
3173
|
+
color: var(--dsw-alias-label-tertiary);
|
|
3170
3174
|
}
|
|
3171
3175
|
.ims-badge {
|
|
3172
3176
|
flex: none;
|
|
@@ -3175,10 +3179,10 @@ ${extra}
|
|
|
3175
3179
|
font-size: 11px;
|
|
3176
3180
|
line-height: 16px;
|
|
3177
3181
|
}
|
|
3178
|
-
.ims-badgeOn { background: var(--dsw-alias-
|
|
3179
|
-
.ims-badgeOff { background: var(--dsw-alias-
|
|
3180
|
-
.ims-status { margin: 8px 0 0; font-size: 12px; color: var(--dsw-alias-
|
|
3181
|
-
.ims-statusError { color: var(--dsw-alias-
|
|
3182
|
+
.ims-badgeOn { background: var(--dsw-alias-state-success-secondary); color: var(--dsw-alias-state-success-primary); }
|
|
3183
|
+
.ims-badgeOff { background: var(--dsw-alias-state-error-secondary); color: var(--dsw-alias-state-error-primary); }
|
|
3184
|
+
.ims-status { margin: 8px 0 0; font-size: 12px; color: var(--dsw-alias-state-success-primary); }
|
|
3185
|
+
.ims-statusError { color: var(--dsw-alias-state-error-primary); }
|
|
3182
3186
|
.ims-spin { animation: ims-rotate 1s linear infinite; }
|
|
3183
3187
|
@keyframes ims-rotate { to { transform: rotate(360deg); } }
|
|
3184
3188
|
|
|
@@ -3205,7 +3209,7 @@ ${extra}
|
|
|
3205
3209
|
cursor: pointer;
|
|
3206
3210
|
}
|
|
3207
3211
|
.ims-inlineGrid { display: grid; gap: 8px; margin-top: 8px; }
|
|
3208
|
-
.ims-mini { display: grid; gap: 4px; font-size: 12px; color: var(--dsw-alias-label-secondary
|
|
3212
|
+
.ims-mini { display: grid; gap: 4px; font-size: 12px; color: var(--dsw-alias-label-secondary); }
|
|
3209
3213
|
.ims-prompt { resize: vertical; min-height: 96px; }
|
|
3210
3214
|
.ims-rowActions { display: flex; gap: 8px; margin-top: 8px; align-items: center; }
|
|
3211
3215
|
.ims-rowGrow { flex: 1; min-width: 0; }
|
|
@@ -3219,20 +3223,21 @@ ${extra}
|
|
|
3219
3223
|
padding: 6px 8px;
|
|
3220
3224
|
border-radius: 8px;
|
|
3221
3225
|
}
|
|
3222
|
-
.ims-paramRowOn { background: var(--dsw-alias-bg-
|
|
3226
|
+
.ims-paramRowOn { background: var(--dsw-alias-bg-layer-1); }
|
|
3223
3227
|
.ims-paramText { flex: 1; min-width: 0; display: grid; }
|
|
3224
|
-
.ims-paramKey { font-size: 12px; font-weight: 600; font-family: var(--ds-font-family-code
|
|
3228
|
+
.ims-paramKey { font-size: 12px; font-weight: 600; font-family: var(--ds-font-family-code); }
|
|
3225
3229
|
.ims-paramGen {
|
|
3226
3230
|
margin-left: 6px;
|
|
3227
3231
|
padding: 0 5px;
|
|
3228
3232
|
border-radius: 4px;
|
|
3229
|
-
background: var(--dsw-alias-bg-
|
|
3233
|
+
background: var(--dsw-alias-bg-module-platform);
|
|
3234
|
+
color: var(--dsw-alias-label-secondary);
|
|
3230
3235
|
font-size: 10px;
|
|
3231
3236
|
font-weight: 400;
|
|
3232
3237
|
}
|
|
3233
3238
|
.ims-paramDesc {
|
|
3234
3239
|
font-size: 11px;
|
|
3235
|
-
color: var(--dsw-alias-label-
|
|
3240
|
+
color: var(--dsw-alias-label-tertiary);
|
|
3236
3241
|
overflow: hidden;
|
|
3237
3242
|
text-overflow: ellipsis;
|
|
3238
3243
|
white-space: nowrap;
|
|
@@ -3244,15 +3249,15 @@ ${extra}
|
|
|
3244
3249
|
font-size: 12px;
|
|
3245
3250
|
font-weight: 600;
|
|
3246
3251
|
padding: 6px 0;
|
|
3247
|
-
color: var(--dsw-alias-label-secondary
|
|
3252
|
+
color: var(--dsw-alias-label-secondary);
|
|
3248
3253
|
user-select: none;
|
|
3249
3254
|
}
|
|
3250
3255
|
.ims-advCount {
|
|
3251
3256
|
margin-left: 6px;
|
|
3252
3257
|
padding: 0 6px;
|
|
3253
3258
|
border-radius: 999px;
|
|
3254
|
-
background: var(--dsw-alias-button-primary-fill
|
|
3255
|
-
color: var(--dsw-alias-
|
|
3259
|
+
background: var(--dsw-alias-button-primary-fill);
|
|
3260
|
+
color: var(--dsw-alias-label-primary-inverted);
|
|
3256
3261
|
font-size: 10px;
|
|
3257
3262
|
}
|
|
3258
3263
|
|
|
@@ -3263,7 +3268,7 @@ ${extra}
|
|
|
3263
3268
|
position: absolute;
|
|
3264
3269
|
inset: 0;
|
|
3265
3270
|
border-radius: 999px;
|
|
3266
|
-
background: var(--dsw-alias-
|
|
3271
|
+
background: var(--dsw-alias-bg-module-platform);
|
|
3267
3272
|
transition: background .15s;
|
|
3268
3273
|
pointer-events: none;
|
|
3269
3274
|
}
|
|
@@ -3275,10 +3280,10 @@ ${extra}
|
|
|
3275
3280
|
width: 14px;
|
|
3276
3281
|
height: 14px;
|
|
3277
3282
|
border-radius: 50%;
|
|
3278
|
-
background:
|
|
3283
|
+
background: var(--dsw-alias-label-primary);
|
|
3279
3284
|
transition: transform .15s;
|
|
3280
3285
|
}
|
|
3281
|
-
.ims-switch input:checked + .ims-switchTrack { background: var(--dsw-alias-
|
|
3286
|
+
.ims-switch input:checked + .ims-switchTrack { background: var(--dsw-alias-brand-primary); }
|
|
3282
3287
|
.ims-switch input:checked + .ims-switchTrack::after { transform: translateX(12px); }
|
|
3283
3288
|
|
|
3284
3289
|
/* 源图/遮罩缩略 */
|
|
@@ -3307,49 +3312,64 @@ ${extra}
|
|
|
3307
3312
|
gap: 4px;
|
|
3308
3313
|
width: 64px;
|
|
3309
3314
|
height: 64px;
|
|
3310
|
-
border: 1px dashed var(--dsw-alias-border-l1
|
|
3315
|
+
border: 1px dashed var(--dsw-alias-border-l1);
|
|
3311
3316
|
border-radius: 8px;
|
|
3312
3317
|
background: transparent;
|
|
3313
|
-
color: var(--dsw-alias-label-secondary
|
|
3318
|
+
color: var(--dsw-alias-label-secondary);
|
|
3314
3319
|
font-size: 11px;
|
|
3315
3320
|
cursor: pointer;
|
|
3316
3321
|
}
|
|
3317
|
-
.ims-thumbAdd:hover { background: var(--dsw-alias-interactive-bg-hover
|
|
3322
|
+
.ims-thumbAdd:hover { background: var(--dsw-alias-interactive-bg-hover); }
|
|
3318
3323
|
|
|
3319
3324
|
/* 提交区 */
|
|
3320
|
-
.ims-genFoot { grid-column: 1 / -1; border-top:
|
|
3325
|
+
.ims-genFoot { grid-column: 1 / -1; border-top: 1px solid var(--dsw-alias-border-l3); padding-top: 12px; }
|
|
3321
3326
|
.ims-naming { display: flex; gap: 8px; margin-bottom: 8px; }
|
|
3322
3327
|
.ims-submit { width: 100%; min-height: 40px; font-size: 14px; margin-top: 8px; }
|
|
3323
3328
|
|
|
3324
|
-
/* ──
|
|
3325
|
-
.ims-
|
|
3326
|
-
|
|
3327
|
-
|
|
3328
|
-
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
justify-content: center;
|
|
3332
|
-
background: var(--dsw-alias-overlay-bg, rgba(0,0,0,.4));
|
|
3329
|
+
/* ── 子模态(图片选择器 / 画廊详情,官方 Modal 承载)── */
|
|
3330
|
+
.ims-pickerModal {
|
|
3331
|
+
width: min(760px, 92vw) !important;
|
|
3332
|
+
max-width: none !important;
|
|
3333
|
+
max-height: 86vh;
|
|
3334
|
+
padding: 0 !important;
|
|
3335
|
+
gap: 0 !important;
|
|
3333
3336
|
}
|
|
3334
|
-
.ims-
|
|
3337
|
+
.ims-detailModal {
|
|
3338
|
+
width: min(920px, 94vw) !important;
|
|
3339
|
+
max-width: none !important;
|
|
3340
|
+
max-height: 88vh;
|
|
3341
|
+
padding: 0 !important;
|
|
3342
|
+
gap: 0 !important;
|
|
3343
|
+
}
|
|
3344
|
+
.ims-sub {
|
|
3335
3345
|
display: flex;
|
|
3336
3346
|
flex-direction: column;
|
|
3337
|
-
|
|
3338
|
-
max-height:
|
|
3339
|
-
|
|
3340
|
-
background: var(--dsw-alias-bg-primary, #fff);
|
|
3341
|
-
overflow: hidden;
|
|
3347
|
+
min-height: 0;
|
|
3348
|
+
max-height: inherit;
|
|
3349
|
+
color: var(--dsw-alias-label-primary);
|
|
3342
3350
|
}
|
|
3343
|
-
.ims-
|
|
3351
|
+
.ims-subHead {
|
|
3344
3352
|
display: flex;
|
|
3345
3353
|
flex: none;
|
|
3346
3354
|
align-items: center;
|
|
3347
3355
|
justify-content: space-between;
|
|
3348
3356
|
gap: 8px;
|
|
3357
|
+
padding: 12px 14px;
|
|
3358
|
+
border-bottom: 1px solid var(--dsw-alias-border-l3);
|
|
3359
|
+
}
|
|
3360
|
+
.ims-subTitle { margin: 0; font-size: 14px; }
|
|
3361
|
+
.ims-subFoot {
|
|
3362
|
+
display: flex;
|
|
3363
|
+
flex: none;
|
|
3364
|
+
align-items: center;
|
|
3365
|
+
justify-content: flex-end;
|
|
3366
|
+
gap: 8px;
|
|
3349
3367
|
padding: 10px 14px;
|
|
3350
|
-
border-
|
|
3368
|
+
border-top: 1px solid var(--dsw-alias-border-l3);
|
|
3351
3369
|
}
|
|
3352
|
-
.ims-
|
|
3370
|
+
.ims-subFoot .ims-status { margin: 0 auto 0 0; }
|
|
3371
|
+
|
|
3372
|
+
/* 选择器网格 */
|
|
3353
3373
|
.ims-pickerGrid {
|
|
3354
3374
|
flex: 1;
|
|
3355
3375
|
min-height: 0;
|
|
@@ -3370,7 +3390,7 @@ ${extra}
|
|
|
3370
3390
|
overflow: hidden;
|
|
3371
3391
|
}
|
|
3372
3392
|
.ims-pickerCell img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
3373
|
-
.ims-pickerCellOn { border-color: var(--dsw-alias-
|
|
3393
|
+
.ims-pickerCellOn { border-color: var(--dsw-alias-brand-primary); }
|
|
3374
3394
|
.ims-pickerMark {
|
|
3375
3395
|
position: absolute;
|
|
3376
3396
|
top: 4px;
|
|
@@ -3378,20 +3398,12 @@ ${extra}
|
|
|
3378
3398
|
min-width: 18px;
|
|
3379
3399
|
height: 18px;
|
|
3380
3400
|
border-radius: 999px;
|
|
3381
|
-
background: var(--dsw-alias-button-primary-fill
|
|
3382
|
-
color: var(--dsw-alias-
|
|
3401
|
+
background: var(--dsw-alias-button-primary-fill);
|
|
3402
|
+
color: var(--dsw-alias-label-primary-inverted);
|
|
3383
3403
|
font-size: 11px;
|
|
3384
3404
|
line-height: 18px;
|
|
3385
3405
|
text-align: center;
|
|
3386
3406
|
}
|
|
3387
|
-
.ims-pickerFoot {
|
|
3388
|
-
display: flex;
|
|
3389
|
-
flex: none;
|
|
3390
|
-
justify-content: flex-end;
|
|
3391
|
-
gap: 8px;
|
|
3392
|
-
padding: 10px 14px;
|
|
3393
|
-
border-top: .5px solid var(--dsw-alias-border-l3, rgba(0,0,0,.08));
|
|
3394
|
-
}
|
|
3395
3407
|
|
|
3396
3408
|
/* ── 画廊 ── */
|
|
3397
3409
|
.ims-gallery { padding: 12px 16px; }
|
|
@@ -3408,7 +3420,7 @@ ${extra}
|
|
|
3408
3420
|
border: none;
|
|
3409
3421
|
border-radius: 10px;
|
|
3410
3422
|
padding: 0;
|
|
3411
|
-
background: var(--dsw-alias-bg-
|
|
3423
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
3412
3424
|
cursor: pointer;
|
|
3413
3425
|
overflow: hidden;
|
|
3414
3426
|
}
|
|
@@ -3431,9 +3443,8 @@ ${extra}
|
|
|
3431
3443
|
}
|
|
3432
3444
|
.ims-cell:hover .ims-cellPrompt, .ims-cell:focus-visible .ims-cellPrompt { opacity: 1; }
|
|
3433
3445
|
|
|
3434
|
-
/*
|
|
3435
|
-
.ims-
|
|
3436
|
-
.ims-detailMeta { font-size: 12px; color: var(--dsw-alias-label-secondary, #57606a); }
|
|
3446
|
+
/* 详情 */
|
|
3447
|
+
.ims-detailMeta { font-size: 12px; color: var(--dsw-alias-label-tertiary); }
|
|
3437
3448
|
.ims-detailBody {
|
|
3438
3449
|
flex: 1;
|
|
3439
3450
|
min-height: 0;
|
|
@@ -3448,13 +3459,13 @@ ${extra}
|
|
|
3448
3459
|
.ims-detailFigure img {
|
|
3449
3460
|
width: 100%;
|
|
3450
3461
|
border-radius: 10px;
|
|
3451
|
-
background: var(--dsw-alias-bg-
|
|
3462
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
3452
3463
|
display: block;
|
|
3453
3464
|
}
|
|
3454
3465
|
.ims-detailFigure figcaption { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
|
|
3455
3466
|
.ims-revised {
|
|
3456
3467
|
font-size: 11px;
|
|
3457
|
-
color: var(--dsw-alias-label-
|
|
3468
|
+
color: var(--dsw-alias-label-tertiary);
|
|
3458
3469
|
overflow: hidden;
|
|
3459
3470
|
text-overflow: ellipsis;
|
|
3460
3471
|
white-space: nowrap;
|
|
@@ -3464,18 +3475,8 @@ ${extra}
|
|
|
3464
3475
|
.ims-detailLabel:first-child { margin-top: 0; }
|
|
3465
3476
|
.ims-detailPrompt { margin: 0; font-size: 13px; white-space: pre-wrap; word-break: break-word; }
|
|
3466
3477
|
.ims-paramTable { width: 100%; border-collapse: collapse; font-size: 12px; }
|
|
3467
|
-
.ims-paramTable td { padding: 4px 6px; border-top:
|
|
3468
|
-
.ims-paramTableKey { font-family: var(--ds-font-family-code
|
|
3469
|
-
.ims-detailFoot {
|
|
3470
|
-
display: flex;
|
|
3471
|
-
flex: none;
|
|
3472
|
-
align-items: center;
|
|
3473
|
-
justify-content: flex-end;
|
|
3474
|
-
gap: 8px;
|
|
3475
|
-
padding: 10px 14px;
|
|
3476
|
-
border-top: .5px solid var(--dsw-alias-border-l3, rgba(0,0,0,.08));
|
|
3477
|
-
}
|
|
3478
|
-
.ims-detailFoot .ims-status { margin: 0 auto 0 0; }
|
|
3478
|
+
.ims-paramTable td { padding: 4px 6px; border-top: 1px solid var(--dsw-alias-border-l3); word-break: break-all; }
|
|
3479
|
+
.ims-paramTableKey { font-family: var(--ds-font-family-code); font-weight: 600; white-space: nowrap; }
|
|
3479
3480
|
|
|
3480
3481
|
/* ── 任务条 ── */
|
|
3481
3482
|
.ims-tasks {
|
|
@@ -3483,8 +3484,9 @@ ${extra}
|
|
|
3483
3484
|
flex: none;
|
|
3484
3485
|
gap: 8px;
|
|
3485
3486
|
padding: 8px 12px;
|
|
3487
|
+
margin: 0;
|
|
3486
3488
|
overflow-x: auto;
|
|
3487
|
-
border-top:
|
|
3489
|
+
border-top: 1px solid var(--dsw-alias-border-l3);
|
|
3488
3490
|
}
|
|
3489
3491
|
.ims-task {
|
|
3490
3492
|
display: inline-flex;
|
|
@@ -3494,30 +3496,30 @@ ${extra}
|
|
|
3494
3496
|
max-width: 340px;
|
|
3495
3497
|
padding: 4px 10px;
|
|
3496
3498
|
border-radius: 999px;
|
|
3497
|
-
background: var(--dsw-alias-bg-
|
|
3499
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
3498
3500
|
font-size: 12px;
|
|
3499
3501
|
}
|
|
3500
3502
|
.ims-taskState { font-weight: 600; flex: none; }
|
|
3501
|
-
.ims-taskState-running { color: var(--dsw-alias-
|
|
3502
|
-
.ims-taskState-queued { color: var(--dsw-alias-label-
|
|
3503
|
-
.ims-taskState-succeeded { color: var(--dsw-alias-
|
|
3504
|
-
.ims-taskState-failed { color: var(--dsw-alias-
|
|
3505
|
-
.ims-taskState-cancelled { color: var(--dsw-alias-label-
|
|
3503
|
+
.ims-taskState-running { color: var(--dsw-alias-brand-primary); }
|
|
3504
|
+
.ims-taskState-queued { color: var(--dsw-alias-label-tertiary); }
|
|
3505
|
+
.ims-taskState-succeeded { color: var(--dsw-alias-state-success-primary); }
|
|
3506
|
+
.ims-taskState-failed { color: var(--dsw-alias-state-error-primary); }
|
|
3507
|
+
.ims-taskState-cancelled { color: var(--dsw-alias-label-tertiary); }
|
|
3506
3508
|
.ims-taskPrompt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
3507
|
-
.ims-taskModel { flex: none; color: var(--dsw-alias-label-
|
|
3509
|
+
.ims-taskModel { flex: none; color: var(--dsw-alias-label-tertiary); font-size: 11px; }
|
|
3508
3510
|
.ims-taskError {
|
|
3509
3511
|
max-width: 140px;
|
|
3510
3512
|
overflow: hidden;
|
|
3511
3513
|
text-overflow: ellipsis;
|
|
3512
3514
|
white-space: nowrap;
|
|
3513
|
-
color: var(--dsw-alias-
|
|
3515
|
+
color: var(--dsw-alias-state-error-primary);
|
|
3514
3516
|
}
|
|
3515
3517
|
|
|
3516
3518
|
/* ── 配置卡片附加件(imsc- 基础类由 cardCss('imsc') 生成)── */
|
|
3517
3519
|
.imsc-loading{padding:14px 16px;margin:0;font-size:13px;color:var(--dsw-alias-label-tertiary)}
|
|
3518
3520
|
.imsc-groupTitle { margin: 14px 0 6px; font-size: 13px; font-weight: 600; }
|
|
3519
3521
|
.imsc-presetBox {
|
|
3520
|
-
border:
|
|
3522
|
+
border: 1px solid var(--dsw-alias-border-l3);
|
|
3521
3523
|
border-radius: 10px;
|
|
3522
3524
|
padding: 10px;
|
|
3523
3525
|
margin-bottom: 10px;
|
|
@@ -3532,11 +3534,11 @@ ${extra}
|
|
|
3532
3534
|
width: 100%;
|
|
3533
3535
|
min-height: 64px;
|
|
3534
3536
|
padding: 6px 10px;
|
|
3535
|
-
border:
|
|
3537
|
+
border: 1px solid var(--dsw-alias-border-l2);
|
|
3536
3538
|
border-radius: 8px;
|
|
3537
|
-
background: var(--dsw-alias-bg-
|
|
3538
|
-
color: var(--dsw-alias-label-primary
|
|
3539
|
-
font-family: var(--ds-font-family-code
|
|
3539
|
+
background: var(--dsw-alias-bg-layer-3);
|
|
3540
|
+
color: var(--dsw-alias-label-primary);
|
|
3541
|
+
font-family: var(--ds-font-family-code);
|
|
3540
3542
|
font-size: 12px;
|
|
3541
3543
|
resize: vertical;
|
|
3542
3544
|
}
|
|
@@ -3545,15 +3547,32 @@ ${extra}
|
|
|
3545
3547
|
|
|
3546
3548
|
/* ── 移动端(≤767px,与 ui-mobile-fit 同断点)── */
|
|
3547
3549
|
@media (max-width: 767px) {
|
|
3548
|
-
.ims-
|
|
3549
|
-
|
|
3550
|
+
.ims-modal {
|
|
3551
|
+
position: fixed;
|
|
3552
|
+
inset: 0;
|
|
3553
|
+
margin: 0;
|
|
3554
|
+
width: 100% !important;
|
|
3555
|
+
max-width: none !important;
|
|
3556
|
+
height: 100%;
|
|
3557
|
+
max-height: none;
|
|
3558
|
+
border: none;
|
|
3559
|
+
border-radius: 0 !important;
|
|
3560
|
+
}
|
|
3550
3561
|
.ims-gen { grid-template-columns: minmax(0, 1fr); }
|
|
3551
3562
|
.ims-genSide { margin-top: 4px; }
|
|
3552
3563
|
.ims-tab { padding: 0 10px; }
|
|
3553
3564
|
.ims-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
3554
3565
|
.ims-detailBody { grid-template-columns: minmax(0, 1fr); }
|
|
3555
|
-
.ims-
|
|
3556
|
-
|
|
3566
|
+
.ims-pickerModal, .ims-detailModal {
|
|
3567
|
+
position: fixed;
|
|
3568
|
+
inset: 0;
|
|
3569
|
+
width: 100% !important;
|
|
3570
|
+
max-width: none !important;
|
|
3571
|
+
max-height: none;
|
|
3572
|
+
height: 100%;
|
|
3573
|
+
border: none;
|
|
3574
|
+
border-radius: 0 !important;
|
|
3575
|
+
}
|
|
3557
3576
|
.ims-paramControl { width: 108px; }
|
|
3558
3577
|
.ims-btn { min-height: 40px; }
|
|
3559
3578
|
.ims-btnSmall { min-height: 32px; }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dsh-plus/image-studio",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "dsh-plus service+ui plugin: 图像工作室——OpenAI Images 协议文生图/图生图,全参数开关化,双预设体系,并发生图任务与可二次编辑画廊",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"src"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"
|
|
23
|
-
"
|
|
22
|
+
"https-proxy-agent": "^9.1.0",
|
|
23
|
+
"@dsh-plus/shared": "0.1.12"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@deepseek-ai/cordis": "^4.0.2",
|