@sapudex/web-components 2.10.0 → 2.12.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 (241) hide show
  1. package/bundle.esm.js +1 -0
  2. package/cypress/fixtures/profile-menu.ts +75 -0
  3. package/cypress/specs/Accordion.cy.tsx +19 -0
  4. package/cypress/specs/AccordionItem.cy.tsx +9 -0
  5. package/cypress/specs/Footer.cy.tsx +48 -11
  6. package/cypress/specs/ListItem.cy.tsx +66 -52
  7. package/cypress/specs/MastheadProfileMenu.cy.tsx +174 -0
  8. package/cypress/specs/PromoTile.cy.tsx +124 -0
  9. package/cypress/specs/Quote.cy.tsx +65 -0
  10. package/cypress/specs/SelectBox.cy.tsx +134 -66
  11. package/cypress/support/component-imports.instrumented.ts +8 -0
  12. package/cypress/support/component-imports.src.ts +9 -1
  13. package/dist/Accordion.d.ts +15 -0
  14. package/dist/Accordion.js +19 -0
  15. package/dist/Accordion.js.map +1 -1
  16. package/dist/AccordionItem.d.ts +19 -0
  17. package/dist/AccordionItem.js +23 -0
  18. package/dist/AccordionItem.js.map +1 -1
  19. package/dist/AccordionItemTemplate.js +7 -2
  20. package/dist/AccordionItemTemplate.js.map +1 -1
  21. package/dist/AccordionTemplate.js +21 -1
  22. package/dist/AccordionTemplate.js.map +1 -1
  23. package/dist/Button.d.ts +8 -0
  24. package/dist/Button.js +11 -0
  25. package/dist/Button.js.map +1 -1
  26. package/dist/Footer.d.ts +45 -3
  27. package/dist/Footer.js +41 -17
  28. package/dist/Footer.js.map +1 -1
  29. package/dist/List.d.ts +9 -2
  30. package/dist/List.js +19 -8
  31. package/dist/List.js.map +1 -1
  32. package/dist/ListGroupHeader.d.ts +2 -1
  33. package/dist/ListGroupHeader.js.map +1 -1
  34. package/dist/ListItem.d.ts +12 -1
  35. package/dist/ListItem.js +15 -1
  36. package/dist/ListItem.js.map +1 -1
  37. package/dist/ListItemBase.d.ts +10 -0
  38. package/dist/ListItemBase.js +31 -0
  39. package/dist/ListItemBase.js.map +1 -1
  40. package/dist/ListSelectAll.d.ts +2 -1
  41. package/dist/ListSelectAll.js.map +1 -1
  42. package/dist/MastheadItem.d.ts +2 -0
  43. package/dist/MastheadItem.js +6 -0
  44. package/dist/MastheadItem.js.map +1 -1
  45. package/dist/MastheadProfileMenu.d.ts +67 -3
  46. package/dist/MastheadProfileMenu.js +164 -10
  47. package/dist/MastheadProfileMenu.js.map +1 -1
  48. package/dist/MastheadShell.d.ts +1 -0
  49. package/dist/MastheadShell.js +6 -1
  50. package/dist/MastheadShell.js.map +1 -1
  51. package/dist/PromoTile.d.ts +143 -0
  52. package/dist/PromoTile.js +198 -0
  53. package/dist/PromoTile.js.map +1 -0
  54. package/dist/PromoTileTemplate.d.ts +2 -0
  55. package/dist/PromoTileTemplate.js +22 -0
  56. package/dist/PromoTileTemplate.js.map +1 -0
  57. package/dist/Quote.d.ts +11 -0
  58. package/dist/Quote.js +18 -3
  59. package/dist/Quote.js.map +1 -1
  60. package/dist/Search.d.ts +3 -1
  61. package/dist/Search.js +1 -0
  62. package/dist/Search.js.map +1 -1
  63. package/dist/SearchableListBase.d.ts +16 -0
  64. package/dist/SearchableListBase.js +31 -1
  65. package/dist/SearchableListBase.js.map +1 -1
  66. package/dist/SelectBox.js +10 -0
  67. package/dist/SelectBox.js.map +1 -1
  68. package/dist/SelectBoxItem.d.ts +29 -0
  69. package/dist/SelectBoxItem.js +26 -0
  70. package/dist/SelectBoxItem.js.map +1 -1
  71. package/dist/StatusBadge.d.ts +1 -7
  72. package/dist/StatusBadge.js +1 -8
  73. package/dist/StatusBadge.js.map +1 -1
  74. package/dist/StepInputTemplate.js +1 -1
  75. package/dist/StepInputTemplate.js.map +1 -1
  76. package/dist/assets/{InputSuggestions-xcV7PZDf.js → InputSuggestions-DtUQULbo.js} +1 -1
  77. package/dist/assets/{ListItemStandardExpandableTextTemplate-RYCr4pVL.js → ListItemStandardExpandableTextTemplate-B62PaSFk.js} +1 -1
  78. package/dist/assets/{bundle.esm-bg-64miJ.js → bundle.esm-Ba8g4ech.js} +211 -210
  79. package/dist/assets/messagebundle_en-PmkE-Vht.js +1 -0
  80. package/dist/css/themes/AccordionItem.css +1 -1
  81. package/dist/css/themes/BreadcrumbsPopover.css +1 -1
  82. package/dist/css/themes/Button.css +1 -1
  83. package/dist/css/themes/CountrySelector.css +1 -1
  84. package/dist/css/themes/Divider.css +1 -1
  85. package/dist/css/themes/Footer.css +1 -1
  86. package/dist/css/themes/HeroBanner.css +1 -1
  87. package/dist/css/themes/ListItem.css +1 -1
  88. package/dist/css/themes/MastheadProfileMenu.css +1 -1
  89. package/dist/css/themes/PromoTile.css +1 -0
  90. package/dist/css/themes/Quote.css +1 -1
  91. package/dist/css/themes/RatingIndicator.css +1 -1
  92. package/dist/css/themes/Slider.css +1 -1
  93. package/dist/css/themes/StepInput.css +1 -1
  94. package/dist/css/themes/Tag.css +1 -1
  95. package/dist/custom-elements-internal.json +1515 -277
  96. package/dist/custom-elements.json +1220 -146
  97. package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
  98. package/dist/generated/i18n/i18n-defaults.d.ts +7 -1
  99. package/dist/generated/i18n/i18n-defaults.js +7 -1
  100. package/dist/generated/i18n/i18n-defaults.js.map +1 -1
  101. package/dist/generated/templates/FooterTemplate.lit.js +33 -32
  102. package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
  103. package/dist/generated/templates/HeroBannerTemplate.lit.js +1 -1
  104. package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
  105. package/dist/generated/templates/ListItemTemplate.lit.js +31 -23
  106. package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
  107. package/dist/generated/templates/ListTemplate.lit.js +2 -2
  108. package/dist/generated/templates/ListTemplate.lit.js.map +1 -1
  109. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +11 -6
  110. package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
  111. package/dist/generated/templates/SearchableListBaseTemplate.lit.js +6 -6
  112. package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
  113. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  114. package/dist/generated/themes/AccordionItem.css.js +1 -1
  115. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  116. package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
  117. package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
  118. package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
  119. package/dist/generated/themes/Button.css.d.ts +1 -1
  120. package/dist/generated/themes/Button.css.js +1 -1
  121. package/dist/generated/themes/Button.css.js.map +1 -1
  122. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  123. package/dist/generated/themes/CountrySelector.css.js +1 -1
  124. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  125. package/dist/generated/themes/Divider.css.d.ts +1 -1
  126. package/dist/generated/themes/Divider.css.js +1 -1
  127. package/dist/generated/themes/Divider.css.js.map +1 -1
  128. package/dist/generated/themes/Footer.css.d.ts +1 -1
  129. package/dist/generated/themes/Footer.css.js +1 -1
  130. package/dist/generated/themes/Footer.css.js.map +1 -1
  131. package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
  132. package/dist/generated/themes/HeroBanner.css.js +1 -1
  133. package/dist/generated/themes/HeroBanner.css.js.map +1 -1
  134. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  135. package/dist/generated/themes/ListItem.css.js +1 -1
  136. package/dist/generated/themes/ListItem.css.js.map +1 -1
  137. package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
  138. package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
  139. package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
  140. package/dist/generated/themes/PromoTile.css.d.ts +2 -0
  141. package/dist/generated/themes/PromoTile.css.js +8 -0
  142. package/dist/generated/themes/PromoTile.css.js.map +1 -0
  143. package/dist/generated/themes/Quote.css.d.ts +1 -1
  144. package/dist/generated/themes/Quote.css.js +1 -1
  145. package/dist/generated/themes/Quote.css.js.map +1 -1
  146. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  147. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  148. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  149. package/dist/generated/themes/Slider.css.d.ts +1 -1
  150. package/dist/generated/themes/Slider.css.js +1 -1
  151. package/dist/generated/themes/Slider.css.js.map +1 -1
  152. package/dist/generated/themes/StepInput.css.d.ts +1 -1
  153. package/dist/generated/themes/StepInput.css.js +1 -1
  154. package/dist/generated/themes/StepInput.css.js.map +1 -1
  155. package/dist/generated/themes/Tag.css.d.ts +1 -1
  156. package/dist/generated/themes/Tag.css.js +1 -1
  157. package/dist/generated/themes/Tag.css.js.map +1 -1
  158. package/dist/messagebundle.properties +10 -0
  159. package/dist/messagebundle_en.properties +6 -0
  160. package/dist/types/PromoTile.d.ts +60 -0
  161. package/dist/types/PromoTile.js +63 -0
  162. package/dist/types/PromoTile.js.map +1 -0
  163. package/dist/types/StatusBadgeValueState.d.ts +8 -0
  164. package/dist/types/StatusBadgeValueState.js +10 -0
  165. package/dist/types/StatusBadgeValueState.js.map +1 -0
  166. package/dist/utils/debounce.d.ts +3 -1
  167. package/dist/utils/debounce.js +16 -4
  168. package/dist/utils/debounce.js.map +1 -1
  169. package/dist/vscode.html-custom-data.json +185 -16
  170. package/dist/web-types.json +603 -34
  171. package/package.json +1 -1
  172. package/src/Accordion.ts +19 -0
  173. package/src/AccordionItem.ts +28 -0
  174. package/src/AccordionItemTemplate.tsx +25 -10
  175. package/src/AccordionTemplate.tsx +22 -1
  176. package/src/Button.ts +10 -0
  177. package/src/Footer.hbs +39 -36
  178. package/src/Footer.ts +81 -6
  179. package/src/HeroBanner.hbs +0 -1
  180. package/src/List.hbs +0 -2
  181. package/src/List.ts +27 -8
  182. package/src/ListGroupHeader.ts +2 -1
  183. package/src/ListItem.hbs +16 -2
  184. package/src/ListItem.ts +29 -2
  185. package/src/ListItemBase.ts +42 -0
  186. package/src/ListSelectAll.ts +2 -1
  187. package/src/MastheadItem.ts +9 -0
  188. package/src/MastheadProfileMenu.hbs +79 -15
  189. package/src/MastheadProfileMenu.ts +228 -13
  190. package/src/MastheadShell.ts +7 -1
  191. package/src/PromoTile.ts +290 -0
  192. package/src/PromoTileTemplate.tsx +68 -0
  193. package/src/Quote.ts +17 -3
  194. package/src/Search.ts +1 -0
  195. package/src/SearchableListBase.hbs +18 -1
  196. package/src/SearchableListBase.ts +47 -1
  197. package/src/SelectBox.ts +11 -0
  198. package/src/SelectBoxItem.ts +39 -0
  199. package/src/StatusBadge.ts +1 -8
  200. package/src/StepInputTemplate.tsx +1 -1
  201. package/src/generated/i18n/i18n-defaults.ts +2 -2
  202. package/src/generated/templates/FooterTemplate.lit.ts +33 -32
  203. package/src/generated/templates/HeroBannerTemplate.lit.ts +1 -1
  204. package/src/generated/templates/ListItemTemplate.lit.ts +31 -23
  205. package/src/generated/templates/ListTemplate.lit.ts +2 -2
  206. package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +10 -5
  207. package/src/generated/templates/SearchableListBaseTemplate.lit.ts +6 -6
  208. package/src/generated/themes/AccordionItem.css.ts +1 -1
  209. package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
  210. package/src/generated/themes/Button.css.ts +1 -1
  211. package/src/generated/themes/CountrySelector.css.ts +1 -1
  212. package/src/generated/themes/Divider.css.ts +1 -1
  213. package/src/generated/themes/Footer.css.ts +1 -1
  214. package/src/generated/themes/HeroBanner.css.ts +1 -1
  215. package/src/generated/themes/ListItem.css.ts +1 -1
  216. package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
  217. package/src/generated/themes/PromoTile.css.ts +9 -0
  218. package/src/generated/themes/Quote.css.ts +1 -1
  219. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  220. package/src/generated/themes/Slider.css.ts +1 -1
  221. package/src/generated/themes/StepInput.css.ts +1 -1
  222. package/src/generated/themes/Tag.css.ts +1 -1
  223. package/src/i18n/messagebundle.properties +10 -0
  224. package/src/i18n/messagebundle_en.properties +6 -0
  225. package/src/themes/AccordionItem.css +61 -22
  226. package/src/themes/BreadcrumbsPopover.css +2 -1
  227. package/src/themes/Button.css +13 -0
  228. package/src/themes/CountrySelector.css +4 -0
  229. package/src/themes/Divider.css +2 -1
  230. package/src/themes/Footer.css +44 -9
  231. package/src/themes/HeroBanner.css +34 -32
  232. package/src/themes/ListItem.css +4 -9
  233. package/src/themes/MastheadProfileMenu.css +87 -3
  234. package/src/themes/PromoTile.css +152 -0
  235. package/src/themes/Quote.css +21 -24
  236. package/src/themes/StepInput.css +10 -0
  237. package/src/themes/Tag.css +18 -24
  238. package/src/types/PromoTile.ts +61 -0
  239. package/src/types/StatusBadgeValueState.ts +9 -0
  240. package/src/utils/debounce.ts +19 -4
  241. package/dist/assets/messagebundle_en-BHfPJk-2.js +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@sapudex/web-components",
