@sapudex/web-components 2.56.0 → 2.58.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/README.md +258 -0
- package/cypress/specs/FilterMenu.cy.tsx +209 -19
- package/cypress/specs/List.cy.tsx +67 -4
- package/cypress/specs/ListItem.cy.tsx +35 -9
- package/cypress/specs/SelectBox.cy.tsx +100 -0
- package/cypress/specs/TabNavigation.cy.tsx +297 -21
- package/cypress/specs/TagGroup.cy.tsx +35 -0
- package/dist/Carousel.d.ts +9 -3
- package/dist/Carousel.js +35 -6
- package/dist/Carousel.js.map +1 -1
- package/dist/CarouselTemplate.js +3 -3
- package/dist/CarouselTemplate.js.map +1 -1
- package/dist/List.d.ts +15 -1
- package/dist/List.js +23 -2
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +13 -0
- package/dist/ListGroupHeaderBase.js +43 -2
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListGroupHeaderTemplate.js +26 -7
- package/dist/ListGroupHeaderTemplate.js.map +1 -1
- package/dist/ListItem.d.ts +0 -3
- package/dist/ListItem.js +18 -12
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +17 -0
- package/dist/ListItemBase.js +15 -0
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListItemTemplate.js +2 -2
- package/dist/ListItemTemplate.js.map +1 -1
- package/dist/MastheadCountrySelector.js +5 -5
- package/dist/MastheadCountrySelector.js.map +1 -1
- package/dist/MastheadCountrySelectorTemplate.d.ts +2 -0
- package/dist/MastheadCountrySelectorTemplate.js +15 -0
- package/dist/MastheadCountrySelectorTemplate.js.map +1 -0
- package/dist/MastheadItem.d.ts +0 -3
- package/dist/MastheadItem.js +3 -6
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadItemTemplate.d.ts +2 -0
- package/dist/MastheadItemTemplate.js +41 -0
- package/dist/MastheadItemTemplate.js.map +1 -0
- package/dist/MastheadMenu.d.ts +1 -0
- package/dist/MastheadMenu.js +4 -6
- package/dist/MastheadMenu.js.map +1 -1
- package/dist/MastheadMenuItem.d.ts +0 -3
- package/dist/MastheadMenuItem.js +3 -6
- package/dist/MastheadMenuItem.js.map +1 -1
- package/dist/MastheadMenuItemTemplate.d.ts +2 -0
- package/dist/MastheadMenuItemTemplate.js +36 -0
- package/dist/MastheadMenuItemTemplate.js.map +1 -0
- package/dist/MastheadMenuTemplate.d.ts +2 -0
- package/dist/MastheadMenuTemplate.js +13 -0
- package/dist/MastheadMenuTemplate.js.map +1 -0
- package/dist/MastheadMobileMenu.js +3 -3
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/MastheadMobileMenuTemplate.d.ts +2 -0
- package/dist/MastheadMobileMenuTemplate.js +33 -0
- package/dist/MastheadMobileMenuTemplate.js.map +1 -0
- package/dist/MastheadProfileMenu.d.ts +2 -4
- package/dist/MastheadProfileMenu.js +5 -20
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadProfileMenuTemplate.d.ts +2 -0
- package/dist/MastheadProfileMenuTemplate.js +24 -0
- package/dist/MastheadProfileMenuTemplate.js.map +1 -0
- package/dist/MastheadShell.js +3 -5
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MastheadShellTemplate.d.ts +2 -0
- package/dist/MastheadShellTemplate.js +20 -0
- package/dist/MastheadShellTemplate.js.map +1 -0
- package/dist/SearchableListBase.d.ts +10 -0
- package/dist/SearchableListBase.js +34 -1
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +35 -4
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +1 -0
- package/dist/SecondaryNavigation.js +20 -6
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SelectBase.js +8 -3
- package/dist/SelectBase.js.map +1 -1
- package/dist/Tab.d.ts +0 -7
- package/dist/Tab.js +4 -19
- package/dist/Tab.js.map +1 -1
- package/dist/TabHeaderTemplate.d.ts +2 -0
- package/dist/TabHeaderTemplate.js +15 -0
- package/dist/TabHeaderTemplate.js.map +1 -0
- package/dist/TabInOverflowTemplate.d.ts +2 -0
- package/dist/TabInOverflowTemplate.js +7 -0
- package/dist/TabInOverflowTemplate.js.map +1 -0
- package/dist/TabNavigation.d.ts +6 -6
- package/dist/TabNavigation.js +56 -42
- package/dist/TabNavigation.js.map +1 -1
- package/dist/TabNavigationPopoverTemplate.d.ts +2 -0
- package/dist/TabNavigationPopoverTemplate.js +9 -0
- package/dist/TabNavigationPopoverTemplate.js.map +1 -0
- package/dist/TabNavigationTemplate.d.ts +2 -0
- package/dist/TabNavigationTemplate.js +10 -0
- package/dist/TabNavigationTemplate.js.map +1 -0
- package/dist/TabTemplate.d.ts +2 -0
- package/dist/TabTemplate.js +5 -0
- package/dist/TabTemplate.js.map +1 -0
- package/dist/Tag.d.ts +1 -0
- package/dist/Tag.js +6 -0
- package/dist/Tag.js.map +1 -1
- package/dist/TagGroup.js +4 -2
- package/dist/TagGroup.js.map +1 -1
- package/dist/assets/{InputSuggestions-ChhTxYh4.js → InputSuggestions-CMYjJsHw.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-Bh1HxZfH.js → ListItemStandardExpandableTextTemplate-D2i8wWuR.js} +1 -1
- package/dist/assets/{bundle.esm-DCX_ohoZ.js → bundle.esm-BjN47C_y.js} +242 -242
- package/dist/assets/messagebundle_ar-BvIvqOKJ.js +1 -0
- package/dist/assets/messagebundle_bg-CbE9TJP3.js +1 -0
- package/dist/assets/messagebundle_cs-D7sDCnrw.js +1 -0
- package/dist/assets/messagebundle_da-BKcG2gb3.js +1 -0
- package/dist/assets/messagebundle_de-CqojOAqG.js +1 -0
- package/dist/assets/messagebundle_el-DLfp0_Vm.js +1 -0
- package/dist/assets/messagebundle_en-B7YJOdQz.js +1 -0
- package/dist/assets/messagebundle_es-dcaagZn0.js +1 -0
- package/dist/assets/messagebundle_et-XYXhCdvm.js +1 -0
- package/dist/assets/messagebundle_fi-Dffg0zEq.js +1 -0
- package/dist/assets/messagebundle_fr-CW8ENL86.js +1 -0
- package/dist/assets/messagebundle_hr-onMgZwRd.js +1 -0
- package/dist/assets/messagebundle_hu-BPDuHAe0.js +1 -0
- package/dist/assets/messagebundle_it-BcfXVW1A.js +1 -0
- package/dist/assets/messagebundle_ja-EWp-Nkd9.js +1 -0
- package/dist/assets/messagebundle_ko-BKQ27UJW.js +1 -0
- package/dist/assets/messagebundle_lt-A-f2EeMY.js +1 -0
- package/dist/assets/messagebundle_lv-CHVU_rnx.js +1 -0
- package/dist/assets/messagebundle_nl-gmf1np1i.js +1 -0
- package/dist/assets/messagebundle_no-CazfcIRA.js +1 -0
- package/dist/assets/messagebundle_pl-iv_zMkL4.js +1 -0
- package/dist/assets/messagebundle_pt-usY49ESJ.js +1 -0
- package/dist/assets/messagebundle_pt_PT-DTLEUiTC.js +1 -0
- package/dist/assets/messagebundle_ro-BHeGIHaV.js +1 -0
- package/dist/assets/messagebundle_ru-DJB1z_R0.js +1 -0
- package/dist/assets/messagebundle_sk-DlNIpzr3.js +1 -0
- package/dist/assets/messagebundle_sl-Day075Cf.js +1 -0
- package/dist/assets/messagebundle_sr-iI_TwIHf.js +1 -0
- package/dist/assets/messagebundle_sv-BPj73b5X.js +1 -0
- package/dist/assets/messagebundle_tr-DpdBqQtI.js +1 -0
- package/dist/assets/messagebundle_uk-CT4EqEBF.js +1 -0
- package/dist/assets/messagebundle_zh_CN-B_42cWcu.js +1 -0
- package/dist/assets/messagebundle_zh_TW-D25iNCcy.js +1 -0
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/Carousel.css +1 -1
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/css/themes/PromoTile.css +1 -1
- package/dist/css/themes/Switch.css +1 -1
- package/dist/css/themes/TabInOverflow.css +1 -1
- package/dist/css/themes/TabNavigation.css +1 -1
- package/dist/css/themes/Tooltip.css +1 -1
- package/dist/custom-elements-internal.json +12 -12
- package/dist/custom-elements.json +12 -12
- package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_bg.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_cs.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_da.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_de.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_el.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_es.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_et.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_fi.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_fr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_hu.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_nl.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_pl.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_pt.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_pt_PT.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ro.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ru.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sl.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_sv.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_tr.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_uk.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_CN.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_zh_TW.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +3 -9
- package/dist/generated/i18n/i18n-defaults.js +3 -9
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/Button.css.d.ts +1 -1
- package/dist/generated/themes/Button.css.js +1 -1
- package/dist/generated/themes/Button.css.js.map +1 -1
- package/dist/generated/themes/Carousel.css.d.ts +1 -1
- package/dist/generated/themes/Carousel.css.js +1 -1
- package/dist/generated/themes/Carousel.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/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/Switch.css.d.ts +1 -1
- package/dist/generated/themes/Switch.css.js +1 -1
- package/dist/generated/themes/Switch.css.js.map +1 -1
- package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
- package/dist/generated/themes/TabInOverflow.css.js +1 -1
- package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
- package/dist/generated/themes/TabNavigation.css.d.ts +1 -1
- package/dist/generated/themes/TabNavigation.css.js +1 -1
- package/dist/generated/themes/TabNavigation.css.js.map +1 -1
- package/dist/generated/themes/Tooltip.css.d.ts +1 -1
- package/dist/generated/themes/Tooltip.css.js +1 -1
- package/dist/generated/themes/Tooltip.css.js.map +1 -1
- package/dist/messagebundle.properties +4 -10
- package/dist/messagebundle_ar.properties +0 -6
- package/dist/messagebundle_bg.properties +0 -8
- package/dist/messagebundle_cs.properties +0 -8
- package/dist/messagebundle_da.properties +0 -8
- package/dist/messagebundle_de.properties +0 -8
- package/dist/messagebundle_el.properties +0 -8
- package/dist/messagebundle_en.properties +2 -8
- package/dist/messagebundle_es.properties +0 -8
- package/dist/messagebundle_et.properties +0 -8
- package/dist/messagebundle_fi.properties +0 -8
- package/dist/messagebundle_fr.properties +0 -8
- package/dist/messagebundle_hr.properties +0 -8
- package/dist/messagebundle_hu.properties +0 -8
- package/dist/messagebundle_it.properties +0 -8
- package/dist/messagebundle_ja.properties +0 -8
- package/dist/messagebundle_ko.properties +0 -8
- package/dist/messagebundle_lt.properties +0 -8
- package/dist/messagebundle_lv.properties +0 -8
- package/dist/messagebundle_nl.properties +0 -8
- package/dist/messagebundle_no.properties +0 -8
- package/dist/messagebundle_pl.properties +0 -8
- package/dist/messagebundle_pt.properties +0 -8
- package/dist/messagebundle_pt_PT.properties +0 -8
- package/dist/messagebundle_ro.properties +0 -8
- package/dist/messagebundle_ru.properties +0 -8
- package/dist/messagebundle_sk.properties +0 -8
- package/dist/messagebundle_sl.properties +0 -7
- package/dist/messagebundle_sr.properties +0 -8
- package/dist/messagebundle_sv.properties +0 -8
- package/dist/messagebundle_tr.properties +0 -8
- package/dist/messagebundle_uk.properties +0 -8
- package/dist/messagebundle_zh_CN.properties +0 -8
- package/dist/messagebundle_zh_TW.properties +0 -8
- package/dist/vscode.html-custom-data.json +10 -2
- package/dist/web-types.json +6 -6
- package/package.json +1 -1
- package/src/Carousel.ts +51 -8
- package/src/CarouselTemplate.tsx +7 -7
- package/src/List.ts +24 -2
- package/src/ListGroupHeaderBase.ts +44 -2
- package/src/ListGroupHeaderTemplate.tsx +74 -23
- package/src/ListItem.ts +18 -15
- package/src/ListItemBase.ts +30 -0
- package/src/ListItemTemplate.tsx +4 -4
- package/src/MastheadCountrySelector.ts +5 -5
- package/src/MastheadCountrySelectorTemplate.tsx +98 -0
- package/src/MastheadItem.ts +3 -6
- package/src/MastheadItemTemplate.tsx +178 -0
- package/src/MastheadMenu.ts +5 -6
- package/src/MastheadMenuItem.ts +3 -7
- package/src/MastheadMenuItemTemplate.tsx +123 -0
- package/src/MastheadMenuTemplate.tsx +142 -0
- package/src/MastheadMobileMenu.ts +3 -3
- package/src/MastheadMobileMenuTemplate.tsx +274 -0
- package/src/MastheadProfileMenu.ts +10 -23
- package/src/MastheadProfileMenuTemplate.tsx +143 -0
- package/src/MastheadShell.ts +3 -5
- package/src/MastheadShellTemplate.tsx +228 -0
- package/src/SearchableListBase.ts +37 -1
- package/src/SearchableListBaseTemplate.tsx +38 -2
- package/src/SecondaryNavigation.ts +21 -6
- package/src/SelectBase.ts +8 -3
- package/src/Tab.ts +4 -24
- package/src/TabHeaderTemplate.tsx +153 -0
- package/src/TabInOverflowTemplate.tsx +68 -0
- package/src/TabNavigation.ts +64 -46
- package/src/TabNavigationPopoverTemplate.tsx +27 -0
- package/src/TabNavigationTemplate.tsx +98 -0
- package/src/TabTemplate.tsx +7 -0
- package/src/Tag.ts +7 -0
- package/src/TagGroup.ts +4 -2
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/Carousel.css.ts +1 -1
- package/src/generated/themes/ListGroupHeader.css.ts +1 -1
- package/src/generated/themes/PromoTile.css.ts +1 -1
- package/src/generated/themes/Switch.css.ts +1 -1
- package/src/generated/themes/TabInOverflow.css.ts +1 -1
- package/src/generated/themes/TabNavigation.css.ts +1 -1
- package/src/generated/themes/Tooltip.css.ts +1 -1
- package/src/i18n/messagebundle.properties +4 -10
- package/src/i18n/messagebundle_ar.properties +0 -6
- package/src/i18n/messagebundle_bg.properties +0 -8
- package/src/i18n/messagebundle_cs.properties +0 -8
- package/src/i18n/messagebundle_da.properties +0 -8
- package/src/i18n/messagebundle_de.properties +0 -8
- package/src/i18n/messagebundle_el.properties +0 -8
- package/src/i18n/messagebundle_en.properties +2 -8
- package/src/i18n/messagebundle_es.properties +0 -8
- package/src/i18n/messagebundle_et.properties +0 -8
- package/src/i18n/messagebundle_fi.properties +0 -8
- package/src/i18n/messagebundle_fr.properties +0 -8
- package/src/i18n/messagebundle_hr.properties +0 -8
- package/src/i18n/messagebundle_hu.properties +0 -8
- package/src/i18n/messagebundle_it.properties +0 -8
- package/src/i18n/messagebundle_ja.properties +0 -8
- package/src/i18n/messagebundle_ko.properties +0 -8
- package/src/i18n/messagebundle_lt.properties +0 -8
- package/src/i18n/messagebundle_lv.properties +0 -8
- package/src/i18n/messagebundle_nl.properties +0 -8
- package/src/i18n/messagebundle_no.properties +0 -8
- package/src/i18n/messagebundle_pl.properties +0 -8
- package/src/i18n/messagebundle_pt.properties +0 -8
- package/src/i18n/messagebundle_pt_PT.properties +0 -8
- package/src/i18n/messagebundle_ro.properties +0 -8
- package/src/i18n/messagebundle_ru.properties +0 -8
- package/src/i18n/messagebundle_sk.properties +0 -8
- package/src/i18n/messagebundle_sl.properties +0 -7
- package/src/i18n/messagebundle_sr.properties +0 -8
- package/src/i18n/messagebundle_sv.properties +0 -8
- package/src/i18n/messagebundle_tr.properties +0 -8
- package/src/i18n/messagebundle_uk.properties +0 -8
- package/src/i18n/messagebundle_zh_CN.properties +0 -8
- package/src/i18n/messagebundle_zh_TW.properties +0 -8
- package/src/themes/Button.css +2 -1
- package/src/themes/Carousel.css +17 -10
- package/src/themes/ListGroupHeader.css +50 -7
- package/src/themes/PromoTile.css +1 -0
- package/src/themes/Switch.css +2 -2
- package/src/themes/TabInOverflow.css +9 -4
- package/src/themes/TabNavigation.css +1 -0
- package/src/themes/Tooltip.css +5 -4
- package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +0 -1
- package/dist/assets/messagebundle_bg-4ainC3nj.js +0 -1
- package/dist/assets/messagebundle_cs-CFtmLavu.js +0 -1
- package/dist/assets/messagebundle_da-BHL-qTPd.js +0 -1
- package/dist/assets/messagebundle_de-SMiMT-ST.js +0 -1
- package/dist/assets/messagebundle_el-ChAszJ4A.js +0 -1
- package/dist/assets/messagebundle_en-B0P3kkb6.js +0 -1
- package/dist/assets/messagebundle_es-LGmRBKqB.js +0 -1
- package/dist/assets/messagebundle_et-yYsmBPXN.js +0 -1
- package/dist/assets/messagebundle_fi-DeMNrHC9.js +0 -1
- package/dist/assets/messagebundle_fr-qEm5Eykz.js +0 -1
- package/dist/assets/messagebundle_hr-NBdiYo-T.js +0 -1
- package/dist/assets/messagebundle_hu-CBV3ISbF.js +0 -1
- package/dist/assets/messagebundle_it-BML2SC0W.js +0 -1
- package/dist/assets/messagebundle_ja-zyFfZHcj.js +0 -1
- package/dist/assets/messagebundle_ko-BCPaSqNp.js +0 -1
- package/dist/assets/messagebundle_lt-DB4b6FVx.js +0 -1
- package/dist/assets/messagebundle_lv-tAOia5tU.js +0 -1
- package/dist/assets/messagebundle_nl-BKUpVV-D.js +0 -1
- package/dist/assets/messagebundle_no-BZQfeWxT.js +0 -1
- package/dist/assets/messagebundle_pl-CsXeN1y6.js +0 -1
- package/dist/assets/messagebundle_pt-D9rap3lj.js +0 -1
- package/dist/assets/messagebundle_pt_PT-CQ5YAsmx.js +0 -1
- package/dist/assets/messagebundle_ro-BTNJ9YdP.js +0 -1
- package/dist/assets/messagebundle_ru-BTDmH8CB.js +0 -1
- package/dist/assets/messagebundle_sk-Lb4jvtpc.js +0 -1
- package/dist/assets/messagebundle_sl-BZi2bKSy.js +0 -1
- package/dist/assets/messagebundle_sr-B9TYgxO1.js +0 -1
- package/dist/assets/messagebundle_sv-DWlY9RTQ.js +0 -1
- package/dist/assets/messagebundle_tr-DOeCmUdx.js +0 -1
- package/dist/assets/messagebundle_uk-CCv57GhV.js +0 -1
- package/dist/assets/messagebundle_zh_CN-CHwH3F3-.js +0 -1
- package/dist/assets/messagebundle_zh_TW-FO0BCkub.js +0 -1
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js +0 -13
- package/dist/generated/templates/MastheadCountrySelectorTemplate.lit.js.map +0 -1
- package/dist/generated/templates/MastheadItemTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadItemTemplate.lit.js +0 -43
- package/dist/generated/templates/MastheadItemTemplate.lit.js.map +0 -1
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js +0 -21
- package/dist/generated/templates/MastheadMenuItemTemplate.lit.js.map +0 -1
- package/dist/generated/templates/MastheadMenuTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadMenuTemplate.lit.js +0 -25
- package/dist/generated/templates/MastheadMenuTemplate.lit.js.map +0 -1
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +0 -37
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +0 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +0 -18
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +0 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/MastheadShellTemplate.lit.js +0 -28
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TabHeaderTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TabHeaderTemplate.lit.js +0 -52
- package/dist/generated/templates/TabHeaderTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TabInOverflowTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TabInOverflowTemplate.lit.js +0 -15
- package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TabNavigationPopoverTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +0 -8
- package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TabNavigationTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TabNavigationTemplate.lit.js +0 -16
- package/dist/generated/templates/TabNavigationTemplate.lit.js.map +0 -1
- package/dist/generated/templates/TabTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TabTemplate.lit.js +0 -7
- package/dist/generated/templates/TabTemplate.lit.js.map +0 -1
- package/src/MastheadCountrySelector.hbs +0 -76
- package/src/MastheadItem.hbs +0 -136
- package/src/MastheadMenu.hbs +0 -131
- package/src/MastheadMenuItem.hbs +0 -102
- package/src/MastheadMobileMenu.hbs +0 -253
- package/src/MastheadProfileMenu.hbs +0 -121
- package/src/MastheadShell.hbs +0 -223
- package/src/Tab.hbs +0 -1
- package/src/TabHeader.hbs +0 -141
- package/src/TabInOverflow.hbs +0 -59
- package/src/TabNavigation.hbs +0 -86
- package/src/TabNavigationPopover.hbs +0 -18
- package/src/generated/templates/MastheadCountrySelectorTemplate.lit.ts +0 -17
- package/src/generated/templates/MastheadItemTemplate.lit.ts +0 -47
- package/src/generated/templates/MastheadMenuItemTemplate.lit.ts +0 -25
- package/src/generated/templates/MastheadMenuTemplate.lit.ts +0 -29
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +0 -41
- package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +0 -22
- package/src/generated/templates/MastheadShellTemplate.lit.ts +0 -32
- package/src/generated/templates/TabHeaderTemplate.lit.ts +0 -56
- package/src/generated/templates/TabInOverflowTemplate.lit.ts +0 -19
- package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +0 -12
- package/src/generated/templates/TabNavigationTemplate.lit.ts +0 -20
- package/src/generated/templates/TabTemplate.lit.ts +0 -11
package/README.md
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Quickstart guide for UDEx Components
|
|
2
|
+
|
|
3
|
+
Follow along these few steps to get you successfully using our provided web components.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Installation](#installation)
|
|
8
|
+
- [Importing the component/-s you intend to use](#importing-the-component-s-you-intend-to-use)
|
|
9
|
+
- [Using the component](#using-the-component)
|
|
10
|
+
- [Using our custom theme](#using-our-custom-theme)
|
|
11
|
+
- [Import our asset bundle and theme css](#import-our-asset-bundle-and-theme-css)
|
|
12
|
+
- [Activate the theme](#activate-the-theme)
|
|
13
|
+
- [Configuration options](#configuration-options)
|
|
14
|
+
- [Controlling default tooltips](#controlling-default-tooltips)
|
|
15
|
+
- [Language](#language)
|
|
16
|
+
- [UDEx Custom Translation](#udex-custom-translation)
|
|
17
|
+
- [Using UDEx components with UI5 components](#using-ui5-components)
|
|
18
|
+
- [Scoping configuration](#scoping-configuration)
|
|
19
|
+
- [Using UI5 icons](#using-ui5-icons)
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
To use our provided components, it's necessary to add the package to your project as a dependancy:
|
|
24
|
+
|
|
25
|
+
Using npm:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @sapudex/web-components
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Or with yarn:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
yarn add @sapudex/web-components
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Importing the component/-s you intend to use
|
|
38
|
+
|
|
39
|
+
Next we're going to import and register the components we need, this should be done at the root of application(`src/main.js`, etc) to ensure the components are loaded appropriately.
|
|
40
|
+
Registering the components will tell the browser what to do with them once it encounters their HTML markup tags in source.
|
|
41
|
+
|
|
42
|
+
Replace `<component-name>` with the name of the desired component.
|
|
43
|
+
|
|
44
|
+
```javascript
|
|
45
|
+
import '@sapudex/web-components/dist/<component-name>.js';
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For example, to use the "Button" component:
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
import '@sapudex/web-components/dist/Button.js';
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Using the component
|
|
55
|
+
|
|
56
|
+
And finally, once the component is imported, you can use it just like any other standard HTML element, typically by adding it to your rendered HTML markup.
|
|
57
|
+
|
|
58
|
+
```html
|
|
59
|
+
<html>
|
|
60
|
+
<body>
|
|
61
|
+
<section>
|
|
62
|
+
<udex-button>UDEx Button</udex-button>
|
|
63
|
+
</section>
|
|
64
|
+
</body>
|
|
65
|
+
</html>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```jsx
|
|
69
|
+
const renderSectionWithButton = (title = 'UDEx Button') => (
|
|
70
|
+
<section>
|
|
71
|
+
<udex-button>{title}</udex-button>
|
|
72
|
+
</section>
|
|
73
|
+
);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Using our custom theme
|
|
77
|
+
|
|
78
|
+
While our components come out-of-the-box with default styling, it's recommended to include our theming assets as well.
|
|
79
|
+
|
|
80
|
+
### Import our asset bundle and theme css
|
|
81
|
+
|
|
82
|
+
Import our `Assets.js` in your root javascript - `main.js`, `index.js` or similar.
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
import '@sapudex/web-components/dist/Assets.js';
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
and add the following HTML snippet to your root `.html` file - `index.html` or similar, depending on your setup.
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<link rel="stylesheet" type="text/css" href="path/to/@sapudex/design-tokens/dist/themes/sap_glow/css_variables.css">
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Where you should adjust the path to the theme("css_variables.css") file provided by our `@sapudex/design-tokens` package.
|
|
95
|
+
|
|
96
|
+
An alternative way for setting up the theme is to import our `css_variables.css` before the `Assets.js` in the root javascript.
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
import '@sapudex/design-tokens/dist/themes/sap_glow/css_variables.css';
|
|
100
|
+
import '@sapudex/web-components/dist/Assets.js';
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Another option, if acceptable by technical requirements, you can use theme files from our CDN, e.g.:
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<link rel="stylesheet" type="text/css" href="https://cdn.udex.services.sap.com/dds/design-tokens/latest/themes/sap_glow/css_variables.css">
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Activate the theme
|
|
110
|
+
|
|
111
|
+
You have several options on activating the theme but the simplest is to add a
|
|
112
|
+
small HTML snippet to your root `.html` file:
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<script data-ui5-config type="application/json">
|
|
116
|
+
{
|
|
117
|
+
"theme": "sap_glow"
|
|
118
|
+
}
|
|
119
|
+
</script>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Visit [SAP Web Components](https://ui5.github.io/webcomponents/docs/advanced/theming-part2/) to see other ways to activate our theme or just generally integrate with the SAP Web Components/Theme Designer theming ecosystem.
|
|
123
|
+
|
|
124
|
+
## Configuration options
|
|
125
|
+
|
|
126
|
+
### Controlling default tooltips
|
|
127
|
+
|
|
128
|
+
Configuration options are inherited from UI5 settings. For more information, please visit [UI5 Configuration documentation](https://ui5.github.io/webcomponents/docs/advanced/configuration/).
|
|
129
|
+
|
|
130
|
+
This configuration option controls whether components will display default tooltips in specific cases.
|
|
131
|
+
|
|
132
|
+
Default tooltips are generally recommended to cover accessibility standards and typically you would not need to modify this setting. However, in rare cases you may want to implement custom tooltip visualization and turn off the default tooltips. To do so, set `enableDefaultTooltips` to `false`.
|
|
133
|
+
|
|
134
|
+
```html
|
|
135
|
+
<script data-ui5-config type="application/json">
|
|
136
|
+
{
|
|
137
|
+
"enableDefaultTooltips": false
|
|
138
|
+
}
|
|
139
|
+
</script>
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Language
|
|
144
|
+
|
|
145
|
+
Configuration options are inherited from UI5 settings. For more information, please visit [UI5 Configuration documentation](https://ui5.github.io/webcomponents/docs/advanced/configuration/).
|
|
146
|
+
|
|
147
|
+
Language to be used for translatable texts. The `en` language is built in all UI5/UDEx Web Components that have translatable texts. Thus, components are always translated. Configuring another language will additionally fetch and use that language. Any language is fetched once.
|
|
148
|
+
|
|
149
|
+
```html
|
|
150
|
+
<script data-ui5-config type="application/json">
|
|
151
|
+
{
|
|
152
|
+
"language": "zh_cn"
|
|
153
|
+
}
|
|
154
|
+
</script>
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
or
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
import { setLanguage } from "@ui5/webcomponents-base/dist/config/Language.js";
|
|
162
|
+
setLanguage("zh_cn");
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### UDEx custom Translation
|
|
166
|
+
|
|
167
|
+
UDEx custom translation is a feature that allows to overwrite default UI5 automatic translation of components hardcoded text.
|
|
168
|
+
This setting will overwrite translated texts, regardless of configured language.
|
|
169
|
+
To setup custom translations, push an object with proper `[key: string] :string` values into `window["udex-config"].translations` object, before component loads.
|
|
170
|
+
|
|
171
|
+
```javascript
|
|
172
|
+
window["udex-config"] = {
|
|
173
|
+
translations: {
|
|
174
|
+
MAIN_LINKS: "custom main links",
|
|
175
|
+
LOGOUT: "custom logout"
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
List of all translatable keys can be found under `@sapudex/web-components/dist/generated/i18n/i18n-defaults.js`.
|
|
181
|
+
|
|
182
|
+
## Using UI5 components
|
|
183
|
+
|
|
184
|
+
In order to use UDEx components together with [UI5 components library](https://ui5.github.io/webcomponents/) , you need to make sure to use matching version for both libraries. UDEx components, under the hood uses following UI5 packages:
|
|
185
|
+
|
|
186
|
+
- `@ui5/webcomponents`
|
|
187
|
+
- `@ui5/webcomponents-base`
|
|
188
|
+
- `@ui5/webcomponents-fiori`
|
|
189
|
+
|
|
190
|
+
If any of this package is used at the same project scope, all of those packages version need to match with the one used internal in `@sapudex/web-components`.
|
|
191
|
+
|
|
192
|
+
### Scoping configuration
|
|
193
|
+
|
|
194
|
+
In case it is not possible to keep in sync ui5 and udex packages version or in case of conflicting functionalities, it is possible to keep both packages detached and use as separate libraries. When scoping is configured, components can be used under tags with custom suffix.
|
|
195
|
+
|
|
196
|
+
Scoping configuration example:
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
import {
|
|
200
|
+
setCustomElementsScopingSuffix,
|
|
201
|
+
setCustomElementsScopingRules,
|
|
202
|
+
} from "@ui5/webcomponents-base/dist/CustomElementsScope.js";
|
|
203
|
+
|
|
204
|
+
setCustomElementsScopingRules({ include: [/^udex-/, /^ui5-/], exclude: [] });
|
|
205
|
+
setCustomElementsScopingSuffix("lib");
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Usage example:
|
|
209
|
+
|
|
210
|
+
```html
|
|
211
|
+
<udex-checkbox-lib></udex-checkbox-lib>
|
|
212
|
+
<ui5-checkbox-lib></ui5-checkbox-lib>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Please read more detailed information about the scoping on [UI5 documentation page](https://ui5.github.io/webcomponents/docs/advanced/scoping/).
|
|
216
|
+
|
|
217
|
+
### Using UI5 icons
|
|
218
|
+
|
|
219
|
+
UDEx components do not include icons, please use UI5 provided [icon library](https://ui5.github.io/webcomponents/icons/) available with following packages:
|
|
220
|
+
|
|
221
|
+
- `@ui5/webcomponents-icons`
|
|
222
|
+
- `@ui5/webcomponents-icons-tnt`
|
|
223
|
+
- `@ui5/webcomponents-icons-business-suite`
|
|
224
|
+
|
|
225
|
+
Those libraries contains only set of icons, without UI5 components or utility functions. It is not required to import `@ui5/webcomponents` package (or other components packages) in order to use icons with UDEx components.
|
|
226
|
+
|
|
227
|
+
Single icon should be imported to be used by its name in UDEx components, e.g.:
|
|
228
|
+
|
|
229
|
+
```javascript
|
|
230
|
+
import "@ui5/webcomponents-icons/dist/action";
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```html
|
|
234
|
+
<udex-button icon="action">Button Text</udex-button>
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
In cases where UDEx do not provide option for component icon or there is special need to icon styling, custom UI5 [Icon](https://ui5.github.io/webcomponents/components/Icon/) component can be use as a slot, e.g.:
|
|
238
|
+
|
|
239
|
+
```javascript
|
|
240
|
+
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
241
|
+
import "@ui5/webcomponents-icons/dist/action";
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
```html
|
|
245
|
+
<udex-tile>
|
|
246
|
+
<ui5-icon name="action"></ui5-icon>
|
|
247
|
+
<h3>Title</h3>
|
|
248
|
+
...
|
|
249
|
+
</udex-tile>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Additional resources
|
|
253
|
+
|
|
254
|
+
- [UI5: Importing components](https://ui5.github.io/webcomponents/docs/getting-started/components-packages/#usage)
|
|
255
|
+
- [UI5: Understanding Web Component APIs](https://ui5.github.io/webcomponents/docs/getting-started/components-APIs/)
|
|
256
|
+
- [UI5: Theming configuration](https://ui5.github.io/webcomponents/docs/advanced/configuration/#theme)
|
|
257
|
+
- [UI5: i18n for Apps](https://ui5.github.io/webcomponents/docs/advanced/using-i18n-for-apps/)
|
|
258
|
+
- [UI5: Using Icons](https://ui5.github.io/webcomponents/docs/advanced/using-icons/)
|
|
@@ -104,6 +104,23 @@ filter-name="Filter Name">
|
|
|
104
104
|
</UDExFilterMenuGroupHeader>
|
|
105
105
|
</UDExFilterMenu>
|
|
106
106
|
|
|
107
|
+
const filterMenuTwoGroups = <UDExFilterMenu
|
|
108
|
+
id="filter-menu-two-groups"
|
|
109
|
+
mode={UDExListMode.MultiSelect}
|
|
110
|
+
filter-name="Filter Name">
|
|
111
|
+
<UDExFilterMenuGroupHeader collapsible label="Backend Languages">
|
|
112
|
+
<UDExFilterMenuItem label="Python"></UDExFilterMenuItem>
|
|
113
|
+
<UDExFilterMenuItem label="Ruby"></UDExFilterMenuItem>
|
|
114
|
+
<UDExFilterMenuItem label="Node.js"></UDExFilterMenuItem>
|
|
115
|
+
</UDExFilterMenuGroupHeader>
|
|
116
|
+
<UDExFilterMenuGroupHeader collapsible label="Frontend Languages">
|
|
117
|
+
<UDExFilterMenuItem label="JavaScript"></UDExFilterMenuItem>
|
|
118
|
+
<UDExFilterMenuItem label="Swift"></UDExFilterMenuItem>
|
|
119
|
+
<UDExFilterMenuItem label="HTML"></UDExFilterMenuItem>
|
|
120
|
+
<UDExFilterMenuItem label="CSS"></UDExFilterMenuItem>
|
|
121
|
+
</UDExFilterMenuGroupHeader>
|
|
122
|
+
</UDExFilterMenu>
|
|
123
|
+
|
|
107
124
|
const filterMenuRadioGroup = <UDExFilterMenu
|
|
108
125
|
id="filter-menu-radio-group"
|
|
109
126
|
disable-target-overlap="true"
|
|
@@ -576,6 +593,51 @@ describe("Filter Menu component", () => {
|
|
|
576
593
|
});
|
|
577
594
|
});
|
|
578
595
|
|
|
596
|
+
describe("Filter Menu grouped tree — per-group position", () => {
|
|
597
|
+
beforeEach(() => {
|
|
598
|
+
cy.mount(filterMenuTwoGroups);
|
|
599
|
+
cy.get("[udex-filter-menu]").shadow().find(".udex-filter-menu__trigger").click();
|
|
600
|
+
});
|
|
601
|
+
|
|
602
|
+
// Regression: the sibling-group tree markup makes JAWS/NVDA compute a flattened
|
|
603
|
+
// posinset/setsize across every group's children (e.g. "5 of 7" instead of
|
|
604
|
+
// "1 of 4"). Explicit per-group aria-posinset/aria-setsize on each child treeitem
|
|
605
|
+
// restores the within-group count. Two groups of different sizes (Backend x3,
|
|
606
|
+
// Frontend x4) prove the count restarts per group rather than spanning all 7.
|
|
607
|
+
it('exposes per-group aria-posinset/aria-setsize on child treeitems so screen readers count within each group', () => {
|
|
608
|
+
// Backend Languages children: 1..3 within their own group of 3.
|
|
609
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
|
|
610
|
+
.find("udex-list-item").then($items => {
|
|
611
|
+
expect($items).to.have.length(3);
|
|
612
|
+
});
|
|
613
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
|
|
614
|
+
.find("udex-list-item").eq(0).shadow().find("[part=item]")
|
|
615
|
+
.should("have.attr", "aria-posinset", "1").and("have.attr", "aria-setsize", "3");
|
|
616
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
|
|
617
|
+
.find("udex-list-item").eq(2).shadow().find("[part=item]")
|
|
618
|
+
.should("have.attr", "aria-posinset", "3").and("have.attr", "aria-setsize", "3");
|
|
619
|
+
|
|
620
|
+
// Frontend Languages children: count restarts at 1 with its own setsize (4),
|
|
621
|
+
// NOT continued as "4 of 7" across both groups.
|
|
622
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
|
|
623
|
+
.find("udex-list-item").eq(0).shadow().find("[part=item]")
|
|
624
|
+
.should("have.attr", "aria-posinset", "1").and("have.attr", "aria-setsize", "4");
|
|
625
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
|
|
626
|
+
.find("udex-list-item").eq(3).shadow().find("[part=item]")
|
|
627
|
+
.should("have.attr", "aria-posinset", "4").and("have.attr", "aria-setsize", "4");
|
|
628
|
+
});
|
|
629
|
+
|
|
630
|
+
it('positions each group header among the groups (N of group count)', () => {
|
|
631
|
+
// The collapsible MultiSelect header treeitem is the inner list-item's [part=item].
|
|
632
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(0)
|
|
633
|
+
.shadow().find("udex-list-item").shadow().find("[part=item]")
|
|
634
|
+
.should("have.attr", "aria-posinset", "1").and("have.attr", "aria-setsize", "2");
|
|
635
|
+
cy.get("[udex-filter-menu]").shadow().find("udex-list-group-header").eq(1)
|
|
636
|
+
.shadow().find("udex-list-item").shadow().find("[part=item]")
|
|
637
|
+
.should("have.attr", "aria-posinset", "2").and("have.attr", "aria-setsize", "2");
|
|
638
|
+
});
|
|
639
|
+
});
|
|
640
|
+
|
|
579
641
|
describe("Filter Menu Single with search", () => {
|
|
580
642
|
beforeEach(() => {
|
|
581
643
|
cy.mount(filterMenuSingleWithSearch);
|
|
@@ -1597,6 +1659,16 @@ describe("Filter Menu component", () => {
|
|
|
1597
1659
|
.find(".udex-list__group-list__content [role=listbox]").should("not.exist");
|
|
1598
1660
|
});
|
|
1599
1661
|
|
|
1662
|
+
it("content region (role=\"group\") is a sibling of the header list-item, not nested in its subtree slot", () => {
|
|
1663
|
+
// Sibling-group structure: the content region is emitted alongside the
|
|
1664
|
+
// header list-item inside .udex-list__group-list, and the header item
|
|
1665
|
+
// carries no _subtree marker (no nested composition).
|
|
1666
|
+
|
|
1667
|
+
cy.get("#filter-menu-tree-collapsible").shadow()
|
|
1668
|
+
.find("udex-list-group-header").shadow()
|
|
1669
|
+
.find(".udex-list__group-list > .udex-list__group-list__content[role='group']").should("exist");
|
|
1670
|
+
});
|
|
1671
|
+
|
|
1600
1672
|
// Updated: host udex-list-item has role="none"; the treeitem role is set via
|
|
1601
1673
|
// accessible-role on the host (which the template renders onto [part=item]).
|
|
1602
1674
|
it("child items get accessible-role=\"treeitem\" on their host element", () => {
|
|
@@ -1687,10 +1759,28 @@ describe("Filter Menu component", () => {
|
|
|
1687
1759
|
.find("#udex-list").should("have.attr", "role", "tree");
|
|
1688
1760
|
});
|
|
1689
1761
|
|
|
1690
|
-
it("non-collapsible group's list container
|
|
1762
|
+
it("non-collapsible group's list container is transparent (role=\"none\") in tree mode so the header sits at the top level", () => {
|
|
1691
1763
|
cy.get("#filter-menu-tree-non-collapsible").shadow()
|
|
1692
1764
|
.find("udex-list-group-header").shadow()
|
|
1693
|
-
.find(".udex-list__group-list").should("have.attr", "role", "
|
|
1765
|
+
.find(".udex-list__group-list").should("have.attr", "role", "none");
|
|
1766
|
+
});
|
|
1767
|
+
|
|
1768
|
+
it("children are wrapped in a nested role=\"group\" that sits as a sibling of the header treeitem", () => {
|
|
1769
|
+
// Sibling-group structure: the role="group" container is emitted alongside
|
|
1770
|
+
// the header inside .udex-list__group-list; the header item is not composed
|
|
1771
|
+
// into a subtree slot.
|
|
1772
|
+
cy.get("#filter-menu-tree-non-collapsible").shadow()
|
|
1773
|
+
.find("udex-list-group-header").shadow()
|
|
1774
|
+
.find(".udex-list__group-list > [role='group']").should("exist");
|
|
1775
|
+
|
|
1776
|
+
cy.get("#filter-menu-tree-non-collapsible").shadow()
|
|
1777
|
+
.find("udex-list-group-header").shadow()
|
|
1778
|
+
.find("udex-list-item").should("not.have.attr", "_subtree");
|
|
1779
|
+
|
|
1780
|
+
cy.get("#filter-menu-tree-non-collapsible").shadow()
|
|
1781
|
+
.find("udex-list-group-header").shadow()
|
|
1782
|
+
.find("udex-list-item").shadow()
|
|
1783
|
+
.find("[part=item] slot[name='subtree']").should("not.exist");
|
|
1694
1784
|
});
|
|
1695
1785
|
|
|
1696
1786
|
it("non-collapsible active header's inner udex-list-item has accessible-role=\"treeitem\"", () => {
|
|
@@ -1707,6 +1797,8 @@ describe("Filter Menu component", () => {
|
|
|
1707
1797
|
.should("have.attr", "role", "treeitem")
|
|
1708
1798
|
.and("have.attr", "aria-checked", "false");
|
|
1709
1799
|
});
|
|
1800
|
+
|
|
1801
|
+
|
|
1710
1802
|
});
|
|
1711
1803
|
|
|
1712
1804
|
describe("Non-interactive group header in tree mode", () => {
|
|
@@ -1799,6 +1891,69 @@ describe("Filter Menu component", () => {
|
|
|
1799
1891
|
.should("have.attr", "role", "treeitem");
|
|
1800
1892
|
});
|
|
1801
1893
|
|
|
1894
|
+
it("nests the content region (role=\"group\") inside the treeitem div (conformant tree)", () => {
|
|
1895
|
+
// Conformant nesting: the role="group" content region is a DESCENDANT of the
|
|
1896
|
+
// .udex-list__group-content treeitem, so screen readers count children per group
|
|
1897
|
+
// natively (no author aria-posinset needed — matches the List component). This is
|
|
1898
|
+
// what restores JAWS per-item counting under arrow navigation.
|
|
1899
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1900
|
+
.find("udex-list-group-header").shadow()
|
|
1901
|
+
.find(".udex-list__group-list > .udex-list__group-content--nested[role='treeitem']").should("exist");
|
|
1902
|
+
|
|
1903
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1904
|
+
.find("udex-list-group-header").shadow()
|
|
1905
|
+
.find(".udex-list__group-content--nested[role='treeitem'] .udex-list__group-list__content[role='group']").should("exist");
|
|
1906
|
+
|
|
1907
|
+
// The content region is no longer emitted as a sibling of the treeitem.
|
|
1908
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1909
|
+
.find("udex-list-group-header").shadow()
|
|
1910
|
+
.find(".udex-list__group-list > .udex-list__group-list__content[role='group']").should("not.exist");
|
|
1911
|
+
|
|
1912
|
+
// The visible header row wrapper now sits inside the treeitem (ring/layout target).
|
|
1913
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1914
|
+
.find("udex-list-group-header").shadow()
|
|
1915
|
+
.find(".udex-list__group-content--nested[role='treeitem'] > .udex-list__group-header-row").should("exist");
|
|
1916
|
+
});
|
|
1917
|
+
|
|
1918
|
+
it("emits explicit aria-posinset/aria-setsize on single-select child treeitems (forces JAWS re-announcement)", () => {
|
|
1919
|
+
// Conformant nesting makes the structural count match the explicit values, so
|
|
1920
|
+
// JAWS trusts and re-announces on every arrow step — not just on group entry.
|
|
1921
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1922
|
+
.find("udex-list-group-header")
|
|
1923
|
+
.find("udex-list-item").eq(0).shadow()
|
|
1924
|
+
.find("[part=item]").should("have.attr", "aria-posinset", "1");
|
|
1925
|
+
|
|
1926
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1927
|
+
.find("udex-list-group-header")
|
|
1928
|
+
.find("udex-list-item").eq(0).shadow()
|
|
1929
|
+
.find("[part=item]").should("have.attr", "aria-setsize");
|
|
1930
|
+
});
|
|
1931
|
+
|
|
1932
|
+
|
|
1933
|
+
it("group header div does NOT render a -treeposition describedby node", () => {
|
|
1934
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1935
|
+
.find("udex-list-group-header").shadow()
|
|
1936
|
+
.find("[id$=-treeposition]").should("not.exist");
|
|
1937
|
+
|
|
1938
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1939
|
+
.find("udex-list-group-header").shadow()
|
|
1940
|
+
.find(".udex-list__group-content")
|
|
1941
|
+
.should("not.have.attr", "aria-describedby");
|
|
1942
|
+
});
|
|
1943
|
+
|
|
1944
|
+
// The chevron button inside the collapsible header carries an "Expand"/"Collapse"
|
|
1945
|
+
// accessible-name (a mouse affordance). Without an explicit aria-labelledby, that
|
|
1946
|
+
// label folds into the treeitem's computed name, so VoiceOver announces the state
|
|
1947
|
+
// twice ("… Collapse … expanded"). Pinning the name to the heading (+ supporting
|
|
1948
|
+
// text) keeps the chevron's label out; aria-expanded still conveys the state.
|
|
1949
|
+
it("group header div pins its accessible name to the heading (excludes the chevron's label)", () => {
|
|
1950
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1951
|
+
.find("udex-list-group-header").shadow()
|
|
1952
|
+
.find(".udex-list__group-content")
|
|
1953
|
+
.should("have.attr", "aria-labelledby")
|
|
1954
|
+
.and("match", /^group-heading/);
|
|
1955
|
+
});
|
|
1956
|
+
|
|
1802
1957
|
it("group header div has aria-expanded=\"true\" when expanded (default)", () => {
|
|
1803
1958
|
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1804
1959
|
.find("udex-list-group-header").shadow()
|
|
@@ -1923,7 +2078,7 @@ describe("Filter Menu component", () => {
|
|
|
1923
2078
|
it("clicking the header body does NOT select any child", () => {
|
|
1924
2079
|
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1925
2080
|
.find("udex-list-group-header").shadow()
|
|
1926
|
-
.find(".udex-list__group-
|
|
2081
|
+
.find(".udex-list__group-header-row").click();
|
|
1927
2082
|
|
|
1928
2083
|
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
1929
2084
|
.find("udex-list-group-header")
|
|
@@ -2000,6 +2155,16 @@ describe("Filter Menu component", () => {
|
|
|
2000
2155
|
.find("udex-list-group-header").shadow()
|
|
2001
2156
|
.find(".udex-list__group-content");
|
|
2002
2157
|
|
|
2158
|
+
// The visible header body. In the conformant nested tree the treeitem div
|
|
2159
|
+
// (.udex-list__group-content) wraps the whole subtree, so its geometric centre is
|
|
2160
|
+
// over a child item — clicking it is "covered". The header row is the actual body
|
|
2161
|
+
// (it sits above the children), so clicks target it while attribute assertions stay
|
|
2162
|
+
// on the treeitem div above.
|
|
2163
|
+
const headerRow = () =>
|
|
2164
|
+
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
2165
|
+
.find("udex-list-group-header").shadow()
|
|
2166
|
+
.find(".udex-list__group-header-row");
|
|
2167
|
+
|
|
2003
2168
|
const arrowButton = () =>
|
|
2004
2169
|
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
2005
2170
|
.find("udex-list-group-header").shadow()
|
|
@@ -2020,14 +2185,14 @@ describe("Filter Menu component", () => {
|
|
|
2020
2185
|
headerDiv().should("not.have.attr", "aria-selected");
|
|
2021
2186
|
headerDiv().should("not.have.attr", "aria-checked");
|
|
2022
2187
|
|
|
2023
|
-
|
|
2188
|
+
headerRow().click();
|
|
2024
2189
|
|
|
2025
2190
|
headerDiv().should("not.have.attr", "aria-selected");
|
|
2026
2191
|
headerDiv().should("not.have.attr", "aria-checked");
|
|
2027
2192
|
});
|
|
2028
2193
|
|
|
2029
2194
|
it("clicking the header body does NOT set the selected property on the host group header", () => {
|
|
2030
|
-
|
|
2195
|
+
headerRow().click();
|
|
2031
2196
|
|
|
2032
2197
|
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
2033
2198
|
.find("udex-list-group-header").then($gh => {
|
|
@@ -2036,7 +2201,7 @@ describe("Filter Menu component", () => {
|
|
|
2036
2201
|
});
|
|
2037
2202
|
|
|
2038
2203
|
it("clicking the header body does NOT select any child item", () => {
|
|
2039
|
-
|
|
2204
|
+
headerRow().click();
|
|
2040
2205
|
|
|
2041
2206
|
childItems().each($item => {
|
|
2042
2207
|
cy.wrap($item).shadow()
|
|
@@ -2049,7 +2214,7 @@ describe("Filter Menu component", () => {
|
|
|
2049
2214
|
it("clicking the header body does NOT collapse the group", () => {
|
|
2050
2215
|
headerDiv().should("have.attr", "aria-expanded", "true");
|
|
2051
2216
|
|
|
2052
|
-
|
|
2217
|
+
headerRow().click();
|
|
2053
2218
|
|
|
2054
2219
|
headerDiv().should("have.attr", "aria-expanded", "true");
|
|
2055
2220
|
cy.get("#filter-menu-single-tree-collapsible").shadow()
|
|
@@ -2143,24 +2308,49 @@ describe("Filter Menu component", () => {
|
|
|
2143
2308
|
.find("[udex-list]").should("not.have.attr", "aria-multiselectable");
|
|
2144
2309
|
});
|
|
2145
2310
|
|
|
2146
|
-
//
|
|
2147
|
-
//
|
|
2148
|
-
//
|
|
2149
|
-
//
|
|
2150
|
-
|
|
2311
|
+
// Per-group-listbox pattern: JAWS ignores role="group" boundaries and author
|
|
2312
|
+
// aria-posinset within a single listbox (it read the flat total "1 of 8" instead of
|
|
2313
|
+
// "1 of 4"), but counts options natively within a flat listbox. So each group becomes
|
|
2314
|
+
// its own role="listbox" and the outer #udex-list drops its listbox role (it would
|
|
2315
|
+
// otherwise be an invalid nested listbox). Not a tree.
|
|
2316
|
+
it("inner list div is presentational (role=\"presentation\"), not listbox or tree", () => {
|
|
2151
2317
|
cy.get("#filter-menu-single-group").shadow()
|
|
2152
2318
|
.find("[udex-list]").shadow()
|
|
2153
|
-
.find("#udex-list")
|
|
2319
|
+
.find("#udex-list")
|
|
2320
|
+
.should("have.attr", "role", "presentation");
|
|
2321
|
+
});
|
|
2322
|
+
|
|
2323
|
+
it("each group renders its own role=\"listbox\" labelled by its heading", () => {
|
|
2324
|
+
cy.get("#filter-menu-single-group").shadow()
|
|
2325
|
+
.find("udex-list-group-header").shadow()
|
|
2326
|
+
.find("[role=listbox]")
|
|
2327
|
+
.should("have.attr", "aria-labelledby", "group-heading");
|
|
2154
2328
|
});
|
|
2155
2329
|
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2330
|
+
it("the outer group wrapper is transparent (role=\"none\") so the label is not announced twice", () => {
|
|
2331
|
+
cy.get("#filter-menu-single-group").shadow()
|
|
2332
|
+
.find("udex-list-group-header").shadow()
|
|
2333
|
+
.find(".udex-list__group")
|
|
2334
|
+
.should("have.attr", "role", "none")
|
|
2335
|
+
.and("not.have.attr", "aria-labelledby");
|
|
2336
|
+
});
|
|
2337
|
+
|
|
2338
|
+
it("group child items have role=\"option\" (inside the per-group listbox), not treeitem", () => {
|
|
2339
|
+
cy.get("#filter-menu-single-group").shadow()
|
|
2340
|
+
.find("udex-list-group-header")
|
|
2341
|
+
.find("udex-list-item").eq(0).shadow()
|
|
2342
|
+
.find("[part=item]")
|
|
2343
|
+
.should("have.attr", "role", "option")
|
|
2344
|
+
.and("not.have.attr", "role", "treeitem");
|
|
2345
|
+
});
|
|
2346
|
+
|
|
2347
|
+
// The group header host stays role="none" (transparent). The widget role now lives on
|
|
2348
|
+
// the inner per-group role="listbox" (asserted above), not on the host or the outer
|
|
2349
|
+
// div.udex-list__group, so the heading is announced once.
|
|
2350
|
+
it("group header host has role=\"none\" and no _tree-mode attribute", () => {
|
|
2161
2351
|
cy.get("#filter-menu-single-group").shadow()
|
|
2162
2352
|
.find("udex-list-group-header")
|
|
2163
|
-
.should("have.attr", "role", "
|
|
2353
|
+
.should("have.attr", "role", "none")
|
|
2164
2354
|
.and("not.have.attr", "_tree-mode");
|
|
2165
2355
|
});
|
|
2166
2356
|
|