@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.
- package/cypress/specs/Breadcrumbs.cy.tsx +77 -0
- package/cypress/specs/FilterMenu.cy.tsx +19 -43
- package/cypress/specs/HeroBanner.cy.tsx +6 -6
- package/cypress/specs/InputGroup.cy.tsx +47 -0
- package/cypress/specs/RatingBar.cy.tsx +41 -0
- package/cypress/specs/Tooltip.cy.tsx +6 -11
- package/cypress/support/component-imports.instrumented.ts +4 -0
- package/cypress/support/component-imports.src.ts +4 -0
- package/dist/Accordion.js +44 -30
- package/dist/Accordion.js.map +1 -1
- package/dist/Breadcrumbs.d.ts +2 -0
- package/dist/Breadcrumbs.js +8 -7
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/BreadcrumbsItem.d.ts +1 -2
- package/dist/BreadcrumbsItem.js.map +1 -1
- package/dist/BreadcrumbsPopoverTemplate.d.ts +2 -0
- package/dist/BreadcrumbsPopoverTemplate.js +8 -0
- package/dist/BreadcrumbsPopoverTemplate.js.map +1 -0
- package/dist/BreadcrumbsTemplate.d.ts +2 -0
- package/dist/BreadcrumbsTemplate.js +10 -0
- package/dist/BreadcrumbsTemplate.js.map +1 -0
- package/dist/FilterMenu.js +1 -2
- package/dist/FilterMenu.js.map +1 -1
- package/dist/FilterMenuSelectAll.d.ts +0 -1
- package/dist/FilterMenuSelectAll.js +0 -3
- package/dist/FilterMenuSelectAll.js.map +1 -1
- package/dist/Footer.d.ts +17 -21
- package/dist/Footer.js +5 -11
- package/dist/Footer.js.map +1 -1
- package/dist/FooterTemplate.d.ts +2 -0
- package/dist/FooterTemplate.js +27 -0
- package/dist/FooterTemplate.js.map +1 -0
- package/dist/HeroBanner.js +4 -4
- package/dist/HeroBanner.js.map +1 -1
- package/dist/HeroBannerTemplate.d.ts +2 -0
- package/dist/HeroBannerTemplate.js +10 -0
- package/dist/HeroBannerTemplate.js.map +1 -0
- package/dist/InputGroup.d.ts +0 -1
- package/dist/InputGroup.js +3 -6
- package/dist/InputGroup.js.map +1 -1
- package/dist/InputGroupTemplate.d.ts +2 -0
- package/dist/InputGroupTemplate.js +7 -0
- package/dist/InputGroupTemplate.js.map +1 -0
- package/dist/MastheadMobileMenu.js +1 -1
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/RatingBar.js +3 -3
- package/dist/RatingBar.js.map +1 -1
- package/dist/RatingBarTemplate.d.ts +2 -0
- package/dist/RatingBarTemplate.js +8 -0
- package/dist/RatingBarTemplate.js.map +1 -0
- package/dist/Search.js +5 -4
- package/dist/Search.js.map +1 -1
- package/dist/SearchableListBase.d.ts +2 -1
- package/dist/SearchableListBase.js +13 -23
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SelectBox.js +1 -2
- package/dist/SelectBox.js.map +1 -1
- package/dist/StatusBadge.js +3 -3
- package/dist/StatusBadge.js.map +1 -1
- package/dist/StatusBadgeTemplate.d.ts +2 -0
- package/dist/StatusBadgeTemplate.js +7 -0
- package/dist/StatusBadgeTemplate.js.map +1 -0
- package/dist/StatusMessage.js +3 -3
- package/dist/StatusMessage.js.map +1 -1
- package/dist/StatusMessageTemplate.d.ts +2 -0
- package/dist/StatusMessageTemplate.js +8 -0
- package/dist/StatusMessageTemplate.js.map +1 -0
- package/dist/Switch.d.ts +1 -4
- package/dist/Switch.js +4 -8
- package/dist/Switch.js.map +1 -1
- package/dist/SwitchTemplate.d.ts +2 -0
- package/dist/SwitchTemplate.js +12 -0
- package/dist/SwitchTemplate.js.map +1 -0
- package/dist/TagGroup.d.ts +2 -0
- package/dist/TagGroup.js +10 -3
- package/dist/TagGroup.js.map +1 -1
- package/dist/TruncatedText.d.ts +0 -1
- package/dist/TruncatedText.js +5 -6
- package/dist/TruncatedText.js.map +1 -1
- package/dist/TruncatedTextTemplate.d.ts +2 -0
- package/dist/TruncatedTextTemplate.js +9 -0
- package/dist/TruncatedTextTemplate.js.map +1 -0
- package/dist/assets/{InputSuggestions-AxcsfuTc.js → InputSuggestions-lpqKgn1j.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-CaS49yZt.js → ListItemStandardExpandableTextTemplate-BPs3CyVq.js} +1 -1
- package/dist/assets/{bundle.esm-DzkSPQ0p.js → bundle.esm-C3RAGF4b.js} +211 -211
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/MediaPlayer.css +1 -1
- package/dist/css/themes/PhoneNumberField.css +1 -1
- package/dist/css/themes/RatingBar.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/TextArea.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/custom-elements-internal.json +148 -133
- package/dist/custom-elements.json +133 -118
- package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
- package/dist/generated/themes/AccordionItem.css.js +1 -1
- package/dist/generated/themes/AccordionItem.css.js.map +1 -1
- package/dist/generated/themes/CountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/CountrySelector.css.js +1 -1
- package/dist/generated/themes/CountrySelector.css.js.map +1 -1
- package/dist/generated/themes/Link.css.d.ts +1 -1
- package/dist/generated/themes/Link.css.js +1 -1
- package/dist/generated/themes/Link.css.js.map +1 -1
- package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
- package/dist/generated/themes/MediaPlayer.css.js +1 -1
- package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
- package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
- package/dist/generated/themes/RatingBar.css.d.ts +1 -1
- package/dist/generated/themes/RatingBar.css.js +1 -1
- package/dist/generated/themes/RatingBar.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Search.css.d.ts +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SelectBox.css.d.ts +1 -1
- package/dist/generated/themes/SelectBox.css.js +1 -1
- package/dist/generated/themes/SelectBox.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.d.ts +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/TextArea.css.d.ts +1 -1
- package/dist/generated/themes/TextArea.css.js +1 -1
- package/dist/generated/themes/TextArea.css.js.map +1 -1
- package/dist/generated/themes/TextField.css.d.ts +1 -1
- package/dist/generated/themes/TextField.css.js +1 -1
- package/dist/generated/themes/TextField.css.js.map +1 -1
- package/dist/utils/sanitizeString.d.ts +2 -0
- package/dist/utils/sanitizeString.js +12 -0
- package/dist/utils/sanitizeString.js.map +1 -0
- package/dist/web-types.json +2 -2
- package/package.json +2 -2
- package/src/Accordion.ts +56 -26
- package/src/Breadcrumbs.ts +12 -7
- package/src/BreadcrumbsItem.ts +2 -2
- package/src/BreadcrumbsPopoverTemplate.tsx +60 -0
- package/src/BreadcrumbsTemplate.tsx +53 -0
- package/src/FilterMenu.ts +1 -2
- package/src/FilterMenuSelectAll.ts +0 -4
- package/src/Footer.ts +28 -35
- package/src/FooterTemplate.tsx +410 -0
- package/src/HeroBanner.ts +4 -4
- package/src/HeroBannerTemplate.tsx +101 -0
- package/src/InputGroup.ts +3 -7
- package/src/InputGroupTemplate.tsx +31 -0
- package/src/MastheadMobileMenu.ts +1 -1
- package/src/RatingBar.ts +3 -3
- package/src/RatingBarTemplate.tsx +38 -0
- package/src/Search.ts +5 -4
- package/src/SearchableListBase.ts +15 -26
- package/src/SelectBox.ts +1 -2
- package/src/StatusBadge.ts +5 -4
- package/src/StatusBadgeTemplate.tsx +18 -0
- package/src/StatusMessage.ts +3 -3
- package/src/StatusMessageTemplate.tsx +20 -0
- package/src/Switch.ts +5 -11
- package/src/SwitchTemplate.tsx +50 -0
- package/src/TagGroup.ts +13 -3
- package/src/TruncatedText.ts +8 -14
- package/src/TruncatedTextTemplate.tsx +21 -0
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/Link.css.ts +1 -1
- package/src/generated/themes/MediaPlayer.css.ts +1 -1
- package/src/generated/themes/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/RatingBar.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SelectBox.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/TextArea.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/themes/AccordionItem.css +0 -1
- package/src/themes/CountrySelector.css +1 -7
- package/src/themes/Link.css +11 -4
- package/src/themes/MediaPlayer.css +133 -186
- package/src/themes/PhoneNumberField.css +25 -7
- package/src/themes/RatingBar.css +2 -2
- package/src/themes/Search.css +7 -3
- package/src/themes/SelectBox.css +4 -0
- package/src/themes/TextArea.css +31 -7
- package/src/themes/TextField.css +15 -5
- package/src/utils/sanitizeString.ts +13 -0
- package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js +0 -12
- package/dist/generated/templates/BreadcrumbsPopoverTemplate.lit.js.map +0 -1
- package/dist/generated/templates/BreadcrumbsTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/BreadcrumbsTemplate.lit.js +0 -14
- package/dist/generated/templates/BreadcrumbsTemplate.lit.js.map +0 -1
- package/dist/generated/templates/FooterTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/FooterTemplate.lit.js +0 -39
- package/dist/generated/templates/FooterTemplate.lit.js.map +0 -1
- package/dist/generated/templates/InputGroupTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/InputGroupTemplate.lit.js +0 -9
- package/dist/generated/templates/InputGroupTemplate.lit.js.map +0 -1
- package/dist/generated/templates/RatingBarTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/RatingBarTemplate.lit.js +0 -8
- package/dist/generated/templates/RatingBarTemplate.lit.js.map +0 -1
- package/dist/generated/templates/StatusBadgeTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/StatusBadgeTemplate.lit.js +0 -7
- package/dist/generated/templates/StatusBadgeTemplate.lit.js.map +0 -1
- package/dist/generated/templates/StatusMessageTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/StatusMessageTemplate.lit.js +0 -8
- package/dist/generated/templates/StatusMessageTemplate.lit.js.map +0 -1
- package/dist/generated/templates/SwitchTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/SwitchTemplate.lit.js +0 -14
- package/dist/generated/templates/SwitchTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TruncatedTextTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TruncatedTextTemplate.lit.js +0 -7
- package/dist/generated/templates/TruncatedTextTemplate.lit.js.map +0 -1
- package/src/Breadcrumbs.hbs +0 -38
- package/src/BreadcrumbsPopover.hbs +0 -48
- package/src/Footer.hbs +0 -296
- package/src/InputGroup.hbs +0 -20
- package/src/RatingBar.hbs +0 -11
- package/src/StatusBadge.hbs +0 -9
- package/src/StatusMessage.hbs +0 -6
- package/src/Switch.hbs +0 -35
- package/src/TruncatedText.hbs +0 -11
- package/src/generated/templates/BreadcrumbsPopoverTemplate.lit.ts +0 -16
- package/src/generated/templates/BreadcrumbsTemplate.lit.ts +0 -18
- package/src/generated/templates/FooterTemplate.lit.ts +0 -43
- package/src/generated/templates/InputGroupTemplate.lit.ts +0 -13
- package/src/generated/templates/RatingBarTemplate.lit.ts +0 -12
- package/src/generated/templates/StatusBadgeTemplate.lit.ts +0 -11
- package/src/generated/templates/StatusMessageTemplate.lit.ts +0 -12
- package/src/generated/templates/SwitchTemplate.lit.ts +0 -18
- 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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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(
|
|
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 = "
|
|
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", "
|
|
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
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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) {
|
package/dist/Accordion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 { 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"]}
|
package/dist/Breadcrumbs.d.ts
CHANGED
|
@@ -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;
|
package/dist/Breadcrumbs.js
CHANGED
|
@@ -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
|
|
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 "./
|
|
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(
|
|
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
|
-
|
|
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:
|
|
227
|
+
renderer: jsxRenderer,
|
|
227
228
|
styles: [UI5BreadcrumbsCss, BreadcrumbsCss, BreadcrumbsPopoverCss],
|
|
228
229
|
template: BreadcrumbsTemplate,
|
|
229
230
|
dependencies: [UDExBreadcrumbsItem, UDExLink, UDExDropdown, UI5Icon],
|