@sapudex/web-components 2.22.0 → 2.23.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.
Files changed (170) hide show
  1. package/cypress/specs/CountrySelector.cy.tsx +158 -144
  2. package/cypress/specs/EventRibbon.cy.tsx +3 -1
  3. package/cypress/specs/SelectBox.cy.tsx +173 -206
  4. package/cypress/specs/Tag.cy.tsx +1 -1
  5. package/cypress/specs/TextField.cy.tsx +15 -0
  6. package/cypress/specs/Textarea.cy.tsx +15 -33
  7. package/dist/CountrySelector.d.ts +25 -142
  8. package/dist/CountrySelector.js +91 -268
  9. package/dist/CountrySelector.js.map +1 -1
  10. package/dist/FilterMenu.d.ts +14 -2
  11. package/dist/FilterMenu.js +11 -1
  12. package/dist/FilterMenu.js.map +1 -1
  13. package/dist/List.js +2 -3
  14. package/dist/List.js.map +1 -1
  15. package/dist/ListGroupHeaderBase.d.ts +1 -0
  16. package/dist/ListGroupHeaderBase.js +3 -0
  17. package/dist/ListGroupHeaderBase.js.map +1 -1
  18. package/dist/ListItemBase.d.ts +12 -0
  19. package/dist/ListItemBase.js +17 -2
  20. package/dist/ListItemBase.js.map +1 -1
  21. package/dist/MediaPlayer.js +2 -0
  22. package/dist/MediaPlayer.js.map +1 -1
  23. package/dist/MediaPlayerTemplate.js +4 -4
  24. package/dist/MediaPlayerTemplate.js.map +1 -1
  25. package/dist/SearchableListBase.d.ts +23 -16
  26. package/dist/SearchableListBase.js +48 -72
  27. package/dist/SearchableListBase.js.map +1 -1
  28. package/dist/SelectBase.d.ts +193 -0
  29. package/dist/SelectBase.js +428 -0
  30. package/dist/SelectBase.js.map +1 -0
  31. package/dist/SelectBox.d.ts +30 -152
  32. package/dist/SelectBox.js +139 -348
  33. package/dist/SelectBox.js.map +1 -1
  34. package/dist/TagGroup.d.ts +23 -5
  35. package/dist/TagGroup.js +37 -16
  36. package/dist/TagGroup.js.map +1 -1
  37. package/dist/TagTemplate.js +4 -2
  38. package/dist/TagTemplate.js.map +1 -1
  39. package/dist/TextArea.d.ts +1 -1
  40. package/dist/TextArea.js +5 -5
  41. package/dist/TextArea.js.map +1 -1
  42. package/dist/TextAreaTemplate.d.ts +2 -0
  43. package/dist/TextAreaTemplate.js +13 -0
  44. package/dist/TextAreaTemplate.js.map +1 -0
  45. package/dist/TextField.d.ts +29 -4
  46. package/dist/TextField.js +32 -16
  47. package/dist/TextField.js.map +1 -1
  48. package/dist/TextFieldTemplate.d.ts +2 -0
  49. package/dist/TextFieldTemplate.js +14 -0
  50. package/dist/TextFieldTemplate.js.map +1 -0
  51. package/dist/assets/{InputSuggestions-By00xQan.js → InputSuggestions-C8m6N2-d.js} +1 -1
  52. package/dist/assets/{ListItemStandardExpandableTextTemplate-BGtoxRbA.js → ListItemStandardExpandableTextTemplate-BwD5bYhw.js} +1 -1
  53. package/dist/assets/{bundle.esm-9yDdQqR5.js → bundle.esm-hGsUwmUy.js} +218 -217
  54. package/dist/css/themes/CountrySelector.css +1 -1
  55. package/dist/css/themes/EventRibbon.css +1 -1
  56. package/dist/css/themes/ListItem.css +1 -1
  57. package/dist/css/themes/MastheadItem.css +1 -1
  58. package/dist/css/themes/MastheadMobileMenu.css +1 -1
  59. package/dist/css/themes/RatingIndicator.css +1 -1
  60. package/dist/css/themes/Search.css +1 -1
  61. package/dist/css/themes/SelectBase.css +1 -0
  62. package/dist/css/themes/SelectBox.css +1 -1
  63. package/dist/css/themes/Slider.css +1 -1
  64. package/dist/css/themes/TagGroup.css +1 -1
  65. package/dist/css/themes/TextField.css +1 -1
  66. package/dist/custom-elements-internal.json +1088 -1284
  67. package/dist/custom-elements.json +284 -934
  68. package/dist/generated/templates/CountrySelectorTemplate.lit.js +3 -3
  69. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  70. package/dist/generated/templates/ListItemTemplate.lit.js +1 -1
  71. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  72. package/dist/generated/templates/SelectBoxTemplate.lit.js +10 -9
  73. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  74. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  75. package/dist/generated/themes/CountrySelector.css.js +1 -1
  76. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  77. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  78. package/dist/generated/themes/EventRibbon.css.js +1 -1
  79. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  80. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  81. package/dist/generated/themes/ListItem.css.js +1 -1
  82. package/dist/generated/themes/ListItem.css.js.map +1 -1
  83. package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
  84. package/dist/generated/themes/MastheadItem.css.js +1 -1
  85. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  86. package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
  87. package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
  88. package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
  89. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  90. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  91. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  92. package/dist/generated/themes/Search.css.d.ts +1 -1
  93. package/dist/generated/themes/Search.css.js +1 -1
  94. package/dist/generated/themes/Search.css.js.map +1 -1
  95. package/dist/generated/themes/SelectBase.css.d.ts +2 -0
  96. package/dist/generated/themes/SelectBase.css.js +8 -0
  97. package/dist/generated/themes/SelectBase.css.js.map +1 -0
  98. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  99. package/dist/generated/themes/SelectBox.css.js +1 -1
  100. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  101. package/dist/generated/themes/Slider.css.d.ts +1 -1
  102. package/dist/generated/themes/Slider.css.js +1 -1
  103. package/dist/generated/themes/Slider.css.js.map +1 -1
  104. package/dist/generated/themes/TagGroup.css.d.ts +1 -1
  105. package/dist/generated/themes/TagGroup.css.js +1 -1
  106. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  107. package/dist/generated/themes/TextField.css.d.ts +1 -1
  108. package/dist/generated/themes/TextField.css.js +1 -1
  109. package/dist/generated/themes/TextField.css.js.map +1 -1
  110. package/dist/types/common.d.ts +1 -1
  111. package/dist/types/common.js +1 -1
  112. package/dist/types/common.js.map +1 -1
  113. package/dist/vscode.html-custom-data.json +23 -234
  114. package/dist/web-types.json +256 -811
  115. package/package.json +1 -1
  116. package/src/CountrySelector.hbs +6 -61
  117. package/src/CountrySelector.ts +93 -375
  118. package/src/FilterMenu.ts +13 -3
  119. package/src/List.ts +2 -3
  120. package/src/ListGroupHeaderBase.ts +4 -0
  121. package/src/ListItem.hbs +0 -1
  122. package/src/ListItemBase.ts +17 -3
  123. package/src/MediaPlayer.ts +2 -0
  124. package/src/MediaPlayerTemplate.tsx +0 -1
  125. package/src/SearchableListBase.ts +68 -83
  126. package/src/SelectBase.ts +580 -0
  127. package/src/SelectBox.hbs +118 -107
  128. package/src/SelectBox.ts +155 -445
  129. package/src/TagGroup.ts +53 -19
  130. package/src/TagTemplate.tsx +4 -2
  131. package/src/TextArea.ts +5 -5
  132. package/src/TextAreaTemplate.tsx +67 -0
  133. package/src/TextField.ts +57 -24
  134. package/src/TextFieldTemplate.tsx +90 -0
  135. package/src/generated/templates/CountrySelectorTemplate.lit.ts +2 -2
  136. package/src/generated/templates/ListItemTemplate.lit.ts +1 -1
  137. package/src/generated/templates/SelectBoxTemplate.lit.ts +10 -9
  138. package/src/generated/themes/CountrySelector.css.ts +1 -1
  139. package/src/generated/themes/EventRibbon.css.ts +1 -1
  140. package/src/generated/themes/ListItem.css.ts +1 -1
  141. package/src/generated/themes/MastheadItem.css.ts +1 -1
  142. package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
  143. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  144. package/src/generated/themes/Search.css.ts +1 -1
  145. package/src/generated/themes/SelectBase.css.ts +9 -0
  146. package/src/generated/themes/SelectBox.css.ts +1 -1
  147. package/src/generated/themes/Slider.css.ts +1 -1
  148. package/src/generated/themes/TagGroup.css.ts +1 -1
  149. package/src/generated/themes/TextField.css.ts +1 -1
  150. package/src/themes/CountrySelector.css +42 -115
  151. package/src/themes/EventRibbon.css +21 -13
  152. package/src/themes/ListItem.css +6 -0
  153. package/src/themes/MastheadItem.css +0 -2
  154. package/src/themes/MastheadMobileMenu.css +2 -0
  155. package/src/themes/Search.css +0 -1
  156. package/src/themes/SelectBase.css +239 -0
  157. package/src/themes/SelectBox.css +13 -195
  158. package/src/themes/TagGroup.css +0 -1
  159. package/src/themes/TextField.css +7 -7
  160. package/src/types/common.ts +1 -1
  161. package/dist/generated/templates/TextAreaTemplate.lit.d.ts +0 -3
  162. package/dist/generated/templates/TextAreaTemplate.lit.js +0 -13
  163. package/dist/generated/templates/TextAreaTemplate.lit.js.map +0 -1
  164. package/dist/generated/templates/TextFieldTemplate.lit.d.ts +0 -3
  165. package/dist/generated/templates/TextFieldTemplate.lit.js +0 -14
  166. package/dist/generated/templates/TextFieldTemplate.lit.js.map +0 -1
  167. package/src/TextArea.hbs +0 -54
  168. package/src/TextField.hbs +0 -78
  169. package/src/generated/templates/TextAreaTemplate.lit.ts +0 -17
  170. package/src/generated/templates/TextFieldTemplate.lit.ts +0 -18
