Skip to content

Commit 02a64e1

Browse files
authored
fix button styling (microsoft#166362)
1 parent 085c409 commit 02a64e1

File tree

8 files changed

+38
-30
lines changed

8 files changed

+38
-30
lines changed

src/vs/base/browser/ui/button/button.ts

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,19 @@ export interface IButtonOptions extends IButtonStyles {
2323
readonly secondary?: boolean;
2424
}
2525

26-
export type CSSValueString = string;
2726

2827
export interface IButtonStyles {
29-
readonly buttonBackground?: CSSValueString;
30-
readonly buttonHoverBackground?: CSSValueString;
31-
readonly buttonForeground?: CSSValueString;
32-
readonly buttonSeparator?: CSSValueString;
33-
readonly buttonSecondaryBackground?: CSSValueString;
34-
readonly buttonSecondaryHoverBackground?: CSSValueString;
35-
readonly buttonSecondaryForeground?: CSSValueString;
36-
readonly buttonBorder?: CSSValueString;
28+
readonly buttonBackground: string | undefined;
29+
readonly buttonHoverBackground: string | undefined;
30+
readonly buttonForeground: string | undefined;
31+
readonly buttonSeparator: string | undefined;
32+
readonly buttonSecondaryBackground: string | undefined;
33+
readonly buttonSecondaryHoverBackground: string | undefined;
34+
readonly buttonSecondaryForeground: string | undefined;
35+
readonly buttonBorder: string | undefined;
3736
}
3837

39-
export const defaultOptions: IButtonStyles = {
38+
export const unthemedButtonStyles: IButtonStyles = {
4039
buttonBackground: '#0E639C',
4140
buttonHoverBackground: '#006BB3',
4241
buttonSeparator: Color.white.toString(),
@@ -255,16 +254,11 @@ export class ButtonWithDropdown extends Disposable implements IButton {
255254
// Separator styles
256255
const border = options.buttonBorder;
257256
if (border) {
258-
this.separatorContainer.style.borderTopWidth = '1px';
259-
this.separatorContainer.style.borderTopStyle = 'solid';
260-
this.separatorContainer.style.borderTopColor = border;
261-
262-
this.separatorContainer.style.borderBottomWidth = '1px';
263-
this.separatorContainer.style.borderBottomStyle = 'solid';
264-
this.separatorContainer.style.borderBottomColor = border;
257+
this.separatorContainer.style.borderTop = '1px solid ' + border;
258+
this.separatorContainer.style.borderBottom = '1px solid ' + border;
265259
}
266-
this.separatorContainer.style.backgroundColor = options.buttonBackground?.toString() ?? '';
267-
this.separator.style.backgroundColor = options.buttonSeparator?.toString() ?? '';
260+
this.separatorContainer.style.backgroundColor = options.buttonBackground ?? '';
261+
this.separator.style.backgroundColor = options.buttonSeparator ?? '';
268262

269263

270264
this.dropdownButton = this._register(new Button(this.element, { ...options, title: false, supportIcons: true }));

src/vs/base/browser/ui/dialog/dialog.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface IDialogOptions {
3838
readonly buttonDetails?: string[];
3939
readonly disableCloseAction?: boolean;
4040
readonly disableDefaultAction?: boolean;
41+
readonly buttonStyles: IButtonStyles;
4142
}
4243

4344
export interface IDialogResult {
@@ -46,7 +47,7 @@ export interface IDialogResult {
4647
readonly values?: string[];
4748
}
4849

49-
export interface IDialogStyles extends IButtonStyles, ICheckboxStyles {
50+
export interface IDialogStyles extends ICheckboxStyles {
5051
readonly dialogForeground?: Color;
5152
readonly dialogBackground?: Color;
5253
readonly dialogShadow?: Color;
@@ -81,8 +82,9 @@ export class Dialog extends Disposable {
8182
private focusToReturn: HTMLElement | undefined;
8283
private readonly inputs: InputBox[];
8384
private readonly buttons: string[];
85+
private readonly buttonStyles: IButtonStyles;
8486

85-
constructor(private container: HTMLElement, private message: string, buttons: string[] | undefined, private options: IDialogOptions) {
87+
constructor(private container: HTMLElement, private message: string, buttons: string[] | undefined, private readonly options: IDialogOptions) {
8688
super();
8789

8890
this.modalElement = this.container.appendChild($(`.monaco-dialog-modal-block.dimmed`));
@@ -92,6 +94,8 @@ export class Dialog extends Disposable {
9294
this.element.tabIndex = -1;
9395
hide(this.element);
9496

97+
this.buttonStyles = options.buttonStyles;
98+
9599
if (Array.isArray(buttons) && buttons.length > 0) {
96100
this.buttons = buttons;
97101
} else if (!this.options.disableDefaultAction) {
@@ -202,7 +206,7 @@ export class Dialog extends Disposable {
202206
// Handle button clicks
203207
buttonMap.forEach((entry, index) => {
204208
const primary = buttonMap[index].index === 0;
205-
const button = this.options.buttonDetails ? this._register(buttonBar.addButtonWithDescription({ title: true, secondary: !primary })) : this._register(buttonBar.addButton({ title: true, secondary: !primary }));
209+
const button = this.options.buttonDetails ? this._register(buttonBar.addButtonWithDescription({ title: true, secondary: !primary, ...this.buttonStyles })) : this._register(buttonBar.addButton({ title: true, secondary: !primary, ...this.buttonStyles }));
206210
button.label = mnemonicButtonLabel(buttonMap[index].label, true);
207211
if (button instanceof ButtonWithDescription) {
208212
button.description = this.options.buttonDetails![buttonMap[index].index];

src/vs/base/parts/quickinput/test/browser/quickinput.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as assert from 'assert';
7+
import { unthemedButtonStyles } from 'vs/base/browser/ui/button/button';
78
import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
89
import { IListOptions, List } from 'vs/base/browser/ui/list/listWidget';
910
import { raceTimeout } from 'vs/base/common/async';
@@ -52,7 +53,7 @@ suite('QuickInput', () => { // https://github.com/microsoft/vscode/issues/147543
5253
options: IListOptions<T>,
5354
) => new List<T>(user, container, delegate, renderers, options),
5455
styles: {
55-
button: {},
56+
button: unthemedButtonStyles,
5657
countBadge: {},
5758
inputBox: {},
5859
keybindingLabel: {},

src/vs/code/electron-sandbox/issue/issueReporterMain.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import 'vs/css!./media/issueReporter';
77
import 'vs/base/browser/ui/codicons/codiconStyles'; // make sure codicon css is loaded
88
import { localize } from 'vs/nls';
99
import { $, reset, safeInnerHtml, windowOpenNoOpener } from 'vs/base/browser/dom';
10-
import { Button, defaultOptions } from 'vs/base/browser/ui/button/button';
10+
import { Button, unthemedButtonStyles } from 'vs/base/browser/ui/button/button';
1111
import { renderIcon } from 'vs/base/browser/ui/iconLabel/iconLabels';
1212
import { Delayer } from 'vs/base/common/async';
1313
import { Codicon } from 'vs/base/common/codicons';
@@ -88,7 +88,7 @@ export class IssueReporter extends Disposable {
8888

8989
const issueReporterElement = this.getElementById('issue-reporter');
9090
if (issueReporterElement) {
91-
this.previewButton = new Button(issueReporterElement, defaultOptions);
91+
this.previewButton = new Button(issueReporterElement, unthemedButtonStyles);
9292
this.updatePreviewButtonState();
9393
}
9494

src/vs/workbench/browser/parts/dialogs/dialogHandler.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService
2020
import { fromNow } from 'vs/base/common/date';
2121
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
2222
import { MarkdownRenderer } from 'vs/editor/contrib/markdownRenderer/browser/markdownRenderer';
23+
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
2324

2425
export class BrowserDialogHandler implements IDialogHandler {
2526

@@ -117,7 +118,8 @@ export class BrowserDialogHandler implements IDialogHandler {
117118
buttonDetails: customOptions?.buttonDetails,
118119
checkboxLabel: checkbox?.label,
119120
checkboxChecked: checkbox?.checked,
120-
inputs
121+
inputs,
122+
buttonStyles: defaultButtonStyles
121123
});
122124

123125
dialogDisposables.add(dialog);

src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPane.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { IOpenerService } from 'vs/platform/opener/common/opener';
3737
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
3838
import { ResourceEdit } from 'vs/editor/browser/services/bulkEditService';
3939
import { ButtonBar } from 'vs/base/browser/ui/button/button';
40+
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
4041

4142
const enum State {
4243
Data = 'data',
@@ -150,11 +151,11 @@ export class BulkEditPane extends ViewPane {
150151
const buttonBar = new ButtonBar(buttonsContainer);
151152
this._disposables.add(buttonBar);
152153

153-
const btnConfirm = buttonBar.addButton({ supportIcons: true });
154+
const btnConfirm = buttonBar.addButton({ supportIcons: true, ...defaultButtonStyles });
154155
btnConfirm.label = localize('ok', 'Apply');
155156
btnConfirm.onDidClick(() => this.accept(), this, this._disposables);
156157

157-
const btnCancel = buttonBar.addButton({ /* secondary: true */ });
158+
const btnCancel = buttonBar.addButton(defaultButtonStyles /*{ secondary: true } */);
158159
btnCancel.label = localize('cancel', 'Discard');
159160
btnCancel.onDidClick(() => this.discard(), this, this._disposables);
160161

src/vs/workbench/contrib/search/browser/searchWidget.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,11 @@ export class SearchWidget extends Widget {
292292
buttonBackground: undefined,
293293
buttonBorder: undefined,
294294
buttonForeground: undefined,
295-
buttonHoverBackground: undefined
295+
buttonHoverBackground: undefined,
296+
buttonSecondaryBackground: undefined,
297+
buttonSecondaryForeground: undefined,
298+
buttonSecondaryHoverBackground: undefined,
299+
buttonSeparator: undefined
296300
};
297301
this.toggleReplaceButton = this._register(new Button(parent, opts));
298302
this.toggleReplaceButton.element.setAttribute('aria-expanded', 'false');

src/vs/workbench/services/progress/browser/progressService.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { parseLinkedText } from 'vs/base/common/linkedText';
2626
import { IViewsService, IViewDescriptorService, ViewContainerLocation } from 'vs/workbench/common/views';
2727
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
2828
import { stripIcons } from 'vs/base/common/iconLabels';
29+
import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles';
2930

3031
export class ProgressService extends Disposable implements IProgressService {
3132

@@ -563,7 +564,8 @@ export class ProgressService extends Disposable implements IProgressService {
563564
EventHelper.stop(event, true);
564565
}
565566
}
566-
}
567+
},
568+
buttonStyles: defaultButtonStyles
567569
}
568570
);
569571

0 commit comments

Comments
 (0)