dsh-git-ui 0.0.2 → 0.1.1
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 +55 -20
- package/README.zh.md +55 -21
- package/cordis.patch.yml +1 -1
- package/lib/client.js +36 -35
- package/lib/client.js.map +4 -4
- package/lib/contracts/host-endpoints.d.ts +27 -0
- package/lib/host/actions.d.ts +22 -2
- package/lib/host/core.d.ts +7 -1
- package/lib/host/index.d.ts +25 -15
- package/lib/host/index.js +419 -53
- package/lib/host/index.js.map +4 -4
- package/lib/host/parser.d.ts +37 -1
- package/lib/host/queries.d.ts +17 -0
- package/lib/host/types.d.ts +131 -1
- package/package.json +1 -1
- package/src/adapters/dsh/client-adapter.ts +120 -0
- package/src/adapters/dsh/types/cordis.d.ts +48 -0
- package/src/adapters/dsh/types/typert-protocol.d.ts +81 -0
- package/src/adapters/dsh/types/ui-primitives.d.ts +45 -0
- package/src/adapters/dsh/ui-primitives.ts +16 -0
- package/src/client/GitCenter.tsx +1414 -149
- package/src/client/GitPill.tsx +282 -67
- package/src/client/changes-diff.ts +63 -0
- package/src/client/controller.ts +34 -31
- package/src/client/error-text.ts +21 -0
- package/src/client/file-tree.ts +101 -0
- package/src/client/git-graph.ts +188 -0
- package/src/client/icons.tsx +292 -0
- package/src/client/index.ts +38 -134
- package/src/client/locales.ts +124 -0
- package/src/client/popup-close.ts +19 -0
- package/src/client/remote.ts +85 -3
- package/src/client/select-menu.tsx +113 -0
- package/src/client/side-by-side.ts +150 -0
- package/src/client/styles.ts +1375 -86
- package/src/client/time-format.ts +32 -0
- package/src/contracts/client-platform.ts +147 -0
- package/src/contracts/host-endpoints.ts +58 -0
- package/src/contracts/plugin-activation.ts +129 -0
- package/src/contracts/ui-context.tsx +28 -0
- package/src/contracts/ui-primitives.ts +48 -0
- package/src/host/actions.ts +66 -15
- package/src/host/core.ts +9 -2
- package/src/host/index.ts +60 -54
- package/src/host/parser.ts +155 -12
- package/src/host/queries.ts +289 -0
- package/src/host/types.ts +104 -0
package/src/client/styles.ts
CHANGED
|
@@ -13,22 +13,39 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type { CSSProperties } from 'react'
|
|
15
15
|
|
|
16
|
-
/** Pill: compact branch chip, right-aligned in the session header.
|
|
16
|
+
/** Pill: compact branch chip, right-aligned in the session header.
|
|
17
|
+
* macOS 式发丝描边(inset 无布局位移):层 2 淡底 + l2 极细边,比纯底色更挺括。 */
|
|
17
18
|
export const pill: CSSProperties = {
|
|
18
19
|
display: 'inline-flex',
|
|
19
20
|
alignItems: 'center',
|
|
20
21
|
gap: 6,
|
|
21
22
|
height: 24,
|
|
22
|
-
padding: '0
|
|
23
|
+
padding: '0 9px',
|
|
23
24
|
border: 0,
|
|
24
25
|
borderRadius: 12,
|
|
25
26
|
font: 'inherit',
|
|
26
27
|
fontSize: 12,
|
|
27
28
|
lineHeight: '18px',
|
|
28
29
|
whiteSpace: 'nowrap',
|
|
30
|
+
maxWidth: 280,
|
|
29
31
|
cursor: 'pointer',
|
|
30
32
|
color: 'var(--dsw-alias-label-secondary)',
|
|
31
33
|
background: 'var(--dsw-alias-bg-layer-2)',
|
|
34
|
+
boxShadow: 'inset 0 0 0 1px var(--dsw-alias-border-l2)',
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** 分支名段:超长可省略,徽标优先保留。 */
|
|
38
|
+
export const pillBranch: CSSProperties = {
|
|
39
|
+
overflow: 'hidden',
|
|
40
|
+
textOverflow: 'ellipsis',
|
|
41
|
+
minWidth: 0,
|
|
42
|
+
flexShrink: 1,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** 徽标段:不截断,始终完整展示(+2 −1 ?3 / ↑1 ↓2)。 */
|
|
46
|
+
export const pillBadges: CSSProperties = {
|
|
47
|
+
flexShrink: 0,
|
|
48
|
+
whiteSpace: 'nowrap',
|
|
32
49
|
}
|
|
33
50
|
|
|
34
51
|
/** Dimmed pill for degraded states (no repo / unavailable). */
|
|
@@ -60,7 +77,7 @@ export const popup: CSSProperties = {
|
|
|
60
77
|
width: 340,
|
|
61
78
|
maxHeight: 420,
|
|
62
79
|
overflowY: 'auto',
|
|
63
|
-
padding: '
|
|
80
|
+
padding: '12px 14px',
|
|
64
81
|
fontSize: 12,
|
|
65
82
|
lineHeight: '18px',
|
|
66
83
|
background: 'var(--dsw-alias-bg-layer-3)',
|
|
@@ -70,74 +87,152 @@ export const popup: CSSProperties = {
|
|
|
70
87
|
boxShadow: 'var(--dsw-shadow-lv3)',
|
|
71
88
|
}
|
|
72
89
|
|
|
73
|
-
|
|
74
|
-
|
|
90
|
+
/** 上下文头部:分支 prominent + 徽标 + 根路径(回响 pill 的分支/脏/同步信息)。 */
|
|
91
|
+
export const popupHeader: CSSProperties = {
|
|
92
|
+
display: 'flex',
|
|
93
|
+
flexDirection: 'column',
|
|
94
|
+
gap: 4,
|
|
95
|
+
paddingBottom: 10,
|
|
96
|
+
marginBottom: 10,
|
|
97
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const popupHeaderMain: CSSProperties = {
|
|
101
|
+
display: 'flex',
|
|
102
|
+
alignItems: 'center',
|
|
103
|
+
gap: 6,
|
|
104
|
+
flexWrap: 'wrap',
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** 分支名:头部视觉重心(13px semibold primary)。 */
|
|
108
|
+
export const popupHeaderBranch: CSSProperties = {
|
|
75
109
|
fontSize: 13,
|
|
76
110
|
fontWeight: 600,
|
|
77
|
-
|
|
111
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** 头部徽标(脏状态 / 同步 / unborn):次级弱化文本,不喧宾夺主。 */
|
|
115
|
+
export const popupBadge: CSSProperties = {
|
|
116
|
+
fontSize: 11,
|
|
117
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
118
|
+
fontVariantNumeric: 'tabular-nums',
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** 根路径行:文件夹图标 + 弱化省略路径。 */
|
|
122
|
+
export const popupHeaderRoot: CSSProperties = {
|
|
123
|
+
display: 'flex',
|
|
124
|
+
alignItems: 'center',
|
|
125
|
+
gap: 5,
|
|
126
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
78
127
|
}
|
|
79
128
|
|
|
80
|
-
export const
|
|
129
|
+
export const popupHeaderRootText: CSSProperties = {
|
|
81
130
|
overflow: 'hidden',
|
|
82
131
|
textOverflow: 'ellipsis',
|
|
83
132
|
whiteSpace: 'nowrap',
|
|
84
|
-
|
|
85
|
-
marginBottom: 8,
|
|
133
|
+
fontSize: 11,
|
|
86
134
|
}
|
|
87
135
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
136
|
+
/** 头部分支内联切换按钮(无框融入头部,带 chevron 下拉)。 */
|
|
137
|
+
export const popupBranchMenu: CSSProperties = {
|
|
138
|
+
display: 'inline-flex',
|
|
139
|
+
alignItems: 'center',
|
|
140
|
+
gap: 4,
|
|
141
|
+
border: 'none',
|
|
142
|
+
background: 'transparent',
|
|
143
|
+
padding: '2px 4px',
|
|
144
|
+
cursor: 'pointer',
|
|
145
|
+
font: 'inherit',
|
|
146
|
+
fontSize: 13,
|
|
147
|
+
fontWeight: 600,
|
|
148
|
+
lineHeight: '20px',
|
|
149
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
150
|
+
borderRadius: 4,
|
|
93
151
|
}
|
|
94
152
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
153
|
+
/** 紧凑状态条:横排计数(取代独立格子 grid),省垂直空间。 */
|
|
154
|
+
export const popupStatusBar: CSSProperties = {
|
|
155
|
+
display: 'flex',
|
|
156
|
+
alignItems: 'center',
|
|
157
|
+
gap: 12,
|
|
158
|
+
flexWrap: 'wrap',
|
|
159
|
+
marginBottom: 10,
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export const popupStatItem: CSSProperties = {
|
|
163
|
+
display: 'inline-flex',
|
|
164
|
+
alignItems: 'baseline',
|
|
165
|
+
gap: 4,
|
|
100
166
|
}
|
|
101
167
|
|
|
102
|
-
export const
|
|
168
|
+
export const popupStatValue: CSSProperties = {
|
|
103
169
|
fontWeight: 600,
|
|
104
|
-
fontSize:
|
|
170
|
+
fontSize: 13,
|
|
105
171
|
color: 'var(--dsw-alias-label-primary)',
|
|
172
|
+
fontVariantNumeric: 'tabular-nums',
|
|
106
173
|
}
|
|
107
174
|
|
|
108
|
-
export const
|
|
175
|
+
export const popupStatLabel: CSSProperties = {
|
|
109
176
|
fontSize: 11,
|
|
110
177
|
color: 'var(--dsw-alias-label-tertiary)',
|
|
111
178
|
}
|
|
112
179
|
|
|
180
|
+
/** 分支操作行(新建分支,上提至头部区下方)。 */
|
|
181
|
+
export const popupBranchOps: CSSProperties = {
|
|
182
|
+
display: 'flex',
|
|
183
|
+
alignItems: 'center',
|
|
184
|
+
gap: 6,
|
|
185
|
+
marginBottom: 6,
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** 分组小标题:macOS 式 11px semibold 弱化色(弃用全大写+字距的报表风)。 */
|
|
113
189
|
export const sectionTitle: CSSProperties = {
|
|
114
|
-
margin: '
|
|
190
|
+
margin: '14px 0 6px',
|
|
115
191
|
fontSize: 11,
|
|
116
192
|
fontWeight: 600,
|
|
117
|
-
color: 'var(--dsw-alias-label-
|
|
118
|
-
textTransform: 'uppercase',
|
|
119
|
-
letterSpacing: 0.4,
|
|
193
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
120
194
|
}
|
|
121
195
|
|
|
196
|
+
/** 提交行:两段式(主题全宽 / hash·作者·时间 次行),消除窄弹窗内主题截断。 */
|
|
122
197
|
export const commitRow: CSSProperties = {
|
|
123
198
|
display: 'flex',
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
padding: '
|
|
199
|
+
flexDirection: 'column',
|
|
200
|
+
gap: 1,
|
|
201
|
+
padding: '3px 6px',
|
|
202
|
+
margin: '0 -6px',
|
|
203
|
+
borderRadius: 6,
|
|
127
204
|
}
|
|
128
205
|
|
|
129
206
|
export const commitHash: CSSProperties = {
|
|
130
|
-
|
|
207
|
+
flex: 'none',
|
|
208
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
131
209
|
fontSize: 11,
|
|
132
210
|
color: 'var(--dsw-alias-label-secondary)',
|
|
133
211
|
}
|
|
134
212
|
|
|
135
|
-
|
|
213
|
+
/** 主题行:全宽省略,popup 内不再被 hash/meta 挤压。 */
|
|
214
|
+
export const commitSubjectPop: CSSProperties = {
|
|
136
215
|
overflow: 'hidden',
|
|
137
216
|
textOverflow: 'ellipsis',
|
|
138
217
|
whiteSpace: 'nowrap',
|
|
139
|
-
flex: 1,
|
|
140
218
|
color: 'var(--dsw-alias-label-primary)',
|
|
219
|
+
fontSize: 12,
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** 次行元数据:hash · 作者 · 相对时间,弱化横排。 */
|
|
223
|
+
export const commitMetaLine: CSSProperties = {
|
|
224
|
+
display: 'flex',
|
|
225
|
+
alignItems: 'center',
|
|
226
|
+
gap: 4,
|
|
227
|
+
fontSize: 11,
|
|
228
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
229
|
+
whiteSpace: 'nowrap',
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** 元数据分隔点。 */
|
|
233
|
+
export const commitDot: CSSProperties = {
|
|
234
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
235
|
+
opacity: 0.6,
|
|
141
236
|
}
|
|
142
237
|
|
|
143
238
|
export const commitMeta: CSSProperties = {
|
|
@@ -148,36 +243,98 @@ export const commitMeta: CSSProperties = {
|
|
|
148
243
|
|
|
149
244
|
export const changeRow: CSSProperties = {
|
|
150
245
|
display: 'flex',
|
|
151
|
-
gap:
|
|
246
|
+
gap: 8,
|
|
152
247
|
alignItems: 'center',
|
|
153
|
-
padding: '
|
|
248
|
+
padding: '2px 0',
|
|
154
249
|
borderRadius: 6,
|
|
155
250
|
}
|
|
156
251
|
|
|
252
|
+
/** 状态字符徽标:紧凑方块芯片,小一号字 + 加粗,视觉重心更稳。 */
|
|
157
253
|
export const changeChip: CSSProperties = {
|
|
158
|
-
width:
|
|
254
|
+
width: 18,
|
|
159
255
|
textAlign: 'center',
|
|
160
|
-
borderRadius:
|
|
161
|
-
fontSize:
|
|
162
|
-
|
|
256
|
+
borderRadius: 5,
|
|
257
|
+
fontSize: 10,
|
|
258
|
+
lineHeight: '14px',
|
|
259
|
+
fontWeight: 700,
|
|
163
260
|
flexShrink: 0,
|
|
164
|
-
color: '#fff',
|
|
165
261
|
}
|
|
166
262
|
|
|
167
|
-
|
|
263
|
+
/**
|
|
264
|
+
* 状态字符徽标配色:color-mix 淡晕背景(~12%)+ label-primary 文字(始终高对比可读)。
|
|
265
|
+
* 取代旧 state-*-secondary 饱和填充 + state-*-primary 文字(同色系 bg+text 低对比,如 added 绿底绿字看不清)。
|
|
266
|
+
* 与差异视图 sbsDel/sbsAdd 同一配色语言。
|
|
267
|
+
*/
|
|
268
|
+
export const chipStyles: Record<string, CSSProperties> = {
|
|
269
|
+
added: { background: 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 14%, transparent)', color: 'var(--dsw-alias-label-primary)' },
|
|
270
|
+
modified: { background: 'color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent)', color: 'var(--dsw-alias-label-primary)' },
|
|
271
|
+
deleted: { background: 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 14%, transparent)', color: 'var(--dsw-alias-label-primary)' },
|
|
272
|
+
renamed: { background: 'color-mix(in srgb, var(--dsw-alias-state-business-primary) 14%, transparent)', color: 'var(--dsw-alias-label-primary)' },
|
|
273
|
+
untracked: { background: 'var(--dsw-alias-bg-layer-2)', color: 'var(--dsw-alias-label-secondary)' },
|
|
274
|
+
conflicted: { background: 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 18%, transparent)', color: 'var(--dsw-alias-label-primary)' },
|
|
275
|
+
typechange: { background: 'color-mix(in srgb, var(--dsw-alias-state-warn-primary) 14%, transparent)', color: 'var(--dsw-alias-label-primary)' },
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** 变更文件名段:prominent,按需收缩(目录优先省略)。
|
|
279
|
+
* 颜色由全局类控制(基础 label-primary / hover business-primary),否则内联
|
|
280
|
+
* color 会压掉样式表的 :hover 主色。 */
|
|
281
|
+
export const changeNamePop: CSSProperties = {
|
|
282
|
+
flex: '0 1 auto',
|
|
283
|
+
minWidth: 0,
|
|
284
|
+
maxWidth: '60%',
|
|
168
285
|
overflow: 'hidden',
|
|
169
286
|
textOverflow: 'ellipsis',
|
|
170
287
|
whiteSpace: 'nowrap',
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** 变更文件名按钮(popup):可点击打开 Git 中心 diff,hover 由全局类反馈。 */
|
|
291
|
+
export const changeNamePopBtn: CSSProperties = {
|
|
292
|
+
...changeNamePop,
|
|
293
|
+
border: 'none',
|
|
294
|
+
background: 'transparent',
|
|
295
|
+
padding: 0,
|
|
296
|
+
fontFamily: 'inherit',
|
|
297
|
+
fontSize: 13,
|
|
298
|
+
lineHeight: '20px',
|
|
299
|
+
textAlign: 'left',
|
|
300
|
+
cursor: 'pointer',
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** 变更目录段:弱化,flex:1 优先省略,文件名尽量完整。 */
|
|
304
|
+
export const changeDirPop: CSSProperties = {
|
|
171
305
|
flex: 1,
|
|
172
|
-
|
|
306
|
+
minWidth: 0,
|
|
307
|
+
overflow: 'hidden',
|
|
308
|
+
textOverflow: 'ellipsis',
|
|
309
|
+
whiteSpace: 'nowrap',
|
|
310
|
+
fontSize: 11,
|
|
311
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
173
312
|
}
|
|
174
313
|
|
|
314
|
+
/** 底栏:发丝分隔线把操作区与内容轻轻分开(macOS 工具栏语义)。 */
|
|
175
315
|
export const footerRow: CSSProperties = {
|
|
176
316
|
display: 'flex',
|
|
177
317
|
alignItems: 'center',
|
|
178
318
|
justifyContent: 'space-between',
|
|
179
319
|
gap: 8,
|
|
180
|
-
marginTop:
|
|
320
|
+
marginTop: 12,
|
|
321
|
+
paddingTop: 10,
|
|
322
|
+
borderTop: '1px solid var(--dsw-alias-border-l2)',
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/** 底栏操作组。 */
|
|
326
|
+
export const footerActions: CSSProperties = {
|
|
327
|
+
display: 'inline-flex',
|
|
328
|
+
alignItems: 'center',
|
|
329
|
+
gap: 4,
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** 主操作(打开 Git 中心):强调描边按钮,主题安全(不依赖未验证的 on-business 前景令牌)。 */
|
|
333
|
+
export const footerPrimary: CSSProperties = {
|
|
334
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
335
|
+
border: '1px solid var(--dsw-alias-state-business-primary)',
|
|
336
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
337
|
+
fontWeight: 600,
|
|
181
338
|
}
|
|
182
339
|
|
|
183
340
|
export const checkedAt: CSSProperties = {
|
|
@@ -202,6 +359,19 @@ export const emptyNote: CSSProperties = {
|
|
|
202
359
|
padding: '4px 0',
|
|
203
360
|
}
|
|
204
361
|
|
|
362
|
+
/** 居中空状态占位(IDEA 式:大区空背景时中心显示提示文字)。 */
|
|
363
|
+
export const centeredEmpty: CSSProperties = {
|
|
364
|
+
flex: 1,
|
|
365
|
+
minHeight: 0,
|
|
366
|
+
display: 'flex',
|
|
367
|
+
alignItems: 'center',
|
|
368
|
+
justifyContent: 'center',
|
|
369
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
370
|
+
fontSize: 12,
|
|
371
|
+
lineHeight: '18px',
|
|
372
|
+
padding: '16px 0',
|
|
373
|
+
}
|
|
374
|
+
|
|
205
375
|
/**
|
|
206
376
|
* Global styles for pseudo-class interactions (inline styles can't express
|
|
207
377
|
* :hover/:focus-visible). Injected once per document under a plugin-scoped id.
|
|
@@ -209,15 +379,94 @@ export const emptyNote: CSSProperties = {
|
|
|
209
379
|
const GLOBAL_CSS_ID = 'dsh-git-ui/styles'
|
|
210
380
|
|
|
211
381
|
const globalCss = [
|
|
212
|
-
|
|
213
|
-
|
|
382
|
+
// Elevated 面滚动条重绑(宿主 scrollbar.css 契约:浮起表面须用 l2 滑块对,
|
|
383
|
+
// 否则滑块底色与 layer-3 面同色而隐形)——popup / Git 中心 Modal / 自绘下拉。
|
|
384
|
+
'.dsh-git-ui__pop, .dsh-git-ui__center, .dsh-git-ui__select-menu { --dsh-scrollbar-thumb: var(--dsw-alias-scrollbar-bg-l2); --dsh-scrollbar-thumb-hover: var(--dsw-alias-scrollbar-hover-l2); }',
|
|
385
|
+
|
|
386
|
+
// 浮层入场(emil「勿从 scale(0) 入场」「浮层 origin-aware」):
|
|
387
|
+
// popup 默认下展 → top center;SelectMenu 始终按钮左下展 → top left。
|
|
388
|
+
// @starting-style 无 JS 入场;不支持的引擎降级为瞬现(无功能回归)。
|
|
389
|
+
'.dsh-git-ui__pop, .dsh-git-ui__select-menu { transition: opacity 150ms ease-out, transform 150ms ease-out; }',
|
|
390
|
+
'.dsh-git-ui__pop { transform-origin: top center; }',
|
|
391
|
+
'.dsh-git-ui__select-menu { transform-origin: top left; }',
|
|
392
|
+
'.dsh-git-ui__pop, .dsh-git-ui__select-menu { opacity: 1; transform: scale(1); @starting-style { opacity: 0; transform: scale(0.97); } }',
|
|
393
|
+
|
|
394
|
+
// ── 基础几何 + 过渡(含按压 transform,GPU 友好;禁用 transition: all)──────
|
|
214
395
|
'.dsh-git-ui__row { border-radius: 6px; }',
|
|
215
|
-
|
|
216
|
-
'.dsh-git-
|
|
396
|
+
// 按压即时缩放:所有可按压元素 :active 时 scale(0.97),松手回弹(emil「按钮必须可按压」)。
|
|
397
|
+
'.dsh-git-ui__pill { transition: transform var(--ds-transition-duration-fast) ease-out, background var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
398
|
+
'.dsh-git-ui__commit-row, .dsh-git-ui__row { transition: transform var(--ds-transition-duration-fast) ease-out, background var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
399
|
+
'.dsh-git-ui__refresh { transition: transform var(--ds-transition-duration-fast) ease-out, color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
400
|
+
// 输入框 hover 反馈:边框由 l2 加深至 l1(聚焦环由 focus-visible 承担)。
|
|
401
|
+
'.dsh-git-ui__branch-input, .dsh-git-ui__commit-input { transition: border-color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
402
|
+
// System tab underline: 2px bar below the active tab.
|
|
403
|
+
'.dsh-git-ui__tab { transition: transform var(--ds-transition-duration-fast) ease-out, color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
404
|
+
'.dsh-git-ui__tab::after { content: ""; position: absolute; right: 0; bottom: 1px; left: 0; height: 2px; border-radius: 2px; background: transparent; transition: background var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
405
|
+
'.dsh-git-ui__tab--active::after { background: var(--dsw-alias-state-business-primary); }',
|
|
406
|
+
// 工具栏下拉按钮:hover 淡底 + 缓动(与图标按钮同一交互语言)。
|
|
407
|
+
'.dsh-git-ui__toolbar-select { transition: transform var(--ds-transition-duration-fast) ease-out, background var(--ds-transition-duration-fast) var(--ds-ease-in-out), border-color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
408
|
+
// IDEA 式悬停操作:行尾图标默认隐藏,悬停/键盘聚焦显现(元素常驻,无布局跳动)。
|
|
409
|
+
'.dsh-git-ui__row-actions { opacity: 0; transition: opacity var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
410
|
+
'.dsh-git-ui__row:focus-within .dsh-git-ui__row-actions { opacity: 1; }',
|
|
411
|
+
// 行操作图标按钮的过渡。
|
|
412
|
+
'.dsh-git-ui__icon-btn { transition: transform var(--ds-transition-duration-fast) ease-out, background var(--ds-transition-duration-fast) var(--ds-ease-in-out), color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
413
|
+
'.dsh-git-ui__icon-btn:disabled { opacity: 0.45; cursor: default; }',
|
|
414
|
+
'.dsh-git-ui__refresh:disabled { opacity: 0.45; cursor: default; }',
|
|
415
|
+
// popup 变更文件名按钮(打开 Git 中心 diff):基础主文本色 + hover 主色 + 按压缩放反馈。
|
|
416
|
+
// 基础色也走样式表(内联 color 会压掉 :hover 规则)。
|
|
417
|
+
'.dsh-git-ui__change-link { color: var(--dsw-alias-label-primary); transition: transform var(--ds-transition-duration-fast) ease-out, color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
418
|
+
'.dsh-git-ui__change-link:hover { color: var(--dsw-alias-state-business-primary); }',
|
|
419
|
+
'.dsh-git-ui__change-link:active { transform: scale(0.97); }',
|
|
420
|
+
'.dsh-git-ui__diff-fold { transition: transform var(--ds-transition-duration-fast) ease-out, background var(--ds-transition-duration-fast) var(--ds-ease-in-out), color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
421
|
+
// 底栏主操作过渡(按压缩放 + hover 淡底)。
|
|
422
|
+
'.dsh-git-ui__footer-primary { transition: transform var(--ds-transition-duration-fast) ease-out, background var(--ds-transition-duration-fast) var(--ds-ease-in-out), border-color var(--ds-transition-duration-fast) var(--ds-ease-in-out); }',
|
|
423
|
+
|
|
424
|
+
// ── 按压态(:active,触屏与指针均触发,不闸控)────────────────────────
|
|
425
|
+
// 仅叶子按钮缩放;.dsh-git-ui__row 是含 checkbox/按钮的容器行,:active 会向
|
|
426
|
+
// 祖先传播——按压其子按钮会令整行缩放(非预期),故行级仅用底色反馈(见下条)。
|
|
427
|
+
'.dsh-git-ui__pill:active, .dsh-git-ui__icon-btn:active, .dsh-git-ui__tab:active, .dsh-git-ui__refresh:active, .dsh-git-ui__toolbar-select:active, .dsh-git-ui__diff-fold:active, .dsh-git-ui__commit-row:active, .dsh-git-ui__footer-primary:active { transform: scale(0.97); }',
|
|
428
|
+
'.dsh-git-ui__commit-row:active, .dsh-git-ui__row:active { background: var(--dsw-alias-interactive-bg-active); }',
|
|
429
|
+
'.dsh-git-ui__icon-btn:active { background: var(--dsw-alias-interactive-bg-active); }',
|
|
430
|
+
|
|
431
|
+
// ── 键盘焦点(始终可见,不闸控)──────────────────────────────────────
|
|
432
|
+
'.dsh-git-ui__pill:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
433
|
+
'.dsh-git-ui__row:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
434
|
+
'.dsh-git-ui__commit-row:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
217
435
|
'.dsh-git-ui__refresh:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }',
|
|
218
|
-
// Git center dialog: widen the platform Modal card (headless mode).
|
|
219
|
-
'.dsh-git-ui__center { width: min(880px, 100vw); max-height: min(720px, calc(100vh - 48px)); }',
|
|
220
436
|
'.dsh-git-ui__commit-input:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
437
|
+
'.dsh-git-ui__branch-input:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
438
|
+
'.dsh-git-ui__tab:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; border-radius: 4px; }',
|
|
439
|
+
'.dsh-git-ui__toolbar-select:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
440
|
+
'.dsh-git-ui__icon-btn:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
441
|
+
'.dsh-git-ui__diff-fold:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
442
|
+
'.dsh-git-ui__footer-primary:focus-visible { outline: 2px solid var(--dsw-alias-state-business-primary); outline-offset: -2px; }',
|
|
443
|
+
|
|
444
|
+
// Git center dialog: widen the platform Modal card (headless mode).
|
|
445
|
+
'.dsh-git-ui__center { width: min(1200px, 100vw); height: min(760px, calc(100vh - 48px)); }',
|
|
446
|
+
|
|
447
|
+
// ── 悬停态(仅指针设备,触屏 tap 不误激活——emil/apple 闸控规则)──────
|
|
448
|
+
'@media (hover: hover) and (pointer: fine) {',
|
|
449
|
+
' .dsh-git-ui__pill:hover { background: var(--dsw-alias-interactive-bg-hover); }',
|
|
450
|
+
' .dsh-git-ui__row:hover { background: var(--dsw-alias-interactive-bg-hover); }',
|
|
451
|
+
' .dsh-git-ui__commit-row:hover { background: var(--dsw-alias-interactive-bg-hover); }',
|
|
452
|
+
' .dsh-git-ui__splitter:hover { background: var(--dsw-alias-interactive-bg-hover); }',
|
|
453
|
+
' .dsh-git-ui__refresh:hover { color: var(--dsw-alias-state-business-primary); }',
|
|
454
|
+
' .dsh-git-ui__branch-input:hover, .dsh-git-ui__commit-input:hover { border-color: var(--dsw-alias-border-l1); }',
|
|
455
|
+
' .dsh-git-ui__tab:hover { color: var(--dsw-alias-label-primary); }',
|
|
456
|
+
' .dsh-git-ui__toolbar-select:hover { background: var(--dsw-alias-interactive-bg-hover); border-color: var(--dsw-alias-border-l1); }',
|
|
457
|
+
' .dsh-git-ui__icon-btn:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }',
|
|
458
|
+
' .dsh-git-ui__diff-fold:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-secondary); }',
|
|
459
|
+
' .dsh-git-ui__footer-primary:hover { background: var(--dsw-alias-interactive-bg-hover); }',
|
|
460
|
+
' .dsh-git-ui__row:hover .dsh-git-ui__row-actions { opacity: 1; }',
|
|
461
|
+
'}',
|
|
462
|
+
|
|
463
|
+
// 触屏(无 hover)回退:行尾操作常驻显现,弥补 hover 闸控后触屏不可见的缺口。
|
|
464
|
+
'@media (hover: none) { .dsh-git-ui__row-actions { opacity: 1; } }',
|
|
465
|
+
|
|
466
|
+
// ── 减弱动效(保留辅助理解的透明度/颜色过渡,移除位移与缩放——apple 规则)──
|
|
467
|
+
'@media (prefers-reduced-motion: reduce) {',
|
|
468
|
+
' .dsh-git-ui__pill, .dsh-git-ui__pop, .dsh-git-ui__select-menu, .dsh-git-ui__icon-btn, .dsh-git-ui__tab, .dsh-git-ui__commit-row, .dsh-git-ui__row, .dsh-git-ui__branch-input, .dsh-git-ui__commit-input, .dsh-git-ui__toolbar-select, .dsh-git-ui__diff-fold, .dsh-git-ui__refresh, .dsh-git-ui__footer-primary, .dsh-git-ui__change-link { transition: opacity 200ms ease, background 200ms ease, color 200ms ease, border-color 200ms ease !important; transform: none !important; }',
|
|
469
|
+
'}',
|
|
221
470
|
].join('\n')
|
|
222
471
|
|
|
223
472
|
/** Ensure the global interaction styles exist (idempotent; browser only). */
|
|
@@ -237,8 +486,6 @@ export const centerShell: CSSProperties = {
|
|
|
237
486
|
display: 'flex',
|
|
238
487
|
flexDirection: 'column',
|
|
239
488
|
height: '100%',
|
|
240
|
-
maxHeight: 'min(720px, calc(100vh - 48px))',
|
|
241
|
-
minHeight: 420,
|
|
242
489
|
fontSize: 13,
|
|
243
490
|
lineHeight: '20px',
|
|
244
491
|
color: 'var(--dsw-alias-label-primary)',
|
|
@@ -248,16 +495,16 @@ export const centerHeader: CSSProperties = {
|
|
|
248
495
|
display: 'flex',
|
|
249
496
|
alignItems: 'center',
|
|
250
497
|
gap: 10,
|
|
251
|
-
padding: '
|
|
252
|
-
borderBottom: '1px solid var(--dsw-alias-border-
|
|
498
|
+
padding: '16px 20px 12px',
|
|
499
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
253
500
|
flex: 'none',
|
|
254
501
|
}
|
|
255
502
|
|
|
256
503
|
export const centerTitle: CSSProperties = {
|
|
257
504
|
margin: 0,
|
|
258
|
-
fontSize:
|
|
259
|
-
lineHeight: '
|
|
260
|
-
fontWeight:
|
|
505
|
+
fontSize: 15,
|
|
506
|
+
lineHeight: '22px',
|
|
507
|
+
fontWeight: 600,
|
|
261
508
|
flex: 1,
|
|
262
509
|
overflow: 'hidden',
|
|
263
510
|
textOverflow: 'ellipsis',
|
|
@@ -268,42 +515,138 @@ export const centerTitle: CSSProperties = {
|
|
|
268
515
|
export const centerBody: CSSProperties = {
|
|
269
516
|
flex: 1,
|
|
270
517
|
overflowY: 'auto',
|
|
271
|
-
padding: '
|
|
518
|
+
padding: '12px 20px',
|
|
272
519
|
display: 'flex',
|
|
273
520
|
flexDirection: 'column',
|
|
274
521
|
gap: 10,
|
|
275
522
|
}
|
|
276
523
|
|
|
277
|
-
export const groupTitle: CSSProperties = {
|
|
278
|
-
margin: '8px 0 4px',
|
|
279
|
-
fontSize: 11,
|
|
280
|
-
fontWeight: 600,
|
|
281
|
-
color: 'var(--dsw-alias-label-secondary)',
|
|
282
|
-
textTransform: 'uppercase',
|
|
283
|
-
letterSpacing: 0.4,
|
|
284
|
-
}
|
|
285
|
-
|
|
286
524
|
export const centerRow: CSSProperties = {
|
|
287
525
|
display: 'flex',
|
|
288
526
|
alignItems: 'center',
|
|
289
|
-
gap:
|
|
290
|
-
|
|
291
|
-
|
|
527
|
+
gap: 6,
|
|
528
|
+
height: 28,
|
|
529
|
+
flexShrink: 0,
|
|
530
|
+
padding: '0 8px',
|
|
531
|
+
borderRadius: 6,
|
|
292
532
|
}
|
|
293
533
|
|
|
294
|
-
|
|
534
|
+
/** 差异对照激活行:淡底标识当前查看的文件(IDEA 选中行语义)。 */
|
|
535
|
+
export const centerRowActive: CSSProperties = {
|
|
536
|
+
background: 'var(--dsw-alias-interactive-bg-hover)',
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/** 行尾操作槽:定宽右对齐(常驻占位,图标显隐由全局 CSS 控制,杜绝悬停布局跳动)。 */
|
|
540
|
+
export const rowActions: CSSProperties = {
|
|
541
|
+
display: 'inline-flex',
|
|
542
|
+
alignItems: 'center',
|
|
543
|
+
justifyContent: 'flex-end',
|
|
544
|
+
gap: 2,
|
|
295
545
|
flex: 'none',
|
|
296
|
-
|
|
546
|
+
width: 78,
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/** 行操作图标按钮(24px 方形、透明底;交互态见全局 CSS)。 */
|
|
550
|
+
export const rowIconButton: CSSProperties = {
|
|
551
|
+
display: 'inline-flex',
|
|
552
|
+
alignItems: 'center',
|
|
553
|
+
justifyContent: 'center',
|
|
554
|
+
flex: 'none',
|
|
555
|
+
width: 24,
|
|
556
|
+
height: 24,
|
|
557
|
+
border: 'none',
|
|
558
|
+
background: 'transparent',
|
|
559
|
+
borderRadius: 6,
|
|
560
|
+
cursor: 'pointer',
|
|
561
|
+
padding: 0,
|
|
562
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
297
563
|
}
|
|
298
564
|
|
|
299
|
-
|
|
565
|
+
/** 文件名前的轻量文件图标槽。 */
|
|
566
|
+
export const rowFileIcon: CSSProperties = {
|
|
567
|
+
flex: 'none',
|
|
568
|
+
display: 'inline-flex',
|
|
569
|
+
alignItems: 'center',
|
|
570
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* 文件名按钮(状态着色由行内注入)。
|
|
575
|
+
* flex:'0 1 auto' + minWidth:0 + 封顶 65%:按需收缩、可省略;目录优先省略、
|
|
576
|
+
* 文件名尽量完整(旧 maxWidth:55% 相对整行宽,短名也过度占位、挤压目录)。
|
|
577
|
+
*/
|
|
578
|
+
export const changeName: CSSProperties = {
|
|
579
|
+
border: 'none',
|
|
580
|
+
background: 'transparent',
|
|
581
|
+
cursor: 'pointer',
|
|
582
|
+
padding: 0,
|
|
583
|
+
fontFamily: 'inherit',
|
|
584
|
+
fontSize: 13,
|
|
585
|
+
lineHeight: '20px',
|
|
586
|
+
textAlign: 'left',
|
|
587
|
+
flex: '0 1 auto',
|
|
588
|
+
minWidth: 0,
|
|
589
|
+
maxWidth: '65%',
|
|
300
590
|
overflow: 'hidden',
|
|
301
591
|
textOverflow: 'ellipsis',
|
|
302
592
|
whiteSpace: 'nowrap',
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/** 行尾状态字母:无底色,IDEA 式单色字符。 */
|
|
596
|
+
export const statusLetter: CSSProperties = {
|
|
597
|
+
flex: 'none',
|
|
598
|
+
width: 14,
|
|
599
|
+
textAlign: 'center',
|
|
600
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
601
|
+
fontSize: 11,
|
|
602
|
+
fontWeight: 600,
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
/** IDEA 式分组头:粘性吸顶,全选复选 + 折叠箭头 + 名称 + 计数。
|
|
606
|
+
* 发丝级底部分隔(l2)让吸顶头与滚动内容轻轻分离,不产生重边框。 */
|
|
607
|
+
export const groupHeader: CSSProperties = {
|
|
608
|
+
position: 'sticky',
|
|
609
|
+
top: 0,
|
|
610
|
+
zIndex: 1,
|
|
611
|
+
display: 'flex',
|
|
612
|
+
alignItems: 'center',
|
|
613
|
+
gap: 6,
|
|
614
|
+
height: 30,
|
|
615
|
+
flexShrink: 0,
|
|
616
|
+
padding: '0 8px',
|
|
617
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
618
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/** 分组头折叠按钮(箭头 + 名称 + 计数一体可点)。 */
|
|
622
|
+
export const groupHeaderToggle: CSSProperties = {
|
|
623
|
+
display: 'flex',
|
|
624
|
+
alignItems: 'center',
|
|
625
|
+
gap: 6,
|
|
303
626
|
flex: 1,
|
|
304
|
-
|
|
305
|
-
|
|
627
|
+
minWidth: 0,
|
|
628
|
+
border: 'none',
|
|
629
|
+
background: 'transparent',
|
|
630
|
+
cursor: 'pointer',
|
|
631
|
+
padding: 0,
|
|
632
|
+
fontFamily: 'inherit',
|
|
633
|
+
fontSize: 12,
|
|
306
634
|
lineHeight: '20px',
|
|
635
|
+
fontWeight: 600,
|
|
636
|
+
textAlign: 'left',
|
|
637
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/** 分组头计数(弱化)。 */
|
|
641
|
+
export const groupHeaderCount: CSSProperties = {
|
|
642
|
+
fontWeight: 400,
|
|
643
|
+
fontSize: 11,
|
|
644
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
export const changeCheckbox: CSSProperties = {
|
|
648
|
+
flex: 'none',
|
|
649
|
+
accentColor: 'var(--dsw-alias-state-business-primary)',
|
|
307
650
|
}
|
|
308
651
|
|
|
309
652
|
export const toolRow: CSSProperties = {
|
|
@@ -315,12 +658,13 @@ export const toolRow: CSSProperties = {
|
|
|
315
658
|
}
|
|
316
659
|
|
|
317
660
|
export const commitBox: CSSProperties = {
|
|
318
|
-
borderTop: '1px solid var(--dsw-alias-border-
|
|
661
|
+
borderTop: '1px solid var(--dsw-alias-border-l2)',
|
|
319
662
|
padding: '12px 20px 16px',
|
|
320
663
|
display: 'flex',
|
|
321
664
|
flexDirection: 'column',
|
|
322
665
|
gap: 8,
|
|
323
666
|
flex: 'none',
|
|
667
|
+
marginTop: 'auto',
|
|
324
668
|
background: 'var(--dsw-alias-bg-layer-1)',
|
|
325
669
|
}
|
|
326
670
|
|
|
@@ -329,11 +673,11 @@ export const commitInput: CSSProperties = {
|
|
|
329
673
|
boxSizing: 'border-box',
|
|
330
674
|
minHeight: 64,
|
|
331
675
|
resize: 'vertical',
|
|
332
|
-
border: '1px solid var(--dsw-alias-border-
|
|
676
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
333
677
|
borderRadius: 8,
|
|
334
678
|
padding: '6px 10px',
|
|
335
|
-
fontSize:
|
|
336
|
-
lineHeight: '
|
|
679
|
+
fontSize: 13,
|
|
680
|
+
lineHeight: '20px',
|
|
337
681
|
fontFamily: 'inherit',
|
|
338
682
|
background: 'var(--dsw-alias-bg-layer-2)',
|
|
339
683
|
color: 'var(--dsw-alias-label-primary)',
|
|
@@ -361,22 +705,967 @@ export const feedbackError: CSSProperties = {
|
|
|
361
705
|
borderRadius: 8,
|
|
362
706
|
fontSize: 12,
|
|
363
707
|
lineHeight: '18px',
|
|
364
|
-
|
|
365
|
-
|
|
708
|
+
// 淡晕背景 + 高对比文字(与 sbsDel/chip 同一配色语言);
|
|
709
|
+
// 旧用 state-error-secondary 饱和填充 + error-primary 同色系文字,
|
|
710
|
+
// 对比度极低、文字几乎不可读。
|
|
711
|
+
background: 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent)',
|
|
712
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
713
|
+
borderLeft: '3px solid var(--dsw-alias-state-error-primary)',
|
|
366
714
|
whiteSpace: 'pre-wrap',
|
|
367
715
|
wordBreak: 'break-word',
|
|
368
716
|
maxHeight: 120,
|
|
369
717
|
overflowY: 'auto',
|
|
370
718
|
}
|
|
371
719
|
|
|
372
|
-
|
|
720
|
+
/** popup 告警横幅(emil §cohesion:告警而非 panic):
|
|
721
|
+
* 淡晕背景 + 高对比文字 + 左侧红色语义条 + 图标引导。
|
|
722
|
+
* 与 popup 同一圆角/间距体系,不是「错误弹窗」是「内嵌告警」。 */
|
|
723
|
+
export const popupNote: CSSProperties = {
|
|
724
|
+
display: 'flex',
|
|
725
|
+
alignItems: 'flex-start',
|
|
726
|
+
gap: 8,
|
|
727
|
+
margin: '8px 12px 0',
|
|
728
|
+
padding: '8px 10px',
|
|
729
|
+
borderRadius: 8,
|
|
730
|
+
fontSize: 12,
|
|
731
|
+
lineHeight: '18px',
|
|
732
|
+
background: 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent)',
|
|
733
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
734
|
+
borderLeft: '3px solid var(--dsw-alias-state-error-primary)',
|
|
735
|
+
wordBreak: 'break-word',
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
/** 告警图标槽:error-primary 色,与左侧条同色呼应。 */
|
|
739
|
+
export const popupNoteIcon: CSSProperties = {
|
|
373
740
|
flex: 'none',
|
|
374
|
-
|
|
741
|
+
display: 'inline-flex',
|
|
742
|
+
alignItems: 'center',
|
|
743
|
+
color: 'var(--dsw-alias-state-error-primary)',
|
|
744
|
+
marginTop: 1,
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
/** 告警文案段:flex 收缩 + 省略兜底。 */
|
|
748
|
+
export const popupNoteText: CSSProperties = {
|
|
749
|
+
flex: 1,
|
|
750
|
+
minWidth: 0,
|
|
751
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/** 告警行动按钮:error-primary 文字 + 无框(非 primary Button,内联轻量)。 */
|
|
755
|
+
export const popupNoteAction: CSSProperties = {
|
|
756
|
+
flex: 'none',
|
|
757
|
+
border: 'none',
|
|
375
758
|
background: 'transparent',
|
|
376
|
-
padding: '
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
fontSize: 13,
|
|
759
|
+
padding: '2px 6px',
|
|
760
|
+
font: 'inherit',
|
|
761
|
+
fontSize: 12,
|
|
380
762
|
lineHeight: '18px',
|
|
381
|
-
|
|
763
|
+
cursor: 'pointer',
|
|
764
|
+
color: 'var(--dsw-alias-state-error-primary)',
|
|
765
|
+
whiteSpace: 'nowrap',
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/** 告警关闭按钮:弱化,不影响告警内容阅读。 */
|
|
769
|
+
export const popupNoteClose: CSSProperties = {
|
|
770
|
+
flex: 'none',
|
|
771
|
+
display: 'inline-flex',
|
|
772
|
+
alignItems: 'center',
|
|
773
|
+
justifyContent: 'center',
|
|
774
|
+
width: 20,
|
|
775
|
+
height: 20,
|
|
776
|
+
border: 'none',
|
|
777
|
+
background: 'transparent',
|
|
778
|
+
padding: 0,
|
|
779
|
+
cursor: 'pointer',
|
|
780
|
+
font: 'inherit',
|
|
781
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
782
|
+
opacity: 0.7,
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
export const feedbackClose: CSSProperties = {
|
|
786
|
+
flex: 'none',
|
|
787
|
+
border: 0,
|
|
788
|
+
background: 'transparent',
|
|
789
|
+
padding: '0 2px',
|
|
790
|
+
cursor: 'pointer',
|
|
791
|
+
color: 'inherit',
|
|
792
|
+
fontSize: 13,
|
|
793
|
+
lineHeight: '18px',
|
|
794
|
+
opacity: 0.7,
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
// ── Changes 双栏布局(IDEA 式:左列表 + 右对照)─────────────────────
|
|
798
|
+
|
|
799
|
+
export const changesLayout: CSSProperties = {
|
|
800
|
+
display: 'flex',
|
|
801
|
+
gap: 12,
|
|
802
|
+
flex: 1,
|
|
803
|
+
minHeight: 0,
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
export const changesLeft: CSSProperties = {
|
|
807
|
+
flex: 'none',
|
|
808
|
+
minWidth: 0,
|
|
809
|
+
display: 'flex',
|
|
810
|
+
flexDirection: 'column',
|
|
811
|
+
minHeight: 0,
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
export const changesList: CSSProperties = {
|
|
815
|
+
flex: 1,
|
|
816
|
+
minHeight: 0,
|
|
817
|
+
overflowY: 'auto',
|
|
818
|
+
display: 'flex',
|
|
819
|
+
flexDirection: 'column',
|
|
820
|
+
gap: 0,
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
export const changesRight: CSSProperties = {
|
|
824
|
+
flex: 1,
|
|
825
|
+
minWidth: 0,
|
|
826
|
+
display: 'flex',
|
|
827
|
+
flexDirection: 'column',
|
|
828
|
+
gap: 6,
|
|
829
|
+
borderLeft: '1px solid var(--dsw-alias-border-l2)',
|
|
830
|
+
paddingLeft: 12,
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
/** 变更行目录部分(弱化显示,与文件名同阶 12px,IDEA 同尺寸弱化)。 */
|
|
834
|
+
export const changeDir: CSSProperties = {
|
|
835
|
+
overflow: 'hidden',
|
|
836
|
+
textOverflow: 'ellipsis',
|
|
837
|
+
whiteSpace: 'nowrap',
|
|
838
|
+
flex: 1,
|
|
839
|
+
minWidth: 0,
|
|
840
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
841
|
+
fontSize: 12,
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
// ── 并排差异对照 ───────────────────────────────────────────────────────
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* 差异并排容器:双列独立横向滚动。
|
|
848
|
+
* display:flex 横排两列;纵向单一滚动(overflow-y:auto)保证左右行同步对齐,
|
|
849
|
+
* 横向不滚动(overflow-x:hidden)——每列各自 overflow-x:auto 独立滚动,
|
|
850
|
+
* 内容只在本列展示,根治长行左右重叠。
|
|
851
|
+
*/
|
|
852
|
+
export const sbsContainer: CSSProperties = {
|
|
853
|
+
flex: 1,
|
|
854
|
+
minHeight: 0,
|
|
855
|
+
display: 'flex',
|
|
856
|
+
overflowY: 'auto',
|
|
857
|
+
overflowX: 'hidden',
|
|
858
|
+
alignItems: 'flex-start',
|
|
859
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
860
|
+
borderRadius: 8,
|
|
861
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
862
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
863
|
+
fontSize: 11,
|
|
864
|
+
lineHeight: '18px',
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
/** 差异列(左/右各一):独立横向滚动,纵向不滚动(由容器统一滚动)。 */
|
|
868
|
+
export const sbsCol: CSSProperties = {
|
|
869
|
+
flex: 1,
|
|
870
|
+
minWidth: 0,
|
|
871
|
+
overflowX: 'auto',
|
|
872
|
+
overflowY: 'hidden',
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/** 右列:左侧发丝分隔线(取代旧 sbsCellRight 的单元格边框)。 */
|
|
876
|
+
export const sbsColRight: CSSProperties = {
|
|
877
|
+
borderLeft: '1px solid var(--dsw-alias-border-l2)',
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
/**
|
|
881
|
+
* 列内容包装:width:max-content 使长行撑宽触发本列横向滚动;
|
|
882
|
+
* min-width:100% 使短行背景填满列宽。两列独立,互不重叠。
|
|
883
|
+
*/
|
|
884
|
+
export const sbsColInner: CSSProperties = {
|
|
885
|
+
minWidth: '100%',
|
|
886
|
+
width: 'max-content',
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/** 差异行单元格:填满列内宽(width:100%),背景覆盖整行——根治滑动后同行后半段无配色。 */
|
|
890
|
+
export const sbsCell: CSSProperties = {
|
|
891
|
+
boxSizing: 'border-box',
|
|
892
|
+
display: 'flex',
|
|
893
|
+
gap: 6,
|
|
894
|
+
padding: '0 8px',
|
|
895
|
+
whiteSpace: 'pre',
|
|
896
|
+
width: '100%',
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
/** 代码文本段:pre 不换行、flex:none 不收缩(保持原始列宽,不被压缩)。 */
|
|
900
|
+
export const sbsCode: CSSProperties = {
|
|
901
|
+
whiteSpace: 'pre',
|
|
902
|
+
flex: 'none',
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
/** 行号槽:定宽右对齐 + 右侧发丝线,数字与代码间留 8px 呼吸。 */
|
|
906
|
+
export const sbsNum: CSSProperties = {
|
|
907
|
+
flex: 'none',
|
|
908
|
+
width: 36,
|
|
909
|
+
textAlign: 'right',
|
|
910
|
+
paddingRight: 8,
|
|
911
|
+
marginRight: 2,
|
|
912
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
913
|
+
userSelect: 'none',
|
|
914
|
+
borderRight: '1px solid var(--dsw-alias-border-l2)',
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/**
|
|
918
|
+
* 差异行配色(IDEA 式:低饱和淡晕背景 + 始终可读的文字)。
|
|
919
|
+
* 旧实现用 state-*-secondary 饱和填充作背景、state-*-primary 作文字色,
|
|
920
|
+
* 同色系背景覆盖同色系文字,明暗主题下均低对比且与页面风格冲突。
|
|
921
|
+
* 现以 color-mix 由语义令牌派生 ~12% 淡晕(主题自适应;旧引擎降级为透明,
|
|
922
|
+
* 文字仍可读),文字统一 label-primary。
|
|
923
|
+
*/
|
|
924
|
+
export const sbsDel: CSSProperties = {
|
|
925
|
+
background: 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)',
|
|
926
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
export const sbsAdd: CSSProperties = {
|
|
930
|
+
background: 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)',
|
|
931
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
export const sbsEmpty: CSSProperties = {
|
|
935
|
+
background: 'var(--dsw-alias-bg-layer-1)',
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
// ── 差异工具栏(IDEA 式:基线徽标 + 路径 + 前后导航 + 关闭)──────────────
|
|
939
|
+
|
|
940
|
+
/** 差异面板工具栏。 */
|
|
941
|
+
export const diffToolbar: CSSProperties = {
|
|
942
|
+
display: 'flex',
|
|
943
|
+
alignItems: 'center',
|
|
944
|
+
gap: 6,
|
|
945
|
+
flex: 'none',
|
|
946
|
+
height: 32,
|
|
947
|
+
padding: '0 2px',
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
/** 差异基线徽标(暂存区 / 工作区):pill 同族的发丝描边小胶囊。 */
|
|
951
|
+
export const diffBaseBadge: CSSProperties = {
|
|
952
|
+
flex: 'none',
|
|
953
|
+
padding: '2px 8px',
|
|
954
|
+
borderRadius: 10,
|
|
955
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
956
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
957
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
958
|
+
fontSize: 11,
|
|
959
|
+
lineHeight: '14px',
|
|
960
|
+
fontWeight: 500,
|
|
961
|
+
whiteSpace: 'nowrap',
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
/** 差异路径目录段(弱化、flex:1 优先省略,文件名尽量完整)。 */
|
|
965
|
+
export const diffPathDir: CSSProperties = {
|
|
966
|
+
flex: 1,
|
|
967
|
+
minWidth: 0,
|
|
968
|
+
overflow: 'hidden',
|
|
969
|
+
textOverflow: 'ellipsis',
|
|
970
|
+
whiteSpace: 'nowrap',
|
|
971
|
+
fontSize: 12,
|
|
972
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
/** 差异路径文件名段(强调)。 */
|
|
976
|
+
export const diffPathName: CSSProperties = {
|
|
977
|
+
flex: 'none',
|
|
978
|
+
fontSize: 12,
|
|
979
|
+
fontWeight: 500,
|
|
980
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
981
|
+
whiteSpace: 'nowrap',
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/** 差异变更摘要芯片(+n −m,等宽)。 */
|
|
985
|
+
export const diffSummary: CSSProperties = {
|
|
986
|
+
flex: 'none',
|
|
987
|
+
display: 'inline-flex',
|
|
988
|
+
gap: 8,
|
|
989
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
990
|
+
fontSize: 11,
|
|
991
|
+
fontWeight: 600,
|
|
992
|
+
lineHeight: '16px',
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
export const diffSummaryAdd: CSSProperties = {
|
|
996
|
+
color: 'var(--dsw-alias-state-success-primary)',
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
export const diffSummaryDel: CSSProperties = {
|
|
1000
|
+
color: 'var(--dsw-alias-state-error-primary)',
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
/** 折叠条:可点击展开的「… N 行未变更」横条(发丝实线上下缘,层 1 淡底)。 */
|
|
1004
|
+
export const diffFold: CSSProperties = {
|
|
1005
|
+
display: 'block',
|
|
1006
|
+
width: '100%',
|
|
1007
|
+
border: 'none',
|
|
1008
|
+
borderTop: '1px solid var(--dsw-alias-border-l2)',
|
|
1009
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
1010
|
+
background: 'var(--dsw-alias-bg-layer-1)',
|
|
1011
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1012
|
+
fontSize: 11,
|
|
1013
|
+
lineHeight: '20px',
|
|
1014
|
+
padding: '2px 8px',
|
|
1015
|
+
cursor: 'pointer',
|
|
1016
|
+
fontFamily: 'inherit',
|
|
1017
|
+
textAlign: 'center',
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
/** 提交区快捷键提示(等宽弱化)。 */
|
|
1021
|
+
export const commitKbd: CSSProperties = {
|
|
1022
|
+
flex: 'none',
|
|
1023
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
1024
|
+
fontSize: 11,
|
|
1025
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
// ── Git center tabs (system tab spec: 13/16/500, 2px indicator) ───────────
|
|
1029
|
+
|
|
1030
|
+
export const tabs: CSSProperties = {
|
|
1031
|
+
display: 'flex',
|
|
1032
|
+
gap: 24,
|
|
1033
|
+
padding: '0 20px',
|
|
1034
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
1035
|
+
flex: 'none',
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
export const tab: CSSProperties = {
|
|
1039
|
+
position: 'relative',
|
|
1040
|
+
padding: '0 0 11px',
|
|
1041
|
+
border: 'none',
|
|
1042
|
+
background: 'transparent',
|
|
1043
|
+
fontSize: 13,
|
|
1044
|
+
lineHeight: '16px',
|
|
1045
|
+
fontWeight: 500,
|
|
1046
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1047
|
+
cursor: 'pointer',
|
|
1048
|
+
fontFamily: 'inherit',
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
/** Active-tab underline rides a pseudo-element (see global CSS). */
|
|
1052
|
+
export const tabActive: CSSProperties = {
|
|
1053
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
// ── History tab ───────────────────────────────────────────────────────────
|
|
1057
|
+
|
|
1058
|
+
/**
|
|
1059
|
+
* 历史行高:单一事实来源。行样式与分支图 SVG 共用该常量,
|
|
1060
|
+
* 保证条带占满整行、竖线在行间连续衔接(旧实现 36px 条带 vs 50px 行高导致虚线)。
|
|
1061
|
+
*/
|
|
1062
|
+
export const HISTORY_ROW_H = 32
|
|
1063
|
+
|
|
1064
|
+
export const historyLayout: CSSProperties = {
|
|
1065
|
+
display: 'flex',
|
|
1066
|
+
gap: 0,
|
|
1067
|
+
flex: 1,
|
|
1068
|
+
minHeight: 0,
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
/** 左栏滚动区(外壳 paneSide 提供宽/底/边线)。 */
|
|
1072
|
+
export const historyTree: CSSProperties = {
|
|
1073
|
+
flex: 1,
|
|
1074
|
+
minHeight: 0,
|
|
1075
|
+
overflowY: 'auto',
|
|
1076
|
+
display: 'flex',
|
|
1077
|
+
flexDirection: 'column',
|
|
1078
|
+
gap: 1,
|
|
1079
|
+
padding: 6,
|
|
1080
|
+
fontSize: 12,
|
|
1081
|
+
lineHeight: '20px',
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
export const treeGroupTitle: CSSProperties = {
|
|
1085
|
+
margin: '8px 0 2px',
|
|
1086
|
+
padding: '0 8px',
|
|
1087
|
+
fontSize: 11,
|
|
1088
|
+
fontWeight: 600,
|
|
1089
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
/** 可折叠分组头(箭头 + 标题)。 */
|
|
1093
|
+
export const treeSectionHead: CSSProperties = {
|
|
1094
|
+
display: 'flex',
|
|
1095
|
+
alignItems: 'center',
|
|
1096
|
+
gap: 4,
|
|
1097
|
+
margin: '8px 0 2px',
|
|
1098
|
+
padding: '2px 8px',
|
|
1099
|
+
border: 'none',
|
|
1100
|
+
background: 'transparent',
|
|
1101
|
+
borderRadius: 6,
|
|
1102
|
+
cursor: 'pointer',
|
|
1103
|
+
fontFamily: 'inherit',
|
|
1104
|
+
fontSize: 11,
|
|
1105
|
+
fontWeight: 600,
|
|
1106
|
+
lineHeight: '16px',
|
|
1107
|
+
textAlign: 'left',
|
|
1108
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
export const treeRow: CSSProperties = {
|
|
1112
|
+
display: 'flex',
|
|
1113
|
+
alignItems: 'center',
|
|
1114
|
+
gap: 6,
|
|
1115
|
+
width: '100%',
|
|
1116
|
+
padding: '4px 8px',
|
|
1117
|
+
border: 'none',
|
|
1118
|
+
background: 'transparent',
|
|
1119
|
+
borderRadius: 6,
|
|
1120
|
+
cursor: 'pointer',
|
|
1121
|
+
fontFamily: 'inherit',
|
|
1122
|
+
fontSize: 12,
|
|
1123
|
+
lineHeight: '20px',
|
|
1124
|
+
textAlign: 'left',
|
|
1125
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
export const treeRowActive: CSSProperties = {
|
|
1129
|
+
background: 'var(--dsw-alias-interactive-bg-active)',
|
|
1130
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
export const treeIcon: CSSProperties = {
|
|
1134
|
+
flex: 'none',
|
|
1135
|
+
width: 14,
|
|
1136
|
+
display: 'inline-flex',
|
|
1137
|
+
alignItems: 'center',
|
|
1138
|
+
justifyContent: 'center',
|
|
1139
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1142
|
+
/** 文件树折叠箭头槽(与叶子行隐藏占位对齐)。 */
|
|
1143
|
+
export const treeCaret: CSSProperties = {
|
|
1144
|
+
flex: 'none',
|
|
1145
|
+
width: 10,
|
|
1146
|
+
display: 'inline-flex',
|
|
1147
|
+
alignItems: 'center',
|
|
1148
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/** 文件树图标槽。 */
|
|
1152
|
+
export const treeFolderIcon: CSSProperties = {
|
|
1153
|
+
flex: 'none',
|
|
1154
|
+
display: 'inline-flex',
|
|
1155
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
/** 右栏文件名按变更状态着色(IDEA 式:增绿/改蓝/删红/重命名蓝)。 */
|
|
1159
|
+
export const statusTextColor: Record<string, string> = {
|
|
1160
|
+
added: 'var(--dsw-alias-state-success-primary)',
|
|
1161
|
+
untracked: 'var(--dsw-alias-state-success-primary)',
|
|
1162
|
+
modified: 'var(--dsw-alias-state-business-primary)',
|
|
1163
|
+
renamed: 'var(--dsw-alias-state-business-primary)',
|
|
1164
|
+
deleted: 'var(--dsw-alias-state-error-primary)',
|
|
1165
|
+
conflicted: 'var(--dsw-alias-state-error-primary)',
|
|
1166
|
+
typechange: 'var(--dsw-alias-state-warn-primary)',
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
/** 嵌套层引导线(IDEA 式目录树竖线):发丝级 l2,暗态下不喧宾夺主。 */
|
|
1170
|
+
export const treeChildren: CSSProperties = {
|
|
1171
|
+
marginLeft: 12,
|
|
1172
|
+
borderLeft: '1px solid var(--dsw-alias-border-l2)',
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
export const treeName: CSSProperties = {
|
|
1176
|
+
overflow: 'hidden',
|
|
1177
|
+
textOverflow: 'ellipsis',
|
|
1178
|
+
whiteSpace: 'nowrap',
|
|
1179
|
+
flex: 1,
|
|
1180
|
+
minWidth: 0,
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
export const treeNameCurrent: CSSProperties = {
|
|
1184
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
1185
|
+
fontWeight: 600,
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
/** 分支与远程同步差异徽标(↑n ↓m),弱化等宽小字。 */
|
|
1189
|
+
export const treeSyncBadge: CSSProperties = {
|
|
1190
|
+
flex: 'none',
|
|
1191
|
+
fontSize: 10,
|
|
1192
|
+
lineHeight: '14px',
|
|
1193
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1194
|
+
fontVariantNumeric: 'tabular-nums',
|
|
1195
|
+
whiteSpace: 'nowrap',
|
|
1196
|
+
}
|
|
1197
|
+
|
|
1198
|
+
/** 过滤树头部 fetch 按钮(与搜索框同栏)。 */
|
|
1199
|
+
export const treeFetchBtn: CSSProperties = {
|
|
1200
|
+
flex: 'none',
|
|
1201
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
1202
|
+
borderRadius: 8,
|
|
1203
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1204
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
1205
|
+
fontSize: 11,
|
|
1206
|
+
lineHeight: '14px',
|
|
1207
|
+
padding: '4px 8px',
|
|
1208
|
+
cursor: 'pointer',
|
|
1209
|
+
font: 'inherit',
|
|
1210
|
+
whiteSpace: 'nowrap',
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
/** fetch 结果提示(成功弱化色 / 失败可见文本)。 */
|
|
1214
|
+
export const treeFetchNote: CSSProperties = {
|
|
1215
|
+
flex: 'none',
|
|
1216
|
+
fontSize: 11,
|
|
1217
|
+
lineHeight: '16px',
|
|
1218
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1219
|
+
padding: '4px 12px',
|
|
1220
|
+
overflow: 'hidden',
|
|
1221
|
+
textOverflow: 'ellipsis',
|
|
1222
|
+
whiteSpace: 'nowrap',
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
/** 中栏顶部工具栏:与左右 paneHead 同高同边线,组成统一头带。 */
|
|
1226
|
+
export const historyToolbar: CSSProperties = {
|
|
1227
|
+
display: 'flex',
|
|
1228
|
+
alignItems: 'center',
|
|
1229
|
+
gap: 6,
|
|
1230
|
+
flex: 'none',
|
|
1231
|
+
height: 40,
|
|
1232
|
+
padding: '0 8px',
|
|
1233
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
export const toolbarSearch: CSSProperties = {
|
|
1237
|
+
flex: 1,
|
|
1238
|
+
minWidth: 80,
|
|
1239
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
1240
|
+
borderRadius: 8,
|
|
1241
|
+
padding: '4px 10px',
|
|
1242
|
+
fontSize: 12,
|
|
1243
|
+
lineHeight: '18px',
|
|
1244
|
+
fontFamily: 'inherit',
|
|
1245
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1246
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
export const toolbarSelect: CSSProperties = {
|
|
1250
|
+
flex: 'none',
|
|
1251
|
+
maxWidth: 150,
|
|
1252
|
+
display: 'inline-flex',
|
|
1253
|
+
alignItems: 'center',
|
|
1254
|
+
gap: 6,
|
|
1255
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
1256
|
+
borderRadius: 8,
|
|
1257
|
+
padding: '4px 8px',
|
|
1258
|
+
fontSize: 12,
|
|
1259
|
+
lineHeight: '18px',
|
|
1260
|
+
fontFamily: 'inherit',
|
|
1261
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1262
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1263
|
+
cursor: 'pointer',
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
export const selectLabel: CSSProperties = {
|
|
1267
|
+
overflow: 'hidden',
|
|
1268
|
+
textOverflow: 'ellipsis',
|
|
1269
|
+
whiteSpace: 'nowrap',
|
|
1270
|
+
flex: 1,
|
|
1271
|
+
minWidth: 0,
|
|
1272
|
+
textAlign: 'left',
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
/** 自绘下拉菜单卡(平台 Menu 规范:layer-3 面 + l1 边 + lv3 阴影)。 */
|
|
1276
|
+
export const selectMenu: CSSProperties = {
|
|
1277
|
+
position: 'fixed',
|
|
1278
|
+
zIndex: 1200,
|
|
1279
|
+
display: 'flex',
|
|
1280
|
+
flexDirection: 'column',
|
|
1281
|
+
gap: 1,
|
|
1282
|
+
padding: 4,
|
|
1283
|
+
maxHeight: 280,
|
|
1284
|
+
overflowY: 'auto',
|
|
1285
|
+
background: 'var(--dsw-alias-bg-layer-3)',
|
|
1286
|
+
border: '1px solid var(--dsw-alias-border-l1)',
|
|
1287
|
+
borderRadius: 12,
|
|
1288
|
+
boxShadow: 'var(--dsw-shadow-lv3)',
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
export const selectOption: CSSProperties = {
|
|
1292
|
+
display: 'flex',
|
|
1293
|
+
alignItems: 'center',
|
|
1294
|
+
gap: 6,
|
|
1295
|
+
padding: '4px 10px',
|
|
1296
|
+
border: 'none',
|
|
1297
|
+
background: 'transparent',
|
|
1298
|
+
borderRadius: 6,
|
|
1299
|
+
cursor: 'pointer',
|
|
1300
|
+
fontFamily: 'inherit',
|
|
1301
|
+
fontSize: 12,
|
|
1302
|
+
lineHeight: '20px',
|
|
1303
|
+
textAlign: 'left',
|
|
1304
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
export const selectOptionActive: CSSProperties = {
|
|
1308
|
+
background: 'var(--dsw-alias-interactive-bg-hover)',
|
|
1309
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
/** 无限滚动底部哨兵区。 */
|
|
1313
|
+
export const loadSentinel: CSSProperties = {
|
|
1314
|
+
flex: 'none',
|
|
1315
|
+
padding: '8px 0',
|
|
1316
|
+
textAlign: 'center',
|
|
1317
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1318
|
+
fontSize: 11,
|
|
1319
|
+
lineHeight: '16px',
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
/** 三pane 统一头带(40px,底边线对齐成带)。 */
|
|
1323
|
+
export const paneHead: CSSProperties = {
|
|
1324
|
+
flex: 'none',
|
|
1325
|
+
display: 'flex',
|
|
1326
|
+
alignItems: 'center',
|
|
1327
|
+
gap: 6,
|
|
1328
|
+
height: 40,
|
|
1329
|
+
padding: '0 8px',
|
|
1330
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
/** 左右侧栏外壳(淡底;分隔线按侧内联)。 */
|
|
1334
|
+
export const paneSide: CSSProperties = {
|
|
1335
|
+
flex: 'none',
|
|
1336
|
+
display: 'flex',
|
|
1337
|
+
flexDirection: 'column',
|
|
1338
|
+
minWidth: 0,
|
|
1339
|
+
background: 'var(--dsw-alias-interactive-bg-hover)',
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
/** 左栏搜索框(分支或标签)。 */
|
|
1343
|
+
export const treeSearch: CSSProperties = {
|
|
1344
|
+
flex: 1,
|
|
1345
|
+
minWidth: 0,
|
|
1346
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
1347
|
+
borderRadius: 8,
|
|
1348
|
+
padding: '3px 8px',
|
|
1349
|
+
fontSize: 12,
|
|
1350
|
+
lineHeight: '18px',
|
|
1351
|
+
fontFamily: 'inherit',
|
|
1352
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1353
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
/** 左栏搜索匹配文字高亮。 */
|
|
1357
|
+
export const treeMatch: CSSProperties = {
|
|
1358
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
1359
|
+
fontWeight: 600,
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
/** 头带小图标按钮(全部展开/收起等)。 */
|
|
1363
|
+
export const paneHeadButton: CSSProperties = {
|
|
1364
|
+
flex: 'none',
|
|
1365
|
+
display: 'inline-flex',
|
|
1366
|
+
alignItems: 'center',
|
|
1367
|
+
justifyContent: 'center',
|
|
1368
|
+
width: 24,
|
|
1369
|
+
height: 24,
|
|
1370
|
+
border: 'none',
|
|
1371
|
+
background: 'transparent',
|
|
1372
|
+
borderRadius: 6,
|
|
1373
|
+
cursor: 'pointer',
|
|
1374
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
/** 拖拽分割条:常驻发丝线(暗态可见)+ 悬停淡底提示可拖。 */
|
|
1378
|
+
export const splitter: CSSProperties = {
|
|
1379
|
+
flex: 'none',
|
|
1380
|
+
width: 5,
|
|
1381
|
+
marginLeft: -3,
|
|
1382
|
+
cursor: 'col-resize',
|
|
1383
|
+
background: 'transparent',
|
|
1384
|
+
borderLeft: '1px solid var(--dsw-alias-border-l2)',
|
|
1385
|
+
zIndex: 1,
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
export const splitterRow: CSSProperties = {
|
|
1389
|
+
flex: 'none',
|
|
1390
|
+
height: 5,
|
|
1391
|
+
marginTop: -3,
|
|
1392
|
+
cursor: 'row-resize',
|
|
1393
|
+
background: 'transparent',
|
|
1394
|
+
borderTop: '1px solid var(--dsw-alias-border-l2)',
|
|
1395
|
+
zIndex: 1,
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
/** 中栏外壳:工具栏固定 + 滚动列表(工具栏不随列表滚动)。 */
|
|
1399
|
+
export const historyColumn: CSSProperties = {
|
|
1400
|
+
display: 'flex',
|
|
1401
|
+
flexDirection: 'column',
|
|
1402
|
+
flex: 1,
|
|
1403
|
+
minHeight: 0,
|
|
1404
|
+
minWidth: 0,
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
export const historyList: CSSProperties = {
|
|
1408
|
+
flex: 1,
|
|
1409
|
+
minHeight: 0,
|
|
1410
|
+
overflowY: 'auto',
|
|
1411
|
+
overflowX: 'auto',
|
|
1412
|
+
display: 'flex',
|
|
1413
|
+
flexDirection: 'column',
|
|
1414
|
+
gap: 0,
|
|
1415
|
+
paddingRight: 8,
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
/** 单行表格行:固定行高,图 + refs + 主题 + 哈希 + 作者 + 时间一行排布。
|
|
1419
|
+
* 列宽由组件内 gridTemplateColumns 注入(与表头共用同一模板)。
|
|
1420
|
+
* 行盒 = max(内容宽, 列表宽):超宽图时撑开列表横向滚动区。 */
|
|
1421
|
+
export const historyRow: CSSProperties = {
|
|
1422
|
+
display: 'grid',
|
|
1423
|
+
alignItems: 'center',
|
|
1424
|
+
alignSelf: 'flex-start',
|
|
1425
|
+
columnGap: 8,
|
|
1426
|
+
minWidth: '100%',
|
|
1427
|
+
width: 'auto',
|
|
1428
|
+
height: HISTORY_ROW_H,
|
|
1429
|
+
flexShrink: 0,
|
|
1430
|
+
padding: 0,
|
|
1431
|
+
border: 'none',
|
|
1432
|
+
background: 'transparent',
|
|
1433
|
+
textAlign: 'left',
|
|
1434
|
+
cursor: 'pointer',
|
|
1435
|
+
fontFamily: 'inherit',
|
|
1436
|
+
fontSize: 13,
|
|
1437
|
+
lineHeight: '20px',
|
|
1438
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
/** 搜索条目装饰圆点槽(28px 列居中,替代分支图位置,条目不紧贴左侧)。 */
|
|
1442
|
+
export const searchDot: CSSProperties = {
|
|
1443
|
+
display: 'flex',
|
|
1444
|
+
alignItems: 'center',
|
|
1445
|
+
justifyContent: 'center',
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
/** 装饰圆点本体:8px 直径 + 背景描边(与分支图节点圆同一视觉语言)。 */
|
|
1449
|
+
export const searchDotInner: CSSProperties = {
|
|
1450
|
+
width: 8,
|
|
1451
|
+
height: 8,
|
|
1452
|
+
borderRadius: '50%',
|
|
1453
|
+
border: '1.5px solid var(--dsw-alias-bg-layer-2)',
|
|
1454
|
+
flex: 'none',
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
export const historyRowSelected: CSSProperties = {
|
|
1458
|
+
background: 'var(--dsw-alias-interactive-bg-active)',
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
/** 表头:粘性置顶,与行共用列模板(跨行对齐的表格契约)。
|
|
1462
|
+
* macOS 表头规范:11px semibold 弱化色(原 400 字重过轻,列名立不住)。 */
|
|
1463
|
+
export const historyHead: CSSProperties = {
|
|
1464
|
+
position: 'sticky',
|
|
1465
|
+
top: 0,
|
|
1466
|
+
zIndex: 1,
|
|
1467
|
+
display: 'grid',
|
|
1468
|
+
alignItems: 'center',
|
|
1469
|
+
alignSelf: 'flex-start',
|
|
1470
|
+
columnGap: 8,
|
|
1471
|
+
minWidth: '100%',
|
|
1472
|
+
width: 'auto',
|
|
1473
|
+
height: 28,
|
|
1474
|
+
flexShrink: 0,
|
|
1475
|
+
padding: 0,
|
|
1476
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1477
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
1478
|
+
fontSize: 11,
|
|
1479
|
+
fontWeight: 600,
|
|
1480
|
+
lineHeight: '16px',
|
|
1481
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
/** 主题格:refs 胶囊 + 可省略主题文本。 */
|
|
1485
|
+
export const historySubjectCell: CSSProperties = {
|
|
1486
|
+
display: 'flex',
|
|
1487
|
+
alignItems: 'center',
|
|
1488
|
+
gap: 6,
|
|
1489
|
+
minWidth: 0,
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
export const commitSubjectLine: CSSProperties = {
|
|
1493
|
+
overflow: 'hidden',
|
|
1494
|
+
textOverflow: 'ellipsis',
|
|
1495
|
+
whiteSpace: 'nowrap',
|
|
1496
|
+
flex: 1,
|
|
1497
|
+
minWidth: 0,
|
|
1498
|
+
fontSize: 13,
|
|
1499
|
+
lineHeight: '20px',
|
|
1500
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
export const historyHash: CSSProperties = {
|
|
1504
|
+
overflow: 'hidden',
|
|
1505
|
+
textOverflow: 'ellipsis',
|
|
1506
|
+
whiteSpace: 'nowrap',
|
|
1507
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
1508
|
+
fontSize: 11,
|
|
1509
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
export const historyAuthor: CSSProperties = {
|
|
1513
|
+
overflow: 'hidden',
|
|
1514
|
+
textOverflow: 'ellipsis',
|
|
1515
|
+
whiteSpace: 'nowrap',
|
|
1516
|
+
fontSize: 12,
|
|
1517
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
export const historyTime: CSSProperties = {
|
|
1521
|
+
textAlign: 'right',
|
|
1522
|
+
fontSize: 11,
|
|
1523
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
// ── refs 胶囊(IDEA 分支标签风格)──────────────────────────────────────
|
|
1527
|
+
|
|
1528
|
+
/** 胶囊基样式;变体见 refPillHead / refPillBranch / refPillRemote / refPillTag。 */
|
|
1529
|
+
export const refPill: CSSProperties = {
|
|
1530
|
+
flex: 'none',
|
|
1531
|
+
maxWidth: 140,
|
|
1532
|
+
overflow: 'hidden',
|
|
1533
|
+
textOverflow: 'ellipsis',
|
|
1534
|
+
whiteSpace: 'nowrap',
|
|
1535
|
+
padding: '1px 7px',
|
|
1536
|
+
borderRadius: 9,
|
|
1537
|
+
border: '1px solid',
|
|
1538
|
+
fontSize: 10,
|
|
1539
|
+
fontWeight: 500,
|
|
1540
|
+
lineHeight: '13px',
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
/** 当前分支(HEAD ->):描边式胶囊(与列表标签胶囊同族,避免绿底绿字低对比)。 */
|
|
1544
|
+
export const refPillHead: CSSProperties = {
|
|
1545
|
+
color: 'var(--dsw-alias-state-success-primary)',
|
|
1546
|
+
borderColor: 'var(--dsw-alias-state-success-primary)',
|
|
1547
|
+
background: 'transparent',
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1550
|
+
/** 其他本地分支:中性描边。 */
|
|
1551
|
+
export const refPillBranch: CSSProperties = {
|
|
1552
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
1553
|
+
borderColor: 'var(--dsw-alias-border-l1)',
|
|
1554
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
/** 远程分支:弱化灰色。 */
|
|
1558
|
+
export const refPillRemote: CSSProperties = {
|
|
1559
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1560
|
+
borderColor: 'var(--dsw-alias-border-l1)',
|
|
1561
|
+
background: 'transparent',
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
/** 标签:警示色描边。 */
|
|
1565
|
+
export const refPillTag: CSSProperties = {
|
|
1566
|
+
color: 'var(--dsw-alias-state-warn-primary)',
|
|
1567
|
+
borderColor: 'var(--dsw-alias-state-warn-primary)',
|
|
1568
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
/** 右栏内容列(外壳 paneSide 提供宽/底/边线)。 */
|
|
1572
|
+
export const historyRight: CSSProperties = {
|
|
1573
|
+
flex: 1,
|
|
1574
|
+
minHeight: 0,
|
|
1575
|
+
display: 'flex',
|
|
1576
|
+
flexDirection: 'column',
|
|
1577
|
+
gap: 8,
|
|
1578
|
+
paddingLeft: 12,
|
|
1579
|
+
overflowY: 'hidden',
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
export const rightFiles: CSSProperties = {
|
|
1583
|
+
flex: 1,
|
|
1584
|
+
minHeight: 0,
|
|
1585
|
+
overflowY: 'auto',
|
|
1586
|
+
display: 'flex',
|
|
1587
|
+
flexDirection: 'column',
|
|
1588
|
+
gap: 1,
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
export const rightMsg: CSSProperties = {
|
|
1592
|
+
flex: 1,
|
|
1593
|
+
minHeight: 0,
|
|
1594
|
+
overflowY: 'auto',
|
|
1595
|
+
display: 'flex',
|
|
1596
|
+
flexDirection: 'column',
|
|
1597
|
+
gap: 4,
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
/** 提交正文(等宽保留换行)。 */
|
|
1601
|
+
export const msgBody: CSSProperties = {
|
|
1602
|
+
margin: 0,
|
|
1603
|
+
fontFamily: 'var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace)',
|
|
1604
|
+
fontSize: 11,
|
|
1605
|
+
lineHeight: '17px',
|
|
1606
|
+
whiteSpace: 'pre-wrap',
|
|
1607
|
+
wordBreak: 'break-word',
|
|
1608
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
/** 右栏未选中时的占位区(IDEA 式双区居中提示)。 */
|
|
1612
|
+
export const rightEmptyZone: CSSProperties = {
|
|
1613
|
+
flex: 1,
|
|
1614
|
+
minHeight: 0,
|
|
1615
|
+
display: 'flex',
|
|
1616
|
+
alignItems: 'center',
|
|
1617
|
+
justifyContent: 'center',
|
|
1618
|
+
color: 'var(--dsw-alias-label-tertiary)',
|
|
1619
|
+
fontSize: 12,
|
|
1620
|
+
lineHeight: '18px',
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
/** 下占位区(提交详细信息):固定比例 + 顶部分隔线。 */
|
|
1624
|
+
export const rightEmptyZoneBottom: CSSProperties = {
|
|
1625
|
+
flex: 'none',
|
|
1626
|
+
height: '34%',
|
|
1627
|
+
borderTop: '1px solid var(--dsw-alias-border-l2)',
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
export const commitDetailHeader: CSSProperties = {
|
|
1631
|
+
display: 'flex',
|
|
1632
|
+
flexDirection: 'column',
|
|
1633
|
+
gap: 4,
|
|
1634
|
+
padding: '2px 0 10px',
|
|
1635
|
+
borderBottom: '1px solid var(--dsw-alias-border-l2)',
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
export const commitDetailSubject: CSSProperties = {
|
|
1639
|
+
fontSize: 14,
|
|
1640
|
+
lineHeight: '22px',
|
|
1641
|
+
fontWeight: 600,
|
|
1642
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1643
|
+
wordBreak: 'break-word',
|
|
1644
|
+
}
|
|
1645
|
+
|
|
1646
|
+
export const commitDetailMeta: CSSProperties = {
|
|
1647
|
+
fontSize: 12,
|
|
1648
|
+
lineHeight: '18px',
|
|
1649
|
+
color: 'var(--dsw-alias-label-secondary)',
|
|
1650
|
+
}
|
|
1651
|
+
|
|
1652
|
+
// ── Branches 管理(popup)─────────────────────────────────────────────
|
|
1653
|
+
|
|
1654
|
+
export const branchNameInput: CSSProperties = {
|
|
1655
|
+
flex: 1,
|
|
1656
|
+
minWidth: 120,
|
|
1657
|
+
border: '1px solid var(--dsw-alias-border-l2)',
|
|
1658
|
+
borderRadius: 8,
|
|
1659
|
+
padding: '5px 10px',
|
|
1660
|
+
fontSize: 13,
|
|
1661
|
+
lineHeight: '20px',
|
|
1662
|
+
fontFamily: 'inherit',
|
|
1663
|
+
background: 'var(--dsw-alias-bg-layer-2)',
|
|
1664
|
+
color: 'var(--dsw-alias-label-primary)',
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
export const branchMark: CSSProperties = {
|
|
1668
|
+
flex: 'none',
|
|
1669
|
+
color: 'var(--dsw-alias-state-business-primary)',
|
|
1670
|
+
fontSize: 12,
|
|
382
1671
|
}
|