package/dist/SelectBox.js CHANGED
@@ -4,18 +4,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var UDExSelectBox_1;
8
7
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
9
8
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
10
- import property from "@ui5/webcomponents-base/dist/decorators/property.js";
11
9
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
12
- import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
13
- import { isEnter, isSpace, isDelete, isTabPrevious, isTabNext, isLeft, isRight, isDown, isUp, isEscape, isBackSpace, isShift, } from "@ui5/webcomponents-base/dist/Keys.js";
14
- import Tokenizer from "@ui5/webcomponents/dist/Tokenizer.js";
10
+ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
11
+ import { isEnter, isSpace, isDelete, isTabPrevious, isTabNext, isLeft, isRight, isDown, isUp, isBackSpace, isShift, } from "@ui5/webcomponents-base/dist/Keys.js";
12
+ import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
13
+ import { UDExPopoverPart } from "./types/SearchableListBase.js";
14
+ import { Placement } from "./types/Dropdown.js";
15
+ import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
16
+ import "@ui5/webcomponents-icons/dist/decline.js";
15
17
  import Icon from "@ui5/webcomponents/dist/Icon.js";
18
+ import Tokenizer from "@ui5/webcomponents/dist/Tokenizer.js";
16
19
  import Token from "@ui5/webcomponents/dist/Token.js";
