@sapudex/web-components 2.14.0 → 2.16.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 (236) hide show
  1. package/cypress/specs/Breadcrumbs.cy.tsx +77 -0
  2. package/cypress/specs/FilterMenu.cy.tsx +19 -43
  3. package/cypress/specs/HeroBanner.cy.tsx +6 -6
  4. package/cypress/specs/InputGroup.cy.tsx +47 -0
  5. package/cypress/specs/RatingBar.cy.tsx +41 -0
  6. package/cypress/specs/Tooltip.cy.tsx +6 -11
  7. package/cypress/support/component-imports.instrumented.ts +4 -0
  8. package/cypress/support/component-imports.src.ts +4 -0
  9. package/dist/Accordion.js +44 -30
  10. package/dist/Accordion.js.map +1 -1
  11. package/dist/Breadcrumbs.d.ts +2 -0
  12. package/dist/Breadcrumbs.js +8 -7
  13. package/dist/Breadcrumbs.js.map +1 -1
  14. package/dist/BreadcrumbsItem.d.ts +1 -2
  15. package/dist/BreadcrumbsItem.js.map +1 -1
  16. package/dist/BreadcrumbsPopoverTemplate.d.ts +2 -0
  17. package/dist/BreadcrumbsPopoverTemplate.js +8 -0
  18. package/dist/BreadcrumbsPopoverTemplate.js.map +1 -0
  19. package/dist/BreadcrumbsTemplate.d.ts +2 -0
  20. package/dist/BreadcrumbsTemplate.js +10 -0
  21. package/dist/BreadcrumbsTemplate.js.map +1 -0
  22. package/dist/FilterMenu.js +1 -2
  23. package/dist/FilterMenu.js.map +1 -1
  24. package/dist/FilterMenuSelectAll.d.ts +0 -1
  25. package/dist/FilterMenuSelectAll.js +0 -3
  26. package/dist/FilterMenuSelectAll.js.map +1 -1
  27. package/dist/Footer.d.ts +17 -21
  28. package/dist/Footer.js +5 -11
  29. package/dist/Footer.js.map +1 -1
  30. package/dist/FooterTemplate.d.ts +2 -0
  31. package/dist/FooterTemplate.js +27 -0
  32. package/dist/FooterTemplate.js.map +1 -0
  33. package/dist/HeroBanner.js +4 -4
  34. package/dist/HeroBanner.js.map +1 -1
  35. package/dist/HeroBannerTemplate.d.ts +2 -0
  36. package/dist/HeroBannerTemplate.js +10 -0
  37. package/dist/HeroBannerTemplate.js.map +1 -0
  38. package/dist/InputGroup.d.ts +0 -1
  39. package/dist/InputGroup.js +3 -6
  40. package/dist/InputGroup.js.map +1 -1
  41. package/dist/InputGroupTemplate.d.ts +2 -0
  42. package/dist/InputGroupTemplate.js +7 -0
  43. package/dist/InputGroupTemplate.js.map +1 -0
  44. package/dist/MastheadMobileMenu.js +1 -1
  45. package/dist/MastheadMobileMenu.js.map +1 -1
  46. package/dist/RatingBar.js +3 -3
  47. package/dist/RatingBar.js.map +1 -1
  48. package/dist/RatingBarTemplate.d.ts +2 -0
  49. package/dist/RatingBarTemplate.js +8 -0
  50. package/dist/RatingBarTemplate.js.map +1 -0
  51. package/dist/Search.js +5 -4
  52. package/dist/Search.js.map +1 -1
  53. package/dist/SearchableListBase.d.ts +2 -1
  54. package/dist/SearchableListBase.js +13 -23
  55. package/dist/SearchableListBase.js.map +1 -1
  56. package/dist/SelectBox.js +1 -2
  57. package/dist/SelectBox.js.map +1 -1
  58. package/dist/StatusBadge.js +3 -3
  59. package/dist/StatusBadge.js.map +1 -1
  60. package/dist/StatusBadgeTemplate.d.ts +2 -0
  61. package/dist/StatusBadgeTemplate.js +7 -0
  62. package/dist/StatusBadgeTemplate.js.map +1 -0
  63. package/dist/StatusMessage.js +3 -3
  64. package/dist/StatusMessage.js.map +1 -1
  65. package/dist/StatusMessageTemplate.d.ts +2 -0
  66. package/dist/StatusMessageTemplate.js +8 -0
  67. package/dist/StatusMessageTemplate.js.map +1 -0
  68. package/dist/Switch.d.ts +1 -4
  69. package/dist/Switch.js +4 -8
  70. package/dist/Switch.js.map +1 -1
  71. package/dist/SwitchTemplate.d.ts +2 -0
  72. package/dist/SwitchTemplate.js +12 -0
  73. package/dist/SwitchTemplate.js.map +1 -0
  74. package/dist/TagGroup.d.ts +2 -0
  75. package/dist/TagGroup.js +10 -3
  76. package/dist/TagGroup.js.map +1 -1
  77. package/dist/TruncatedText.d.ts +0 -1
  78. package/dist/TruncatedText.js +5 -6
  79. package/dist/TruncatedText.js.map +1 -1
  80. package/dist/TruncatedTextTemplate.d.ts +2 -0
  81. package/dist/TruncatedTextTemplate.js +9 -0
  82. package/dist/TruncatedTextTemplate.js.map +1 -0
  83. package/dist/assets/{InputSuggestions-AxcsfuTc.js → InputSuggestions-lpqKgn1j.js} +1 -1
  84. package/dist/assets/{ListItemStandardExpandableTextTemplate-CaS49yZt.js → ListItemStandardExpandableTextTemplate-BPs3CyVq.js} +1 -1
  85. package/dist/assets/{bundle.esm-DzkSPQ0p.js → bundle.esm-C3RAGF4b.js} +211 -211
  86. package/dist/css/themes/AccordionItem.css +1 -1
  87. package/dist/css/themes/CountrySelector.css +1 -1
  88. package/dist/css/themes/Link.css +1 -1
  89. package/dist/css/themes/MediaPlayer.css +1 -1
  90. package/dist/css/themes/PhoneNumberField.css +1 -1
  91. package/dist/css/themes/RatingBar.css +1 -1
  92. package/dist/css/themes/RatingIndicator.css +1 -1
  93. package/dist/css/themes/Search.css +1 -1
  94. package/dist/css/themes/SelectBox.css +1 -1
  95. package/dist/css/themes/Slider.css +1 -1
  96. package/dist/css/themes/TextArea.css +1 -1
  97. package/dist/css/themes/TextField.css +1 -1
  98. package/dist/custom-elements-internal.json +148 -133
  99. package/dist/custom-elements.json +133 -118
  100. package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
  101. package/dist/generated/themes/AccordionItem.css.js +1 -1
  102. package/dist/generated/themes/AccordionItem.css.js.map +1 -1
  103. package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
  104. package/dist/generated/themes/CountrySelector.css.js +1 -1
  105. package/dist/generated/themes/CountrySelector.css.js.map +1 -1
  106. package/dist/generated/themes/Link.css.d.ts +1 -1
  107. package/dist/generated/themes/Link.css.js +1 -1
  108. package/dist/generated/themes/Link.css.js.map +1 -1
  109. package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
  110. package/dist/generated/themes/MediaPlayer.css.js +1 -1
  111. package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
  112. package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
  113. package/dist/generated/themes/PhoneNumberField.css.js +1 -1
  114. package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
  115. package/dist/generated/themes/RatingBar.css.d.ts +1 -1
  116. package/dist/generated/themes/RatingBar.css.js +1 -1
  117. package/dist/generated/themes/RatingBar.css.js.map +1 -1
  118. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  119. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  120. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  121. package/dist/generated/themes/Search.css.d.ts +1 -1
  122. package/dist/generated/themes/Search.css.js +1 -1
  123. package/dist/generated/themes/Search.css.js.map +1 -1
  124. package/dist/generated/themes/SelectBox.css.d.ts +1 -1
  125. package/dist/generated/themes/SelectBox.css.js +1 -1
  126. package/dist/generated/themes/SelectBox.css.js.map +1 -1
  127. package/dist/generated/themes/Slider.css.d.ts +1 -1
  128. package/dist/generated/themes/Slider.css.js +1 -1
  129. package/dist/generated/themes/Slider.css.js.map +1 -1
  130. package/dist/generated/themes/TextArea.css.d.ts +1 -1
  131. package/dist/generated/themes/TextArea.css.js +1 -1
  132. package/dist/generated/themes/TextArea.css.js.map +1 -1
  133. package/dist/generated/themes/TextField.css.d.ts +1 -1
  134. package/dist/generated/themes/TextField.css.js +1 -1
  135. package/dist/generated/themes/TextField.css.js.map +1 -1
  136. package/dist/utils/sanitizeString.d.ts +2 -0
  137. package/dist/utils/sanitizeString.js +12 -0
  138. package/dist/utils/sanitizeString.js.map +1 -0
  139. package/dist/web-types.json +2 -2
  140. package/package.json +2 -2
  141. package/src/Accordion.ts +56 -26
  142. package/src/Breadcrumbs.ts +12 -7
  143. package/src/BreadcrumbsItem.ts +2 -2
  144. package/src/BreadcrumbsPopoverTemplate.tsx +60 -0
  145. package/src/BreadcrumbsTemplate.tsx +53 -0
  146. package/src/FilterMenu.ts +1 -2
  147. package/src/FilterMenuSelectAll.ts +0 -4
  148. package/src/Footer.ts +28 -35
  149. package/src/FooterTemplate.tsx +410 -0
  150. package/src/HeroBanner.ts +4 -4
  151. package/src/HeroBannerTemplate.tsx +101 -0
  152. package/src/InputGroup.ts +3 -7
  153. package/src/InputGroupTemplate.tsx +31 -0
  154. package/src/MastheadMobileMenu.ts +1 -1
  155. package/src/RatingBar.ts +3 -3
  156. package/src/RatingBarTemplate.tsx +38 -0
  157. package/src/Search.ts +5 -4
  158. package/src/SearchableListBase.ts +15 -26
  159. package/src/SelectBox.ts +1 -2
  160. package/src/StatusBadge.ts +5 -4
  161. package/src/StatusBadgeTemplate.tsx +18 -0
  162. package/src/StatusMessage.ts +3 -3
  163. package/src/StatusMessageTemplate.tsx +20 -0
  164. package/src/Switch.ts +5 -11
  165. package/src/SwitchTemplate.tsx +50 -0
  166. package/src/TagGroup.ts +13 -3
  167. package/src/TruncatedText.ts +8 -14
  168. package/src/TruncatedTextTemplate.tsx +21 -0
  169. package/src/generated/themes/AccordionItem.css.ts +1 -1
  170. package/src/generated/themes/CountrySelector.css.ts +1 -1
  171. package/src/generated/themes/Link.css.ts +1 -1
  172. package/src/generated/themes/MediaPlayer.css.ts +1 -1
  173. package/src/generated/themes/PhoneNumberField.css.ts +1 -1
  174. package/src/generated/themes/RatingBar.css.ts +1 -1
  175. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  176. package/src/generated/themes/Search.css.ts +1 -1
  177. package/src/generated/themes/SelectBox.css.ts +1 -1
  178. package/src/generated/themes/Slider.css.ts +1 -1
  179. package/src/generated/themes/TextArea.css.ts +1 -1
  180. package/src/generated/themes/TextField.css.ts +1 -1
  181. package/src/themes/AccordionItem.css +0 -1
  182. package/src/themes/CountrySelector.css +1 -7
  183. package/src/themes/Link.css +11 -4
  184. package/src/themes/MediaPlayer.css +133 -186
  185. package/src/themes/PhoneNumberField.css +25 -7
  186. package/src/themes/RatingBar.css +2 -2
  187. package/src/themes/Search.css +7 -3
  188. package/src/themes/SelectBox.css +4 -0
  189. package/src/themes/TextArea.css +31 -7
  190. package/src/themes/TextField.css +15 -5
  191. package/src/utils/sanitizeString.ts +13 -0
  192. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.d.ts +0 -3
  193. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js +0 -12
  194. package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js.map +0 -1
  195. package/dist/generated/templates/BreadcrumbsTemplate.lit.d.ts +0 -3
  196. package/dist/generated/templates/BreadcrumbsTemplate.lit.js +0 -14
  197. package/dist/generated/templates/BreadcrumbsTemplate.lit.js.map +0 -1
  198. package/dist/generated/templates/FooterTemplate.lit.d.ts +0 -3
  199. package/dist/generated/templates/FooterTemplate.lit.js +0 -39
  200. package/dist/generated/templates/FooterTemplate.lit.js.map +0 -1
  201. package/dist/generated/templates/InputGroupTemplate.lit.d.ts +0 -3
  202. package/dist/generated/templates/InputGroupTemplate.lit.js +0 -9
  203. package/dist/generated/templates/InputGroupTemplate.lit.js.map +0 -1
  204. package/dist/generated/templates/RatingBarTemplate.lit.d.ts +0 -3
  205. package/dist/generated/templates/RatingBarTemplate.lit.js +0 -8
  206. package/dist/generated/templates/RatingBarTemplate.lit.js.map +0 -1
  207. package/dist/generated/templates/StatusBadgeTemplate.lit.d.ts +0 -3
  208. package/dist/generated/templates/StatusBadgeTemplate.lit.js +0 -7
  209. package/dist/generated/templates/StatusBadgeTemplate.lit.js.map +0 -1
  210. package/dist/generated/templates/StatusMessageTemplate.lit.d.ts +0 -3
  211. package/dist/generated/templates/StatusMessageTemplate.lit.js +0 -8
  212. package/dist/generated/templates/StatusMessageTemplate.lit.js.map +0 -1
  213. package/dist/generated/templates/SwitchTemplate.lit.d.ts +0 -3
  214. package/dist/generated/templates/SwitchTemplate.lit.js +0 -14
  215. package/dist/generated/templates/SwitchTemplate.lit.js.map +0 -1
  216. package/dist/generated/templates/TruncatedTextTemplate.lit.d.ts +0 -3
  217. package/dist/generated/templates/TruncatedTextTemplate.lit.js +0 -7
  218. package/dist/generated/templates/TruncatedTextTemplate.lit.js.map +0 -1
  219. package/src/Breadcrumbs.hbs +0 -38
  220. package/src/BreadcrumbsPopover.hbs +0 -48
  221. package/src/Footer.hbs +0 -296
  222. package/src/InputGroup.hbs +0 -20
  223. package/src/RatingBar.hbs +0 -11
  224. package/src/StatusBadge.hbs +0 -9
  225. package/src/StatusMessage.hbs +0 -6
  226. package/src/Switch.hbs +0 -35
  227. package/src/TruncatedText.hbs +0 -11
  228. package/src/generated/templates/BreadcrumbsPopoverTemplate.lit.ts +0 -16
  229. package/src/generated/templates/BreadcrumbsTemplate.lit.ts +0 -18
  230. package/src/generated/templates/FooterTemplate.lit.ts +0 -43
  231. package/src/generated/templates/InputGroupTemplate.lit.ts +0 -13
  232. package/src/generated/templates/RatingBarTemplate.lit.ts +0 -12
  233. package/src/generated/templates/StatusBadgeTemplate.lit.ts +0 -11
  234. package/src/generated/templates/StatusMessageTemplate.lit.ts +0 -12
  235. package/src/generated/templates/SwitchTemplate.lit.ts +0 -18
  236. package/src/generated/templates/TruncatedTextTemplate.lit.ts +0 -11
