@sapudex/web-components 2.34.0 → 2.36.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 +4 -5
- package/cypress/specs/ListItem.cy.tsx +25 -21
- package/cypress/specs/MastheadMenu.cy.tsx +81 -0
- package/cypress/specs/MastheadShell.cy.tsx +79 -0
- package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +14 -0
- package/cypress/specs/SelectBox.cy.tsx +166 -1
- package/cypress/specs/Wizard.cy.tsx +6 -0
- package/cypress/support/component-imports.instrumented.ts +2 -0
- package/cypress/support/component-imports.src.ts +2 -0
- package/dist/BreadcrumbsPopoverTemplate.js +1 -1
- package/dist/BreadcrumbsPopoverTemplate.js.map +1 -1
- package/dist/BreadcrumbsTemplate.js +1 -1
- package/dist/BreadcrumbsTemplate.js.map +1 -1
- package/dist/CountrySelector.d.ts +1 -0
- package/dist/CountrySelector.js +3 -0
- package/dist/CountrySelector.js.map +1 -1
- package/dist/FilterMenu.d.ts +1 -0
- package/dist/FilterMenu.js +3 -0
- package/dist/FilterMenu.js.map +1 -1
- package/dist/ListItemBase.d.ts +2 -0
- package/dist/ListItemBase.js +6 -0
- package/dist/ListItemBase.js.map +1 -1
- package/dist/MastheadItem.d.ts +10 -0
- package/dist/MastheadItem.js +35 -3
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadMenu.d.ts +3 -0
- package/dist/MastheadMenu.js +16 -6
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MediaPlayer.d.ts +1 -1
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +5 -1
- package/dist/SecondaryNavigationItem.js +35 -5
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SelectBase.js +13 -4
- package/dist/SelectBase.js.map +1 -1
- package/dist/SelectBox.d.ts +1 -0
- package/dist/SelectBox.js +3 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/Wizard.js +2 -2
- package/dist/Wizard.js.map +1 -1
- package/dist/assets/{InputSuggestions-Bz7HZXUc.js → InputSuggestions-BIR_sdOv.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-CjE7hAvu.js → ListItemStandardExpandableTextTemplate-5xOuY0en.js} +1 -1
- package/dist/assets/{bundle.esm-mAR7ytdB.js → bundle.esm-C8GwJvJr.js} +633 -219
- package/dist/css/themes/Breadcrumbs.css +1 -1
- package/dist/css/themes/BreadcrumbsPopover.css +1 -1
- package/dist/css/themes/FilterMenu.css +1 -1
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/css/themes/MastheadCountrySelector.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadMenu.css +1 -1
- package/dist/css/themes/MastheadMenuItem.css +1 -1
- package/dist/css/themes/MastheadMobileMenu.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/SearchableList.css +1 -1
- package/dist/css/themes/SecondaryNavigation.css +1 -1
- package/dist/css/themes/SecondaryNavigationItem.css +1 -1
- package/dist/css/themes/SelectBase.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/custom-elements-internal.json +166 -166
- package/dist/custom-elements.json +151 -151
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +16 -12
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +40 -36
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadItemTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js +3 -3
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
- package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
- package/dist/generated/themes/FilterMenu.css.js +1 -1
- package/dist/generated/themes/FilterMenu.css.js.map +1 -1
- package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
- package/dist/generated/themes/ListGroupHeader.css.js +1 -1
- package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
- package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadItem.css.js +1 -1
- package/dist/generated/themes/MastheadItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMenu.css.js +1 -1
- package/dist/generated/themes/MastheadMenu.css.js.map +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.js +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadMobileMenu.css.js.map +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadProfileMenu.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/SearchableList.css.d.ts +1 -1
- package/dist/generated/themes/SearchableList.css.js +1 -1
- package/dist/generated/themes/SearchableList.css.js.map +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.d.ts +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.js.map +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
- package/dist/generated/themes/SelectBase.css.d.ts +1 -1
- package/dist/generated/themes/SelectBase.css.js +1 -1
- package/dist/generated/themes/SelectBase.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/types/List.d.ts +2 -0
- package/dist/types/List.js +2 -0
- package/dist/types/List.js.map +1 -1
- package/dist/vscode.html-custom-data.json +72 -12
- package/dist/web-types.json +71 -21
- package/package.json +1 -1
- package/src/BreadcrumbsPopoverTemplate.tsx +1 -1
- package/src/BreadcrumbsTemplate.tsx +1 -1
- package/src/CountrySelector.ts +3 -0
- package/src/FilterMenu.ts +3 -0
- package/src/ListGroupHeader.hbs +11 -7
- package/src/ListItem.hbs +2 -0
- package/src/ListItemBase.ts +8 -0
- package/src/MastheadItem.hbs +2 -0
- package/src/MastheadItem.ts +37 -3
- package/src/MastheadMenu.ts +19 -6
- package/src/MastheadShell.hbs +3 -0
- package/src/MediaPlayer.ts +1 -1
- package/src/SearchableListBase.hbs +9 -1
- package/src/SecondaryNavigationItem.ts +37 -5
- package/src/SelectBase.ts +14 -4
- package/src/SelectBox.ts +3 -0
- package/src/Wizard.ts +2 -2
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +16 -12
- package/src/generated/templates/ListItemTemplate.lit.ts +40 -36
- package/src/generated/templates/MastheadItemTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadShellTemplate.lit.ts +3 -3
- package/src/generated/templates/SearchableListBaseTemplate.lit.ts +1 -1
- package/src/generated/themes/Breadcrumbs.css.ts +1 -1
- package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
- package/src/generated/themes/FilterMenu.css.ts +1 -1
- package/src/generated/themes/ListGroupHeader.css.ts +1 -1
- package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadMenu.css.ts +1 -1
- package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
- package/src/generated/themes/MastheadMobileMenu.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/SearchableList.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
- package/src/generated/themes/SelectBase.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/themes/Breadcrumbs.css +17 -2
- package/src/themes/BreadcrumbsPopover.css +18 -3
- package/src/themes/FilterMenu.css +4 -9
- package/src/themes/ListGroupHeader.css +11 -0
- package/src/themes/MastheadCountrySelector.css +8 -4
- package/src/themes/MastheadItem.css +44 -10
- package/src/themes/MastheadMenu.css +6 -5
- package/src/themes/MastheadMenuItem.css +16 -8
- package/src/themes/MastheadMobileMenu.css +5 -4
- package/src/themes/MastheadProfileMenu.css +2 -1
- package/src/themes/SearchableList.css +18 -3
- package/src/themes/SecondaryNavigation.css +1 -1
- package/src/themes/SecondaryNavigationItem.css +5 -2
- package/src/themes/SelectBase.css +0 -9
- package/src/types/List.ts +2 -0
|
@@ -162,18 +162,17 @@ describe("Breadcrumbs", () => {
|
|
|
162
162
|
});
|
|
163
163
|
|
|
164
164
|
it("wraps each focusable dropdown link in a <li> element", () => {
|
|
165
|
-
// Exclude the current-page <li aria-hidden="true"> which holds a <span>, not a link.
|
|
166
165
|
cy.get("#breadcrumbs").shadow()
|
|
167
|
-
.find(".udex-
|
|
168
|
-
.each($
|
|
169
|
-
cy.wrap($
|
|
166
|
+
.find("[udex-link].udex-breadcrumbs__item--hidden")
|
|
167
|
+
.each($link => {
|
|
168
|
+
cy.wrap($link).parent("li").should("exist");
|
|
170
169
|
});
|
|
171
170
|
});
|
|
172
171
|
|
|
173
172
|
it("wraps the current-page dropdown entry in a <li> with aria-hidden='true'", () => {
|
|
174
173
|
cy.get("#breadcrumbs").shadow()
|
|
175
|
-
.find("li[aria-hidden='true']")
|
|
176
174
|
.find(".udex-breadcrumbs__item--current")
|
|
175
|
+
.parent("li[aria-hidden='true']")
|
|
177
176
|
.should("exist");
|
|
178
177
|
});
|
|
179
178
|
});
|
|
@@ -6,7 +6,7 @@ import { UDExAdditionalTextState, UDExListStyleType } from "../../src/types/List
|
|
|
6
6
|
import UDExStatusBadgeValueState from "../../dist/types/StatusBadgeValueState.js";
|
|
7
7
|
import { UDExDisplayType } from "../../src/RatingIndicator.js";
|
|
8
8
|
|
|
9
|
-
const defaultListItem = <UDExListItem
|
|
9
|
+
const defaultListItem = <UDExListItem
|
|
10
10
|
id="listItem"
|
|
11
11
|
accessibleName="accessible-name"
|
|
12
12
|
supportingText="Supporting text"
|
|
@@ -21,7 +21,7 @@ const defaultListItem = <UDExListItem
|
|
|
21
21
|
Default List Item
|
|
22
22
|
</UDExListItem>
|
|
23
23
|
|
|
24
|
-
const listItemSuccess = <UDExListItem
|
|
24
|
+
const listItemSuccess = <UDExListItem
|
|
25
25
|
id="listItemSuccess"
|
|
26
26
|
accessibleName="accessible-name"
|
|
27
27
|
supportingText="Supporting text"
|
|
@@ -34,7 +34,7 @@ const listItemSuccess = <UDExListItem
|
|
|
34
34
|
Default List Item
|
|
35
35
|
</UDExListItem>
|
|
36
36
|
|
|
37
|
-
const listItemError = <UDExListItem
|
|
37
|
+
const listItemError = <UDExListItem
|
|
38
38
|
id="listItemError"
|
|
39
39
|
accessibleName="accessible-name"
|
|
40
40
|
supportingText="Supporting text"
|
|
@@ -47,7 +47,7 @@ const listItemError = <UDExListItem
|
|
|
47
47
|
Default List Item
|
|
48
48
|
</UDExListItem>
|
|
49
49
|
|
|
50
|
-
const listItemWarning = <UDExListItem
|
|
50
|
+
const listItemWarning = <UDExListItem
|
|
51
51
|
id="listItemWarning"
|
|
52
52
|
accessibleName="accessible-name"
|
|
53
53
|
supportingText="Supporting text"
|
|
@@ -60,7 +60,7 @@ const listItemWarning = <UDExListItem
|
|
|
60
60
|
Default List Item
|
|
61
61
|
</UDExListItem>
|
|
62
62
|
|
|
63
|
-
const listItemWithIcons = <UDExListItem
|
|
63
|
+
const listItemWithIcons = <UDExListItem
|
|
64
64
|
id="listItemIcons"
|
|
65
65
|
accessible-name="accessible-name"
|
|
66
66
|
supporting-text="Supporting text"
|
|
@@ -88,32 +88,36 @@ describe("ListItem", () => {
|
|
|
88
88
|
cy.get("[udex-list-item]").should("exist");
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
describe("Basic attributes", () => {
|
|
93
93
|
beforeEach(() => {
|
|
94
94
|
cy.mount(defaultListItem);
|
|
95
95
|
});
|
|
96
|
-
|
|
96
|
+
|
|
97
97
|
it("has correct supporting text", () => {
|
|
98
98
|
cy.get("#listItem").shadow().find(".udex-list__supporting-text").should("have.text", "Supporting text");
|
|
99
99
|
});
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
it("has correct avatar", () => {
|
|
102
102
|
cy.get("#listItem").shadow().find(".udex-list__avatar").should("exist");
|
|
103
103
|
});
|
|
104
|
-
|
|
104
|
+
|
|
105
105
|
it("has avatar of size M", () => {
|
|
106
106
|
cy.get("#listItem").shadow().find(".udex-list__avatar").should("have.attr", "size", "M");
|
|
107
107
|
});
|
|
108
|
-
|
|
108
|
+
|
|
109
109
|
it("has avatar of shape Square", () => {
|
|
110
110
|
cy.get("#listItem").shadow().find(".udex-list__avatar").should("have.attr", "shape", "Square");
|
|
111
111
|
});
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
it("has avatar with alternative text", () => {
|
|
114
114
|
cy.get("#listItem").shadow().find(".udex-list__avatar").find("img").should("have.attr", "alt", "Person Avatar");
|
|
115
115
|
});
|
|
116
|
-
|
|
116
|
+
|
|
117
|
+
it("renders bullet marker at the start of the item", () => {
|
|
118
|
+
cy.get("#listItem").shadow().find(".udex-list__circle").should("exist");
|
|
119
|
+
});
|
|
120
|
+
|
|
117
121
|
it("has correct accessibleName", () => {
|
|
118
122
|
cy.get("#listItem").shadow().find(".udex-list__content-wrap").should(($wrapper) => {
|
|
119
123
|
const itemId = $wrapper.attr("_id");
|
|
@@ -130,48 +134,48 @@ describe("ListItem", () => {
|
|
|
130
134
|
cy.get("#listItem").shadow().find("udex-status-badge").should("have.attr", "size", UDExAvatarSize.M);
|
|
131
135
|
});
|
|
132
136
|
});
|
|
133
|
-
|
|
137
|
+
|
|
134
138
|
describe("With Icons", () => {
|
|
135
139
|
beforeEach(() => {
|
|
136
140
|
cy.mount(listItemWithIcons);
|
|
137
141
|
});
|
|
138
|
-
|
|
142
|
+
|
|
139
143
|
it("renders first and second icons when both slots are filled", () => {
|
|
140
144
|
cy.get("#listItemIcons").find("udex-button").should("have.length", 2);
|
|
141
145
|
});
|
|
142
|
-
|
|
146
|
+
|
|
143
147
|
it("becomes selected when clicking", () => {
|
|
144
148
|
cy.get("#listItemIcons").shadow().find(".udex-list__item").click();
|
|
145
149
|
cy.get("#listItemIcons").should("have.attr", "selected");
|
|
146
150
|
});
|
|
147
|
-
|
|
151
|
+
|
|
148
152
|
it("pressing Enter sets data-selected", () => {
|
|
149
153
|
cy.realPress("Enter");
|
|
150
154
|
cy.get("#listItemIcons").shadow().find(".udex-list__item").should("have.attr", "data-selected");
|
|
151
155
|
});
|
|
152
|
-
|
|
156
|
+
|
|
153
157
|
it("pressing Space sets data-selected", () => {
|
|
154
158
|
cy.realPress("Space");
|
|
155
159
|
cy.get("#listItemIcons").shadow().find(".udex-list__item").should("have.attr", "data-selected");
|
|
156
160
|
});
|
|
157
161
|
});
|
|
158
|
-
|
|
162
|
+
|
|
159
163
|
describe("Additional Text States", () => {
|
|
160
164
|
it("shows Information state", () => {
|
|
161
165
|
cy.mount(defaultListItem);
|
|
162
166
|
cy.get("#listItem").shadow().find(".udex-list__add-text").should("have.css", "color", "rgb(0, 64, 176)");
|
|
163
167
|
});
|
|
164
|
-
|
|
168
|
+
|
|
165
169
|
it("shows Success state", () => {
|
|
166
170
|
cy.mount(listItemSuccess);
|
|
167
171
|
cy.get("#listItemSuccess").shadow().find(".udex-list__add-text").should("have.css", "color", "rgb(30, 89, 47)");
|
|
168
172
|
});
|
|
169
|
-
|
|
173
|
+
|
|
170
174
|
it("shows Error state", () => {
|
|
171
175
|
cy.mount(listItemError);
|
|
172
176
|
cy.get("#listItemError").shadow().find(".udex-list__add-text").should("have.css", "color", "rgb(132, 6, 6)");
|
|
173
177
|
});
|
|
174
|
-
|
|
178
|
+
|
|
175
179
|
it("shows Warning state", () => {
|
|
176
180
|
cy.mount(listItemWarning);
|
|
177
181
|
cy.get("#listItemWarning").shadow().find(".udex-list__add-text").should("have.css", "color", "rgb(141, 42, 0)");
|
|
@@ -495,6 +495,87 @@ describe("UDExMastheadMenu — 3rd-level navigation (sub-items)", () => {
|
|
|
495
495
|
});
|
|
496
496
|
});
|
|
497
497
|
|
|
498
|
+
// Added: verifies focusInnerElement is used for Home/End/Tab navigation within the menu
|
|
499
|
+
describe("Keyboard navigation (Home/End/Tab focus inner element)", () => {
|
|
500
|
+
beforeEach(() => {
|
|
501
|
+
cy.mount(
|
|
502
|
+
<UDExMastheadMenu
|
|
503
|
+
id="menu-keyboard"
|
|
504
|
+
subItems={JSON.stringify(itemsWithSubItems)}
|
|
505
|
+
/>
|
|
506
|
+
);
|
|
507
|
+
cy.get("[udex-masthead-menu]").shadow().as("shadow");
|
|
508
|
+
});
|
|
509
|
+
|
|
510
|
+
it("Home key focuses the inner element of the first menu item", () => {
|
|
511
|
+
// Focus the last link, then press Home — should move focus to the inner element of the first link
|
|
512
|
+
cy.get("@shadow")
|
|
513
|
+
.find("[udex-masthead-menu-item][url]")
|
|
514
|
+
.last()
|
|
515
|
+
.shadow()
|
|
516
|
+
.find(".udex-masthead-menu-item")
|
|
517
|
+
.focus();
|
|
518
|
+
cy.realPress("Home");
|
|
519
|
+
cy.get("@shadow")
|
|
520
|
+
.find("[udex-masthead-menu-item][url]")
|
|
521
|
+
.first()
|
|
522
|
+
.shadow()
|
|
523
|
+
.find(".udex-masthead-menu-item")
|
|
524
|
+
.should("be.focused");
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
it("End key focuses the inner element of the last menu item", () => {
|
|
528
|
+
// Focus the first link, then press End — should move focus to the inner element of the last link
|
|
529
|
+
cy.get("@shadow")
|
|
530
|
+
.find("[udex-masthead-menu-item][url]")
|
|
531
|
+
.first()
|
|
532
|
+
.shadow()
|
|
533
|
+
.find(".udex-masthead-menu-item")
|
|
534
|
+
.focus();
|
|
535
|
+
cy.realPress("End");
|
|
536
|
+
cy.get("@shadow")
|
|
537
|
+
.find("[udex-masthead-menu-item][url]")
|
|
538
|
+
.last()
|
|
539
|
+
.shadow()
|
|
540
|
+
.find(".udex-masthead-menu-item")
|
|
541
|
+
.should("be.focused");
|
|
542
|
+
});
|
|
543
|
+
|
|
544
|
+
it("Shift+Tab focuses the inner element of the previous menu item", () => {
|
|
545
|
+
// Focus the second link, then press Shift+Tab — should focus the inner element of the first link
|
|
546
|
+
cy.get("@shadow")
|
|
547
|
+
.find("[udex-masthead-menu-item][url]")
|
|
548
|
+
.eq(1)
|
|
549
|
+
.shadow()
|
|
550
|
+
.find(".udex-masthead-menu-item")
|
|
551
|
+
.focus();
|
|
552
|
+
cy.realPress(["Shift", "Tab"]);
|
|
553
|
+
cy.get("@shadow")
|
|
554
|
+
.find("[udex-masthead-menu-item][url]")
|
|
555
|
+
.first()
|
|
556
|
+
.shadow()
|
|
557
|
+
.find(".udex-masthead-menu-item")
|
|
558
|
+
.should("be.focused");
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
it("Tab focuses the inner element of the next menu item", () => {
|
|
562
|
+
// Focus the first link, then press Tab — should focus the inner element of the second link
|
|
563
|
+
cy.get("@shadow")
|
|
564
|
+
.find("[udex-masthead-menu-item][url]")
|
|
565
|
+
.first()
|
|
566
|
+
.shadow()
|
|
567
|
+
.find(".udex-masthead-menu-item")
|
|
568
|
+
.focus();
|
|
569
|
+
cy.realPress("Tab");
|
|
570
|
+
cy.get("@shadow")
|
|
571
|
+
.find("[udex-masthead-menu-item][url]")
|
|
572
|
+
.eq(1)
|
|
573
|
+
.shadow()
|
|
574
|
+
.find(".udex-masthead-menu-item")
|
|
575
|
+
.should("be.focused");
|
|
576
|
+
});
|
|
577
|
+
});
|
|
578
|
+
|
|
498
579
|
describe("Mixed linked and non-linked sub-categories in the same list", () => {
|
|
499
580
|
beforeEach(() => {
|
|
500
581
|
cy.mount(
|
|
@@ -407,6 +407,85 @@ describe("MastheadShell Default component", () => {
|
|
|
407
407
|
cy.realPress(["Shift", "Tab"]);
|
|
408
408
|
cy.get("#support-item").should("be.focused");
|
|
409
409
|
});
|
|
410
|
+
|
|
411
|
+
// Added: verifies Safari Tab-into-dropdown fix — when dropdown is open, Tab moves focus into the first menu item
|
|
412
|
+
it("Tab moves focus into the first dropdown menu item when dropdown is open", () => {
|
|
413
|
+
cy.get("#product-item").realClick();
|
|
414
|
+
cy.get("#product-item").shadow().find(".udex-masthead-item__dropdown").should("be.visible");
|
|
415
|
+
cy.realPress("Tab");
|
|
416
|
+
cy.get("#product-menu")
|
|
417
|
+
.shadow()
|
|
418
|
+
.find("[udex-masthead-menu-item]")
|
|
419
|
+
.first()
|
|
420
|
+
.shadow()
|
|
421
|
+
.find(".udex-masthead-menu-item")
|
|
422
|
+
.should("be.focused");
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
// Updated: unified handleKeyDown uses composedPath() guard to let Tab within dropdown advance normally
|
|
426
|
+
it("Tab on first dropdown item moves focus to second item, not back to first", () => {
|
|
427
|
+
cy.get("#product-item").realClick();
|
|
428
|
+
cy.get("#product-item").shadow().find(".udex-masthead-item__dropdown").should("be.visible");
|
|
429
|
+
// Tab into the dropdown — focuses first item
|
|
430
|
+
cy.realPress("Tab");
|
|
431
|
+
cy.get("#product-menu")
|
|
432
|
+
.shadow()
|
|
433
|
+
.find("[udex-masthead-menu-item]")
|
|
434
|
+
.first()
|
|
435
|
+
.shadow()
|
|
436
|
+
.find(".udex-masthead-menu-item")
|
|
437
|
+
.should("be.focused");
|
|
438
|
+
// Tab again — should advance to second item (not reset to first)
|
|
439
|
+
cy.realPress("Tab");
|
|
440
|
+
cy.get("#product-menu")
|
|
441
|
+
.shadow()
|
|
442
|
+
.find("[udex-masthead-menu-item]")
|
|
443
|
+
.eq(1)
|
|
444
|
+
.shadow()
|
|
445
|
+
.find(".udex-masthead-menu-item")
|
|
446
|
+
.should("be.focused");
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
// Added: verifies Tab on last dropdown item exits dropdown instead of looping back to first item
|
|
450
|
+
it("Tab on last dropdown item exits dropdown and moves focus to the next top-level menu item", () => {
|
|
451
|
+
cy.get("#product-item").realClick();
|
|
452
|
+
cy.get("#product-item").shadow().find(".udex-masthead-item__dropdown").should("be.visible");
|
|
453
|
+
|
|
454
|
+
// Focus the last focusable menu item in the dropdown (items with url only)
|
|
455
|
+
cy.get("#product-menu")
|
|
456
|
+
.shadow()
|
|
457
|
+
.find("[udex-masthead-menu-item]")
|
|
458
|
+
.filter((_, el) => !!el.getAttribute("url"))
|
|
459
|
+
.last()
|
|
460
|
+
.shadow()
|
|
461
|
+
.find(".udex-masthead-menu-item")
|
|
462
|
+
.focus();
|
|
463
|
+
|
|
464
|
+
// Verify we are on the last item before pressing Tab
|
|
465
|
+
cy.get("#product-menu")
|
|
466
|
+
.shadow()
|
|
467
|
+
.find("[udex-masthead-menu-item]")
|
|
468
|
+
.filter((_, el) => !!el.getAttribute("url"))
|
|
469
|
+
.last()
|
|
470
|
+
.shadow()
|
|
471
|
+
.find(".udex-masthead-menu-item")
|
|
472
|
+
.should("be.focused");
|
|
473
|
+
|
|
474
|
+
// Tab should exit the dropdown — NOT loop back to the first item
|
|
475
|
+
cy.realPress("Tab");
|
|
476
|
+
|
|
477
|
+
// The first dropdown item should NOT be focused (no looping)
|
|
478
|
+
cy.get("#product-menu")
|
|
479
|
+
.shadow()
|
|
480
|
+
.find("[udex-masthead-menu-item]")
|
|
481
|
+
.first()
|
|
482
|
+
.shadow()
|
|
483
|
+
.find(".udex-masthead-menu-item")
|
|
484
|
+
.should("not.be.focused");
|
|
485
|
+
|
|
486
|
+
// The dropdown should close because focus left the masthead item
|
|
487
|
+
cy.get("#product-item").shadow().find(".udex-masthead-item__dropdown").should("not.exist");
|
|
488
|
+
});
|
|
410
489
|
});
|
|
411
490
|
|
|
412
491
|
describe("Component events", () => {
|
|
@@ -329,6 +329,20 @@ describe("Desktop", () => {
|
|
|
329
329
|
.its("lastCall.args.0.detail").should("not.have.property", "isMore");
|
|
330
330
|
});
|
|
331
331
|
|
|
332
|
+
it("sets CSS variable when dropdown opens on desktop", () => {
|
|
333
|
+
cy.get("#secondary-nav").shadow().find("udex-secondary-navigation-item").first().click()
|
|
334
|
+
.shadow().find(".udex-secondary-navigation__dropdown").should("be.visible");
|
|
335
|
+
|
|
336
|
+
cy.get("#secondary-nav").shadow().find("udex-secondary-navigation-item").first()
|
|
337
|
+
.then($item => {
|
|
338
|
+
const item = $item[0] as HTMLElement;
|
|
339
|
+
const dropdown = item.shadowRoot!.querySelector<HTMLElement>(".udex-secondary-navigation__dropdown")!;
|
|
340
|
+
const { top } = dropdown.getBoundingClientRect();
|
|
341
|
+
const expected = `${window.innerHeight - top - 24}px`;
|
|
342
|
+
expect(item.style.getPropertyValue("--udex-secondary-navigation-item-dropdown-desktop-max-height")).to.eq(expected);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
|
|
332
346
|
describe("Keyboard Navigation (Disclosure pattern)", () => {
|
|
333
347
|
it("Tab key moves focus to the next top-level item", () => {
|
|
334
348
|
cy.get("#secondary-nav").shadow().find("udex-secondary-navigation-item").eq(2)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UDExSelectBox, UDExSelectBoxSelectAll, UDExSelectBoxGroupHeader, UDExSelectBoxItem, UDExButton } from "../support/component-imports.js";
|
|
1
|
+
import { UDExSelectBox, UDExSelectBoxSelectAll, UDExSelectBoxGroupHeader, UDExSelectBoxItem, UDExButton, UDExModal } from "../support/component-imports.js";
|
|
2
2
|
import { UDExListMode } from "../../src/types/List.js";
|
|
3
3
|
|
|
4
4
|
const selectBoxWithRating = <div style="width: 350px; position:relative;"><UDExSelectBox
|
|
@@ -115,6 +115,14 @@ const shortComponent = <div style="width: 350px; position:relative;"><UDExSelect
|
|
|
115
115
|
<UDExSelectBoxItem label="Perl"></UDExSelectBoxItem>
|
|
116
116
|
</UDExSelectBox></div>
|
|
117
117
|
|
|
118
|
+
const singleSelectWithRating = <div style="width: 350px; position:relative;"><UDExSelectBox
|
|
119
|
+
id="select-box"
|
|
120
|
+
label="Rating">
|
|
121
|
+
<UDExSelectBoxItem rating="5" ratingCount="5.0" totalCount="23"></UDExSelectBoxItem>
|
|
122
|
+
<UDExSelectBoxItem rating="4" ratingCount="4.0" totalCount="17"></UDExSelectBoxItem>
|
|
123
|
+
<UDExSelectBoxItem rating="3" ratingCount="3.0" totalCount="34"></UDExSelectBoxItem>
|
|
124
|
+
</UDExSelectBox></div>
|
|
125
|
+
|
|
118
126
|
const groupHeader = <div style="width: 350px; position:relative;"><UDExSelectBox
|
|
119
127
|
id="select-box"
|
|
120
128
|
mode={UDExListMode.MultiSelect}
|
|
@@ -139,6 +147,18 @@ const selectAll = <div style="width: 350px; position:relative;">
|
|
|
139
147
|
<a id="next-focus" href="#">Next focusable element</a>
|
|
140
148
|
</div>
|
|
141
149
|
|
|
150
|
+
const selectBoxInsideModal = <div style="width: 500px; position:relative;">
|
|
151
|
+
<UDExModal id="test-modal" open header-text="Test Modal">
|
|
152
|
+
<UDExSelectBox
|
|
153
|
+
id="select-box-in-modal"
|
|
154
|
+
label="Programming languages">
|
|
155
|
+
<UDExSelectBoxItem label="JavaScript"></UDExSelectBoxItem>
|
|
156
|
+
<UDExSelectBoxItem label="Python"></UDExSelectBoxItem>
|
|
157
|
+
<UDExSelectBoxItem label="Java"></UDExSelectBoxItem>
|
|
158
|
+
</UDExSelectBox>
|
|
159
|
+
</UDExModal>
|
|
160
|
+
</div>
|
|
161
|
+
|
|
142
162
|
describe("SelectBox", () => {
|
|
143
163
|
it("tests if web component is correctly rendered", () => {
|
|
144
164
|
cy.mount(<UDExSelectBox></UDExSelectBox>);
|
|
@@ -1125,6 +1145,54 @@ describe("SelectBox", () => {
|
|
|
1125
1145
|
.should("exist");
|
|
1126
1146
|
});
|
|
1127
1147
|
|
|
1148
|
+
it("MultiSelect mode - selected rating item tag shows rating value with 'stars' text", () => {
|
|
1149
|
+
cy.mount(selectBoxWithRating);
|
|
1150
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
1151
|
+
|
|
1152
|
+
cy.get("#select-box").shadow().find("udex-list-item").eq(0).click();
|
|
1153
|
+
|
|
1154
|
+
cy.get("#select-box").shadow()
|
|
1155
|
+
.find("udex-tag-group").shadow()
|
|
1156
|
+
.find("udex-tag")
|
|
1157
|
+
.first()
|
|
1158
|
+
.should("have.attr", "text", "5 stars");
|
|
1159
|
+
});
|
|
1160
|
+
|
|
1161
|
+
it("MultiSelect mode - no single-label shown after opening dropdown and clicking outside", () => {
|
|
1162
|
+
cy.mount(selectBoxWithRating);
|
|
1163
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
1164
|
+
|
|
1165
|
+
cy.get("#select-box").shadow()
|
|
1166
|
+
.find(".udex-select-box__dropdown")
|
|
1167
|
+
.should("have.attr", "open");
|
|
1168
|
+
|
|
1169
|
+
cy.get("body").realClick();
|
|
1170
|
+
|
|
1171
|
+
cy.get("#select-box").shadow()
|
|
1172
|
+
.find(".udex-text-field__single-label")
|
|
1173
|
+
.should("not.exist");
|
|
1174
|
+
});
|
|
1175
|
+
|
|
1176
|
+
it("no single-label shown after opening dropdown and clicking outside", () => {
|
|
1177
|
+
cy.mount(singleSelectWithRating);
|
|
1178
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
1179
|
+
cy.get("body").realClick();
|
|
1180
|
+
|
|
1181
|
+
cy.get("#select-box").shadow()
|
|
1182
|
+
.find(".udex-text-field__single-label")
|
|
1183
|
+
.should("not.exist");
|
|
1184
|
+
});
|
|
1185
|
+
|
|
1186
|
+
it("shows ratingCount with 'stars' as the label when item has no text label", () => {
|
|
1187
|
+
cy.mount(singleSelectWithRating);
|
|
1188
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
1189
|
+
cy.get("#select-box").shadow().find("udex-list-item").eq(0).click();
|
|
1190
|
+
|
|
1191
|
+
cy.get("#select-box").shadow()
|
|
1192
|
+
.find(".udex-text-field__single-label")
|
|
1193
|
+
.should("have.text", "5.0 stars");
|
|
1194
|
+
});
|
|
1195
|
+
|
|
1128
1196
|
it("filters rating items by ratingCount when searching", () => {
|
|
1129
1197
|
cy.mount(selectBoxWithRating);
|
|
1130
1198
|
cy.get("#select-box").shadow().find(".udex-text-field__search").click();
|
|
@@ -1134,4 +1202,101 @@ describe("SelectBox", () => {
|
|
|
1134
1202
|
.should("have.length", 1);
|
|
1135
1203
|
});
|
|
1136
1204
|
});
|
|
1205
|
+
|
|
1206
|
+
describe("SelectBox inside Modal - Escape key propagation", () => {
|
|
1207
|
+
it("pressing Escape closes only the SelectBox dropdown, not the parent Modal", () => {
|
|
1208
|
+
cy.mount(selectBoxInsideModal);
|
|
1209
|
+
|
|
1210
|
+
// Wait for Modal to be rendered and open
|
|
1211
|
+
cy.get("#test-modal").should("have.attr", "open");
|
|
1212
|
+
|
|
1213
|
+
// Open the SelectBox dropdown by clicking the trigger
|
|
1214
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1215
|
+
.find(".udex-text-field__trigger")
|
|
1216
|
+
.click();
|
|
1217
|
+
|
|
1218
|
+
// Verify the dropdown is open
|
|
1219
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1220
|
+
.find(".udex-select-box__dropdown")
|
|
1221
|
+
.should("have.attr", "open");
|
|
1222
|
+
|
|
1223
|
+
// Press Escape to close the dropdown
|
|
1224
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1225
|
+
.find(".udex-text-field__search")
|
|
1226
|
+
.realPress("Escape");
|
|
1227
|
+
|
|
1228
|
+
// Assert the SelectBox dropdown is closed
|
|
1229
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1230
|
+
.find(".udex-select-box__dropdown")
|
|
1231
|
+
.should("not.have.attr", "open");
|
|
1232
|
+
|
|
1233
|
+
// Assert the Modal is still open (Escape did not propagate to close it)
|
|
1234
|
+
cy.get("#test-modal").should("have.attr", "open");
|
|
1235
|
+
});
|
|
1236
|
+
|
|
1237
|
+
it("pressing Escape while navigating dropdown list items closes dropdown, not Modal", () => {
|
|
1238
|
+
cy.mount(selectBoxInsideModal);
|
|
1239
|
+
|
|
1240
|
+
cy.get("#test-modal").should("have.attr", "open");
|
|
1241
|
+
|
|
1242
|
+
// Open dropdown and navigate into list items using keyboard
|
|
1243
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1244
|
+
.find(".udex-text-field__search")
|
|
1245
|
+
.click()
|
|
1246
|
+
.realPress("ArrowDown");
|
|
1247
|
+
|
|
1248
|
+
// Verify the dropdown is open
|
|
1249
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1250
|
+
.find(".udex-select-box__dropdown")
|
|
1251
|
+
.should("have.attr", "open");
|
|
1252
|
+
|
|
1253
|
+
// Press Escape while focus is on a list item
|
|
1254
|
+
cy.realPress("Escape");
|
|
1255
|
+
|
|
1256
|
+
// Assert the SelectBox dropdown is closed
|
|
1257
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1258
|
+
.find(".udex-select-box__dropdown")
|
|
1259
|
+
.should("not.have.attr", "open");
|
|
1260
|
+
|
|
1261
|
+
// Assert the Modal is still open
|
|
1262
|
+
cy.get("#test-modal").should("have.attr", "open");
|
|
1263
|
+
});
|
|
1264
|
+
|
|
1265
|
+
// Updated: covers fix where Escape on search input with dropdown closed now propagates to parent Modal
|
|
1266
|
+
it("pressing Escape with dropdown closed propagates to close the parent Modal", () => {
|
|
1267
|
+
cy.mount(selectBoxInsideModal);
|
|
1268
|
+
|
|
1269
|
+
// Wait for Modal to be rendered and open
|
|
1270
|
+
cy.get("#test-modal").should("have.attr", "open");
|
|
1271
|
+
|
|
1272
|
+
// Focus the search input without opening the dropdown
|
|
1273
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1274
|
+
.find(".udex-text-field__search")
|
|
1275
|
+
.click();
|
|
1276
|
+
|
|
1277
|
+
// Close the dropdown if it opened from the click
|
|
1278
|
+
cy.get("#select-box-in-modal").then($el => {
|
|
1279
|
+
const selectBox = $el[0] as any;
|
|
1280
|
+
selectBox.close();
|
|
1281
|
+
});
|
|
1282
|
+
|
|
1283
|
+
// Verify the dropdown is closed
|
|
1284
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1285
|
+
.find(".udex-select-box__dropdown")
|
|
1286
|
+
.should("not.have.attr", "open");
|
|
1287
|
+
|
|
1288
|
+
// Re-focus the search input (close() may have shifted focus)
|
|
1289
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1290
|
+
.find(".udex-text-field__search")
|
|
1291
|
+
.focus();
|
|
1292
|
+
|
|
1293
|
+
// Press Escape while focused on the search input with dropdown closed
|
|
1294
|
+
cy.get("#select-box-in-modal").shadow()
|
|
1295
|
+
.find(".udex-text-field__search")
|
|
1296
|
+
.realPress("Escape");
|
|
1297
|
+
|
|
1298
|
+
// Assert the Modal is closed (Escape propagated up to the Dialog handler)
|
|
1299
|
+
cy.get("#test-modal").should("not.have.attr", "open");
|
|
1300
|
+
});
|
|
1301
|
+
});
|
|
1137
1302
|
});
|
|
@@ -77,4 +77,10 @@ describe("Wizard", () => {
|
|
|
77
77
|
cy.get("#wizard").shadow().find("udex-wizard-tab").first()
|
|
78
78
|
.shadow().find(".ui5-wiz-step-root").should("have.attr", "aria-label", "Step Access SAP Account 1 Step 1")
|
|
79
79
|
});
|
|
80
|
+
|
|
81
|
+
it("mounts without throwing when no steps are slotted (dynamic rendering)", () => {
|
|
82
|
+
cy.mount(<UDExWizard id="empty-wizard"></UDExWizard>);
|
|
83
|
+
cy.get("#empty-wizard").should("exist");
|
|
84
|
+
cy.get("#empty-wizard").shadow().find(".ui5-wiz-nav").should("exist");
|
|
85
|
+
});
|
|
80
86
|
});
|
|
@@ -40,6 +40,7 @@ import UDExMastheadMobileMenu from "../../instrumented/MastheadMobileMenu.js";
|
|
|
40
40
|
import UDExMastheadProfileMenu from "../../instrumented/MastheadProfileMenu.js";
|
|
41
41
|
import UDExMastheadShell from "../../instrumented/MastheadShell.js";
|
|
42
42
|
import UDExMessageStrip from "../../instrumented/MessageStrip.js";
|
|
43
|
+
import UDExModal from "../../instrumented/Modal.js";
|
|
43
44
|
import UDExSearch from "../../instrumented/Search.js";
|
|
44
45
|
import UDExMediaPlayer from "../../instrumented/MediaPlayer.js";
|
|
45
46
|
import UDExPasswordField from "../../instrumented/PasswordField.js";
|
|
@@ -124,6 +125,7 @@ export {
|
|
|
124
125
|
UDExMastheadProfileMenu,
|
|
125
126
|
UDExMastheadShell,
|
|
126
127
|
UDExMessageStrip,
|
|
128
|
+
UDExModal,
|
|
127
129
|
UDExMediaPlayer,
|
|
128
130
|
UDExSearch,
|
|
129
131
|
UDExPasswordField,
|
|
@@ -40,6 +40,7 @@ import UDExMastheadMobileMenu from "../../src/MastheadMobileMenu.js";
|
|
|
40
40
|
import UDExMastheadProfileMenu from "../../src/MastheadProfileMenu.js";
|
|
41
41
|
import UDExMastheadShell from "../../src/MastheadShell.js";
|
|
42
42
|
import UDExMessageStrip from "../../src/MessageStrip.js";
|
|
43
|
+
import UDExModal from "../../src/Modal.js";
|
|
43
44
|
import UDExSearch from "../../src/Search.js";
|
|
44
45
|
import UDExMediaPlayer from "../../src/MediaPlayer.js";
|
|
45
46
|
import UDExPasswordField from "../../src/PasswordField.js";
|
|
@@ -124,6 +125,7 @@ export {
|
|
|
124
125
|
UDExMastheadProfileMenu,
|
|
125
126
|
UDExMastheadShell,
|
|
126
127
|
UDExMessageStrip,
|
|
128
|
+
UDExModal,
|
|
127
129
|
UDExMediaPlayer,
|
|
128
130
|
UDExSearch,
|
|
129
131
|
UDExPasswordField,
|
|
@@ -11,7 +11,7 @@ export default function BreadcrumbsPopoverTemplate() {
|
|
|
11
11
|
focusablePos++;
|
|
12
12
|
}
|
|
13
13
|
const posLabel = `${item.accessibleName || item.textContent || ""}, ${focusablePos} ${ofText} ${focusableCount}`;
|
|
14
|
-
return item._isCurrentPageItem ? (_jsx("li", {
|
|
14
|
+
return item._isCurrentPageItem ? (_jsx("li", { children: _jsx("span", { id: `${item._id}-li`, className: `${this._rootClass}__item ${this._rootClass}__item--current ${this._rootClass}__item--hidden ${this._rootClass}__item--${index}`, "aria-current": "page", "accessible-name": item.accessibleName, "data-ui5-stable": item.stableDomRef, children: item.textContent }) }, index)) : (_jsx("li", { children: item.icon ? (_jsx(UDExLink, { "data-index": index, id: `${item._id}-li`, onClick: this._onDropdownLinkPress, href: item.href, target: item.target, class: `${this._rootClass}__item ${this._rootClass}__item--with-icon ${this._rootClass}__item--hidden ${this._rootClass}__item--${index}`, icon: item.icon, accessibleName: posLabel, "data-ui5-stable": item.stableDomRef, children: item.textContent })) : (_jsx(UDExLink, { "data-index": index, id: `${item._id}-li`, onClick: this._onDropdownLinkPress, href: item.href, target: item.target, class: `${this._rootClass}__item ${this._rootClass}__item--hidden ${this._rootClass}__item--${index}`, accessibleName: posLabel, "data-ui5-stable": item.stableDomRef, children: item.textContent })) }, index));
|
|
15
15
|
}) }) }) }));
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=BreadcrumbsPopoverTemplate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BreadcrumbsPopoverTemplate.js","sourceRoot":"","sources":["../src/BreadcrumbsPopoverTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,0BAA0B;IAChD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;IACrF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,CACL,KAAC,YAAY,IACX,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,uBAAuB,EAC3C,MAAM,EAAE,QAAQ,IAAI,CAAC,GAAG,sBAAsB,EAC9C,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,mCAAmC,EAC5D,cAAc,EAAE,IAAI,CAAC,2BAA2B,EAChD,SAAS,EAAE,SAAS,CAAC,MAAM,EAC3B,eAAe,EAAE,eAAe,CAAC,KAAK,EACtC,SAAS,EAAE,IAAI,CAAC,cAAc,EAC9B,OAAO,EAAE,IAAI,CAAC,mBAAmB,EACjC,MAAM,EAAE,IAAI,CAAC,kBAAkB,YAC/B,cAAK,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,mBAAmB,gBAAc,IAAI,CAAC,8BAA8B,YACpG,uBACG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oBACvC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAAC,YAAY,EAAE,CAAC;oBAAC,CAAC;oBACjD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,KAAK,YAAY,IAAI,MAAM,IAAI,cAAc,EAAE,CAAC;oBACjH,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAC/B,
|
|
1
|
+
{"version":3,"file":"BreadcrumbsPopoverTemplate.js","sourceRoot":"","sources":["../src/BreadcrumbsPopoverTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import type Breadcrumbs from \"./Breadcrumbs.js\";\nimport UDExDropdown from \"./Dropdown.js\";\nimport UDExLink from \"./Link.js\";\nimport { Placement, HorizontalAlign } from \"./types/Dropdown.js\";\n\nexport default function BreadcrumbsPopoverTemplate(this: Breadcrumbs) {\n const focusableCount = this._dropdownItems.filter(i => !i._isCurrentPageItem).length;\n const ofText = this._ofText;\n let focusablePos = 0;\n\n return (\n <UDExDropdown\n id={`udex-${this._id}-breadcrumbs__popover`}\n opener={`udex-${this._id}-breadcrumbs__opener`}\n class={`${this._rootClass}__popover ui5-breadcrumbs-popover`}\n accessibleName={this._dropdownAccessibleNameText}\n placement={Placement.Bottom}\n horizontalAlign={HorizontalAlign.Start}\n onKeyDown={this._handleKeydown}\n onClose={this._afterDropdownClose}\n onOpen={this._afterDropdownOpen}>\n <nav className={`${this._rootClass}__popover-content`} aria-label={this._breadcrumbsAccessibleNameText}>\n <ol>\n {this._dropdownItems.map((item, index) => {\n if (!item._isCurrentPageItem) { focusablePos++; }\n const posLabel = `${item.accessibleName || item.textContent || \"\"}, ${focusablePos} ${ofText} ${focusableCount}`;\n return item._isCurrentPageItem ? (\n <li key={index}>\n <span\n id={`${item._id}-li`}\n className={`${this._rootClass}__item ${this._rootClass}__item--current ${this._rootClass}__item--hidden ${this._rootClass}__item--${index}`}\n aria-current=\"page\"\n accessible-name={item.accessibleName}\n data-ui5-stable={item.stableDomRef}>\n {item.textContent}\n </span>\n </li>\n ) : (\n <li key={index}>\n {item.icon ? (\n <UDExLink\n data-index={index}\n id={`${item._id}-li`}\n onClick={this._onDropdownLinkPress}\n href={item.href}\n target={item.target}\n class={`${this._rootClass}__item ${this._rootClass}__item--with-icon ${this._rootClass}__item--hidden ${this._rootClass}__item--${index}`}\n icon={item.icon}\n accessibleName={posLabel}\n data-ui5-stable={item.stableDomRef}>\n {item.textContent}\n </UDExLink>\n ) : (\n <UDExLink\n data-index={index}\n id={`${item._id}-li`}\n onClick={this._onDropdownLinkPress}\n href={item.href}\n target={item.target}\n class={`${this._rootClass}__item ${this._rootClass}__item--hidden ${this._rootClass}__item--${index}`}\n accessibleName={posLabel}\n data-ui5-stable={item.stableDomRef}>\n {item.textContent}\n </UDExLink>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n </UDExDropdown>\n );\n}\n"]}
|