@sapudex/web-components 2.61.0 → 2.63.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/AccordionSpotlight.cy.tsx +43 -2
- package/cypress/specs/Carousel.cy.tsx +88 -0
- package/cypress/specs/CountrySelector.cy.tsx +233 -6
- package/cypress/specs/FilterMenu.cy.tsx +39 -45
- package/cypress/specs/List.cy.tsx +624 -10
- package/cypress/specs/ListItem.cy.tsx +50 -0
- package/cypress/specs/MastheadCountrySelector.cy.tsx +177 -0
- package/cypress/specs/SelectBox.cy.tsx +239 -131
- package/cypress/specs/SelectBoxAccessibility.cy.tsx +3109 -0
- package/cypress/specs/SideNavigation.cy.tsx +49 -0
- package/cypress/specs/SideNavigationMobile.cy.tsx +69 -0
- package/cypress/specs/TagGroup.cy.tsx +168 -0
- package/cypress/support/component-imports.instrumented.ts +4 -0
- package/cypress/support/component-imports.src.ts +4 -0
- package/dist/AccordionItemTemplate.js +1 -1
- package/dist/AccordionItemTemplate.js.map +1 -1
- package/dist/AccordionSpotlight.d.ts +7 -2
- package/dist/AccordionSpotlight.js +31 -6
- package/dist/AccordionSpotlight.js.map +1 -1
- package/dist/AccordionSpotlightItem.d.ts +3 -1
- package/dist/AccordionSpotlightItem.js +3 -1
- package/dist/AccordionSpotlightItem.js.map +1 -1
- package/dist/Carousel.d.ts +1 -0
- package/dist/Carousel.js +19 -3
- package/dist/Carousel.js.map +1 -1
- package/dist/CountrySelector.js +1 -3
- package/dist/CountrySelector.js.map +1 -1
- package/dist/List.d.ts +2 -0
- package/dist/List.js +22 -4
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +5 -1
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +2 -0
- package/dist/ListGroupHeaderBase.js +15 -2
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListGroupHeaderTemplate.js +14 -22
- package/dist/ListGroupHeaderTemplate.js.map +1 -1
- package/dist/ListItem.d.ts +1 -2
- package/dist/ListItem.js +14 -12
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +5 -0
- package/dist/ListItemBase.js +11 -1
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListItemTemplate.js +1 -1
- package/dist/ListItemTemplate.js.map +1 -1
- package/dist/ListSelectAllTemplate.js +1 -1
- package/dist/ListSelectAllTemplate.js.map +1 -1
- package/dist/ListTemplate.js +2 -1
- package/dist/ListTemplate.js.map +1 -1
- package/dist/MastheadCountrySelector.d.ts +14 -0
- package/dist/MastheadCountrySelector.js +6 -0
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MastheadCountrySelectorTemplate.js +1 -1
- package/dist/MastheadCountrySelectorTemplate.js.map +1 -1
- package/dist/MessageStrip.d.ts +1 -0
- package/dist/MessageStrip.js +6 -0
- package/dist/MessageStrip.js.map +1 -1
- package/dist/Search.d.ts +13 -3
- package/dist/Search.js +36 -11
- package/dist/Search.js.map +1 -1
- package/dist/SearchTemplate.js +1 -1
- package/dist/SearchTemplate.js.map +1 -1
- package/dist/SearchableListBase.d.ts +2 -0
- package/dist/SearchableListBase.js +13 -3
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +42 -33
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SelectBase.d.ts +18 -33
- package/dist/SelectBase.js +124 -139
- package/dist/SelectBase.js.map +1 -1
- package/dist/SelectBox.d.ts +3 -0
- package/dist/SelectBox.js +19 -7
- package/dist/SelectBox.js.map +1 -1
- package/dist/SelectBoxTemplate.js +3 -3
- package/dist/SelectBoxTemplate.js.map +1 -1
- package/dist/SideNavigation.d.ts +9 -0
- package/dist/SideNavigation.js +9 -0
- package/dist/SideNavigation.js.map +1 -1
- package/dist/SideNavigationItem.js +2 -0
- package/dist/SideNavigationItem.js.map +1 -1
- package/dist/SideNavigationItemTemplate.d.ts +2 -0
- package/dist/SideNavigationItemTemplate.js +15 -0
- package/dist/SideNavigationItemTemplate.js.map +1 -0
- package/dist/SideNavigationMobile.d.ts +19 -0
- package/dist/SideNavigationMobile.js +33 -3
- package/dist/SideNavigationMobile.js.map +1 -1
- package/dist/SideNavigationMobileTemplate.js +1 -2
- package/dist/SideNavigationMobileTemplate.js.map +1 -1
- package/dist/SideNavigationSubItem.d.ts +4 -1
- package/dist/SideNavigationSubItem.js +22 -10
- package/dist/SideNavigationSubItem.js.map +1 -1
- package/dist/SideNavigationSubItemTemplate.js +1 -2
- package/dist/SideNavigationSubItemTemplate.js.map +1 -1
- package/dist/SideNavigationTemplate.d.ts +2 -0
- package/dist/SideNavigationTemplate.js +6 -0
- package/dist/SideNavigationTemplate.js.map +1 -0
- package/dist/TagGroup.d.ts +3 -0
- package/dist/TagGroup.js +31 -0
- package/dist/TagGroup.js.map +1 -1
- package/dist/TagGroupTemplate.js +1 -1
- package/dist/TagGroupTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-1OnUn6pM.js → InputSuggestions-6S5UueXO.js} +2 -2
- package/dist/assets/{ListItemStandardExpandableTextTemplate-CoBAMp_v.js → ListItemStandardExpandableTextTemplate-OidrwM_d.js} +2 -2
- package/dist/assets/{bundle.esm-BqaVWFKf.js → bundle.esm-DaFsZANO.js} +237 -239
- package/dist/assets/messagebundle_ar-22dGHdkl.js +1 -0
- package/dist/assets/messagebundle_ar-DbxuUDUB.js +1 -0
- package/dist/assets/messagebundle_bg-CaaOz5e4.js +1 -0
- package/dist/assets/messagebundle_bg-QOUvq6-8.js +1 -0
- package/dist/assets/messagebundle_ca-D-8eSg1w.js +1 -0
- package/dist/assets/messagebundle_ca-jsUpFfNJ.js +1 -0
- package/dist/assets/messagebundle_cnr-BdSolJRo.js +1 -0
- package/dist/assets/messagebundle_cnr-rtr9Ox4O.js +1 -0
- package/dist/assets/messagebundle_cs-CbM7zJ23.js +1 -0
- package/dist/assets/messagebundle_cy-D5E7e9o1.js +1 -0
- package/dist/assets/messagebundle_cy-hajQLyoj.js +1 -0
- package/dist/assets/messagebundle_da-C3PD-hWQ.js +1 -0
- package/dist/assets/messagebundle_da-DFzvQYW2.js +1 -0
- package/dist/assets/messagebundle_de-C106E9io.js +1 -0
- package/dist/assets/messagebundle_de-C36z5lgV.js +1 -0
- package/dist/assets/messagebundle_el-BLHqa1_J.js +1 -0
- package/dist/assets/messagebundle_el-k8W9FVQI.js +1 -0
- package/dist/assets/messagebundle_en-ClXds397.js +1 -0
- package/dist/assets/messagebundle_en-DgPtAFO8.js +1 -0
- package/dist/assets/messagebundle_en_GB-DxulA9qE.js +1 -0
- package/dist/assets/messagebundle_en_GB-LxAIZigF.js +1 -0
- package/dist/assets/{messagebundle_en_US_sappsd-Se8GgI58.js → messagebundle_en_US_sappsd-TZz2y4pV.js} +1 -1
- package/dist/assets/messagebundle_en_US_sappsd-oE0A2op2.js +1 -0
- package/dist/assets/messagebundle_en_US_saprigi-C6FsbpF8.js +1 -0
- package/dist/assets/{messagebundle_en_US_saprigi-CbfvaHUL.js → messagebundle_en_US_saprigi-CkPhuOLS.js} +1 -1
- package/dist/assets/messagebundle_en_US_saptrc-CFSYKuS7.js +1 -0
- package/dist/assets/messagebundle_en_US_saptrc-CNZe1wPP.js +1 -0
- package/dist/assets/messagebundle_es-C3ijAvKG.js +1 -0
- package/dist/assets/messagebundle_es-wi4P-8Bo.js +1 -0
- package/dist/assets/messagebundle_es_MX-JEoOD2AD.js +1 -0
- package/dist/assets/messagebundle_es_MX-qDQ65ei9.js +1 -0
- package/dist/assets/messagebundle_et-C3wgDmm9.js +1 -0
- package/dist/assets/messagebundle_et-D4r4iubd.js +1 -0
- package/dist/assets/messagebundle_fi-BjyQcbRb.js +1 -0
- package/dist/assets/messagebundle_fi-CivJKH9k.js +1 -0
- package/dist/assets/messagebundle_fr-BxDSBfD5.js +1 -0
- package/dist/assets/messagebundle_fr-JN2VAe-b.js +1 -0
- package/dist/assets/messagebundle_fr_CA-FkrcsWH5.js +1 -0
- package/dist/assets/messagebundle_fr_CA-phd0XOeR.js +1 -0
- package/dist/assets/messagebundle_hi-B_pehoTp.js +1 -0
- package/dist/assets/messagebundle_hi-CVOoC3dA.js +1 -0
- package/dist/assets/messagebundle_hr-BYS-ya62.js +1 -0
- package/dist/assets/messagebundle_hr-DHuCJjK8.js +1 -0
- package/dist/assets/messagebundle_hu-Crn0Y1hl.js +1 -0
- package/dist/assets/messagebundle_hu-DJL3QHT4.js +1 -0
- package/dist/assets/messagebundle_id-BJEG-7Up.js +1 -0
- package/dist/assets/messagebundle_id-CgbG2IVb.js +1 -0
- package/dist/assets/messagebundle_it-B-E3gO1k.js +1 -0
- package/dist/assets/messagebundle_it-DHwy0JuE.js +1 -0
- package/dist/assets/messagebundle_iw-BFfL9nZy.js +1 -0
- package/dist/assets/messagebundle_iw-BgyHu_0a.js +1 -0
- package/dist/assets/messagebundle_ja-BDNEwBMO.js +1 -0
- package/dist/assets/messagebundle_ja-eyoqeb4r.js +1 -0
- package/dist/assets/messagebundle_kk-BA_1qhYv.js +1 -0
- package/dist/assets/messagebundle_kk-CTAXqbPN.js +1 -0
- package/dist/assets/messagebundle_ko-C1tsjQMn.js +1 -0
- package/dist/assets/messagebundle_ko-CkiNi7iV.js +1 -0
- package/dist/assets/messagebundle_lt-Dp0c8r7p.js +1 -0
- package/dist/assets/{messagebundle_lt-BGK5mpcm.js → messagebundle_lt-bNum-ekg.js} +1 -1
- package/dist/assets/messagebundle_lv-B9UWTGX9.js +1 -0
- package/dist/assets/messagebundle_lv-D02PBhtR.js +1 -0
- package/dist/assets/messagebundle_mk--Xt_Ciey.js +1 -0
- package/dist/assets/messagebundle_mk-D6s2Tr95.js +1 -0
- package/dist/assets/messagebundle_ms-BAqsvtp5.js +1 -0
- package/dist/assets/messagebundle_ms-BobJaFPp.js +1 -0
- package/dist/assets/messagebundle_nl-BJCykHj1.js +1 -0
- package/dist/assets/messagebundle_nl-Dj7LaMyb.js +1 -0
- package/dist/assets/messagebundle_no-CR_uQXUz.js +1 -0
- package/dist/assets/messagebundle_no-CnwJbEW8.js +1 -0
- package/dist/assets/messagebundle_pl-D6FQ-6EC.js +1 -0
- package/dist/assets/messagebundle_pl-eJC2NE6N.js +1 -0
- package/dist/assets/messagebundle_pt-CbdPbTKR.js +1 -0
- package/dist/assets/messagebundle_pt-n8LcOyWG.js +1 -0
- package/dist/assets/messagebundle_pt_PT-B17ziKL9.js +1 -0
- package/dist/assets/messagebundle_pt_PT-BVpS4lrC.js +1 -0
- package/dist/assets/messagebundle_ro-C0jrNva4.js +1 -0
- package/dist/assets/messagebundle_ro-ixITTbJt.js +1 -0
- package/dist/assets/messagebundle_ru-Bh6RMNe2.js +1 -0
- package/dist/assets/messagebundle_ru-Dbxms1Xm.js +1 -0
- package/dist/assets/messagebundle_sh-CMDXUWge.js +1 -0
- package/dist/assets/messagebundle_sh-Cb-sVI_0.js +1 -0
- package/dist/assets/messagebundle_sk-DZkkgRSd.js +1 -0
- package/dist/assets/{messagebundle_sk-CXOF1RuF.js → messagebundle_sk-Dqb_XwMg.js} +1 -1
- package/dist/assets/messagebundle_sl-DIl-2Lb1.js +1 -0
- package/dist/assets/messagebundle_sl-Dx6UWXni.js +1 -0
- package/dist/assets/messagebundle_sr-DstlyDjZ.js +1 -0
- package/dist/assets/messagebundle_sr-yQWBd9jR.js +1 -0
- package/dist/assets/messagebundle_sv-Dr2hDyEO.js +1 -0
- package/dist/assets/messagebundle_sv-iHKWgaRg.js +1 -0
- package/dist/assets/messagebundle_th-DbWfCb5y.js +1 -0
- package/dist/assets/messagebundle_th-yLU2SE6L.js +1 -0
- package/dist/assets/messagebundle_tr-CIoGg6uY.js +1 -0
- package/dist/assets/messagebundle_tr-lAQvvdUi.js +1 -0
- package/dist/assets/messagebundle_uk-DIBItAKu.js +1 -0
- package/dist/assets/messagebundle_uk-j_sqGY4D.js +1 -0
- package/dist/assets/messagebundle_vi-C40OW2eC.js +1 -0
- package/dist/assets/messagebundle_vi-xWTpoKPI.js +1 -0
- package/dist/assets/messagebundle_zh_CN-CmeOlVfl.js +1 -0
- package/dist/assets/messagebundle_zh_CN-U8Z0kuQb.js +1 -0
- package/dist/assets/messagebundle_zh_TW-B_1_vc8O.js +1 -0
- package/dist/assets/messagebundle_zh_TW-hwHN6ElU.js +1 -0
- package/dist/assets/{parameters-bundle.css-Cv89y49I.js → parameters-bundle.css-2ZsUlBNO.js} +299 -151
- package/dist/assets/parameters-bundle.css-31Bw5XOG.js +2 -0
- package/dist/assets/parameters-bundle.css-BJp4ZvSQ.js +2 -0
- package/dist/assets/{parameters-bundle.css-vNsSPPU5.js → parameters-bundle.css-BKlkVfkE.js} +742 -494
- package/dist/assets/parameters-bundle.css-BMOU75LU.js +2 -0
- package/dist/assets/parameters-bundle.css-BZF5sWSb.js +1 -0
- package/dist/assets/{parameters-bundle.css-DmEWEk0u.js → parameters-bundle.css-Bf1GOISM.js} +786 -513
- package/dist/assets/parameters-bundle.css-BpWLGMCI.js +2 -0
- package/dist/assets/parameters-bundle.css-BsoxE2UF.js +2 -0
- package/dist/assets/parameters-bundle.css-CAhrGUcA.js +2 -0
- package/dist/assets/{parameters-bundle.css-C3eDVARm.js → parameters-bundle.css-CDJt5bvS.js} +176 -89
- package/dist/assets/parameters-bundle.css-CIr3BQBD.js +2 -0
- package/dist/assets/parameters-bundle.css-CVUmNgQM.js +2 -0
- package/dist/assets/parameters-bundle.css-C_pu3Dce.js +2 -0
- package/dist/assets/parameters-bundle.css-ChtqHIDX.js +2 -0
- package/dist/assets/parameters-bundle.css-CvaMQVtq.js +1 -0
- package/dist/assets/parameters-bundle.css-Cwz89dEH.js +2 -0
- package/dist/assets/parameters-bundle.css-CyCovTbK.js +2 -0
- package/dist/assets/parameters-bundle.css-Cyf5K2-Q.js +2 -0
- package/dist/assets/parameters-bundle.css-DdDLbfHl.js +2 -0
- package/dist/assets/{parameters-bundle.css-C5V2Zp_F.js → parameters-bundle.css-Dfz9lgd6.js} +131 -95
- package/dist/assets/{parameters-bundle.css-K-MvKimD.js → parameters-bundle.css-DjW0INFD.js} +139 -88
- package/dist/assets/parameters-bundle.css-JyFiyY-_.js +2 -0
- package/dist/assets/parameters-bundle.css-tf-z7jv9.js +2 -0
- package/dist/css/themes/AccordionSpotlight.css +1 -1
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/css/themes/MastheadShell.css +1 -1
- package/dist/css/themes/SideNavigation.css +1 -1
- package/dist/css/themes/SideNavigationItem.css +1 -1
- package/dist/css/themes/SideNavigationMobile.css +1 -1
- package/dist/css/themes/SideNavigationSubItem.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/Table.css +1 -1
- package/dist/css/themes/sap_fiori_3/parameters-bundle.css +0 -1
- package/dist/css/themes/sap_glow/parameters-bundle.css +0 -1
- package/dist/css/themes/sap_horizon/parameters-bundle.css +0 -1
- package/dist/custom-elements-internal.json +1443 -7
- package/dist/custom-elements.json +1497 -28
- package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_glow/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
- package/dist/generated/i18n/i18n-defaults.js +2 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/AccordionSpotlight.css.d.ts +1 -1
- package/dist/generated/themes/AccordionSpotlight.css.js +1 -1
- package/dist/generated/themes/AccordionSpotlight.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/MastheadShell.css.d.ts +1 -1
- package/dist/generated/themes/MastheadShell.css.js +1 -1
- package/dist/generated/themes/MastheadShell.css.js.map +1 -1
- package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigation.css.js +1 -1
- package/dist/generated/themes/SideNavigation.css.js.map +1 -1
- package/dist/generated/themes/SideNavigationItem.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigationItem.css.js +1 -1
- package/dist/generated/themes/SideNavigationItem.css.js.map +1 -1
- package/dist/generated/themes/SideNavigationMobile.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigationMobile.css.js +1 -1
- package/dist/generated/themes/SideNavigationMobile.css.js.map +1 -1
- package/dist/generated/themes/SideNavigationSubItem.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigationSubItem.css.js +1 -1
- package/dist/generated/themes/SideNavigationSubItem.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.d.ts +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/Table.css.d.ts +1 -1
- package/dist/generated/themes/Table.css.js +1 -1
- package/dist/generated/themes/Table.css.js.map +1 -1
- package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_glow/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_glow/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_glow/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
- package/dist/messagebundle.properties +3 -0
- package/dist/vscode.html-custom-data.json +16 -6
- package/dist/web-types.json +41 -11
- package/package.json +8 -8
- package/src/AccordionItemTemplate.tsx +1 -0
- package/src/AccordionSpotlight.ts +35 -6
- package/src/AccordionSpotlightItem.ts +3 -1
- package/src/Carousel.ts +22 -3
- package/src/CountrySelector.ts +1 -3
- package/src/List.ts +21 -4
- package/src/ListGroupHeader.ts +5 -1
- package/src/ListGroupHeaderBase.ts +16 -2
- package/src/ListGroupHeaderTemplate.tsx +29 -47
- package/src/ListItem.ts +14 -13
- package/src/ListItemBase.ts +14 -1
- package/src/ListItemTemplate.tsx +4 -4
- package/src/ListSelectAllTemplate.tsx +10 -8
- package/src/ListTemplate.tsx +14 -10
- package/src/MastheadCountrySelector.ts +18 -0
- package/src/MastheadCountrySelectorTemplate.tsx +2 -0
- package/src/MessageStrip.ts +7 -0
- package/src/Search.ts +48 -13
- package/src/SearchTemplate.tsx +3 -1
- package/src/SearchableListBase.ts +15 -3
- package/src/SearchableListBaseTemplate.tsx +54 -39
- package/src/SelectBase.ts +130 -144
- package/src/SelectBox.ts +21 -7
- package/src/SelectBoxTemplate.tsx +10 -9
- package/src/SideNavigation.ts +17 -0
- package/src/SideNavigationItem.ts +2 -0
- package/src/SideNavigationItemTemplate.tsx +97 -0
- package/src/SideNavigationMobile.ts +53 -2
- package/src/SideNavigationMobileTemplate.tsx +3 -5
- package/src/SideNavigationSubItem.ts +19 -6
- package/src/SideNavigationSubItemTemplate.tsx +10 -7
- package/src/SideNavigationTemplate.tsx +17 -0
- package/src/TagGroup.ts +32 -0
- package/src/TagGroupTemplate.tsx +1 -1
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/themes/AccordionSpotlight.css.ts +1 -1
- package/src/generated/themes/ListGroupHeader.css.ts +1 -1
- package/src/generated/themes/MastheadShell.css.ts +1 -1
- package/src/generated/themes/SideNavigation.css.ts +1 -1
- package/src/generated/themes/SideNavigationItem.css.ts +1 -1
- package/src/generated/themes/SideNavigationMobile.css.ts +1 -1
- package/src/generated/themes/SideNavigationSubItem.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/Table.css.ts +1 -1
- package/src/generated/themes/sap_fiori_3/parameters-bundle.css.ts +1 -1
- package/src/generated/themes/sap_glow/parameters-bundle.css.ts +1 -1
- package/src/generated/themes/sap_horizon/parameters-bundle.css.ts +1 -1
- package/src/i18n/messagebundle.properties +3 -0
- package/src/themes/AccordionSpotlight.css +9 -9
- package/src/themes/ListGroupHeader.css +2 -43
- package/src/themes/MastheadShell.css +13 -1
- package/src/themes/SideNavigation.css +43 -8
- package/src/themes/SideNavigationItem.css +56 -6
- package/src/themes/SideNavigationMobile.css +62 -15
- package/src/themes/SideNavigationSubItem.css +14 -109
- package/src/themes/Slider.css +25 -11
- package/src/themes/Table.css +6 -1
- package/dist/assets/messagebundle_ar-C3EXytoC.js +0 -1
- package/dist/assets/messagebundle_ar-DmZrrjEF.js +0 -1
- package/dist/assets/messagebundle_bg-BaZ97Q_b.js +0 -1
- package/dist/assets/messagebundle_bg-CgU7GPvK.js +0 -1
- package/dist/assets/messagebundle_ca-BwjVUbUA.js +0 -1
- package/dist/assets/messagebundle_ca-YiUGbO_8.js +0 -1
- package/dist/assets/messagebundle_cnr-CN2hPZIN.js +0 -1
- package/dist/assets/messagebundle_cnr-zdEdPJvc.js +0 -1
- package/dist/assets/messagebundle_cs-CGbnEjza.js +0 -1
- package/dist/assets/messagebundle_cy-BF0YH9Iz.js +0 -1
- package/dist/assets/messagebundle_cy-CUiGsjO6.js +0 -1
- package/dist/assets/messagebundle_da-CWKLQJiq.js +0 -1
- package/dist/assets/messagebundle_da-bTkr4pUc.js +0 -1
- package/dist/assets/messagebundle_de-BmnClk4G.js +0 -1
- package/dist/assets/messagebundle_de-vB6qhgvG.js +0 -1
- package/dist/assets/messagebundle_el-DKdItEgW.js +0 -1
- package/dist/assets/messagebundle_el-Gv1Ly8aj.js +0 -1
- package/dist/assets/messagebundle_en-DbKo-Dkl.js +0 -1
- package/dist/assets/messagebundle_en-DcV886MF.js +0 -1
- package/dist/assets/messagebundle_en_GB-Be93_Z4H.js +0 -1
- package/dist/assets/messagebundle_en_GB-CFh7e8hQ.js +0 -1
- package/dist/assets/messagebundle_en_US_sappsd-HCarC-Yr.js +0 -1
- package/dist/assets/messagebundle_en_US_saprigi-CCHFk7YZ.js +0 -1
- package/dist/assets/messagebundle_en_US_saptrc-B8AIRzlo.js +0 -1
- package/dist/assets/messagebundle_en_US_saptrc-yJ3PcdEm.js +0 -1
- package/dist/assets/messagebundle_es-BH-a8BxO.js +0 -1
- package/dist/assets/messagebundle_es-Dt93wbGV.js +0 -1
- package/dist/assets/messagebundle_es_MX-BedlYlF3.js +0 -1
- package/dist/assets/messagebundle_es_MX-COPqooo9.js +0 -1
- package/dist/assets/messagebundle_et-BsYgDw46.js +0 -1
- package/dist/assets/messagebundle_et-UwpqUE-p.js +0 -1
- package/dist/assets/messagebundle_fi-BN3UWEz0.js +0 -1
- package/dist/assets/messagebundle_fi-Cwf7Puui.js +0 -1
- package/dist/assets/messagebundle_fr-43w09LAE.js +0 -1
- package/dist/assets/messagebundle_fr-CVRaf9_H.js +0 -1
- package/dist/assets/messagebundle_fr_CA-BM04X6xU.js +0 -1
- package/dist/assets/messagebundle_fr_CA-CdnVYumi.js +0 -1
- package/dist/assets/messagebundle_hi-DfeonbAH.js +0 -1
- package/dist/assets/messagebundle_hi-JRJlP9Uh.js +0 -1
- package/dist/assets/messagebundle_hr-CKOnn34q.js +0 -1
- package/dist/assets/messagebundle_hr-CbyIBlH3.js +0 -1
- package/dist/assets/messagebundle_hu-DF1gQudE.js +0 -1
- package/dist/assets/messagebundle_hu-D_IQ9kTy.js +0 -1
- package/dist/assets/messagebundle_id-B0K1usj4.js +0 -1
- package/dist/assets/messagebundle_id-gDJYoaGq.js +0 -1
- package/dist/assets/messagebundle_it-B80_R2Ih.js +0 -1
- package/dist/assets/messagebundle_it-CVqU4g6t.js +0 -1
- package/dist/assets/messagebundle_iw-BoelOIS4.js +0 -1
- package/dist/assets/messagebundle_iw-iMDtLxaa.js +0 -1
- package/dist/assets/messagebundle_ja-BlRbv4vb.js +0 -1
- package/dist/assets/messagebundle_ja-BrDH-19-.js +0 -1
- package/dist/assets/messagebundle_kk-C7VPek1-.js +0 -1
- package/dist/assets/messagebundle_kk-DhAT_bim.js +0 -1
- package/dist/assets/messagebundle_ko-CIqP8x6n.js +0 -1
- package/dist/assets/messagebundle_ko-DgD6uyZ5.js +0 -1
- package/dist/assets/messagebundle_lt-BV0kKrY0.js +0 -1
- package/dist/assets/messagebundle_lv-5IcjoxWD.js +0 -1
- package/dist/assets/messagebundle_lv-DDBi7iKe.js +0 -1
- package/dist/assets/messagebundle_mk-BUrn04sZ.js +0 -1
- package/dist/assets/messagebundle_mk-P5veRdg2.js +0 -1
- package/dist/assets/messagebundle_ms-9VDLR5en.js +0 -1
- package/dist/assets/messagebundle_ms-CB8sQUg2.js +0 -1
- package/dist/assets/messagebundle_nl-BaAgPO7h.js +0 -1
- package/dist/assets/messagebundle_nl-f1Up3dB9.js +0 -1
- package/dist/assets/messagebundle_no-C-_ldp7o.js +0 -1
- package/dist/assets/messagebundle_no-DRSqWQ-C.js +0 -1
- package/dist/assets/messagebundle_pl-BQoPaokq.js +0 -1
- package/dist/assets/messagebundle_pl-DBO1atMe.js +0 -1
- package/dist/assets/messagebundle_pt-BNEglYxa.js +0 -1
- package/dist/assets/messagebundle_pt-DgAMHmW-.js +0 -1
- package/dist/assets/messagebundle_pt_PT-BtYzp9KB.js +0 -1
- package/dist/assets/messagebundle_pt_PT-D1Ef8kUU.js +0 -1
- package/dist/assets/messagebundle_ro-CuDPp2fe.js +0 -1
- package/dist/assets/messagebundle_ro-D591wJ6f.js +0 -1
- package/dist/assets/messagebundle_ru-D0NridWi.js +0 -1
- package/dist/assets/messagebundle_ru-I8YLCfrn.js +0 -1
- package/dist/assets/messagebundle_sh-BswdbSRi.js +0 -1
- package/dist/assets/messagebundle_sh-Dw2y_oct.js +0 -1
- package/dist/assets/messagebundle_sk-BG4S4ZVk.js +0 -1
- package/dist/assets/messagebundle_sl-CAnJO_8X.js +0 -1
- package/dist/assets/messagebundle_sl-kpVWxIp_.js +0 -1
- package/dist/assets/messagebundle_sr-BTWvO8VQ.js +0 -1
- package/dist/assets/messagebundle_sr-VJmRSdj4.js +0 -1
- package/dist/assets/messagebundle_sv-B-RCgnW_.js +0 -1
- package/dist/assets/messagebundle_sv-Bd4wCcDb.js +0 -1
- package/dist/assets/messagebundle_th-CMHmLdI3.js +0 -1
- package/dist/assets/messagebundle_th-CZ1imsCy.js +0 -1
- package/dist/assets/messagebundle_tr-BfWAYIdW.js +0 -1
- package/dist/assets/messagebundle_tr-D-BnBirv.js +0 -1
- package/dist/assets/messagebundle_uk-DhxIThVl.js +0 -1
- package/dist/assets/messagebundle_uk-HU8hI0yj.js +0 -1
- package/dist/assets/messagebundle_vi-BUTqUKd4.js +0 -1
- package/dist/assets/messagebundle_vi-D1El4_Wj.js +0 -1
- package/dist/assets/messagebundle_zh_CN-Dt0azUea.js +0 -1
- package/dist/assets/messagebundle_zh_CN-Ofgx2uXY.js +0 -1
- package/dist/assets/messagebundle_zh_TW-5lv7yYS1.js +0 -1
- package/dist/assets/messagebundle_zh_TW-LSErOAsd.js +0 -1
- package/dist/assets/parameters-bundle.css-B68EyCuR.js +0 -278
- package/dist/assets/parameters-bundle.css-BkJSEiFx.js +0 -278
- package/dist/assets/parameters-bundle.css-CI4HNvFw.js +0 -1
- package/dist/assets/parameters-bundle.css-COeynv6D.js +0 -277
- package/dist/assets/parameters-bundle.css-CRa5DITh.js +0 -1
- package/dist/assets/parameters-bundle.css-CnIzAMdG.js +0 -3
- package/dist/assets/parameters-bundle.css-CsV5qbZp.js +0 -3
- package/dist/assets/parameters-bundle.css-DCvHNL3s.js +0 -3
- package/dist/assets/parameters-bundle.css-DK40uKOQ.js +0 -3
- package/dist/assets/parameters-bundle.css-DMfTAqMv.js +0 -2
- package/dist/assets/parameters-bundle.css-DO35k9r0.js +0 -2
- package/dist/assets/parameters-bundle.css-Df7wtRW4.js +0 -2
- package/dist/assets/parameters-bundle.css-DvAfqdlT.js +0 -3
- package/dist/assets/parameters-bundle.css-KoXGNyLG.js +0 -3
- package/dist/assets/parameters-bundle.css-P_M_rm9z.js +0 -3
- package/dist/assets/parameters-bundle.css-UJIxXHL5.js +0 -2
- package/dist/assets/parameters-bundle.css-co26r5Nz.js +0 -3
- package/dist/assets/parameters-bundle.css-uT62L0va.js +0 -3
- package/dist/css/themes/SideNavigationMobileDropdown.css +0 -1
- package/dist/generated/themes/SideNavigationMobileDropdown.css.d.ts +0 -2
- package/dist/generated/themes/SideNavigationMobileDropdown.css.js +0 -8
- package/dist/generated/themes/SideNavigationMobileDropdown.css.js.map +0 -1
- package/src/generated/themes/SideNavigationMobileDropdown.css.ts +0 -9
- package/src/themes/SideNavigationMobileDropdown.css +0 -36
package/dist/SelectBase.d.ts
CHANGED
|
@@ -128,10 +128,9 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
128
128
|
*/
|
|
129
129
|
_navigating: boolean;
|
|
130
130
|
/**
|
|
131
|
-
*
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
* the live region lives inside SelectBox's own shadow root.
|
|
131
|
+
* Supplemental status announced by the polite live region.
|
|
132
|
+
* Navigation uses native host semantics only. Opening and explicit selection
|
|
133
|
+
* changes retain feedback without repeating the hierarchy or input token count.
|
|
135
134
|
*
|
|
136
135
|
* @private
|
|
137
136
|
*/
|
|
@@ -161,6 +160,7 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
161
160
|
_handleListKeyDownBound: (e: KeyboardEvent) => void;
|
|
162
161
|
_listKeyDownListenerAdded: boolean;
|
|
163
162
|
_activeDescendantItem: UDExListItemBase | null;
|
|
163
|
+
_pendingSelectionAnnouncement: string;
|
|
164
164
|
constructor();
|
|
165
165
|
onEnterDOM(): void;
|
|
166
166
|
onExitDOM(): void;
|
|
@@ -173,13 +173,20 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
173
173
|
*/
|
|
174
174
|
_skipNonInteractive(items: UDExListItemBase[], raw: number, lastIndex: number, direction: "down" | "up"): number;
|
|
175
175
|
/**
|
|
176
|
-
* Sets or clears the aria-activedescendant on the combobox input
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
* across a UI5 Popover (which teleports content to document.body) is unreliable —
|
|
180
|
-
* screen readers cannot follow the ID reference across shadow root boundaries.
|
|
176
|
+
* Sets or clears the aria-activedescendant on the combobox input.
|
|
177
|
+
* The referenced host owns its name, hierarchy and state; do not repeat these
|
|
178
|
+
* in the live region on navigation.
|
|
181
179
|
*/
|
|
182
180
|
_setActiveDescendant(item: UDExListItemBase | null, scroll?: boolean): void;
|
|
181
|
+
/** Announce explicit selection after the rendered host has caught up with source changes. @private */
|
|
182
|
+
_announceSelectionChange(): void;
|
|
183
|
+
/** Explicit activation feedback is distinct from native navigation announcements. @private */
|
|
184
|
+
_selectionAnnouncement(item: Pick<UDExListItemBase, "label" | "supportingText" | "getAttribute" | "selected" | "indeterminate" | "hasRating" | "ratingAriaLabel">): string;
|
|
185
|
+
/** Close feedback must survive clearing the active descendant. @private */
|
|
186
|
+
_finishDropdownClose(): void;
|
|
187
|
+
handleAccordionIconClick(e: CustomEvent<{
|
|
188
|
+
collapsed: boolean;
|
|
189
|
+
}>): void;
|
|
183
190
|
/**
|
|
184
191
|
* Activates the first navigable item as the aria-activedescendant without moving DOM focus.
|
|
185
192
|
*/
|
|
@@ -190,7 +197,7 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
190
197
|
* restores focus to it; when nothing is selected (or in other modes) the first navigable
|
|
191
198
|
* item is activated instead.
|
|
192
199
|
*/
|
|
193
|
-
_activateSelectedOrFirstItem():
|
|
200
|
+
_activateSelectedOrFirstItem(): UDExListItemBase | undefined;
|
|
194
201
|
/**
|
|
195
202
|
* Navigates to the item at the given index, updating aria-activedescendant and _selectedOption.
|
|
196
203
|
*/
|
|
@@ -208,19 +215,6 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
208
215
|
handleDropdownBeforeClose(): void;
|
|
209
216
|
dropdownBeforeOpen(): void;
|
|
210
217
|
handleDropdownOpen(): void;
|
|
211
|
-
/**
|
|
212
|
-
* Announces the currently active descendant item (if set), or the first
|
|
213
|
-
* navigable item as a fallback. Used on open and after state changes.
|
|
214
|
-
*/
|
|
215
|
-
_announceCurrentOrFirst(): void;
|
|
216
|
-
/**
|
|
217
|
-
* Returns the positional announcement text for an item, tree-aware when the
|
|
218
|
-
* list has groups. Matches the JAWS reading pattern of FilterMenu:
|
|
219
|
-
* group header → "level 0, X of Y" (Y = total navigable groups)
|
|
220
|
-
* group child → "level 1, X of Y" (Y = siblings in that group)
|
|
221
|
-
* flat item → "X of Y" (Y = total items, no level prefix)
|
|
222
|
-
*/
|
|
223
|
-
_treePositionText(item: UDExListItemBase): string;
|
|
224
218
|
fireEventDropdownBeforeOClose(): void;
|
|
225
219
|
fireEventDropdownBeforeOpen(): void;
|
|
226
220
|
fireEventDropdownOpen(): void;
|
|
@@ -256,16 +250,6 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
256
250
|
_focusLastListItem(): void;
|
|
257
251
|
_firstFocusableIn(el: Element | undefined): HTMLElement | null;
|
|
258
252
|
_moveFocusAfterComponent(): void;
|
|
259
|
-
/**
|
|
260
|
-
* Builds the state portion of the live region announcement for a navigation item.
|
|
261
|
-
* Returns an array of state strings (e.g. ["collapsed", "Checked"]) to be joined
|
|
262
|
-
* with the label and position. Handles:
|
|
263
|
-
* - collapsible group headers: expanded / collapsed
|
|
264
|
-
* - MultiSelect: Checked / Unchecked / Indeterminate
|
|
265
|
-
* - SingleSelect (tree): Selected / Unselected
|
|
266
|
-
* - disabled: Disabled
|
|
267
|
-
*/
|
|
268
|
-
_itemStateLabels(item: UDExListItemBase): string[];
|
|
269
253
|
get ariaDescribedbyText(): string;
|
|
270
254
|
get trigger(): HTMLElement;
|
|
271
255
|
get isDisabled(): boolean;
|
|
@@ -276,6 +260,7 @@ declare class UDExSelectBase extends UDExSearchableListBase {
|
|
|
276
260
|
get accInfo(): {
|
|
277
261
|
ariaLabel: string;
|
|
278
262
|
};
|
|
263
|
+
get listAccessibleName(): string;
|
|
279
264
|
get popoverId(): string;
|
|
280
265
|
get listboxRole(): AriaHasPopup;
|
|
281
266
|
get listAriaControlsId(): string;
|
package/dist/SelectBase.js
CHANGED
|
@@ -12,7 +12,7 @@ import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/
|
|
|
12
12
|
import { cleanLabel } from "./utils/listItemLabelUtils.js";
|
|
13
13
|
import "@ui5/webcomponents-icons/dist/decline.js";
|
|
14
14
|
import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
|
|
15
|
-
import { COUNTRY_SELECT, STARS, SELECTED, UNSELECTED, INDETERMINATE,
|
|
15
|
+
import { COUNTRY_SELECT, STARS, SELECTED, UNSELECTED, INDETERMINATE, EXPANDED, } from "./generated/i18n/i18n-defaults.js";
|
|
16
16
|
import SearchableListBaseTemplate from "./SearchableListBaseTemplate.js";
|
|
17
17
|
import CountrySelectorTemplate from "./CountrySelectorTemplate.js";
|
|
18
18
|
import ResizeHandler from "@ui5/webcomponents-base/delegate/ResizeHandler.js";
|
|
@@ -62,10 +62,9 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
62
62
|
*/
|
|
63
63
|
this._navigating = false;
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* the live region lives inside SelectBox's own shadow root.
|
|
65
|
+
* Supplemental status announced by the polite live region.
|
|
66
|
+
* Navigation uses native host semantics only. Opening and explicit selection
|
|
67
|
+
* changes retain feedback without repeating the hierarchy or input token count.
|
|
69
68
|
*
|
|
70
69
|
* @private
|
|
71
70
|
*/
|
|
@@ -81,6 +80,7 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
81
80
|
this._lastSelectedItemId = "";
|
|
82
81
|
this._listKeyDownListenerAdded = false;
|
|
83
82
|
this._activeDescendantItem = null;
|
|
83
|
+
this._pendingSelectionAnnouncement = "";
|
|
84
84
|
this._handleResizeBound = this._handleResize.bind(this);
|
|
85
85
|
this._handleListKeyDownBound = this._handleListKeyDownCapture.bind(this);
|
|
86
86
|
}
|
|
@@ -141,14 +141,14 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
141
141
|
return raw === 0 ? lastIndex : raw - 1;
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
|
-
* Sets or clears the aria-activedescendant on the combobox input
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
* across a UI5 Popover (which teleports content to document.body) is unreliable —
|
|
148
|
-
* screen readers cannot follow the ID reference across shadow root boundaries.
|
|
144
|
+
* Sets or clears the aria-activedescendant on the combobox input.
|
|
145
|
+
* The referenced host owns its name, hierarchy and state; do not repeat these
|
|
146
|
+
* in the live region on navigation.
|
|
149
147
|
*/
|
|
150
148
|
_setActiveDescendant(item, scroll = true) {
|
|
151
149
|
this._activeDescendantItem = item;
|
|
150
|
+
this._navigating = !!item;
|
|
151
|
+
this._liveRegionText = "";
|
|
152
152
|
// Query the SelectBox's OWN shadow DOM for all elements bearing the class —
|
|
153
153
|
// this reaches the rendered udex-list-group-header / udex-list-item elements
|
|
154
154
|
// regardless of whether they are the current or a previously stale instance.
|
|
@@ -159,21 +159,11 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
159
159
|
});
|
|
160
160
|
if (!item) {
|
|
161
161
|
this._search.removeAttribute("aria-activedescendant");
|
|
162
|
-
this._liveRegionText = "";
|
|
163
162
|
return;
|
|
164
163
|
}
|
|
165
164
|
item.classList.add("_udex-active-descendant");
|
|
166
165
|
item.setAttribute("_active-descendant", "");
|
|
167
|
-
this._search.setAttribute("aria-activedescendant", item.
|
|
168
|
-
// Update the live region with tree-aware position and state so JAWS/VoiceOver
|
|
169
|
-
// announce the active item regardless of whether the popover is teleported to document.body.
|
|
170
|
-
if (this._list) {
|
|
171
|
-
const label = cleanLabel(item.label ?? "");
|
|
172
|
-
const supporting = item.supportingText ? cleanLabel(item.supportingText) : "";
|
|
173
|
-
const stateParts = this._itemStateLabels(item);
|
|
174
|
-
const posText = this._treePositionText(item);
|
|
175
|
-
this._liveRegionText = [label, supporting, posText, ...stateParts].filter(Boolean).join(", ");
|
|
176
|
-
}
|
|
166
|
+
this._search.setAttribute("aria-activedescendant", item.id);
|
|
177
167
|
if (scroll && this._list?._scrollIntoView) {
|
|
178
168
|
// Only scroll if the item is not already fully visible in the dropdown.
|
|
179
169
|
const popoverContent = this._popover?.shadowRoot?.querySelector("[part=content]");
|
|
@@ -190,6 +180,38 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
190
180
|
}
|
|
191
181
|
}
|
|
192
182
|
}
|
|
183
|
+
/** Announce explicit selection after the rendered host has caught up with source changes. @private */
|
|
184
|
+
_announceSelectionChange() {
|
|
185
|
+
const item = this._activeDescendantItem;
|
|
186
|
+
this._liveRegionText = "";
|
|
187
|
+
renderFinished().then(() => {
|
|
188
|
+
if (this._open && item && this._activeDescendantItem === item) {
|
|
189
|
+
this._liveRegionText = this._selectionAnnouncement(item);
|
|
190
|
+
}
|
|
191
|
+
}).catch(() => { });
|
|
192
|
+
}
|
|
193
|
+
/** Explicit activation feedback is distinct from native navigation announcements. @private */
|
|
194
|
+
_selectionAnnouncement(item) {
|
|
195
|
+
// CountrySelector sources are data objects, not DOM elements.
|
|
196
|
+
const name = item.getAttribute?.("aria-label") || [item.label, item.supportingText, item.getAttribute?.("additional-text"), item.hasRating ? item.ratingAriaLabel : undefined]
|
|
197
|
+
.filter(Boolean).map(text => cleanLabel(text)).join(" ");
|
|
198
|
+
const selectionState = item.selected ? SELECTED : UNSELECTED;
|
|
199
|
+
const state = translate(UDExSelectBase, item.indeterminate ? INDETERMINATE : selectionState);
|
|
200
|
+
return [name, state].filter(Boolean).join(", ");
|
|
201
|
+
}
|
|
202
|
+
/** Close feedback must survive clearing the active descendant. @private */
|
|
203
|
+
_finishDropdownClose() {
|
|
204
|
+
this._setActiveDescendant(null);
|
|
205
|
+
this._open = false;
|
|
206
|
+
this._liveRegionText = this._pendingSelectionAnnouncement;
|
|
207
|
+
this._pendingSelectionAnnouncement = "";
|
|
208
|
+
this.fireEventDropdownClose();
|
|
209
|
+
}
|
|
210
|
+
handleAccordionIconClick(e) {
|
|
211
|
+
super.handleAccordionIconClick(e);
|
|
212
|
+
// The host's aria-expanded owns this feedback; discard stale selection status.
|
|
213
|
+
this._liveRegionText = "";
|
|
214
|
+
}
|
|
193
215
|
/**
|
|
194
216
|
* Activates the first navigable item as the aria-activedescendant without moving DOM focus.
|
|
195
217
|
*/
|
|
@@ -223,6 +245,7 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
223
245
|
if (this.showImageFlags) {
|
|
224
246
|
this.handleImagePosition(items, targetIndex);
|
|
225
247
|
}
|
|
248
|
+
return items[targetIndex];
|
|
226
249
|
}
|
|
227
250
|
/**
|
|
228
251
|
* Navigates to the item at the given index, updating aria-activedescendant and _selectedOption.
|
|
@@ -370,8 +393,14 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
370
393
|
this.resetSearchState();
|
|
371
394
|
if (this.modeSingleSelect) {
|
|
372
395
|
// SingleSelect closes the dropdown — clear active descendant.
|
|
396
|
+
const selectedItem = this.getItemFromList(this.getDataTokenId(item));
|
|
397
|
+
if (selectedItem) {
|
|
398
|
+
this._pendingSelectionAnnouncement = this._selectionAnnouncement(selectedItem);
|
|
399
|
+
}
|
|
373
400
|
this._setActiveDescendant(null);
|
|
374
|
-
this._search
|
|
401
|
+
if (this.shadowRoot?.activeElement !== this._search) {
|
|
402
|
+
this._search.focus();
|
|
403
|
+
}
|
|
375
404
|
this.closeDropdown();
|
|
376
405
|
return;
|
|
377
406
|
}
|
|
@@ -388,11 +417,10 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
388
417
|
// Return DOM focus to the input so the clicked item loses its :focus ring.
|
|
389
418
|
// Without this, the browser keeps focus on the item (from the click) and a
|
|
390
419
|
// second ring appears when arrow keys move _activeDescendantItem elsewhere.
|
|
391
|
-
this._search
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => { });
|
|
420
|
+
if (this.shadowRoot?.activeElement !== this._search) {
|
|
421
|
+
this._search.focus();
|
|
422
|
+
}
|
|
423
|
+
this._announceSelectionChange();
|
|
396
424
|
}
|
|
397
425
|
onKeyDownSearch(e) {
|
|
398
426
|
const items = this._list?.getKeyboardNavigationItems();
|
|
@@ -437,8 +465,9 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
437
465
|
}
|
|
438
466
|
if (isDownAndPopoverClosed) {
|
|
439
467
|
e.preventDefault();
|
|
468
|
+
// Opening establishes the active descendant and its visual highlight;
|
|
469
|
+
// DOM focus remains on the input for the combobox interaction pattern.
|
|
440
470
|
this.openDropdown();
|
|
441
|
-
this._activateSelectedOrFirstItem();
|
|
442
471
|
return;
|
|
443
472
|
}
|
|
444
473
|
if (isDownAndPopoverOpened) {
|
|
@@ -451,9 +480,9 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
451
480
|
this._navigateToIndex(items, nextIndex);
|
|
452
481
|
}
|
|
453
482
|
else {
|
|
454
|
-
this.
|
|
483
|
+
this._activateSelectedOrFirstItem();
|
|
455
484
|
// Also update _selectedOption so the input reflects the active item.
|
|
456
|
-
const activeIdx =
|
|
485
|
+
const activeIdx = this._activeDescendantItem ? items.indexOf(this._activeDescendantItem) : firstIndex;
|
|
457
486
|
this._selectedOption = items[activeIdx].label;
|
|
458
487
|
if (this.showImageFlags) {
|
|
459
488
|
this.handleImagePosition(items, activeIdx);
|
|
@@ -499,7 +528,15 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
499
528
|
}
|
|
500
529
|
// Group header: fire header-press (same event the click handler fires) so
|
|
501
530
|
// handleHeaderPress → onHeaderPress → handleGroupHeaderSelection runs.
|
|
502
|
-
|
|
531
|
+
// List's legacy intersection type omits SelectAll although it is a
|
|
532
|
+
// navigable group. Narrow using its explicit discriminator.
|
|
533
|
+
const selectAllItem = activeItem;
|
|
534
|
+
if (selectAllItem.isSelectAllHeader) {
|
|
535
|
+
selectAllItem.fireDecoratorEvent("select-all", { item: activeItem });
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
activeItem.fireDecoratorEvent("header-press", { item: activeItem });
|
|
539
|
+
}
|
|
503
540
|
}
|
|
504
541
|
else {
|
|
505
542
|
// Leaf item: fire item-press so the list handles selection consistently.
|
|
@@ -551,11 +588,10 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
551
588
|
}
|
|
552
589
|
onSearch(value) {
|
|
553
590
|
super.onSearch(value);
|
|
554
|
-
//
|
|
555
|
-
//
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
}
|
|
591
|
+
// Filtering may remove the active item. Announce only the result count until
|
|
592
|
+
// the user navigates to an item in the updated list.
|
|
593
|
+
this._setActiveDescendant(null);
|
|
594
|
+
this._liveRegionText = this._accSearchResultInfo ?? "";
|
|
559
595
|
}
|
|
560
596
|
handleDirection() {
|
|
561
597
|
const directionStyles = window.getComputedStyle(this).getPropertyValue("direction");
|
|
@@ -572,9 +608,7 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
572
608
|
this.fireEventDropdownBeforeOpen();
|
|
573
609
|
}
|
|
574
610
|
handleDropdownOpen() {
|
|
575
|
-
//
|
|
576
|
-
this._liveRegionText = "";
|
|
577
|
-
// Defer scroll and announcement until rendering settles.
|
|
611
|
+
// Defer scrolling until rendering settles.
|
|
578
612
|
// Calling _handleDropdownScroll synchronously causes getBoundingClientRect
|
|
579
613
|
// to read mid-transition positions (e.g. the max-height animation on
|
|
580
614
|
// collapsible group headers), producing an incorrect scroll offset.
|
|
@@ -584,64 +618,23 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
584
618
|
this._expandCollapsedGroupsWithSelection();
|
|
585
619
|
return renderFinished();
|
|
586
620
|
}).then(() => {
|
|
587
|
-
|
|
588
|
-
|
|
621
|
+
// The popup may have closed while its opening render was pending.
|
|
622
|
+
if (!this._open) {
|
|
623
|
+
return;
|
|
624
|
+
}
|
|
625
|
+
if (!this._activeDescendantItem && !this._shouldFilterItems) {
|
|
626
|
+
const activeItem = this._activateSelectedOrFirstItem();
|
|
627
|
+
// JAWS can miss the input's native expanded change when opening also
|
|
628
|
+
// establishes an active descendant. Retain the popup fallback unless an
|
|
629
|
+
// expanded group already supplies native "open"/"expanded" feedback.
|
|
630
|
+
// Never repeat the host's hierarchy or state after the native usage hint.
|
|
631
|
+
this._liveRegionText = activeItem?.getAttribute("aria-expanded") === "true"
|
|
632
|
+
? "" : translate(UDExSelectBase, EXPANDED);
|
|
589
633
|
}
|
|
590
634
|
this._handleDropdownScroll();
|
|
591
|
-
this._announceCurrentOrFirst();
|
|
592
635
|
}).catch(() => { });
|
|
593
636
|
this.fireEventDropdownOpen();
|
|
594
637
|
}
|
|
595
|
-
/**
|
|
596
|
-
* Announces the currently active descendant item (if set), or the first
|
|
597
|
-
* navigable item as a fallback. Used on open and after state changes.
|
|
598
|
-
*/
|
|
599
|
-
_announceCurrentOrFirst() {
|
|
600
|
-
const items = this._list?.getKeyboardNavigationItems();
|
|
601
|
-
if (!items?.length) {
|
|
602
|
-
return;
|
|
603
|
-
}
|
|
604
|
-
const item = this._activeDescendantItem ?? items.find(i => !i.nonInteractive || i.collapsible) ?? items[0];
|
|
605
|
-
if (!item) {
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
const label = cleanLabel(item.label ?? "");
|
|
609
|
-
const stateParts = this._itemStateLabels(item);
|
|
610
|
-
const posText = this._treePositionText(item);
|
|
611
|
-
this._liveRegionText = [label, posText, ...stateParts].filter(Boolean).join(", ");
|
|
612
|
-
}
|
|
613
|
-
/**
|
|
614
|
-
* Returns the positional announcement text for an item, tree-aware when the
|
|
615
|
-
* list has groups. Matches the JAWS reading pattern of FilterMenu:
|
|
616
|
-
* group header → "level 0, X of Y" (Y = total navigable groups)
|
|
617
|
-
* group child → "level 1, X of Y" (Y = siblings in that group)
|
|
618
|
-
* flat item → "X of Y" (Y = total items, no level prefix)
|
|
619
|
-
*/
|
|
620
|
-
_treePositionText(item) {
|
|
621
|
-
if (!this.isTreeStructure) {
|
|
622
|
-
const items = this._list?.getKeyboardNavigationItems() ?? [];
|
|
623
|
-
const pos = items.indexOf(item);
|
|
624
|
-
return pos >= 0 ? `${pos + 1} of ${items.length}` : "";
|
|
625
|
-
}
|
|
626
|
-
if (item.isGroup) {
|
|
627
|
-
// Position among navigable group headers.
|
|
628
|
-
const groups = (this._list?.getKeyboardNavigationItems() ?? []).filter(i => i.isGroup);
|
|
629
|
-
const pos = groups.indexOf(item);
|
|
630
|
-
return pos >= 0 ? `level 0, ${pos + 1} of ${groups.length}` : "level 0";
|
|
631
|
-
}
|
|
632
|
-
// Child item — find parent group and count siblings visible in navigation.
|
|
633
|
-
const parentGroup = item.parentElement;
|
|
634
|
-
if (parentGroup?.isGroup) {
|
|
635
|
-
const navItems = this._list?.getKeyboardNavigationItems() ?? [];
|
|
636
|
-
const siblings = navItems.filter(i => !i.isGroup && i.parentElement === parentGroup);
|
|
637
|
-
const pos = siblings.indexOf(item);
|
|
638
|
-
return pos >= 0 ? `level 1, ${pos + 1} of ${siblings.length}` : "level 1";
|
|
639
|
-
}
|
|
640
|
-
// Fallback: flat position.
|
|
641
|
-
const all = this._list?.getKeyboardNavigationItems() ?? [];
|
|
642
|
-
const pos = all.indexOf(item);
|
|
643
|
-
return pos >= 0 ? `${pos + 1} of ${all.length}` : "";
|
|
644
|
-
}
|
|
645
638
|
fireEventDropdownBeforeOClose() {
|
|
646
639
|
this.fireDecoratorEvent("before-close");
|
|
647
640
|
}
|
|
@@ -672,10 +665,21 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
672
665
|
}
|
|
673
666
|
}
|
|
674
667
|
openDropdown() {
|
|
668
|
+
if (this._popover.open) {
|
|
669
|
+
return;
|
|
670
|
+
}
|
|
671
|
+
this._pendingSelectionAnnouncement = "";
|
|
672
|
+
// Typing computes its result count before opening; preserve that status.
|
|
673
|
+
if (!this._shouldFilterItems) {
|
|
674
|
+
this._liveRegionText = "";
|
|
675
|
+
}
|
|
675
676
|
this._popover.opener = this._trigger;
|
|
676
|
-
this._popover.open = true;
|
|
677
677
|
this._open = true;
|
|
678
|
-
this._navigating =
|
|
678
|
+
this._navigating = false;
|
|
679
|
+
// Expose native state immediately. handleDropdownOpen supplements it after
|
|
680
|
+
// rendering because JAWS may miss this change on the first opening.
|
|
681
|
+
this._search.setAttribute("aria-expanded", "true");
|
|
682
|
+
this._popover.open = true;
|
|
679
683
|
this._focused = false;
|
|
680
684
|
}
|
|
681
685
|
closeDropdown() {
|
|
@@ -683,6 +687,7 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
683
687
|
this._open = false;
|
|
684
688
|
this._popover.open = false;
|
|
685
689
|
this._navigating = false;
|
|
690
|
+
this._search.setAttribute("aria-expanded", "false");
|
|
686
691
|
}
|
|
687
692
|
}
|
|
688
693
|
inputFocusIn() {
|
|
@@ -739,16 +744,12 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
739
744
|
return false;
|
|
740
745
|
}
|
|
741
746
|
// Left only collapses an expanded group; Right only expands a collapsed one.
|
|
742
|
-
if (
|
|
743
|
-
header.collapsed =
|
|
744
|
-
this._list.setCollapsedItems(
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
if (!collapse && header.collapsed) {
|
|
749
|
-
header.collapsed = false;
|
|
750
|
-
this._list.setCollapsedItems(false, header);
|
|
751
|
-
renderFinished().then(() => this._announceCurrentOrFirst()).catch(() => { });
|
|
747
|
+
if (header.collapsed !== collapse) {
|
|
748
|
+
header.collapsed = collapse;
|
|
749
|
+
this._list.setCollapsedItems(collapse, header);
|
|
750
|
+
// Synchronize the slotted source header just like a chevron click;
|
|
751
|
+
// UI5 template listeners subscribe to the prefixed decorator event.
|
|
752
|
+
header.fireDecoratorEvent("accordion-icon-click", { collapsed: collapse });
|
|
752
753
|
return true;
|
|
753
754
|
}
|
|
754
755
|
// Target is a collapsible header but already in the requested state — still consume
|
|
@@ -900,49 +901,26 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
900
901
|
};
|
|
901
902
|
findAndFocus(this);
|
|
902
903
|
}
|
|
903
|
-
/**
|
|
904
|
-
* Builds the state portion of the live region announcement for a navigation item.
|
|
905
|
-
* Returns an array of state strings (e.g. ["collapsed", "Checked"]) to be joined
|
|
906
|
-
* with the label and position. Handles:
|
|
907
|
-
* - collapsible group headers: expanded / collapsed
|
|
908
|
-
* - MultiSelect: Checked / Unchecked / Indeterminate
|
|
909
|
-
* - SingleSelect (tree): Selected / Unselected
|
|
910
|
-
* - disabled: Disabled
|
|
911
|
-
*/
|
|
912
|
-
_itemStateLabels(item) {
|
|
913
|
-
const parts = [];
|
|
914
|
-
if (item.collapsible) {
|
|
915
|
-
parts.push(translate(UDExSearchableListBase, item.expanded ? EXPANDED : COLLAPSED));
|
|
916
|
-
}
|
|
917
|
-
if (item.disabled) {
|
|
918
|
-
parts.push(translate(UDExSearchableListBase, DISABLED));
|
|
919
|
-
}
|
|
920
|
-
else if (item.modeMultiSelect || (item.isGroup && this.modeMultiSelect)) {
|
|
921
|
-
if (item.indeterminate) {
|
|
922
|
-
parts.push(translate(UDExSearchableListBase, INDETERMINATE));
|
|
923
|
-
}
|
|
924
|
-
else {
|
|
925
|
-
parts.push(translate(UDExSearchableListBase, item.selected ? SELECTED : UNSELECTED));
|
|
926
|
-
}
|
|
927
|
-
}
|
|
928
|
-
else if (this.isTreeStructure && item.selected) {
|
|
929
|
-
// SingleSelect tree: only announce "Selected" when the item is actually selected.
|
|
930
|
-
parts.push(translate(UDExSearchableListBase, SELECTED));
|
|
931
|
-
}
|
|
932
|
-
return parts;
|
|
933
|
-
}
|
|
934
904
|
get ariaDescribedbyText() {
|
|
905
|
+
const descriptions = [this.supportingText];
|
|
906
|
+
// Updating the token-count description while an item is active makes JAWS
|
|
907
|
+
// reread the input instead of the item whose selection just changed.
|
|
908
|
+
if (this._navigating) {
|
|
909
|
+
return descriptions.filter(Boolean).join(" ");
|
|
910
|
+
}
|
|
935
911
|
if (this.modeSingleSelect) {
|
|
936
|
-
|
|
912
|
+
descriptions.push(this._selectedOption);
|
|
913
|
+
return descriptions.filter(Boolean).join(" ");
|
|
937
914
|
}
|
|
938
915
|
const tags = this.selectedItems.filter(item => !item.isGroup);
|
|
939
916
|
// Tokenizer.i18nBundle may not be loaded yet on direct page load.
|
|
940
917
|
// Return empty string until the bundle is available; the component re-renders
|
|
941
918
|
// once i18n is ready and will pick up the correct text.
|
|
942
919
|
if (!Tokenizer.i18nBundle) {
|
|
943
|
-
return "";
|
|
920
|
+
return descriptions.filter(Boolean).join(" ");
|
|
944
921
|
}
|
|
945
|
-
|
|
922
|
+
descriptions.push(getTokensCountText(tags.length));
|
|
923
|
+
return descriptions.filter(Boolean).join(" ");
|
|
946
924
|
}
|
|
947
925
|
get trigger() {
|
|
948
926
|
return this.shadowRoot.querySelector(".udex-text-field__wrap");
|
|
@@ -975,6 +953,9 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
975
953
|
"ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || this.label || translate(UDExSelectBase, COUNTRY_SELECT),
|
|
976
954
|
};
|
|
977
955
|
}
|
|
956
|
+
get listAccessibleName() {
|
|
957
|
+
return this.accInfo.ariaLabel;
|
|
958
|
+
}
|
|
978
959
|
get popoverId() {
|
|
979
960
|
return `${this._id}_${this._dropdownClass}`;
|
|
980
961
|
}
|
|
@@ -988,7 +969,11 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
988
969
|
return true;
|
|
989
970
|
}
|
|
990
971
|
get isTreeStructure() {
|
|
991
|
-
|
|
972
|
+
// Options flatten their descendants in the accessibility tree. Action
|
|
973
|
+
// buttons therefore need treeitems even in an otherwise flat popup, so
|
|
974
|
+
// their own names, roles and keyboard interaction remain available.
|
|
975
|
+
return this._filteredItems.some(({ isGroup, item }) => isGroup
|
|
976
|
+
|| !!item.querySelector?.("[slot='firstIcon'], [slot='secondIcon']"));
|
|
992
977
|
}
|
|
993
978
|
get hideDropdownSearch() {
|
|
994
979
|
return true;
|