@@ -0,0 +1,77 @@
1
+ import { UDExBreadcrumbs, UDExBreadcrumbsItem } from "../support/component-imports.js";
2
+
3
+ const breadcrumbs = <UDExBreadcrumbs id="breadcrumbs" class="udex-breadcrumbs">
4
+ <UDExBreadcrumbsItem
5
+ href="https://www.sap.com"
6
+ target="_blank"
7
+ icon="home"
8
+ accessible-name="Home page">
9
+ SAP Home
10
+ </UDExBreadcrumbsItem>
11
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Second Level</UDExBreadcrumbsItem>
12
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Third Level</UDExBreadcrumbsItem>
13
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Fourth Level</UDExBreadcrumbsItem>
14
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Fifth level</UDExBreadcrumbsItem>
15
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Sixth Level</UDExBreadcrumbsItem>
16
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Seventh level</UDExBreadcrumbsItem>
17
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Eight Level</UDExBreadcrumbsItem>
18
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Ninth Level</UDExBreadcrumbsItem>
19
+ <UDExBreadcrumbsItem>Current Page</UDExBreadcrumbsItem>
20
+ </UDExBreadcrumbs>
21
+
22
+ const breadcrumbsShowItemsHigher = <UDExBreadcrumbs
23
+ id="breadcrumbs-show-items-higher"
24
+ show-items="10"
25
+ class="udex-breadcrumbs">
26
+ <UDExBreadcrumbsItem
27
+ href="https://www.sap.com"
28
+ target="_blank"
29
+ icon="home"
30
+ accessible-name="Home page">
31
+ SAP Home
32
+ </UDExBreadcrumbsItem>
33
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Second Level</UDExBreadcrumbsItem>
34
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Third Level</UDExBreadcrumbsItem>
35
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Fourth Level</UDExBreadcrumbsItem>
36
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Fifth level</UDExBreadcrumbsItem>
37
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Sixth Level</UDExBreadcrumbsItem>
38
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Seventh level</UDExBreadcrumbsItem>
39
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Eight Level</UDExBreadcrumbsItem>
40
+ <UDExBreadcrumbsItem href="https://www.sap.com" target="_blank">Ninth Level</UDExBreadcrumbsItem>
41
+ <UDExBreadcrumbsItem>Current Page</UDExBreadcrumbsItem>
42
+ </UDExBreadcrumbs>
43
+
44
+ describe("Breadcrumbs", () => {
45
+ beforeEach(() => {
46
+ cy.mount(breadcrumbs);
47
+ });
48
+
49
+ it("tests if web component is correctly rendered", () => {
50
+ cy.get("#breadcrumbs").shadow().find(".ui5-breadcrumbs-root").should("be.visible");
51
+ });
52
+
53
+ it("tests if items that fit the container are visible", () => {
54
+ cy.get("#breadcrumbs").shadow().find(".udex-breadcrumbs__item--visible").should("have.length", 3);
55
+ });
56
+
57
+ it("tests if items that don't fit are rendered in dropdown", () => {
58
+ cy.get("#breadcrumbs").shadow().find(".udex-breadcrumbs__trigger").click();
59
+ cy.get("#breadcrumbs").shadow().find(".udex-breadcrumbs__item--hidden").should("have.length", 10);
60
+ });
61
+
62
+ it("tests if the dropdown is opened after clicking on arrow item", () => {
63
+ cy.get("#breadcrumbs").shadow().find(".udex-breadcrumbs__trigger").click();
64
+ cy.get("#breadcrumbs").shadow().find("[udex-dropdown]").should("have.attr", "open");
65
+ });
66
+
67
+ it("tests if the first arrow item is focused after pressing \"Escape\" key inside the dropdown on the first dropdown item", () => {
68
+ cy.get("#breadcrumbs").shadow().find(".udex-breadcrumbs__trigger").click();
69
+ cy.get("body").realType("{esc}");
70
+ cy.get("#breadcrumbs").shadow().find(".udex-breadcrumbs__trigger").should("be.focused");
71
+ });
72
+
73
+ it("tests if all items are rendered if showItems property is higher than number of available items", () => {
74
+ cy.mount(breadcrumbsShowItemsHigher);
75
+ cy.get("#breadcrumbs-show-items-higher").shadow().find(".udex-breadcrumbs__item--visible").should("have.length", 9);
76
+ });
77
+ });
@@ -124,14 +124,14 @@ const filterMenuSingleWithSearch = <>
124
124
  const filterMenuSelectAll = <>
