@sapudex/web-components 2.62.0 → 2.63.1
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/FilterMenu.cy.tsx +43 -22
- package/cypress/specs/FilterMenuAccessibility.cy.tsx +1017 -0
- package/cypress/specs/ListItem.cy.tsx +234 -6
- package/cypress/specs/MastheadCountrySelector.cy.tsx +177 -0
- package/cypress/specs/SelectBox.cy.tsx +7 -2
- package/cypress/specs/SelectBoxAccessibility.cy.tsx +5 -5
- package/cypress/specs/SideNavigation.cy.tsx +49 -0
- package/cypress/specs/SideNavigationMobile.cy.tsx +69 -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/FilterMenu.d.ts +2 -2
- package/dist/FilterMenu.js +6 -4
- package/dist/FilterMenu.js.map +1 -1
- package/dist/FilterMenuTemplate.js +2 -2
- package/dist/FilterMenuTemplate.js.map +1 -1
- package/dist/List.d.ts +1 -8
- package/dist/List.js +4 -12
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeaderTemplate.js +8 -7
- package/dist/ListGroupHeaderTemplate.js.map +1 -1
- package/dist/ListItem.js +12 -1
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +5 -0
- package/dist/ListItemBase.js +3 -0
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListItemTemplate.js +2 -2
- package/dist/ListItemTemplate.js.map +1 -1
- package/dist/ListSelectAllTemplate.js +1 -1
- package/dist/ListSelectAllTemplate.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/SearchTemplate.js +1 -1
- package/dist/SearchTemplate.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +8 -10
- package/dist/SearchableListBaseTemplate.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/SideNavigationMobile.d.ts +19 -0
- package/dist/SideNavigationMobile.js +32 -1
- 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 +20 -9
- package/dist/SideNavigationSubItem.js.map +1 -1
- package/dist/SideNavigationSubItemTemplate.js +1 -1
- 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/assets/{InputSuggestions-BPKrPqPb.js → InputSuggestions-DSPGFWZq.js} +2 -2
- package/dist/assets/{ListItemStandardExpandableTextTemplate-DkdOcCxC.js → ListItemStandardExpandableTextTemplate-hSNo3Xyr.js} +2 -2
- package/dist/assets/{bundle.esm-17Yt5gDr.js → bundle.esm-qSu0eWiH.js} +237 -238
- 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/MastheadShell.css +1 -1
- package/dist/css/themes/PromoTile.css +1 -1
- package/dist/css/themes/SideNavigation.css +1 -1
- package/dist/css/themes/SideNavigationMobile.css +1 -1
- package/dist/css/themes/Slider.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 +1436 -0
- package/dist/custom-elements.json +1490 -21
- 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/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/PromoTile.css.d.ts +1 -1
- package/dist/generated/themes/PromoTile.css.js +1 -1
- package/dist/generated/themes/PromoTile.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/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/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/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/vscode.html-custom-data.json +12 -2
- package/dist/web-types.json +33 -3
- package/package.json +8 -8
- package/src/AccordionItemTemplate.tsx +1 -0
- package/src/FilterMenu.ts +6 -4
- package/src/FilterMenuTemplate.tsx +12 -8
- package/src/List.ts +4 -12
- package/src/ListGroupHeaderTemplate.tsx +9 -3
- package/src/ListItem.ts +12 -1
- package/src/ListItemBase.ts +7 -0
- package/src/ListItemTemplate.tsx +6 -1
- package/src/ListSelectAllTemplate.tsx +11 -12
- package/src/MastheadCountrySelector.ts +18 -0
- package/src/MastheadCountrySelectorTemplate.tsx +2 -0
- package/src/MessageStrip.ts +7 -0
- package/src/SearchTemplate.tsx +3 -1
- package/src/SearchableListBaseTemplate.tsx +12 -12
- package/src/SideNavigation.ts +17 -0
- package/src/SideNavigationMobile.ts +52 -0
- package/src/SideNavigationMobileTemplate.tsx +3 -5
- package/src/SideNavigationSubItem.ts +17 -5
- package/src/SideNavigationSubItemTemplate.tsx +3 -1
- package/src/SideNavigationTemplate.tsx +17 -0
- package/src/generated/themes/MastheadShell.css.ts +1 -1
- package/src/generated/themes/PromoTile.css.ts +1 -1
- package/src/generated/themes/SideNavigation.css.ts +1 -1
- package/src/generated/themes/SideNavigationMobile.css.ts +1 -1
- package/src/generated/themes/Slider.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/themes/MastheadShell.css +14 -2
- package/src/themes/PromoTile.css +5 -0
- package/src/themes/SideNavigation.css +43 -8
- package/src/themes/SideNavigationMobile.css +1 -0
- package/src/themes/Slider.css +25 -11
- 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
|
@@ -223,7 +223,8 @@ describe("ListItem", () => {
|
|
|
223
223
|
});
|
|
224
224
|
|
|
225
225
|
describe("Standalone rated MultiSelect preservation", () => {
|
|
226
|
-
|
|
226
|
+
// Updated: decorative checkboxes are unnamed in every mode; the real-focus row owns the complete rating name.
|
|
227
|
+
it("keeps real focus and native selection on the fully named inner option with an unnamed decorative checkbox", () => {
|
|
227
228
|
cy.mount(
|
|
228
229
|
<div>
|
|
229
230
|
<button id="before-rated-list-item">Previous</button>
|
|
@@ -238,6 +239,7 @@ describe("ListItem", () => {
|
|
|
238
239
|
expect($row).to.have.attr("role", "option");
|
|
239
240
|
expect($row).to.have.attr("tabindex", "0");
|
|
240
241
|
expect($row).to.have.attr("aria-selected", String(UDExSelected));
|
|
242
|
+
expect($row).to.have.attr("aria-label", "Rated choice Rating 4.0, Total 20, Rating Indicator 4 of 5");
|
|
241
243
|
expect($row).not.to.have.attr("aria-checked");
|
|
242
244
|
});
|
|
243
245
|
UDExItem().should($host => {
|
|
@@ -249,12 +251,12 @@ describe("ListItem", () => {
|
|
|
249
251
|
expect($checkbox).to.have.attr("aria-hidden", "true");
|
|
250
252
|
expect($checkbox).to.have.attr("tabindex", "-1");
|
|
251
253
|
expect($checkbox[0]).to.have.property("checked", UDExSelected);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
expect($checkbox[0]).to.
|
|
255
|
-
expect($checkbox).to.have.attr("accessible-name", UDExName);
|
|
254
|
+
expect($checkbox).not.to.have.attr("accessible-name");
|
|
255
|
+
expect($checkbox).not.to.have.attr("aria-label");
|
|
256
|
+
expect(($checkbox[0] as HTMLElement & { accessibleName?: string }).accessibleName || "").to.equal("");
|
|
256
257
|
});
|
|
257
|
-
UDExItem().shadow().find(".udex-list__content-wrap")
|
|
258
|
+
UDExItem().shadow().find(".udex-list__content-wrap")
|
|
259
|
+
.should("have.attr", "aria-label", "Rated choice Rating 4.0, Total 20, Rating Indicator 4 of 5");
|
|
258
260
|
UDExItem().shadow().find("[udex-rating-indicator]").should($rating => {
|
|
259
261
|
expect($rating).to.have.attr("aria-label", "Rating 4.0, Total 20, Rating Indicator 4 of 5");
|
|
260
262
|
expect($rating).to.have.attr("disabled");
|
|
@@ -272,6 +274,232 @@ describe("ListItem", () => {
|
|
|
272
274
|
});
|
|
273
275
|
});
|
|
274
276
|
|
|
277
|
+
describe("Accessible row name ownership", () => {
|
|
278
|
+
const normalizeText = (text: string | null) => (text || "").replace(/\s+/g, " ").trim();
|
|
279
|
+
|
|
280
|
+
function flattenedTextContent(node: Node): string {
|
|
281
|
+
if (node.nodeType === Node.ELEMENT_NODE && (node as Element).localName === "slot") {
|
|
282
|
+
const assigned = (node as HTMLSlotElement).assignedNodes({ flatten: true });
|
|
283
|
+
const nodes = assigned.length ? assigned : Array.from(node.childNodes);
|
|
284
|
+
return nodes.map(flattenedTextContent).join("");
|
|
285
|
+
}
|
|
286
|
+
if (!node.hasChildNodes()) {
|
|
287
|
+
return node.textContent || "";
|
|
288
|
+
}
|
|
289
|
+
// Preserve the raw text-node sequence, including adjacent inline elements, without adding separators.
|
|
290
|
+
return Array.from(node.childNodes).map(flattenedTextContent).join("");
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
function assertVisibleName(item: Cypress.Chainable<JQuery<HTMLElement>>, expected: string,
|
|
294
|
+
{ owner = "row", name = expected, slotted = false }:
|
|
295
|
+
{ owner?: "row" | "content" | "host"; name?: string; slotted?: boolean } = {}) {
|
|
296
|
+
item.shadow().find(".udex-list__content-wrap").should($wrapper => {
|
|
297
|
+
const wrapper = $wrapper[0];
|
|
298
|
+
const root = wrapper.getRootNode() as ShadowRoot;
|
|
299
|
+
const row = root.querySelector('[part="item"]')!;
|
|
300
|
+
const content = wrapper.querySelector(".udex-list__content")!;
|
|
301
|
+
const visibleText = normalizeText(slotted ? flattenedTextContent(content) : content.textContent);
|
|
302
|
+
expect(visibleText, "raw shared-container text retains literal word boundaries").to.equal(expected);
|
|
303
|
+
expect(wrapper).to.have.attr("aria-label", name);
|
|
304
|
+
const nameId = wrapper.getAttribute("aria-labelledby")!;
|
|
305
|
+
expect(nameId).to.equal(`${wrapper.getAttribute("_id")}-invisibleText`);
|
|
306
|
+
const source = root.getElementById(nameId);
|
|
307
|
+
expect(source, "hidden name source resolves in the row's own shadow root").not.to.equal(null);
|
|
308
|
+
expect(source!.getRootNode()).to.equal(root);
|
|
309
|
+
expect(source).to.have.class("hidden");
|
|
310
|
+
expect(normalizeText(source!.textContent)).to.equal(name);
|
|
311
|
+
if (owner === "row") {
|
|
312
|
+
expect(row).to.have.attr("aria-label", name);
|
|
313
|
+
} else {
|
|
314
|
+
expect(row).not.to.have.attr("aria-label");
|
|
315
|
+
if (owner === "host") {
|
|
316
|
+
expect(root.host).to.have.attr("aria-label", name);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (name === expected) {
|
|
320
|
+
expect(normalizeText(source!.textContent)).to.equal(visibleText);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
[UDExListMode.SingleSelect, UDExListMode.MultiSelect, UDExListMode.SingleContent].forEach(mode => {
|
|
326
|
+
it(`preserves raw label/support/additional boundaries and local name ownership in ${mode}`, () => {
|
|
327
|
+
cy.mount(
|
|
328
|
+
<div>
|
|
329
|
+
<button id="before-boundary-item">Previous</button>
|
|
330
|
+
<UDExListItem id="boundary-item" mode={mode} label="<b>Java</b>Script"
|
|
331
|
+
supportingText="Frontend web development" additionalText="Code JS" />
|
|
332
|
+
</div>
|
|
333
|
+
);
|
|
334
|
+
const item = () => cy.get("#boundary-item");
|
|
335
|
+
const row = () => item().shadow().find('[part="item"]');
|
|
336
|
+
const singleContent = mode === UDExListMode.SingleContent;
|
|
337
|
+
if (!singleContent) {
|
|
338
|
+
cy.get("#before-boundary-item").realClick();
|
|
339
|
+
cy.realPress("Tab");
|
|
340
|
+
row().should("be.focused");
|
|
341
|
+
row().should("have.attr", "aria-selected", "false");
|
|
342
|
+
}
|
|
343
|
+
row().should("have.attr", "role", singleContent ? "listitem" : "option");
|
|
344
|
+
assertVisibleName(item(), "JavaScript Frontend web development Code JS",
|
|
345
|
+
{ owner: singleContent ? "content" : "row" });
|
|
346
|
+
item().shadow().find(".udex-list__text-holder").should($holder => {
|
|
347
|
+
expect(normalizeText($holder[0].textContent)).to.equal("JavaScript Frontend web development");
|
|
348
|
+
});
|
|
349
|
+
item().shadow().find('[part="title"]').should("have.text", "JavaScript");
|
|
350
|
+
item().shadow().find('[part="title"] b').should("have.text", "Java");
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
it("preserves raw label/support/additional boundaries with a host-owned name and presentational native row", () => {
|
|
355
|
+
const expected = "JavaScript Frontend web development Code JS";
|
|
356
|
+
cy.mount(<UDExListItem id="host-boundary-item" mode={UDExListMode.MultiSelect}
|
|
357
|
+
_useHostAriaRole={true} role="option" aria-label={expected} aria-selected="false"
|
|
358
|
+
label="<b>Java</b>Script" supportingText="Frontend web development" additionalText="Code JS" />);
|
|
359
|
+
const item = () => cy.get("#host-boundary-item");
|
|
360
|
+
assertVisibleName(item(), expected, { owner: "host" });
|
|
361
|
+
item().shadow().find('[part="title"]').should("have.text", "JavaScript");
|
|
362
|
+
item().shadow().find('[part="item"]').should($row => {
|
|
363
|
+
expect($row).to.have.attr("role", "presentation");
|
|
364
|
+
["aria-label", "aria-selected", "aria-checked", "tabindex"].forEach(attribute => {
|
|
365
|
+
expect($row).not.to.have.attr(attribute);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
it("preserves literal boundaries with supporting-only or additional-only secondary text", () => {
|
|
371
|
+
cy.wrap([
|
|
372
|
+
{ supportingText: "Frontend web development", additionalText: "", expected: "JavaScript Frontend web development" },
|
|
373
|
+
{ supportingText: "", additionalText: "Code JS", expected: "JavaScript Code JS" },
|
|
374
|
+
]).each(testCase => {
|
|
375
|
+
cy.mount(<UDExListItem id="partial-boundary-item" mode={UDExListMode.SingleSelect}
|
|
376
|
+
label="<b>Java</b>Script" supportingText={testCase.supportingText} additionalText={testCase.additionalText} />);
|
|
377
|
+
const item = () => cy.get("#partial-boundary-item");
|
|
378
|
+
assertVisibleName(item(), testCase.expected);
|
|
379
|
+
item().shadow().find('[part="title"]').should("have.text", "JavaScript");
|
|
380
|
+
item().shadow().find(testCase.supportingText ? '[part="additional-text"]' : '[part="supporting"]')
|
|
381
|
+
.should("not.exist");
|
|
382
|
+
});
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
it("removes and restores supporting text without concatenating label and additional text while focused", () => {
|
|
386
|
+
cy.mount(
|
|
387
|
+
<div>
|
|
388
|
+
<button id="before-reactive-boundary-item">Previous</button>
|
|
389
|
+
<UDExListItem id="reactive-boundary-item" mode={UDExListMode.MultiSelect}
|
|
390
|
+
label="<b>Java</b>Script" supportingText="Frontend web development" additionalText="Code JS" />
|
|
391
|
+
</div>
|
|
392
|
+
);
|
|
393
|
+
const item = () => cy.get("#reactive-boundary-item");
|
|
394
|
+
const row = () => item().shadow().find('[part="item"]');
|
|
395
|
+
cy.get("#before-reactive-boundary-item").realClick();
|
|
396
|
+
cy.realPress("Tab");
|
|
397
|
+
row().should("be.focused");
|
|
398
|
+
assertVisibleName(item(), "JavaScript Frontend web development Code JS");
|
|
399
|
+
item().invoke("prop", "supportingText", "");
|
|
400
|
+
assertVisibleName(item(), "JavaScript Code JS");
|
|
401
|
+
item().shadow().find('[part="supporting"]').should("not.exist");
|
|
402
|
+
row().should("be.focused");
|
|
403
|
+
item().invoke("prop", "supportingText", "Digital Builders");
|
|
404
|
+
assertVisibleName(item(), "JavaScript Digital Builders Code JS");
|
|
405
|
+
item().shadow().find('[part="title"]').should("have.text", "JavaScript");
|
|
406
|
+
row().should("be.focused");
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
// Updated: flatten the shared slot container without inserting whitespace, checking hidden names even during overrides.
|
|
410
|
+
it("names a real-focus row from default slotted text before support and additional text, restoring it after an explicit override", () => {
|
|
411
|
+
cy.mount(
|
|
412
|
+
<div>
|
|
413
|
+
<button id="before-slotted-list-item">Previous</button>
|
|
414
|
+
<UDExListItem id="slotted-name-item" mode={UDExListMode.MultiSelect}
|
|
415
|
+
supportingText="Choice support" additionalText="Code A">
|
|
416
|
+
{" Slotted \n "}<span id="slotted-choice-label"><b>choice</b>{" label"}</span>{" \t text"}
|
|
417
|
+
</UDExListItem>
|
|
418
|
+
</div>
|
|
419
|
+
);
|
|
420
|
+
const UDExItem = () => cy.get("#slotted-name-item");
|
|
421
|
+
const UDExRow = () => UDExItem().shadow().find('[part="item"]');
|
|
422
|
+
const UDExFullName = "Slotted choice label text Choice support Code A";
|
|
423
|
+
const UDExAssertSlottedName = (UDExName: string) => {
|
|
424
|
+
assertVisibleName(UDExItem(), UDExFullName, { name: UDExName, slotted: true });
|
|
425
|
+
UDExItem().should($item => {
|
|
426
|
+
expect($item).not.to.have.attr("label");
|
|
427
|
+
expect(($item[0] as UDExListItem).label || "").to.equal("");
|
|
428
|
+
});
|
|
429
|
+
UDExRow().should("be.focused").should($row => {
|
|
430
|
+
expect($row).to.have.attr("role", "option");
|
|
431
|
+
expect($row).to.have.attr("aria-label", UDExName);
|
|
432
|
+
expect($row).to.have.attr("aria-selected", "false");
|
|
433
|
+
expect($row).not.to.have.attr("aria-checked");
|
|
434
|
+
});
|
|
435
|
+
UDExItem().shadow().find('slot[part="content"]').should($slot => {
|
|
436
|
+
expect(normalizeText(flattenedTextContent($slot[0]))).to.equal("Slotted choice label text");
|
|
437
|
+
});
|
|
438
|
+
UDExItem().find("#slotted-choice-label").should("be.visible").and("have.text", "choice label");
|
|
439
|
+
UDExItem().find("#slotted-choice-label b").should("be.visible").and("have.text", "choice");
|
|
440
|
+
UDExItem().shadow().find('[part="supporting"]').should("have.text", "Choice support");
|
|
441
|
+
UDExItem().shadow().find('[part="additional-text"]').should("have.text", "Code A");
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
cy.get("#before-slotted-list-item").realClick();
|
|
445
|
+
cy.realPress("Tab");
|
|
446
|
+
UDExAssertSlottedName(UDExFullName);
|
|
447
|
+
UDExItem().invoke("prop", "accessibleName", "Explicit slotted choice");
|
|
448
|
+
UDExAssertSlottedName("Explicit slotted choice");
|
|
449
|
+
UDExItem().invoke("prop", "accessibleName", "");
|
|
450
|
+
UDExAssertSlottedName(UDExFullName);
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
// Updated: verify the referenced hidden source independently without equating visible text to an override.
|
|
454
|
+
it("keeps an explicit row name instead of appending visible support, additional text or rating metadata", () => {
|
|
455
|
+
cy.mount(<UDExListItem id="explicit-name-item" mode={UDExListMode.MultiSelect}
|
|
456
|
+
accessibleName="Explicit choice" label="<b>Rated</b> choice" supportingText="Choice support"
|
|
457
|
+
additionalText="Code A" rating="4" ratingCount="4.0" totalCount="20" />);
|
|
458
|
+
const UDExRow = () => cy.get("#explicit-name-item").shadow().find('[part="item"]');
|
|
459
|
+
const assertNameSource = (expected: string) => {
|
|
460
|
+
UDExRow().should("have.attr", "aria-label", expected);
|
|
461
|
+
cy.get("#explicit-name-item").shadow().find(".udex-list__content-wrap").should($wrapper => {
|
|
462
|
+
const root = $wrapper[0].getRootNode() as ShadowRoot;
|
|
463
|
+
expect($wrapper).to.have.attr("aria-label", expected);
|
|
464
|
+
const source = root.getElementById($wrapper[0].getAttribute("aria-labelledby")!);
|
|
465
|
+
expect(source, "explicit name source resolves in the native row's shadow root").not.to.equal(null);
|
|
466
|
+
expect(source!.getRootNode()).to.equal(root);
|
|
467
|
+
expect(source).to.have.class("hidden");
|
|
468
|
+
expect(normalizeText(source!.textContent)).to.equal(expected);
|
|
469
|
+
});
|
|
470
|
+
cy.get("#explicit-name-item").shadow().find('[part="title"]').should("have.text", "Rated choice");
|
|
471
|
+
};
|
|
472
|
+
assertNameSource("Explicit choice");
|
|
473
|
+
cy.get("#explicit-name-item").invoke("prop", "accessibleName", "");
|
|
474
|
+
assertNameSource("Rated choice Choice support Code A Rating 4.0, Total 20, Rating Indicator 4 of 5");
|
|
475
|
+
cy.get("#explicit-name-item").invoke("prop", "accessibleName", "Restored override");
|
|
476
|
+
assertNameSource("Restored override");
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
it("does not duplicate the host-owned name or state on a presentational inner row", () => {
|
|
480
|
+
cy.mount(<UDExListItem id="host-named-item" mode={UDExListMode.MultiSelect}
|
|
481
|
+
_useHostAriaRole={true} role="option" aria-label="Host-owned choice" aria-selected="true"
|
|
482
|
+
selected accessibleName="Explicit inner name" label="Visible choice" supportingText="Choice support" />);
|
|
483
|
+
cy.get("#host-named-item").should($host => {
|
|
484
|
+
expect($host).to.have.attr("role", "option");
|
|
485
|
+
expect($host).to.have.attr("aria-label", "Host-owned choice");
|
|
486
|
+
expect($host).to.have.attr("aria-selected", "true");
|
|
487
|
+
});
|
|
488
|
+
cy.get("#host-named-item").shadow().find('[part="item"]').should($row => {
|
|
489
|
+
expect($row).to.have.attr("role", "presentation");
|
|
490
|
+
["aria-label", "aria-selected", "aria-checked", "tabindex"].forEach(UDExAttribute => {
|
|
491
|
+
expect($row).not.to.have.attr(UDExAttribute);
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
cy.get("#host-named-item").shadow().find("[udex-checkbox]").should($checkbox => {
|
|
495
|
+
expect($checkbox).to.have.attr("aria-hidden", "true");
|
|
496
|
+
expect($checkbox).to.have.attr("tabindex", "-1");
|
|
497
|
+
expect($checkbox).not.to.have.attr("accessible-name");
|
|
498
|
+
expect($checkbox[0]).to.have.property("checked", true);
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
});
|
|
502
|
+
|
|
275
503
|
// Added: unit-level coverage for the WCAG 4.1.2 Treeview Checkbox pattern getter
|
|
276
504
|
// (ariaCheckedValue). It only activates when the item's accessible-role ===
|
|
277
505
|
// "treeitem" (set by SearchableListBase in the tree pattern). The inner checkbox
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { UDExMastheadCountrySelector } from "../support/component-imports.js";
|
|
2
|
+
|
|
3
|
+
const singleRegion = JSON.stringify([
|
|
4
|
+
{
|
|
5
|
+
title: "Europe",
|
|
6
|
+
countries: [
|
|
7
|
+
{ displayTitle: "Germany", countryCode: "DE", url: "/germany/store.html" },
|
|
8
|
+
{ displayTitle: "France", countryCode: "FR", url: "/france/store.html" },
|
|
9
|
+
{ displayTitle: "Poland", countryCode: "PL", url: "/poland/store.html" },
|
|
10
|
+
],
|
|
11
|
+
},
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
const multiRegion = JSON.stringify([
|
|
15
|
+
{
|
|
16
|
+
title: "Americas",
|
|
17
|
+
countries: [
|
|
18
|
+
{ displayTitle: "Canada", countryCode: "CA", url: "/canada/store.html" },
|
|
19
|
+
{ displayTitle: "Brazil", countryCode: "BR", url: "/brazil/store.html" },
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
title: "Europe",
|
|
24
|
+
countries: [
|
|
25
|
+
{ displayTitle: "Germany", countryCode: "DE", url: "/germany/store.html" },
|
|
26
|
+
{ displayTitle: "France", countryCode: "FR", url: "/france/store.html" },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
|
|
31
|
+
describe("MastheadCountrySelector", () => {
|
|
32
|
+
describe("accessibleNameSearch property", () => {
|
|
33
|
+
it("passes accessible-name to the search field when set", () => {
|
|
34
|
+
cy.mount(
|
|
35
|
+
<UDExMastheadCountrySelector
|
|
36
|
+
id="country-selector"
|
|
37
|
+
accessible-name-search="Search countries"
|
|
38
|
+
search-label="Search"
|
|
39
|
+
country-title="Choose your Country"
|
|
40
|
+
regions={singleRegion}>
|
|
41
|
+
</UDExMastheadCountrySelector>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
45
|
+
.find("[udex-search]")
|
|
46
|
+
.should("have.attr", "accessible-name", "Search countries");
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it("applies accessible-name as aria-label on the search input", () => {
|
|
50
|
+
cy.mount(
|
|
51
|
+
<UDExMastheadCountrySelector
|
|
52
|
+
id="country-selector-aria"
|
|
53
|
+
accessible-name-search="Find a country"
|
|
54
|
+
search-label="Search"
|
|
55
|
+
country-title="Choose your Country"
|
|
56
|
+
regions={singleRegion}>
|
|
57
|
+
</UDExMastheadCountrySelector>
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
61
|
+
.find("[udex-search]")
|
|
62
|
+
.shadow()
|
|
63
|
+
.find("input")
|
|
64
|
+
.should("have.attr", "aria-label", "Find a country");
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("does not set accessible-name on search when property is empty", () => {
|
|
68
|
+
cy.mount(
|
|
69
|
+
<UDExMastheadCountrySelector
|
|
70
|
+
id="country-selector-no-a11y-name"
|
|
71
|
+
search-label="Search"
|
|
72
|
+
country-title="Choose your Country"
|
|
73
|
+
regions={singleRegion}>
|
|
74
|
+
</UDExMastheadCountrySelector>
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
78
|
+
.find("[udex-search]")
|
|
79
|
+
.should("not.have.attr", "accessible-name");
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe("accessibleNameSearchResetIcon property", () => {
|
|
84
|
+
it("passes accessible-name-reset-icon to the search field when set", () => {
|
|
85
|
+
cy.mount(
|
|
86
|
+
<UDExMastheadCountrySelector
|
|
87
|
+
id="country-selector-reset-icon"
|
|
88
|
+
accessible-name-search-reset-icon="Clear search"
|
|
89
|
+
search-label="Search"
|
|
90
|
+
country-title="Choose your Country"
|
|
91
|
+
regions={singleRegion}>
|
|
92
|
+
</UDExMastheadCountrySelector>
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
96
|
+
.find("[udex-search]")
|
|
97
|
+
.should("have.attr", "accessible-name-reset-icon", "Clear search");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("does not set accessible-name-reset-icon on search when property is empty", () => {
|
|
101
|
+
cy.mount(
|
|
102
|
+
<UDExMastheadCountrySelector
|
|
103
|
+
id="country-selector-no-reset-icon-name"
|
|
104
|
+
search-label="Search"
|
|
105
|
+
country-title="Choose your Country"
|
|
106
|
+
regions={singleRegion}>
|
|
107
|
+
</UDExMastheadCountrySelector>
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
111
|
+
.find("[udex-search]")
|
|
112
|
+
.should("not.have.attr", "accessible-name-reset-icon");
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
describe("regions view", () => {
|
|
117
|
+
beforeEach(() => {
|
|
118
|
+
cy.mount(
|
|
119
|
+
<UDExMastheadCountrySelector
|
|
120
|
+
id="country-selector-multi"
|
|
121
|
+
region-title="Choose your Region"
|
|
122
|
+
country-title="Choose your Country"
|
|
123
|
+
search-label="Search"
|
|
124
|
+
regions={multiRegion}>
|
|
125
|
+
</UDExMastheadCountrySelector>
|
|
126
|
+
);
|
|
127
|
+
cy.get("[udex-masthead-country-selector]").shadow().as("shadow");
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("renders region title", () => {
|
|
131
|
+
cy.get("@shadow").find(".udex-masthead-country-selector__title").should("have.text", "Choose your Region");
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it("renders region items", () => {
|
|
135
|
+
cy.get("@shadow").find(".udex-masthead-country-selector__item_region").should("have.length", 2);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it("opens country list on region item click", () => {
|
|
139
|
+
cy.get("@shadow").find(".udex-masthead-country-selector__item_region").first().click();
|
|
140
|
+
cy.get("@shadow").find(".udex-masthead-country-selector__list_countries").should("exist");
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
describe("single region mode", () => {
|
|
145
|
+
it("shows the country list directly without region selection", () => {
|
|
146
|
+
cy.mount(
|
|
147
|
+
<UDExMastheadCountrySelector
|
|
148
|
+
id="country-selector-single"
|
|
149
|
+
country-title="Choose your Country"
|
|
150
|
+
search-label="Search"
|
|
151
|
+
regions={singleRegion}>
|
|
152
|
+
</UDExMastheadCountrySelector>
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
156
|
+
.find(".udex-masthead-country-selector__list_countries")
|
|
157
|
+
.should("exist");
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
describe("hideSearch property", () => {
|
|
162
|
+
it("hides the search field when hideSearch is true", () => {
|
|
163
|
+
cy.mount(
|
|
164
|
+
<UDExMastheadCountrySelector
|
|
165
|
+
id="country-selector-no-search"
|
|
166
|
+
hide-search
|
|
167
|
+
country-title="Choose your Country"
|
|
168
|
+
regions={singleRegion}>
|
|
169
|
+
</UDExMastheadCountrySelector>
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
cy.get("[udex-masthead-country-selector]").shadow()
|
|
173
|
+
.find("[udex-search]")
|
|
174
|
+
.should("not.exist");
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
});
|
|
@@ -3020,10 +3020,15 @@ describe("SelectBox", () => {
|
|
|
3020
3020
|
.to.deep.equal([$host[0]]);
|
|
3021
3021
|
});
|
|
3022
3022
|
});
|
|
3023
|
-
//
|
|
3023
|
+
// Updated: the full accessible name includes metadata; the visible title is only the primary label.
|
|
3024
3024
|
UDExActiveHost().then($host => {
|
|
3025
3025
|
if ($host.is("[udex-list-item]")) {
|
|
3026
|
-
cy.wrap($host).shadow().find(".udex-list__content-wrap").should(
|
|
3026
|
+
cy.wrap($host).shadow().find(".udex-list__content-wrap").should($content => {
|
|
3027
|
+
expect($content).to.have.attr("aria-label", UDExAccessibleName);
|
|
3028
|
+
const labelId = $content.attr("aria-labelledby")!;
|
|
3029
|
+
const root = $content[0].getRootNode() as ShadowRoot;
|
|
3030
|
+
expect(root.getElementById(labelId)?.textContent).to.equal(UDExAccessibleName);
|
|
3031
|
+
});
|
|
3027
3032
|
cy.wrap($host).shadow().find('[part="title"]').should("have.text", UDExLabel);
|
|
3028
3033
|
}
|
|
3029
3034
|
});
|
|
@@ -260,14 +260,14 @@ function UDExAssertNativeHostStates() {
|
|
|
260
260
|
}
|
|
261
261
|
|
|
262
262
|
function UDExAssertLeafName(UDExHost: Cypress.Chainable<JQuery<HTMLElement>>, UDExLabel: string, UDExSupportingText = "", UDExAdditionalText = "") {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
263
|
+
const accessibleName = [UDExLabel, UDExSupportingText, UDExAdditionalText].filter(Boolean).join(" ");
|
|
264
|
+
// Updated: hosts and both wrapper name sources expose the full name, not just the visible title.
|
|
265
|
+
UDExHost.should("have.attr", "aria-label", accessibleName);
|
|
266
266
|
UDExHost.shadow().find(".udex-list__content-wrap").should($content => {
|
|
267
|
-
expect($content).to.have.attr("aria-label",
|
|
267
|
+
expect($content).to.have.attr("aria-label", accessibleName);
|
|
268
268
|
const UDExLabelId = $content.attr("aria-labelledby")!;
|
|
269
269
|
const UDExRoot = $content[0].getRootNode() as ShadowRoot;
|
|
270
|
-
expect(UDExRoot.getElementById(UDExLabelId)?.textContent).to.equal(
|
|
270
|
+
expect(UDExRoot.getElementById(UDExLabelId)?.textContent).to.equal(accessibleName);
|
|
271
271
|
expect($content.find('[part="title"]').text()).to.equal(UDExLabel);
|
|
272
272
|
});
|
|
273
273
|
}
|
|
@@ -507,3 +507,52 @@ describe("SideNavigation - group collapse not blocked by selected child", () =>
|
|
|
507
507
|
cy.get("[udex-side-navigation-item]").first().should("have.attr", "expanded");
|
|
508
508
|
});
|
|
509
509
|
});
|
|
510
|
+
|
|
511
|
+
describe("SideNavigation - additionalContent slot", () => {
|
|
512
|
+
it("renders the additional-content area when content is slotted", () => {
|
|
513
|
+
cy.mount(
|
|
514
|
+
<SideNav id="side-nav">
|
|
515
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
516
|
+
<div slot="additionalContent">
|
|
517
|
+
<p>Lorem ipsum dolor sit amet</p>
|
|
518
|
+
<button>Button</button>
|
|
519
|
+
</div>
|
|
520
|
+
</SideNav>,
|
|
521
|
+
);
|
|
522
|
+
cy.get("[udex-side-navigation]")
|
|
523
|
+
.shadow()
|
|
524
|
+
.find(".udex-side-navigation__additional-content")
|
|
525
|
+
.should("exist");
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
it("does not render the additional-content area when the slot is empty", () => {
|
|
529
|
+
cy.mount(
|
|
530
|
+
<SideNav id="side-nav">
|
|
531
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
532
|
+
</SideNav>,
|
|
533
|
+
);
|
|
534
|
+
cy.get("[udex-side-navigation]")
|
|
535
|
+
.shadow()
|
|
536
|
+
.find(".udex-side-navigation__additional-content")
|
|
537
|
+
.should("not.exist");
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
it("projects the slotted content into the additional-content area", () => {
|
|
541
|
+
cy.mount(
|
|
542
|
+
<SideNav id="side-nav">
|
|
543
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
544
|
+
<div slot="additionalContent">
|
|
545
|
+
<button type="button">Call to action</button>
|
|
546
|
+
</div>
|
|
547
|
+
</SideNav>,
|
|
548
|
+
);
|
|
549
|
+
cy.get("[udex-side-navigation]")
|
|
550
|
+
.shadow()
|
|
551
|
+
.find(".udex-side-navigation__additional-content slot[name='additionalContent']")
|
|
552
|
+
.should("exist");
|
|
553
|
+
cy.get("[udex-side-navigation] [slot='additionalContent'] button").should(
|
|
554
|
+
"have.text",
|
|
555
|
+
"Call to action",
|
|
556
|
+
);
|
|
557
|
+
});
|
|
558
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
UDExSideNavigationMobile,
|
|
3
|
+
UDExSideNavigationItem,
|
|
4
|
+
} from "../support/component-imports.js";
|
|
5
|
+
|
|
6
|
+
describe("SideNavigationMobile - additionalContent slot", () => {
|
|
7
|
+
const getAdditionalContent = () =>
|
|
8
|
+
cy.get("[udex-side-navigation-mobile]")
|
|
9
|
+
.shadow()
|
|
10
|
+
.find("[udex-side-navigation]")
|
|
11
|
+
.shadow()
|
|
12
|
+
.find(".udex-side-navigation__additional-content");
|
|
13
|
+
|
|
14
|
+
it("renders the additional-content area inside the inner nav when content is slotted", () => {
|
|
15
|
+
cy.mount(
|
|
16
|
+
<UDExSideNavigationMobile>
|
|
17
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
18
|
+
<div slot="additionalContent">
|
|
19
|
+
<button type="button">Button</button>
|
|
20
|
+
</div>
|
|
21
|
+
</UDExSideNavigationMobile>,
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
getAdditionalContent().should("exist");
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("does not render the additional-content area when the slot is empty", () => {
|
|
28
|
+
cy.mount(
|
|
29
|
+
<UDExSideNavigationMobile>
|
|
30
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
31
|
+
</UDExSideNavigationMobile>,
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
getAdditionalContent().should("not.exist");
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it("projects the slotted content into the inner nav's additionalContent slot", () => {
|
|
38
|
+
cy.mount(
|
|
39
|
+
<UDExSideNavigationMobile>
|
|
40
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
41
|
+
<div slot="additionalContent">
|
|
42
|
+
<button type="button">Call to action</button>
|
|
43
|
+
</div>
|
|
44
|
+
</UDExSideNavigationMobile>,
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
getAdditionalContent()
|
|
48
|
+
.find("slot[name='additionalContent']")
|
|
49
|
+
.should("exist");
|
|
50
|
+
cy.get("[udex-side-navigation-mobile]")
|
|
51
|
+
.shadow()
|
|
52
|
+
.find("[udex-side-navigation] [slot='additionalContent'] button")
|
|
53
|
+
.should("have.text", "Call to action");
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("renders the additional-content area alongside fixed items", () => {
|
|
57
|
+
cy.mount(
|
|
58
|
+
<UDExSideNavigationMobile>
|
|
59
|
+
<UDExSideNavigationItem text="Item 1"></UDExSideNavigationItem>
|
|
60
|
+
<UDExSideNavigationItem slot="fixedItems" text="Fixed 1"></UDExSideNavigationItem>
|
|
61
|
+
<div slot="additionalContent">
|
|
62
|
+
<button type="button">Button</button>
|
|
63
|
+
</div>
|
|
64
|
+
</UDExSideNavigationMobile>,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
getAdditionalContent().should("exist");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -40,6 +40,7 @@ import UDExList from "../../instrumented/List.js";
|
|
|
40
40
|
import UDExListGroupHeader from "../../instrumented/ListGroupHeader.js";
|
|
41
41
|
import UDExListItem from "../../instrumented/ListItem.js";
|
|
42
42
|
import UDExMastheadItem from "../../instrumented/MastheadItem.js";
|
|
43
|
+
import UDExMastheadCountrySelector from "../../instrumented/MastheadCountrySelector.js";
|
|
43
44
|
import UDExMastheadMenu from "../../instrumented/MastheadMenu.js";
|
|
44
45
|
import UDExMastheadMobileMenu from "../../instrumented/MastheadMobileMenu.js";
|
|
45
46
|
import UDExMastheadProfileMenu from "../../instrumented/MastheadProfileMenu.js";
|
|
@@ -61,6 +62,7 @@ import UDExSecondaryNavigation from "../../instrumented/SecondaryNavigation.js";
|
|
|
61
62
|
import UDExSelectBox from "../../instrumented/SelectBox.js";
|
|
62
63
|
import UDExSideNavigation from "../../instrumented/SideNavigation.js";
|
|
63
64
|
import UDExSideNavigationItem from "../../instrumented/SideNavigationItem.js";
|
|
65
|
+
import UDExSideNavigationMobile from "../../instrumented/SideNavigationMobile.js";
|
|
64
66
|
import UDExSideNavigationSubItem from "../../instrumented/SideNavigationSubItem.js";
|
|
65
67
|
import UDExSelectBoxGroupHeader from "../../instrumented/SelectBoxGroupHeader.js";
|
|
66
68
|
import UDExSelectBoxItem from "../../instrumented/SelectBoxItem.js";
|
|
@@ -135,6 +137,7 @@ export {
|
|
|
135
137
|
UDExListItem,
|
|
136
138
|
UDExListGroupHeader,
|
|
137
139
|
UDExMastheadItem,
|
|
140
|
+
UDExMastheadCountrySelector,
|
|
138
141
|
UDExMastheadMenu,
|
|
139
142
|
UDExMastheadMobileMenu,
|
|
140
143
|
UDExMastheadProfileMenu,
|
|
@@ -156,6 +159,7 @@ export {
|
|
|
156
159
|
UDExSelectBox,
|
|
157
160
|
UDExSideNavigation,
|
|
158
161
|
UDExSideNavigationItem,
|
|
162
|
+
UDExSideNavigationMobile,
|
|
159
163
|
UDExSideNavigationSubItem,
|
|
160
164
|
UDExSelectBoxGroupHeader,
|
|
161
165
|
UDExSelectBoxItem,
|