@sapudex/web-components 0.138.0 → 0.147.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 (229) hide show
  1. package/dist/Accordion.js +1 -1
  2. package/dist/Accordion.js.map +1 -1
  3. package/dist/Avatar.js +1 -1
  4. package/dist/Avatar.js.map +1 -1
  5. package/dist/Breadcrumbs.js +1 -1
  6. package/dist/Breadcrumbs.js.map +1 -1
  7. package/dist/Carousel.js +1 -1
  8. package/dist/Carousel.js.map +1 -1
  9. package/dist/CountrySelector.d.ts +7 -1
  10. package/dist/CountrySelector.js +34 -9
  11. package/dist/CountrySelector.js.map +1 -1
  12. package/dist/DatePicker.js +1 -1
  13. package/dist/DatePicker.js.map +1 -1
  14. package/dist/Dropdown.d.ts +1 -0
  15. package/dist/Dropdown.js +13 -1
  16. package/dist/Dropdown.js.map +1 -1
  17. package/dist/FilterMenu.d.ts +2 -1
  18. package/dist/FilterMenu.js +13 -5
  19. package/dist/FilterMenu.js.map +1 -1
  20. package/dist/Footer.js +1 -1
  21. package/dist/Footer.js.map +1 -1
  22. package/dist/InputGroup.js +1 -1
  23. package/dist/InputGroup.js.map +1 -1
  24. package/dist/List.js +1 -1
  25. package/dist/List.js.map +1 -1
  26. package/dist/ListItem.js +1 -1
  27. package/dist/ListItem.js.map +1 -1
  28. package/dist/ListItemBase.d.ts +2 -2
  29. package/dist/ListItemBase.js.map +1 -1
  30. package/dist/ListSelectAll.js +1 -1
  31. package/dist/ListSelectAll.js.map +1 -1
  32. package/dist/MastheadItem.js +3 -8
  33. package/dist/MastheadItem.js.map +1 -1
  34. package/dist/MastheadMobileMenu.js +1 -1
  35. package/dist/MastheadMobileMenu.js.map +1 -1
  36. package/dist/MastheadProfileMenu.js +1 -1
  37. package/dist/MastheadProfileMenu.js.map +1 -1
  38. package/dist/MastheadShell.d.ts +22 -6
  39. package/dist/MastheadShell.js +39 -25
  40. package/dist/MastheadShell.js.map +1 -1
  41. package/dist/MessageStrip.js +1 -1
  42. package/dist/MessageStrip.js.map +1 -1
  43. package/dist/Pagination.js +1 -1
  44. package/dist/Pagination.js.map +1 -1
  45. package/dist/PasswordField.js +1 -1
  46. package/dist/PasswordField.js.map +1 -1
  47. package/dist/PhoneNumberField.js +1 -1
  48. package/dist/PhoneNumberField.js.map +1 -1
  49. package/dist/RatingBar.js +1 -1
  50. package/dist/RatingBar.js.map +1 -1
  51. package/dist/Review.js +1 -1
  52. package/dist/Review.js.map +1 -1
  53. package/dist/ReviewItem.js +1 -1
  54. package/dist/ReviewItem.js.map +1 -1
  55. package/dist/Search.js +2 -2
  56. package/dist/Search.js.map +1 -1
  57. package/dist/SearchableListBase.d.ts +5 -0
  58. package/dist/SearchableListBase.js +11 -4
  59. package/dist/SearchableListBase.js.map +1 -1
  60. package/dist/SecondaryNavigation.d.ts +1 -0
  61. package/dist/SecondaryNavigation.js +8 -2
  62. package/dist/SecondaryNavigation.js.map +1 -1
  63. package/dist/SecondaryNavigationItem.d.ts +8 -0
  64. package/dist/SecondaryNavigationItem.js +19 -0
  65. package/dist/SecondaryNavigationItem.js.map +1 -1
  66. package/dist/SecondaryNavigationSubItem.js +1 -1
  67. package/dist/SecondaryNavigationSubItem.js.map +1 -1
  68. package/dist/SelectBox.d.ts +6 -9
  69. package/dist/SelectBox.js +51 -56
  70. package/dist/SelectBox.js.map +1 -1
  71. package/dist/StatusBadge.js +1 -1
  72. package/dist/StatusBadge.js.map +1 -1
  73. package/dist/StepInput.js +1 -1
  74. package/dist/StepInput.js.map +1 -1
  75. package/dist/Tab.js +1 -1
  76. package/dist/Tab.js.map +1 -1
  77. package/dist/TabNavigation.js +1 -1
  78. package/dist/TabNavigation.js.map +1 -1
  79. package/dist/Table.js +1 -1
  80. package/dist/Table.js.map +1 -1
  81. package/dist/TextArea.js +1 -1
  82. package/dist/TextArea.js.map +1 -1
  83. package/dist/TextField.js +1 -2
  84. package/dist/TextField.js.map +1 -1
  85. package/dist/TruncatedText.js +1 -1
  86. package/dist/TruncatedText.js.map +1 -1
  87. package/dist/assets/{bundle.esm-bb1c7413.js → bundle.esm-6e8e301d.js} +186 -188
  88. package/dist/assets/{parameters-bundle.css-c897ae23.js → parameters-bundle.css-07457fce.js} +2 -2
  89. package/dist/css/themes/Button.css +1 -1
  90. package/dist/css/themes/CountrySelector.css +1 -1
  91. package/dist/css/themes/Dropdown.css +1 -1
  92. package/dist/css/themes/FilterMenu.css +1 -1
  93. package/dist/css/themes/MastheadItem.css +1 -1
  94. package/dist/css/themes/MastheadShell.css +1 -1
  95. package/dist/css/themes/PhoneNumberField.css +1 -1
  96. package/dist/css/themes/RatingIndicator.css +1 -1
  97. package/dist/css/themes/Search.css +1 -1
  98. package/dist/css/themes/SecondaryNavigationItem.css +1 -1
  99. package/dist/css/themes/SelectBox.css +1 -1
  100. package/dist/css/themes/Slider.css +1 -1
  101. package/dist/css/themes/Tag.css +1 -1
  102. package/dist/css/themes/TagGroup.css +1 -1
  103. package/dist/css/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css +1 -1
  104. package/dist/custom-elements-internal.json +56 -0
  105. package/dist/custom-elements.json +55 -0
  106. package/dist/data/CountryListISO3166.js +1 -1
  107. package/dist/data/CountryListISO3166.js.map +1 -1
  108. package/dist/generated/assets/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.json +1 -1
  109. package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -1
  110. package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
  111. package/dist/generated/templates/MastheadShellTemplate.lit.js +10 -8
  112. package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
  113. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +2 -2
  114. package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
  115. package/dist/generated/templates/SelectBoxTemplate.lit.js +3 -5
  116. package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
  117. package/dist/generated/templates/TagGroupTemplate.lit.js +2 -2
  118. package/dist/generated/templates/TagGroupTemplate.lit.js.map +1 -1
  119. package/dist/generated/themes/Button.css.js +1 -1
  120. package/dist/generated/themes/Button.css.js.map +1 -1
  121. package/dist/generated/themes/CountrySelector.css.js +1 -1
  122. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  123. package/dist/generated/themes/Dropdown.css.js +1 -1
  124. package/dist/generated/themes/Dropdown.css.js.map +1 -1
  125. package/dist/generated/themes/FilterMenu.css.js +1 -1
  126. package/dist/generated/themes/FilterMenu.css.js.map +1 -1
  127. package/dist/generated/themes/MastheadItem.css.js +1 -1
  128. package/dist/generated/themes/MastheadItem.css.js.map +1 -1
  129. package/dist/generated/themes/MastheadShell.css.js +1 -1
  130. package/dist/generated/themes/MastheadShell.css.js.map +1 -1
  131. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  132. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  133. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  134. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  135. package/dist/generated/themes/Search.css.js +1 -1
  136. package/dist/generated/themes/Search.css.js.map +1 -1
  137. package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
  138. package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
  139. package/dist/generated/themes/SelectBox.css.js +1 -1
  140. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  141. package/dist/generated/themes/Slider.css.js +1 -1
  142. package/dist/generated/themes/Slider.css.js.map +1 -1
  143. package/dist/generated/themes/Tag.css.js +1 -1
  144. package/dist/generated/themes/Tag.css.js.map +1 -1
  145. package/dist/generated/themes/TagGroup.css.js +1 -1
  146. package/dist/generated/themes/TagGroup.css.js.map +1 -1
  147. package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js +1 -1
  148. package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js.map +1 -1
  149. package/dist/vscode.html-custom-data.json +9 -4
  150. package/dist/web-types.json +14 -4
  151. package/package.json +1 -1
  152. package/src/Accordion.ts +1 -1
  153. package/src/Avatar.ts +1 -1
  154. package/src/Breadcrumbs.ts +1 -1
  155. package/src/Carousel.ts +1 -1
  156. package/src/CountrySelector.hbs +2 -1
  157. package/src/CountrySelector.ts +45 -12
  158. package/src/DatePicker.ts +1 -1
  159. package/src/Dropdown.ts +9 -1
  160. package/src/FilterMenu.ts +12 -7
  161. package/src/Footer.ts +1 -1
  162. package/src/InputGroup.ts +1 -1
  163. package/src/List.ts +1 -1
  164. package/src/ListItem.ts +1 -1
  165. package/src/ListItemBase.ts +1 -1
  166. package/src/ListSelectAll.ts +1 -1
  167. package/src/MastheadItem.ts +5 -10
  168. package/src/MastheadMobileMenu.ts +1 -1
  169. package/src/MastheadProfileMenu.ts +1 -1
  170. package/src/MastheadShell.hbs +26 -19
  171. package/src/MastheadShell.ts +57 -29
  172. package/src/MessageStrip.ts +1 -3
  173. package/src/Pagination.ts +1 -1
  174. package/src/PasswordField.ts +1 -1
  175. package/src/PhoneNumberField.ts +1 -1
  176. package/src/RatingBar.ts +1 -1
  177. package/src/Review.ts +1 -1
  178. package/src/ReviewItem.ts +1 -1
  179. package/src/Search.ts +2 -2
  180. package/src/SearchableListBase.ts +15 -7
  181. package/src/SecondaryNavigation.hbs +2 -0
  182. package/src/SecondaryNavigation.ts +9 -2
  183. package/src/SecondaryNavigationItem.ts +29 -0
  184. package/src/SecondaryNavigationSubItem.ts +1 -1
  185. package/src/SelectBox.hbs +11 -24
  186. package/src/SelectBox.ts +51 -60
  187. package/src/StatusBadge.ts +1 -1
  188. package/src/StepInput.ts +1 -1
  189. package/src/Tab.ts +1 -1
  190. package/src/TabNavigation.ts +1 -1
  191. package/src/Table.ts +1 -1
  192. package/src/TagGroup.hbs +1 -1
  193. package/src/TextArea.ts +1 -1
  194. package/src/TextField.ts +1 -2
  195. package/src/TruncatedText.ts +1 -1
  196. package/src/data/CountryListISO3166.ts +1 -1
  197. package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -1
  198. package/src/generated/templates/MastheadShellTemplate.lit.ts +10 -8
  199. package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +2 -2
  200. package/src/generated/templates/SelectBoxTemplate.lit.ts +3 -5
  201. package/src/generated/templates/TagGroupTemplate.lit.ts +2 -2
  202. package/src/generated/themes/Button.css.ts +1 -1
  203. package/src/generated/themes/CountrySelector.css.ts +1 -1
  204. package/src/generated/themes/Dropdown.css.ts +1 -1
  205. package/src/generated/themes/FilterMenu.css.ts +1 -1
  206. package/src/generated/themes/MastheadItem.css.ts +1 -1
  207. package/src/generated/themes/MastheadShell.css.ts +1 -1
  208. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  209. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  210. package/src/generated/themes/Search.css.ts +1 -1
  211. package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
  212. package/src/generated/themes/SelectBox.css.ts +1 -1
  213. package/src/generated/themes/Slider.css.ts +1 -1
  214. package/src/generated/themes/Tag.css.ts +1 -1
  215. package/src/generated/themes/TagGroup.css.ts +1 -1
  216. package/src/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.ts +1 -1
  217. package/src/themes/Button.css +10 -0
  218. package/src/themes/CountrySelector.css +13 -11
  219. package/src/themes/Dropdown.css +10 -0
  220. package/src/themes/FilterMenu.css +15 -2
  221. package/src/themes/MastheadItem.css +6 -2
  222. package/src/themes/MastheadShell.css +88 -9
  223. package/src/themes/PhoneNumberField.css +22 -20
  224. package/src/themes/Search.css +4 -0
  225. package/src/themes/SecondaryNavigationItem.css +8 -1
  226. package/src/themes/SelectBox.css +12 -88
  227. package/src/themes/Tag.css +8 -3
  228. package/src/themes/TagGroup.css +8 -0
  229. package/src/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css +0 -5