125
125
  <span id="resultSelectAll"></span>
126
126
  <UDExFilterMenu
127
- id="filter-menu-select-all"
128
- mode={UDExListMode.MultiSelect}
129
- filter-name="Filter Name">
130
- <UDExFilterMenuSelectAll>
131
- <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
132
- <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
133
- </UDExFilterMenuSelectAll>
134
- </UDExFilterMenu>
127
+ id="filter-menu-select-all"
128
+ mode={UDExListMode.MultiSelect}
129
+ filter-name="Filter Name">
130
+ <UDExFilterMenuSelectAll>
131
+ <UDExFilterMenuItem label="JavaScript" supporting-text="Frontend web development"></UDExFilterMenuItem>
132
+ <UDExFilterMenuItem label="Python" supporting-text="Used in data analysis"></UDExFilterMenuItem>
133
+ </UDExFilterMenuSelectAll>
134
+ </UDExFilterMenu>
135
135
  </>
136
136
 
137
137
  describe("Filter Menu component", () => {
@@ -559,45 +559,21 @@ describe("Filter Menu component", () => {
559
559
  .shadow().find("udex-list-item").should("have.text", "Select All");
560
560
  });
561
561
 
562
- it("header is not selected if at least one element is selected", () => {
563
- cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__list").as("list");
564
- cy.get("@list").find("udex-list-item").eq(0).shadow().find(".udex-list__item").as("firstItem");
565
-
566
- cy.get("@firstItem").click();
567
-
568
- cy.get("@selectAllHeader").should("not.have.attr", "selected");
569
- });
570
-
571
- it("unselect all items when user clicks on select all header", () => {
572
- cy.get("[udex-filter-menu]").shadow()
573
- .find("udex-list-select-all")
574
- .find("udex-list-item").as("item");
575
- cy.get("@item").eq(0).shadow().find(".udex-list__item").as("firstItem");
576
- cy.get("@item").eq(1).shadow().find(".udex-list__item").as("secondItem");
577
-
578
- cy.get("[udex-filter-menu]")
579
- .shadow().find("udex-list-select-all")
580
- .shadow().find("udex-list-item")
581
- .shadow().find(".udex-list__item")
582
- .as("selectAllHeader");
583
-
584
- cy.get("@firstItem").click();
585
- cy.get("@secondItem").click();
586
-
587
- cy.get("@firstItem").should("have.attr", "data-selected", "true");
588
- cy.get("@secondItem").should("have.attr", "data-selected", "true");
589
- cy.get("@selectAllHeader").should("have.attr", "data-selected", "false");
590
-
591
- cy.get("@selectAllHeader").click();
592
-
593
- cy.get("@firstItem").should("have.attr", "data-selected", "false");
594
- cy.get("@secondItem").should("have.attr", "data-selected", "false");
595
- });
596
-
597
562
  it("select all header focus on pressed letter", () => {
598
563
  cy.realPress("p");
599
564
  cy.get("[udex-filter-menu]").shadow().find("udex-list-item").eq(1).should("have.attr", "focused");
600
565
  });
566
+
567
+ it("emit select-all when Select All header clicked", () => {
568
+ let selectAllEmitted = false;
569
+ cy.get("[udex-filter-menu]").then(menu => {
570
+ menu.get(0).addEventListener('ui5-select-all', function() {
571
+ selectAllEmitted = true;
572
+ });
573
+ });
574
+
575
+ cy.get("@selectAllHeader").click().then(() => expect(selectAllEmitted).to.be.true);
576
+ });
601
577
  });
