@vscode-elements/elements 2.0.0-pre.1 → 2.0.0-pre.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/custom-elements.json +4505 -2986
- package/dist/bundled.js +1157 -934
- package/dist/includes/VscElement.d.ts +9 -1
- package/dist/includes/VscElement.d.ts.map +1 -1
- package/dist/includes/VscElement.js +38 -5
- package/dist/includes/VscElement.js.map +1 -1
- package/dist/includes/form-button-widget/LabelledCheckboxOrRadio.d.ts.map +1 -1
- package/dist/includes/form-button-widget/base.styles.js +8 -8
- package/dist/includes/form-button-widget/base.styles.js.map +1 -1
- package/dist/includes/uniqueId.d.ts.map +1 -1
- package/dist/includes/vscode-select/OptionListController.d.ts +61 -0
- package/dist/includes/vscode-select/OptionListController.d.ts.map +1 -0
- package/dist/includes/vscode-select/OptionListController.js +373 -0
- package/dist/includes/vscode-select/OptionListController.js.map +1 -0
- package/dist/includes/vscode-select/helpers.d.ts +4 -2
- package/dist/includes/vscode-select/helpers.d.ts.map +1 -1
- package/dist/includes/vscode-select/helpers.js +26 -0
- package/dist/includes/vscode-select/helpers.js.map +1 -1
- package/dist/includes/vscode-select/styles.d.ts.map +1 -1
- package/dist/includes/vscode-select/styles.js +137 -86
- package/dist/includes/vscode-select/styles.js.map +1 -1
- package/dist/includes/vscode-select/template-elements.d.ts +1 -0
- package/dist/includes/vscode-select/template-elements.d.ts.map +1 -1
- package/dist/includes/vscode-select/template-elements.js +14 -1
- package/dist/includes/vscode-select/template-elements.js.map +1 -1
- package/dist/includes/vscode-select/types.d.ts +11 -7
- package/dist/includes/vscode-select/types.d.ts.map +1 -1
- package/dist/includes/vscode-select/types.js.map +1 -1
- package/dist/includes/vscode-select/vscode-select-base.d.ts +42 -31
- package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
- package/dist/includes/vscode-select/vscode-select-base.js +379 -245
- package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -0
- package/dist/main.js.map +1 -1
- package/dist/vscode-badge/vscode-badge.d.ts.map +1 -1
- package/dist/vscode-badge/vscode-badge.js +2 -2
- package/dist/vscode-badge/vscode-badge.js.map +1 -1
- package/dist/vscode-button/vscode-button.d.ts +1 -0
- package/dist/vscode-button/vscode-button.d.ts.map +1 -1
- package/dist/vscode-button/vscode-button.js +8 -2
- package/dist/vscode-button/vscode-button.js.map +1 -1
- package/dist/vscode-button/vscode-button.styles.d.ts.map +1 -1
- package/dist/vscode-button/vscode-button.styles.js +60 -11
- package/dist/vscode-button/vscode-button.styles.js.map +1 -1
- package/dist/vscode-button-group/index.d.ts +2 -0
- package/dist/vscode-button-group/index.d.ts.map +1 -0
- package/dist/vscode-button-group/index.js +2 -0
- package/dist/vscode-button-group/index.js.map +1 -0
- package/dist/vscode-button-group/vscode-button-group.d.ts +29 -0
- package/dist/vscode-button-group/vscode-button-group.d.ts.map +1 -0
- package/dist/vscode-button-group/vscode-button-group.js +38 -0
- package/dist/vscode-button-group/vscode-button-group.js.map +1 -0
- package/dist/vscode-button-group/vscode-button-group.styles.d.ts +4 -0
- package/dist/vscode-button-group/vscode-button-group.styles.d.ts.map +1 -0
- package/dist/vscode-button-group/vscode-button-group.styles.js +35 -0
- package/dist/vscode-button-group/vscode-button-group.styles.js.map +1 -0
- package/dist/vscode-checkbox/vscode-checkbox.d.ts +10 -10
- package/dist/vscode-checkbox/vscode-checkbox.d.ts.map +1 -1
- package/dist/vscode-checkbox/vscode-checkbox.js +12 -14
- package/dist/vscode-checkbox/vscode-checkbox.js.map +1 -1
- package/dist/vscode-checkbox/vscode-checkbox.styles.js +2 -2
- package/dist/vscode-checkbox/vscode-checkbox.styles.js.map +1 -1
- package/dist/vscode-checkbox-group/vscode-checkbox-group.d.ts.map +1 -1
- package/dist/vscode-checkbox-group/vscode-checkbox-group.js +2 -2
- package/dist/vscode-checkbox-group/vscode-checkbox-group.js.map +1 -1
- package/dist/vscode-collapsible/vscode-collapsible.d.ts +6 -6
- package/dist/vscode-collapsible/vscode-collapsible.d.ts.map +1 -1
- package/dist/vscode-collapsible/vscode-collapsible.js +8 -8
- package/dist/vscode-collapsible/vscode-collapsible.js.map +1 -1
- package/dist/vscode-collapsible/vscode-collapsible.styles.js +6 -6
- package/dist/vscode-collapsible/vscode-collapsible.styles.js.map +1 -1
- package/dist/vscode-context-menu/vscode-context-menu.d.ts +8 -8
- package/dist/vscode-context-menu/vscode-context-menu.d.ts.map +1 -1
- package/dist/vscode-context-menu/vscode-context-menu.js +9 -9
- package/dist/vscode-context-menu/vscode-context-menu.js.map +1 -1
- package/dist/vscode-context-menu/vscode-context-menu.styles.js +7 -7
- package/dist/vscode-context-menu/vscode-context-menu.styles.js.map +1 -1
- package/dist/vscode-context-menu-item/vscode-context-menu-item.d.ts +9 -9
- package/dist/vscode-context-menu-item/vscode-context-menu-item.d.ts.map +1 -1
- package/dist/vscode-context-menu-item/vscode-context-menu-item.js +11 -11
- package/dist/vscode-context-menu-item/vscode-context-menu-item.js.map +1 -1
- package/dist/vscode-context-menu-item/vscode-context-menu-item.styles.d.ts.map +1 -1
- package/dist/vscode-context-menu-item/vscode-context-menu-item.styles.js +10 -13
- package/dist/vscode-context-menu-item/vscode-context-menu-item.styles.js.map +1 -1
- package/dist/vscode-divider/vscode-divider.d.ts +2 -0
- package/dist/vscode-divider/vscode-divider.d.ts.map +1 -1
- package/dist/vscode-divider/vscode-divider.js +4 -2
- package/dist/vscode-divider/vscode-divider.js.map +1 -1
- package/dist/vscode-divider/vscode-divider.styles.js +1 -1
- package/dist/vscode-divider/vscode-divider.styles.js.map +1 -1
- package/dist/vscode-form-container/vscode-form-container.d.ts.map +1 -1
- package/dist/vscode-form-container/vscode-form-container.js +2 -2
- package/dist/vscode-form-container/vscode-form-container.js.map +1 -1
- package/dist/vscode-form-group/vscode-form-group.d.ts.map +1 -1
- package/dist/vscode-form-group/vscode-form-group.js +2 -2
- package/dist/vscode-form-group/vscode-form-group.js.map +1 -1
- package/dist/vscode-form-helper/vscode-form-helper.d.ts.map +1 -1
- package/dist/vscode-form-helper/vscode-form-helper.js +1 -2
- package/dist/vscode-form-helper/vscode-form-helper.js.map +1 -1
- package/dist/vscode-icon/vscode-icon.d.ts +4 -4
- package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
- package/dist/vscode-icon/vscode-icon.js +7 -6
- package/dist/vscode-icon/vscode-icon.js.map +1 -1
- package/dist/vscode-icon/vscode-icon.styles.d.ts.map +1 -1
- package/dist/vscode-icon/vscode-icon.styles.js +10 -4
- package/dist/vscode-icon/vscode-icon.styles.js.map +1 -1
- package/dist/vscode-label/vscode-label.d.ts +3 -3
- package/dist/vscode-label/vscode-label.d.ts.map +1 -1
- package/dist/vscode-label/vscode-label.js +14 -12
- package/dist/vscode-label/vscode-label.js.map +1 -1
- package/dist/vscode-label/vscode-label.styles.js +4 -4
- package/dist/vscode-label/vscode-label.styles.js.map +1 -1
- package/dist/vscode-multi-select/vscode-multi-select.d.ts +39 -26
- package/dist/vscode-multi-select/vscode-multi-select.d.ts.map +1 -1
- package/dist/vscode-multi-select/vscode-multi-select.js +184 -161
- package/dist/vscode-multi-select/vscode-multi-select.js.map +1 -1
- package/dist/vscode-option/vscode-option.d.ts.map +1 -1
- package/dist/vscode-option/vscode-option.js +2 -2
- package/dist/vscode-option/vscode-option.js.map +1 -1
- package/dist/vscode-progress-ring/vscode-progress-ring.d.ts +2 -0
- package/dist/vscode-progress-ring/vscode-progress-ring.d.ts.map +1 -1
- package/dist/vscode-progress-ring/vscode-progress-ring.js +4 -2
- package/dist/vscode-progress-ring/vscode-progress-ring.js.map +1 -1
- package/dist/vscode-progress-ring/vscode-progress-ring.styles.js +1 -1
- package/dist/vscode-progress-ring/vscode-progress-ring.styles.js.map +1 -1
- package/dist/vscode-radio/vscode-radio.d.ts +9 -8
- package/dist/vscode-radio/vscode-radio.d.ts.map +1 -1
- package/dist/vscode-radio/vscode-radio.js +11 -9
- package/dist/vscode-radio/vscode-radio.js.map +1 -1
- package/dist/vscode-radio/vscode-radio.styles.js +2 -2
- package/dist/vscode-radio/vscode-radio.styles.js.map +1 -1
- package/dist/vscode-radio-group/vscode-radio-group.d.ts.map +1 -1
- package/dist/vscode-radio-group/vscode-radio-group.js +2 -2
- package/dist/vscode-radio-group/vscode-radio-group.js.map +1 -1
- package/dist/vscode-scrollable/vscode-scrollable.d.ts +61 -17
- package/dist/vscode-scrollable/vscode-scrollable.d.ts.map +1 -1
- package/dist/vscode-scrollable/vscode-scrollable.js +193 -88
- package/dist/vscode-scrollable/vscode-scrollable.js.map +1 -1
- package/dist/vscode-scrollable/vscode-scrollable.styles.d.ts.map +1 -1
- package/dist/vscode-scrollable/vscode-scrollable.styles.js +17 -5
- package/dist/vscode-scrollable/vscode-scrollable.styles.js.map +1 -1
- package/dist/vscode-single-select/vscode-single-select.d.ts +39 -28
- package/dist/vscode-single-select/vscode-single-select.d.ts.map +1 -1
- package/dist/vscode-single-select/vscode-single-select.js +180 -125
- package/dist/vscode-single-select/vscode-single-select.js.map +1 -1
- package/dist/vscode-split-layout/vscode-split-layout.d.ts +3 -1
- package/dist/vscode-split-layout/vscode-split-layout.d.ts.map +1 -1
- package/dist/vscode-split-layout/vscode-split-layout.js +8 -3
- package/dist/vscode-split-layout/vscode-split-layout.js.map +1 -1
- package/dist/vscode-split-layout/vscode-split-layout.styles.js +3 -3
- package/dist/vscode-split-layout/vscode-split-layout.styles.js.map +1 -1
- package/dist/vscode-tab-header/vscode-tab-header.d.ts.map +1 -1
- package/dist/vscode-tab-header/vscode-tab-header.js +2 -2
- package/dist/vscode-tab-header/vscode-tab-header.js.map +1 -1
- package/dist/vscode-tab-panel/vscode-tab-panel.d.ts.map +1 -1
- package/dist/vscode-tab-panel/vscode-tab-panel.js +2 -2
- package/dist/vscode-tab-panel/vscode-tab-panel.js.map +1 -1
- package/dist/vscode-table/helpers.d.ts.map +1 -1
- package/dist/vscode-table/vscode-table.d.ts +1 -0
- package/dist/vscode-table/vscode-table.d.ts.map +1 -1
- package/dist/vscode-table/vscode-table.js +20 -16
- package/dist/vscode-table/vscode-table.js.map +1 -1
- package/dist/vscode-table-body/vscode-table-body.d.ts.map +1 -1
- package/dist/vscode-table-body/vscode-table-body.js +2 -2
- package/dist/vscode-table-body/vscode-table-body.js.map +1 -1
- package/dist/vscode-table-cell/vscode-table-cell.d.ts.map +1 -1
- package/dist/vscode-table-cell/vscode-table-cell.js +2 -2
- package/dist/vscode-table-cell/vscode-table-cell.js.map +1 -1
- package/dist/vscode-table-header/vscode-table-header.d.ts.map +1 -1
- package/dist/vscode-table-header/vscode-table-header.js +2 -2
- package/dist/vscode-table-header/vscode-table-header.js.map +1 -1
- package/dist/vscode-table-header-cell/vscode-table-header-cell.d.ts.map +1 -1
- package/dist/vscode-table-header-cell/vscode-table-header-cell.js +2 -2
- package/dist/vscode-table-header-cell/vscode-table-header-cell.js.map +1 -1
- package/dist/vscode-table-row/vscode-table-row.d.ts.map +1 -1
- package/dist/vscode-table-row/vscode-table-row.js +2 -2
- package/dist/vscode-table-row/vscode-table-row.js.map +1 -1
- package/dist/vscode-tabs/vscode-tabs.d.ts.map +1 -1
- package/dist/vscode-tabs/vscode-tabs.js +2 -2
- package/dist/vscode-tabs/vscode-tabs.js.map +1 -1
- package/dist/vscode-textarea/vscode-textarea.d.ts +18 -18
- package/dist/vscode-textarea/vscode-textarea.d.ts.map +1 -1
- package/dist/vscode-textarea/vscode-textarea.js +20 -20
- package/dist/vscode-textarea/vscode-textarea.js.map +1 -1
- package/dist/vscode-textarea/vscode-textarea.styles.d.ts.map +1 -1
- package/dist/vscode-textarea/vscode-textarea.styles.js +31 -22
- package/dist/vscode-textarea/vscode-textarea.styles.js.map +1 -1
- package/dist/vscode-textfield/vscode-textfield.d.ts.map +1 -1
- package/dist/vscode-textfield/vscode-textfield.js +2 -2
- package/dist/vscode-textfield/vscode-textfield.js.map +1 -1
- package/dist/vscode-toolbar-button/index.d.ts +2 -0
- package/dist/vscode-toolbar-button/index.d.ts.map +1 -0
- package/dist/vscode-toolbar-button/index.js +2 -0
- package/dist/vscode-toolbar-button/index.js.map +1 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.d.ts +26 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.d.ts.map +1 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.js +83 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.js.map +1 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.d.ts +4 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.d.ts.map +1 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.js +77 -0
- package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.js.map +1 -0
- package/dist/vscode-toolbar-container/index.d.ts +2 -0
- package/dist/vscode-toolbar-container/index.d.ts.map +1 -0
- package/dist/vscode-toolbar-container/index.js +2 -0
- package/dist/vscode-toolbar-container/index.js.map +1 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.d.ts +17 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.d.ts.map +1 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.js +25 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.js.map +1 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.d.ts +4 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.d.ts.map +1 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.js +14 -0
- package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.js.map +1 -0
- package/dist/vscode-tree/helpers.d.ts +11 -0
- package/dist/vscode-tree/helpers.d.ts.map +1 -0
- package/dist/vscode-tree/helpers.js +139 -0
- package/dist/vscode-tree/helpers.js.map +1 -0
- package/dist/vscode-tree/tree-context.d.ts +33 -0
- package/dist/vscode-tree/tree-context.d.ts.map +1 -0
- package/dist/vscode-tree/tree-context.js +4 -0
- package/dist/vscode-tree/tree-context.js.map +1 -0
- package/dist/vscode-tree/vscode-tree.d.ts +35 -150
- package/dist/vscode-tree/vscode-tree.d.ts.map +1 -1
- package/dist/vscode-tree/vscode-tree.js +263 -627
- package/dist/vscode-tree/vscode-tree.js.map +1 -1
- package/dist/vscode-tree/vscode-tree.styles.d.ts.map +1 -1
- package/dist/vscode-tree/vscode-tree.styles.js +4 -240
- package/dist/vscode-tree/vscode-tree.styles.js.map +1 -1
- package/dist/vscode-tree-item/index.d.ts +2 -0
- package/dist/vscode-tree-item/index.d.ts.map +1 -0
- package/dist/vscode-tree-item/index.js +2 -0
- package/dist/vscode-tree-item/index.js.map +1 -0
- package/dist/vscode-tree-item/vscode-tree-item.d.ts +45 -0
- package/dist/vscode-tree-item/vscode-tree-item.d.ts.map +1 -0
- package/dist/vscode-tree-item/vscode-tree-item.js +377 -0
- package/dist/vscode-tree-item/vscode-tree-item.js.map +1 -0
- package/dist/vscode-tree-item/vscode-tree-item.styles.d.ts +4 -0
- package/dist/vscode-tree-item/vscode-tree-item.styles.d.ts.map +1 -0
- package/dist/vscode-tree-item/vscode-tree-item.styles.js +165 -0
- package/dist/vscode-tree-item/vscode-tree-item.styles.js.map +1 -0
- package/package.json +38 -38
- package/vscode.css-custom-data.json +47 -58
- package/vscode.html-custom-data.json +166 -81
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { TemplateResult } from 'lit';
|
|
2
2
|
import { VscodeSelectBase } from '../includes/vscode-select/vscode-select-base.js';
|
|
3
3
|
import { AssociatedFormControl } from '../includes/AssociatedFormControl.js';
|
|
4
|
+
export type VscSingleSelectCreateOptionEvent = CustomEvent<{
|
|
5
|
+
value: string;
|
|
6
|
+
}>;
|
|
4
7
|
/**
|
|
5
8
|
* Allows to select an item from multiple options.
|
|
6
9
|
*
|
|
@@ -23,27 +26,29 @@ import { AssociatedFormControl } from '../includes/AssociatedFormControl.js';
|
|
|
23
26
|
* @prop {boolean} invalid
|
|
24
27
|
* @attr {boolean} invalid
|
|
25
28
|
* @attr name - Name which is used as a variable name in the data of the form-container.
|
|
29
|
+
*
|
|
26
30
|
* @cssprop [--dropdown-z-index=2]
|
|
27
|
-
* @cssprop --vscode-badge-background
|
|
28
|
-
* @cssprop --vscode-badge-foreground
|
|
29
|
-
* @cssprop --vscode-settings-dropdownBorder
|
|
30
|
-
* @cssprop --vscode-settings-checkboxBackground
|
|
31
|
-
* @cssprop --vscode-settings-dropdownBackground
|
|
32
|
-
* @cssprop --vscode-settings-
|
|
33
|
-
* @cssprop --vscode-
|
|
34
|
-
* @cssprop --vscode-
|
|
35
|
-
* @cssprop --vscode-
|
|
36
|
-
* @cssprop --vscode-font-
|
|
37
|
-
* @cssprop --vscode-font-
|
|
38
|
-
* @cssprop --vscode-
|
|
39
|
-
* @cssprop --vscode-
|
|
40
|
-
* @cssprop --vscode-
|
|
41
|
-
* @cssprop --vscode-list-
|
|
42
|
-
* @cssprop --vscode-list-
|
|
43
|
-
* @cssprop --vscode-list-
|
|
44
|
-
* @cssprop --vscode-list-
|
|
45
|
-
* @cssprop --vscode-list-
|
|
46
|
-
* @cssprop --vscode-
|
|
31
|
+
* @cssprop [--vscode-badge-background=#616161]
|
|
32
|
+
* @cssprop [--vscode-badge-foreground=#f8f8f8]
|
|
33
|
+
* @cssprop [--vscode-settings-dropdownBorder=#3c3c3c]
|
|
34
|
+
* @cssprop [--vscode-settings-checkboxBackground=#313131]
|
|
35
|
+
* @cssprop [--vscode-settings-dropdownBackground=#313131]
|
|
36
|
+
* @cssprop [--vscode-settings-dropdownForeground=#cccccc]
|
|
37
|
+
* @cssprop [--vscode-settings-dropdownListBorder=#454545]
|
|
38
|
+
* @cssprop [--vscode-focusBorder=#0078d4]
|
|
39
|
+
* @cssprop [--vscode-foreground=#cccccc]
|
|
40
|
+
* @cssprop [--vscode-font-family=sans-serif]
|
|
41
|
+
* @cssprop [--vscode-font-size=13px]
|
|
42
|
+
* @cssprop [--vscode-font-weight=normal]
|
|
43
|
+
* @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]
|
|
44
|
+
* @cssprop [--vscode-inputValidation-errorBorder=#be1100]
|
|
45
|
+
* @cssprop [--vscode-list-activeSelectionBackground=#04395e]
|
|
46
|
+
* @cssprop [--vscode-list-activeSelectionForeground=#ffffff]
|
|
47
|
+
* @cssprop [--vscode-list-focusOutline=#0078d4]
|
|
48
|
+
* @cssprop [--vscode-list-focusHighlightForeground=#2aaaff]
|
|
49
|
+
* @cssprop [--vscode-list-highlightForeground=#2aaaff]
|
|
50
|
+
* @cssprop [--vscode-list-hoverBackground=#2a2d2e]
|
|
51
|
+
* @cssprop [--vscode-list-hoverForeground=#ffffff]
|
|
47
52
|
*/
|
|
48
53
|
export declare class VscodeSingleSelect extends VscodeSelectBase implements AssociatedFormControl {
|
|
49
54
|
static styles: import("lit").CSSResult[];
|
|
@@ -52,8 +57,6 @@ export declare class VscodeSingleSelect extends VscodeSelectBase implements Asso
|
|
|
52
57
|
/** @internal */
|
|
53
58
|
static formAssociated: boolean;
|
|
54
59
|
defaultValue: string;
|
|
55
|
-
/** @internal */
|
|
56
|
-
role: string;
|
|
57
60
|
name: string | undefined;
|
|
58
61
|
set selectedIndex(val: number);
|
|
59
62
|
get selectedIndex(): number;
|
|
@@ -77,20 +80,28 @@ export declare class VscodeSingleSelect extends VscodeSelectBase implements Asso
|
|
|
77
80
|
/** @internal */
|
|
78
81
|
get type(): 'select-one';
|
|
79
82
|
get form(): HTMLFormElement | null;
|
|
83
|
+
/**
|
|
84
|
+
* This variable was introduced for cases where the value is set before the corresponding option
|
|
85
|
+
* exists. This can happen while a framework like Vue or React is rendering the component.
|
|
86
|
+
*/
|
|
80
87
|
private _requestedValueToSetLater;
|
|
88
|
+
protected _createAndSelectSuggestedOption(): Promise<void>;
|
|
89
|
+
protected _dispatchChangeEvent(): void;
|
|
90
|
+
protected _setStateFromSlottedElements(): void;
|
|
81
91
|
protected _onSlotChange(): void;
|
|
82
|
-
protected
|
|
83
|
-
protected
|
|
84
|
-
protected
|
|
85
|
-
private _onOptionClick;
|
|
86
|
-
private _manageRequired;
|
|
92
|
+
protected _onEnterKeyDown(ev: KeyboardEvent): void;
|
|
93
|
+
protected _onOptionClick(ev: MouseEvent): void;
|
|
94
|
+
protected _manageRequired(): void;
|
|
87
95
|
protected _renderSelectFace(): TemplateResult;
|
|
88
96
|
protected _renderComboboxFace(): TemplateResult;
|
|
89
|
-
|
|
97
|
+
render(): TemplateResult;
|
|
90
98
|
}
|
|
91
99
|
declare global {
|
|
92
100
|
interface HTMLElementTagNameMap {
|
|
93
101
|
'vscode-single-select': VscodeSingleSelect;
|
|
94
102
|
}
|
|
103
|
+
interface GlobalEventHandlersEventMap {
|
|
104
|
+
'vsc-single-select-create-option': VscSingleSelectCreateOptionEvent;
|
|
105
|
+
}
|
|
95
106
|
}
|
|
96
107
|
//# sourceMappingURL=vscode-single-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-single-select.d.ts","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"vscode-single-select.d.ts","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAC,MAAM,KAAK,CAAC;AAKrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;AAG3E,MAAM,MAAM,gCAAgC,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,kBACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAgB,MAAM,4BAAU;IAEhC,gBAAgB;IAChB,OAAgB,iBAAiB,EAAE,cAAc,CAG/C;IAEF,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAG7B,YAAY,SAAM;IAGlB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC,IACI,aAAa,CAAC,GAAG,EAAE,MAAM,EAe5B;IACD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAWpB;IACD,IAAI,KAAK,IAAI,MAAM,CAElB;IAGD,QAAQ,UAAS;IAEjB,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,YAAY,YAEf;IAED,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAKzB,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,gBAAgB;;IAqBf,iBAAiB,IAAI,IAAI;IAQlC,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB;IAChB,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,cAAc,GAChC,IAAI;IAMP,gBAAgB;IAChB,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED;;;OAGG;IACH,OAAO,CAAC,yBAAyB,CAAM;cAEd,+BAA+B;cAgBrC,oBAAoB,IAAI,IAAI;cAc5B,4BAA4B,IAAI,IAAI;cASpC,aAAa,IAAI,IAAI;cAwBrB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;cAoCxC,cAAc,CAAC,EAAE,EAAE,UAAU;cAkC7B,eAAe;cAcf,iBAAiB,IAAI,cAAc;cAuBnC,mBAAmB,IAAI,cAAc;IAiD/C,MAAM,IAAI,cAAc;CAUlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;IAED,UAAU,2BAA2B;QACnC,iCAAiC,EAAE,gCAAgC,CAAC;KACrE;CACF"}
|
|
@@ -5,12 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { html, LitElement } from 'lit';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { property, query } from 'lit/decorators.js';
|
|
9
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
10
|
+
import { customElement } from '../includes/VscElement.js';
|
|
10
11
|
import { chevronDownIcon } from '../includes/vscode-select/template-elements.js';
|
|
11
12
|
import { VscodeSelectBase } from '../includes/vscode-select/vscode-select-base.js';
|
|
12
13
|
import styles from './vscode-single-select.styles.js';
|
|
13
|
-
import { highlightRanges } from '../includes/vscode-select/helpers.js';
|
|
14
14
|
/**
|
|
15
15
|
* Allows to select an item from multiple options.
|
|
16
16
|
*
|
|
@@ -33,58 +33,62 @@ import { highlightRanges } from '../includes/vscode-select/helpers.js';
|
|
|
33
33
|
* @prop {boolean} invalid
|
|
34
34
|
* @attr {boolean} invalid
|
|
35
35
|
* @attr name - Name which is used as a variable name in the data of the form-container.
|
|
36
|
+
*
|
|
36
37
|
* @cssprop [--dropdown-z-index=2]
|
|
37
|
-
* @cssprop --vscode-badge-background
|
|
38
|
-
* @cssprop --vscode-badge-foreground
|
|
39
|
-
* @cssprop --vscode-settings-dropdownBorder
|
|
40
|
-
* @cssprop --vscode-settings-checkboxBackground
|
|
41
|
-
* @cssprop --vscode-settings-dropdownBackground
|
|
42
|
-
* @cssprop --vscode-settings-
|
|
43
|
-
* @cssprop --vscode-
|
|
44
|
-
* @cssprop --vscode-
|
|
45
|
-
* @cssprop --vscode-
|
|
46
|
-
* @cssprop --vscode-font-
|
|
47
|
-
* @cssprop --vscode-font-
|
|
48
|
-
* @cssprop --vscode-
|
|
49
|
-
* @cssprop --vscode-
|
|
50
|
-
* @cssprop --vscode-
|
|
51
|
-
* @cssprop --vscode-list-
|
|
52
|
-
* @cssprop --vscode-list-
|
|
53
|
-
* @cssprop --vscode-list-
|
|
54
|
-
* @cssprop --vscode-list-
|
|
55
|
-
* @cssprop --vscode-list-
|
|
56
|
-
* @cssprop --vscode-
|
|
38
|
+
* @cssprop [--vscode-badge-background=#616161]
|
|
39
|
+
* @cssprop [--vscode-badge-foreground=#f8f8f8]
|
|
40
|
+
* @cssprop [--vscode-settings-dropdownBorder=#3c3c3c]
|
|
41
|
+
* @cssprop [--vscode-settings-checkboxBackground=#313131]
|
|
42
|
+
* @cssprop [--vscode-settings-dropdownBackground=#313131]
|
|
43
|
+
* @cssprop [--vscode-settings-dropdownForeground=#cccccc]
|
|
44
|
+
* @cssprop [--vscode-settings-dropdownListBorder=#454545]
|
|
45
|
+
* @cssprop [--vscode-focusBorder=#0078d4]
|
|
46
|
+
* @cssprop [--vscode-foreground=#cccccc]
|
|
47
|
+
* @cssprop [--vscode-font-family=sans-serif]
|
|
48
|
+
* @cssprop [--vscode-font-size=13px]
|
|
49
|
+
* @cssprop [--vscode-font-weight=normal]
|
|
50
|
+
* @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]
|
|
51
|
+
* @cssprop [--vscode-inputValidation-errorBorder=#be1100]
|
|
52
|
+
* @cssprop [--vscode-list-activeSelectionBackground=#04395e]
|
|
53
|
+
* @cssprop [--vscode-list-activeSelectionForeground=#ffffff]
|
|
54
|
+
* @cssprop [--vscode-list-focusOutline=#0078d4]
|
|
55
|
+
* @cssprop [--vscode-list-focusHighlightForeground=#2aaaff]
|
|
56
|
+
* @cssprop [--vscode-list-highlightForeground=#2aaaff]
|
|
57
|
+
* @cssprop [--vscode-list-hoverBackground=#2a2d2e]
|
|
58
|
+
* @cssprop [--vscode-list-hoverForeground=#ffffff]
|
|
57
59
|
*/
|
|
58
60
|
let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
|
|
59
61
|
set selectedIndex(val) {
|
|
60
|
-
this.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
this._opts.selectedIndex = val;
|
|
63
|
+
const op = this._opts.getOptionByIndex(val);
|
|
64
|
+
if (op) {
|
|
65
|
+
this._opts.activeIndex = val;
|
|
66
|
+
this._value = op.value;
|
|
67
|
+
this._internals.setFormValue(this._value);
|
|
68
|
+
this._manageRequired();
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this._value = '';
|
|
72
|
+
this._internals.setFormValue('');
|
|
73
|
+
this._manageRequired();
|
|
74
|
+
}
|
|
64
75
|
}
|
|
65
76
|
get selectedIndex() {
|
|
66
|
-
return this.
|
|
77
|
+
return this._opts.selectedIndex;
|
|
67
78
|
}
|
|
68
79
|
set value(val) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
this._selectedIndex = this._options.findIndex((op) => op.value === val);
|
|
73
|
-
if (this._selectedIndex > -1) {
|
|
74
|
-
this._options[this._selectedIndex].selected = true;
|
|
75
|
-
this._value = val;
|
|
80
|
+
this._opts.value = val;
|
|
81
|
+
if (this._opts.selectedIndex > -1) {
|
|
76
82
|
this._requestedValueToSetLater = '';
|
|
77
83
|
}
|
|
78
84
|
else {
|
|
79
|
-
this._value = '';
|
|
80
85
|
this._requestedValueToSetLater = val;
|
|
81
86
|
}
|
|
87
|
+
this._internals.setFormValue(this._value);
|
|
88
|
+
this._manageRequired();
|
|
82
89
|
}
|
|
83
90
|
get value() {
|
|
84
|
-
|
|
85
|
-
return this._options[this._selectedIndex]?.value ?? '';
|
|
86
|
-
}
|
|
87
|
-
return '';
|
|
91
|
+
return this._opts.value;
|
|
88
92
|
}
|
|
89
93
|
get validity() {
|
|
90
94
|
return this._internals.validity;
|
|
@@ -107,21 +111,21 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
|
|
|
107
111
|
}
|
|
108
112
|
const input = this.renderRoot.querySelector('.combobox-input');
|
|
109
113
|
if (input) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
: '';
|
|
114
|
+
const selectedOption = this._opts.getSelectedOption();
|
|
115
|
+
input.value = selectedOption?.label ?? '';
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
118
|
constructor() {
|
|
116
119
|
super();
|
|
117
120
|
this.defaultValue = '';
|
|
118
|
-
/** @internal */
|
|
119
|
-
this.role = 'listbox';
|
|
120
121
|
this.name = undefined;
|
|
121
122
|
this.required = false;
|
|
123
|
+
/**
|
|
124
|
+
* This variable was introduced for cases where the value is set before the corresponding option
|
|
125
|
+
* exists. This can happen while a framework like Vue or React is rendering the component.
|
|
126
|
+
*/
|
|
122
127
|
this._requestedValueToSetLater = '';
|
|
123
|
-
|
|
124
|
-
this._multiple = false;
|
|
128
|
+
this._opts.multiSelect = false;
|
|
125
129
|
this._internals = this.attachInternals();
|
|
126
130
|
}
|
|
127
131
|
connectedCallback() {
|
|
@@ -147,145 +151,199 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
|
|
|
147
151
|
get form() {
|
|
148
152
|
return this._internals.form;
|
|
149
153
|
}
|
|
154
|
+
async _createAndSelectSuggestedOption() {
|
|
155
|
+
const nextIndex = this._createSuggestedOption();
|
|
156
|
+
await this.updateComplete;
|
|
157
|
+
this._opts.selectedIndex = nextIndex;
|
|
158
|
+
this._dispatchChangeEvent();
|
|
159
|
+
const opCreateEvent = new CustomEvent('vsc-single-select-create-option', { detail: { value: this._opts.getOptionByIndex(nextIndex)?.value ?? '' } });
|
|
160
|
+
this.dispatchEvent(opCreateEvent);
|
|
161
|
+
this.open = false;
|
|
162
|
+
this._isPlaceholderOptionActive = false;
|
|
163
|
+
}
|
|
164
|
+
_dispatchChangeEvent() {
|
|
165
|
+
/** @deprecated */
|
|
166
|
+
this.dispatchEvent(new CustomEvent('vsc-change', {
|
|
167
|
+
detail: {
|
|
168
|
+
selectedIndex: this._opts.selectedIndex,
|
|
169
|
+
value: this._value,
|
|
170
|
+
},
|
|
171
|
+
}));
|
|
172
|
+
super._dispatchChangeEvent();
|
|
173
|
+
}
|
|
174
|
+
_setStateFromSlottedElements() {
|
|
175
|
+
super._setStateFromSlottedElements();
|
|
176
|
+
if (!this.combobox && this._opts.selectedIndexes.length === 0) {
|
|
177
|
+
this._opts.selectedIndex = this._opts.options.length > 0 ? 0 : -1;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//#region event handlers
|
|
150
181
|
_onSlotChange() {
|
|
151
182
|
super._onSlotChange();
|
|
152
183
|
if (this._requestedValueToSetLater) {
|
|
153
184
|
// the value is set before the available options are appended
|
|
154
|
-
const
|
|
155
|
-
if (
|
|
156
|
-
this.
|
|
185
|
+
const foundOption = this._opts.getOptionByValue(this._requestedValueToSetLater);
|
|
186
|
+
if (foundOption) {
|
|
187
|
+
this._opts.selectedIndex = foundOption.index;
|
|
157
188
|
this._requestedValueToSetLater = '';
|
|
158
189
|
}
|
|
159
190
|
}
|
|
160
|
-
if (this.
|
|
161
|
-
this._internals.setFormValue(this.
|
|
191
|
+
if (this._opts.selectedIndex > -1 && this._opts.numOptions > 0) {
|
|
192
|
+
this._internals.setFormValue(this._opts.value);
|
|
193
|
+
this._manageRequired();
|
|
162
194
|
}
|
|
163
195
|
else {
|
|
164
196
|
this._internals.setFormValue(null);
|
|
197
|
+
this._manageRequired();
|
|
165
198
|
}
|
|
166
199
|
}
|
|
167
|
-
|
|
168
|
-
super.
|
|
169
|
-
|
|
170
|
-
|
|
200
|
+
_onEnterKeyDown(ev) {
|
|
201
|
+
super._onEnterKeyDown(ev);
|
|
202
|
+
let valueChanged = false;
|
|
203
|
+
if (this.combobox) {
|
|
204
|
+
if (this.open) {
|
|
205
|
+
if (this._isPlaceholderOptionActive) {
|
|
206
|
+
this._createAndSelectSuggestedOption();
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;
|
|
210
|
+
this._opts.selectedIndex = this._opts.activeIndex;
|
|
211
|
+
this.open = false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.open = true;
|
|
216
|
+
this._scrollActiveElementToTop();
|
|
217
|
+
}
|
|
171
218
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
219
|
+
else {
|
|
220
|
+
if (this.open) {
|
|
221
|
+
valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;
|
|
222
|
+
this._opts.selectedIndex = this._opts.activeIndex;
|
|
223
|
+
this.open = false;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this.open = true;
|
|
227
|
+
this._scrollActiveElementToTop();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (valueChanged) {
|
|
231
|
+
this._dispatchChangeEvent();
|
|
232
|
+
this.updateInputValue();
|
|
233
|
+
this._internals.setFormValue(this._opts.value);
|
|
234
|
+
this._manageRequired();
|
|
184
235
|
}
|
|
185
|
-
this._filterPattern = '';
|
|
186
|
-
this._selectedIndex += 1;
|
|
187
|
-
this._activeIndex = this._selectedIndex;
|
|
188
|
-
this._value = this._options[this._selectedIndex].value;
|
|
189
|
-
this._internals.setFormValue(this._value);
|
|
190
|
-
this._manageRequired();
|
|
191
|
-
this._dispatchChangeEvent();
|
|
192
|
-
}
|
|
193
|
-
_onEnterKeyDown() {
|
|
194
|
-
super._onEnterKeyDown();
|
|
195
|
-
this.updateInputValue();
|
|
196
|
-
this._internals.setFormValue(this._value);
|
|
197
|
-
this._manageRequired();
|
|
198
236
|
}
|
|
199
237
|
_onOptionClick(ev) {
|
|
238
|
+
super._onOptionClick(ev);
|
|
200
239
|
const composedPath = ev.composedPath();
|
|
201
|
-
const optEl = composedPath.find((et) =>
|
|
240
|
+
const optEl = composedPath.find((et) => {
|
|
241
|
+
const el = et;
|
|
242
|
+
if ('matches' in el) {
|
|
243
|
+
return el.matches('li.option');
|
|
244
|
+
}
|
|
245
|
+
return;
|
|
246
|
+
});
|
|
202
247
|
if (!optEl || optEl.matches('.disabled')) {
|
|
203
248
|
return;
|
|
204
249
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
250
|
+
const isPlaceholderOption = optEl.classList.contains('placeholder');
|
|
251
|
+
if (isPlaceholderOption) {
|
|
252
|
+
if (this.creatable) {
|
|
253
|
+
this._createAndSelectSuggestedOption();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
this._opts.selectedIndex = Number(optEl.dataset.index);
|
|
258
|
+
this.open = false;
|
|
259
|
+
this._internals.setFormValue(this._value);
|
|
260
|
+
this._manageRequired();
|
|
261
|
+
this._dispatchChangeEvent();
|
|
262
|
+
}
|
|
211
263
|
}
|
|
264
|
+
//#endregion
|
|
212
265
|
_manageRequired() {
|
|
213
266
|
const { value } = this;
|
|
214
267
|
if (value === '' && this.required) {
|
|
215
|
-
this._internals.setValidity({
|
|
216
|
-
valueMissing: true,
|
|
217
|
-
}, 'Please select an item in the list.', this._face);
|
|
268
|
+
this._internals.setValidity({ valueMissing: true }, 'Please select an item in the list.', this._face);
|
|
218
269
|
}
|
|
219
270
|
else {
|
|
220
271
|
this._internals.setValidity({});
|
|
221
272
|
}
|
|
222
273
|
}
|
|
274
|
+
//#region render functions
|
|
223
275
|
_renderSelectFace() {
|
|
224
|
-
const
|
|
276
|
+
const selectedOption = this._opts.getSelectedOption();
|
|
277
|
+
const label = selectedOption?.label ?? '';
|
|
278
|
+
const activeDescendant = this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';
|
|
225
279
|
return html `
|
|
226
280
|
<div
|
|
281
|
+
aria-activedescendant=${activeDescendant}
|
|
282
|
+
aria-controls="select-listbox"
|
|
283
|
+
aria-expanded=${this.open ? 'true' : 'false'}
|
|
284
|
+
aria-haspopup="listbox"
|
|
285
|
+
aria-label=${ifDefined(this.label)}
|
|
227
286
|
class="select-face face"
|
|
228
287
|
@click=${this._onFaceClick}
|
|
229
|
-
|
|
288
|
+
role="combobox"
|
|
289
|
+
tabindex="0"
|
|
230
290
|
>
|
|
231
291
|
<span class="text">${label}</span> ${chevronDownIcon}
|
|
232
292
|
</div>
|
|
233
293
|
`;
|
|
234
294
|
}
|
|
235
295
|
_renderComboboxFace() {
|
|
236
|
-
|
|
296
|
+
let inputVal = '';
|
|
297
|
+
if (this._isBeingFiltered) {
|
|
298
|
+
inputVal = this._opts.filterPattern;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
const op = this._opts.getSelectedOption();
|
|
302
|
+
inputVal = op?.label ?? '';
|
|
303
|
+
}
|
|
304
|
+
const activeDescendant = this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';
|
|
305
|
+
const expanded = this.open ? 'true' : 'false';
|
|
237
306
|
return html `
|
|
238
307
|
<div class="combobox-face face">
|
|
239
308
|
<input
|
|
309
|
+
aria-activedescendant=${activeDescendant}
|
|
310
|
+
aria-autocomplete="list"
|
|
311
|
+
aria-controls="select-listbox"
|
|
312
|
+
aria-expanded=${expanded}
|
|
313
|
+
aria-haspopup="listbox"
|
|
314
|
+
aria-label=${ifDefined(this.label)}
|
|
240
315
|
class="combobox-input"
|
|
316
|
+
role="combobox"
|
|
241
317
|
spellcheck="false"
|
|
242
318
|
type="text"
|
|
243
319
|
autocomplete="off"
|
|
244
320
|
.value=${inputVal}
|
|
245
321
|
@focus=${this._onComboboxInputFocus}
|
|
322
|
+
@blur=${this._onComboboxInputBlur}
|
|
246
323
|
@input=${this._onComboboxInputInput}
|
|
247
324
|
@click=${this._onComboboxInputClick}
|
|
325
|
+
@keydown=${this._onComboboxInputSpaceKeyDown}
|
|
248
326
|
>
|
|
249
327
|
<button
|
|
328
|
+
aria-label="Open the list of options"
|
|
250
329
|
class="combobox-button"
|
|
251
330
|
type="button"
|
|
252
331
|
@click=${this._onComboboxButtonClick}
|
|
253
332
|
@keydown=${this._onComboboxButtonKeyDown}
|
|
333
|
+
tabindex="-1"
|
|
254
334
|
>
|
|
255
335
|
${chevronDownIcon}
|
|
256
336
|
</button>
|
|
257
337
|
</div>
|
|
258
338
|
`;
|
|
259
339
|
}
|
|
260
|
-
|
|
261
|
-
const list = this.combobox ? this._filteredOptions : this._options;
|
|
262
|
-
const options = list.map((op, index) => {
|
|
263
|
-
const classes = classMap({
|
|
264
|
-
option: true,
|
|
265
|
-
disabled: op.disabled,
|
|
266
|
-
selected: op.selected,
|
|
267
|
-
active: index === this._activeIndex && !op.disabled,
|
|
268
|
-
});
|
|
269
|
-
return html `
|
|
270
|
-
<li
|
|
271
|
-
class=${classes}
|
|
272
|
-
data-index=${op.index}
|
|
273
|
-
data-filtered-index=${index}
|
|
274
|
-
>
|
|
275
|
-
${(op.ranges?.length ?? 0 > 0)
|
|
276
|
-
? highlightRanges(op.label, op.ranges ?? [])
|
|
277
|
-
: op.label}
|
|
278
|
-
</li>
|
|
279
|
-
`;
|
|
280
|
-
});
|
|
340
|
+
render() {
|
|
281
341
|
return html `
|
|
282
|
-
<
|
|
283
|
-
class="
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
>
|
|
287
|
-
${options}
|
|
288
|
-
</ul>
|
|
342
|
+
<div class="single-select">
|
|
343
|
+
<slot class="main-slot" @slotchange=${this._onSlotChange}></slot>
|
|
344
|
+
${this.combobox ? this._renderComboboxFace() : this._renderSelectFace()}
|
|
345
|
+
${this._renderDropdown()}
|
|
346
|
+
</div>
|
|
289
347
|
`;
|
|
290
348
|
}
|
|
291
349
|
};
|
|
@@ -300,9 +358,6 @@ VscodeSingleSelect.formAssociated = true;
|
|
|
300
358
|
__decorate([
|
|
301
359
|
property({ attribute: 'default-value' })
|
|
302
360
|
], VscodeSingleSelect.prototype, "defaultValue", void 0);
|
|
303
|
-
__decorate([
|
|
304
|
-
property({ type: String, attribute: true, reflect: true })
|
|
305
|
-
], VscodeSingleSelect.prototype, "role", void 0);
|
|
306
361
|
__decorate([
|
|
307
362
|
property({ reflect: true })
|
|
308
363
|
], VscodeSingleSelect.prototype, "name", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-single-select.js","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, LitElement, TemplateResult} from 'lit';\nimport {customElement, property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {chevronDownIcon} from '../includes/vscode-select/template-elements.js';\nimport {VscodeSelectBase} from '../includes/vscode-select/vscode-select-base.js';\nimport styles from './vscode-single-select.styles.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\nimport {highlightRanges} from '../includes/vscode-select/helpers.js';\n\n/**\n * Allows to select an item from multiple options.\n *\n * When participating in a form, it supports the `:invalid` pseudo class. Otherwise the error styles\n * can be applied through the `invalid` property.\n *\n * @tag vscode-single-select\n *\n * ## Types\n *\n * ```typescript\n *interface Option {\n * label: string;\n * value: string;\n * description: string;\n * selected: boolean;\n * disabled: boolean;\n *}\n * ```\n * @prop {boolean} invalid\n * @attr {boolean} invalid\n * @attr name - Name which is used as a variable name in the data of the form-container.\n * @cssprop [--dropdown-z-index=2]\n * @cssprop --vscode-badge-background\n * @cssprop --vscode-badge-foreground\n * @cssprop --vscode-settings-dropdownBorder\n * @cssprop --vscode-settings-checkboxBackground\n * @cssprop --vscode-settings-dropdownBackground\n * @cssprop --vscode-settings-dropdownListBorder\n * @cssprop --vscode-focusBorder\n * @cssprop --vscode-foreground\n * @cssprop --vscode-font-family\n * @cssprop --vscode-font-size\n * @cssprop --vscode-font-weight\n * @cssprop --vscode-list-activeSelectionBackground\n * @cssprop --vscode-list-activeSelectionForeground\n * @cssprop --vscode-list-focusOutline\n * @cssprop --vscode-list-highlightForeground\n * @cssprop --vscode-list-focusHighlightForeground\n * @cssprop --vscode-list-hoverBackground\n * @cssprop --vscode-list-hoverForeground\n * @cssprop --vscode-list-hoverBackground\n * @cssprop --vscode-settings-textInputBackground\n */\n@customElement('vscode-single-select')\nexport class VscodeSingleSelect\n extends VscodeSelectBase\n implements AssociatedFormControl\n{\n static override styles = styles;\n\n /** @internal */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /** @internal */\n static formAssociated = true;\n\n @property({attribute: 'default-value'})\n defaultValue = '';\n\n /** @internal */\n @property({type: String, attribute: true, reflect: true})\n override role = 'listbox';\n\n @property({reflect: true})\n name: string | undefined = undefined;\n\n @property({type: Number, attribute: 'selected-index'})\n set selectedIndex(val: number) {\n this._selectedIndex = val;\n this._value = this._options[this._selectedIndex]\n ? this._options[this._selectedIndex].value\n : '';\n }\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @property({type: String})\n set value(val: string) {\n if (this._options[this._selectedIndex]) {\n this._options[this._selectedIndex].selected = false;\n }\n\n this._selectedIndex = this._options.findIndex((op) => op.value === val);\n\n if (this._selectedIndex > -1) {\n this._options[this._selectedIndex].selected = true;\n this._value = val;\n this._requestedValueToSetLater = '';\n } else {\n this._value = '';\n this._requestedValueToSetLater = val;\n }\n }\n get value(): string {\n if (this._options[this._selectedIndex]) {\n return this._options[this._selectedIndex]?.value ?? '';\n }\n\n return '';\n }\n\n @property({type: Boolean, reflect: true})\n required = false;\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate() {\n return this._internals.willValidate;\n }\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n @query('.face')\n private _face!: HTMLDivElement;\n\n private _internals: ElementInternals;\n\n private updateInputValue() {\n if (!this.combobox) {\n return;\n }\n\n const input = this.renderRoot.querySelector(\n '.combobox-input'\n ) as HTMLInputElement;\n\n if (input) {\n input.value = this._options[this._selectedIndex]\n ? this._options[this._selectedIndex].label\n : '';\n }\n }\n\n constructor() {\n super();\n /** @internal */\n this._multiple = false;\n this._internals = this.attachInternals();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.updateComplete.then(() => {\n this._manageRequired();\n });\n }\n\n /** @internal */\n formResetCallback(): void {\n this.value = this.defaultValue;\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string,\n _mode: 'restore' | 'autocomplete'\n ): void {\n this.updateComplete.then(() => {\n this.value = state;\n });\n }\n\n /** @internal */\n get type(): 'select-one' {\n return 'select-one';\n }\n\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n private _requestedValueToSetLater = '';\n\n protected override _onSlotChange(): void {\n super._onSlotChange();\n\n if (this._requestedValueToSetLater) {\n // the value is set before the available options are appended\n const foundIndex = this._options.findIndex(\n (op) => op.value === this._requestedValueToSetLater\n );\n\n if (foundIndex > 0) {\n this._selectedIndex = foundIndex;\n this._requestedValueToSetLater = '';\n }\n }\n\n if (this._selectedIndex > -1 && this._options.length > 0) {\n this._internals.setFormValue(this._options[this._selectedIndex].value);\n } else {\n this._internals.setFormValue(null);\n }\n }\n\n protected override _onArrowUpKeyDown(): void {\n super._onArrowUpKeyDown();\n\n if (this.open || this._selectedIndex <= 0) {\n return;\n }\n\n this._filterPattern = '';\n this._selectedIndex -= 1;\n this._activeIndex = this._selectedIndex;\n this._value = this._options[this._selectedIndex].value;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n protected override _onArrowDownKeyDown(): void {\n super._onArrowDownKeyDown();\n\n if (this.open || this._selectedIndex >= this._options.length - 1) {\n return;\n }\n\n this._filterPattern = '';\n this._selectedIndex += 1;\n this._activeIndex = this._selectedIndex;\n this._value = this._options[this._selectedIndex].value;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n protected override _onEnterKeyDown(): void {\n super._onEnterKeyDown();\n\n this.updateInputValue();\n this._internals.setFormValue(this._value);\n this._manageRequired();\n }\n\n private _onOptionClick(ev: MouseEvent) {\n const composedPath = ev.composedPath();\n const optEl = composedPath.find((et) =>\n (et as HTMLElement)?.matches('li.option')\n ) as HTMLElement | undefined;\n\n if (!optEl || optEl.matches('.disabled')) {\n return;\n }\n\n this._selectedIndex = Number((optEl as HTMLElement).dataset.index);\n this._value = this._options[this._selectedIndex].value;\n\n this._toggleDropdown(false);\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n private _manageRequired() {\n const {value} = this;\n if (value === '' && this.required) {\n this._internals.setValidity(\n {\n valueMissing: true,\n },\n 'Please select an item in the list.',\n this._face\n );\n } else {\n this._internals.setValidity({});\n }\n }\n\n protected override _renderSelectFace(): TemplateResult {\n const label = this._options[this._selectedIndex]?.label ?? '';\n\n return html`\n <div\n class=\"select-face face\"\n @click=${this._onFaceClick}\n tabindex=${this.tabIndex > -1 ? 0 : -1}\n >\n <span class=\"text\">${label}</span> ${chevronDownIcon}\n </div>\n `;\n }\n\n protected override _renderComboboxFace(): TemplateResult {\n const inputVal =\n this._selectedIndex > -1 ? this._options[this._selectedIndex].label : '';\n\n return html`\n <div class=\"combobox-face face\">\n <input\n class=\"combobox-input\"\n spellcheck=\"false\"\n type=\"text\"\n autocomplete=\"off\"\n .value=${inputVal}\n @focus=${this._onComboboxInputFocus}\n @input=${this._onComboboxInputInput}\n @click=${this._onComboboxInputClick}\n >\n <button\n class=\"combobox-button\"\n type=\"button\"\n @click=${this._onComboboxButtonClick}\n @keydown=${this._onComboboxButtonKeyDown}\n >\n ${chevronDownIcon}\n </button>\n </div>\n `;\n }\n\n protected override _renderOptions(): TemplateResult {\n const list = this.combobox ? this._filteredOptions : this._options;\n const options = list.map((op, index) => {\n const classes = classMap({\n option: true,\n disabled: op.disabled,\n selected: op.selected,\n active: index === this._activeIndex && !op.disabled,\n });\n\n return html`\n <li\n class=${classes}\n data-index=${op.index}\n data-filtered-index=${index}\n >\n ${(op.ranges?.length ?? 0 > 0)\n ? highlightRanges(op.label, op.ranges ?? [])\n : op.label}\n </li>\n `;\n });\n\n return html`\n <ul\n class=\"options\"\n @mouseover=${this._onOptionMouseOver}\n @click=${this._onOptionClick}\n >\n ${options}\n </ul>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-single-select': VscodeSingleSelect;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"vscode-single-select.js","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, LitElement, TemplateResult} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {customElement} from '../includes/VscElement.js';\nimport {chevronDownIcon} from '../includes/vscode-select/template-elements.js';\nimport {VscodeSelectBase} from '../includes/vscode-select/vscode-select-base.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\nimport styles from './vscode-single-select.styles.js';\n\nexport type VscSingleSelectCreateOptionEvent = CustomEvent<{value: string}>;\n\n/**\n * Allows to select an item from multiple options.\n *\n * When participating in a form, it supports the `:invalid` pseudo class. Otherwise the error styles\n * can be applied through the `invalid` property.\n *\n * @tag vscode-single-select\n *\n * ## Types\n *\n * ```typescript\n *interface Option {\n * label: string;\n * value: string;\n * description: string;\n * selected: boolean;\n * disabled: boolean;\n *}\n * ```\n * @prop {boolean} invalid\n * @attr {boolean} invalid\n * @attr name - Name which is used as a variable name in the data of the form-container.\n *\n * @cssprop [--dropdown-z-index=2]\n * @cssprop [--vscode-badge-background=#616161]\n * @cssprop [--vscode-badge-foreground=#f8f8f8]\n * @cssprop [--vscode-settings-dropdownBorder=#3c3c3c]\n * @cssprop [--vscode-settings-checkboxBackground=#313131]\n * @cssprop [--vscode-settings-dropdownBackground=#313131]\n * @cssprop [--vscode-settings-dropdownForeground=#cccccc]\n * @cssprop [--vscode-settings-dropdownListBorder=#454545]\n * @cssprop [--vscode-focusBorder=#0078d4]\n * @cssprop [--vscode-foreground=#cccccc]\n * @cssprop [--vscode-font-family=sans-serif]\n * @cssprop [--vscode-font-size=13px]\n * @cssprop [--vscode-font-weight=normal]\n * @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]\n * @cssprop [--vscode-inputValidation-errorBorder=#be1100]\n * @cssprop [--vscode-list-activeSelectionBackground=#04395e]\n * @cssprop [--vscode-list-activeSelectionForeground=#ffffff]\n * @cssprop [--vscode-list-focusOutline=#0078d4]\n * @cssprop [--vscode-list-focusHighlightForeground=#2aaaff]\n * @cssprop [--vscode-list-highlightForeground=#2aaaff]\n * @cssprop [--vscode-list-hoverBackground=#2a2d2e]\n * @cssprop [--vscode-list-hoverForeground=#ffffff]\n */\n@customElement('vscode-single-select')\nexport class VscodeSingleSelect\n extends VscodeSelectBase\n implements AssociatedFormControl\n{\n static override styles = styles;\n\n /** @internal */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /** @internal */\n static formAssociated = true;\n\n @property({attribute: 'default-value'})\n defaultValue = '';\n\n @property({reflect: true})\n name: string | undefined = undefined;\n\n @property({type: Number, attribute: 'selected-index'})\n set selectedIndex(val: number) {\n this._opts.selectedIndex = val;\n\n const op = this._opts.getOptionByIndex(val);\n\n if (op) {\n this._opts.activeIndex = val;\n this._value = op.value;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n } else {\n this._value = '';\n this._internals.setFormValue('');\n this._manageRequired();\n }\n }\n get selectedIndex(): number {\n return this._opts.selectedIndex;\n }\n\n @property({type: String})\n set value(val: string) {\n this._opts.value = val;\n\n if (this._opts.selectedIndex > -1) {\n this._requestedValueToSetLater = '';\n } else {\n this._requestedValueToSetLater = val;\n }\n\n this._internals.setFormValue(this._value);\n this._manageRequired();\n }\n get value(): string {\n return this._opts.value as string;\n }\n\n @property({type: Boolean, reflect: true})\n required = false;\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate() {\n return this._internals.willValidate;\n }\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n @query('.face')\n private _face!: HTMLDivElement;\n\n private _internals: ElementInternals;\n\n private updateInputValue() {\n if (!this.combobox) {\n return;\n }\n\n const input = this.renderRoot.querySelector(\n '.combobox-input'\n ) as HTMLInputElement;\n\n if (input) {\n const selectedOption = this._opts.getSelectedOption();\n input.value = selectedOption?.label ?? '';\n }\n }\n\n constructor() {\n super();\n this._opts.multiSelect = false;\n this._internals = this.attachInternals();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.updateComplete.then(() => {\n this._manageRequired();\n });\n }\n\n /** @internal */\n formResetCallback(): void {\n this.value = this.defaultValue;\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string,\n _mode: 'restore' | 'autocomplete'\n ): void {\n this.updateComplete.then(() => {\n this.value = state;\n });\n }\n\n /** @internal */\n get type(): 'select-one' {\n return 'select-one';\n }\n\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n /**\n * This variable was introduced for cases where the value is set before the corresponding option\n * exists. This can happen while a framework like Vue or React is rendering the component.\n */\n private _requestedValueToSetLater = '';\n\n protected override async _createAndSelectSuggestedOption() {\n const nextIndex = this._createSuggestedOption();\n\n await this.updateComplete;\n\n this._opts.selectedIndex = nextIndex;\n this._dispatchChangeEvent();\n const opCreateEvent: VscSingleSelectCreateOptionEvent = new CustomEvent(\n 'vsc-single-select-create-option',\n {detail: {value: this._opts.getOptionByIndex(nextIndex)?.value ?? ''}}\n );\n this.dispatchEvent(opCreateEvent);\n this.open = false;\n this._isPlaceholderOptionActive = false;\n }\n\n protected override _dispatchChangeEvent(): void {\n /** @deprecated */\n this.dispatchEvent(\n new CustomEvent('vsc-change', {\n detail: {\n selectedIndex: this._opts.selectedIndex,\n value: this._value,\n },\n })\n );\n\n super._dispatchChangeEvent();\n }\n\n protected override _setStateFromSlottedElements(): void {\n super._setStateFromSlottedElements();\n\n if (!this.combobox && this._opts.selectedIndexes.length === 0) {\n this._opts.selectedIndex = this._opts.options.length > 0 ? 0 : -1;\n }\n }\n\n //#region event handlers\n protected override _onSlotChange(): void {\n super._onSlotChange();\n\n if (this._requestedValueToSetLater) {\n // the value is set before the available options are appended\n const foundOption = this._opts.getOptionByValue(\n this._requestedValueToSetLater\n );\n\n if (foundOption) {\n this._opts.selectedIndex = foundOption.index;\n this._requestedValueToSetLater = '';\n }\n }\n\n if (this._opts.selectedIndex > -1 && this._opts.numOptions > 0) {\n this._internals.setFormValue(this._opts.value as string);\n this._manageRequired();\n } else {\n this._internals.setFormValue(null);\n this._manageRequired();\n }\n }\n\n protected override _onEnterKeyDown(ev: KeyboardEvent): void {\n super._onEnterKeyDown(ev);\n let valueChanged = false;\n\n if (this.combobox) {\n if (this.open) {\n if (this._isPlaceholderOptionActive) {\n this._createAndSelectSuggestedOption();\n } else {\n valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;\n this._opts.selectedIndex = this._opts.activeIndex;\n this.open = false;\n }\n } else {\n this.open = true;\n this._scrollActiveElementToTop();\n }\n } else {\n if (this.open) {\n valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;\n this._opts.selectedIndex = this._opts.activeIndex;\n this.open = false;\n } else {\n this.open = true;\n this._scrollActiveElementToTop();\n }\n }\n\n if (valueChanged) {\n this._dispatchChangeEvent();\n this.updateInputValue();\n this._internals.setFormValue(this._opts.value as string);\n this._manageRequired();\n }\n }\n\n protected override _onOptionClick(ev: MouseEvent) {\n super._onOptionClick(ev);\n const composedPath = ev.composedPath();\n const optEl = composedPath.find((et) => {\n const el = et as HTMLElement;\n\n if ('matches' in el) {\n return el.matches('li.option');\n }\n\n return;\n }) as HTMLElement | undefined;\n\n if (!optEl || optEl.matches('.disabled')) {\n return;\n }\n\n const isPlaceholderOption = optEl.classList.contains('placeholder');\n\n if (isPlaceholderOption) {\n if (this.creatable) {\n this._createAndSelectSuggestedOption();\n }\n } else {\n this._opts.selectedIndex = Number((optEl as HTMLElement).dataset.index);\n\n this.open = false;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n }\n //#endregion\n\n protected override _manageRequired() {\n const {value} = this;\n if (value === '' && this.required) {\n this._internals.setValidity(\n {valueMissing: true},\n 'Please select an item in the list.',\n this._face\n );\n } else {\n this._internals.setValidity({});\n }\n }\n\n //#region render functions\n protected override _renderSelectFace(): TemplateResult {\n const selectedOption = this._opts.getSelectedOption();\n const label = selectedOption?.label ?? '';\n const activeDescendant =\n this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';\n\n return html`\n <div\n aria-activedescendant=${activeDescendant}\n aria-controls=\"select-listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-label=${ifDefined(this.label)}\n class=\"select-face face\"\n @click=${this._onFaceClick}\n role=\"combobox\"\n tabindex=\"0\"\n >\n <span class=\"text\">${label}</span> ${chevronDownIcon}\n </div>\n `;\n }\n\n protected override _renderComboboxFace(): TemplateResult {\n let inputVal = '';\n\n if (this._isBeingFiltered) {\n inputVal = this._opts.filterPattern;\n } else {\n const op = this._opts.getSelectedOption();\n inputVal = op?.label ?? '';\n }\n\n const activeDescendant =\n this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';\n const expanded = this.open ? 'true' : 'false';\n\n return html`\n <div class=\"combobox-face face\">\n <input\n aria-activedescendant=${activeDescendant}\n aria-autocomplete=\"list\"\n aria-controls=\"select-listbox\"\n aria-expanded=${expanded}\n aria-haspopup=\"listbox\"\n aria-label=${ifDefined(this.label)}\n class=\"combobox-input\"\n role=\"combobox\"\n spellcheck=\"false\"\n type=\"text\"\n autocomplete=\"off\"\n .value=${inputVal}\n @focus=${this._onComboboxInputFocus}\n @blur=${this._onComboboxInputBlur}\n @input=${this._onComboboxInputInput}\n @click=${this._onComboboxInputClick}\n @keydown=${this._onComboboxInputSpaceKeyDown}\n >\n <button\n aria-label=\"Open the list of options\"\n class=\"combobox-button\"\n type=\"button\"\n @click=${this._onComboboxButtonClick}\n @keydown=${this._onComboboxButtonKeyDown}\n tabindex=\"-1\"\n >\n ${chevronDownIcon}\n </button>\n </div>\n `;\n }\n\n override render(): TemplateResult {\n return html`\n <div class=\"single-select\">\n <slot class=\"main-slot\" @slotchange=${this._onSlotChange}></slot>\n ${this.combobox ? this._renderComboboxFace() : this._renderSelectFace()}\n ${this._renderDropdown()}\n </div>\n `;\n }\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-single-select': VscodeSingleSelect;\n }\n\n interface GlobalEventHandlersEventMap {\n 'vsc-single-select-create-option': VscSingleSelectCreateOptionEvent;\n }\n}\n"]}
|
|
@@ -18,7 +18,9 @@ export type VscSplitLayoutChangeEvent = CustomEvent<{
|
|
|
18
18
|
*
|
|
19
19
|
* @prop {'start' | 'end' | 'none'} fixedPane
|
|
20
20
|
*
|
|
21
|
-
* @cssprop [--
|
|
21
|
+
* @cssprop [--separator-border=#454545]
|
|
22
|
+
* @cssprop [--vscode-editorWidget-border=#454545]
|
|
23
|
+
* @cssprop [--vscode-sash-hoverBorder=#0078d4]
|
|
22
24
|
*/
|
|
23
25
|
export declare class VscodeSplitLayout extends VscElement {
|
|
24
26
|
static styles: import("lit").CSSResultGroup;
|