@@ -12,6 +12,8 @@
12
12
  @ui5-submit-search-value="{{handleSubmitSearch}}"
13
13
  @ui5-handle-value-search="{{handleValueSearch}}"
14
14
  @ui5-handle-value-reset="{{handleResetSearch}}"
15
+ @ui5-search-keydown="{{handleKeyDownSearch}}"
16
+ @keydown="{{handleKeyDownDropdown}}"
15
17
  @ui5-handle-close-search="{{handleCloseSearch}}">
16
18
  {{> trigger}}
17
19
  {{searchableList}}
@@ -51,7 +53,6 @@
51
53
  role="combobox"
52
54
  aria-haspopup="true"
53
55
  aria-expanded="{{_open}}"
54
- ?active="{{_open}}"
55
56
  ?required="{{required}}"
56
57
  ?disabled="{{disabled}}"
57
58
  ?readonly="{{readonly}}"
@@ -4,11 +4,16 @@ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
4
4
  import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
5
5
  import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
6
6
  import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTemplate.js";
7
- import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
7
+ import {
8
+ isEnter, isSpace, isBackSpace, isDelete,
9
+ isEscape, isTabPrevious,
10
+ isTabNext,
11
+ } from "@ui5/webcomponents-base/dist/Keys.js";
12
+ import Popover from "@ui5/webcomponents/dist/Popover.js";
8
13
  import event from "@ui5/webcomponents-base/dist/decorators/event.js";