4
- "version": "2.10.0",
4
+ "version": "2.12.0",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
7
7
  },
package/src/Accordion.ts CHANGED
@@ -18,6 +18,16 @@ import AccordionCss from "./generated/themes/Accordion.css.js";
18
18
  type UDExAccordionToggleItemsEventDetail = {
19
19
  isOpen: boolean
20
20
  }
21
+
22
+ export enum UDExAccordionHeadlineLevel {
23
+ H1 = "H1",
24
+ H2 = "H2",
25
+ H3 = "H3",
26
+ H4 = "H4",
27
+ H5 = "H5",
28
+ H6 = "H6"
29
+ }
30
+
21
31
  /**
22
32
  * @class
23
33
  *
@@ -90,6 +100,15 @@ class UDExAccordion extends UI5Element {
90
100
  @property({ type: String })
91
101
  headline!: string;
92
102
 
103
+ /**
104
+ * Defines the semantic level of the headline.
105
+ *
106
+ * @default UDExAccordionHeadlineLevel.h3
107
+ * @public
108
+ */
109
+ @property()
110
+ headlineLevel: UDExAccordionHeadlineLevel = UDExAccordionHeadlineLevel.H3;
111
+
93
112
  /**
94
113
  * Slot for accordion items.
95
114
  *
@@ -11,6 +11,10 @@ import AccordionItemTemplate from "./AccordionItemTemplate.js";
11
11
  // Styles
12
12
  import AccordionItemCss from "./generated/themes/AccordionItem.css.js";
13
13
 
14
+ export enum UDExAccordionItemTitleSize {
15
+ Standard = "Standard",
16
+ Large = "Large"
17
+ }
14
18
  /**
15
19
  * @class
16
20
  *
@@ -72,6 +76,24 @@ class UDExAccordionItem extends UI5Element {
72
76
  @property()
73
77
  label!: string;
74
78
 
79
+ /**
80
+ * Defines the size of label.
81
+ *
82
+ * @default UDExAccordionItemTitleSize.Standard
83
+ * @public
84
+ */
85
+ @property()
86
+ labelSize: UDExAccordionItemTitleSize = UDExAccordionItemTitleSize.Standard;
87
+
88
+ /**
89
+ * Defines icon name to be display with title.
90
+ *
91
+ * @default ""
92
+ * @public
93
+ */
94
+ @property()
95
+ labelIcon!: string;
96
+
75
97
  /**
76
98
  * Defines if the accordion item is expanded by default
77
99
  *
@@ -113,6 +135,7 @@ class UDExAccordionItem extends UI5Element {
113
135
 
114
136
  onAfterRendering() {
115
137
  this.handleDirection();
138
+ this.setContentHeight();
116
139
  }
117
140
 
118
141
  onEnterDOM(): void {
@@ -121,6 +144,10 @@ class UDExAccordionItem extends UI5Element {
121
144
  }
122
145
  }
123
146
 
147
+ setContentHeight() {
148
+ this.style.setProperty("--udex-accordion-item-content-max-height", `${this.shadowRoot?.querySelector(".udex-accordion-item__content")?.scrollHeight}px`);
149
+ }
150
+
124
151
  contentKeydown(e: KeyboardEvent) {
125
152
  e.stopPropagation();
126
153
  }
@@ -128,6 +155,7 @@ class UDExAccordionItem extends UI5Element {
128
155
  itemClickHandler(e: Event) {
129
156
  e.preventDefault();
130
157
  this.expanded = !this.expanded;
158
+ this.setContentHeight();
131
159
  this.fireDecoratorEvent("accordion-item-click");
132
160
  }
133
161
 
@@ -4,30 +4,35 @@ import IconMode from "@ui5/webcomponents/dist/types/IconMode.js";
4
4
  import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
5
5
  import { UDExNumberBadgeDesign, UDExSizeBadgeDesign, UDExTypeBadgeDesign } from "./types/BadgeDesign.js";
6
6
  import UDExBadge from "./Badge.js";
7
+ import UDExDivider from "./Divider.js";
7
8
 
8
9
  export default function AccordionItemTemplate(this: AccordionItem) {
9
10
  const ariaControlsId = `udex-accordion-item__${this._id}-content`;
10
11
  const ariaLabelledbyId = `udex-accordion-item__${this._id}`;
11
12
  const rootClass = "udex-accordion-item";
13
+ const titleClass = this.labelIcon ? `${rootClass}--with-title` : "";
14
+ const headlineClass = `${rootClass}__header ${rootClass}__header--${this.labelSize.toLowerCase()}`;
12
15
 
13
16
  return (
14
17
  <>
15
18
  <button
16
19
  id={ariaLabelledbyId}
17
20
  aria-controls={ariaControlsId}
18
- className={`${rootClass}__header`}
21
+ className={`${headlineClass}`}
19
22
  onFocusIn={this.focusHandler}
20
23
  onClick={this.itemClickHandler}
21
24
  onKeyDown={this.keydownHandler}
22
25
  aria-expanded={this.expanded}
23
26
  type="button">
24
- <div className={`${rootClass}__icon-wrapper`}>
25
- <UI5Icon
26
- class={`${rootClass}__icon`}
27
- mode={IconMode.Decorative}
28
- name={slimArrowRight}>
29
- </UI5Icon>
30
- </div>
27
+ {this.labelIcon ?
28
+ <div className={`${rootClass}__icon-wrapper ${rootClass}__label-icon-wrapper`}>
29
+ <UI5Icon
30
+ class={`${rootClass}__icon ${rootClass}__label-icon`}
31
+ mode={IconMode.Decorative}
32
+ name={this.labelIcon}>
33
+ </UI5Icon>
34
+ </div>
35
+ : ""}
31
36
  <span className={`${rootClass}__title`}>
32
37
  {this.label}
33
38
  {this.numberBadge &&
@@ -40,15 +45,25 @@ export default function AccordionItemTemplate(this: AccordionItem) {
40
45
  </UDExBadge>
41
46
  }
42
47
  </span>
48
+ <div className={`${rootClass}__icon-wrapper`}>
49
+ <UI5Icon
50
+ class={`${rootClass}__icon`}
51
+ mode={IconMode.Decorative}
52
+ name={slimArrowRight}>
53
+ </UI5Icon>
54
+ </div>
43
55
  </button>
44
56
  <div
45
57
  id={ariaControlsId}
46
58
  aria-labelledby={ariaLabelledbyId}
47
- className={`${rootClass}__content`}
59
+ className={`${rootClass}__content ${titleClass}`}
48
60
  onKeyDown={this.contentKeydown}
49
61
  role="region">
50
- <slot></slot>
62
+ <div className={`${rootClass}__content-inner`}>
63
+ <slot></slot>
64
+ </div>
51
65
  </div>
66
+ <UDExDivider></UDExDivider>
52
67
  </>
53
68
  );
54
69
  }
@@ -2,6 +2,7 @@ import type Accordion from "./Accordion.js";
2
2
  import UDExButton from "./Button.js";
3
3
  import UDExButtonSize from "./types/ButtonSize.js";
4
4
  import UDExButtonDesign from "./types/ButtonDesign.js";
5
+ import { UDExAccordionHeadlineLevel } from "./Accordion.js";
5
6
 
6
7
  export default function AccordionTemplate(this: Accordion) {
7
8
  const rootClass = "udex-accordion";
@@ -14,7 +15,7 @@ export default function AccordionTemplate(this: Accordion) {
14
15
  onui5-accordion-item-focus={this.itemFocusHandler}>
15
16
  <div className={`${rootClass}__head`} part="head">
16
17
  {this.headline &&
17
- <h3 className={`${rootClass}__headline`}>{this.headline}</h3>
18
+ headline.call(this, rootClass)
18
19
  }
19
20
  {!this.hideExpandButton &&
20
21
  <UDExButton class={`${rootClass}__btn`}
@@ -35,3 +36,23 @@ export default function AccordionTemplate(this: Accordion) {
35
36
  </div>
36
37
  );
37
38
  }
39
+
40
+ function headline(this: Accordion, rootClass: string) {
41
+ const { headline: title, headlineLevel } = this;
42
+ switch (headlineLevel) {
43
+ case UDExAccordionHeadlineLevel.H1:
44
+ return <h1 className={`${rootClass}__headline`}>{title}</h1>;
45
+ case UDExAccordionHeadlineLevel.H2:
46
+ return <h2 className={`${rootClass}__headline`}>{title}</h2>;
47
+ case UDExAccordionHeadlineLevel.H3:
48
+ return <h3 className={`${rootClass}__headline`}>{title}</h3>;
49
+ case UDExAccordionHeadlineLevel.H4:
50
+ return <h4 className={`${rootClass}__headline`}>{title}</h4>;
51
+ case UDExAccordionHeadlineLevel.H5:
52
+ return <h5 className={`${rootClass}__headline`}>{title}</h5>;
53
+ case UDExAccordionHeadlineLevel.H6:
54
+ return <h6 className={`${rootClass}__headline`}>{title}</h6>;
55
+ default:
56
+ return <h3 className={`${rootClass}__headline`}>{title}</h3>;
57
+ }
58
+ }
package/src/Button.ts CHANGED
@@ -8,6 +8,7 @@ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
8
8
  import {
9
9
  BUTTON_ARIA_ATTENTION, BUTTON_ARIA_DEFAULT, BUTTON_ARIA_EMPHASIZED, BUTTON_ARIA_TRANSPARENT, BUTTON_ARIA_TYPE_NEGATIVE, BUTTON_ARIA_TYPE_POSITIVE, BUTTON_ARIA_TYPE_PRIMARY, BUTTON_ARIA_TYPE_SECONDARY, BUTTON_ARIA_TYPE_TERTIARY, BUTTON_ARIA_TYPE_WARNING, TOGGLED,
10
10
  } from "./generated/i18n/i18n-defaults.js";
11
+ import WrappingType from "@ui5/webcomponents/dist/types/WrappingType.js";
11
12
  import UDExButtonSize from "./types/ButtonSize.js";
12
13
  import UDExButtonDesign from "./types/ButtonDesign.js";
13
14
 
@@ -77,6 +78,15 @@ class UDExButton extends Button {
77
78
  @property({ type: Boolean })
78
79
  _ariaDisabled!: boolean;
79
80
 
81
+ /**
82
+ * Defines if button should wrap text inside
83
+ *
84
+ * @default false
85
+ * @public
86
+ */
87
+ @property({ type: String })
88
+ wrappingType: `${WrappingType}` = WrappingType.None;
89
+
80
90
  @i18n("@sapudex/web-components")