17
- import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
18
- import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js";
19
20
  import Popover from "@ui5/webcomponents/dist/Popover.js";
20
21
  import UDExList from "./List.js";
21
22
  import UDExListItem from "./ListItem.js";
@@ -23,27 +24,18 @@ import UDExListGroupHeader from "./ListGroupHeader.js";
23
24
  import UDExListSelectAll from "./ListSelectAll.js";
24
25
  import UDExSelectBoxItem from "./SelectBoxItem.js";
25
26
  import UDExSelectBoxGroupHeader from "./SelectBoxGroupHeader.js";
26
- import UDExSearchableListBase from "./SearchableListBase.js";
27
- import UDExSearch from "./Search.js";
28
27
  import UDExTag from "./Tag.js";
29
- import UDExButton from "./Button.js";
30
- import UDExValueState from "./types/common.js";
31
28
  import UDExStatusMessage from "./StatusMessage.js";
32
- import UDExControlButton from "./ControlButton.js";
33
29
  import UDExBusyIndicator from "./BusyIndicator.js";
34
- import { Placement } from "./types/Dropdown.js";
35
- import { UDExPopoverPart } from "./types/SearchableListBase.js";
36
30
  import UDExTagGroup from "./TagGroup.js";
37
- import "@ui5/webcomponents-icons/dist/decline.js";
38
- import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
39
- import { SELECT_OPTIONS } from "./generated/i18n/i18n-defaults.js";
31
+ import UDExSelectBase from "./SelectBase.js";
40
32
  import SelectBoxTemplate from "./generated/templates/SelectBoxTemplate.lit.js";
41
- import SearchableListBaseTemplate from "./generated/templates/SearchableListBaseTemplate.lit.js";
33
+ import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
42
34
  // Styles
43
- import SelectBoxCss from "./generated/themes/SelectBox.css.js";
44
35
  import TextFieldCss from "./generated/themes/TextField.css.js";
45
36
  import SearchableListCss from "./generated/themes/SearchableList.css.js";
46
- import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
37
+ import SelectBoxCss from "./generated/themes/SelectBox.css.js";
38
+ import SelectBaseCss from "./generated/themes/SelectBase.css.js";
47
39
  /**
48
40
  * @class
49
41
  *
@@ -62,16 +54,9 @@ import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
62
54
  * @tagname udex-select-box
63
55
  * @public
64
56
  */