602
578
 
603
579
  describe("Filter Menu focus state tests", () => {
@@ -8,9 +8,9 @@ const backgroundImageLabel = "Hero Banner background image label";
8
8
  const backgroundImageSrc = "./stories/hero-banner/bg1.png";
9
9
  const backgroundVideoSrc = "./stories/hero-banner-bg-video.mp4";
10
10
  const mediaContentImage = "./stories/hero-banner/bg6.jpg";
11
- const linearGradient = "linear-gradient(to bottom, #1e5799 0%,#7db9e8 100%)";
11
+ const linearGradient = "linear-gradient(rgb(30, 87, 153) 0%, rgb(125, 185, 232) 100%)";
12
12
  const contentText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis posuere in massa id fringilla. Nunc rutrum turpis purus, et dignissim arcu gravida ut. Morbi sed sem ac magna consectetur tincidunt dapibus sed ipsum.";
13
- const backgroundColor = "#fbdab9";
13
+ const backgroundColor = "rgb(251, 218, 185)";
14
14
 
15
15
  const heroBanner = <>
16
16
  <UDExHeroBanner
@@ -115,7 +115,7 @@ describe("Hero Banner component", () => {
115
115
  });
116
116
 
117
117
  it("tests if correct background color is applied", () => {
118
- cy.get("@heroBannerDefault").find(".udex-hero-banner").should("have.attr", "style", `background-color: ${backgroundColor}; `);
118
+ cy.get("@heroBannerDefault").find(".udex-hero-banner").should("have.attr", "style", `background-color: ${backgroundColor};`);
119
119
  });
120
120
 
121
121
  it("tests if correct breadcrumbs is applied", () => {
@@ -143,14 +143,14 @@ describe("Hero Banner component", () => {
143
143
  });
144
144
 
145
145
  it("tests if correct background video label is applied", () => {
146
- cy.get("@videoBackground").find("video.udex-hero-banner__background-video").should("have.attr", "alt", backgroundVideoLabel);
146
+ cy.get("@videoBackground").find("video.udex-hero-banner__background-video").should("have.attr", "aria-label", backgroundVideoLabel);
147
147
  });
148
148
  });
149
149
 
150
150
  describe("Hero Banner with gradient", () => {
151
151
  it("tests if correct gradient background is applied", () => {
152
152
  cy.mount(heroBannerWithGradient);
153
- cy.get("#heroBannerWithGradient").shadow().find(".udex-hero-banner").should("have.attr", "style", `background-color: transparent; background-image:${linearGradient}`);
153
+ cy.get("#heroBannerWithGradient").shadow().find(".udex-hero-banner").should("have.attr", "style", `background-color: transparent; background-image: ${linearGradient};`);
154
154
  });
155
155
  });
156
156
 
@@ -164,7 +164,7 @@ describe("Hero Banner component", () => {
164
164
  });
165
165
 
166
166
  it("tests if defaults for properties are correctly applied", () => {
167
- cy.get("#heroBannerWithAdditionalContent").shadow().find(".udex-hero-banner").should("have.attr", "style", "background-color: transparent; ");
167
+ cy.get("#heroBannerWithAdditionalContent").shadow().find(".udex-hero-banner").should("have.attr", "style", "background-color: transparent;");
168
168
 
169
169
  cy.get("#heroBannerWithAdditionalContent").shadow().find(".udex-hero-banner__background-image").should("not.exist");
170
170
 
@@ -0,0 +1,47 @@
1
+ import { UDExInputGroup, UDExCheckbox } from "../support/component-imports.js";
2
+
3
+ const groupOrientation = "Horizontal";
4
+ const groupState = "Error";
5
+ const groupText = "Error message";
6
+ const groupName = "test-name"
7
+
8
+ const simpleGroup = <UDExInputGroup></UDExInputGroup>
9
+ const checkboxGroup = <UDExInputGroup orientation={groupOrientation} valueState={groupState} supportingText={groupText} groupName={groupName}>
10
+ <UDExCheckbox text="Text option 1"></UDExCheckbox>
11
+ <UDExCheckbox text="Text option 2"></UDExCheckbox>
12
+ </UDExInputGroup>
13
+
14
+ describe("Input Group", () => {
15
+ beforeEach(() => {
16
+ cy.mount(checkboxGroup);
17
+ });
18
+
19
+ it("renders input group", () => {
20
+ cy.get("[udex-input-group]").shadow().find(".udex-input-group__container").should("be.visible");
21
+ });
22
+
23
+ it("renders input group with error message", () => {
24
+ cy.get("[udex-input-group]").shadow().find("[udex-status-message]").should("be.visible");
25
+ cy.get("[udex-input-group]").shadow().find("[udex-status-message]").shadow().find(".udex-status-message").should("have.text", groupText);
26
+ });
27
+
28
+ it("renders input group with custom name", () => {
29
+ cy.get("[udex-input-group]").find("[udex-checkbox]").should("have.attr", "name", groupName);
30
+ });
31
+
32
+ it("renders input group with horizontal orientation", () => {
33
+ cy.get("[udex-input-group]").should("have.attr", "orientation", groupOrientation);
34
+ });
35
+
36
+ it("renders input group with proper items length", () => {
37
+ cy.get("[udex-input-group]").shadow().find(".udex-input-group__item").should("have.length", 2);
38
+ });
39
+
40
+ it("renders input group with defaults", () => {
41
+ cy.mount(simpleGroup)
42
+ cy.get("[udex-input-group]").shadow().find(".udex-input-group__container").should("exist");
43
+ cy.get("[udex-input-group]").shadow().find(".udex-input-group__content").should("exist");
44
+ cy.get("[udex-input-group]").should("have.attr", "orientation", "Vertical");
45
+ cy.get("[udex-input-group]").shadow().find("[udex-status-message]").should("not.exist");
46
+ });
47
+ });
@@ -0,0 +1,41 @@
1
+ import { UDExRatingBar } from "../support/component-imports.js";
2
+
3
+ const ratingBar = <UDExRatingBar id="rating-bar1" percentage={50} rating={4}></UDExRatingBar>
4
+
5
+ const ratingBarWithPercentage = <UDExRatingBar id="rating-bar2" percentage={50} rating={4} show-percentage></UDExRatingBar>
6
+
7
+ const ratingBarWithHighRating = <UDExRatingBar id="rating-bar3" percentage={120} rating={400}></UDExRatingBar>
8
+
9
+ const ratingBarWithNegativeRating = <UDExRatingBar id="rating-bar4" percentage={30} rating={-400}></UDExRatingBar>
10
+
11
+ describe("RatingBar", () => {
12
+ it("Tests basic rating bar rendering specified progress", () => {
13
+ cy.mount(ratingBar);
14
+ cy.get("#rating-bar1").shadow().find(".udex-rating-bar__track").invoke("width").then((trackWidth) => {
15
+ const expectedWidth = Math.round(0.5 * trackWidth);
16
+ const width = cy.get("#rating-bar1").shadow().find(".udex-rating-bar__progress").invoke("width");
17
+ const widthRounded = width.then((w) => Math.round(w as number));
18
+ widthRounded.should("equal", expectedWidth);
19
+ });
20
+ });
21
+
22
+ it("Tests basic rating bar rendering rating", () => {
23
+ cy.mount(ratingBar);
24
+ cy.get("#rating-bar1").shadow().find(".udex-rating-bar__rating").should("have.text", "4");
25
+ });
26
+
27
+ it("Tests basic rating bar rendering breakdown", () => {
28
+ cy.mount(ratingBarWithPercentage);
29
+ cy.get("#rating-bar2").shadow().find(".udex-rating-bar__percentage").should("have.text", "50%");
30
+ });
31
+
32
+ it("Tests rating bar rendering maximum rating when rating exceeds it", () => {
33
+ cy.mount(ratingBarWithNegativeRating);
34
+ cy.get("#rating-bar4").shadow().find(".udex-rating-bar__rating").should("have.text", "0");
35
+ });
36
+
37
+ it("Tests rating bar rendering minimum rating when rating exceeds it", () => {
38
+ cy.mount(ratingBarWithHighRating);
39
+ cy.get("#rating-bar3").shadow().find(".udex-rating-bar__rating").should("have.text", "5");
40
+ });
41
+ });
@@ -80,21 +80,16 @@ describe("Tooltip", () => {
80
80
  </>
81
81
  );
82
82
 
83
- cy.get('#udex-tooltip').as("tooltip")
84
- .invoke('attr', 'open', 'true');
83
+ cy.get('#udex-tooltip').shadow().find(".udex-tooltip__pane").as("tooltip").invoke('attr', 'open', 'true');
85
84
 
86
- cy.get("@tooltip")
87
- .should("have.attr", "open");
85
+ cy.get("@tooltip").should("have.attr", "open");
88
86
 
89
87
  cy.get("body").realClick();
90
88
 
91
- cy.get("@tooltip")
92
- .should("not.have.attr", "open");
89
+ cy.get("@tooltip").should("not.have.attr", "open");
93
90
 
94
- cy.get('#udex-tooltip').as("tooltip")
95
- .invoke('attr', 'open', 'true');
91
+ cy.get('#udex-tooltip').as("tooltip").invoke('attr', 'open', 'true');
96
92
 
97
- cy.get("@tooltip")
98
- .should("have.attr", "open");
93
+ cy.get("@tooltip").should("have.attr", "open");
99
94
  });
100
- });
95
+ });
@@ -57,6 +57,8 @@ import UDExQuote from "../../instrumented/Quote.js";
57
57
  import UDExMastheadProfileMenu from "../../instrumented/MastheadProfileMenu.js";