81
91
  static i18nBundle: I18nBundle;
82
92
 
package/src/Footer.hbs CHANGED
@@ -1,14 +1,17 @@
1
1
  <footer class="udex-footer">
2
2
  <div class="udex-footer__content">
3
3
  <div class="udex-footer__contact-social">
4
- {{#if logoUrl}}
4
+ {{#if hasLogo}}
5
5
  <div class="udex-footer__logo">
6
- {{#if logoLink}}
7
- <a href="{{parsedRef}}" @click="{{_onLogoClick}}" title="{{logoTitle}}" aria-label="{{logoAriaLabel}}">
8
- <img id="udex-footer__logo-image" src="{{logoUrl}}" class="udex-footer__logo-image" alt="{{logoAlt}}"/>
9
- </a>
6
+ {{#if hasLogoLink}}
7
+ <a href="{{logoHref}}" @click="{{_onLogoClick}}" title="{{logoTitle}}" aria-label="{{logoAriaLabel}}">
8
+ <img id="udex-footer__logo-image" src="{{currentLogoUrl}}" class="{{logoClass}}" alt="{{logoAlt}}"/>
9
+ </a>
10
10
  {{else}}
11
- <img id="udex-footer__logo-image" src="{{logoUrl}}" class="udex-footer__logo-image" alt="{{logoAlt}}"/>
11
+ <img id="udex-footer__logo-image" src="{{currentLogoUrl}}" class="{{logoClass}}" alt="{{logoAlt}}"/>
12
+ {{/if}}
13
+ {{#if hasTagline}}
14
+ <img id="udex-footer__tagline-image" src="{{currentTaglineUrl}}" class="{{taglineClass}}" alt="{{taglineAlt}}"/>
12
15
  {{/if}}
13
16
  </div>
14
17
  {{/if}}
@@ -83,40 +86,40 @@
83
86
  {{/if}}
84
87
 
85
88
  <udex-divider class="udex-footer__divider"></udex-divider>
89
+ </div>
86
90
 
87
- <div class="udex-footer__copyright">
88
- {{#if isChineseLang}}
89
- <span class="udex-footer__copyright-chinese-text">
90
- <a
91
- href="{{chineseIcpNumberLink}}"
92
- title="{{chineseICPNumber}}"
93
- class="udex-footer__copyright-chinese-link"
94
- target="_blank">
95
- {{chineseICPNumber}}
96
- </a>
97
- {{chineseSecurityNetworkNumber}}
98
- </span>
99
- {{/if}}
100
- <span class="udex-footer__copyright-text">{{copyrightText}}</span>
101
- </div>
102
-
103
- {{#if socialLinksArray.length}}
104
- <div class="udex-footer__social-container">
105
- {{#each socialLinksArray}}
106
- <udex-social-media-button
107
- type="{{this.name}}"
108
- url="{{this.url}}"
109
- target="{{this.target}}"
110
- accessible-name="{{this.accessibleName}}"
111
- data-name="{{this.name}}"
112
- data-id="{{this.id}}"
113
- @ui5-click="{{../_onSocialMediaLinkClick}}"
114
- ></udex-social-media-button>
115
- {{/each}}
116
- </div>
91
+ <div class="udex-footer__copyright">
92
+ {{#if isChineseLang}}
93
+ <span class="udex-footer__copyright-chinese-text">
94
+ <a
95
+ href="{{chineseIcpNumberLink}}"
96
+ title="{{chineseICPNumber}}"
97
+ class="udex-footer__copyright-chinese-link"
98
+ target="_blank">
99
+ {{chineseICPNumber}}
100
+ </a>
101
+ {{chineseSecurityNetworkNumber}}
102
+ </span>
117
103
  {{/if}}
104
+ <span class="udex-footer__copyright-text">{{copyrightText}}</span>
118
105
  </div>
119
106
 
107
+ {{#if socialLinksArray.length}}
108
+ <div class="udex-footer__social-container">
109
+ {{#each socialLinksArray}}
110
+ <udex-social-media-button
111
+ type="{{this.name}}"
112
+ url="{{this.url}}"
113
+ target="{{this.target}}"
114
+ accessible-name="{{this.accessibleName}}"
115
+ data-name="{{this.name}}"
116
+ data-id="{{this.id}}"
117
+ @ui5-click="{{../_onSocialMediaLinkClick}}"
118
+ ></udex-social-media-button>
119
+ {{/each}}
120
+ </div>
121
+ {{/if}}
122
+
120
123
  <udex-button
121
124
  class="udex-footer__back-to-top-button"
122
125
  icon="back-to-top"
package/src/Footer.ts CHANGED
@@ -199,7 +199,7 @@ class UDExFooter extends UI5Element {
199
199
  * @public
200
200
  */
201
201
  @property({ type: String })
202
- logoTitle: string = "";
202
+ logoTitle?: string;
203
203
 
204
204
  /**
205
205
  * Defines the Logo URL
@@ -208,7 +208,7 @@ class UDExFooter extends UI5Element {
208
208
  * @public
209
209
  */
210
210
  @property({ type: String })
211
- logoUrl: string = "";
211
+ logoUrl?: string;
212
212
 
213
213
  /**
214
214
  * Defines the optional component href link for the logo.
@@ -219,6 +219,51 @@ class UDExFooter extends UI5Element {
219
219
  @property({ type: String })
220
220
  logoLink: string = "";
221
221
 
222
+ /**
223
+ * Defines the tagline alt text.
224
+ *
225
+ * @default ""
226
+ * @public
227
+ */
228
+ @property({ type: String })
229
+ taglineAlt?: string;
230
+
231
+ /**
232
+ * Defines the tagline url.
233
+ *
234
+ * @default ""
235
+ * @public
236
+ */
237
+ @property({ type: String })
238
+ taglineUrl?: string;
239
+
240
+ /**
241
+ * Defines the chinese tagline url.
242
+ *
243
+ * @default ""
244
+ * @public
245
+ */
246
+ @property({ type: String })
247
+ chineseTaglineUrl?: string;
248
+
249
+ /**
250
+ * Defines the chinese logo url
251
+ *
252
+ * @default ""
253
+ * @public
254
+ */
255
+ @property({ type: String })
256
+ chineseLogoUrl?: string;
257
+
258
+ /**
259
+ * Defines the optional component href link for the chinese logo.
260
+ *
261
+ * @default ""
262
+ * @public
263
+ */
264
+ @property({ type: String })
265
+ chineseLogoLink?: string;
266
+
222
267
  /**
223
268
  * List of the Quick links
224
269
  *
@@ -398,10 +443,6 @@ class UDExFooter extends UI5Element {
398
443
  window.scrollTo(0, 0);
399
444
  }
400
445
 
401
- get parsedRef(): string | undefined {
402
- return (this.logoLink && this.logoLink.length > 0) ? this.logoLink : undefined;
403
- }
404
-
405
446
  get quickLinksArray(): FooterLink[] {
406
447
  return parseArrayFromString<FooterLink>(this.quickLinks);
407
448
  }
@@ -493,6 +534,40 @@ class UDExFooter extends UI5Element {
493
534
  return getLanguage()?.toLowerCase() === "zh_cn";
494
535
  }
495
536
 
537
+ get hasLogo(): boolean {
538
+ return !!(this.logoUrl || this.chineseLogoUrl);
539
+ }
540
+
541
+ get hasLogoLink(): boolean {
542
+ return !!(this.logoLink || this.chineseLogoLink);
543
+ }
544
+
545
+ get currentLogoUrl(): string | undefined {
546
+ return this.isChineseLang && this.chineseLogoUrl ? this.chineseLogoUrl : this.logoUrl;
547
+ }
548
+
549
+ get logoHref(): string {
550
+ return this.isChineseLang && this.chineseLogoLink ? this.chineseLogoLink : this.logoLink;
551
+ }
552
+
553
+ get hasTagline(): boolean {
554
+ return !!(this.taglineUrl || this.chineseTaglineUrl);
555
+ }
556
+
557
+ get currentTaglineUrl(): string | undefined {
558
+ return this.isChineseLang && this.chineseTaglineUrl ? this.chineseTaglineUrl : this.taglineUrl;
559
+ }
560
+
561
+ get taglineClass(): string {
562
+ const root = "udex-footer__tagline-image";
563
+ return this.isChineseLang && this.chineseTaglineUrl ? `${root}-chinese` : root;
564
+ }
565
+
566
+ get logoClass(): string {
567
+ const root = "udex-footer__logo-image";
568
+ return this.isChineseLang && this.chineseLogoUrl ? `${root}-chinese` : root;
569
+ }
570
+
496
571
  _onLogoClick(e: PointerEvent): void {
497
572
  this.fireFooterBaseEvent(e, "logo-click");
498
573
  }
@@ -38,7 +38,6 @@
38
38
  <slot id="udex-hero-banner__content" name="content" part="content"></slot>
39
39
 
40
40
  {{#if hasAdditionalContent}}
41
- <udex-media-player source="http://media.w3.org/2010/05/sintel/trailer.mp4" aspect-ratio="16:9"></udex-media-player>
42
41
  <slot id="udex-hero-banner__additionalContent" name="additionalContent" part="additionalContent"></slot>
43
42
  {{/if}}
44
43
  {{/inline}}
package/src/List.hbs CHANGED
@@ -13,7 +13,6 @@
13
13
  class="udex-list"
14
14
  role="{{accessibleRole}}"
15
15
  aria-labelledby="{{ariaLabelledBy}}"
16
- aria-label="{{accessibleName}}"
17
16
  aria-busy="{{ariaBusy}}">
18
17
  <slot></slot>
19
18
  </div>
@@ -27,7 +26,6 @@
27
26
  class="udex-list"
28
27
  role="{{accessibleRole}}"
29
28
  aria-labelledby="{{ariaLabelledBy}}"
30
- aria-label="{{accessibleName}}"
31
29
  aria-busy="{{ariaBusy}}">
32
30
  <slot></slot>
33
31
  </div>
package/src/List.ts CHANGED
@@ -135,12 +135,21 @@ class UDExList extends UI5Element {
135
135
  /**
136
136
  * Defines the name of the UI5 Icon, that will be displayed for each item of the list.
137
137
  *
138
- * @defaultv ""
139
- * @private
138
+ * @default ""
139
+ * @public
140
140
  */
141
141
  @property({ type: String })
142
142
  itemIcon: string = "";
143
143
 
144
+ /**
145
+ * Enables tab navigation for the list.
146
+ *
147
+ * @default ""
148
+ * @public
149
+ */
150
+ @property({ type: Boolean })
151
+ tabNavigationEnabled?: boolean;
152
+
144
153
  /**
145
154
  * Slot for list items.
146
155
  *
@@ -167,6 +176,9 @@ class UDExList extends UI5Element {
167
176
  }
168
177
 
169
178
  handleKeyDown(e: KeyboardEvent): void {
179
+ if (this.tabNavigationEnabled) {
180
+ return;
181
+ }
170
182
  if (isUp(e)) {
171
183
  this.handleUpArrow(e);
172
184
  }
@@ -323,8 +335,10 @@ class UDExList extends UI5Element {
323
335
  clickedItem.selected = true;
324
336
  }
325
337
 
326
- this.resetTabIndexes();
327
- clickedItem._tabIndex = "0";
338
+ if (!this.tabNavigationEnabled) {
339
+ this.resetTabIndexes();
340
+ clickedItem._tabIndex = "0";
341
+ }
328
342
 
329
343
  this.fireDecoratorEvent("selection-change", {
330
344
  listItems: this.getItemsFromList(),
@@ -406,6 +420,10 @@ class UDExList extends UI5Element {
406
420
  }
407
421
 
408
422
  getTabIndex(index: number, item: UDExListItemBase): string {
423
+ if (this.tabNavigationEnabled) {
424
+ return "0";
425
+ }
426
+
409
427
  const isFirstItem = this.modeSelected && index === 0;
410
428
  const isFirstItemInGroupList = this.isGroupList && index === 1;
411
429
  const listGroupHeader = item.closest("[udex-list-group-header]") as UDExListGroupHeader;
@@ -433,10 +451,11 @@ class UDExList extends UI5Element {
433
451
  }
434
452
 
435
453
  get ariaLabelModeText(): string {
436
- if (this.modeSingleSelect || this.modeRadioGroup) {
437
- return UDExList.i18nBundle.getText(ARIA_LABEL_LIST_SELECTABLE);
438
- }
439
- return UDExList.i18nBundle.getText(ARIA_LABEL_LIST_MULTISELECTABLE);
454
+ const defaultText = this.modeSingleSelect || this.modeRadioGroup
455
+ ? ARIA_LABEL_LIST_SELECTABLE
456
+ : ARIA_LABEL_LIST_MULTISELECTABLE;
457
+
458
+ return this.accessibleName || UDExList.i18nBundle.getText(defaultText);
440
459
  }
441
460
 
442
461
  get ariaLabelledBy(): string {
@@ -6,6 +6,7 @@ import Icon from "@ui5/webcomponents/dist/Icon.js";
6
6
  import UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
7
7
  import ListGroupHeaderTemplate from "./generated/templates/ListGroupHeaderTemplate.lit.js";
8
8
  import { UDExListItemSize } from "./types/List.js";
9
+ import type { UDExListItemBaseEvents } from "./ListItemBase.js";
9
10
 
10
11
  // Styles
11
12
  import ListGroupHeaderCss from "./generated/themes/ListGroupHeader.css.js";
@@ -48,7 +49,7 @@ type UDExListGroupHeaderBaseHeaderPressEventDetail = {
48
49
  class UDExListGroupHeader extends UDExListGroupHeaderBase {
49
50
  eventDetails!: {
50
51
  "header-press": UDExListGroupHeaderBaseHeaderPressEventDetail,
51
- };
52
+ } & UDExListItemBaseEvents;
52
53
 
53
54
  handleHeaderPress() {
54
55
  if (!this.controlled) {
package/src/ListItem.hbs CHANGED
@@ -74,6 +74,13 @@
74
74
  shape="{{imageShape}}"
75
75
  size="{{imageSize}}"
76
76
  part="avatar">
77
+ {{#if imageBadgeState}}
78
+ <udex-status-badge
79
+ slot="badge"
80
+ value-state="{{imageBadgeState}}"
81
+ size="{{imageSize}}">
82
+ </udex-status-badge>
83
+ {{/if}}
77
84
  <img src="{{image}}" alt="{{imageAlt}}" />
78
85
  </udex-avatar>
79
86
  {{/if}}
@@ -86,6 +93,13 @@
86
93
  {{/if}}
87
94
  <slot part="content"></slot>
88
95
  </div>
96
+ {{#if additionalText}}<div class="udex-list__add-text" part="additional-text">{{additionalText}}</div>{{/if}}
97
+ {{#if hasFirstIcon}}
98
+ <slot name="firstIcon" @click={{_fireIconClickEvent}}></slot>
99
+ {{/if}}
100
+ {{#if hasSecondIcon}}
101
+ <slot name="secondIcon" @click={{_fireIconClickEvent}}></slot>
102
+ {{/if}}
89
103
  {{else}}
90
104
  <div class="udex-list__text-holder">
91
105
  <slot part="content"></slot>
@@ -93,10 +107,10 @@
93
107
  </div>
94
108
  {{#if additionalText}}<div class="udex-list__add-text" part="additional-text">{{additionalText}}</div>{{/if}}
95
109
  {{#if hasFirstIcon}}
96
- <slot name="firstIcon"></slot>
110
+ <slot name="firstIcon" @click={{_fireIconClickEvent}}></slot>
97
111
  {{/if}}
98
112
  {{#if hasSecondIcon}}
99
- <slot name="secondIcon"></slot>
113
+ <slot name="secondIcon" @click={{_fireIconClickEvent}}></slot>
100
114
  {{/if}}
101
115
  {{/if}}
102
116
  </div>