65
- let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchableListBase {
57
+ let UDExSelectBox = class UDExSelectBox extends UDExSelectBase {
66
58
  constructor() {
67
59
  super();
68
- /**
69
- * Defines the value state of the trigger container.
70
- *
71
- * @default "Standard"
72
- * @public
73
- */
74
- this.valueState = UDExValueState.Standard;
75
60
  /**
76
61
  * Determines on which side of the component the Tooltip is displayed.
77
62
  *
@@ -79,119 +64,85 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
79
64
  * @public
80
65
  */
81
66
  this.tooltipPlacement = Placement.Bottom;
82
- /**
83
- * @default false
84
- * @private
85
- */
86
- this._open = false;
87
67
  this._inactiveTabIndex = -1;
88
- this._activeTabIndex = 0;
89
- this._openedByTrigger = true;
90
- this._shouldScrollToEnd = false;
91
- this._shouldFilterItems = false;
92
- this._handleResizeBound = this._handleResize.bind(this);
93
- this._filteredItems = [];
68
+ this._handleResizeTokenizerBound = this.handleResizeTokenizer.bind(this);
94
69
  }
95
70
  onEnterDOM() {
96
- ResizeHandler.register(this, this._handleResizeBound);
71
+ super.onEnterDOM();
72
+ ResizeHandler.register(this, this._handleResizeTokenizerBound);
97
73
  }
98
74
  onExitDOM() {
99
- ResizeHandler.deregister(this, this._handleResizeBound);
75
+ super.onExitDOM();
76
+ ResizeHandler.deregister(this, this._handleResizeTokenizerBound);
100
77
  }
101
78
  onAfterRendering() {
102
- this._tokenizer = this.getTagGroup()?._tokenizer;
103
- this._popover = this.getPopover();
104
- this._search = this.getSearch();
105
- this._trigger = this.getTrigger();
106
- this._triggerWrapper = this.getTriggerWrapper();
107
- this._tags = this.getTags();
108
- this.handleDirection();
109
- if (this._tokenizer?.tokens.length > 0) {
110
- if (!this.displayonly) {
111
- this._tokenizer.moreLink?.setAttribute("tabindex", "-1");
112
- }
113
- if (this._shouldScrollToEnd) {
114
- this._tokenizer.scrollToEnd();
115
- }
116
- this.resetTagsTabIndexes();
117
- }
118
- this.handleOutsideClick();
119
- }
120
- onBeforeRendering() {
121
- super.onBeforeRendering();
122
- if (this.modeSingleSelect && this.hasSelectedItems) {
123
- this.handleSingleSelectMode();
79
+ super.onAfterRendering();
80
+ this.handleSelectBoxOutsideClick();
81
+ if (this.tagGroup) {
82
+ this.configureTokenizer();
124
83
  }
125
84
  }
126
- _handleResize() {
127
- this._popover.style.setProperty("--udex-dropdown-pane-width", `${this._triggerWrapper.offsetWidth}px`);
128
- }
129
- handleItemPress(e) {
130
- this.onItemPress(e);
131
- if (this.modeSingleSelect) {
132
- this.handleSingleSelectMode();
133
- this.closeDropdown();
134
- }
135
- }
136
- handleSingleSelectMode() {
137
- this._singleSelectedOption = this.selectedItems[0]?.label;
85
+ handleResizeTokenizer() {
86
+ this.resizeTokenizer();
138
87
  }
139
88
  handleSelectAll(e) {
140
89
  this.onSelectAllHeaderPress(e);
141
90
  }
142
91
  handleHeaderPress(e) {
92
+ this._search.focus();
143
93
  this.onHeaderPress(e);
144
94
  }
145
- handleValueSearch(e) {
146
- this.onSearch(e);
147
- }
148
- handleSubmitSearch() {
149
- this.closeDropdown();
150
- this.onSubmitSearch();
151
- }
152
- handleResetSearch() {
153
- this.onResetSearch();
95
+ handleItemPress(e) {
96
+ this.handleItemSelection(e);
154
97
  }
155
- handleFocusIn() {
156
- if (this.isDisabled) {
157
- return;
98
+ handlerShowMoreItems(e) {
99
+ if (!this.displayonly) {
100
+ this.showMoreItems(e);
101
+ this.handleUnselectTruncatableTag();
102
+ this.openDropdown();
158
103
  }
159
- this._focused = true;
160
- if (this._tokenizer) {
161
- this._tokenizer.expanded = false;
104
+ this.fireDecoratorEvent("show-more");
105
+ }
106
+ handleInputFocusIn() {
107
+ this.inputFocusIn();
108
+ if (this.tokenizer) {
109
+ this.tokenizer.expanded = true;
110
+ this._requestRender = true;
162
111
  }
163
112
  }
164
- handleFocusOut() {
113
+ handleInputFocusOut(e) {
114
+ const relatedTarget = e.relatedTarget;
115
+ const isInsideComponent = relatedTarget?.closest(`.${this._rootClass}`);
116
+ const hasTags = this.tokenizer?.tokens.length > 0;
117
+ if (!isInsideComponent) {
118
+ this.closeDropdown();
119
+ this.resetSearchState();
120
+ if (hasTags) {
121
+ this.collapseTokenizer();
122
+ }
123
+ }
165
124
  this._focused = false;
166
125
  }
167
126
  handleDropdownBeforeOpen() {
168
127
  if (this.preventPageScroll) {
169
128
  this._managePopupListeners(UDExPopoverPart.Header, "addEventListener");
170
129
  }
171
- if (this.height) {
172
- this._setContentHeight();
173
- }
174
- this.fireDecoratorEvent("before-open");
130
+ this.dropdownBeforeOpen();
175
131
  }
176
- handleDropdownAfterClose() {
132
+ handleDropdownClose() {
177
133
  if (this.preventPageScroll) {
178
134
  this._managePopupListeners(UDExPopoverPart.Header, "removeEventListener");
179
135
  }
180
- if (this._tokenizer?._tokensCount > 0) {
181
- this._tokenizer.expanded = false;
136
+ if (this.modeMultiSelect) {
137
+ this.handleUnselectTruncatableTag();
182
138
  }
183
- this.handleUnselectTruncatableTag();
184
139
  this._open = false;
185
- }
186
- showMoreItems() {
187
- this._shouldScrollToEnd = true;
188
- this._showTagsDropdownContent = false;
189
- this.openDropdown();
190
- this.handleUnselectTruncatableTag();
140
+ this.fireEventDropdownClose();
191
141
  }
192
142
  handleRemoveTag(e, tag) {
193
143
  tag = tag ?? e?.detail.tag;
194
144
  const tagId = tag.getAttribute("data-id");
145
+ this.tokenizer.deleteToken(tag, true);
195
146
  this.handleDropdownItemPress(tagId);
196
147
  this.fireDecoratorEventRemove(tagId);
197
148
  }
@@ -208,15 +159,7 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
208
159
  handleUnselectTruncatableTag() {
209
160
  if (this._truncatableTag?.selected) {
210
161
  this._truncatableTag.selected = false;
211
- }
212
- }
213
- handleKeyDownTrigger(e) {
214
- if (!this.isDisabled && (isSpace(e) || isEnter(e))) {
215
- e.preventDefault();
216
- e.stopPropagation();
217
162
  this._showTagsDropdownContent = false;
218
- this._openedByTrigger = true;
219
- this.openDropdown();
220
163
  }
221
164
  }
222
165
  handleKeyDownTag(e) {
@@ -226,17 +169,15 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
226
169
  const originalEvent = e.detail.originalEvent;
227
170
  const tag = originalEvent.target;
228
171
  const token = originalEvent.target;
229
- this.getTagContent(this._tags[0]).tabIndex = this._inactiveTabIndex;
230
- const tagsCount = this._tokenizer._tokensCount;
231
- this._tokenizer.expanded = (isLeft(originalEvent) || isRight(originalEvent) || isBackSpace(originalEvent) || isDelete(originalEvent)) && tagsCount > 0;
172
+ this.tokenizer.expanded = (isLeft(originalEvent) || isRight(originalEvent) || isBackSpace(originalEvent) || isDelete(originalEvent)) && this.tokenizer.tokens.length > 0;
232
173
  if (isTabNext(originalEvent)) {
233
- this._trigger.focus();
174
+ originalEvent.preventDefault();
175
+ this._search.focus();
234
176
  return;
235
177
  }
236
178
  if ((isDown(originalEvent) || isUp(originalEvent))) {
237
- this._tokenizer._preventCollapse = true;
238
- this._openedByTrigger = false;
239
- this.showMoreItems();
179
+ this._search.focus();
180
+ this.openDropdown();
240
181
  }
241
182
  if (isSpace(originalEvent) || isShift(originalEvent) || isEnter(originalEvent)) {
242
183
  originalEvent.preventDefault();
@@ -244,9 +185,9 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
244
185
  tag.selected = false;
245
186
  }
246
187
  if (isLeft(originalEvent) || isRight(originalEvent)) {
247
- const nextTokenIndex = this._tokenizer._calcNextTokenIndex(token, this._tokenizer.tokens, isRight(originalEvent));
248
- this.focusTag(nextTokenIndex);
249
- this.scrollToTag(nextTokenIndex);
188
+ const nextTokenIndex = this.tokenizer._calcNextTokenIndex(token, this.tokenizer.tokens, isRight(originalEvent));
189
+ this.focusTagByIndex(nextTokenIndex);
190
+ this.tokenizer._scrollToToken(this.tokenizer.tokens[nextTokenIndex]);
250
191
  return;
251
192
  }
252
193
  if (tag.isTruncatable && this.validTruncatableKey(originalEvent)) {
@@ -257,63 +198,64 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
257
198
  }
258
199
  if (isDelete(originalEvent) || isBackSpace(originalEvent)) {
259
200
  this.handleRemoveTag(null, tag);
260
- if (this._tokenizer.tokens.length === 1) {
261
- this._trigger.focus();
201
+ if (this.tokenizer.tokens.length === 1) {
202
+ this._search.focus();
262
203
  }
263
204
  else {
264
- this._tokenizer.deleteToken(token);
205
+ this.tokenizer.deleteToken(token, true);
265
206
  }
266
207
  }
267
208
  }
268
- handleKeyDownDropdown(e) {
269
- if (this.tabNavigationEnabled) {
209
+ handleKeyDownSearch(e) {
210
+ const tokenizer = this.tokenizer;
211
+ const hasTags = tokenizer?.tokens.length > 0;
212
+ const lastTagIndex = tokenizer?.tokens.length - 1;
213
+ if (isTabPrevious(e)) {
214
+ this.resetTagsTabIndexes();
270
215
  return;
271
216
  }
272
- const isTabPrevPress = isTabPrevious(e) && !this._search;
273
- const isTabNextPress = isTabNext(e);
274
- const isEscapePress = isEscape(e);
275
- const isSearchResetTrigger = e.target === this._search;
276
- if ((isTabNextPress && (!isSearchResetTrigger || this.isListEmpty)) || isTabPrevPress || isEscapePress) {
277
- this.closeDropdown(e);
217
+ if (isLeft(e) && hasTags) {
218
+ e.preventDefault();
219
+ this.focusTagByIndex(lastTagIndex);
220
+ return;
278
221
  }
279
- }
280
- handleKeyDownSearch(keyEvent) {
281
- const { detail: { e } } = keyEvent;
282
- if (isTabPrevious(e) || isEscape(e)) {
283
- this.closeDropdown(e);
222
+ if (isBackSpace(e) && this._inputValue === "" && hasTags) {
223
+ this.focusTagByIndex(lastTagIndex);
224
+ return;
284
225
  }
226
+ this.onKeyDownSearch(e);
285
227
  }
286
- handleOutsideClick() {
228
+ handleSelectBoxOutsideClick() {
287
229
  document.addEventListener("click", (e) => {
288
- if (this._tokenizer?.tokens.length > 0 && e.target !== this) {
289
- this._tokenizer.expanded = false;
230
+ if (e.target !== this) {
231
+ this._open = this._popover.open;
232
+ if (this.tokenizer?.tokens.length > 0) {
233
+ this.collapseTokenizer();
234
+ }
290
235
  }
291
- this._open = this._popover.open;
292
236
  });
293
237
  }
294
- openDropdown() {
295
- this._popover.opener = this._trigger;
296
- this._popover.open = true;
297
- this._open = true;
298
- if (this.showMultiSelectedOptions) {
299
- this._tokenizer.expanded = true;
238
+ focusTagByIndex(index) {
239
+ const token = this.tokenizer.tokens[index];
240
+ if (token) {
241
+ token.focus();
242
+ token.forcedTabIndex = "0";
300
243
  }
301
244
  }
302
- closeDropdown(e) {
303
- if (this._popover.open) {
304
- if (this._tokenizer) {
305
- this._tokenizer._preventCollapse = false;
306
- this._tokenizer.expanded = false;
307
- }
308
- if (e && (isEscape(e) || isTabPrevious(e))) {
309
- e.preventDefault();
310
- if (this._openedByTrigger) {
311
- this._trigger.focus();
312
- }
313
- }
314
- this._open = false;
315
- this._popover.open = false;
316
- }
245
+ fireDecoratorEventRemove(id) {
246
+ this.fireDecoratorEvent("remove", {
247
+ item: this.getItemFromList(id),
248
+ });
249
+ }
250
+ collapseTokenizer() {
251
+ this.tokenizer.expanded = false;
252
+ this._selectedOption = "";
253
+ }
254
+ showMoreItems(e) {
255
+ e.preventDefault();
256
+ this._focused = true;
257
+ this._search.focus();
258
+ this._showTagsDropdownContent = false;
317
259
  }
318
260
  toggleTruncatedPopover(tag) {
319
261
  if (!tag.isTruncatable) {
@@ -327,82 +269,25 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
327
269
  this.openDropdown();
328
270
  }
329
271
  }
330
- scrollToTag(index) {
331
- this._tokenizer._scrollToToken(this._tokenizer.tokens[index]);
332
- }
333
- focusTag(index) {
334
- this._tokenizer.tokens[index].focus();
335
- this._tokenizer.tokens[index].forcedTabIndex = "0";
272
+ configureTokenizer() {
273
+ this.tagGroup._scrollToEnd = true;
274
+ this.resetTagsTabIndexes();
336
275
  }
337
- fireDecoratorEventRemove(id) {
338
- this.fireDecoratorEvent("remove", {
339
- item: this.getItemFromList(id),
276
+ resetTagsTabIndexes() {
277
+ this.tags.forEach(tag => {
278
+ this.getTagContent(tag).tabIndex = this._inactiveTabIndex;
340
279
  });
341
280
  }
342
- handleOpenMultiSelect() {
343
- if (this._popover.open) {
344
- this.closeDropdown();
345
- }
346
- else {
347
- this._showTagsDropdownContent = false;
348
- this.openDropdown();
349
- }
350
- }
351
- handleOpenSingleSelect() {
352
- if (this._popover.open) {
353
- this.closeDropdown();
354
- }
355
- else {
356
- this.openDropdown();
357
- }
358
- }
359
- getHandleMultiSelectOpen() {
360
- return !this.isDisabled && this.modeMultiSelect ? this.handleOpenMultiSelect() : undefined;
361
- }
362
- getHandleSingleSelectOpen() {
363
- return !this.isDisabled && this.modeSingleSelect ? this.handleOpenSingleSelect() : undefined;
364
- }
365
- getHandlerShowMoreItems(e) {
366
- if (!this.displayonly) {
367
- e.preventDefault();
368
- this.showMoreItems();
369
- }
370
- this.fireDecoratorEvent("show-more");
371
- }
372
- getTrigger() {
373
- return this.shadowRoot.querySelector(".udex-text-field__input");
374
- }
375
- getTriggerWrapper() {
376
- return this.shadowRoot.querySelector(".udex-text-field__wrap");
377
- }
378
- getTagGroup() {
379
- return this.shadowRoot.querySelector("[udex-tag-group]");
380
- }
381
- getTags() {
382
- if (this.getTagGroup()) {
383
- return Array.from(this.getTagGroup().shadowRoot.querySelectorAll("[udex-tag]"));
384
- }
385
- return [];
386
- }
387
- getTagContent(tag) {
388
- return tag.shadowRoot.querySelector(".udex-tag");
389
- }
390
- handleDirection() {
391
- const directionStyles = window
392
- .getComputedStyle(this)
393
- .getPropertyValue("direction");
394
- if (!directionStyles) {
395
- this._direction = "ltr";
396
- }
397
- else {
398
- this._direction = directionStyles;
281
+ resizeTokenizer() {
282
+ if (this.tokenizer) {
283
+ this.tokenizer._handleResize();
399
284
  }
400
285
  }
401
286
  validTruncatableKey(e) {
402
287
  return isSpace(e) || isEnter(e);
403
288
  }
404
- resetTagsTabIndexes() {
405
- this._tags.forEach((tag, i) => { this.getTagContent(tag).tabIndex = (i === 0 && !this.isDisabled) ? this._activeTabIndex : this._inactiveTabIndex; });
289
+ getTagContent(tag) {
290
+ return tag.shadowRoot.querySelector(".udex-tag");
406
291
  }
407
292
  /**
408
293
  * Close the dropdown.
@@ -411,136 +296,52 @@ let UDExSelectBox = UDExSelectBox_1 = class UDExSelectBox extends UDExSearchable
411
296
  close() {
412
297
  this.closeDropdown();
413
298
  }
414
- get allowTargetOverlap() {
415
- return !this.disableTargetOverlap;
299
+ get tokenizer() {
300
+ return this.tagGroup?.tokenizer;
301
+ }
302
+ get tagGroup() {
303
+ return this.shadowRoot.querySelector("[udex-tag-group]");
416
304
  }
417
- get isDisabled() {
418
- return this.readonly || this.displayonly || this.disabled;
305
+ get tags() {
306
+ return this.tagGroup ? Array.from(this.tagGroup.shadowRoot.querySelectorAll("[udex-tag]")) : [];
419
307
  }
420
308
  get truncatableTagLabel() {
421
309
  return this._truncatableTag.text.replace(/<\/?b>/gi, "");
422
310
  }
423
- get showSingleSelectedOption() {
424
- return this._singleSelectedOption?.length > 0 && this.modeSingleSelect;
425
- }
426
311
  get showMultiSelectedOptions() {
427
312
  return this.hasSelectedItems && this.modeMultiSelect;
428
313
  }
429
- get labelClass() {
430
- const baseClass = "udex-text-field__label";
431
- const isActive = this._open || this._singleSelectedOption || this.hasSelectedItems;
432
- return isActive ? `${baseClass} ${baseClass}_active` : `${baseClass}`;
433
- }
434
- get isReadOrDisplayOnly() {
435
- return this.readonly || this.displayonly;
314
+ get allowTargetOverlap() {
315
+ return !this.disableTargetOverlap;
436
316
  }
437
317
  get tokenizerExpanded() {
438
318
  if (this._showTagsDropdownContent && this._truncatableTag) {
439
319
  return false;
440
320
  }
441
- if (this._tokenizer) {
442
- return this._tokenizer.expanded;
443
- }
444
- return this._open;
445
- }
446
- get showTrigger() {
447
- return !this.displayonly;
448
- }
449
- get hasSelectedItems() {
450
- return this.selectedItems.length > 0;
451
- }
452
- get effectiveTabIndex() {
453
- const tabindex = this.getAttribute("tabindex");
454
- return this.disabled ? `${this._inactiveTabIndex}` : tabindex || `${this._inactiveTabIndex}`;
455
- }
456
- get triggerTabIndex() {
457
- return this.disabled || this.readonly ? `${this._inactiveTabIndex}` : "";
458
- }
459
- get iconAccessibleNameText() {
460
- const selectOptionsText = UDExSelectBox_1.i18nBundle.getText(SELECT_OPTIONS);
461
- const iconAccessibleNameTextSingleMode = this._singleSelectedOption || selectOptionsText;
462
- return this.modeMultiSelect ? selectOptionsText : iconAccessibleNameTextSingleMode;
463
- }
464
- get additionalClassName() {
465
- return `udex-list__sticky`;
466
- }
467
- get searchableList() {
468
- this.defaultAccessibleRole = "listbox";
469
- return executeTemplate(UDExSelectBox_1.searchableListBaseTemplate, this);
470
- }
471
- get accInfo() {
472
- return {
473
- "ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || this.label || undefined,
474
- };
475
- }
476
- get accessibilityAttributes() {
477
- return {
478
- expanded: `${this._open}`,
479
- controls: this.popoverId,
480
- hasPopup: this.listboxRole,
481
- ariaLabel: this.iconAccessibleNameText,
482
- };
483
- }
484
- get popoverId() {
485
- return `${this._id}_udex-select-box__dropdown`;
486
- }
487
- get listboxRole() {
488
- return "listbox";
489
- }
490
- static get searchableListBaseTemplate() {
491
- return SearchableListBaseTemplate;
321
+ const isCurrentlyExpanded = this.tokenizer?.expanded;
322
+ return this._focused || this._open || isCurrentlyExpanded;
492
323
  }
493
324
  };
494
325
  __decorate([
495
326
  property({ type: Boolean })
496
327
  ], UDExSelectBox.prototype, "disableTargetOverlap", void 0);
497
- __decorate([
498
- property({ type: Boolean })
499
- ], UDExSelectBox.prototype, "required", void 0);
500
- __decorate([
501
- property({ type: Boolean })
502
- ], UDExSelectBox.prototype, "disabled", void 0);
503
- __decorate([
504
- property({ type: String })
505
- ], UDExSelectBox.prototype, "label", void 0);
506
- __decorate([
507
- property()
508
- ], UDExSelectBox.prototype, "accessibleName", void 0);
509
- __decorate([
510
- property()
511
- ], UDExSelectBox.prototype, "accessibleNameRef", void 0);
512
- __decorate([
513
- property({ type: Boolean })
514
- ], UDExSelectBox.prototype, "readonly", void 0);
515
- __decorate([
516
- property({ type: Boolean })
517
- ], UDExSelectBox.prototype, "displayonly", void 0);
518
- __decorate([
519
- property()
520
- ], UDExSelectBox.prototype, "valueState", void 0);
521
- __decorate([
522
- property({ type: String })
523
- ], UDExSelectBox.prototype, "supportingText", void 0);
524
328
  __decorate([
525
329
  property()
526
330
  ], UDExSelectBox.prototype, "tooltipPlacement", void 0);
527
- __decorate([
528
- property({ type: String, noAttribute: true })
529
- ], UDExSelectBox.prototype, "_direction", void 0);
530
- __decorate([
531
- property({ type: Boolean })
532
- ], UDExSelectBox.prototype, "_focused", void 0);
533
- __decorate([
534
- property({ type: Boolean })
535
- ], UDExSelectBox.prototype, "_open", void 0);
536
331
  __decorate([
537
332
  property({ type: Boolean })
538
333
  ], UDExSelectBox.prototype, "_showTagsDropdownContent", void 0);
539
- UDExSelectBox = UDExSelectBox_1 = __decorate([
334
+ UDExSelectBox = __decorate([
540
335
  customElement({
541
336
  tag: "udex-select-box",
542
337
  renderer: litRender,
543
- styles: [TextFieldCss, SelectBoxCss, SearchableListCss, getEffectiveScrollbarStyle()],
338
+ styles: [
339
+ TextFieldCss,
340
+ SelectBoxCss,
341
+ SelectBaseCss,
342
+ SearchableListCss,
343
+ getEffectiveScrollbarStyle(),
344
+ ],
544
345
  template: SelectBoxTemplate,
545
346
  dependencies: [
546
347
  UDExSelectBoxGroupHeader,
@@ -548,22 +349,19 @@ UDExSelectBox = UDExSelectBox_1 = __decorate([
548
349
  UDExListSelectAll,
549
350
  UDExSelectBoxItem,
550
351
  UDExStatusMessage,
551
- UDExControlButton,
552
- UDExTagGroup,
553
352
  UDExBusyIndicator,
353
+ UDExTagGroup,
554
354
  UDExListItem,
555
355
  UDExList,
556
- UDExSearch,
557
- UDExButton,
558
356
  UDExTag,
559
357
  Tokenizer,
358
+ Popover,
560
359
  Token,
561
360
  Icon,
562
- Popover,
563
361
  ],
564
362
  })
565
363
  /**
566
- * Fired event when the user clicks on the reset button in the search.
364
+ * Fired event when the user remove tag.
567
365
  *
568
366
  * @public
569
367
  * @param {UDExItemFromList} item The removed item
@@ -577,13 +375,6 @@ UDExSelectBox = UDExSelectBox_1 = __decorate([
577
375
  */
578
376
  ,
579
377
  event("show-more", { bubbles: true })
580
- /**
581
- * Fired before the dropdown pane is opened.
582
- *
583
- * @public
584
- */
585
- ,
586
- event("before-open", { bubbles: true })
587
378
  ], UDExSelectBox);
588
379
  UDExSelectBox.define();
589
380
  export default UDExSelectBox;