58
58
  import UDExMessageStrip from "../../instrumented/MessageStrip.js";
59
59
  import UDExHeroBanner from "../../instrumented/HeroBanner.js";
60
+ import UDExCheckbox from "../../instrumented/Checkbox.js";
61
+ import UDExInputGroup from "../../instrumented/InputGroup.js";
60
62
 
61
63
  export {
62
64
  UDExAccordion,
@@ -118,4 +120,6 @@ export {
118
120
  UDExMastheadProfileMenu,
119
121
  UDExMessageStrip,
120
122
  UDExHeroBanner,
123
+ UDExCheckbox,
124
+ UDExInputGroup
121
125
  };
@@ -57,6 +57,8 @@ import UDExQuote from "../../src/Quote.js";
57
57
  import UDExMastheadProfileMenu from "../../src/MastheadProfileMenu.js";
58
58
  import UDExMessageStrip from "../../src/MessageStrip.js";
59
59
  import UDExHeroBanner from "../../src/HeroBanner.js";
60
+ import UDExCheckbox from "../../src/Checkbox.js";
61
+ import UDExInputGroup from "../../src/InputGroup.js";
60
62
 
61
63
  export {
62
64
  UDExAccordion,
@@ -118,4 +120,6 @@ export {
118
120
  UDExMastheadProfileMenu,
119
121
  UDExMessageStrip,
120
122
  UDExHeroBanner,
123
+ UDExCheckbox,
124
+ UDExInputGroup
121
125
  };
package/dist/Accordion.js CHANGED
@@ -13,7 +13,7 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
13
13
  import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
14
14
  import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
15
15
  import "@ui5/webcomponents-icons/dist/feeder-arrow.js";
16
- import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
16
+ import { isEnter, isSpace, isUp, isDown, isEnd, isHome, isTabPrevious, isTabNext, } from "@ui5/webcomponents-base/dist/Keys.js";
17
17
  import AccordionTemplate from "./AccordionTemplate.js";
18
18
  import { COLLAPSE_ALL, EXPAND_ALL } from "./generated/i18n/i18n-defaults.js";
19
19
  // Styles
@@ -79,40 +79,54 @@ let UDExAccordion = UDExAccordion_1 = class UDExAccordion extends UI5Element {
79
79
  }
80
80
  }
81
81
  keydownHandler(e) {
82
- if (e.key !== "Tab") {
83
- e.preventDefault();
84
- }
85
- const len = this._items.length;
82
+ const activeItem = this._items[this._activeItemIndex];
83
+ const previousItem = this._items[this._activeItemIndex - 1];
84
+ const isLastItem = this._activeItemIndex === this._items.length - 1;
85
+ const isFirstItem = this._activeItemIndex === 0;
86
+ const lastItem = this._items[this._items.length - 1];
87
+ const updateTabIndex = (elements, value) => {
88
+ elements.forEach(element => element.setAttribute("tabindex", value));
89
+ };
90
+ const getInteractiveElements = (item) => {
91
+ const selectors = ["button", "a[href]", "input", "select", "textarea", "[tabindex]"];
92
+ return item.querySelectorAll(selectors.join(","));
93
+ };
94
+ const handleTabNavigation = (keyboardEvent) => {
95
+ if (isLastItem && isTabNext(keyboardEvent) && !lastItem.expanded) {
96
+ updateTabIndex(getInteractiveElements(activeItem), "-1");
97
+ return true;
98
+ }
99
+ if ((activeItem?.expanded && isTabNext(e))
100
+ || (previousItem?.expanded && isTabPrevious(e))
101
+ || (isFirstItem && isTabPrevious(e))) {
102
+ return true;
103
+ }
104
+ if (isEnter(e) && isLastItem) {
105
+ updateTabIndex(getInteractiveElements(activeItem), "0");
106
+ }
107
+ return false;
108
+ };
86
109
  const focusOnItem = (itemIndex) => {
87
110
  const item = this._items[itemIndex];
88
111
  this._activeItemIndex = itemIndex;
89
112
  item?.shadowRoot?.querySelector(".udex-accordion-item__header")?.focus();
90
113
  };
91
- switch (e.key) {
92
- case "Home":
93
- focusOnItem(0);
94
- break;
95
- case "End":
96
- focusOnItem(len - 1);
97
- break;
98
- case "ArrowUp":
99
- if (this._activeItemIndex > 0) {
100
- focusOnItem(this._activeItemIndex - 1);
101
- }
102
- else if (this._activeItemIndex === 0) {
103
- focusOnItem(len - 1);
104
- }
105
- break;
106
- case "ArrowDown":
107
- if (this._activeItemIndex < len - 1) {
108
- focusOnItem(this._activeItemIndex + 1);
109
- }
110
- else if (this._activeItemIndex === len - 1) {
111
- focusOnItem(0);
112
- }
113
- break;
114
- default:
115
- break;
114
+ if (handleTabNavigation(e)) {
115
+ return;
116
+ }
117
+ e.preventDefault();
118
+ const len = this._items.length;
119
+ if (isHome(e)) {
120
+ focusOnItem(0);
121
+ }
122
+ if (isEnd(e)) {
123
+ focusOnItem(len - 1);
124
+ }
125
+ if (isTabPrevious(e) || isUp(e)) {
126
+ focusOnItem(this._activeItemIndex > 0 ? this._activeItemIndex - 1 : len - 1);
127
+ }
128
+ if (isTabNext(e) || isDown(e)) {
129
+ focusOnItem(this._activeItemIndex < len - 1 ? this._activeItemIndex + 1 : 0);
116
130
  }
117
131
  }
118
132
  itemFocusHandler(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../src/Accordion.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AACpE,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,IAAI,MAAM,iDAAiD,CAAC;AACnE,OAAO,KAAK,MAAM,yDAAyD,CAAC;AAC5E,OAAO,IAAI,MAAM,iDAAiD,CAAC;AAEnE,OAAO,WAAW,MAAM,iDAAiD,CAAC;AAC1E,OAAO,+CAA+C,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE7E,SAAS;AACT,OAAO,YAAY,MAAM,qCAAqC,CAAC;AAE/D,MAAM,CAAN,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,uCAAS,CAAA;IACT,uCAAS,CAAA;IACT,uCAAS,CAAA;IACT,uCAAS,CAAA;IACT,uCAAS,CAAA;IACT,uCAAS,CAAA;AACX,CAAC,EAPW,0BAA0B,KAA1B,0BAA0B,QAOrC;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AAeH,IAAM,aAAa,qBAAnB,MAAM,aAAc,SAAQ,UAAU;IA8DpC;QACE,KAAK,EAAE,CAAC;QAxBV;;;;;WAKG;QAED,kBAAa,GAA+B,0BAA0B,CAAC,EAAE,CAAC;QAkB1E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAED,gBAAgB,CAAC,CAAQ;QACvB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,eAAe,CAAC,MAAe;QAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB,CAAC,CAAgB;QAClC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,cAAc,CAAC,CAAgB;QAC7B,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACpB,CAAC,CAAC,cAAc,EAAE,CAAC;QACrB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC/B,MAAM,WAAW,GAAG,CAAC,SAAiB,EAAE,EAAE;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YACjC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,8BAA8B,CAAiB,EAAE,KAAK,EAAE,CAAC;QAC5F,CAAC,CAAC;QAEF,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,WAAW,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM;YACR,KAAK,KAAK;gBACR,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBAC9B,WAAW,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBACzC,CAAC;qBAAM,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;oBACvC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACvB,CAAC;gBACD,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;oBACpC,WAAW,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBACzC,CAAC;qBAAM,IAAI,IAAI,CAAC,gBAAgB,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;oBAC7C,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC;gBACD,MAAM;YACR;gBACE,MAAM;QACR,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,CAAc;QAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,MAA2B,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,uBAAuB;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,YAAY;YACtB,CAAC,CAAC,eAAa,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC;YAChD,CAAC,CAAC,eAAa,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC1B,OAAO;gBACL,IAAI,EAAE,EAAE;aACT,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA7IG;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;mDACtB;AASvB;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;uDACC;AAQ3B;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDACL;AASpB;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+CACP;AASlB;IADD,QAAQ,EAAE;oDACiE;AAS1E;IADD,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;6CAChC;AAG7B;IADN,IAAI,CAAC,yBAAyB,CAAC;uCACF;AA1D1B,aAAa;IAdlB,aAAa,CAAC;QACb,GAAG,EAAE,gBAAgB;QACrB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IAEF;;;;OAIG;;IACF,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;GAEnC,aAAa,CAwJlB;AAED,aAAa,CAAC,MAAM,EAAE,CAAC;AAEvB,eAAe,aAAa,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/renderer/JsxRenderer.js\";\nimport \"@ui5/webcomponents-icons/dist/feeder-arrow.js\";\nimport { isEnter, isSpace } from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport AccordionTemplate from \"./AccordionTemplate.js\";\nimport type UDExAccordionItem from \"./AccordionItem.js\";\nimport { COLLAPSE_ALL, EXPAND_ALL } from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport AccordionCss from \"./generated/themes/Accordion.css.js\";\n\nexport enum UDExAccordionHeadlineLevel {\n H1 = \"H1\",\n H2 = \"H2\",\n H3 = \"H3\",\n H4 = \"H4\",\n H5 = \"H5\",\n H6 = \"H6\"\n}\n\ntype UDExAccordionToggleItemsEventDetail = {\n isOpen: boolean\n}\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-accordion</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/Accordion.js\";</code>\n *\n * @constructor\n * @author SAP SE\n * @extends UI5Element\n * @tagname udex-accordion\n * @public\n */\n@customElement({\n tag: \"udex-accordion\",\n renderer: jsxRenderer,\n styles: AccordionCss,\n template: AccordionTemplate,\n})\n\n/**\n * Triggered when the user clicks on the Expand/Collapse All button..\n *\n * @public\n */\n@event(\"toggle-items\", { bubbles: true })\n\nclass UDExAccordion extends UI5Element {\n eventDetails!: {\n \"toggle-items\": UDExAccordionToggleItemsEventDetail,\n };\n\n /**\n * Used internally to store expand/collapse button state.\n *\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _allExpanded!: boolean;\n\n /**\n * Defines if expandAll button should be displayed.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n hideExpandButton!: boolean;\n\n /**\n * Defines direction of the accordion component.\n *\n * @private\n */\n @property({ type: String })\n _direction?: string;\n\n /**\n * Defines the headline text of the accordion component.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n headline!: string;\n\n /**\n * Defines the semantic level of the headline.\n *\n * @default UDExAccordionHeadlineLevel.h3\n * @public\n */\n @property()\n headlineLevel: UDExAccordionHeadlineLevel = UDExAccordionHeadlineLevel.H3;\n\n /**\n * Slot for accordion items.\n *\n * @slot\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true, individualSlots: true })\n _items!: Array<UDExAccordionItem>;\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n _activeItemIndex: number;\n\n constructor() {\n super();\n this._allExpanded = false;\n this._activeItemIndex = -1;\n }\n\n onEnterDOM() {\n this.updateAllExpandedStatus();\n }\n\n toggleAllHandler(e: Event) {\n e.preventDefault();\n this._allExpanded = !this._allExpanded;\n this.toggleOpenItems(this._allExpanded);\n this.fireDecoratorEvent(\"toggle-items\", { isOpen: this._allExpanded });\n }\n\n toggleOpenItems(isOpen: boolean) {\n this._items.forEach(item => {\n item.expanded = isOpen;\n });\n }\n\n toggleKeyAllHandler(e: KeyboardEvent) {\n if (isEnter(e) || isSpace(e)) {\n this.toggleAllHandler(e);\n }\n }\n\n keydownHandler(e: KeyboardEvent) {\n if (e.key !== \"Tab\") {\n e.preventDefault();\n }\n const len = this._items.length;\n const focusOnItem = (itemIndex: number) => {\n const item = this._items[itemIndex];\n this._activeItemIndex = itemIndex;\n (item?.shadowRoot?.querySelector(\".udex-accordion-item__header\") as HTMLElement)?.focus();\n };\n\n switch (e.key) {\n case \"Home\":\n focusOnItem(0);\n break;\n case \"End\":\n focusOnItem(len - 1);\n break;\n case \"ArrowUp\":\n if (this._activeItemIndex > 0) {\n focusOnItem(this._activeItemIndex - 1);\n } else if (this._activeItemIndex === 0) {\n focusOnItem(len - 1);\n }\n break;\n case \"ArrowDown\":\n if (this._activeItemIndex < len - 1) {\n focusOnItem(this._activeItemIndex + 1);\n } else if (this._activeItemIndex === len - 1) {\n focusOnItem(0);\n }\n break;\n default:\n break;\n }\n }\n\n itemFocusHandler(e: CustomEvent) {\n const target = e.target as UDExAccordionItem;\n if (target) {\n this._activeItemIndex = this._items?.indexOf(target) ?? -1;\n }\n }\n\n updateAllExpandedStatus() {\n this._allExpanded = this._items.every(item => item.expanded);\n }\n\n get toggleAllText(): string {\n return this._allExpanded\n ? UDExAccordion.i18nBundle.getText(COLLAPSE_ALL)\n : UDExAccordion.i18nBundle.getText(EXPAND_ALL);\n }\n\n get items(): {item: UDExAccordionItem}[] {\n return this._items.map(el => {\n return {\n item: el,\n };\n });\n }\n}\n\nUDExAccordion.define();\n\nexport default UDExAccordion;\nexport type { UDExAccordionToggleItemsEventDetail };\n"]}
1
+ {"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../src/Accordion.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/renderer/JsxRenderer.js\";\nimport \"@ui5/webcomponents-icons/dist/feeder-arrow.js\";\nimport {\n isEnter, isSpace, isUp, isDown, isEnd, isHome, isTabPrevious, isTabNext,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport AccordionTemplate from \"./AccordionTemplate.js\";\nimport type UDExAccordionItem from \"./AccordionItem.js\";\nimport { COLLAPSE_ALL, EXPAND_ALL } from \"./generated/i18n/i18n-defaults.js\";\n\n// Styles\nimport AccordionCss from \"./generated/themes/Accordion.css.js\";\n\nexport enum UDExAccordionHeadlineLevel {\n H1 = \"H1\",\n H2 = \"H2\",\n H3 = \"H3\",\n H4 = \"H4\",\n H5 = \"H5\",\n H6 = \"H6\"\n}\n\ntype UDExAccordionToggleItemsEventDetail = {\n isOpen: boolean\n}\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-accordion</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/Accordion.js\";</code>\n *\n * @constructor\n * @author SAP SE\n * @extends UI5Element\n * @tagname udex-accordion\n * @public\n */\n@customElement({\n tag: \"udex-accordion\",\n renderer: jsxRenderer,\n styles: AccordionCss,\n template: AccordionTemplate,\n})\n\n/**\n * Triggered when the user clicks on the Expand/Collapse All button..\n *\n * @public\n */\n@event(\"toggle-items\", { bubbles: true })\n\nclass UDExAccordion extends UI5Element {\n eventDetails!: {\n \"toggle-items\": UDExAccordionToggleItemsEventDetail,\n };\n\n /**\n * Used internally to store expand/collapse button state.\n *\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _allExpanded!: boolean;\n\n /**\n * Defines if expandAll button should be displayed.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n hideExpandButton!: boolean;\n\n /**\n * Defines direction of the accordion component.\n *\n * @private\n */\n @property({ type: String })\n _direction?: string;\n\n /**\n * Defines the headline text of the accordion component.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n headline!: string;\n\n /**\n * Defines the semantic level of the headline.\n *\n * @default UDExAccordionHeadlineLevel.h3\n * @public\n */\n @property()\n headlineLevel: UDExAccordionHeadlineLevel = UDExAccordionHeadlineLevel.H3;\n\n /**\n * Slot for accordion items.\n *\n * @slot\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true, individualSlots: true })\n _items!: Array<UDExAccordionItem>;\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n _activeItemIndex: number;\n\n constructor() {\n super();\n this._allExpanded = false;\n this._activeItemIndex = -1;\n }\n\n onEnterDOM() {\n this.updateAllExpandedStatus();\n }\n\n toggleAllHandler(e: Event) {\n e.preventDefault();\n this._allExpanded = !this._allExpanded;\n this.toggleOpenItems(this._allExpanded);\n this.fireDecoratorEvent(\"toggle-items\", { isOpen: this._allExpanded });\n }\n\n toggleOpenItems(isOpen: boolean) {\n this._items.forEach(item => {\n item.expanded = isOpen;\n });\n }\n\n toggleKeyAllHandler(e: KeyboardEvent) {\n if (isEnter(e) || isSpace(e)) {\n this.toggleAllHandler(e);\n }\n }\n\n keydownHandler(e: KeyboardEvent) {\n const activeItem = this._items[this._activeItemIndex];\n const previousItem = this._items[this._activeItemIndex - 1];\n const isLastItem = this._activeItemIndex === this._items.length - 1;\n const isFirstItem = this._activeItemIndex === 0;\n const lastItem = this._items[this._items.length - 1];\n\n const updateTabIndex = (elements: NodeListOf<Element>, value: string) => {\n elements.forEach(element => element.setAttribute(\"tabindex\", value));\n };\n\n const getInteractiveElements = (item: HTMLElement) => {\n const selectors = [\"button\", \"a[href]\", \"input\", \"select\", \"textarea\", \"[tabindex]\"];\n return item.querySelectorAll(selectors.join(\",\"));\n };\n\n const handleTabNavigation = (keyboardEvent: KeyboardEvent) => {\n if (isLastItem && isTabNext(keyboardEvent) && !lastItem.expanded) {\n updateTabIndex(getInteractiveElements(activeItem), \"-1\");\n return true;\n }\n\n if ((activeItem?.expanded && isTabNext(e))\n || (previousItem?.expanded && isTabPrevious(e))\n || (isFirstItem && isTabPrevious(e))) {\n return true;\n }\n\n if (isEnter(e) && isLastItem) {\n updateTabIndex(getInteractiveElements(activeItem), \"0\");\n }\n\n return false;\n };\n\n const focusOnItem = (itemIndex: number) => {\n const item = this._items[itemIndex];\n this._activeItemIndex = itemIndex;\n (item?.shadowRoot?.querySelector(\".udex-accordion-item__header\") as HTMLElement)?.focus();\n };\n\n if (handleTabNavigation(e)) {\n return;\n }\n\n e.preventDefault();\n const len = this._items.length;\n\n if (isHome(e)) {\n focusOnItem(0);\n }\n\n if (isEnd(e)) {\n focusOnItem(len - 1);\n }\n\n if (isTabPrevious(e) || isUp(e)) {\n focusOnItem(this._activeItemIndex > 0 ? this._activeItemIndex - 1 : len - 1);\n }\n\n if (isTabNext(e) || isDown(e)) {\n focusOnItem(this._activeItemIndex < len - 1 ? this._activeItemIndex + 1 : 0);\n }\n }\n\n itemFocusHandler(e: CustomEvent) {\n const target = e.target as UDExAccordionItem;\n if (target) {\n this._activeItemIndex = this._items?.indexOf(target) ?? -1;\n }\n }\n\n updateAllExpandedStatus() {\n this._allExpanded = this._items.every(item => item.expanded);\n }\n\n get toggleAllText(): string {\n return this._allExpanded\n ? UDExAccordion.i18nBundle.getText(COLLAPSE_ALL)\n : UDExAccordion.i18nBundle.getText(EXPAND_ALL);\n }\n\n get items(): {item: UDExAccordionItem}[] {\n return this._items.map(el => {\n return {\n item: el,\n };\n });\n }\n}\n\nUDExAccordion.define();\n\nexport default UDExAccordion;\nexport type { UDExAccordionToggleItemsEventDetail };\n"]}
@@ -62,6 +62,8 @@ declare class UDExBreadcrumbs extends UI5Element {
62
62
  _responsivePopover?: UDExDropdown;
63
63
  _itemNavigation?: ItemNavigation;
64
64
  _shouldFocusFirstVisibleItem: boolean;
65
+ _rootClass: string;
66
+ constructor();
65
67
  onBeforeRendering(): void;
66
68
  onAfterRendering(): void;
67
69
  _preprocessItems(): void;
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var UDExBreadcrumbs_1;
8
8
  import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
9
9
  import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
10
- import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
10
+ import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
11
11
  import property from "@ui5/webcomponents-base/dist/decorators/property.js";
12
12
  import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
13
13
  import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
@@ -19,7 +19,7 @@ import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
19
19
  import UI5BreadcrumbsCss from "@ui5/webcomponents/dist/generated/themes/Breadcrumbs.css.js";
20
20
  import "@ui5/webcomponents-icons/dist/slim-arrow-down.js";
21
21
  import "@ui5/webcomponents-icons/dist/home.js";
22
- import BreadcrumbsTemplate from "./generated/templates/BreadcrumbsTemplate.lit.js";
22
+ import BreadcrumbsTemplate from "./BreadcrumbsTemplate.js";
23
23
  import UDExBreadcrumbsItem from "./BreadcrumbsItem.js";
24
24
  import UDExDropdown from "./Dropdown.js";
25
25
  import UDExLink from "./Link.js";
@@ -27,7 +27,6 @@ import { BREADCRUMBS_ARIA_LABEL, BREADCRUMBS_OVERFLOW_ARIA_LABEL } from "./gener
27
27
  // Styles
28
28
  import BreadcrumbsCss from "./generated/themes/Breadcrumbs.css.js";
29
29
  import BreadcrumbsPopoverCss from "./generated/themes/BreadcrumbsPopover.css.js";
30
- const triggerActiveClass = "udex-breadcrumbs__trigger--opened";
31
30
  /**
32
31
  * @class
33
32
  *
@@ -47,7 +46,7 @@ const triggerActiveClass = "udex-breadcrumbs__trigger--opened";
47
46
  */
48
47
  let UDExBreadcrumbs = UDExBreadcrumbs_1 = class UDExBreadcrumbs extends UI5Element {
49
48
  constructor() {
50
- super(...arguments);
49
+ super();
51
50
  /**
52
51
  * Defines how many breadcrumb items should be visible
53
52
  *
@@ -55,6 +54,7 @@ let UDExBreadcrumbs = UDExBreadcrumbs_1 = class UDExBreadcrumbs extends UI5Eleme
55
54
  * @public
56
55
  */
57
56
  this.showItems = 3;
57
+ this._rootClass = "udex-breadcrumbs";
58
58
  }
59
59
  onBeforeRendering() {
60
60
  this._preprocessItems();
@@ -139,7 +139,7 @@ let UDExBreadcrumbs = UDExBreadcrumbs_1 = class UDExBreadcrumbs extends UI5Eleme
139
139
  this._itemNavigation?.setCurrentItem(currentItem);
140
140
  }
141
141
  _handleKeydown(e) {
142
- const itemIndex = e.target.getAttribute("index");
142
+ const itemIndex = e.target.getAttribute("data-index");
143
143
  const isLastItem = itemIndex === (this.items.length - 2).toString();
144
144
  const isFirstItem = itemIndex === "0";
145
145
  if (isTabNext(e) && isLastItem) {
@@ -199,7 +199,8 @@ let UDExBreadcrumbs = UDExBreadcrumbs_1 = class UDExBreadcrumbs extends UI5Eleme
199
199
  return this._getItems().filter(i => this._isItemVisible(i));
200
200
  }
201
201
  get _triggerClass() {
202
- return this._dropdownOpened ? triggerActiveClass : "";
202
+ const rootClass = "udex-breadcrumbs";
203
+ return this._dropdownOpened ? `${rootClass} ${rootClass}__trigger--opened` : rootClass;
203
204
  }
204
205
  get _accessibleNameText() {
205
206
  return UDExBreadcrumbs_1.i18nBundle.getText(BREADCRUMBS_ARIA_LABEL);
@@ -223,7 +224,7 @@ __decorate([
223
224
  UDExBreadcrumbs = UDExBreadcrumbs_1 = __decorate([
224
225
  customElement({
225
226
  tag: "udex-breadcrumbs",
226
- renderer: litRender,
227
+ renderer: jsxRenderer,
227
228
  styles: [UI5BreadcrumbsCss, BreadcrumbsCss, BreadcrumbsPopoverCss],
228
229
  template: BreadcrumbsTemplate,
229
230
  dependencies: [UDExBreadcrumbsItem, UDExLink, UDExDropdown, UI5Icon],