@sapudex/web-components 2.40.0 → 2.42.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/config/wdio.conf.cjs +18 -2
- package/cypress/specs/Dropdown.cy.tsx +90 -0
- package/cypress/specs/MessageStrip.cy.tsx +77 -0
- package/cypress/specs/PasswordField.cy.tsx +37 -0
- package/cypress/specs/Search.cy.tsx +244 -138
- package/cypress/specs/SelectBox.cy.tsx +184 -5
- package/cypress/support/component-imports.instrumented.ts +2 -0
- package/cypress/support/component-imports.src.ts +2 -0
- package/cypress.config.ts +10 -0
- package/dist/Dropdown.d.ts +5 -0
- package/dist/Dropdown.js +56 -0
- package/dist/Dropdown.js.map +1 -1
- package/dist/List.d.ts +1 -6
- package/dist/List.js +2 -10
- package/dist/List.js.map +1 -1
- package/dist/MastheadCountrySelector.d.ts +7 -0
- package/dist/MastheadCountrySelector.js +3 -0
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MessageStrip.d.ts +25 -0
- package/dist/MessageStrip.js +16 -4
- package/dist/MessageStrip.js.map +1 -1
- package/dist/PasswordField.d.ts +10 -0
- package/dist/PasswordField.js +17 -2
- package/dist/PasswordField.js.map +1 -1
- package/dist/PasswordFieldTemplate.js +1 -1
- package/dist/PasswordFieldTemplate.js.map +1 -1
- package/dist/Search.d.ts +1 -1
- package/dist/Search.js +13 -9
- package/dist/Search.js.map +1 -1
- package/dist/SearchTemplate.js +3 -3
- package/dist/SearchTemplate.js.map +1 -1
- package/dist/SearchableListBase.d.ts +1 -6
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +1 -1
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SelectBase.d.ts +7 -1
- package/dist/SelectBase.js +114 -17
- package/dist/SelectBase.js.map +1 -1
- package/dist/TextField.d.ts +1 -1
- package/dist/TextField.js +2 -2
- package/dist/TextField.js.map +1 -1
- package/dist/TextFieldTemplate.js +1 -1
- package/dist/TextFieldTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-DAElWNvY.js → InputSuggestions-DVRXb_CJ.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-B2fGcGW7.js → ListItemStandardExpandableTextTemplate-DhmGlKzk.js} +1 -1
- package/dist/assets/{bundle.esm-DPVxY8xv.js → bundle.esm-CjF11YUZ.js} +233 -233
- package/dist/assets/messagebundle_en-BZqDcZHN.js +1 -0
- package/dist/assets/messagebundle_hu-CBV3ISbF.js +1 -0
- package/dist/assets/messagebundle_tr-DOeCmUdx.js +1 -0
- package/dist/assets/messagebundle_uk-GmdhsMsP.js +1 -0
- package/dist/assets/messagebundle_zh_CN-CHwH3F3-.js +1 -0
- package/dist/assets/messagebundle_zh_TW-FO0BCkub.js +1 -0
- package/dist/css/themes/MastheadCountrySelector.css +1 -1
- package/dist/css/themes/MastheadMenuItem.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/StatusMessage.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/css/themes/Toast.css +1 -1
- package/dist/css/themes/Wizard.css +1 -1
- package/dist/css/themes/WizardTab.css +1 -1
- package/dist/custom-elements-internal.json +114 -146
- package/dist/custom-elements.json +114 -114
- package/dist/features/SearchSuggestionsPopover.d.ts +6 -9
- package/dist/features/SearchSuggestionsPopover.js +47 -163
- package/dist/features/SearchSuggestionsPopover.js.map +1 -1
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +3 -2
- package/dist/generated/i18n/i18n-defaults.js +3 -2
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +6 -5
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.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/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/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/StatusMessage.css.d.ts +1 -1
- package/dist/generated/themes/StatusMessage.css.js +1 -1
- package/dist/generated/themes/StatusMessage.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/generated/themes/Toast.css.d.ts +1 -1
- package/dist/generated/themes/Toast.css.js +1 -1
- package/dist/generated/themes/Toast.css.js.map +1 -1
- package/dist/generated/themes/Wizard.css.d.ts +1 -1
- package/dist/generated/themes/Wizard.css.js +1 -1
- package/dist/generated/themes/Wizard.css.js.map +1 -1
- package/dist/generated/themes/WizardTab.css.d.ts +1 -1
- package/dist/generated/themes/WizardTab.css.js +1 -1
- package/dist/generated/themes/WizardTab.css.js.map +1 -1
- package/dist/messagebundle.properties +2 -1
- package/dist/messagebundle_en.properties +2 -1
- package/dist/messagebundle_hu.properties +125 -0
- package/dist/messagebundle_tr.properties +126 -0
- package/dist/messagebundle_uk.properties +128 -0
- package/dist/messagebundle_zh_CN.properties +126 -0
- package/dist/messagebundle_zh_TW.properties +126 -0
- package/dist/utils/sanitizeString.js +1 -4
- package/dist/utils/sanitizeString.js.map +1 -1
- package/dist/vscode.html-custom-data.json +30 -25
- package/dist/web-types.json +61 -41
- package/package.json +2 -2
- package/src/Dropdown.ts +62 -0
- package/src/List.ts +3 -18
- package/src/MastheadCountrySelector.hbs +2 -0
- package/src/MastheadCountrySelector.ts +9 -0
- package/src/MastheadMobileMenu.hbs +1 -0
- package/src/MessageStrip.ts +37 -4
- package/src/PasswordField.ts +24 -0
- package/src/PasswordFieldTemplate.tsx +2 -2
- package/src/Search.ts +13 -9
- package/src/SearchTemplate.tsx +0 -3
- package/src/SearchableListBase.ts +1 -6
- package/src/SearchableListBaseTemplate.tsx +0 -1
- package/src/SelectBase.ts +114 -19
- package/src/TextField.ts +1 -1
- package/src/TextFieldTemplate.tsx +1 -1
- package/src/features/SearchSuggestionsPopover.ts +55 -177
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +6 -5
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +1 -1
- package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
- package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/StatusMessage.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/generated/themes/Toast.css.ts +1 -1
- package/src/generated/themes/Wizard.css.ts +1 -1
- package/src/generated/themes/WizardTab.css.ts +1 -1
- package/src/i18n/messagebundle.properties +2 -1
- package/src/i18n/messagebundle_en.properties +2 -1
- package/src/i18n/messagebundle_hu.properties +125 -0
- package/src/i18n/messagebundle_tr.properties +126 -0
- package/src/i18n/messagebundle_uk.properties +128 -0
- package/src/i18n/messagebundle_zh_CN.properties +126 -0
- package/src/i18n/messagebundle_zh_TW.properties +126 -0
- package/src/themes/MastheadCountrySelector.css +5 -2
- package/src/themes/MastheadMenuItem.css +12 -4
- package/src/themes/MastheadProfileMenu.css +0 -5
- package/src/themes/StatusMessage.css +4 -4
- package/src/themes/TextField.css +3 -0
- package/src/themes/Toast.css +14 -2
- package/src/themes/Wizard.css +7 -0
- package/src/themes/WizardTab.css +23 -0
- package/src/utils/sanitizeString.ts +1 -4
- package/dist/assets/messagebundle_en-BxjFAY2S.js +0 -1
- package/dist/assets/messagebundle_hu-BEMbu-EE.js +0 -1
- package/dist/assets/messagebundle_tr-9FvYSV7d.js +0 -1
- package/dist/assets/messagebundle_uk-BgTRxken.js +0 -1
- package/dist/assets/messagebundle_zh_CN-BsCxQ-NE.js +0 -1
- package/dist/assets/messagebundle_zh_TW-Li9m-Dgo.js +0 -1
|
@@ -1486,9 +1486,8 @@ describe("SelectBox", () => {
|
|
|
1486
1486
|
.should("be.focused");
|
|
1487
1487
|
});
|
|
1488
1488
|
|
|
1489
|
-
//
|
|
1490
|
-
//
|
|
1491
|
-
// would close the dropdown) and explicitly moves focus to the first footer element.
|
|
1489
|
+
// when hasFooter is true, pressing Tab on a focused list item moves focus to the
|
|
1490
|
+
// first footer element and keeps the dropdown open.
|
|
1492
1491
|
it("pressing Tab while a list item is focused moves focus to the first footer element and keeps the dropdown open", () => {
|
|
1493
1492
|
cy.mount(selectBoxWithFooter);
|
|
1494
1493
|
|
|
@@ -1507,8 +1506,7 @@ describe("SelectBox", () => {
|
|
|
1507
1506
|
.find("udex-list-item").eq(0)
|
|
1508
1507
|
.should("be.focused");
|
|
1509
1508
|
|
|
1510
|
-
//
|
|
1511
|
-
// intercepted and focus redirected into the footer.
|
|
1509
|
+
// Tab should be intercepted and focus redirected into the footer.
|
|
1512
1510
|
cy.realPress("Tab");
|
|
1513
1511
|
|
|
1514
1512
|
cy.get("#select-box").find("#footer-action").should("be.focused");
|
|
@@ -1595,4 +1593,185 @@ describe("SelectBox", () => {
|
|
|
1595
1593
|
cy.get("@close").should("have.been.called");
|
|
1596
1594
|
});
|
|
1597
1595
|
});
|
|
1596
|
+
|
|
1597
|
+
describe("SelectBox keyboard navigation with action icon buttons", () => {
|
|
1598
|
+
const shortComponentWithFocusTargets = <div style="width: 350px; position:relative;">
|
|
1599
|
+
<a id="previous-focus" href="#">Previous focusable element</a>
|
|
1600
|
+
<UDExSelectBox id="select-box" height="400px" label="Programming languages" supportingText="category lists">
|
|
1601
|
+
<UDExSelectBoxItem label="JavaScript" additionalText="Additional Text">
|
|
1602
|
+
<UDExButton id='firstIcon' accessible-name='Action' slot='firstIcon' design='Tertiary' icon='action' size='Small'></UDExButton>
|
|
1603
|
+
<UDExButton id='secondIcon' accessible-name='Email' slot='secondIcon' design='Tertiary' icon='email' size='Small'></UDExButton>
|
|
1604
|
+
</UDExSelectBoxItem>
|
|
1605
|
+
<UDExSelectBoxItem label="Python"></UDExSelectBoxItem>
|
|
1606
|
+
<UDExSelectBoxItem label="Java"></UDExSelectBoxItem>
|
|
1607
|
+
</UDExSelectBox>
|
|
1608
|
+
<a id="next-focus" href="#">Next focusable element</a>
|
|
1609
|
+
</div>;
|
|
1610
|
+
|
|
1611
|
+
const openDropdownOnFirstItem = () => {
|
|
1612
|
+
cy.get("#select-box").shadow()
|
|
1613
|
+
.find(".udex-text-field__search")
|
|
1614
|
+
.click()
|
|
1615
|
+
.realPress("ArrowDown");
|
|
1616
|
+
};
|
|
1617
|
+
|
|
1618
|
+
it("Tab from list item closes dropdown and moves focus to next element outside component", () => {
|
|
1619
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1620
|
+
openDropdownOnFirstItem();
|
|
1621
|
+
|
|
1622
|
+
cy.realPress("Tab");
|
|
1623
|
+
|
|
1624
|
+
cy.get("#select-box").shadow()
|
|
1625
|
+
.find(".udex-select-box__dropdown")
|
|
1626
|
+
.should("not.have.attr", "open");
|
|
1627
|
+
|
|
1628
|
+
cy.get("#next-focus").should("be.focused");
|
|
1629
|
+
});
|
|
1630
|
+
|
|
1631
|
+
it("Shift+Tab from list item closes dropdown and moves focus to search input", () => {
|
|
1632
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1633
|
+
openDropdownOnFirstItem();
|
|
1634
|
+
|
|
1635
|
+
cy.realPress(["Shift", "Tab"]);
|
|
1636
|
+
|
|
1637
|
+
cy.get("#select-box").shadow()
|
|
1638
|
+
.find(".udex-text-field__search")
|
|
1639
|
+
.should("be.focused");
|
|
1640
|
+
});
|
|
1641
|
+
|
|
1642
|
+
it("Escape from list item closes dropdown and returns focus to trigger", () => {
|
|
1643
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1644
|
+
openDropdownOnFirstItem();
|
|
1645
|
+
|
|
1646
|
+
cy.realPress("Escape");
|
|
1647
|
+
|
|
1648
|
+
cy.get("#select-box").shadow()
|
|
1649
|
+
.find(".udex-select-box__dropdown")
|
|
1650
|
+
.should("not.have.attr", "open");
|
|
1651
|
+
|
|
1652
|
+
cy.get("#select-box").shadow()
|
|
1653
|
+
.find(".udex-text-field__search")
|
|
1654
|
+
.should("be.focused");
|
|
1655
|
+
});
|
|
1656
|
+
|
|
1657
|
+
it("ArrowRight from list item focuses firstIcon button", () => {
|
|
1658
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1659
|
+
openDropdownOnFirstItem();
|
|
1660
|
+
|
|
1661
|
+
cy.realPress("ArrowRight");
|
|
1662
|
+
|
|
1663
|
+
cy.get("#select-box").shadow().find("#firstIcon").should("be.focused");
|
|
1664
|
+
});
|
|
1665
|
+
|
|
1666
|
+
it("ArrowRight from firstIcon button focuses secondIcon button", () => {
|
|
1667
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1668
|
+
openDropdownOnFirstItem();
|
|
1669
|
+
|
|
1670
|
+
cy.realPress("ArrowRight");
|
|
1671
|
+
cy.realPress("ArrowRight");
|
|
1672
|
+
|
|
1673
|
+
cy.get("#select-box").shadow().find("#secondIcon").should("be.focused");
|
|
1674
|
+
});
|
|
1675
|
+
|
|
1676
|
+
it("ArrowRight from secondIcon button stays on secondIcon", () => {
|
|
1677
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1678
|
+
openDropdownOnFirstItem();
|
|
1679
|
+
|
|
1680
|
+
cy.realPress("ArrowRight");
|
|
1681
|
+
cy.realPress("ArrowRight");
|
|
1682
|
+
cy.realPress("ArrowRight");
|
|
1683
|
+
|
|
1684
|
+
cy.get("#select-box").shadow().find("#secondIcon").should("be.focused");
|
|
1685
|
+
});
|
|
1686
|
+
|
|
1687
|
+
it("ArrowLeft from secondIcon button focuses firstIcon button", () => {
|
|
1688
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1689
|
+
openDropdownOnFirstItem();
|
|
1690
|
+
|
|
1691
|
+
cy.realPress("ArrowRight");
|
|
1692
|
+
cy.realPress("ArrowRight");
|
|
1693
|
+
cy.realPress("ArrowLeft");
|
|
1694
|
+
|
|
1695
|
+
cy.get("#select-box").shadow().find("#firstIcon").should("be.focused");
|
|
1696
|
+
});
|
|
1697
|
+
|
|
1698
|
+
it("ArrowLeft from firstIcon button focuses list item", () => {
|
|
1699
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1700
|
+
openDropdownOnFirstItem();
|
|
1701
|
+
|
|
1702
|
+
cy.realPress("ArrowRight");
|
|
1703
|
+
cy.realPress("ArrowLeft");
|
|
1704
|
+
|
|
1705
|
+
cy.get("#select-box").shadow()
|
|
1706
|
+
.find("udex-list-item").eq(0)
|
|
1707
|
+
.should("be.focused");
|
|
1708
|
+
});
|
|
1709
|
+
|
|
1710
|
+
it("ArrowDown from firstIcon button navigates to next list item", () => {
|
|
1711
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1712
|
+
openDropdownOnFirstItem();
|
|
1713
|
+
|
|
1714
|
+
cy.realPress("ArrowRight");
|
|
1715
|
+
cy.realPress("ArrowDown");
|
|
1716
|
+
|
|
1717
|
+
cy.get("#select-box").shadow()
|
|
1718
|
+
.find("udex-list-item").eq(1)
|
|
1719
|
+
.should("be.focused");
|
|
1720
|
+
});
|
|
1721
|
+
|
|
1722
|
+
it("ArrowUp from firstIcon button navigates to previous list item (wraps to last)", () => {
|
|
1723
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1724
|
+
openDropdownOnFirstItem();
|
|
1725
|
+
|
|
1726
|
+
cy.realPress("ArrowRight");
|
|
1727
|
+
cy.realPress("ArrowUp");
|
|
1728
|
+
|
|
1729
|
+
cy.get("#select-box").shadow()
|
|
1730
|
+
.find("udex-list-item").last()
|
|
1731
|
+
.should("be.focused");
|
|
1732
|
+
});
|
|
1733
|
+
|
|
1734
|
+
it("ArrowDown from secondIcon button navigates to next list item", () => {
|
|
1735
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1736
|
+
openDropdownOnFirstItem();
|
|
1737
|
+
|
|
1738
|
+
cy.realPress("ArrowRight");
|
|
1739
|
+
cy.realPress("ArrowRight");
|
|
1740
|
+
cy.realPress("ArrowDown");
|
|
1741
|
+
|
|
1742
|
+
cy.get("#select-box").shadow()
|
|
1743
|
+
.find("udex-list-item").eq(1)
|
|
1744
|
+
.should("be.focused");
|
|
1745
|
+
});
|
|
1746
|
+
|
|
1747
|
+
it("Escape from icon button closes dropdown and returns focus to input", () => {
|
|
1748
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1749
|
+
openDropdownOnFirstItem();
|
|
1750
|
+
|
|
1751
|
+
cy.realPress("ArrowRight");
|
|
1752
|
+
cy.realPress("Escape");
|
|
1753
|
+
|
|
1754
|
+
cy.get("#select-box").shadow()
|
|
1755
|
+
.find(".udex-select-box__dropdown")
|
|
1756
|
+
.should("not.have.attr", "open");
|
|
1757
|
+
|
|
1758
|
+
cy.get("#select-box").shadow()
|
|
1759
|
+
.find(".udex-text-field__search")
|
|
1760
|
+
.should("be.focused");
|
|
1761
|
+
});
|
|
1762
|
+
|
|
1763
|
+
it("Tab from icon button closes dropdown and moves focus to next element", () => {
|
|
1764
|
+
cy.mount(shortComponentWithFocusTargets);
|
|
1765
|
+
openDropdownOnFirstItem();
|
|
1766
|
+
|
|
1767
|
+
cy.realPress("ArrowRight");
|
|
1768
|
+
cy.realPress("Tab");
|
|
1769
|
+
|
|
1770
|
+
cy.get("#select-box").shadow()
|
|
1771
|
+
.find(".udex-select-box__dropdown")
|
|
1772
|
+
.should("not.have.attr", "open");
|
|
1773
|
+
|
|
1774
|
+
cy.get("#next-focus").should("be.focused");
|
|
1775
|
+
});
|
|
1776
|
+
});
|
|
1598
1777
|
});
|
|
@@ -12,6 +12,7 @@ import UDExContact from "../../instrumented/Contact.js";
|
|
|
12
12
|
import UDExContactItem from "../../instrumented/ContactItem.js";
|
|
13
13
|
import UDExCountrySelector from "../../instrumented/CountrySelector.js";
|
|
14
14
|
import UDExDivider from "../../instrumented/Divider.js";
|
|
15
|
+
import UDExDropdown from "../../instrumented/Dropdown.js";
|
|
15
16
|
import UDExEventRibbon from "../../instrumented/EventRibbon.js";
|
|
16
17
|
import UDExFeed from "../../instrumented/Feed.js";
|
|
17
18
|
import UDExFeedItem from "../../instrumented/FeedItem.js";
|
|
@@ -99,6 +100,7 @@ export {
|
|
|
99
100
|
UDExContactItem,
|
|
100
101
|
UDExCountrySelector,
|
|
101
102
|
UDExDivider,
|
|
103
|
+
UDExDropdown,
|
|
102
104
|
UDExEventRibbon,
|
|
103
105
|
UDExFeed,
|
|
104
106
|
UDExFeedItem,
|
|
@@ -12,6 +12,7 @@ import UDExContact from "../../src/Contact.js";
|
|
|
12
12
|
import UDExContactItem from "../../src/ContactItem.js";
|
|
13
13
|
import UDExCountrySelector from "../../src/CountrySelector.js";
|
|
14
14
|
import UDExDivider from "../../src/Divider.js";
|
|
15
|
+
import UDExDropdown from "../../src/Dropdown.js";
|
|
15
16
|
import UDExEventRibbon from "../../src/EventRibbon.js";
|
|
16
17
|
import UDExFeed from "../../src/Feed.js";
|
|
17
18
|
import UDExFeedItem from "../../src/FeedItem.js";
|
|
@@ -99,6 +100,7 @@ export {
|
|
|
99
100
|
UDExContactItem,
|
|
100
101
|
UDExCountrySelector,
|
|
101
102
|
UDExDivider,
|
|
103
|
+
UDExDropdown,
|
|
102
104
|
UDExEventRibbon,
|
|
103
105
|
UDExFeed,
|
|
104
106
|
UDExFeedItem,
|
package/cypress.config.ts
CHANGED
|
@@ -8,6 +8,16 @@ export default defineConfig({
|
|
|
8
8
|
async setupNodeEvents(on, config) {
|
|
9
9
|
const codeCoverageTask = await import('@cypress/code-coverage/task');
|
|
10
10
|
codeCoverageTask.default(on, config);
|
|
11
|
+
|
|
12
|
+
on('before:browser:launch', (browser, launchOptions) => {
|
|
13
|
+
if (browser.name === 'chrome') {
|
|
14
|
+
launchOptions.args.push('--no-sandbox');
|
|
15
|
+
launchOptions.args.push('--disable-dev-shm-usage');
|
|
16
|
+
launchOptions.args.push('--disable-gpu');
|
|
17
|
+
}
|
|
18
|
+
return launchOptions;
|
|
19
|
+
});
|
|
20
|
+
|
|
11
21
|
return config;
|
|
12
22
|
},
|
|
13
23
|
devServer: {
|
package/dist/Dropdown.d.ts
CHANGED
|
@@ -26,5 +26,10 @@ declare class UDExDropdown extends Popover {
|
|
|
26
26
|
constructor();
|
|
27
27
|
onAfterRendering(): void;
|
|
28
28
|
setContentHeight(): void;
|
|
29
|
+
forwardToLast(): Promise<void>;
|
|
30
|
+
forwardToFirst(): Promise<void>;
|
|
31
|
+
private _getOpenerHost;
|
|
32
|
+
private _moveFocusAfter;
|
|
33
|
+
private _firstFocusableIn;
|
|
29
34
|
}
|
|
30
35
|
export default UDExDropdown;
|
package/dist/Dropdown.js
CHANGED
|
@@ -46,6 +46,62 @@ let UDExDropdown = class UDExDropdown extends Popover {
|
|
|
46
46
|
content.style.maxHeight = this.height;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
+
// Shift+Tab from first focusable element: close and return focus to opener
|
|
50
|
+
forwardToLast() {
|
|
51
|
+
this.closePopup(false, false, true);
|
|
52
|
+
const openerEl = this.getOpenerHTMLElement(this.opener);
|
|
53
|
+
if (openerEl) {
|
|
54
|
+
openerEl.focus();
|
|
55
|
+
}
|
|
56
|
+
return Promise.resolve();
|
|
57
|
+
}
|
|
58
|
+
// Tab from last focusable element: close and move focus to next element after opener
|
|
59
|
+
forwardToFirst() {
|
|
60
|
+
const openerHost = this._getOpenerHost();
|
|
61
|
+
this.closePopup(false, false, true);
|
|
62
|
+
if (openerHost) {
|
|
63
|
+
this._moveFocusAfter(openerHost);
|
|
64
|
+
}
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
}
|
|
67
|
+
_getOpenerHost() {
|
|
68
|
+
const opener = this.opener;
|
|
69
|
+
if (!opener) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
if (opener instanceof HTMLElement) {
|
|
73
|
+
return opener;
|
|
74
|
+
}
|
|
75
|
+
const root = this.getRootNode();
|
|
76
|
+
return root.getElementById?.(opener) ?? document.getElementById(opener);
|
|
77
|
+
}
|
|
78
|
+
_moveFocusAfter(from) {
|
|
79
|
+
let node = from;
|
|
80
|
+
while (node && node !== document.documentElement) {
|
|
81
|
+
let sibling = node.nextElementSibling;
|
|
82
|
+
while (sibling) {
|
|
83
|
+
const focusable = this._firstFocusableIn(sibling);
|
|
84
|
+
if (focusable) {
|
|
85
|
+
focusable.focus();
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
sibling = sibling.nextElementSibling;
|
|
89
|
+
}
|
|
90
|
+
node = node.parentElement;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
_firstFocusableIn(el) {
|
|
94
|
+
if (!el) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
if (el.tabIndex >= 0
|
|
98
|
+
&& !el.hidden
|
|
99
|
+
&& !el.disabled
|
|
100
|
+
&& (!!el.offsetParent || el.matches("body"))) {
|
|
101
|
+
return el;
|
|
102
|
+
}
|
|
103
|
+
return Array.from(el.children).reduce((found, child) => found ?? this._firstFocusableIn(child), null);
|
|
104
|
+
}
|
|
49
105
|
};
|
|
50
106
|
__decorate([
|
|
51
107
|
property({ type: String })
|
package/dist/Dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../src/Dropdown.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAC/E,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,OAAO,MAAM,oCAAoC,CAAC;AACzD,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAE3E,SAAS;AACT,OAAO,WAAW,MAAM,oCAAoC,CAAC;AAC7D,OAAO,0BAA0B,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../src/Dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["import jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport Popover from \"@ui5/webcomponents/dist/Popover.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\n\n// Styles\nimport DropdownCss from \"./generated/themes/Dropdown.css.js\";\nimport getEffectiveScrollbarStyle from \"./utils/getEffectiveScrollbarStyle.js\";\n\ntype HTMLElementWithDisabled = HTMLElement & { disabled?: boolean };\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-dropdown</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/Dropdown.js\";</code>\n *\n * @constructor\n * @extends Popover\n * @tagname udex-dropdown\n * @public\n */\n@customElement({\n tag: \"udex-dropdown\",\n renderer: jsxRenderer,\n styles: [Popover.styles, DropdownCss, getEffectiveScrollbarStyle()],\n})\n\nclass UDExDropdown extends Popover {\n /**\n * Allows control over the height.\n *\n * @public\n */\n @property({ type: String })\n height?: string;\n\n constructor() {\n super();\n this.hideArrow = true;\n this.placement = \"Bottom\";\n }\n\n onAfterRendering() {\n super.onAfterRendering();\n\n if (this.height) {\n this.setContentHeight();\n }\n }\n\n setContentHeight() {\n const content = this.shadowRoot!.querySelector(\"[part=content]\") as HTMLElement;\n if (content && this.height) {\n content.style.maxHeight = this.height;\n }\n }\n\n // Shift+Tab from first focusable element: close and return focus to opener\n forwardToLast(): Promise<void> {\n this.closePopup(false, false, true);\n const openerEl = this.getOpenerHTMLElement(this.opener);\n if (openerEl) {\n openerEl.focus();\n }\n return Promise.resolve();\n }\n\n // Tab from last focusable element: close and move focus to next element after opener\n forwardToFirst(): Promise<void> {\n const openerHost = this._getOpenerHost();\n this.closePopup(false, false, true);\n if (openerHost) {\n this._moveFocusAfter(openerHost);\n }\n return Promise.resolve();\n }\n\n private _getOpenerHost(): HTMLElement | null {\n const opener = this.opener;\n if (!opener) { return null; }\n if (opener instanceof HTMLElement) { return opener; }\n const root = this.getRootNode() as Document | ShadowRoot;\n return (root as Document).getElementById?.(opener) ?? document.getElementById(opener);\n }\n\n private _moveFocusAfter(from: Element): void {\n let node: Element | null = from;\n while (node && node !== document.documentElement) {\n let sibling = node.nextElementSibling;\n while (sibling) {\n const focusable = this._firstFocusableIn(sibling as HTMLElement);\n if (focusable) {\n focusable.focus();\n return;\n }\n sibling = sibling.nextElementSibling;\n }\n node = node.parentElement;\n }\n }\n\n private _firstFocusableIn(el: HTMLElement): HTMLElement | null {\n if (!el) { return null; }\n if (\n el.tabIndex >= 0\n && !el.hidden\n && !(el as HTMLElementWithDisabled).disabled\n && (!!el.offsetParent || el.matches(\"body\"))\n ) {\n return el;\n }\n return Array.from(el.children).reduce<HTMLElement | null>(\n (found, child) => found ?? this._firstFocusableIn(child as HTMLElement),\n null,\n );\n }\n}\n\nUDExDropdown.define();\n\nexport default UDExDropdown;\n"]}
|
package/dist/List.d.ts
CHANGED
|
@@ -90,12 +90,7 @@ declare class UDExList extends UI5Element {
|
|
|
90
90
|
* @public
|
|
91
91
|
*/
|
|
92
92
|
itemIcon: string;
|
|
93
|
-
/**
|
|
94
|
-
* Enables tab navigation for the list.
|
|
95
|
-
*
|
|
96
|
-
* @default ""
|
|
97
|
-
* @public
|
|
98
|
-
*/
|
|
93
|
+
/** @deprecated Tab keyboard navigation is no longer allowed. */
|
|
99
94
|
tabNavigationEnabled?: boolean;
|
|
100
95
|
/**
|
|
101
96
|
* Slot for list items.
|
package/dist/List.js
CHANGED
|
@@ -91,9 +91,6 @@ let UDExList = UDExList_1 = class UDExList extends UI5Element {
|
|
|
91
91
|
this.onItemPress(clickedItem);
|
|
92
92
|
}
|
|
93
93
|
handleKeyDown(e) {
|
|
94
|
-
if (this.tabNavigationEnabled) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
94
|
if (isRight(e)) {
|
|
98
95
|
this.handleArrowRight(e);
|
|
99
96
|
}
|
|
@@ -271,10 +268,8 @@ let UDExList = UDExList_1 = class UDExList extends UI5Element {
|
|
|
271
268
|
this.revertSelectedItems(groupItems);
|
|
272
269
|
clickedItem.selected = true;
|
|
273
270
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
clickedItem._tabIndex = "0";
|
|
277
|
-
}
|
|
271
|
+
this.resetTabIndexes();
|
|
272
|
+
clickedItem._tabIndex = "0";
|
|
278
273
|
this.fireDecoratorEvent("selection-change", {
|
|
279
274
|
listItems: this.getItemsFromList(),
|
|
280
275
|
selectedItems: this.getSelectedItems(),
|
|
@@ -344,9 +339,6 @@ let UDExList = UDExList_1 = class UDExList extends UI5Element {
|
|
|
344
339
|
});
|
|
345
340
|
}
|
|
346
341
|
getTabIndex(index, item) {
|
|
347
|
-
if (this.tabNavigationEnabled) {
|
|
348
|
-
return "0";
|
|
349
|
-
}
|
|
350
342
|
const isFirstItem = this.modeSelected && index === 0;
|
|
351
343
|
const isFirstItemInGroupList = this.isGroupList && index === 1;
|
|
352
344
|
const listGroupHeader = item.closest("[udex-list-group-header]");
|
package/dist/List.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sourceRoot":"","sources":["../src/List.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.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 litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport {\n isUp, isDown, isHome, isEnd, isRight, isLeft,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport type UDExListItem from \"./ListItem.js\";\nimport type { UDExScrollIntoViewOptions } from \"./types/List.js\";\nimport { UDExListStyleType, UDExListMode } from \"./types/List.js\";\nimport type UDExListGroupHeader from \"./ListGroupHeader.js\";\nimport type UDExListGroupHeaderBase from \"./ListGroupHeaderBase.js\";\nimport type UDExUploadItem from \"./UploadItem.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { ARIA_LABEL_LIST_MULTISELECTABLE, ARIA_LABEL_LIST_SELECTABLE } from \"./generated/i18n/i18n-defaults.js\";\nimport ListTemplate from \"./generated/templates/ListTemplate.lit.js\";\nimport translate from \"./utils/translate.js\";\n\n// Styles\nimport ListCss from \"./generated/themes/List.css.js\";\nimport isLetterKey from \"./utils/isLetterKeyPressed.js\";\nimport type { UDExListWithFirstLetterFocus } from \"./utils/ListWithFirstLetterFocus.js\";\nimport UDExFirstLetterFocusHandler from \"./utils/ListWithFirstLetterFocus.js\";\nimport getEffectiveScrollbarStyle from \"./utils/getEffectiveScrollbarStyle.js\";\n\nexport type UDExListItemBase = UDExListItem & UDExListGroupHeader & UDExUploadItem;\n\ntype UDExListSelectionChangeEventDetail = {\n listItems: Array<UDExListItemBase>,\n selectedItems: Array<UDExListItemBase>,\n item: HTMLElement,\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-list</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/List.js\";</code>\n *\n * @constructor\n * @author SAP SE\n * @extends UI5Element\n * @tagname udex-list\n * @public\n */\n@customElement({\n tag: \"udex-list\",\n renderer: litRender,\n styles: [ListCss, getEffectiveScrollbarStyle()],\n template: ListTemplate,\n dependencies: [],\n})\n\n/**\n * Fired when selection is changed by user interaction\n *\n * @public\n * @param {Array<UDExListItemBase>} listItems All items inside the list\n * @param {Array<UDExListItemBase>} selectedItems Currently selected items\n * @param {HTMLElement} item The item that triggered the event\n */\n@event(\"selection-change\", { bubbles: true })\n\nclass UDExList extends UI5Element {\n eventDetails!: {\n \"selection-change\": UDExListSelectionChangeEventDetail\n };\n /**\n * Defines the accessible role of the component.\n *\n * @default \"listbox\"\n * @public\n */\n @property()\n accessibleRole: string = \"listbox\";\n\n /**\n * Defines the accessible name of the component.\n *\n * @default \"\"\n * @public\n */\n @property()\n accessibleName: string = \"\";\n\n /**\n * Defines the mode of the component.\n *\n * @default \"SingleSelect\"\n * @public\n */\n @property()\n mode: `${UDExListMode}` = UDExListMode.SingleSelect;\n\n /**\n * Defines the type of the item.\n *\n * @default \"None\"\n * @public\n */\n @property()\n type: `${UDExListStyleType}` = UDExListStyleType.None;\n\n /**\n * Allows control over the height.\n *\n * @public\n */\n @property({ type: String })\n height?: string;\n\n /**\n * Defines the controlled of the component.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n controlled?: boolean;\n\n /**\n * Defines the headerText, displayed in the top of the list.\n *\n * @public\n */\n @property({ type: String })\n headerText?: string;\n\n /**\n * Defines the name of the UI5 Icon, that will be displayed for each item of the list.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n itemIcon: string = \"\";\n\n /**\n * Enables tab navigation for the list.\n *\n * @default \"\"\n * @public\n */\n @property({ type: Boolean })\n tabNavigationEnabled?: boolean;\n\n /**\n * Slot for list items.\n *\n * @slot items\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true })\n items!: DefaultSlot<UDExListItemBase>;\n\n /**\n * Defines the scroll behavior for the items of the component.\n *\n * @default undefined\n * @private\n */\n @property()\n _scrollIntoView?: `${UDExScrollIntoViewOptions}`;\n\n _focusHandler: UDExListWithFirstLetterFocus = new UDExFirstLetterFocusHandler();\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n onBeforeRendering(): void {\n this.prepareListItemsMode();\n this._focusHandler.resetMatchingItems();\n this._focusHandler._focusableListItems = this.getKeyboardNavigationItems();\n }\n\n handleItemPress(e: CustomEvent): void {\n const clickedItem: UDExListItemBase = e.detail.item;\n this.onItemPress(clickedItem);\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n if (this.tabNavigationEnabled) {\n return;\n }\n\n if (isRight(e)) {\n this.handleArrowRight(e);\n }\n\n if (isLeft(e)) {\n this.handleArrowLeft(e);\n }\n\n if (isUp(e)) {\n this.handleUpArrow(e);\n }\n if (isDown(e)) {\n this.handleDownArrow(e);\n }\n if (isHome(e)) {\n this.handleHomeKey(e);\n }\n if (isEnd(e)) {\n this.handleEndKey(e);\n }\n if (isLetterKey(e.key)) {\n this.handleLetterKey(e);\n }\n }\n\n handleArrowRight(e: KeyboardEvent): void {\n const target = e.target as UDExListItemBase;\n if ((target.tagName === \"UDEX-LIST-GROUP-HEADER\" || target.tagName === \"UDEX-LIST-ITEM\") && target.hasAttribute(\"collapsible\")) {\n target.collapsed = false;\n this.setCollapsedItems(false, target);\n }\n }\n\n handleArrowLeft(e: KeyboardEvent): void {\n const target = e.target as UDExListItemBase;\n if ((target.tagName === \"UDEX-LIST-GROUP-HEADER\" || target.tagName === \"UDEX-LIST-ITEM\") && target.hasAttribute(\"collapsible\")) {\n target.collapsed = true;\n this.setCollapsedItems(true, target);\n }\n }\n\n handleUpArrow(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n const lastItemIndex = items.length - 1;\n const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;\n const isHeaderItem = items[previousSelectIndex].isGroup;\n const nonInteractiveHeader = items[previousSelectIndex].nonInteractive && !items[previousSelectIndex].collapsible;\n\n if (nonInteractiveHeader && previousSelectIndex === 0) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, lastItemIndex);\n if (this._scrollIntoView) {\n this.scrollToItem(items[lastItemIndex]);\n }\n items[lastItemIndex].focus();\n return;\n }\n\n if (nonInteractiveHeader) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, previousSelectIndex - 1);\n if (this._scrollIntoView) {\n this.scrollToItem(items[previousSelectIndex - 1]);\n }\n items[previousSelectIndex - 1].focus();\n return;\n }\n\n if (isHeaderItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, previousSelectIndex);\n if (this._scrollIntoView) {\n this.scrollToItem(items[previousSelectIndex]);\n }\n this.focusHeader(items[previousSelectIndex]);\n return;\n }\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[previousSelectIndex].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, previousSelectIndex);\n setTimeout(() => {\n if (this._scrollIntoView) {\n this.scrollToItem(items[previousSelectIndex]);\n }\n items[previousSelectIndex].focus();\n }, 0);\n }\n\n handleDownArrow(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n const nextSelectIndex = currentSelectedIndex + 1 > items.length - 1 ? 0 : currentSelectedIndex + 1;\n const isHeaderItem = items[nextSelectIndex].isGroup;\n const nonInteractiveHeader = items[nextSelectIndex].nonInteractive && !items[nextSelectIndex].collapsible;\n\n if (nonInteractiveHeader) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, nextSelectIndex + 1);\n if (this._scrollIntoView) {\n this.scrollToItem(items[nextSelectIndex + 1]);\n }\n items[nextSelectIndex + 1].focus();\n return;\n }\n\n if (isHeaderItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, nextSelectIndex);\n if (this._scrollIntoView) {\n this.scrollToItem(items[nextSelectIndex]);\n }\n this.focusHeader(items[nextSelectIndex]);\n return;\n }\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[nextSelectIndex].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, nextSelectIndex);\n setTimeout(() => {\n if (this._scrollIntoView) {\n this.scrollToItem(items[nextSelectIndex]);\n }\n items[nextSelectIndex].focus();\n }, 0);\n }\n\n handleHomeKey(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n const firstItem = items[0];\n const isHeaderItem = firstItem.isGroup;\n const nonInteractiveItem = firstItem.nonInteractive && !firstItem.collapsible;\n\n if (nonInteractiveItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, 1);\n items[1].focus();\n return;\n }\n\n if (isHeaderItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, 0);\n this.focusHeader(items[0]);\n return;\n }\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[0].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, 0);\n items[0].focus();\n }\n\n handleEndKey(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[items.length - 1].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, items.length - 1);\n items[items.length - 1].focus();\n }\n\n handleLetterKey(e: KeyboardEvent): void {\n const letterKey = e.key;\n e.preventDefault();\n this._focusHandler.focusMatchingListItem(letterKey);\n }\n\n onItemPress(clickedItem: UDExListItemBase): void {\n if (this.modeSingleSelect && !this.controlled) {\n this.revertSelectedItems(this.getSelectedItems());\n clickedItem.selected = true;\n }\n\n if (this.modeRadioGroup && !this.controlled) {\n const groupHeader = clickedItem.parentElement as UDExListGroupHeaderBase;\n const groupItems = groupHeader.getItems() as Array<UDExListItemBase>;\n this.revertSelectedItems(groupItems);\n clickedItem.selected = true;\n }\n\n if (!this.tabNavigationEnabled) {\n this.resetTabIndexes();\n clickedItem._tabIndex = \"0\";\n }\n\n this.fireDecoratorEvent(\"selection-change\", {\n listItems: this.getItemsFromList(),\n selectedItems: this.getSelectedItems(),\n item: clickedItem,\n });\n }\n\n revertSelectedItems(items: Array<UDExListItemBase>): void {\n items.forEach((item: UDExListItemBase) => {\n if (!item.disabled) {\n item.selected = false;\n }\n });\n }\n\n focusSelectedItem(): void {\n const selectedItemIndex = this.items.findIndex(item => item.selected);\n this.resetTabIndexes();\n if (selectedItemIndex !== -1 && this.modeSingleSelect) {\n this.setTabIndexByIndex(this.items, selectedItemIndex);\n }\n }\n\n focusHeader(item: UDExListItemBase): void {\n const header = item.shadowRoot?.querySelector(\".udex-list__group-header-wrap\") as HTMLElement;\n header.focus();\n }\n\n scrollToItem(item: UDExListItemBase): void {\n item.scrollIntoView({ block: this._scrollIntoView?.toLowerCase() as ScrollLogicalPosition });\n }\n\n unsetTabIndexByIndex(items: UDExListItemBase[], index: number): void {\n items[index]._tabIndex = \"-1\";\n }\n\n setTabIndexByIndex(items: UDExListItemBase[], index: number): void {\n items[index]._tabIndex = \"0\";\n }\n\n getItems(): Array<UDExListItemBase> {\n return this.getSlottedNodes<UDExListItemBase>(\"items\");\n }\n\n getSelectedItems(): Array<UDExListItemBase> {\n return this.getItemsFromList().filter(item => item.selected);\n }\n\n getCurrentIndex(items: Array<UDExListItemBase | HTMLElement>, item: UDExListItemBase | HTMLElement): number {\n return items.indexOf(item);\n }\n\n getKeyboardNavigationItems(): Array<UDExListItemBase> {\n return this.getItemsFromList().filter(item => {\n const parent = item.parentElement as UDExListItemBase;\n return !item.disabled\n && (!item.isGroup || item.modeMultiSelect || item.collapsible)\n && !(parent?.isGroup && parent.collapsed);\n });\n }\n\n getItemsFromList(): Array<UDExListItemBase> {\n const items: UDExListItemBase[] = [];\n const slottedItems = this.getItems();\n\n slottedItems.forEach(item => {\n const childItems = item.isGroup ? item.children : [];\n items.push(item, ...childItems as UDExListItemBase[]);\n });\n\n return items;\n }\n\n prepareListItemsMode(): void {\n this.getItemsFromList().forEach((item, index) => {\n item.mode = this.mode;\n item.controlled = this.controlled;\n item.type = this.type;\n item._icon = this.itemIcon;\n item._tabIndex = this.getTabIndex(index, item);\n });\n }\n\n getTabIndex(index: number, item: UDExListItemBase): string {\n if (this.tabNavigationEnabled) {\n return \"0\";\n }\n\n const isFirstItem = this.modeSelected && index === 0;\n const isFirstItemInGroupList = this.isGroupList && index === 1;\n const listGroupHeader = item.closest(\"[udex-list-group-header]\") as UDExListGroupHeader;\n const modeSingleOrRadio = this.modeSingleSelect || this.modeRadioGroup;\n const isFirstHeader = item.isGroup && isFirstItem;\n const isFirstHeaderMultiMode = isFirstHeader && this.modeMultiSelect && !item.nonInteractive;\n const isFirstItemGroupSingleOrRadioMode = isFirstItemInGroupList && modeSingleOrRadio;\n const isFirstItemGroupMultiMode = isFirstItemInGroupList && this.modeMultiSelect && listGroupHeader?.nonInteractive;\n const isCollapsibleHeader = item.isGroup && item.collapsible;\n\n if (isFirstHeaderMultiMode || isFirstItemGroupSingleOrRadioMode || isFirstItemGroupMultiMode || isFirstItem || isCollapsibleHeader) {\n return \"0\";\n }\n\n return \"-1\";\n }\n\n resetTabIndexes(): void {\n this.getItemsFromList().forEach(item => {\n item._tabIndex = \"-1\";\n });\n }\n\n setCollapsedItems(collapsed: boolean, target: UDExListItemBase): void {\n const items = target.getSlottedNodes<UDExListItemBase>(\"items\");\n items.forEach(item => {\n if (collapsed) {\n item.setAttribute(\"collapsed\", \"\");\n } else {\n item.removeAttribute(\"collapsed\");\n }\n });\n }\n\n get isGroupList(): boolean {\n return this.getItemsFromList().some(item => item.isGroup);\n }\n\n get ariaLabelModeText(): string {\n const defaultText = this.modeSingleSelect || this.modeRadioGroup\n ? ARIA_LABEL_LIST_SELECTABLE\n : ARIA_LABEL_LIST_MULTISELECTABLE;\n\n return this.accessibleName || translate(UDExList, defaultText);\n }\n\n get ariaLabelledBy(): string {\n return `${this._id}-mode-label`;\n }\n\n get singleContentAriaLabel(): string | undefined {\n const label = this.accessibleName || this.headerText;\n return label || undefined;\n }\n\n get modeRadioGroup(): boolean {\n return this.mode === UDExListMode.RadioGroup;\n }\n\n get modeMultiSelect(): boolean {\n return this.mode === UDExListMode.MultiSelect;\n }\n\n get modeSingleSelect(): boolean {\n return this.mode === UDExListMode.SingleSelect;\n }\n\n get modeSingleContent(): boolean {\n return this.mode === UDExListMode.SingleContent;\n }\n\n get modeSelected(): boolean {\n return [UDExListMode.SingleSelect, UDExListMode.MultiSelect, UDExListMode.RadioGroup].includes(this.mode as UDExListMode);\n }\n\n get holderHeight(): string {\n return this.height ? this.height : \"auto\";\n }\n}\n\nUDExList.define();\n\nexport default UDExList;\nexport type { UDExListSelectionChangeEventDetail };\n"]}
|
|
1
|
+
{"version":3,"file":"List.js","sourceRoot":"","sources":["../src/List.ts"],"names":[],"mappings":"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","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { DefaultSlot } from \"@ui5/webcomponents-base/dist/UI5Element.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 litRender from \"@ui5/webcomponents-base/dist/renderer/LitRenderer.js\";\nimport {\n isUp, isDown, isHome, isEnd, isRight, isLeft,\n} from \"@ui5/webcomponents-base/dist/Keys.js\";\nimport type UDExListItem from \"./ListItem.js\";\nimport type { UDExScrollIntoViewOptions } from \"./types/List.js\";\nimport { UDExListStyleType, UDExListMode } from \"./types/List.js\";\nimport type UDExListGroupHeader from \"./ListGroupHeader.js\";\nimport type UDExListGroupHeaderBase from \"./ListGroupHeaderBase.js\";\nimport type UDExUploadItem from \"./UploadItem.js\";\nimport i18n from \"@ui5/webcomponents-base/dist/decorators/i18n.js\";\nimport type I18nBundle from \"@ui5/webcomponents-base/dist/i18nBundle.js\";\nimport { ARIA_LABEL_LIST_MULTISELECTABLE, ARIA_LABEL_LIST_SELECTABLE } from \"./generated/i18n/i18n-defaults.js\";\nimport ListTemplate from \"./generated/templates/ListTemplate.lit.js\";\nimport translate from \"./utils/translate.js\";\n\n// Styles\nimport ListCss from \"./generated/themes/List.css.js\";\nimport isLetterKey from \"./utils/isLetterKeyPressed.js\";\nimport type { UDExListWithFirstLetterFocus } from \"./utils/ListWithFirstLetterFocus.js\";\nimport UDExFirstLetterFocusHandler from \"./utils/ListWithFirstLetterFocus.js\";\nimport getEffectiveScrollbarStyle from \"./utils/getEffectiveScrollbarStyle.js\";\n\nexport type UDExListItemBase = UDExListItem & UDExListGroupHeader & UDExUploadItem;\n\ntype UDExListSelectionChangeEventDetail = {\n listItems: Array<UDExListItemBase>,\n selectedItems: Array<UDExListItemBase>,\n item: HTMLElement,\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-list</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/List.js\";</code>\n *\n * @constructor\n * @author SAP SE\n * @extends UI5Element\n * @tagname udex-list\n * @public\n */\n@customElement({\n tag: \"udex-list\",\n renderer: litRender,\n styles: [ListCss, getEffectiveScrollbarStyle()],\n template: ListTemplate,\n dependencies: [],\n})\n\n/**\n * Fired when selection is changed by user interaction\n *\n * @public\n * @param {Array<UDExListItemBase>} listItems All items inside the list\n * @param {Array<UDExListItemBase>} selectedItems Currently selected items\n * @param {HTMLElement} item The item that triggered the event\n */\n@event(\"selection-change\", { bubbles: true })\n\nclass UDExList extends UI5Element {\n eventDetails!: {\n \"selection-change\": UDExListSelectionChangeEventDetail\n };\n /**\n * Defines the accessible role of the component.\n *\n * @default \"listbox\"\n * @public\n */\n @property()\n accessibleRole: string = \"listbox\";\n\n /**\n * Defines the accessible name of the component.\n *\n * @default \"\"\n * @public\n */\n @property()\n accessibleName: string = \"\";\n\n /**\n * Defines the mode of the component.\n *\n * @default \"SingleSelect\"\n * @public\n */\n @property()\n mode: `${UDExListMode}` = UDExListMode.SingleSelect;\n\n /**\n * Defines the type of the item.\n *\n * @default \"None\"\n * @public\n */\n @property()\n type: `${UDExListStyleType}` = UDExListStyleType.None;\n\n /**\n * Allows control over the height.\n *\n * @public\n */\n @property({ type: String })\n height?: string;\n\n /**\n * Defines the controlled of the component.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n controlled?: boolean;\n\n /**\n * Defines the headerText, displayed in the top of the list.\n *\n * @public\n */\n @property({ type: String })\n headerText?: string;\n\n /**\n * Defines the name of the UI5 Icon, that will be displayed for each item of the list.\n *\n * @default \"\"\n * @public\n */\n @property({ type: String })\n itemIcon: string = \"\";\n\n /** @deprecated Tab keyboard navigation is no longer allowed. */\n @property({ type: Boolean })\n tabNavigationEnabled?: boolean;\n\n /**\n * Slot for list items.\n *\n * @slot items\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true })\n items!: DefaultSlot<UDExListItemBase>;\n\n /**\n * Defines the scroll behavior for the items of the component.\n *\n * @default undefined\n * @private\n */\n @property()\n _scrollIntoView?: `${UDExScrollIntoViewOptions}`;\n\n _focusHandler: UDExListWithFirstLetterFocus = new UDExFirstLetterFocusHandler();\n\n @i18n(\"@sapudex/web-components\")\n static i18nBundle: I18nBundle;\n\n onBeforeRendering(): void {\n this.prepareListItemsMode();\n this._focusHandler.resetMatchingItems();\n this._focusHandler._focusableListItems = this.getKeyboardNavigationItems();\n }\n\n handleItemPress(e: CustomEvent): void {\n const clickedItem: UDExListItemBase = e.detail.item;\n this.onItemPress(clickedItem);\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n if (isRight(e)) {\n this.handleArrowRight(e);\n }\n\n if (isLeft(e)) {\n this.handleArrowLeft(e);\n }\n\n if (isUp(e)) {\n this.handleUpArrow(e);\n }\n if (isDown(e)) {\n this.handleDownArrow(e);\n }\n if (isHome(e)) {\n this.handleHomeKey(e);\n }\n if (isEnd(e)) {\n this.handleEndKey(e);\n }\n if (isLetterKey(e.key)) {\n this.handleLetterKey(e);\n }\n }\n\n handleArrowRight(e: KeyboardEvent): void {\n const target = e.target as UDExListItemBase;\n if ((target.tagName === \"UDEX-LIST-GROUP-HEADER\" || target.tagName === \"UDEX-LIST-ITEM\") && target.hasAttribute(\"collapsible\")) {\n target.collapsed = false;\n this.setCollapsedItems(false, target);\n }\n }\n\n handleArrowLeft(e: KeyboardEvent): void {\n const target = e.target as UDExListItemBase;\n if ((target.tagName === \"UDEX-LIST-GROUP-HEADER\" || target.tagName === \"UDEX-LIST-ITEM\") && target.hasAttribute(\"collapsible\")) {\n target.collapsed = true;\n this.setCollapsedItems(true, target);\n }\n }\n\n handleUpArrow(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n const lastItemIndex = items.length - 1;\n const previousSelectIndex = currentSelectedIndex - 1 < 0 ? lastItemIndex : currentSelectedIndex - 1;\n const isHeaderItem = items[previousSelectIndex].isGroup;\n const nonInteractiveHeader = items[previousSelectIndex].nonInteractive && !items[previousSelectIndex].collapsible;\n\n if (nonInteractiveHeader && previousSelectIndex === 0) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, lastItemIndex);\n if (this._scrollIntoView) {\n this.scrollToItem(items[lastItemIndex]);\n }\n items[lastItemIndex].focus();\n return;\n }\n\n if (nonInteractiveHeader) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, previousSelectIndex - 1);\n if (this._scrollIntoView) {\n this.scrollToItem(items[previousSelectIndex - 1]);\n }\n items[previousSelectIndex - 1].focus();\n return;\n }\n\n if (isHeaderItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, previousSelectIndex);\n if (this._scrollIntoView) {\n this.scrollToItem(items[previousSelectIndex]);\n }\n this.focusHeader(items[previousSelectIndex]);\n return;\n }\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[previousSelectIndex].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, previousSelectIndex);\n setTimeout(() => {\n if (this._scrollIntoView) {\n this.scrollToItem(items[previousSelectIndex]);\n }\n items[previousSelectIndex].focus();\n }, 0);\n }\n\n handleDownArrow(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n const nextSelectIndex = currentSelectedIndex + 1 > items.length - 1 ? 0 : currentSelectedIndex + 1;\n const isHeaderItem = items[nextSelectIndex].isGroup;\n const nonInteractiveHeader = items[nextSelectIndex].nonInteractive && !items[nextSelectIndex].collapsible;\n\n if (nonInteractiveHeader) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, nextSelectIndex + 1);\n if (this._scrollIntoView) {\n this.scrollToItem(items[nextSelectIndex + 1]);\n }\n items[nextSelectIndex + 1].focus();\n return;\n }\n\n if (isHeaderItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, nextSelectIndex);\n if (this._scrollIntoView) {\n this.scrollToItem(items[nextSelectIndex]);\n }\n this.focusHeader(items[nextSelectIndex]);\n return;\n }\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[nextSelectIndex].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, nextSelectIndex);\n setTimeout(() => {\n if (this._scrollIntoView) {\n this.scrollToItem(items[nextSelectIndex]);\n }\n items[nextSelectIndex].focus();\n }, 0);\n }\n\n handleHomeKey(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n const firstItem = items[0];\n const isHeaderItem = firstItem.isGroup;\n const nonInteractiveItem = firstItem.nonInteractive && !firstItem.collapsible;\n\n if (nonInteractiveItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, 1);\n items[1].focus();\n return;\n }\n\n if (isHeaderItem) {\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, 0);\n this.focusHeader(items[0]);\n return;\n }\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[0].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, 0);\n items[0].focus();\n }\n\n handleEndKey(e: KeyboardEvent): void {\n e.preventDefault();\n const items = this.getKeyboardNavigationItems();\n const currentSelectedIndex = this.getCurrentIndex(items, e.target as UDExListItemBase);\n\n if (this.modeRadioGroup) {\n items[currentSelectedIndex].selected = false;\n items[items.length - 1].selected = true;\n }\n\n this.unsetTabIndexByIndex(items, currentSelectedIndex);\n this.setTabIndexByIndex(items, items.length - 1);\n items[items.length - 1].focus();\n }\n\n handleLetterKey(e: KeyboardEvent): void {\n const letterKey = e.key;\n e.preventDefault();\n this._focusHandler.focusMatchingListItem(letterKey);\n }\n\n onItemPress(clickedItem: UDExListItemBase): void {\n if (this.modeSingleSelect && !this.controlled) {\n this.revertSelectedItems(this.getSelectedItems());\n clickedItem.selected = true;\n }\n\n if (this.modeRadioGroup && !this.controlled) {\n const groupHeader = clickedItem.parentElement as UDExListGroupHeaderBase;\n const groupItems = groupHeader.getItems() as Array<UDExListItemBase>;\n this.revertSelectedItems(groupItems);\n clickedItem.selected = true;\n }\n\n this.resetTabIndexes();\n clickedItem._tabIndex = \"0\";\n\n this.fireDecoratorEvent(\"selection-change\", {\n listItems: this.getItemsFromList(),\n selectedItems: this.getSelectedItems(),\n item: clickedItem,\n });\n }\n\n revertSelectedItems(items: Array<UDExListItemBase>): void {\n items.forEach((item: UDExListItemBase) => {\n if (!item.disabled) {\n item.selected = false;\n }\n });\n }\n\n focusSelectedItem(): void {\n const selectedItemIndex = this.items.findIndex(item => item.selected);\n this.resetTabIndexes();\n if (selectedItemIndex !== -1 && this.modeSingleSelect) {\n this.setTabIndexByIndex(this.items, selectedItemIndex);\n }\n }\n\n focusHeader(item: UDExListItemBase): void {\n const header = item.shadowRoot?.querySelector(\".udex-list__group-header-wrap\") as HTMLElement;\n header.focus();\n }\n\n scrollToItem(item: UDExListItemBase): void {\n item.scrollIntoView({ block: this._scrollIntoView?.toLowerCase() as ScrollLogicalPosition });\n }\n\n unsetTabIndexByIndex(items: UDExListItemBase[], index: number): void {\n items[index]._tabIndex = \"-1\";\n }\n\n setTabIndexByIndex(items: UDExListItemBase[], index: number): void {\n items[index]._tabIndex = \"0\";\n }\n\n getItems(): Array<UDExListItemBase> {\n return this.getSlottedNodes<UDExListItemBase>(\"items\");\n }\n\n getSelectedItems(): Array<UDExListItemBase> {\n return this.getItemsFromList().filter(item => item.selected);\n }\n\n getCurrentIndex(items: Array<UDExListItemBase | HTMLElement>, item: UDExListItemBase | HTMLElement): number {\n return items.indexOf(item);\n }\n\n getKeyboardNavigationItems(): Array<UDExListItemBase> {\n return this.getItemsFromList().filter(item => {\n const parent = item.parentElement as UDExListItemBase;\n return !item.disabled\n && (!item.isGroup || item.modeMultiSelect || item.collapsible)\n && !(parent?.isGroup && parent.collapsed);\n });\n }\n\n getItemsFromList(): Array<UDExListItemBase> {\n const items: UDExListItemBase[] = [];\n const slottedItems = this.getItems();\n\n slottedItems.forEach(item => {\n const childItems = item.isGroup ? item.children : [];\n items.push(item, ...childItems as UDExListItemBase[]);\n });\n\n return items;\n }\n\n prepareListItemsMode(): void {\n this.getItemsFromList().forEach((item, index) => {\n item.mode = this.mode;\n item.controlled = this.controlled;\n item.type = this.type;\n item._icon = this.itemIcon;\n item._tabIndex = this.getTabIndex(index, item);\n });\n }\n\n getTabIndex(index: number, item: UDExListItemBase): string {\n const isFirstItem = this.modeSelected && index === 0;\n const isFirstItemInGroupList = this.isGroupList && index === 1;\n const listGroupHeader = item.closest(\"[udex-list-group-header]\") as UDExListGroupHeader;\n const modeSingleOrRadio = this.modeSingleSelect || this.modeRadioGroup;\n const isFirstHeader = item.isGroup && isFirstItem;\n const isFirstHeaderMultiMode = isFirstHeader && this.modeMultiSelect && !item.nonInteractive;\n const isFirstItemGroupSingleOrRadioMode = isFirstItemInGroupList && modeSingleOrRadio;\n const isFirstItemGroupMultiMode = isFirstItemInGroupList && this.modeMultiSelect && listGroupHeader?.nonInteractive;\n const isCollapsibleHeader = item.isGroup && item.collapsible;\n\n if (isFirstHeaderMultiMode || isFirstItemGroupSingleOrRadioMode || isFirstItemGroupMultiMode || isFirstItem || isCollapsibleHeader) {\n return \"0\";\n }\n\n return \"-1\";\n }\n\n resetTabIndexes(): void {\n this.getItemsFromList().forEach(item => {\n item._tabIndex = \"-1\";\n });\n }\n\n setCollapsedItems(collapsed: boolean, target: UDExListItemBase): void {\n const items = target.getSlottedNodes<UDExListItemBase>(\"items\");\n items.forEach(item => {\n if (collapsed) {\n item.setAttribute(\"collapsed\", \"\");\n } else {\n item.removeAttribute(\"collapsed\");\n }\n });\n }\n\n get isGroupList(): boolean {\n return this.getItemsFromList().some(item => item.isGroup);\n }\n\n get ariaLabelModeText(): string {\n const defaultText = this.modeSingleSelect || this.modeRadioGroup\n ? ARIA_LABEL_LIST_SELECTABLE\n : ARIA_LABEL_LIST_MULTISELECTABLE;\n\n return this.accessibleName || translate(UDExList, defaultText);\n }\n\n get ariaLabelledBy(): string {\n return `${this._id}-mode-label`;\n }\n\n get singleContentAriaLabel(): string | undefined {\n const label = this.accessibleName || this.headerText;\n return label || undefined;\n }\n\n get modeRadioGroup(): boolean {\n return this.mode === UDExListMode.RadioGroup;\n }\n\n get modeMultiSelect(): boolean {\n return this.mode === UDExListMode.MultiSelect;\n }\n\n get modeSingleSelect(): boolean {\n return this.mode === UDExListMode.SingleSelect;\n }\n\n get modeSingleContent(): boolean {\n return this.mode === UDExListMode.SingleContent;\n }\n\n get modeSelected(): boolean {\n return [UDExListMode.SingleSelect, UDExListMode.MultiSelect, UDExListMode.RadioGroup].includes(this.mode as UDExListMode);\n }\n\n get holderHeight(): string {\n return this.height ? this.height : \"auto\";\n }\n}\n\nUDExList.define();\n\nexport default UDExList;\nexport type { UDExListSelectionChangeEventDetail };\n"]}
|
|
@@ -110,6 +110,13 @@ declare class UDExMastheadCountrySelector extends UI5Element {
|
|
|
110
110
|
* @public
|
|
111
111
|
*/
|
|
112
112
|
showSearchVoiceButton: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Hides the search field in the country list view.
|
|
115
|
+
*
|
|
116
|
+
* @default false
|
|
117
|
+
* @public
|
|
118
|
+
*/
|
|
119
|
+
hideSearch: boolean;
|
|
113
120
|
/**
|
|
114
121
|
* Defines the language voice of the search
|
|
115
122
|
*
|
|
@@ -363,6 +363,9 @@ __decorate([
|
|
|
363
363
|
__decorate([
|
|
364
364
|
property({ type: Boolean })
|
|
365
365
|
], UDExMastheadCountrySelector.prototype, "showSearchVoiceButton", void 0);
|
|
366
|
+
__decorate([
|
|
367
|
+
property({ type: Boolean })
|
|
368
|
+
], UDExMastheadCountrySelector.prototype, "hideSearch", void 0);
|
|
366
369
|
__decorate([
|
|
367
370
|
property()
|
|
368
371
|
], UDExMastheadCountrySelector.prototype, "languageVoice", void 0);
|