@sapudex/web-components 2.22.0 → 2.24.0
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/cypress/specs/CountrySelector.cy.tsx +158 -144
- package/cypress/specs/EventRibbon.cy.tsx +3 -1
- package/cypress/specs/SelectBox.cy.tsx +173 -206
- package/cypress/specs/Tag.cy.tsx +1 -1
- package/cypress/specs/TextField.cy.tsx +15 -0
- package/cypress/specs/Textarea.cy.tsx +15 -33
- package/dist/Checkbox.js +4 -0
- package/dist/Checkbox.js.map +1 -1
- package/dist/CountrySelector.d.ts +25 -142
- package/dist/CountrySelector.js +91 -268
- package/dist/CountrySelector.js.map +1 -1
- package/dist/FilterMenu.d.ts +14 -2
- package/dist/FilterMenu.js +11 -1
- package/dist/FilterMenu.js.map +1 -1
- package/dist/Footer.js +2 -2
- package/dist/Footer.js.map +1 -1
- package/dist/FooterTemplate.js +1 -1
- package/dist/FooterTemplate.js.map +1 -1
- package/dist/List.js +2 -3
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +1 -0
- package/dist/ListGroupHeaderBase.js +3 -0
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListItemBase.d.ts +12 -0
- package/dist/ListItemBase.js +17 -2
- package/dist/ListItemBase.js.map +1 -1
- package/dist/MediaPlayer.js +4 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/MediaPlayerTemplate.js +4 -4
- package/dist/MediaPlayerTemplate.js.map +1 -1
- package/dist/SearchableListBase.d.ts +23 -16
- package/dist/SearchableListBase.js +48 -72
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SelectBase.d.ts +193 -0
- package/dist/SelectBase.js +428 -0
- package/dist/SelectBase.js.map +1 -0
- package/dist/SelectBox.d.ts +30 -152
- package/dist/SelectBox.js +139 -348
- package/dist/SelectBox.js.map +1 -1
- package/dist/TagGroup.d.ts +23 -5
- package/dist/TagGroup.js +37 -16
- package/dist/TagGroup.js.map +1 -1
- package/dist/TagTemplate.js +4 -2
- package/dist/TagTemplate.js.map +1 -1
- package/dist/TextArea.d.ts +1 -1
- package/dist/TextArea.js +5 -5
- package/dist/TextArea.js.map +1 -1
- package/dist/TextAreaTemplate.d.ts +2 -0
- package/dist/TextAreaTemplate.js +13 -0
- package/dist/TextAreaTemplate.js.map +1 -0
- package/dist/TextField.d.ts +29 -4
- package/dist/TextField.js +32 -16
- package/dist/TextField.js.map +1 -1
- package/dist/TextFieldTemplate.d.ts +2 -0
- package/dist/TextFieldTemplate.js +14 -0
- package/dist/TextFieldTemplate.js.map +1 -0
- package/dist/assets/{InputSuggestions-By00xQan.js → InputSuggestions-63QG0i9j.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-BGtoxRbA.js → ListItemStandardExpandableTextTemplate-B1CpqSCb.js} +1 -1
- package/dist/assets/{bundle.esm-9yDdQqR5.js → bundle.esm-lUYJDofa.js} +218 -217
- package/dist/assets/fi-BGPAljj_.js +1 -0
- package/dist/assets/gl-DqaooM6m.js +1 -0
- package/dist/assets/{video.es-DIP_dh4I.js → video.es-BDeHzm02.js} +32 -32
- package/dist/css/themes/Checkbox.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/EventRibbon.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/ImageGridTickerItem.css +1 -1
- package/dist/css/themes/InputGroup.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadMobileMenu.css +1 -1
- package/dist/css/themes/RadioButton.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SelectBase.css +1 -0
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/StatusMessage.css +1 -1
- package/dist/css/themes/TagGroup.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/custom-elements-internal.json +1088 -1284
- package/dist/custom-elements.json +284 -934
- package/dist/generated/templates/CountrySelectorTemplate.lit.js +3 -3
- package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SelectBoxTemplate.lit.js +10 -9
- package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Checkbox.css.d.ts +1 -1
- package/dist/generated/themes/Checkbox.css.js +1 -1
- package/dist/generated/themes/Checkbox.css.js.map +1 -1
- package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/CountrySelector.css.js +1 -1
- package/dist/generated/themes/CountrySelector.css.js.map +1 -1
- package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
- package/dist/generated/themes/EventRibbon.css.js +1 -1
- package/dist/generated/themes/EventRibbon.css.js.map +1 -1
- package/dist/generated/themes/Footer.css.d.ts +1 -1
- package/dist/generated/themes/Footer.css.js +1 -1
- package/dist/generated/themes/Footer.css.js.map +1 -1
- package/dist/generated/themes/ImageGridTickerItem.css.d.ts +1 -1
- package/dist/generated/themes/ImageGridTickerItem.css.js +1 -1
- package/dist/generated/themes/ImageGridTickerItem.css.js.map +1 -1
- package/dist/generated/themes/InputGroup.css.d.ts +1 -1
- package/dist/generated/themes/InputGroup.css.js +1 -1
- package/dist/generated/themes/InputGroup.css.js.map +1 -1
- package/dist/generated/themes/Link.css.d.ts +1 -1
- package/dist/generated/themes/Link.css.js +1 -1
- package/dist/generated/themes/Link.css.js.map +1 -1
- package/dist/generated/themes/ListItem.css.d.ts +1 -1
- package/dist/generated/themes/ListItem.css.js +1 -1
- package/dist/generated/themes/ListItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadItem.css.js +1 -1
- package/dist/generated/themes/MastheadItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
- package/dist/generated/themes/RadioButton.css.d.ts +1 -1
- package/dist/generated/themes/RadioButton.css.js +1 -1
- package/dist/generated/themes/RadioButton.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Search.css.d.ts +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SelectBase.css.d.ts +2 -0
- package/dist/generated/themes/SelectBase.css.js +8 -0
- package/dist/generated/themes/SelectBase.css.js.map +1 -0
- package/dist/generated/themes/SelectBox.css.d.ts +1 -1
- package/dist/generated/themes/SelectBox.css.js +1 -1
- package/dist/generated/themes/SelectBox.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.d.ts +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/StatusMessage.css.d.ts +1 -1
- package/dist/generated/themes/StatusMessage.css.js +1 -1
- package/dist/generated/themes/StatusMessage.css.js.map +1 -1
- package/dist/generated/themes/TagGroup.css.d.ts +1 -1
- package/dist/generated/themes/TagGroup.css.js +1 -1
- package/dist/generated/themes/TagGroup.css.js.map +1 -1
- package/dist/generated/themes/TextField.css.d.ts +1 -1
- package/dist/generated/themes/TextField.css.js +1 -1
- package/dist/generated/themes/TextField.css.js.map +1 -1
- package/dist/types/common.d.ts +1 -1
- package/dist/types/common.js +1 -1
- package/dist/types/common.js.map +1 -1
- package/dist/vscode.html-custom-data.json +23 -234
- package/dist/web-types.json +256 -811
- package/package.json +2 -2
- package/src/Checkbox.ts +4 -0
- package/src/CountrySelector.hbs +6 -61
- package/src/CountrySelector.ts +93 -375
- package/src/FilterMenu.ts +13 -3
- package/src/Footer.ts +2 -2
- package/src/FooterTemplate.tsx +5 -4
- package/src/List.ts +2 -3
- package/src/ListGroupHeaderBase.ts +4 -0
- package/src/ListItem.hbs +0 -1
- package/src/ListItemBase.ts +17 -3
- package/src/MediaPlayer.ts +4 -0
- package/src/MediaPlayerTemplate.tsx +0 -1
- package/src/SearchableListBase.ts +68 -83
- package/src/SelectBase.ts +580 -0
- package/src/SelectBox.hbs +118 -107
- package/src/SelectBox.ts +155 -445
- package/src/TagGroup.ts +53 -19
- package/src/TagTemplate.tsx +4 -2
- package/src/TextArea.ts +5 -5
- package/src/TextAreaTemplate.tsx +67 -0
- package/src/TextField.ts +57 -24
- package/src/TextFieldTemplate.tsx +90 -0
- package/src/generated/templates/CountrySelectorTemplate.lit.ts +2 -2
- package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
- package/src/generated/templates/SelectBoxTemplate.lit.ts +10 -9
- package/src/generated/themes/Checkbox.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/EventRibbon.css.ts +1 -1
- package/src/generated/themes/Footer.css.ts +1 -1
- package/src/generated/themes/ImageGridTickerItem.css.ts +1 -1
- package/src/generated/themes/InputGroup.css.ts +1 -1
- package/src/generated/themes/Link.css.ts +1 -1
- package/src/generated/themes/ListItem.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
- package/src/generated/themes/RadioButton.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SelectBase.css.ts +9 -0
- package/src/generated/themes/SelectBox.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/StatusMessage.css.ts +1 -1
- package/src/generated/themes/TagGroup.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/themes/Checkbox.css +21 -15
- package/src/themes/CountrySelector.css +42 -115
- package/src/themes/EventRibbon.css +21 -13
- package/src/themes/Footer.css +3 -2
- package/src/themes/ImageGridTickerItem.css +1 -1
- package/src/themes/InputGroup.css +11 -6
- package/src/themes/Link.css +2 -0
- package/src/themes/ListItem.css +6 -0
- package/src/themes/MastheadItem.css +0 -2
- package/src/themes/MastheadMobileMenu.css +2 -0
- package/src/themes/RadioButton.css +29 -6
- package/src/themes/Search.css +0 -1
- package/src/themes/SelectBase.css +239 -0
- package/src/themes/SelectBox.css +13 -195
- package/src/themes/StatusMessage.css +1 -2
- package/src/themes/TagGroup.css +0 -1
- package/src/themes/TextField.css +7 -7
- package/src/types/common.ts +1 -1
- package/dist/assets/fi-hYXoEotT.js +0 -1
- package/dist/assets/gl-eZFVp-ap.js +0 -1
- package/dist/generated/templates/TextAreaTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TextAreaTemplate.lit.js +0 -13
- package/dist/generated/templates/TextAreaTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TextFieldTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TextFieldTemplate.lit.js +0 -14
- package/dist/generated/templates/TextFieldTemplate.lit.js.map +0 -1
- package/src/TextArea.hbs +0 -54
- package/src/TextField.hbs +0 -78
- package/src/generated/templates/TextAreaTemplate.lit.ts +0 -17
- package/src/generated/templates/TextFieldTemplate.lit.ts +0 -18
package/src/SelectBox.ts
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
2
2
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
3
|
-
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
3
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
5
|
-
import
|
|
4
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
6
5
|
import {
|
|
7
|
-
isEnter, isSpace, isDelete, isTabPrevious, isTabNext, isLeft, isRight, isDown, isUp,
|
|
6
|
+
isEnter, isSpace, isDelete, isTabPrevious, isTabNext, isLeft, isRight, isDown, isUp, isBackSpace, isShift,
|
|
8
7
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
8
|
+
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
9
|
+
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
9
10
|
import type UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
10
|
-
import
|
|
11
|
+
import type { UDExItemFromList } from "./SearchableListBase.js";
|
|
12
|
+
import { UDExPopoverPart } from "./types/SearchableListBase.js";
|
|
13
|
+
import { Placement } from "./types/Dropdown.js";
|
|
14
|
+
import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
|
|
15
|
+
import "@ui5/webcomponents-icons/dist/decline.js";
|
|
11
16
|
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
17
|
+
import Tokenizer from "@ui5/webcomponents/dist/Tokenizer.js";
|
|
12
18
|
import Token from "@ui5/webcomponents/dist/Token.js";
|
|
13
|
-
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
14
|
-
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
15
|
-
import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js";
|
|
16
19
|
import Popover from "@ui5/webcomponents/dist/Popover.js";
|
|
17
20
|
import UDExList from "./List.js";
|
|
18
21
|
import UDExListItem from "./ListItem.js";
|
|
@@ -20,30 +23,20 @@ import UDExListGroupHeader from "./ListGroupHeader.js";
|
|
|
20
23
|
import UDExListSelectAll from "./ListSelectAll.js";
|
|
21
24
|
import UDExSelectBoxItem from "./SelectBoxItem.js";
|
|
22
25
|
import UDExSelectBoxGroupHeader from "./SelectBoxGroupHeader.js";
|
|
23
|
-
import type { UDExItemFromList, UDExSearchableListBaseEvents } from "./SearchableListBase.js";
|
|
24
|
-
import UDExSearchableListBase from "./SearchableListBase.js";
|
|
25
|
-
import type { UDExSearchKeydownEventDetail } from "./Search.js";
|
|
26
|
-
import UDExSearch from "./Search.js";
|
|
27
26
|
import UDExTag from "./Tag.js";
|
|
28
|
-
import UDExButton from "./Button.js";
|
|
29
|
-
import UDExValueState from "./types/common.js";
|
|
30
27
|
import UDExStatusMessage from "./StatusMessage.js";
|
|
31
|
-
import UDExControlButton from "./ControlButton.js";
|
|
32
28
|
import UDExBusyIndicator from "./BusyIndicator.js";
|
|
33
|
-
import { Placement } from "./types/Dropdown.js";
|
|
34
|
-
import { UDExPopoverPart } from "./types/SearchableListBase.js";
|
|
35
29
|
import UDExTagGroup from "./TagGroup.js";
|
|
36
|
-
import "
|
|
37
|
-
import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
|
|
38
|
-
import { SELECT_OPTIONS } from "./generated/i18n/i18n-defaults.js";
|
|
30
|
+
import UDExSelectBase from "./SelectBase.js";
|
|
39
31
|
import SelectBoxTemplate from "./generated/templates/SelectBoxTemplate.lit.js";
|
|
40
|
-
import
|
|
32
|
+
import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
|
|
33
|
+
import type { UDExSelectBaseEvents } from "./SelectBase.js";
|
|
41
34
|
|
|
42
35
|
// Styles
|
|
43
|
-
import SelectBoxCss from "./generated/themes/SelectBox.css.js";
|
|
44
36
|
import TextFieldCss from "./generated/themes/TextField.css.js";
|
|
45
37
|
import SearchableListCss from "./generated/themes/SearchableList.css.js";
|
|
46
|
-
import
|
|
38
|
+
import SelectBoxCss from "./generated/themes/SelectBox.css.js";
|
|
39
|
+
import SelectBaseCss from "./generated/themes/SelectBase.css.js";
|
|
47
40
|
|
|
48
41
|
export type SelectBoxAccessibilityAttributes = {
|
|
49
42
|
controls?: string,
|
|
@@ -77,7 +70,13 @@ type UDExSelectBoxRemoveEventDetail = {
|
|
|
77
70
|
@customElement({
|
|
78
71
|
tag: "udex-select-box",
|
|
79
72
|
renderer: litRender,
|
|
80
|
-
styles: [
|
|
73
|
+
styles: [
|
|
74
|
+
TextFieldCss,
|
|
75
|
+
SelectBoxCss,
|
|
76
|
+
SelectBaseCss,
|
|
77
|
+
SearchableListCss,
|
|
78
|
+
getEffectiveScrollbarStyle(),
|
|
79
|
+
],
|
|
81
80
|
template: SelectBoxTemplate,
|
|
82
81
|
dependencies: [
|
|
83
82
|
UDExSelectBoxGroupHeader,
|
|
@@ -85,23 +84,20 @@ type UDExSelectBoxRemoveEventDetail = {
|
|
|
85
84
|
UDExListSelectAll,
|
|
86
85
|
UDExSelectBoxItem,
|
|
87
86
|
UDExStatusMessage,
|
|
88
|
-
UDExControlButton,
|
|
89
|
-
UDExTagGroup,
|
|
90
87
|
UDExBusyIndicator,
|
|
88
|
+
UDExTagGroup,
|
|
91
89
|
UDExListItem,
|
|
92
90
|
UDExList,
|
|
93
|
-
UDExSearch,
|
|
94
|
-
UDExButton,
|
|
95
91
|
UDExTag,
|
|
96
92
|
Tokenizer,
|
|
93
|
+
Popover,
|
|
97
94
|
Token,
|
|
98
95
|
Icon,
|
|
99
|
-
Popover,
|
|
100
96
|
],
|
|
101
97
|
})
|
|
102
98
|
|
|
103
99
|
/**
|
|
104
|
-
* Fired event when the user
|
|
100
|
+
* Fired event when the user remove tag.
|
|
105
101
|
*
|
|
106
102
|
* @public
|
|
107
103
|
* @param {UDExItemFromList} item The removed item
|
|
@@ -115,19 +111,12 @@ type UDExSelectBoxRemoveEventDetail = {
|
|
|
115
111
|
*/
|
|
116
112
|
@event("show-more", { bubbles: true })
|
|
117
113
|
|
|
118
|
-
|
|
119
|
-
* Fired before the dropdown pane is opened.
|
|
120
|
-
*
|
|
121
|
-
* @public
|
|
122
|
-
*/
|
|
123
|
-
@event("before-open", { bubbles: true })
|
|
124
|
-
|
|
125
|
-
class UDExSelectBox extends UDExSearchableListBase {
|
|
114
|
+
class UDExSelectBox extends UDExSelectBase {
|
|
126
115
|
eventDetails!: {
|
|
127
116
|
"remove": UDExSelectBoxRemoveEventDetail,
|
|
128
117
|
"show-more": void,
|
|
129
|
-
|
|
130
|
-
|
|
118
|
+
} & UDExSelectBaseEvents;
|
|
119
|
+
|
|
131
120
|
/**
|
|
132
121
|
* Determines if there is no enough space, the component can be placed
|
|
133
122
|
* over the target.
|
|
@@ -138,86 +127,6 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
138
127
|
@property({ type: Boolean })
|
|
139
128
|
disableTargetOverlap?: boolean;
|
|
140
129
|
|
|
141
|
-
/**
|
|
142
|
-
* Defines whether the component is required.
|
|
143
|
-
*
|
|
144
|
-
* @default false
|
|
145
|
-
* @public
|
|
146
|
-
*/
|
|
147
|
-
@property({ type: Boolean })
|
|
148
|
-
required!: boolean;
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Defines whether the component is in disabled state.
|
|
152
|
-
*
|
|
153
|
-
* @default false
|
|
154
|
-
* @public
|
|
155
|
-
*/
|
|
156
|
-
@property({ type: Boolean })
|
|
157
|
-
disabled!: boolean;
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Defines label text for field container.
|
|
161
|
-
*
|
|
162
|
-
* @default ""
|
|
163
|
-
* @public
|
|
164
|
-
*/
|
|
165
|
-
@property({ type: String })
|
|
166
|
-
label!: string;
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Defines the accessible ARIA name of the component.
|
|
170
|
-
*
|
|
171
|
-
* @default undefined
|
|
172
|
-
* @public
|
|
173
|
-
*/
|
|
174
|
-
@property()
|
|
175
|
-
accessibleName?: string;
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Receives id (or many ids) of the elements that label the component.
|
|
179
|
-
* @default undefined
|
|
180
|
-
* @public
|
|
181
|
-
*/
|
|
182
|
-
@property()
|
|
183
|
-
accessibleNameRef?: string;
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Defines whether the component is read-only.
|
|
187
|
-
*
|
|
188
|
-
* @default false
|
|
189
|
-
* @public
|
|
190
|
-
*/
|
|
191
|
-
@property({ type: Boolean })
|
|
192
|
-
readonly!: boolean;
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Defines whether the component is display-only.
|
|
196
|
-
*
|
|
197
|
-
* @default false
|
|
198
|
-
* @public
|
|
199
|
-
*/
|
|
200
|
-
@property({ type: Boolean })
|
|
201
|
-
displayonly!: boolean;
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Defines the value state of the trigger container.
|
|
205
|
-
*
|
|
206
|
-
* @default "Standard"
|
|
207
|
-
* @public
|
|
208
|
-
*/
|
|
209
|
-
@property()
|
|
210
|
-
valueState: `${UDExValueState}` = UDExValueState.Standard;
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Defines supporting text under the trigger container.
|
|
214
|
-
*
|
|
215
|
-
* @default undefined
|
|
216
|
-
* @public
|
|
217
|
-
*/
|
|
218
|
-
@property({ type: String })
|
|
219
|
-
supportingText?: string;
|
|
220
|
-
|
|
221
130
|
/**
|
|
222
131
|
* Determines on which side of the component the Tooltip is displayed.
|
|
223
132
|
*
|
|
@@ -227,26 +136,6 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
227
136
|
@property()
|
|
228
137
|
tooltipPlacement: `${Placement}` = Placement.Bottom;
|
|
229
138
|
|
|
230
|
-
/**
|
|
231
|
-
* @private
|
|
232
|
-
*/
|
|
233
|
-
@property({ type: String, noAttribute: true })
|
|
234
|
-
_direction?: string;
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* @default false
|
|
238
|
-
* @private
|
|
239
|
-
*/
|
|
240
|
-
@property({ type: Boolean })
|
|
241
|
-
_focused!: boolean;
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* @default false
|
|
245
|
-
* @private
|
|
246
|
-
*/
|
|
247
|
-
@property({ type: Boolean })
|
|
248
|
-
_open: boolean = false;
|
|
249
|
-
|
|
250
139
|
/**
|
|
251
140
|
* @default false
|
|
252
141
|
* @private
|
|
@@ -254,78 +143,35 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
254
143
|
@property({ type: Boolean })
|
|
255
144
|
_showTagsDropdownContent!: boolean;
|
|
256
145
|
|
|
257
|
-
_trigger!: HTMLElement;
|
|
258
|
-
_triggerWrapper!: HTMLElement;
|
|
259
|
-
_popover!: Popover;
|
|
260
|
-
_tokenizer!: Tokenizer;
|
|
261
|
-
_search!: UDExSearch;
|
|
262
|
-
_singleSelectedOption!: string;
|
|
263
146
|
_truncatableTag!: UDExTag;
|
|
264
|
-
_tags!: Array<UDExTag>;
|
|
265
147
|
_inactiveTabIndex: number = -1;
|
|
266
|
-
|
|
267
|
-
_openedByTrigger: boolean = true;
|
|
268
|
-
_shouldScrollToEnd: boolean = false;
|
|
269
|
-
_handleResizeBound: ResizeObserverCallback;
|
|
148
|
+
_handleResizeTokenizerBound: ResizeObserverCallback;
|
|
270
149
|
|
|
271
150
|
constructor() {
|
|
272
151
|
super();
|
|
273
|
-
this.
|
|
274
|
-
this._handleResizeBound = this._handleResize.bind(this);
|
|
275
|
-
this._filteredItems = [];
|
|
152
|
+
this._handleResizeTokenizerBound = this.handleResizeTokenizer.bind(this);
|
|
276
153
|
}
|
|
277
154
|
|
|
278
155
|
onEnterDOM() {
|
|
279
|
-
|
|
156
|
+
super.onEnterDOM();
|
|
157
|
+
ResizeHandler.register(this, this._handleResizeTokenizerBound);
|
|
280
158
|
}
|
|
281
159
|
|
|
282
160
|
onExitDOM() {
|
|
283
|
-
|
|
161
|
+
super.onExitDOM();
|
|
162
|
+
ResizeHandler.deregister(this, this._handleResizeTokenizerBound);
|
|
284
163
|
}
|
|
285
164
|
|
|
286
165
|
onAfterRendering() {
|
|
287
|
-
|
|
288
|
-
this.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
this._triggerWrapper = this.getTriggerWrapper();
|
|
292
|
-
this._tags = this.getTags();
|
|
293
|
-
this.handleDirection();
|
|
294
|
-
if (this._tokenizer?.tokens.length > 0) {
|
|
295
|
-
if (!this.displayonly) {
|
|
296
|
-
this._tokenizer.moreLink?.setAttribute("tabindex", "-1");
|
|
297
|
-
}
|
|
298
|
-
if (this._shouldScrollToEnd) {
|
|
299
|
-
this._tokenizer.scrollToEnd();
|
|
300
|
-
}
|
|
301
|
-
this.resetTagsTabIndexes();
|
|
302
|
-
}
|
|
303
|
-
this.handleOutsideClick();
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
onBeforeRendering() {
|
|
307
|
-
super.onBeforeRendering();
|
|
308
|
-
|
|
309
|
-
if (this.modeSingleSelect && this.hasSelectedItems) {
|
|
310
|
-
this.handleSingleSelectMode();
|
|
166
|
+
super.onAfterRendering();
|
|
167
|
+
this.handleSelectBoxOutsideClick();
|
|
168
|
+
if (this.tagGroup) {
|
|
169
|
+
this.configureTokenizer();
|
|
311
170
|
}
|
|
312
171
|
}
|
|
313
172
|
|
|
314
|
-
|
|
315
|
-
this.
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
handleItemPress(e:CustomEvent) {
|
|
319
|
-
this.onItemPress(e);
|
|
320
|
-
|
|
321
|
-
if (this.modeSingleSelect) {
|
|
322
|
-
this.handleSingleSelectMode();
|
|
323
|
-
this.closeDropdown();
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
handleSingleSelectMode() {
|
|
328
|
-
this._singleSelectedOption = this.selectedItems[0]?.label;
|
|
173
|
+
handleResizeTokenizer() {
|
|
174
|
+
this.resizeTokenizer();
|
|
329
175
|
}
|
|
330
176
|
|
|
331
177
|
handleSelectAll(e:CustomEvent) {
|
|
@@ -333,33 +179,46 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
333
179
|
}
|
|
334
180
|
|
|
335
181
|
handleHeaderPress(e:CustomEvent) {
|
|
182
|
+
this._search.focus();
|
|
336
183
|
this.onHeaderPress(e);
|
|
337
184
|
}
|
|
338
185
|
|
|
339
|
-
|
|
340
|
-
this.
|
|
186
|
+
handleItemPress(e:CustomEvent) {
|
|
187
|
+
this.handleItemSelection(e);
|
|
341
188
|
}
|
|
342
189
|
|
|
343
|
-
|
|
344
|
-
this.
|
|
345
|
-
|
|
190
|
+
handlerShowMoreItems(e: CustomEvent) {
|
|
191
|
+
if (!this.displayonly) {
|
|
192
|
+
this.showMoreItems(e);
|
|
193
|
+
this.handleUnselectTruncatableTag();
|
|
194
|
+
this.openDropdown();
|
|
195
|
+
}
|
|
196
|
+
this.fireDecoratorEvent("show-more");
|
|
346
197
|
}
|
|
347
198
|
|
|
348
|
-
|
|
349
|
-
this.
|
|
350
|
-
}
|
|
199
|
+
handleInputFocusIn() {
|
|
200
|
+
this.inputFocusIn();
|
|
351
201
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
356
|
-
this._focused = true;
|
|
357
|
-
if (this._tokenizer) {
|
|
358
|
-
this._tokenizer.expanded = false;
|
|
202
|
+
if (this.tokenizer) {
|
|
203
|
+
this.tokenizer.expanded = true;
|
|
204
|
+
this._requestRender = true;
|
|
359
205
|
}
|
|
360
206
|
}
|
|
361
207
|
|
|
362
|
-
|
|
208
|
+
handleInputFocusOut(e: FocusEvent) {
|
|
209
|
+
const relatedTarget = e.relatedTarget as HTMLElement;
|
|
210
|
+
const isInsideComponent = relatedTarget?.closest(`.${this._rootClass}`);
|
|
211
|
+
const hasTags = this.tokenizer?.tokens.length > 0;
|
|
212
|
+
|
|
213
|
+
if (!isInsideComponent) {
|
|
214
|
+
this.closeDropdown();
|
|
215
|
+
this.resetSearchState();
|
|
216
|
+
|
|
217
|
+
if (hasTags) {
|
|
218
|
+
this.collapseTokenizer();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
363
222
|
this._focused = false;
|
|
364
223
|
}
|
|
365
224
|
|
|
@@ -368,35 +227,26 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
368
227
|
this._managePopupListeners(UDExPopoverPart.Header, "addEventListener");
|
|
369
228
|
}
|
|
370
229
|
|
|
371
|
-
|
|
372
|
-
this._setContentHeight();
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
this.fireDecoratorEvent("before-open");
|
|
230
|
+
this.dropdownBeforeOpen();
|
|
376
231
|
}
|
|
377
232
|
|
|
378
|
-
|
|
233
|
+
handleDropdownClose() {
|
|
379
234
|
if (this.preventPageScroll) {
|
|
380
235
|
this._managePopupListeners(UDExPopoverPart.Header, "removeEventListener");
|
|
381
236
|
}
|
|
382
237
|
|
|
383
|
-
if (this.
|
|
384
|
-
this.
|
|
238
|
+
if (this.modeMultiSelect) {
|
|
239
|
+
this.handleUnselectTruncatableTag();
|
|
385
240
|
}
|
|
386
|
-
this.handleUnselectTruncatableTag();
|
|
387
|
-
this._open = false;
|
|
388
|
-
}
|
|
389
241
|
|
|
390
|
-
|
|
391
|
-
this.
|
|
392
|
-
this._showTagsDropdownContent = false;
|
|
393
|
-
this.openDropdown();
|
|
394
|
-
this.handleUnselectTruncatableTag();
|
|
242
|
+
this._open = false;
|
|
243
|
+
this.fireEventDropdownClose();
|
|
395
244
|
}
|
|
396
245
|
|
|
397
246
|
handleRemoveTag(e: CustomEvent | null, tag?: UI5Element) {
|
|
398
247
|
tag = tag ?? (e?.detail.tag as UI5Element);
|
|
399
248
|
const tagId: string = tag.getAttribute("data-id")!;
|
|
249
|
+
this.tokenizer.deleteToken(tag as Token, true);
|
|
400
250
|
this.handleDropdownItemPress(tagId);
|
|
401
251
|
this.fireDecoratorEventRemove(tagId);
|
|
402
252
|
}
|
|
@@ -416,16 +266,7 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
416
266
|
handleUnselectTruncatableTag() {
|
|
417
267
|
if (this._truncatableTag?.selected) {
|
|
418
268
|
this._truncatableTag.selected = false;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
handleKeyDownTrigger(e: KeyboardEvent) {
|
|
423
|
-
if (!this.isDisabled && (isSpace(e) || isEnter(e))) {
|
|
424
|
-
e.preventDefault();
|
|
425
|
-
e.stopPropagation();
|
|
426
269
|
this._showTagsDropdownContent = false;
|
|
427
|
-
this._openedByTrigger = true;
|
|
428
|
-
this.openDropdown();
|
|
429
270
|
}
|
|
430
271
|
}
|
|
431
272
|
|
|
@@ -434,18 +275,17 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
434
275
|
const originalEvent: KeyboardEvent = e.detail.originalEvent;
|
|
435
276
|
const tag = originalEvent.target as UDExTag;
|
|
436
277
|
const token = originalEvent.target as Token;
|
|
437
|
-
this.
|
|
438
|
-
|
|
439
|
-
this._tokenizer.expanded = (isLeft(originalEvent) || isRight(originalEvent) || isBackSpace(originalEvent) || isDelete(originalEvent)) && tagsCount > 0;
|
|
278
|
+
this.tokenizer.expanded = (isLeft(originalEvent) || isRight(originalEvent) || isBackSpace(originalEvent) || isDelete(originalEvent)) && this.tokenizer.tokens.length > 0;
|
|
279
|
+
|
|
440
280
|
if (isTabNext(originalEvent)) {
|
|
441
|
-
|
|
281
|
+
originalEvent.preventDefault();
|
|
282
|
+
this._search.focus();
|
|
442
283
|
return;
|
|
443
284
|
}
|
|
444
285
|
|
|
445
286
|
if ((isDown(originalEvent) || isUp(originalEvent))) {
|
|
446
|
-
this.
|
|
447
|
-
this.
|
|
448
|
-
this.showMoreItems();
|
|
287
|
+
this._search.focus();
|
|
288
|
+
this.openDropdown();
|
|
449
289
|
}
|
|
450
290
|
|
|
451
291
|
if (isSpace(originalEvent) || isShift(originalEvent) || isEnter(originalEvent)) {
|
|
@@ -455,9 +295,9 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
455
295
|
}
|
|
456
296
|
|
|
457
297
|
if (isLeft(originalEvent) || isRight(originalEvent)) {
|
|
458
|
-
const nextTokenIndex = this.
|
|
459
|
-
this.
|
|
460
|
-
this.
|
|
298
|
+
const nextTokenIndex = this.tokenizer._calcNextTokenIndex(token, this.tokenizer.tokens, isRight(originalEvent));
|
|
299
|
+
this.focusTagByIndex(nextTokenIndex);
|
|
300
|
+
this.tokenizer._scrollToToken(this.tokenizer.tokens[nextTokenIndex]);
|
|
461
301
|
return;
|
|
462
302
|
}
|
|
463
303
|
|
|
@@ -469,70 +309,73 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
469
309
|
|
|
470
310
|
if (isDelete(originalEvent) || isBackSpace(originalEvent)) {
|
|
471
311
|
this.handleRemoveTag(null, tag);
|
|
472
|
-
if (this.
|
|
473
|
-
this.
|
|
312
|
+
if (this.tokenizer.tokens.length === 1) {
|
|
313
|
+
this._search.focus();
|
|
474
314
|
} else {
|
|
475
|
-
this.
|
|
315
|
+
this.tokenizer.deleteToken(token, true);
|
|
476
316
|
}
|
|
477
317
|
}
|
|
478
318
|
}
|
|
479
319
|
|
|
480
|
-
|
|
481
|
-
|
|
320
|
+
handleKeyDownSearch(e: KeyboardEvent) {
|
|
321
|
+
const tokenizer = this.tokenizer;
|
|
322
|
+
const hasTags = tokenizer?.tokens.length > 0;
|
|
323
|
+
const lastTagIndex = tokenizer?.tokens.length - 1;
|
|
324
|
+
|
|
325
|
+
if (isTabPrevious(e)) {
|
|
326
|
+
this.resetTagsTabIndexes();
|
|
482
327
|
return;
|
|
483
328
|
}
|
|
484
329
|
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
if ((isTabNextPress && (!isSearchResetTrigger || this.isListEmpty)) || isTabPrevPress || isEscapePress) {
|
|
490
|
-
this.closeDropdown(e);
|
|
330
|
+
if (isLeft(e) && hasTags) {
|
|
331
|
+
e.preventDefault();
|
|
332
|
+
this.focusTagByIndex(lastTagIndex);
|
|
333
|
+
return;
|
|
491
334
|
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
handleKeyDownSearch(keyEvent: CustomEvent<UDExSearchKeydownEventDetail>) {
|
|
495
|
-
const { detail: { e } } = keyEvent;
|
|
496
335
|
|
|
497
|
-
if (
|
|
498
|
-
this.
|
|
336
|
+
if (isBackSpace(e) && this._inputValue === "" && hasTags) {
|
|
337
|
+
this.focusTagByIndex(lastTagIndex);
|
|
338
|
+
return;
|
|
499
339
|
}
|
|
340
|
+
|
|
341
|
+
this.onKeyDownSearch(e);
|
|
500
342
|
}
|
|
501
343
|
|
|
502
|
-
|
|
503
|
-
document.addEventListener("click", (e:
|
|
504
|
-
if (
|
|
505
|
-
this.
|
|
344
|
+
handleSelectBoxOutsideClick() {
|
|
345
|
+
document.addEventListener("click", (e: Event) => {
|
|
346
|
+
if (e.target !== this) {
|
|
347
|
+
this._open = this._popover.open;
|
|
348
|
+
if (this.tokenizer?.tokens.length > 0) {
|
|
349
|
+
this.collapseTokenizer();
|
|
350
|
+
}
|
|
506
351
|
}
|
|
507
|
-
this._open = this._popover.open;
|
|
508
352
|
});
|
|
509
353
|
}
|
|
510
354
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
this._tokenizer.expanded = true;
|
|
355
|
+
focusTagByIndex(index: number) {
|
|
356
|
+
const token = this.tokenizer.tokens[index];
|
|
357
|
+
if (token) {
|
|
358
|
+
token.focus();
|
|
359
|
+
token.forcedTabIndex = "0";
|
|
517
360
|
}
|
|
518
361
|
}
|
|
519
362
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
}
|
|
363
|
+
fireDecoratorEventRemove(id: string) {
|
|
364
|
+
this.fireDecoratorEvent("remove", {
|
|
365
|
+
item: this.getItemFromList(id),
|
|
366
|
+
});
|
|
367
|
+
}
|
|
526
368
|
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
369
|
+
collapseTokenizer() {
|
|
370
|
+
this.tokenizer.expanded = false;
|
|
371
|
+
this._selectedOption = "";
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
showMoreItems(e: CustomEvent) {
|
|
375
|
+
e.preventDefault();
|
|
376
|
+
this._focused = true;
|
|
377
|
+
this._search.focus();
|
|
378
|
+
this._showTagsDropdownContent = false;
|
|
536
379
|
}
|
|
537
380
|
|
|
538
381
|
toggleTruncatedPopover(tag: UDExTag) {
|
|
@@ -549,86 +392,20 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
549
392
|
}
|
|
550
393
|
}
|
|
551
394
|
|
|
552
|
-
|
|
553
|
-
this.
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
focusTag(index: number) {
|
|
557
|
-
this._tokenizer.tokens[index].focus();
|
|
558
|
-
this._tokenizer.tokens[index].forcedTabIndex = "0";
|
|
395
|
+
configureTokenizer() {
|
|
396
|
+
this.tagGroup._scrollToEnd = true;
|
|
397
|
+
this.resetTagsTabIndexes();
|
|
559
398
|
}
|
|
560
399
|
|
|
561
|
-
|
|
562
|
-
this.
|
|
563
|
-
|
|
400
|
+
resetTagsTabIndexes() {
|
|
401
|
+
this.tags.forEach(tag => {
|
|
402
|
+
this.getTagContent(tag).tabIndex = this._inactiveTabIndex;
|
|
564
403
|
});
|
|
565
404
|
}
|
|
566
405
|
|
|
567
|
-
|
|
568
|
-
if (this.
|
|
569
|
-
this.
|
|
570
|
-
} else {
|
|
571
|
-
this._showTagsDropdownContent = false;
|
|
572
|
-
this.openDropdown();
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
handleOpenSingleSelect() {
|
|
577
|
-
if (this._popover.open) {
|
|
578
|
-
this.closeDropdown();
|
|
579
|
-
} else {
|
|
580
|
-
this.openDropdown();
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
getHandleMultiSelectOpen() {
|
|
585
|
-
return !this.isDisabled && this.modeMultiSelect ? this.handleOpenMultiSelect() : undefined;
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
getHandleSingleSelectOpen() {
|
|
589
|
-
return !this.isDisabled && this.modeSingleSelect ? this.handleOpenSingleSelect() : undefined;
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
getHandlerShowMoreItems(e: CustomEvent) {
|
|
593
|
-
if (!this.displayonly) {
|
|
594
|
-
e.preventDefault();
|
|
595
|
-
this.showMoreItems();
|
|
596
|
-
}
|
|
597
|
-
this.fireDecoratorEvent("show-more");
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
getTrigger(): HTMLElement {
|
|
601
|
-
return this.shadowRoot!.querySelector(".udex-text-field__input")!;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
getTriggerWrapper(): HTMLElement {
|
|
605
|
-
return this.shadowRoot!.querySelector(".udex-text-field__wrap")!;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
getTagGroup(): UDExTagGroup {
|
|
609
|
-
return this.shadowRoot!.querySelector<UDExTagGroup>("[udex-tag-group]")!;
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
getTags(): Array<UDExTag> {
|
|
613
|
-
if (this.getTagGroup()) {
|
|
614
|
-
return Array.from(this.getTagGroup().shadowRoot!.querySelectorAll<UDExTag>("[udex-tag]"));
|
|
615
|
-
}
|
|
616
|
-
return [];
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
getTagContent(tag: UDExTag): HTMLElement {
|
|
620
|
-
return tag.shadowRoot!.querySelector(".udex-tag")!;
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
handleDirection() {
|
|
624
|
-
const directionStyles: string = window
|
|
625
|
-
.getComputedStyle(this)
|
|
626
|
-
.getPropertyValue("direction");
|
|
627
|
-
|
|
628
|
-
if (!directionStyles) {
|
|
629
|
-
this._direction = "ltr";
|
|
630
|
-
} else {
|
|
631
|
-
this._direction = directionStyles;
|
|
406
|
+
resizeTokenizer() {
|
|
407
|
+
if (this.tokenizer) {
|
|
408
|
+
this.tokenizer._handleResize();
|
|
632
409
|
}
|
|
633
410
|
}
|
|
634
411
|
|
|
@@ -636,8 +413,8 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
636
413
|
return isSpace(e) || isEnter(e);
|
|
637
414
|
}
|
|
638
415
|
|
|
639
|
-
|
|
640
|
-
|
|
416
|
+
getTagContent(tag: UDExTag): HTMLElement {
|
|
417
|
+
return tag.shadowRoot!.querySelector(".udex-tag")!;
|
|
641
418
|
}
|
|
642
419
|
|
|
643
420
|
/**
|
|
@@ -648,105 +425,38 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
648
425
|
this.closeDropdown();
|
|
649
426
|
}
|
|
650
427
|
|
|
651
|
-
get
|
|
652
|
-
return
|
|
428
|
+
get tokenizer(): Tokenizer {
|
|
429
|
+
return this.tagGroup?.tokenizer;
|
|
653
430
|
}
|
|
654
431
|
|
|
655
|
-
get
|
|
656
|
-
return this.
|
|
432
|
+
get tagGroup(): UDExTagGroup {
|
|
433
|
+
return this.shadowRoot!.querySelector<UDExTagGroup>("[udex-tag-group]")!;
|
|
657
434
|
}
|
|
658
435
|
|
|
659
|
-
get
|
|
660
|
-
return this.
|
|
436
|
+
get tags(): Array<UDExTag> {
|
|
437
|
+
return this.tagGroup ? Array.from(this.tagGroup.shadowRoot!.querySelectorAll<UDExTag>("[udex-tag]")) : [];
|
|
661
438
|
}
|
|
662
439
|
|
|
663
|
-
get
|
|
664
|
-
return this.
|
|
440
|
+
get truncatableTagLabel(): string {
|
|
441
|
+
return this._truncatableTag.text.replace(/<\/?b>/gi, "");
|
|
665
442
|
}
|
|
666
443
|
|
|
667
444
|
get showMultiSelectedOptions(): boolean {
|
|
668
445
|
return this.hasSelectedItems && this.modeMultiSelect;
|
|
669
446
|
}
|
|
670
447
|
|
|
671
|
-
get
|
|
672
|
-
|
|
673
|
-
const isActive = this._open || this._singleSelectedOption || this.hasSelectedItems;
|
|
674
|
-
return isActive ? `${baseClass} ${baseClass}_active` : `${baseClass}`;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
get isReadOrDisplayOnly(): boolean {
|
|
678
|
-
return this.readonly || this.displayonly;
|
|
448
|
+
get allowTargetOverlap(): boolean {
|
|
449
|
+
return !this.disableTargetOverlap;
|
|
679
450
|
}
|
|
680
451
|
|
|
681
|
-
get tokenizerExpanded() {
|
|
452
|
+
get tokenizerExpanded(): boolean {
|
|
682
453
|
if (this._showTagsDropdownContent && this._truncatableTag) {
|
|
683
454
|
return false;
|
|
684
455
|
}
|
|
685
456
|
|
|
686
|
-
|
|
687
|
-
return this._tokenizer.expanded;
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
return this._open;
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
get showTrigger(): boolean {
|
|
694
|
-
return !this.displayonly;
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
get hasSelectedItems(): boolean {
|
|
698
|
-
return this.selectedItems.length > 0;
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
get effectiveTabIndex(): string {
|
|
702
|
-
const tabindex = this.getAttribute("tabindex");
|
|
703
|
-
return this.disabled ? `${this._inactiveTabIndex}` : tabindex || `${this._inactiveTabIndex}`;
|
|
704
|
-
}
|
|
705
|
-
|
|
706
|
-
get triggerTabIndex(): string {
|
|
707
|
-
return this.disabled || this.readonly ? `${this._inactiveTabIndex}` : "";
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
get iconAccessibleNameText(): string {
|
|
711
|
-
const selectOptionsText = UDExSelectBox.i18nBundle.getText(SELECT_OPTIONS);
|
|
712
|
-
const iconAccessibleNameTextSingleMode = this._singleSelectedOption || selectOptionsText;
|
|
713
|
-
return this.modeMultiSelect ? selectOptionsText : iconAccessibleNameTextSingleMode;
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
get additionalClassName(): string {
|
|
717
|
-
return `udex-list__sticky`;
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
get searchableList() {
|
|
721
|
-
this.defaultAccessibleRole = "listbox";
|
|
722
|
-
return executeTemplate(UDExSelectBox.searchableListBaseTemplate, this);
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
get accInfo() {
|
|
726
|
-
return {
|
|
727
|
-
"ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || this.label || undefined,
|
|
728
|
-
};
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
get accessibilityAttributes(): SelectBoxAccessibilityAttributes {
|
|
732
|
-
return {
|
|
733
|
-
expanded: `${this._open}`,
|
|
734
|
-
controls: this.popoverId,
|
|
735
|
-
hasPopup: this.listboxRole,
|
|
736
|
-
ariaLabel: this.iconAccessibleNameText,
|
|
737
|
-
};
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
get popoverId(): string {
|
|
741
|
-
return `${this._id}_udex-select-box__dropdown`;
|
|
742
|
-
}
|
|
743
|
-
|
|
744
|
-
get listboxRole(): string {
|
|
745
|
-
return "listbox";
|
|
746
|
-
}
|
|
457
|
+
const isCurrentlyExpanded = this.tokenizer?.expanded;
|
|
747
458
|
|
|
748
|
-
|
|
749
|
-
return SearchableListBaseTemplate;
|
|
459
|
+
return this._focused || this._open || isCurrentlyExpanded;
|
|
750
460
|
}
|
|
751
461
|
}
|
|
752
462
|
|