@dickpy/dsh-imagegen 1.5.8 → 1.5.10
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 +1 -1
- package/lib/client.js +3512 -917
- package/lib/client.js.map +1 -1
- package/lib/index.js +18 -3
- package/package.json +1 -1
- package/src/canvas-store.ts +389 -376
- package/src/client/CanvasBackgrounds.tsx +1774 -0
- package/src/client/CanvasWorkspace.tsx +2218 -2211
- package/src/client/GooeyNav.module.css +224 -0
- package/src/client/GooeyNav.tsx +185 -0
- package/src/client/ImageGenPanel.tsx +203 -100
- package/src/client/canvas-workspace.module.css +1226 -1189
- package/src/client/locales.ts +1578 -1524
- package/src/client/panel.module.css +86 -11
- package/src/client/surface-theme.ts +20 -0
- package/src/protocol.ts +8 -5
|
@@ -920,21 +920,17 @@ html[data-dsh-imagegen-active] .sidebarHistoryHost {
|
|
|
920
920
|
padding: 10px 8px 18px;
|
|
921
921
|
}
|
|
922
922
|
|
|
923
|
-
/*
|
|
923
|
+
/* Config cards in the 参考布局 style: elevated white cards, head row with a
|
|
924
|
+
* count chip, hint line under the title. */
|
|
924
925
|
.ecommerceSection {
|
|
925
926
|
display: flex;
|
|
926
927
|
flex-direction: column;
|
|
927
928
|
gap: 10px;
|
|
928
|
-
padding:
|
|
929
|
-
border:
|
|
930
|
-
border-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
.ecommerceSection:last-of-type {
|
|
936
|
-
padding-bottom: 4px;
|
|
937
|
-
border-bottom: none;
|
|
929
|
+
padding: 14px 16px 16px;
|
|
930
|
+
border: 1px solid var(--dsw-alias-border-l1);
|
|
931
|
+
border-radius: 14px;
|
|
932
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
933
|
+
box-shadow: 0 1px 2px rgb(15 23 42 / 4%);
|
|
938
934
|
}
|
|
939
935
|
|
|
940
936
|
.ecommerceSection h3 {
|
|
@@ -944,12 +940,46 @@ html[data-dsh-imagegen-active] .sidebarHistoryHost {
|
|
|
944
940
|
display: flex;
|
|
945
941
|
align-items: baseline;
|
|
946
942
|
gap: 7px;
|
|
943
|
+
min-width: 0;
|
|
947
944
|
}
|
|
948
945
|
|
|
949
946
|
.ecommerceSectionHint {
|
|
950
947
|
font-size: 11px;
|
|
951
948
|
font-weight: 400;
|
|
952
949
|
color: var(--dsw-alias-label-tertiary);
|
|
950
|
+
white-space: nowrap;
|
|
951
|
+
overflow: hidden;
|
|
952
|
+
text-overflow: ellipsis;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
.ecommerceCardHead {
|
|
956
|
+
display: flex;
|
|
957
|
+
align-items: center;
|
|
958
|
+
justify-content: space-between;
|
|
959
|
+
gap: 8px;
|
|
960
|
+
min-width: 0;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
.ecommerceCardHead h3 {
|
|
964
|
+
flex: 1;
|
|
965
|
+
min-width: 0;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.ecommerceCardCount {
|
|
969
|
+
flex: none;
|
|
970
|
+
font-size: 11px;
|
|
971
|
+
line-height: 16px;
|
|
972
|
+
padding: 1px 8px;
|
|
973
|
+
border-radius: 999px;
|
|
974
|
+
background: var(--dsw-alias-bg-layer-3);
|
|
975
|
+
color: var(--dsw-alias-label-secondary);
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
.ecommerceCardHint {
|
|
979
|
+
margin: -4px 0 0;
|
|
980
|
+
font-size: 11.5px;
|
|
981
|
+
line-height: 1.5;
|
|
982
|
+
color: var(--dsw-alias-label-tertiary);
|
|
953
983
|
}
|
|
954
984
|
|
|
955
985
|
.ecommerceSection input:not([type="checkbox"]), .ecommerceSection select, .ecommerceSection textarea { box-sizing: border-box; width: 100%; padding: 9px 11px; color: var(--dsw-alias-label-primary); background: var(--dsw-alias-bg-layer-3); border: 1px solid var(--dsw-alias-border-l2); border-radius: 9px; font: inherit; }
|
|
@@ -1321,6 +1351,25 @@ html[data-dsh-imagegen-active] .sidebarHistoryHost {
|
|
|
1321
1351
|
gap: 16px;
|
|
1322
1352
|
}
|
|
1323
1353
|
|
|
1354
|
+
/* 套图结果左右布局:主图组独占左侧大图,其余分组纵排在右侧。 */
|
|
1355
|
+
.ecommerceGroups[data-split] {
|
|
1356
|
+
display: grid;
|
|
1357
|
+
grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
|
|
1358
|
+
gap: 14px;
|
|
1359
|
+
align-items: start;
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
.ecommerceGroupsSide {
|
|
1363
|
+
display: flex;
|
|
1364
|
+
flex-direction: column;
|
|
1365
|
+
gap: 16px;
|
|
1366
|
+
min-width: 0;
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
.ecommerceGroup[data-main] .ecommerceGroupGrid {
|
|
1370
|
+
grid-template-columns: 1fr;
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1324
1373
|
.ecommerceGroup {
|
|
1325
1374
|
display: flex;
|
|
1326
1375
|
flex-direction: column;
|
|
@@ -1357,6 +1406,32 @@ html[data-dsh-imagegen-active] .sidebarHistoryHost {
|
|
|
1357
1406
|
gap: 12px;
|
|
1358
1407
|
}
|
|
1359
1408
|
|
|
1409
|
+
/* AI 帮写 icon button, floats at the 参数信息 card's top-right. */
|
|
1410
|
+
.ecommerceAiButton {
|
|
1411
|
+
flex: none;
|
|
1412
|
+
display: inline-flex;
|
|
1413
|
+
align-items: center;
|
|
1414
|
+
gap: 4px;
|
|
1415
|
+
padding: 3px 9px;
|
|
1416
|
+
border: 1px solid color-mix(in srgb, var(--dsw-alias-brand-primary) 45%, transparent);
|
|
1417
|
+
border-radius: 999px;
|
|
1418
|
+
background: color-mix(in srgb, var(--dsw-alias-brand-primary) 10%, transparent);
|
|
1419
|
+
color: var(--dsw-alias-brand-primary);
|
|
1420
|
+
font-size: 11px;
|
|
1421
|
+
line-height: 16px;
|
|
1422
|
+
cursor: pointer;
|
|
1423
|
+
font-weight: 600;
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
.ecommerceAiButton:hover {
|
|
1427
|
+
background: color-mix(in srgb, var(--dsw-alias-brand-primary) 20%, transparent);
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
.ecommerceAiButton:disabled {
|
|
1431
|
+
opacity: 0.55;
|
|
1432
|
+
cursor: default;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1360
1435
|
.ecommerceTaskCard {
|
|
1361
1436
|
position: relative;
|
|
1362
1437
|
display: flex;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Walk up from an element to the first opaque surface and decide
|
|
2
|
+
* light vs dark, so ported reactbits visuals can pick their ink. Non-browser
|
|
3
|
+
* environments (jsdom smoke) have no computed styles and default to dark. */
|
|
4
|
+
export function detectLightSurface(element: HTMLElement): boolean {
|
|
5
|
+
if (typeof globalThis.getComputedStyle !== 'function') return false
|
|
6
|
+
let node: HTMLElement | null = element
|
|
7
|
+
while (node !== null) {
|
|
8
|
+
const color = getComputedStyle(node).backgroundColor
|
|
9
|
+
const match = color.match(/rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:[\s,]+([\d.]+))?\s*\)/)
|
|
10
|
+
if (match !== null) {
|
|
11
|
+
const alpha = match[4] !== undefined ? Number(match[4]) : 1
|
|
12
|
+
if (alpha >= 0.5) {
|
|
13
|
+
const luminance = (0.2126 * Number(match[1]) + 0.7152 * Number(match[2]) + 0.0722 * Number(match[3])) / 255
|
|
14
|
+
return luminance > 0.55
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
node = node.parentElement
|
|
18
|
+
}
|
|
19
|
+
return false
|
|
20
|
+
}
|
package/src/protocol.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
export const IMAGEGEN_SETTINGS_NAMESPACE = 'dsh-imagegen'
|
|
9
9
|
|
|
10
10
|
/** Published package version shared by the host updater and the client UI. */
|
|
11
|
-
export const PLUGIN_VERSION = '1.5.
|
|
11
|
+
export const PLUGIN_VERSION = '1.5.10'
|
|
12
12
|
|
|
13
13
|
/** Same-origin route family (loopback-only, mirroring the dsh-ssh fence). */
|
|
14
14
|
export const SETTINGS_API = {
|
|
@@ -324,7 +324,7 @@ export interface CanvasDocument {
|
|
|
324
324
|
title: string
|
|
325
325
|
revision: number
|
|
326
326
|
viewport: CanvasViewport
|
|
327
|
-
background: 'dots' | 'lines' | '
|
|
327
|
+
background: 'dots' | 'lines' | 'blank' | 'image' | 'flow' | 'liquid' | 'floatingLines' | 'galaxy' | 'silk' | 'waves' | 'faultyTerminal' | 'dotField' | 'dotGrid' | 'shapeGrid'
|
|
328
328
|
/** Custom background image URL (a canvas asset) when background is 'image'. */
|
|
329
329
|
backgroundImage?: string
|
|
330
330
|
nodes: CanvasNode[]
|
|
@@ -377,9 +377,12 @@ export interface ProductSetDraft {
|
|
|
377
377
|
customLanguage?: string
|
|
378
378
|
size: string
|
|
379
379
|
productName: string
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
380
|
+
/** 参数信息(提示词): the merged reference-info field (v1.5.9+). */
|
|
381
|
+
promptInfo: string
|
|
382
|
+
/** Legacy v1.5.9 separate fields; folded into promptInfo on load. */
|
|
383
|
+
sellingPoints?: string
|
|
384
|
+
protectedFeatures?: string
|
|
385
|
+
styleHint?: string
|
|
383
386
|
slots: ProductSetSlot[]
|
|
384
387
|
}
|
|
385
388
|
|