9
14
  import Button from "@ui5/webcomponents/dist/Button.js";
10
15
  import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
11
- import TextField from "./TextField.js";
16
+ import UDExTextField from "./TextField.js";
12
17
  import ValueState from "./types/common.js";
13
18
  import StatusMessage from "./StatusMessage.js";
14
19
  import { COUNTRY_SELECT } from "./generated/i18n/i18n-defaults.js";
@@ -25,7 +30,6 @@ import { Country, CountryListDB } from "./data/CountryListISO3166.js";
25
30
  import UDExSearchableListBase from "./SearchableListBase.js";
26
31
  import UDExListItem from "./ListItem.js";
27
32
  import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
28
-
29
33
  /**
30
34
  * @class
31
35
  *
@@ -55,7 +59,7 @@ import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
55
59
  UDExList,
56
60
  UDExListItem,
57
61
  UDExDropdown,
58
- TextField,
62
+ UDExTextField,
59
63
  Button,
60
64
  StatusMessage,
61
65
  ],
@@ -271,7 +275,7 @@ class CountrySelector extends UDExSearchableListBase {
271
275
  static i18nBundle: I18nBundle;
272
276
 
273
277
  static async onDefine() {
274
- CountrySelector.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
278
+ CountrySelector.i18nBundle = await getI18nBundle("@udex/web-components");
275
279
  }
276
280
 
277
281
  constructor() {
@@ -356,7 +360,7 @@ class CountrySelector extends UDExSearchableListBase {
356
360
  }
357
361
 
358
362
  get selectedCountryName() {
359
- return this.getCountryLabel(this.selectedCountry?.countryName, this.selectedCountry?.localName);
363
+ return this.selectedCountry ? this.getCountryLabel(this.selectedCountry.countryName, this.selectedCountry.localName) : "";
360
364
  }
361
365
 
362
366
  get flagAriaLabel():string {
@@ -408,7 +412,7 @@ class CountrySelector extends UDExSearchableListBase {
408
412
  }
409
413
 
410
414
  handleCloseSearch() {
411
- this._dropdown.onClose();
415
+ this.getInput()?.shadowRoot!.querySelector<Button>("udex-control-button")?.focus();
412
416
  }
413
417
 
414
418
  handleItemPress(e: CustomEvent) {
@@ -416,7 +420,7 @@ class CountrySelector extends UDExSearchableListBase {
416
420
  const target = e.target as HTMLElement;
417
421
  const item: any = this.getItemFromList(target?.getAttribute("data-token-id") as string);
418
422
  this.selectedCountry = this.countryList.find(country => country.iso === item._id);
419
- this._dropdown.onClose();
423
+ this.dropDownClose();
420
424
  }
421
425
 
422
426
  handleKeyDown(e: CustomEvent) {
@@ -428,10 +432,13 @@ class CountrySelector extends UDExSearchableListBase {
428
432
  const key = keyEvent.key;
429
433
  if (isEnter(keyEvent) || isSpace(keyEvent)) {
430
434
  if (this._dropdown.open) {
431
- this._dropdown.onClose();
435
+ this.dropDownClose();
432
436
  } else {
433
437
  this._dropdown.onTriggerClick();
434
438
  }
439
+ } else if (isBackSpace(keyEvent) || isDelete(keyEvent)) {
440
+ this.selectedCountry = undefined;
441
+ this._render();
435
442
  } else if (this.isLetterKey(key)) {
436
443
  this._dropdown.onOpen(this.getInput());
437
444
  this._search.focus();
@@ -452,7 +459,7 @@ class CountrySelector extends UDExSearchableListBase {
452
459
 
453
460
  handleTriggerClick() {
454
461
  if (this._dropdown.open) {
455
- this._dropdown.onClose();
462
+ this.dropDownClose();
456
463
  }
457
464
  }
458
465
 
@@ -468,6 +475,28 @@ class CountrySelector extends UDExSearchableListBase {
468
475
  this.onSubmitSearch();
469
476
  }
470
477
 
478
+ handleKeyDownSearch(e: CustomEvent) {
479
+ const keyEvent = e.detail as KeyboardEvent;
480
+
481
+ if (isTabPrevious(keyEvent)) {
482
+ this.dropDownClose();
483
+ }
484
+ if (isEscape(keyEvent)) {
485
+ keyEvent.preventDefault();
486
+ this.getDropdownPopover()?.close();
487
+ }
488
+ }
489
+
490
+ handleKeyDownDropdown(e: KeyboardEvent) {
491
+ if ((isTabNext(e) && (e.target !== this._search || this.isListEmpty))) {
492
+ this.dropDownClose();
493
+ }
494
+ }
495
+
496
+ dropDownClose():void {
497
+ this.getDropdownPopover()?.close(false, false, true);
498
+ }
499
+
471
500
  handleResetSearch() {
472
501
  this.onResetSearch();
473
502
  }
@@ -489,12 +518,16 @@ class CountrySelector extends UDExSearchableListBase {
489
518
  return this.shadowRoot!.querySelector<Search>("udex-search")!;
490
519
  }
491
520
 
521
+ getDropdownPopover() {
522
+ return this._dropdown.shadowRoot!.querySelector<Popover>("[ui5-popover]")!;
523
+ }
524
+
492
525
  getDropdown(): UDExDropdown {
493
526
  return this.shadowRoot!.querySelector<UDExDropdown>("udex-dropdown")!;
494
527
  }
495
528
 
496
- getInput(): UDExDropdown {
497
- return this.shadowRoot!.querySelector<UDExDropdown>("udex-text-field")!;
529
+ getInput(): UDExTextField {
530
+ return this.shadowRoot!.querySelector<UDExTextField>("udex-text-field")!;
498
531
  }
499
532
 
500
533
  get effectiveAriaLabel(): string {
package/src/DatePicker.ts CHANGED
@@ -224,7 +224,7 @@ class UDExDatePicker extends UI5Element {
224
224
  static i18nBundle: I18nBundle;
225
225
 
226
226
  static async onDefine(): Promise<void> {
227
- UDExDatePicker.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
227
+ UDExDatePicker.i18nBundle = await getI18nBundle("@udex/web-components");
228
228
  }
229
229
 
230
230
  async _getCalendar(): Promise<Calendar> {
package/src/Dropdown.ts CHANGED
@@ -200,9 +200,10 @@ class UDExDropdown extends UI5Element {
200
200
  _direction?: string;
201
201
 
202
202
  static i18nBundle: I18nBundle;
203
+ _breakpointSizeXS = 640;
203
204
 
204
205
  static async onDefine(): Promise<void> {
205
- UDExDropdown.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
206
+ UDExDropdown.i18nBundle = await getI18nBundle("@udex/web-components");
206
207
  }
207
208
 
208
209
  onAfterRendering() {
@@ -269,6 +270,13 @@ class UDExDropdown extends UI5Element {
269
270
 
270
271
  afterDropdownOpen() {
271
272
  this.open = true;
273
+ const dropdownPane = this.getDropdownPane();
274
+ const dropdownPaneLeftOffset = +dropdownPane.style.left.split("px")[0];
275
+ if (dropdownPane.offsetWidth + dropdownPaneLeftOffset < this._breakpointSizeXS) {
276
+ this.style.setProperty("--udex-dropdown-left-offset", `${dropdownPane.style.left}`);
277
+ } else {
278
+ dropdownPane.style.setProperty("--udex-dropdown-pane-width", `${this.offsetWidth}px`);
279
+ }
272
280
  this.fireEvent("after-open");
273
281
  }
274
282
 
package/src/FilterMenu.ts CHANGED
@@ -295,13 +295,7 @@ class UDExFilterMenu extends UDExSearchableListBase {
295
295
  _search!: UDExSearch;
296
296
  _hasFooterButtons!: boolean;
297
297
  _popover!: ResponsivePopover;
298
-
299
- onAfterRendering() {
300
- this._search = this.getSearch();
301
- this._popover = this.getPopover();
302
- this._trigger = this.getTriggerButton();
303
- this._hasFooterButtons = this.hasFooterButtons;
304
- }
298
+ _breakpointSizeXS = 640;
305
299
 
306
300
  onEnterDOM(): void {
307
301
  if (isDesktop()) {
@@ -313,6 +307,13 @@ class UDExFilterMenu extends UDExSearchableListBase {
313
307
  super.onBeforeRendering();
314
308
  }
315
309
 
310
+ onAfterRendering() {
311
+ this._search = this.getSearch();
312
+ this._popover = this.getPopover();
313
+ this._trigger = this.getTriggerButton();
314
+ this._hasFooterButtons = this.hasFooterButtons;
315
+ }
316
+
316
317
  handleSelectAll(e:CustomEvent): void {
317
318
  this.onFilterSelectAllHeaderPress(e);
318
319
  this.fireEvent("select-all");
@@ -436,6 +437,10 @@ class UDExFilterMenu extends UDExSearchableListBase {
436
437
  }
437
438
 
438
439
  _dropdownAfterOpen(): void {
440
+ const popoverLeftOffset = +this._popover.style.left.split("px")[0];
441
+ if (this._popover.offsetWidth + popoverLeftOffset < this._breakpointSizeXS) {
442
+ this.style.setProperty("--udex-filter-menu-popover-left-offset", `${this._popover.style.left}`);
443
+ }
439
444
  this.fireEvent("after-open");
440
445
  }
441
446
 
package/src/Footer.ts CHANGED
@@ -320,7 +320,7 @@ class UDExFooter extends UI5Element {
320
320
  static i18nBundle: I18nBundle;
321
321
 
322
322
  static async onDefine(): Promise<void> {
323
- UDExFooter.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
323
+ UDExFooter.i18nBundle = await getI18nBundle("@udex/web-components");
324
324
  }
325
325
 
326
326
  _handleResizeBound: ResizeObserverCallback;
package/src/InputGroup.ts CHANGED
@@ -104,7 +104,7 @@ class UDExInputGroup extends UI5Element {
104
104
  static i18nBundle: I18nBundle;
105
105
 
106
106
  static async onDefine() {
107
- UDExInputGroup.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
107
+ UDExInputGroup.i18nBundle = await getI18nBundle("@udex/web-components");
108
108
  }
109
109
 
110
110
  get _items() {
package/src/List.ts CHANGED
@@ -147,7 +147,7 @@ class UDExList extends UI5Element {
147
147
  static i18nBundle: I18nBundle;
148
148
 
149
149
  static async onDefine(): Promise<void> {
150
- UDExList.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
150
+ UDExList.i18nBundle = await getI18nBundle("@udex/web-components");
151
151
  }
152
152
 
153
153
  onBeforeRendering(): void {
package/src/ListItem.ts CHANGED
@@ -251,7 +251,7 @@ class UDExListItem extends UDExListItemBase {
251
251
  }
252
252
 
253
253
  static async onDefine(): Promise<void> {
254
- UDExListItem.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
254
+ UDExListItem.i18nBundle = await getI18nBundle("@udex/web-components");
255
255
  }
256
256
 
257
257
  onEnterDOM() {
@@ -112,7 +112,7 @@ class UDExListItemBase extends UI5Element {
112
112
  _icon?: string;
113
113
 
114
114
  @property({ type: String })
115
- _tabIndex!: number | string;
115
+ _tabIndex!: string;
116
116
 
117
117
  get _effectiveTabIndex() {
118
118
  if (this.disabled) {
@@ -46,7 +46,7 @@ class UDExListSelectAll extends UDExListGroupHeaderBase {
46
46
  static i18nBundle: I18nBundle;
47
47
 
48
48
  static async onDefine(): Promise<void> {
49
- UDExListSelectAll.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
49
+ UDExListSelectAll.i18nBundle = await getI18nBundle("@udex/web-components");
50
50
  }
51
51
 
52
52
  handleSelectAllPress() {
@@ -226,7 +226,7 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
226
226
  static i18nBundle: I18nBundle;
227
227
 
228
228
  static async onDefine(): Promise<void> {
229
- UDExMastheadItem.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
229
+ UDExMastheadItem.i18nBundle = await getI18nBundle("@udex/web-components");
230
230
  }
231
231
 
232
232
  onEnterDOM() {
@@ -262,16 +262,11 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
262
262
  }
263
263
  }
264
264
 
265
- handleKeyEscapeMobile() {
266
- const mastheadShell: MastheadShell | null = document.querySelector("udex-masthead-shell");
267
- const mobileMenu = mastheadShell?.mastheadMobileMenu;
268
- mastheadShell?.removeActiveMobileClass();
269
- mastheadShell?.mobileBtn?.focus();
270
- this.selected = false;
265
+ handleKeyEscapeMobile(): void {
266
+ const mastheadShell: MastheadShell = document.querySelector<MastheadShell>("udex-masthead-shell")!;
271
267
 
272
- if (mobileMenu) {
273
- mobileMenu.showFirstLevelMenu();
274
- }
268
+ mastheadShell.closeMobileMenu();
269
+ mastheadShell.mobileBtn?.focus();
275
270
  }
276
271
 
277
272
  handleNavigationItemClick(e: Event): void {
@@ -122,7 +122,7 @@ class UDExMastheadMobileMenu extends UI5Element {
122
122
  static i18nBundle: I18nBundle;
123
123
 
124
124
  static async onDefine(): Promise<void> {
125
- UDExMastheadMobileMenu.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
125
+ UDExMastheadMobileMenu.i18nBundle = await getI18nBundle("@udex/web-components");
126
126
  }
127
127
 
128
128
  onAfterRendering() {
@@ -122,7 +122,7 @@ class UDExMastheadProfileMenu extends UI5Element {
122
122
  static i18nBundle: I18nBundle;
123
123
 
124
124
  static async onDefine(): Promise<void> {
125
- UDExMastheadProfileMenu.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
125
+ UDExMastheadProfileMenu.i18nBundle = await getI18nBundle("@udex/web-components");
126
126
  }
127
127
 
128
128
  handleUserLogoutItemClick(e: Event): void {
@@ -8,7 +8,7 @@
8
8
  {{>siteLabel}}
9
9
  {{/if}}
10
10
 
11
- {{#unless _isSearchVisible}}
11
+ {{#if isMainMenuVisible}}
12
12
  <div
13
13
  class="udex-masthead-shell__main-menu"
14
14
  data-menubar-item-expanded="true"
@@ -17,29 +17,35 @@
17
17
  {{>item}}
18
18
  {{/each}}
19
19
  </div>
20
- {{/unless}}
20
+ {{/if}}
21
21
  </div>
22
22
 
23
- {{#if _isSearchVisible}}
23
+ {{#if isSearchVisible}}
24
24
  <div class="udex-masthead-shell__search-container">
25
25
  <slot name="search"></slot>
26
26
  </div>
27
- <div class="udex-masthead-shell__btn-holder">
28
- <udex-control-button
29
- class="udex-masthead-shell__close-search-btn"
30
- size="Small"
31
- icon="decline"
32
- accessible-name="{{closeButtonAccessibleName}}"
33
- @click={{hideSearch}}>
34
- </udex-control-button>
35
- </div>
36
- {{else}}
37
- <div class="udex-masthead-shell__right-menu">
38
- <div
39
- class="udex-masthead-shell__explore"
40
- @ui5-item-click="{{setSelectedItem}}">
41
- <slot name="exploreSAP"></slot>
27
+ {{#if _isSearchOpened}}
28
+ <div class="udex-masthead-shell__btn-holder">
29
+ <udex-control-button
30
+ class="udex-masthead-shell__close-search-btn"
31
+ size="Small"
32
+ icon="decline"
33
+ accessible-name="{{closeButtonAccessibleName}}"
34
+ @click={{hideSearch}}>
35
+ </udex-control-button>
42
36
  </div>
37
+ {{/if}}
38
+ {{/if}}
39
+
40
+ {{#if isRightMenuVisible}}
41
+ <div class="udex-masthead-shell__right-menu">
42
+ {{#if hasExploreSAP}}
43
+ <div
44
+ class="udex-masthead-shell__explore"
45
+ @ui5-item-click="{{setSelectedItem}}">
46
+ <slot name="exploreSAP"></slot>
47
+ </div>
48
+ {{/if}}
43
49
  {{#if hasSearch}}
44
50
  <div class="udex-masthead-shell__search-icon">
45
51
  <udex-masthead-item
@@ -77,6 +83,7 @@
77
83
  <slot slot="dropdown" name="mobileMenu"></slot>
78
84
  </udex-masthead-item>
79
85
  <udex-masthead-item
86
+ @keydown="{{handleEnterAndSpaceOnCloseBtn}}"
80
87
  @ui5-item-click="{{handleMobileCloseClick}}"
81
88
  class="udex-masthead-shell__close-btn"
82
89
  accessible-role="button"
@@ -124,7 +131,7 @@
124
131
  {{/inline}}
125
132
 
126
133
  {{#*inline "siteLabel"}}
127
- {{#if homeUrl}}
134
+ {{#if siteLabelUrl}}
128
135
  <a
129
136
  @click="{{handleSiteLabelClick}}"
130
137
  role="link"
@@ -6,7 +6,9 @@ import event from "@ui5/webcomponents-base/dist/decorators/event.js";
6
6
  import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
7
7
  import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
8
8
  import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
9
- import { isLeft, isRight } from "@ui5/webcomponents-base/dist/Keys.js";
9
+ import {
10
+ isLeft, isRight, isSpace, isEnter,
11
+ } from "@ui5/webcomponents-base/dist/Keys.js";
10
12
  import "@ui5/webcomponents-icons/dist/decline.js";
11
13
  import "@ui5/webcomponents-icons/dist/menu2.js";
12
14
  import "@ui5/webcomponents-icons/dist/search.js";
@@ -22,9 +24,7 @@ import MastheadShellTemplate from "./generated/templates/MastheadShellTemplate.l
22
24
  // Styles
23
25
  import MastheadShellCss from "./generated/themes/MastheadShell.css.js";
24
26
 
25
- const mobileMenuActiveClass: string = "udex-masthead-shell_mobile-menu-open";
26
27
  const breakpointSizeM: number = 1279;
27
-
28
28
  /**
29
29
  * @class
30
30
  *
@@ -181,6 +181,15 @@ class UDExMastheadShell extends UI5Element {
181
181
  @property({ type: Boolean })
182
182
  bodyOverflow!: boolean;
183
183
 
184
+ /**
185
+ * Defines the visibility of the Search by default.
186
+ *
187
+ * @default ""
188
+ * @public
189
+ */
190
+ @property({ type: Boolean })
191
+ showSearchByDefault!: boolean;
192
+
184
193
  /**
185
194
  * Defines sticky position for component
186
195
  *
@@ -251,12 +260,20 @@ class UDExMastheadShell extends UI5Element {
251
260
  siteLabelAriaLabel!: string;
252
261
 
253
262
  /**
254
- * Defines if the search container is visible
263
+ * Defines if the search container is opened
255
264
  *
256
265
  * @private
257
266
  */
