@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/src/List.ts CHANGED
@@ -235,7 +235,7 @@ class UDExList extends UI5Element {
235
235
 
236
236
  this.unsetTabIndexByIndex(items, currentSelectedIndex);
237
237
  this.setTabIndexByIndex(items, previousSelectIndex);
238
- items[previousSelectIndex].focus();
238
+ setTimeout(() => { items[previousSelectIndex].focus(); }, 0);
239
239
  }
240
240
 
241
241
  handleDownArrow(e: KeyboardEvent): void {
@@ -267,7 +267,7 @@ class UDExList extends UI5Element {
267
267
 
268
268
  this.unsetTabIndexByIndex(items, currentSelectedIndex);
269
269
  this.setTabIndexByIndex(items, nextSelectIndex);
270
- items[nextSelectIndex].focus();
270
+ setTimeout(() => { items[nextSelectIndex].focus(); }, 0);
271
271
  }
272
272
 
273
273
  handleHomeKey(e: KeyboardEvent): void {
@@ -319,7 +319,6 @@ class UDExList extends UI5Element {
319
319
 
320
320
  handleLetterKey(e: KeyboardEvent): void {
321
321
  const letterKey = e.key;
322
- e.stopPropagation();
323
322
  e.preventDefault();
324
323
  this._focusHandler.focusMatchingListItem(letterKey);
325
324
  }
@@ -189,6 +189,10 @@ class UDExListGroupHeaderBase extends UDExListItemBase {
189
189
  const controlledClassName = this.controlled ? `${listGroupHeaderClass}_controlled` : "";
190
190
  return `${listGroupHeaderClass} ${this._additionalClassName} ${controlledClassName}`;
191
191
  }
192
+
193
+ get listItem(): UDExListItemBase {
194
+ return this.shadowRoot!.querySelector<UDExListItemBase>("[udex-list-item]")!;
195
+ }
192
196
  }
193
197
 
194
198
  export default UDExListGroupHeaderBase;
package/src/ListItem.hbs CHANGED
@@ -33,7 +33,6 @@
33
33
  part="radio"
34
34
  tabindex="-1"
35
35
  accessible-name="radio {{stateAccessibleName}}"
36
- ?aria-selected="{{selected}}"
37
36
  ?checked="{{selected}}"
38
37
  ?disabled="{{disabled}}">
39
38
  </udex-radio-button>
@@ -32,7 +32,8 @@ type UDExListItemBaseEventDetail = {
32
32
 
33
33
  /**
34
34
  * Fired event when the user click on a first icon.
35
- *
35
+ * @param { PointerEvent } originalEvent The original event object
36
+ * @param { HTMLElement } item The list item
36
37
  * @public
37
38
  * @param { PointerEvent } originalEvent The original event object
38
39
  * @param { HTMLElement } item The list item
@@ -40,7 +41,8 @@ type UDExListItemBaseEventDetail = {
40
41
  @event("first-icon-click", { bubbles: true })
41
42
  /**
42
43
  * Fired event when the user click on a second icon.
43
- *
44
+ * @param { PointerEvent } originalEvent The original event object
45
+ * @param { HTMLElement } item The list item
44
46
  * @public
45
47
  * @param { PointerEvent } originalEvent The original event object
46
48
  * @param { HTMLElement } item The list item
@@ -137,11 +139,23 @@ class UDExListItemBase extends UI5Element {
137
139
  @property()
138
140
  type: `${UDExListStyleType}` = UDExListStyleType.None;
139
141
 
142
+ /**
143
+ * Defines the icon of the component.
144
+ *
145
+ * @default ""
146
+ * @private
147
+ */
140
148
  @property({ type: String })
141
149
  _icon: string = "";
142
150
 
151
+ /**
152
+ * Defines the tab index of the component.
153
+ *
154
+ * @default ""
155
+ * @private
156
+ */
143
157
  @property({ type: String })
144
- _tabIndex!: string;
158
+ _tabIndex: string = "";
145
159
 
146
160
  _fireIconClickEvent(e: PointerEvent): void {
147
161
  const target = e.target as HTMLElement;
@@ -334,6 +334,7 @@ class UDExMediaPlayer extends UI5Element {
334
334
  player.on("ready", () => {
335
335
  this.checkCaptionsAvailability(player);
336
336
  this.applyScrollIntoTheView();
337
+ this.player.src(this.source);
337
338
  this.fireDecoratorEvent("videoReady");
338
339
  });
339
340
 
@@ -458,6 +459,7 @@ class UDExMediaPlayer extends UI5Element {
458
459
 
459
460
  getOptionsValue() {
460
461
  const baseOptions = {
462
+ type: this.type,
461
463
  playbackRates: [1, 1.5, 2],
462
464
  controls: true,
463
465
  poster: this.poster,
@@ -35,7 +35,6 @@ function renderStandardTemplate(this: UDExMediaPlayer, rootClass: string) {
35
35
  <video-js
36
36
  id={this.playerElementId}
37
37
  class={`${rootClass} ${this.aspectRatioClass}`}>
38
- <source src={this.source} type={this.type} />
39
38
  {this._tracks.map((element: HTMLTrackElement, index: number) => {
40
39
  const {
41
40
  "default": isDefault, kind, src, srclang, label
@@ -3,16 +3,17 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
3
3
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
4
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
5
5
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
6
+ import { cleanLabel } from "./utils/listItemLabelUtils.js";
7
+ import { UDExListMode } from "./types/List.js";
6
8
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
7
9
  import type Popover from "@ui5/webcomponents/dist/Popover.js";
8
- import { isDown, isUp } from "@ui5/webcomponents-base/dist/Keys.js";
9
- import { cleanLabel } from "./utils/listItemLabelUtils.js";
10
+ import type { UDExProcessedItem } from "./types/SearchableListBase.js";
10
11
  import type UDExSearch from "./Search.js";
11
12
  import type UDExListItemBase from "./ListItemBase.js";
12
13
  import type UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
13
- import { UDExListMode } from "./types/List.js";
14
+ import type UDExList from "./List.js";
15
+ import type UDExListItem from "./ListItem.js";
14
16
  import type UDExFilterMenuItem from "./FilterMenuItem.js";
15
- import type { UDExProcessedItem } from "./types/SearchableListBase.js";
16
17
  import { SHOW_SEARCH_AFTER_COUNT, UDExPopoverPart } from "./types/SearchableListBase.js";
17
18
  import { NO_MATCHES_FOUND, RESULT_RETURNED } from "./generated/i18n/i18n-defaults.js";
18
19
 
@@ -49,7 +50,7 @@ export type UDExSearchableListBaseEvents = {
49
50
  * @class
50
51
  *
51
52
  * A class to serve as a foundation
52
- * for the <code>UDExFilterMenu</code> , <code>UDExSelectBox</code> and <code>UDExCountrySelector/code> classes.
53
+ * for the <code>UDExFilterMenu</code> and <code>UDExSelectBox</code> classes.
53
54
  *
54
55
  * @constructor
55
56
  * @author SAP SE
@@ -59,7 +60,8 @@ export type UDExSearchableListBaseEvents = {
59
60
 
60
61
  /**
61
62
  * Fired event when the user click on an item on the list.
62
- *
63
+ * @param {Array<UDExListItemBase>} selectedItems The selected items.
64
+ * @param {UDExListItemBase | UDExListGroupHeaderBase | null | undefined} item The clicked item.
63
65
  * @public
64
66
  * @param {Array<UDExListItemBase>} selectedItems The selected items.
65
67
  * @param {UDExListItemBase | UDExListGroupHeaderBase | null | undefined} item The clicked item.
@@ -76,7 +78,7 @@ export type UDExSearchableListBaseEvents = {
76
78
 
77
79
  /**
78
80
  * Fired event when the user clicks on the submitted icon in the search.
79
- *
81
+ * @param {Array<UDExListItemBase>} selectedItems The selected items.
80
82
  * @public
81
83
  * @param {Array<UDExListItemBase>} selectedItems The selected items.
82
84
  *
@@ -92,7 +94,7 @@ export type UDExSearchableListBaseEvents = {
92
94
 
93
95
  /**
94
96
  * Fired event when the user submitted the value in the search.
95
- *
97
+ * @param {string} value The search value.
96
98
  * @public
97
99
  * @param {string} value The search value.
98
100
  */
@@ -100,7 +102,8 @@ export type UDExSearchableListBaseEvents = {
100
102
 
101
103
  /**
102
104
  * Fired event when the user clicks on the first icon.
103
- *
105
+ * @param { PointerEvent } originalEvent The original event object
106
+ * @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
104
107
  * @public
105
108
  * @param { PointerEvent } originalEvent The original event object
106
109
  * @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
@@ -109,7 +112,8 @@ export type UDExSearchableListBaseEvents = {
109
112
 
110
113
  /**
111
114
  * Fired event when the user clicks on the second icon.
112
- *
115
+ * @param { PointerEvent } originalEvent The original event object
116
+ * @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
113
117
  * @public
114
118
  * @param { PointerEvent } originalEvent The original event object
115
119
  * @param { UDExListItemBase | UDExListGroupHeaderBase | null | undefined } item The list item
@@ -225,7 +229,7 @@ class UDExSearchableListBase extends UI5Element {
225
229
  items!: Array<UDExListItemBase | UDExListGroupHeaderBase>;
226
230
 
227
231
  /**
228
- * Defines the default accessible role for the list componnet.
232
+ * Defines the default accessible role for the list component.
229
233
  *
230
234
  * @default "list"
231
235
  * @public
@@ -233,6 +237,12 @@ class UDExSearchableListBase extends UI5Element {
233
237
  @property({ type: String })
234
238
  defaultAccessibleRole: string = "list";
235
239
 
240
+ /**
241
+ * Defines the filtered items for the component.
242
+ *
243
+ * @default []
244
+ * @private
245
+ */
236
246
  @property({ type: Object })
237
247
  _filteredItems!: Array<UDExProcessedItem>;
238
248
 
@@ -255,16 +265,11 @@ class UDExSearchableListBase extends UI5Element {
255
265
  }
256
266
 
257
267
  onItemPress(e:CustomEvent) {
258
- const dropdownItemId: string = this.getDataTokenId(e);
268
+ const dropdownItemId: string = this.getDataTokenId(e.detail.item as UDExListItemBase);
259
269
  this.handleDropdownItemPress(dropdownItemId);
260
270
  this.fireSelectionChange(dropdownItemId);
261
271
  }
262
272
 
263
- activateHeaderAndSetAllItems(item: UDExListGroupHeaderBase) {
264
- item.activateHeader();
265
- item.setAllItems(false);
266
- }
267
-
268
273
  handleDropdownItemPress(dropdownItemId: string) {
269
274
  this.getProcessedItems().forEach(({ item, groupItems, isGroup }) => {
270
275
  if (isGroup) {
@@ -301,28 +306,31 @@ class UDExSearchableListBase extends UI5Element {
301
306
  }
302
307
 
303
308
  onHeaderPress(e:CustomEvent) {
304
- this.handleGroupHeaderSelection(e);
309
+ const item = e.detail.item as UDExListItemBase;
310
+ const id = this.getDataTokenId(item);
311
+ this.handleGroupHeaderSelection(id);
305
312
  this.syncFilteredItems();
306
- this.fireSelectionChange(this.getDataTokenId(e));
313
+ this.fireSelectionChange(id);
307
314
  }
308
315
 
309
316
  onSelectAllHeaderPress(e:CustomEvent) {
310
- this.handleGroupHeaderSelection(e);
317
+ const item = e.detail.item as UDExListItemBase;
318
+ const id = this.getDataTokenId(item);
319
+ this.handleGroupHeaderSelection(id);
311
320
  this.syncFilteredItems();
312
321
  this.fireDecoratorEvent("select-all");
313
322
  }
314
323
 
315
- handleGroupHeaderSelection(e: CustomEvent): void {
316
- const headerItemId = this.getDataTokenId(e);
324
+ handleGroupHeaderSelection(id: string): void {
317
325
  this.getProcessedItems().forEach(({ item }) => {
318
- if (item._id === headerItemId) {
326
+ if (item._id === id) {
319
327
  (item as UDExListGroupHeaderBase).handleSelectionGroupState();
320
328
  }
321
329
  });
322
330
  }
323
331
 
324
- onSearch(e:CustomEvent) {
325
- const searchValue: string = e.detail.value;
332
+ onSearch(value: string) {
333
+ const searchValue: string = value;
326
334
  this._shouldFilterItems = true;
327
335
  this._filteredItems = this.filterItems(this.getProcessedItems(), searchValue);
328
336
  const items = this.getFlattenItemsArray(this._filteredItems);
@@ -413,15 +421,6 @@ class UDExSearchableListBase extends UI5Element {
413
421
  }
414
422
  }
415
423
 
416
- handleKeyDown(e: KeyboardEvent) {
417
- if (isUp(e)) {
418
- this.handlePreviousItemFocus(e);
419
- }
420
- if (isDown(e)) {
421
- this.handleNextListItemFocus(e);
422
- }
423
- }
424
-
425
424
  getSlottedItems(items: Array<UDExListItemBase | UDExListGroupHeaderBase>): Array<UDExListItemBase | UDExListGroupHeaderBase> {
426
425
  const arr: Array<UDExListItemBase | UDExListGroupHeaderBase> = [];
427
426
  items.forEach(item => {
@@ -462,31 +461,6 @@ class UDExSearchableListBase extends UI5Element {
462
461
  });
463
462
  }
464
463
 
465
- // moves focus to next list item
466
- handlePreviousItemFocus(e: KeyboardEvent) {
467
- const item = e.target as HTMLElement;
468
- const listItems = this.getDomListItems();
469
- const currentSelectIndex = this.getCurrentIndex(item);
470
- const previousSelectIndex = currentSelectIndex - 1;
471
- if (currentSelectIndex > 0) {
472
- e.preventDefault();
473
- (listItems[previousSelectIndex] as HTMLElement).focus();
474
- }
475
- }
476
-
477
- // moves focus to previous list item
478
- handleNextListItemFocus(e: KeyboardEvent) {
479
- const item = e.target as HTMLElement;
480
- const listItems = this.getDomListItems();
481
- const lastItemIndex = listItems.length - 1;
482
- const currentSelectIndex = this.getCurrentIndex(item);
483
- const nextSelectIndex = currentSelectIndex + 1;
484
- if (nextSelectIndex <= lastItemIndex) {
485
- e.preventDefault();
486
- (listItems[nextSelectIndex] as HTMLElement).focus();
487
- }
488
- }
489
-
490
464
  fireFirstIconClickEvent(e: CustomEvent): void {
491
465
  this._fireIconClickEvent("first-icon-click", e);
492
466
  }
@@ -496,7 +470,8 @@ class UDExSearchableListBase extends UI5Element {
496
470
  }
497
471
 
498
472
  private _fireIconClickEvent(eventName: "first-icon-click" | "second-icon-click", e: CustomEvent): void {
499
- const id = this.getDataTokenId(e);
473
+ const item = e.detail.item as UDExListItemBase;
474
+ const id = this.getDataTokenId(item);
500
475
  this.fireDecoratorEvent(eventName, {
501
476
  originalEvent: e.detail.originalEvent,
502
477
  item: this.getItemFromList(id),
@@ -515,47 +490,44 @@ class UDExSearchableListBase extends UI5Element {
515
490
  });
516
491
  }
517
492
 
518
- getCurrentIndex(item: Element): number {
493
+ getCurrentIndex(item: UDExListItem): number {
519
494
  return this.getDomListItems().indexOf(item);
520
495
  }
521
496
 
522
- getSearch(): UDExSearch {
523
- return this.shadowRoot!.querySelector<UDExSearch>("[udex-search]")!;
497
+ getList(): UDExList {
498
+ return this.shadowRoot!.querySelector<UDExList>("[udex-list]")!;
499
+ }
500
+
501
+ getSearch(): UDExSearch | HTMLInputElement {
502
+ return this.shadowRoot!.querySelector<UDExSearch>("[udex-search]")! || this.shadowRoot!.querySelector<HTMLInputElement>(".udex-text-field__search")!;
524
503
  }
525
504
 
526
505
  getPopover(): Popover {
527
506
  return this.shadowRoot!.querySelector<Popover>("[ui5-popover]")!;
528
507
  }
529
508
 
530
- getDomListItems(): Element[] {
509
+ getDomListItems(): UDExListItem[] {
531
510
  const elementList = this.shadowRoot!.querySelector("[udex-list]") as HTMLElement;
532
511
  return elementList ? Array.from(elementList.querySelectorAll("[udex-list-item]")) : [];
533
512
  }
534
513
 
535
- setItemsModeAndControl(items: Array<UDExFilterMenuItem>) {
536
- items.forEach(item => {
537
- item.mode = this.mode;
538
- item.controlled = this.isControlled;
539
- });
540
- }
541
-
542
- getDataTokenId(e:CustomEvent): string {
543
- return e.detail.item.getAttribute("data-token-id") as string;
514
+ getDataTokenId(item: UDExListItemBase): string {
515
+ return item.getAttribute("data-token-id") as string;
544
516
  }
545
517
 
546
518
  getProcessedItems(): Array<UDExProcessedItem> {
547
519
  return this.items.map(item => {
548
- if (item.isGroup) {
549
- const groupItems = (item as UDExListGroupHeaderBase).getItems();
550
- this.setItemsModeAndControl(groupItems);
520
+ const isGroup = item.isGroup;
521
+ const groupItems = isGroup ? (item as UDExListGroupHeaderBase).getItems() : [];
522
+
523
+ if (isGroup) {
524
+ this._setItemsModeAndControl(groupItems);
551
525
  }
526
+
552
527
  item.mode = this.mode;
553
528
  item.controlled = this.isControlled;
554
- return {
555
- item,
556
- groupItems: item.isGroup ? (item as UDExListGroupHeaderBase).getItems() : [],
557
- isGroup: item.isGroup,
558
- };
529
+
530
+ return { item, groupItems, isGroup };
559
531
  });
560
532
  }
561
533
 
@@ -573,6 +545,13 @@ class UDExSearchableListBase extends UI5Element {
573
545
  content.style.maxHeight = this.height || "";
574
546
  }
575
547
 
548
+ _setItemsModeAndControl(items: Array<UDExFilterMenuItem>) {
549
+ items.forEach(item => {
550
+ item.mode = this.mode;
551
+ item.controlled = this.isControlled;
552
+ });
553
+ }
554
+
576
555
  get getNoResultText(): string {
577
556
  const hasTextProperty = this.noResultText !== undefined && this.noResultText.length > 0;
578
557
  return hasTextProperty ? this.noResultText : this.noMatchesFoundText;
@@ -591,7 +570,8 @@ class UDExSearchableListBase extends UI5Element {
591
570
  }
592
571
 
593
572
  get selectedItems(): Array<UDExListItemBase> {
594
- return this.getSlottedItems(this.items).filter(({ selected }) => selected);
573
+ const selectedItems: Array<UDExListItemBase> = this.getSlottedItems(this.items).filter(({ selected }) => selected);
574
+ return selectedItems;
595
575
  }
596
576
 
597
577
  get modeMultiSelect(): boolean {
@@ -621,7 +601,8 @@ class UDExSearchableListBase extends UI5Element {
621
601
  }
622
602
 
623
603
  get showSearch(): boolean {
624
- return this.showSearchInput || (this.isSearchActive && !this.modeRadioGroup);
604
+ const isSearchVisible = this.showSearchInput || (this.isSearchActive && !this.modeRadioGroup);
605
+ return !this.hideDropdownSearch && isSearchVisible;
625
606
  }
626
607
 
627
608
  get isSearchActive(): boolean {
@@ -651,6 +632,10 @@ class UDExSearchableListBase extends UI5Element {
651
632
 
652
633
  return "none";
653
634
  }
635
+
636
+ get hideDropdownSearch(): boolean {
637
+ return false;
638
+ }
654
639
  }
655
640
 
656
641
  export default UDExSearchableListBase;