Merge vscode source through release 1.79.2 (#23482)

* log when an editor action doesn't run because of enablement

* notebooks create/dispose editors. this means controllers must be created eagerly (😢) and that notebooks need a custom way of plugging comparision keys for session. works unless creating another session for the same cell of a duplicated editor

* Set offSide to sql lang configuration to true (#183461)

* Fixes #181764 (#183550)

* fix typo

* Always scroll down and focus the input (#183557)

* Fixes #180386 (#183561)

* cli: ensure ordering of rpc server messages (#183558)

* cli: ensure ordering of rpc server messages

Sending lots of messages to a stream would block them around the async
tokio mutex, which is "fair" so doesn't preserve ordering. Instead, use
the write_loop approach I introduced to the server_multiplexer for the
same reason some time ago.

* fix clippy

* update for May endgame

* testing: allow invalidateTestResults to take an array (#183569)

* Document `ShareProvider` API proposal (#183568)

* Document `ShareProvider` API proposal

* Remove mention of VS Code from JSDoc

* Add support for rendering svg and md in welcome message (#183580)

* Remove toggle setting more eagerly (#183584)

* rm message abt macOS

* Change text (#183589)

* Change text

* Accidentally changed the wrong file

* cli: improve output for code tunnel status (#183571)

* testing: allow invalidateTestResults to take an array

* cli: improve output for code tunnel status

Fixes #183570

* [json/css/html] update services (#183595)

* Add experimental setting to enable this dialog

* Fix exporting chat model to JSON before it is initialized (#183597)

* minimum scrolling to reveal the next cell on shift+enter (#183600)

do minimum scrolling to reveal the next cell on Execute cell and select next

* Fixing Jupyter notebook issue 13263 (#183527)

fix for the issue, still need to understand why there is strange focusing

* Tweak proposed API JSDoc (#183590)

* Tweak proposed API JSDoc

* workbench -> workspace

* fix ? operator

* Use active editor and show progress when sharing (#183603)

Use active editor and show progress

* use scroll setting variable correctly

* Schedule welcome widget to show once between typing. (#183606)

* Schedule dialog to show once between typing

* Don't re-render if already displayed once

* Add F10 keybinding for debugger step, even on Web. (#183510)

Fixes #181792.
Previously, for Web the keyboard shortcut was Alt-F10, because it was
believed that F10 could not be bound on browsers. This turned out to be
incorrect, so we make the shortcut consistent (F10) with desktop VSCode
which is also what many other debuggers use.
We keep Alt-F10 on web as a secondary keybinding to keep the experience
some web users may have gotten used to by now.

* Also pass process.env

* Restore missing chat clear commands (#183651)

* chore: update electron@22.5.4 (#183716)

* Show remote indicator in web when remoteAuthority is set (#183728)

* feat: .vuerc as json file (#153017)

Co-authored-by: Martin Aeschlimann <martinae@microsoft.com>

* Delete --compatibility=1.63 code from the server (#183738)

* Copy vscode.dev link to tunnel generates an invalid link when an untitled workspace is open (#183739)

* Recent devcontainer display string corrupted on Get Started page (#183740)

* Improve "next codeblock" navigation (#183744)

* Improve "next codeblock" navigation
Operate on the current focused response, or the last one, and scroll to the selected item

* Normalize command title

* Git - run git status if similarityThreshold changes (#183762)

* fix aria-label issue in kb editor

fixes A11y_GradeB_VSCode_Keyboard shortcut reads words together - Blind: Arrow key navigation to row Find the binding keys and  "when" cell data are read together resulting in a word " CTRL + FeditorFocus  instead of CTRL + F editorFocus" #182490

* Status - fix compact padding (#183768)

* Remove angle brackets from VB brackets (#183782)

Fixes #183359

* Update language config schema with more details about brackets. (#183779)

* fix comment (#183812)

* Support for `Notebook` CodeAction Kind (#183457)

* nb kind support -- wip

* allow notebook codeactions around single cell edit check

* move notebook code action type out of editor

---------

Co-authored-by: rebornix <penn.lv@gmail.com>

* cli: fix connection default being applied (#183827)

* cli: bump to openssl 1.1.1u (#183828)

* Implement "delete" action for chat history (#183609)

* Use desired file name when generating new md pasted file paths (#183861)

Fixes #183851

* Default to filename for markdown new file if empty (#183864)

Fixes #183848

* Fix small typo (#183865)

Fixes #183819

* Noop when moving a symbol into the file it is already in (#183866)

Fixes #183793

* Adjust codeAction validation to account for notebook kind (#183859)

* Make JS/TS `go to configuration` commands work on non-`file:` file systems (#183688)

Make `go to project` commands work on non-`file:` file systems

Fixes #183685

* Can't do regex search after opening notebook (#183884)

Fixes #183858

* Default to current dir for `move to file` select (#183875)

Fixes #183870

`showOpenDialog` seems to ignore `defaultUri` if the file doesn't exist

* Use `<...>` style markdown links when needed (#183876)

Fixes #183849

* Remove check for context keys

* Update xterm package

* Enable updating a chat model without triggering incremental typing (#183894)

* Enable chat "move" commands on empty sessions (#183895)

* Enable chat "move" commands on empty sessions
and also imported sessions

* Fix command name

* Fix some chat keybindings on windows (#183896)

* "Revert File" on inactive editors are ignored (fix #177557) (#183903)

* Empty reason while switching profile (fix #183775) (#183904)

* fix https://github.com/microsoft/vscode-internalbacklog/issues/4278 (#183910)

* fix https://github.com/microsoft/vscode/issues/183770 (#183914)

* code --status displays a lot of errors before actual status output (fix #183787) (#183915)

* joh/icy manatee (#183917)

* Use idle value for widget of interactive editor controller

https://github.com/microsoft/vscode/issues/183820

* also make preview editors idle values

https://github.com/microsoft/vscode/issues/183820

* Fix #183777 (#183929)

* Fix #182309 (#183925)

* Tree checkbox item -> items (#183931)

Fixes #183826

* Fixes #183909 (#183940)

* Fix #183837 (#183943)

fix #183837

* Git - fix #183941 (#183944)

* Update xterm.css

Fixes #181242

* chore: add @ulugbekna and @aiday-mar to my-endgame notebook (#183946)

* Revert "When snippet mode is active, make `Tab` not accept suggestion but advance placeholder"

This reverts commit 50a80cdb61511343996ff1d41d0b676c3d329f48.

* revert not focusing completion list when quick suggest happens during snippet

* change `snippetsPreventQuickSuggestions` default to false

* Fix #181446 (#183956)

* fix https://github.com/microsoft/vscode-internalbacklog/issues/4298 (#183957)

* fix: remove extraneous incorrect context keys (#183959)

These were actually getting added in getTestItemContextOverlay, and the test ID was using the extended ID which extensions do not know about.

Fixes #183612

* Fixes https://github.com/microsoft/monaco-editor/issues/3920 (#183960)

* fix https://github.com/microsoft/vscode-internalbacklog/issues/4324 (#183961)

* fix #183030

* fix #180826 (#183962)

* make message more generic for interactive editor help

* .

* fix #183968

* Keep codeblock toolbar visible when focused

* Fix when clause on "Run in terminal" command

* add important info to help menu

* fix #183970

* Set `isRefactoring` for all TS refactoring edits (#183982)

* consolidate

* Disable move to file in TS versions < 5.2 (#183992)

There are still a few key bugs with refactoring. We will  ship this as a preview for TS 5.2+ instead of for 5.1

* Polish query accepting (#183995)

We shouldn't send the same request to Copilot if the query hasn't changed. So if the query is the same, we short circut.

Fixes https://github.com/microsoft/vscode-internalbacklog/issues/4286

Also, when we open in chat, we should use the last accepted query, not what's in the input box.

Fixes https://github.com/microsoft/vscode-internalbacklog/issues/4280

* Allow widget to have focus (#184000)

So that selecting non-code text works.

Fixes https://github.com/microsoft/vscode-internalbacklog/issues/4294

* Fix microsoft/vscode-internalbacklog#4257. Mitigate zindex for zone widgets. (#184001)

* Change welcome dialog contribution to Eventually

* Misc fixes

* Workspace folder picker entry descriptions are suboptimal for some filesystems (fix #183418) (#184018)

* cli - ignore std error unless verbose (#183787) (#184031)

* joh/inquisitive meerkat (#184034)

* only stash sessions that are none empty

https://github.com/microsoft/vscode-internalbacklog/issues/4281

* only unstash a session once - unless new exchanges are made,

https://github.com/microsoft/vscode-internalbacklog/issues/4281

* account for all exchange types

* Improve declared components (#184039)

* make sure to read setting (#184040)

d'oh, related to https://github.com/microsoft/vscode/issues/173387#issuecomment-1571696644

* [html] update service (#184049)

[html] update service. FIxes #181176

* reset context keys on reset/hide (#184042)

fixes https://github.com/microsoft/vscode-internalbacklog/issues/4330

* use `Lazy`, not `IdleValue` for the IE widget held by the eager controller (#184048)

https://github.com/microsoft/vscode/issues/183820

* fix https://github.com/microsoft/vscode-internalbacklog/issues/4333 (#184067)

* use undo-loop instead of undo-edit when discarding chat session (#184063)

* use undo-loop instead of undo-edit when discarding chat session

fixes https://github.com/microsoft/vscode-internalbacklog/issues/4118

* fix tests, wait for correct state

* Add logging to node download (#184070)

Add logging to node download. For #182951

* re-enable default zone widget revealing when showing (#184072)

fixes https://github.com/microsoft/vscode-internalbacklog/issues/4332, also fixes https://github.com/microsoft/vscode-internalbacklog/issues/3784

* fix #178202

* Allow APIs in stable (#184062)

* Fix microsoft/vscode-internalbacklog#4206. Override List view whitespace css for monaco editor (#184087)

* Fix JSDoc grammatical error (#184090)

* Pick up TS 5.1.3 (#184091)

Fixes #182931

* Misc fixes

* update distro (#184097)

* chore: update electron@22.5.5 (#184116)

* Extension host veto is registered multiple times on restart (fix #183778) (#184127)

Extension host veto is registered multiple times on restart (#183778)

* Do not auto start the local web worker extension host (#184137)

* Allow embedders to intercept trustedTypes.createPolicy calls (#184136)

Allow embedders to intercept trustedTypes.createPolicy calls (#184100)

* fix: reading from console output for --status on windows and linux (#184138)

fix: reading from console output for --status on windows and linux (#184118)

* Misc fixes

* code --status displays a lot of errors before actual status output (fix #183787) (#184200)

fix 183787

* (cherry-pick to 1.79 from main) Handle galleryExtension failure in featuredExtensionService (#184205)

Handle galleryExtension failure in featuredExtensionService (#184198)

Handle galleryExtension failure

* Fix #184183. Multiple output height updates are skipped. (#184188)

* Post merge init fixes

* Misc build issues

* disable toggle inline diff of `alt` down

https://github.com/microsoft/vscode-internalbacklog/issues/4342

* Take into account already activated extensions when computing running locations (#184303)

Take into account already activated extensions when computing running locations (fixes #184180)

* Avoid `extensionService.getExtension` and use `ActivationKind.Immediate` to allow that URI handling works while resolving (#184310)

Avoid `extensionService.getExtension` and use `ActivationKind.Immediate` to allow that URI handling works while resolving (fixes #182217)

* WIP

* rm fish auto injection

* More breaks

* Fix Port Attributes constructor (#184412)

* WIP

* WIP

* Allow extensions to get at the exports of other extensions during resolving (#184487)

Allow extensions to get at the exports of other extensions during resolving (fixes #184472)

* do not auto finish session when inline chat widgets have focus

re https://github.com/microsoft/vscode-internalbacklog/issues/4354

* fix compile errors caused by new base method

* WIP

* WIP

* WIP

* WIP

* Build errors

* unc - fix path traversal bypass

* Bump version

* cherry-pick prod changes from main

* Disable sandbox

* Build break from merge

* bump version

* Merge pull request #184739 from max06/max06/issue184659

Restore ShellIntegration for fish (#184659)

* Git - only add --find-renames if the value is not the default one (#185053)

Git - only add --find-renames if the value is not the default one (#184992)

* Cherry-pick: Revert changes to render featured extensions when available (#184747)

Revert changes to render featured extensions when available.  (#184573)

* Lower timeouts for experimentation and gallery service

* Revert changes to render extensions when available

* Add audio cues

* fix: disable app sandbox when --no-sandbox is present (#184913)

* fix: disable app sandbox when --no-sandbox is present (#184897)

* fix: loading minimist in packaged builds

* Runtime errors

* UNC allow list checks cannot be disabled in extension host (fix #184989) (#185085)

* UNC allow list checks cannot be disabled in extension host (#184989)

* Update src/vs/base/node/unc.js

Co-authored-by: Robo <hop2deep@gmail.com>

---------

Co-authored-by: Robo <hop2deep@gmail.com>

* Add notebook extension

* Fix mangling issues

* Fix mangling issues

* npm install

* npm install

* Issues blocking bundle

* Fix build folder compile errors

* Fix windows bundle build

* Linting fixes

* Fix sqllint issues

* Update yarn.lock files

* Fix unit tests

* Fix a couple breaks from test fixes

* Bump distro

* redo the checkbox style

* Update linux build container dockerfile

* Bump build image tag

* Bump native watch dog package

* Bump node-pty

* Bump distro

* Fix documnetation error

* Update distro

* redo the button styles

* Update datasource TS

* Add missing yarn.lock files

* Windows setup fix

* Turn off extension unit tests while investigating

* color box style

* Remove appx

* Turn off test log upload

* update dropdownlist style

* fix universal app build error (#23488)

* Skip flaky bufferContext vscode test

---------

Co-authored-by: Johannes <johannes.rieken@gmail.com>
Co-authored-by: Henning Dieterichs <hdieterichs@microsoft.com>
Co-authored-by: Julien Richard <jairbubbles@hotmail.com>
Co-authored-by: Charles Gagnon <chgagnon@microsoft.com>
Co-authored-by: Megan Rogge <merogge@microsoft.com>
Co-authored-by: meganrogge <megan.rogge@microsoft.com>
Co-authored-by: Rob Lourens <roblourens@gmail.com>
Co-authored-by: Connor Peet <connor@peet.io>
Co-authored-by: Joyce Er <joyce.er@microsoft.com>
Co-authored-by: Bhavya U <bhavyau@microsoft.com>
Co-authored-by: Raymond Zhao <7199958+rzhao271@users.noreply.github.com>
Co-authored-by: Martin Aeschlimann <martinae@microsoft.com>
Co-authored-by: Aaron Munger <aamunger@microsoft.com>
Co-authored-by: Aiday Marlen Kyzy <amarlenkyzy@microsoft.com>
Co-authored-by: rebornix <penn.lv@gmail.com>
Co-authored-by: Ole <oler@google.com>
Co-authored-by: Jean Pierre <jeanp413@hotmail.com>
Co-authored-by: Robo <hop2deep@gmail.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com>
Co-authored-by: Ulugbek Abdullaev <ulugbekna@gmail.com>
Co-authored-by: Alex Ross <alros@microsoft.com>
Co-authored-by: Michael Lively <milively@microsoft.com>
Co-authored-by: Matt Bierner <matb@microsoft.com>
Co-authored-by: Andrea Mah <31675041+andreamah@users.noreply.github.com>
Co-authored-by: Benjamin Pasero <benjamin.pasero@microsoft.com>
Co-authored-by: Sandeep Somavarapu <sasomava@microsoft.com>
Co-authored-by: Daniel Imms <2193314+Tyriar@users.noreply.github.com>
Co-authored-by: Tyler James Leonhardt <me@tylerleonhardt.com>
Co-authored-by: Alexandru Dima <alexdima@microsoft.com>
Co-authored-by: Joao Moreno <Joao.Moreno@microsoft.com>
Co-authored-by: Alan Ren <alanren@microsoft.com>
This commit is contained in:
Karl Burtram
2023-06-27 15:26:51 -07:00
committed by GitHub
parent 7975fda6dd
commit 01e66ab3e6
4335 changed files with 252586 additions and 164604 deletions

View File

@@ -3,17 +3,14 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Button as vsButton, IButtonOptions, IButtonStyles as vsIButtonStyles } from 'vs/base/browser/ui/button/button';
import { Button as vsButton, IButtonOptions } from 'vs/base/browser/ui/button/button';
import { Color } from 'vs/base/common/color';
export interface IButtonStyles extends vsIButtonStyles {
}
export class Button extends vsButton {
protected buttonFocusOutline?: Color;
constructor(container: HTMLElement, options?: IButtonOptions) {
super(container, options);
super(container, options ?? {});
}
public set title(value: string) {

View File

@@ -4,13 +4,11 @@
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./media/checkbox';
import { Color } from 'vs/base/common/color';
import { Event, Emitter } from 'vs/base/common/event';
import { Widget } from 'vs/base/browser/ui/widget';
import { generateUuid } from 'vs/base/common/uuid';
export interface ICheckboxOptions {
export interface ICheckboxOptions extends Partial<ICheckboxStyles> {
label: string;
enabled?: boolean;
checked?: boolean;
@@ -20,13 +18,12 @@ export interface ICheckboxOptions {
}
export interface ICheckboxStyles {
disabledCheckboxForeground?: Color;
disabledCheckboxForeground?: string;
}
export class Checkbox extends Widget {
private _el: HTMLInputElement;
private _label: HTMLSpanElement;
private disabledCheckboxForeground?: Color;
private _onChange = new Emitter<boolean>();
public readonly onChange: Event<boolean> = this._onChange.event;
@@ -34,7 +31,7 @@ export class Checkbox extends Widget {
private _onFocus = new Emitter<void>();
public readonly onFocus: Event<void> = this._onFocus.event;
constructor(container: HTMLElement, opts: ICheckboxOptions) {
constructor(container: HTMLElement, private readonly _options: ICheckboxOptions) {
super();
const id = generateUuid();
this._el = document.createElement('input');
@@ -42,12 +39,12 @@ export class Checkbox extends Widget {
this._el.style.verticalAlign = 'middle';
this._el.id = id;
if (opts.ariaLabel) {
this.ariaLabel = opts.ariaLabel;
if (_options.ariaLabel) {
this.ariaLabel = _options.ariaLabel;
}
if (opts.ariaDescription) {
this._el.setAttribute('aria-description', opts.ariaDescription);
if (_options.ariaDescription) {
this._el.setAttribute('aria-description', _options.ariaDescription);
}
this.onchange(this._el, e => {
@@ -62,12 +59,12 @@ export class Checkbox extends Widget {
this._label.style.verticalAlign = 'middle';
this._label.setAttribute('for', id);
this.label = opts.label;
this.enabled = opts.enabled ?? true;
this.checked = opts.checked ?? false;
this.label = _options.label;
this.enabled = _options.enabled ?? true;
this.checked = _options.checked ?? false;
if (opts.onChange) {
this.onChange(opts.onChange);
if (_options.onChange) {
this.onChange(_options.onChange);
}
container.appendChild(this._el);
@@ -84,7 +81,7 @@ export class Checkbox extends Widget {
public set enabled(val: boolean) {
this._el.disabled = !val;
this.updateStyle();
this._label.style.color = !this.enabled && this._options.disabledCheckboxForeground ? this._options.disabledCheckboxForeground : 'inherit';
}
public get enabled(): boolean {
@@ -134,13 +131,4 @@ export class Checkbox extends Widget {
public setWidth(value: string) {
this._el.style.width = value;
}
public style(styles: ICheckboxStyles): void {
this.disabledCheckboxForeground = styles.disabledCheckboxForeground;
this.updateStyle();
}
private updateStyle(): void {
this._label.style.color = !this.enabled && this.disabledCheckboxForeground ? this.disabledCheckboxForeground.toString() : 'inherit';
}
}

View File

@@ -3,8 +3,6 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./media/colorbox';
import { Color } from 'vs/base/common/color';
import { Event, Emitter } from 'vs/base/common/event';
import { Widget } from 'vs/base/browser/ui/widget';
import * as DOM from 'vs/base/browser/dom';
@@ -13,18 +11,13 @@ import { generateUuid } from 'vs/base/common/uuid';
export interface ColorboxOptions {
name: string;
class?: string[];
label: string;
}
export interface ColorboxStyle {
backgroundColor?: Color;
color: string;
}
export class Colorbox extends Widget {
readonly radioButton: HTMLInputElement;
readonly colorElement: HTMLDivElement;
private labelNode: HTMLLabelElement;
private backgroundColor?: Color;
private _onSelect = new Emitter<void>();
public readonly onSelect: Event<void> = this._onSelect.event;
@@ -34,6 +27,7 @@ export class Colorbox extends Widget {
const colorboxContainer = DOM.$('.colorbox-container');
this.colorElement = DOM.$('.color-element');
const radiobuttonContainer = DOM.$('.color-selector-container');
this.colorElement.style.background = opts.color;
this.radioButton = DOM.$('input');
this.radioButton.type = 'radio';
this.radioButton.name = opts.name;
@@ -43,10 +37,10 @@ export class Colorbox extends Widget {
if (opts.class) {
this.radioButton.classList.add(...opts.class);
}
this.radioButton.setAttribute('aria-label', opts.label);
this.radioButton.setAttribute('aria-label', opts.color);
this.labelNode = DOM.$('label.colorbox-label');
this.labelNode.setAttribute('for', this.radioButton.id);
this.labelNode.innerText = opts.label;
this.labelNode.innerText = opts.color;
radiobuttonContainer.appendChild(this.radioButton);
radiobuttonContainer.appendChild(this.labelNode);
@@ -60,17 +54,6 @@ export class Colorbox extends Widget {
}
public style(styles: ColorboxStyle): void {
if (styles.backgroundColor) {
this.backgroundColor = styles.backgroundColor;
}
this.updateStyle();
}
private updateStyle(): void {
this.colorElement.style.background = this.backgroundColor ? this.backgroundColor.toString() : this.radioButton.style.background;
}
public get checked(): boolean {
return this.radioButton.checked;
}

View File

@@ -5,28 +5,81 @@
import 'vs/css!./media/dropdownList';
import * as DOM from 'vs/base/browser/dom';
import { Dropdown, IDropdownOptions } from 'vs/base/browser/ui/dropdown/dropdown';
import { IDisposable } from 'vs/base/common/lifecycle';
import { Color } from 'vs/base/common/color';
import { IAction } from 'vs/base/common/actions';
import { EventType as GestureEventType } from 'vs/base/browser/touch';
import { List } from 'vs/base/browser/ui/list/listWidget';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { Button, IButtonStyles } from 'sql/base/browser/ui/button/button';
import { Button } from 'sql/base/browser/ui/button/button';
import { BaseDropdown, IBaseDropdownOptions } from 'vs/base/browser/ui/dropdown/dropdown';
import { IAnchor, IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
import { IButtonStyles } from 'vs/base/browser/ui/button/button';
export interface IDropdownStyles {
backgroundColor?: Color;
foregroundColor?: Color;
borderColor?: Color;
backgroundColor?: string;
foregroundColor?: string;
borderColor?: string;
}
export class DropdownList extends Dropdown {
export interface IDropdownOptions extends IBaseDropdownOptions {
contextViewProvider: IContextViewProvider;
buttonStyles: IButtonStyles;
dropdownStyles: IDropdownStyles;
}
protected backgroundColor?: Color;
protected foregroundColor?: Color;
protected borderColor?: Color;
export class Dropdown extends BaseDropdown {
private contextViewProvider: IContextViewProvider;
constructor(container: HTMLElement, options: IDropdownOptions) {
super(container, options);
this.contextViewProvider = options.contextViewProvider;
}
override show(): void {
super.show();
this.element.classList.add('active');
this.contextViewProvider.showContextView({
getAnchor: () => this.getAnchor(),
render: (container) => {
return this.renderContents(container);
},
onDOMEvent: (e, activeElement) => {
this.onEvent(e, activeElement);
},
onHide: () => this.onHide()
});
}
protected getAnchor(): HTMLElement | IAnchor {
return this.element;
}
protected onHide(): void {
this.element.classList.remove('active');
}
override hide(): void {
super.hide();
if (this.contextViewProvider) {
this.contextViewProvider.hideContextView();
}
}
protected renderContents(container: HTMLElement): IDisposable | null {
return null;
}
}
export class DropdownList extends BaseDropdown {
protected borderWidth = 1;
private button?: Button;
@@ -40,7 +93,7 @@ export class DropdownList extends Dropdown {
) {
super(container, _options);
if (action) {
this.button = new Button(_contentContainer);
this.button = new Button(_contentContainer, this._options.buttonStyles);
this.button.label = action.label;
this._register(DOM.addDisposableListener(this.button.element, DOM.EventType.CLICK, () => {
action.run();
@@ -83,12 +136,16 @@ export class DropdownList extends Dropdown {
}));
this.element.setAttribute('tabindex', '0');
this.applyStylesOnElement(this._contentContainer, _options.dropdownStyles.backgroundColor, _options.dropdownStyles.foregroundColor, _options.dropdownStyles.borderColor);
if (this.label) {
this.applyStylesOnElement(this.element, _options.dropdownStyles.backgroundColor, _options.dropdownStyles.foregroundColor, _options.dropdownStyles.borderColor);
}
}
/**
* Render the dropdown contents
*/
protected override renderContents(container: HTMLElement): IDisposable {
protected renderContents(container: HTMLElement): IDisposable | null {
let div = DOM.append(container, this._contentContainer);
div.style.width = (DOM.getTotalWidth(this.element) - this.borderWidth * 2) + 'px'; // Subtract border width
return { dispose: () => { } };
@@ -121,26 +178,6 @@ export class DropdownList extends Dropdown {
}
}
public style(styles: IDropdownStyles & IButtonStyles): void {
this.backgroundColor = styles.backgroundColor;
this.foregroundColor = styles.foregroundColor;
this.borderColor = styles.borderColor;
this.applyStyles();
if (this.button) {
this.button.style(styles);
}
}
protected applyStyles(): void {
const background = this.backgroundColor ? this.backgroundColor.toString() : '';
const foreground = this.foregroundColor ? this.foregroundColor.toString() : '';
const border = this.borderColor ? this.borderColor.toString() : '';
this.applyStylesOnElement(this._contentContainer, background, foreground, border);
if (this.label) {
this.applyStylesOnElement(this.element, background, foreground, border);
}
}
private applyStylesOnElement(element: HTMLElement, background: string, foreground: string, border: string): void {
if (element) {
element.style.backgroundColor = background;

View File

@@ -20,6 +20,7 @@ import { clamp } from 'vs/base/common/numbers';
import { mixin } from 'vs/base/common/objects';
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
import * as nls from 'vs/nls';
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
export interface IDropdownOptions extends IDropdownStyles {
@@ -124,7 +125,8 @@ export class Dropdown extends Disposable implements IListVirtualDelegate<string>
},
placeholder: this._options.placeholder,
ariaLabel: this._options.ariaLabel,
ariaDescription: this._options.ariaDescription
ariaDescription: this._options.ariaDescription,
inputBoxStyles: defaultInputBoxStyles
});
// Clear title from input box element (defaults to placeholder value) since we don't want a tooltip for the selected value

View File

@@ -5,16 +5,16 @@
import 'vs/css!./infoButton';
import { Button as sqlButton } from 'sql/base/browser/ui/button/button';
import { IButtonOptions, IButtonStyles } from 'vs/base/browser/ui/button/button';
import { IButtonOptions } from 'vs/base/browser/ui/button/button';
export interface IInfoButtonOptions extends IButtonOptions {
buttonMaxHeight: number,
buttonMaxWidth: number,
description: string,
iconClass: string,
iconHeight: number,
iconWidth: number,
title: string,
buttonMaxHeight?: number,
buttonMaxWidth?: number,
description?: string,
iconClass?: string,
iconHeight?: number,
iconWidth?: number,
title?: string,
}
export class InfoButton extends sqlButton {
@@ -34,8 +34,6 @@ export class InfoButton extends sqlButton {
private _iconWidth?: number;
private _title?: string;
private _styles: IButtonStyles;
constructor(container: HTMLElement, options?: IInfoButtonOptions) {
super(container, options);
this._container = container;
@@ -143,27 +141,37 @@ export class InfoButton extends sqlButton {
if (!options) {
return;
}
this.buttonMaxHeight = options.buttonMaxHeight;
this.buttonMaxWidth = options.buttonMaxWidth;
this.description = options.description;
this.iconHeight = options.iconHeight;
this.iconWidth = options.iconWidth;
this.iconClass = options.iconClass;
this.title = options.title;
if (options.buttonMaxHeight !== undefined) {
this.buttonMaxHeight = options.buttonMaxHeight;
}
if (options.buttonMaxWidth !== undefined) {
this.buttonMaxWidth = options.buttonMaxWidth;
}
if (options.description) {
this.description = options.description;
}
if (options.iconHeight !== undefined) {
this.iconHeight = options.iconHeight;
}
if (options.iconWidth !== undefined) {
this.iconWidth = options.iconWidth;
}
if (options.iconClass) {
this.iconClass = options.iconClass;
}
if (options.title) {
this.title = options.title;
}
}
override style(styles: IButtonStyles): void {
this._styles = styles;
this.applyStyles();
override updateStyles() {
this.element.style.backgroundColor = this.options.buttonBackground ?? '';
this.element.style.color = this.options.buttonForeground ?? '';
this.element.style.borderColor = this.options.buttonBorder ?? '';
}
override applyStyles(): void {
this.element.style.backgroundColor = this._styles?.buttonBackground?.toString();
this.element.style.color = this._styles?.buttonForeground?.toString();
this.element.style.borderColor = this._styles?.buttonBorder?.toString();
override updateBackground(hover: boolean): void {
this.element.style.backgroundColor = (hover ? this.options.buttonHoverBackground : this.options.buttonBackground) ?? '';
}
override setHoverBackground(): void {
this.element.style.backgroundColor = this._styles?.buttonHoverBackground?.toString();
}
}

View File

@@ -31,12 +31,12 @@ export interface IInputOptions extends vsIInputBoxOptions {
}
export class InputBox extends vsInputBox implements AdsWidget {
private enabledInputBackground?: Color;
private enabledInputForeground?: Color;
private enabledInputBorder?: Color;
private disabledInputBackground?: Color;
private disabledInputForeground?: Color;
private disabledInputBorder?: Color;
// private enabledInputBackground?: Color;
// private enabledInputForeground?: Color;
// private enabledInputBorder?: Color;
// private disabledInputBackground?: Color;
// private disabledInputForeground?: Color;
// private disabledInputBorder?: Color;
private _lastLoseFocusValue: string;
@@ -51,10 +51,11 @@ export class InputBox extends vsInputBox implements AdsWidget {
constructor(container: HTMLElement, contextViewProvider: IContextViewProvider, private _sqlOptions?: IInputOptions, id?: string) {
super(container, contextViewProvider, _sqlOptions);
this.enabledInputBackground = this.inputBackground;
this.enabledInputForeground = this.inputForeground;
this.enabledInputBorder = this.inputBorder;
this.disabledInputBackground = Color.transparent;
// {{SQL CARBON TODO}} - fix styles
// this.enabledInputBackground = this.inputBackground;
// this.enabledInputForeground = this.inputForeground;
// this.enabledInputBorder = this.inputBorder;
//this.disabledInputBackground = Color.transparent;
this._lastLoseFocusValue = this.value;
let self = this;
@@ -82,14 +83,14 @@ export class InputBox extends vsInputBox implements AdsWidget {
}
public override style(styles: IInputBoxStyles): void {
super.style(styles);
this.enabledInputBackground = this.inputBackground;
this.enabledInputForeground = this.inputForeground;
this.enabledInputBorder = this.inputBorder;
this.disabledInputBackground = styles.disabledInputBackground;
this.disabledInputForeground = styles.disabledInputForeground;
this.updateInputEnabledDisabledColors();
this.applyStyles();
// super.style(styles);
// this.enabledInputBackground = this.inputBackground;
// this.enabledInputForeground = this.inputForeground;
// this.enabledInputBorder = this.inputBorder;
// this.disabledInputBackground = styles.disabledInputBackground;
// this.disabledInputForeground = styles.disabledInputForeground;
// this.updateInputEnabledDisabledColors();
// this.applyStyles();
}
public override enable(): void {
@@ -168,10 +169,10 @@ export class InputBox extends vsInputBox implements AdsWidget {
}
private updateInputEnabledDisabledColors(): void {
let enabled = this.isEnabled();
this.inputBackground = enabled ? this.enabledInputBackground : this.disabledInputBackground;
this.inputForeground = enabled ? this.enabledInputForeground : this.disabledInputForeground;
this.inputBorder = enabled ? this.enabledInputBorder : this.disabledInputBorder;
// let enabled = this.isEnabled();
// this.inputBackground = enabled ? this.enabledInputBackground : this.disabledInputBackground;
// this.inputForeground = enabled ? this.enabledInputForeground : this.disabledInputForeground;
// this.inputBorder = enabled ? this.enabledInputBorder : this.disabledInputBorder;
}
public override validate(force?: boolean): MessageType | undefined {

View File

@@ -3,15 +3,16 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { SelectBox, ISelectBoxStyles, ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox';
import { SelectBox, ISelectOptionItem } from 'vs/base/browser/ui/selectBox/selectBox';
import { Color } from 'vs/base/common/color';
import { isUndefinedOrNull } from 'vs/base/common/types';
import { IMessage, MessageType, defaultOpts } from 'vs/base/browser/ui/inputbox/inputBox';
import { IMessage, MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
import * as dom from 'vs/base/browser/dom';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { IContextViewProvider, AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { Emitter } from 'vs/base/common/event';
import { renderFormattedText, renderText, FormattedTextRenderOptions } from 'vs/base/browser/formattedTextRenderer';
import { defaultSelectBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
const $ = dom.$;
@@ -31,12 +32,12 @@ export interface IListBoxStyles {
* Extends SelectBox to allow multiple selection and adding/remove items dynamically
*/
export class ListBox extends SelectBox {
private enabledSelectBackground?: Color;
private enabledSelectForeground?: Color;
private enabledSelectBorder?: Color;
private disabledSelectBackground?: Color;
private disabledSelectForeground?: Color;
private disabledSelectBorder?: Color;
// private enabledSelectBackground?: Color;
// private enabledSelectForeground?: Color;
// private enabledSelectBorder?: Color;
// private disabledSelectBackground?: Color;
// private disabledSelectForeground?: Color;
// private disabledSelectBorder?: Color;
private inputValidationInfoBorder?: Color;
private inputValidationInfoBackground?: Color;
@@ -56,7 +57,7 @@ export class ListBox extends SelectBox {
private options: ISelectOptionItem[],
contextViewProvider: IContextViewProvider) {
super(options, 0, contextViewProvider);
super(options, 0, contextViewProvider, defaultSelectBoxStyles);
this.contextViewProvider = contextViewProvider;
this.isValid = true;
this.selectElement.multiple = true;
@@ -77,51 +78,53 @@ export class ListBox extends SelectBox {
this.selectElement.focus();
}));
this.enabledSelectBackground = this.selectBackground;
this.enabledSelectForeground = this.selectForeground;
this.enabledSelectBorder = this.selectBorder;
this.disabledSelectBackground = Color.transparent;
// this.enabledSelectBackground = this.selectBackground;
// this.enabledSelectForeground = this.selectForeground;
// this.enabledSelectBorder = this.selectBorder;
//this.disabledSelectBackground = Color.transparent;
this.inputValidationInfoBorder = defaultOpts.inputValidationInfoBorder;
this.inputValidationInfoBackground = defaultOpts.inputValidationInfoBackground;
this.inputValidationWarningBorder = defaultOpts.inputValidationWarningBorder;
this.inputValidationWarningBackground = defaultOpts.inputValidationWarningBackground;
this.inputValidationErrorBorder = defaultOpts.inputValidationErrorBorder;
this.inputValidationErrorBackground = defaultOpts.inputValidationErrorBackground;
// this.inputValidationInfoBorder = defaultOpts.inputValidationInfoBorder;
// this.inputValidationInfoBackground = defaultOpts.inputValidationInfoBackground;
// this.inputValidationWarningBorder = defaultOpts.inputValidationWarningBorder;
// this.inputValidationWarningBackground = defaultOpts.inputValidationWarningBackground;
// this.inputValidationErrorBorder = defaultOpts.inputValidationErrorBorder;
// this.inputValidationErrorBackground = defaultOpts.inputValidationErrorBackground;
this.onblur(this.selectElement, () => this.onBlur());
this.onfocus(this.selectElement, () => this.onFocus());
}
public override style(styles: IListBoxStyles): void {
let superStyle: ISelectBoxStyles = {
selectBackground: styles.selectBackground,
selectForeground: styles.selectForeground,
selectBorder: styles.selectBorder
};
super.style(superStyle);
this.enabledSelectBackground = this.selectBackground;
this.enabledSelectForeground = this.selectForeground;
this.enabledSelectBorder = this.selectBorder;
// {{SQL CARBON TODO}} - apply styles
public style(styles: IListBoxStyles): void {
// let superStyle: ISelectBoxStyles = {
// selectBackground: styles.selectBackground,
// selectForeground: styles.selectForeground,
// selectBorder: styles.selectBorder
// };
// super.style(superStyle);
// this.enabledSelectBackground = this.selectBackground;
// this.enabledSelectForeground = this.selectForeground;
// this.enabledSelectBorder = this.selectBorder;
this.inputValidationInfoBackground = styles.inputValidationInfoBackground;
this.inputValidationInfoBorder = styles.inputValidationInfoBorder;
this.inputValidationWarningBackground = styles.inputValidationWarningBackground;
this.inputValidationWarningBorder = styles.inputValidationWarningBorder;
this.inputValidationErrorBackground = styles.inputValidationErrorBackground;
this.inputValidationErrorBorder = styles.inputValidationErrorBorder;
// this.inputValidationInfoBackground = styles.inputValidationInfoBackground;
// this.inputValidationInfoBorder = styles.inputValidationInfoBorder;
// this.inputValidationWarningBackground = styles.inputValidationWarningBackground;
// this.inputValidationWarningBorder = styles.inputValidationWarningBorder;
// this.inputValidationErrorBackground = styles.inputValidationErrorBackground;
// this.inputValidationErrorBorder = styles.inputValidationErrorBorder;
}
public setValidation(isValid: boolean, message?: IMessage): void {
this.isValid = isValid;
this.message = message;
if (this.isValid) {
this.selectElement.style.border = `1px solid ${this.selectBorder}`;
} else if (this.message) {
const styles = this.stylesForType(this.message.type);
this.selectElement.style.border = styles.border ? `1px solid ${styles.border}` : '';
}
// {{SQL CARBON TODO}} - apply styles
// if (this.isValid) {
// this.selectElement.style.border = `1px solid ${this.selectBorder}`;
// } else if (this.message) {
// const styles = this.stylesForType(this.message.type);
// this.selectElement.style.border = styles.border ? `1px solid ${styles.border}` : '';
// }
}
public get isContentValid(): boolean {
@@ -171,18 +174,18 @@ export class ListBox extends SelectBox {
public enable(): void {
this.selectElement.disabled = false;
this.selectBackground = this.enabledSelectBackground;
this.selectForeground = this.enabledSelectForeground;
this.selectBorder = this.enabledSelectBorder;
this.applyStyles();
// this.selectBackground = this.enabledSelectBackground;
// this.selectForeground = this.enabledSelectForeground;
// this.selectBorder = this.enabledSelectBorder;
// this.applyStyles();
}
public disable(): void {
this.selectElement.disabled = true;
this.selectBackground = this.disabledSelectBackground;
this.selectForeground = this.disabledSelectForeground;
this.selectBorder = this.disabledSelectBorder;
this.applyStyles();
// this.selectBackground = this.disabledSelectBackground;
// this.selectForeground = this.disabledSelectForeground;
// this.selectBorder = this.disabledSelectBorder;
// this.applyStyles();
}
public onBlur(): void {

View File

@@ -22,7 +22,6 @@ import * as nls from 'vs/nls';
import { TabHeaderComponent } from 'sql/base/browser/ui/panel/tabHeader.component';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { IThemable } from 'vs/base/common/styler';
import { ITabbedPanelStyles } from 'sql/base/browser/ui/panel/panel';
import { createStyleSheet } from 'vs/base/browser/dom';
@@ -83,7 +82,7 @@ let idPool = 0;
</div>
`
})
export class PanelComponent extends Disposable implements IThemable {
export class PanelComponent extends Disposable {
private _options: IPanelOptions = defaultOptions;
@Input() public set options(newOptions: IPanelOptions) {

View File

@@ -18,6 +18,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
import { SelectBoxList } from 'vs/base/browser/ui/selectBox/selectBoxCustom';
import { Event, Emitter } from 'vs/base/common/event';
import { AdsWidget } from 'sql/base/browser/ui/adsWidget';
import { defaultSelectBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
const $ = dom.$;
@@ -45,12 +46,12 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
private _dialogOptions: SelectOptionItemSQL[];
private _selectedOption: string;
private _selectBoxOptions?: ISelectBoxOptions;
private enabledSelectBackground?: Color;
private enabledSelectForeground?: Color;
private enabledSelectBorder?: Color;
private disabledSelectBackground?: Color;
private disabledSelectForeground?: Color;
private disabledSelectBorder?: Color;
// private enabledSelectBackground?: Color;
// private enabledSelectForeground?: Color;
// private enabledSelectBorder?: Color;
// private disabledSelectBackground?: Color;
// private disabledSelectForeground?: Color;
// private disabledSelectBorder?: Color;
private contextViewProvider: IContextViewProvider;
private message?: IMessage;
private _onDidSelect: Emitter<ISelectData>;
@@ -70,7 +71,7 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
constructor(options: SelectOptionItemSQL[] | string[], selectedOption: string, contextViewProvider: IContextViewProvider, container?: HTMLElement, selectBoxOptions?: ISelectBoxOptions, id?: string) {
let optionItems: SelectOptionItemSQL[] = SelectBox.createOptions(options);
super(optionItems, 0, contextViewProvider, undefined, selectBoxOptions);
super(optionItems, 0, contextViewProvider, defaultSelectBoxStyles, selectBoxOptions);
this._onDidSelect = new Emitter<ISelectData>();
this._onDidFocus = new Emitter<void>();
@@ -88,12 +89,13 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
this._onDidSelect.fire(newSelect);
}));
this.enabledSelectBackground = this.selectBackground;
this.enabledSelectForeground = this.selectForeground;
this.enabledSelectBorder = this.selectBorder;
this.disabledSelectBackground = Color.transparent;
this.disabledSelectForeground = undefined;
this.disabledSelectBorder = undefined;
// {{SQL CARBON TODO}} - fix styles
// this.enabledSelectBackground = this.selectBackground;
// this.enabledSelectForeground = this.selectForeground;
// this.enabledSelectBorder = this.selectBorder;
// this.disabledSelectBackground = Color.transparent;
// this.disabledSelectForeground = undefined;
// this.disabledSelectBorder = undefined;
this.contextViewProvider = contextViewProvider;
if (container) {
this.element = dom.append(container, $('.monaco-selectbox.idle'));
@@ -178,13 +180,12 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
this._dialogOptions = options;
}
public override style(styles: ISelectBoxStyles): void {
super.style(styles);
this.enabledSelectBackground = this.selectBackground;
this.enabledSelectForeground = this.selectForeground;
this.enabledSelectBorder = this.selectBorder;
this.disabledSelectBackground = styles.disabledSelectBackground;
this.disabledSelectForeground = styles.disabledSelectForeground;
public style(styles: ISelectBoxStyles): void {
// this.enabledSelectBackground = this.selectBackground;
// this.enabledSelectForeground = this.selectForeground;
// this.enabledSelectBorder = this.selectBorder;
// this.disabledSelectBackground = styles.disabledSelectBackground;
// this.disabledSelectForeground = styles.disabledSelectForeground;
this.inputValidationInfoBorder = styles.inputValidationInfoBorder;
this.inputValidationInfoBackground = styles.inputValidationInfoBackground;
this.inputValidationInfoForeground = styles.inputinputValidationInfoForeground;
@@ -194,7 +195,7 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
this.inputValidationErrorBorder = styles.inputValidationErrorBorder;
this.inputValidationErrorBackground = styles.inputValidationErrorBackground;
this.inputValidationErrorForeground = styles.inputValidationErrorForeground;
this.applyStyles();
//this.applyStyles();
}
public selectWithOptionName(optionName?: string, selectFirstByDefault: boolean = true, forceSelectionEvent: boolean = false): void {
@@ -244,18 +245,18 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
public enable(): void {
this.selectElement.disabled = false;
this.selectBackground = this.enabledSelectBackground;
this.selectForeground = this.enabledSelectForeground;
this.selectBorder = this.enabledSelectBorder;
this.applyStyles();
// this.selectBackground = this.enabledSelectBackground;
// this.selectForeground = this.enabledSelectForeground;
// this.selectBorder = this.enabledSelectBorder;
//this.applyStyles();
}
public disable(): void {
this.selectElement.disabled = true;
this.selectBackground = this.disabledSelectBackground;
this.selectForeground = this.disabledSelectForeground;
this.selectBorder = this.disabledSelectBorder;
this.applyStyles();
// this.selectBackground = this.disabledSelectBackground;
// this.selectForeground = this.disabledSelectForeground;
// this.selectBorder = this.disabledSelectBorder;
//this.applyStyles();
}
public getAriaLabel(): string {
@@ -343,7 +344,7 @@ export class SelectBox extends vsSelectBox implements AdsWidget {
}
this._hideMessage();
this.applyStyles();
//this.applyStyles();
this.message = undefined;
}

View File

@@ -19,7 +19,8 @@ import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { Emitter } from 'vs/base/common/event';
import { CountBadge, ICountBadgetyles } from 'vs/base/browser/ui/countBadge/countBadge';
import { CountBadge } from 'vs/base/browser/ui/countBadge/countBadge';
import { defaultCountBadgeStyles, defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
export type HeaderFilterCommands = 'sort-asc' | 'sort-desc';
@@ -35,17 +36,17 @@ export interface ITableFilterOptions {
*/
disabledFilterMessage?: string;
/**
* The columns are refreshed by default to add the filter menu button to the headers.
* The columns are refreshed by default to add the filter menu button to the headers. The default value is true.
* Set to false to prevent the grid from being re-drawn multiple times by different plugins.
*/
refreshColumns?: boolean;
/**
* The button styles.
*/
buttonStyles: IButtonStyles;
}
const DefaultTableFilterOptions: ITableFilterOptions = {
refreshColumns: true
};
export interface ITableFilterStyles extends IButtonStyles, IInputBoxStyles, IListStyles, ICountBadgetyles {
export interface ITableFilterStyles extends IInputBoxStyles, IListStyles {
}
interface NotificationProvider {
@@ -69,8 +70,9 @@ export class HeaderFilter<T extends Slick.SlickData> {
private okButton?: Button;
private clearButton?: Button;
private cancelButton?: Button;
private sortAscButton?: Button;
private sortDescButton?: Button;
// {{SQL CARBON TODO}} - disable
// private sortAscButton?: Button;
// private sortDescButton?: Button;
private selectAllCheckBox?: Checkbox;
private searchInputBox?: InputBox;
private countBadge?: CountBadge;
@@ -86,7 +88,7 @@ export class HeaderFilter<T extends Slick.SlickData> {
private previouslyFocusedElement: HTMLElement;
private listContainer?: HTMLElement;
constructor(private readonly contextViewProvider: IContextViewProvider, private readonly notificationProvider?: NotificationProvider, private readonly options: ITableFilterOptions = DefaultTableFilterOptions) {
constructor(private readonly options: ITableFilterOptions, private readonly contextViewProvider: IContextViewProvider, private readonly notificationProvider?: NotificationProvider) {
}
public init(grid: Slick.Grid<T>): void {
@@ -182,8 +184,8 @@ export class HeaderFilter<T extends Slick.SlickData> {
private createButtonMenuItem(title: string, command: HeaderFilterCommands, iconClass: string): Button {
const buttonContainer = append(this.menu, $('.slick-header-menu-image-button-container'));
const button = new Button(buttonContainer);
button.icon = { id: `slick-header-menuicon ${iconClass}` };
const button = new Button(buttonContainer, this.options.buttonStyles);
button.icon = `slick-header-menuicon ${iconClass}`;
button.label = title;
button.onDidClick(async () => {
await this.handleMenuItemClick(command, this.columnDef);
@@ -205,20 +207,21 @@ export class HeaderFilter<T extends Slick.SlickData> {
this.searchInputBox = new InputBox(append(searchRow, $('.search-input')), this.contextViewProvider, {
placeholder: localize('table.searchPlaceHolder', "Search")
placeholder: localize('table.searchPlaceHolder', "Search"),
inputBoxStyles: defaultInputBoxStyles
});
const visibleCountContainer = append(searchRow, $('.visible-count'));
visibleCountContainer.setAttribute('aria-live', 'polite');
visibleCountContainer.setAttribute('aria-atomic', 'true');
this.visibleCountBadge = new CountBadge(visibleCountContainer, {
countFormat: localize({ key: 'tableFilter.visibleCount', comment: ['This tells the user how many items are shown in the list. Currently not visible, but read by screen readers.'] }, "{0} Results")
});
}, defaultCountBadgeStyles);
const selectedCountBadgeContainer = append(searchRow, $('.selected-count'));
selectedCountBadgeContainer.setAttribute('aria-live', 'polite');
this.countBadge = new CountBadge(selectedCountBadgeContainer, {
countFormat: localize({ key: 'tableFilter.selectedCount', comment: ['This tells the user how many items are selected in the list'] }, "{0} Selected")
});
}, defaultCountBadgeStyles);
this.searchInputBox.onDidChange(async (newString) => {
this.filteredListData = this.listData.filter(element => element.value?.toUpperCase().indexOf(newString.toUpperCase()) !== -1);
@@ -405,27 +408,31 @@ export class HeaderFilter<T extends Slick.SlickData> {
// Make sure the menu can fit in the screen.
this.menu.style.height = `${Math.min(DefaultMenuHeight, window.innerHeight - MenuBarHeight) - MenuVerticalPadding}px`;
this.sortAscButton = this.createButtonMenuItem(localize('table.sortAscending', "Sort Ascending"), 'sort-asc', 'ascending');
this.sortDescButton = this.createButtonMenuItem(localize('table.sortDescending', "Sort Descending"), 'sort-desc', 'descending');
// {{SQL CARBON TODO}} - style buttons
// this.sortAscButton = this.createButtonMenuItem(localize('table.sortAscending', "Sort Ascending"), 'sort-asc', 'ascending');
// this.sortDescButton = this.createButtonMenuItem(localize('table.sortDescending', "Sort Descending"), 'sort-desc', 'descending');
this.createButtonMenuItem(localize('table.sortAscending', "Sort Ascending"), 'sort-asc', 'ascending');
this.createButtonMenuItem(localize('table.sortDescending', "Sort Descending"), 'sort-desc', 'descending');
this.createSearchInputRow();
await this.createFilterList();
const buttonGroupContainer = append(this.menu, $('.filter-menu-button-container'));
this.okButton = this.createButton(buttonGroupContainer, 'filter-ok-button', localize('headerFilter.ok', "OK"));
this.okButton = this.createButton(buttonGroupContainer, 'filter-ok-button', localize('headerFilter.ok', "OK"), this.options.buttonStyles);
this.okButton.onDidClick(async () => {
this.columnDef.filterValues = this.listData.filter(element => element.checked).map(element => element.value);
this.setButtonImage($menuButton, this.columnDef.filterValues.length > 0);
await this.handleApply(this.columnDef);
});
this.clearButton = this.createButton(buttonGroupContainer, 'filter-clear-button', localize('headerFilter.clear', "Clear"), { secondary: true });
this.clearButton = this.createButton(buttonGroupContainer, 'filter-clear-button', localize('headerFilter.clear', "Clear"), { secondary: true, ...this.options.buttonStyles });
this.clearButton.onDidClick(async () => {
this.columnDef.filterValues!.length = 0;
this.setButtonImage($menuButton, false);
await this.handleApply(this.columnDef);
});
this.cancelButton = this.createButton(buttonGroupContainer, 'filter-cancel-button', localize('headerFilter.cancel', "Cancel"), { secondary: true });
this.cancelButton = this.createButton(buttonGroupContainer, 'filter-cancel-button', localize('headerFilter.cancel', "Cancel"), { secondary: true, ...this.options.buttonStyles });
this.cancelButton.onDidClick(() => {
this.hideMenu();
});
@@ -441,15 +448,16 @@ export class HeaderFilter<T extends Slick.SlickData> {
private applyStyles() {
if (this.filterStyles) {
this.okButton?.style(this.filterStyles);
this.cancelButton?.style(this.filterStyles);
this.clearButton?.style(this.filterStyles);
this.sortAscButton?.style(this.filterStyles);
this.sortDescButton?.style(this.filterStyles);
this.searchInputBox?.style(this.filterStyles);
this.countBadge?.style(this.filterStyles);
this.visibleCountBadge?.style(this.filterStyles);
this.list?.style(this.filterStyles);
// {{SQL CARBON TODO}} - apply styles
// this.okButton?.style(this.filterStyles);
// this.cancelButton?.style(this.filterStyles);
// this.clearButton?.style(this.filterStyles);
// this.sortAscButton?.style(this.filterStyles);
// this.sortDescButton?.style(this.filterStyles);
// this.searchInputBox?.style(this.filterStyles);
// this.countBadge?.style(this.filterStyles);
// this.visibleCountBadge?.style(this.filterStyles);
// this.list?.style(this.filterStyles);
}
}

View File

@@ -15,7 +15,7 @@ import { mixin } from 'vs/base/common/objects';
import { IDisposable } from 'vs/base/common/lifecycle';
import { Orientation } from 'vs/base/browser/ui/splitview/splitview';
import { Widget } from 'vs/base/browser/ui/widget';
import { isArray, isBoolean } from 'vs/base/common/types';
import { isBoolean } from 'vs/base/common/types';
import { Event, Emitter } from 'vs/base/common/event';
import { range } from 'vs/base/common/arrays';
import { AsyncDataProvider } from 'sql/base/browser/ui/table/asyncDataView';
@@ -23,6 +23,7 @@ import { IDisposableDataProvider } from 'sql/base/common/dataProvider';
import { IAccessibilityProvider } from 'sql/base/browser/ui/accessibility/accessibilityProvider';
import { IQuickInputProvider } from 'sql/base/browser/ui/quickInput/quickInputProvider';
import { localize } from 'vs/nls';
import { IThemable } from 'sql/platform/theme/common/vsstyler';
function getDefaultOptions<T>(): Slick.GridOptions<T> {
return <Slick.GridOptions<T>>{
@@ -32,7 +33,7 @@ function getDefaultOptions<T>(): Slick.GridOptions<T> {
};
}
export class Table<T extends Slick.SlickData> extends Widget implements IDisposable {
export class Table<T extends Slick.SlickData> extends Widget implements IDisposable, IThemable {
protected styleElement: HTMLStyleElement;
protected idPrefix: string;
@@ -75,10 +76,10 @@ export class Table<T extends Slick.SlickData> extends Widget implements IDisposa
configuration?: ITableConfiguration<T>,
options?: Slick.GridOptions<T>) {
super();
if (!configuration || !configuration.dataProvider || isArray(configuration.dataProvider)) {
if (!configuration || !configuration.dataProvider || Array.isArray(configuration.dataProvider)) {
this._data = new TableDataView<T>(configuration && configuration.dataProvider as Array<T>);
} else {
this._data = configuration.dataProvider;
this._data = <any>configuration.dataProvider;
}
this._register(this._data);

View File

@@ -11,6 +11,7 @@ import * as DOM from 'vs/base/browser/dom';
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/browser/dropdown';
import { Event } from 'vs/base/common/event';
import { Disposable } from 'vs/base/common/lifecycle';
import { defaultInputBoxStyles } from 'vs/platform/theme/browser/defaultStyles';
const InverseKeyCodeMap: { [k: string]: number } = Object.fromEntries(Object.entries(EVENT_KEY_CODE_MAP).map(([key, value]) => [value, Number(key)]));
@@ -64,7 +65,8 @@ export class TableCellEditorFactory {
public init(): void {
this._input = new InputBox(this._args.container, self._contextViewProvider, {
type: inputType
type: inputType,
inputBoxStyles: defaultInputBoxStyles
});
self._options.editorStyler(this._input);
this._input.element.style.height = '100%';

View File

@@ -227,7 +227,7 @@ export class ActionBar extends ActionRunner implements IActionRunner {
let item: IActionViewItem | undefined = undefined;
if (this._options.actionViewItemProvider) {
item = this._options.actionViewItemProvider(action);
item = this._options.actionViewItemProvider(action, {});
}
if (!item) {

View File

@@ -52,7 +52,7 @@ export class Taskbar {
orientation: options.orientation,
ariaLabel: options.ariaLabel,
actionViewItemProvider: (action: IAction): IActionViewItem | undefined => {
return options.actionViewItemProvider ? options.actionViewItemProvider(action) : undefined;
return options.actionViewItemProvider ? options.actionViewItemProvider(action, {}) : undefined;
}
}
);
@@ -63,7 +63,7 @@ export class Taskbar {
orientation: options.orientation,
ariaLabel: options.ariaLabel,
actionViewItemProvider: (action: IAction): IActionViewItem | undefined => {
return options.actionViewItemProvider ? options.actionViewItemProvider(action) : undefined;
return options.actionViewItemProvider ? options.actionViewItemProvider(action, {}) : undefined;
}
}
);

View File

@@ -14,7 +14,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import * as _ from 'sql/base/parts/tree/browser/tree';
import { IDragAndDropData } from 'vs/base/browser/dnd';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { createKeybinding, Keybinding, SimpleKeybinding } from 'vs/base/common/keybindings';
import { Keybinding, decodeKeybinding } from 'vs/base/common/keybindings';
export interface IKeyBindingCallback {
(tree: _.ITree, event: IKeyboardEvent): void;
@@ -63,7 +63,7 @@ export class KeybindingDispatcher {
}
public has(keybinding: KeyCode): boolean {
let target = createKeybinding(keybinding, platform.OS);
let target = decodeKeybinding(keybinding, platform.OS);
if (target !== null) {
for (const a of this._arr) {
if (target.equals(a.keybinding)) {
@@ -76,16 +76,16 @@ export class KeybindingDispatcher {
public set(keybinding: number, callback: IKeyBindingCallback) {
this._arr.push({
keybinding: createKeybinding(keybinding, platform.OS),
keybinding: decodeKeybinding(keybinding, platform.OS),
callback: callback
});
}
public dispatch(keybinding: SimpleKeybinding): IKeyBindingCallback | null {
public dispatch(keybinding: Keybinding): IKeyBindingCallback | null {
// Loop from the last to the first to handle overwrites
for (let i = this._arr.length - 1; i >= 0; i--) {
let item = this._arr[i];
if (keybinding.toChord().equals(item.keybinding)) {
if (keybinding.equals(item.keybinding)) {
return item.callback;
}
}
@@ -266,7 +266,7 @@ export class DefaultController implements _.IController {
}
private onKey(bindings: KeybindingDispatcher, tree: _.ITree, event: IKeyboardEvent): boolean {
const handler: any = bindings.dispatch(event.toKeybinding());
const handler: any = bindings.dispatch(event.toKeyCodeChord().toKeybinding());
if (handler) {
// TODO: TS 3.1 upgrade. Why are we checking against void?
if (handler(tree, event)) {

View File

@@ -20,11 +20,12 @@ import { HeightMap, IViewItem } from 'sql/base/parts/tree/browser/treeViewModel'
import * as _ from 'sql/base/parts/tree/browser/tree';
import { KeyCode } from 'vs/base/common/keyCodes';
import { Event, Emitter } from 'vs/base/common/event';
import { DataTransfers, StaticDND, IDragAndDropData } from 'vs/base/browser/dnd';
import { DataTransfers, IDragAndDropData } from 'vs/base/browser/dnd';
import { DefaultTreestyler } from './treeDefaults';
import { Delayer, timeout } from 'vs/base/common/async';
import { MappedNavigator } from 'sql/base/common/navigator';
import { onUnexpectedError } from 'vs/base/common/errors';
import { StaticDND } from 'vs/base/browser/ui/list/listView';
export interface IRow {
element: HTMLElement | null;

View File

@@ -96,7 +96,7 @@ suite('Overflow Actionbar tests', () => {
assert(overflowActionbar.actionsList.children.length === 4);
assert(overflowActionbar.items.length === 4);
assert.strictEqual(getMoreItemPlaceholderIndex(overflowActionbar.items), 2);
assert(overflowActionbar.overflow.childElementCount === 1);
assert(<any>overflowActionbar.overflow.childElementCount === 1);
verifyOverflowFocusedIndex(overflowActionbar, 3);
// move separator to overflow