258
267
  @property({ type: Boolean })
259
- _isSearchVisible!: boolean;
268
+ _isSearchOpened!: boolean;
269
+
270
+ /**
271
+ * Defines if the mobile menu is open
272
+ *
273
+ * @private
274
+ */
275
+ @property({ type: Boolean })
276
+ _isMobileMenuOpen!: boolean;
260
277
 
261
278
  /**
262
279
  * Defines if the close button was clicked
@@ -284,7 +301,7 @@ class UDExMastheadShell extends UI5Element {
284
301
 
285
302
  this.handleOutsideClick();
286
303
 
287
- if (this._isSearchVisible) {
304
+ if (this._isSearchOpened) {
288
305
  this.focusSearchInput();
289
306
  }
290
307
 
@@ -302,12 +319,12 @@ class UDExMastheadShell extends UI5Element {
302
319
  }
303
320
 
304
321
  _handleResize(): void {
305
- if (this.isMobileView) {
306
- this._isSearchVisible = false;
322
+ if (this.isBreakpointSizeM) {
323
+ this._isSearchOpened = false;
307
324
  }
308
325
 
309
- if (this._shouldHandleResize && this.isMobileView) {
310
- this.resetMobileMenuOpenState();
326
+ if (this._shouldHandleResize && this.isBreakpointSizeM) {
327
+ this.closeMobileMenu();
311
328
  return;
312
329
  }
313
330
 
@@ -348,7 +365,7 @@ class UDExMastheadShell extends UI5Element {
348
365
 
349
366
  handleSearchClick(e: CustomEvent): void {
350
367
  e.stopPropagation();
351
- this._isSearchVisible = true;
368
+ this._isSearchOpened = true;
352
369
  this.resetSelectedItems();
353
370
  if (this._searchOpener) {
354
371
  this._searchOpener.selected = false;
@@ -369,7 +386,7 @@ class UDExMastheadShell extends UI5Element {
369
386
  handleMobileMenuClick(e: CustomEvent) {
370
387
  e.stopPropagation();
371
388
  this.setSelectedItem(e);
372
- this.addActiveMobileClass();
389
+ this._isMobileMenuOpen = true;
373
390
 
374
391
  if (this.bodyOverflow) {
375
392
  this.setOverflowBody();
@@ -378,12 +395,14 @@ class UDExMastheadShell extends UI5Element {
378
395
 
379
396
  handleMobileCloseClick(e: CustomEvent) {
380
397
  e.preventDefault();
381
- this.removeActiveMobileClass();
382
- this.setSelectedItem(e);
383
- this._mobileMenu?.showFirstLevelMenu();
398
+ this.closeMobileMenu();
399
+ }
384
400
 
385
- if (this.bodyOverflow) {
386
- this.removeOverflowBody();
401
+ handleEnterAndSpaceOnCloseBtn(e: KeyboardEvent) {
402
+ e.preventDefault();
403
+ if (isSpace(e) || isEnter(e)) {
404
+ this.closeMobileMenu();
405
+ this.mobileBtn?.focus();
387
406
  }
388
407
  }
389
408
 
@@ -425,14 +444,6 @@ class UDExMastheadShell extends UI5Element {
425
444
  });
426
445
  }
427
446
 
428
- addActiveMobileClass() {
429
- this._rootHolder?.classList.add(mobileMenuActiveClass);
430
- }
431
-
432
- removeActiveMobileClass() {
433
- this._rootHolder?.classList.remove(mobileMenuActiveClass);
434
- }
435
-
436
447
  setSelectedItem(e: CustomEvent): void {
437
448
  const clickedItem: UDExMastheadItem = e.detail.item;
438
449
  if (!clickedItem) {
@@ -449,11 +460,12 @@ class UDExMastheadShell extends UI5Element {
449
460
  focusSearchBtn(): void {
450
461
  if (this._searchOpener) {
451
462
  this._searchOpener.focus();
463
+ this._closeBtnClicked = false;
452
464
  }
453
465
  }
454
466
 
455
467
  hideSearch(): void {
456
- this._isSearchVisible = false;
468
+ this._isSearchOpened = false;
457
469
  this._closeBtnClicked = true;
458
470
  }
459
471
 
@@ -488,8 +500,8 @@ class UDExMastheadShell extends UI5Element {
488
500
  style.removeProperty("overflow");
489
501
  }
490
502
 
491
- resetMobileMenuOpenState(): void {
492
- this.removeActiveMobileClass();
503
+ closeMobileMenu(): void {
504
+ this._isMobileMenuOpen = false;
493
505
  this.resetSelectedItems();
494
506
  this._mobileMenu?.showFirstLevelMenu();
495
507
 
@@ -530,13 +542,29 @@ class UDExMastheadShell extends UI5Element {
530
542
  return !!this.search.length;
531
543
  }
532
544
 
545
+ get hasExploreSAP(): boolean {
546
+ return !!this.exploreSAP.length;
547
+ }
548
+
533
549
  get hasMobileMenuButtons(): boolean {
534
550
  return !!this.mobileMenu.length;
535
551
  }
536
552
 
537
- get isMobileView(): boolean {
553
+ get isBreakpointSizeM(): boolean {
538
554
  return window.innerWidth <= breakpointSizeM;
539
555
  }
556
+
557
+ get isMainMenuVisible(): boolean {
558
+ return !this.showSearchByDefault && !this._isSearchOpened;
559
+ }
560
+
561
+ get isRightMenuVisible(): boolean {
562
+ return this.showSearchByDefault || !this._isSearchOpened;
563
+ }
564
+
565
+ get isSearchVisible(): boolean {
566
+ return this.showSearchByDefault || this._isSearchOpened;
567
+ }
540
568
  }
541
569
 
542
570
  UDExMastheadShell.define();
@@ -133,9 +133,7 @@ class UDExMessageStrip extends MessageStrip {
133
133
  static i18nBundle: I18nBundle;
134
134
 
135
135
  static async onDefine() {
136
- UDExMessageStrip.i18nBundle = await getI18nBundle(
137
- "sap-ui-webcomponents-bundle",
138
- );
136
+ UDExMessageStrip.i18nBundle = await getI18nBundle("@udex/web-components");
139
137
  }
140
138
 
141
139
  getTranslation(text: I18nText): string {
package/src/Pagination.ts CHANGED
@@ -245,7 +245,7 @@ class UDExPagination extends UI5Element {
245
245
  }
246
246
 
247
247
  static async onDefine() {
248
- UDExPagination.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
248
+ UDExPagination.i18nBundle = await getI18nBundle("@udex/web-components");
249
249
  }
250
250
 
251
251
  setActive(element: HTMLElement): void {
@@ -194,7 +194,7 @@ class UDExPasswordField extends UI5Element {
194
194
  static i18nBundle: I18nBundle;
195
195
 
196
196
  static async onDefine() {
197
- UDExPasswordField.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
197
+ UDExPasswordField.i18nBundle = await getI18nBundle("@udex/web-components");
198
198
  }
199
199
 
200
200
  handleShowPassword(): void {
@@ -290,7 +290,7 @@ class UDExPhoneNumberField extends UI5Element {
290
290
  _handleResizeBound: ResizeObserverCallback;
291
291
 
292
292
  static async onDefine() {
293
- UDExPhoneNumberField.i18nBundle = await getI18nBundle("sap-ui-webcomponents-bundle");
293
+ UDExPhoneNumberField.i18nBundle = await getI18nBundle("@udex/web-components");
294
294
  }
295
295
 
296
296
  get countrySelectorAriaLabel() {
package/src/RatingBar.ts CHANGED
@@ -72,7 +72,7 @@ class UDExRatingBar extends UI5Element {
72
72
  _maxPercentage: number = 100;
73
73
 
74
74
  static async onDefine() {
75
- UDExRatingBar.i18nBundle = await getI18nBundle("@ui5/webcomponents");
75
+ UDExRatingBar.i18nBundle = await getI18nBundle("@udex/web-components");
76
76
  }
77
77
 
78
78
  onBeforeRendering(): void {