@sapudex/web-components 2.55.0 → 2.57.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/HeroBanner.cy.tsx +35 -1
- package/cypress/specs/List.cy.tsx +63 -1
- package/cypress/specs/ListItem.cy.tsx +44 -0
- package/cypress/specs/MastheadShell.cy.tsx +39 -0
- package/cypress/specs/PhoneNumberField.cy.tsx +29 -1
- package/cypress/specs/SelectBox.cy.tsx +99 -0
- 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/CountrySelectorTemplate.js +1 -1
- package/dist/CountrySelectorTemplate.js.map +1 -1
- package/dist/FilterMenu.js +5 -1
- package/dist/FilterMenu.js.map +1 -1
- package/dist/HeroBanner.d.ts +12 -0
- package/dist/HeroBanner.js +54 -0
- package/dist/HeroBanner.js.map +1 -1
- package/dist/List.d.ts +5 -0
- package/dist/List.js +7 -0
- package/dist/List.js.map +1 -1
- package/dist/ListItem.js +5 -1
- package/dist/ListItem.js.map +1 -1
- package/dist/ListTemplate.js +1 -1
- package/dist/ListTemplate.js.map +1 -1
- package/dist/MastheadShell.d.ts +7 -0
- package/dist/MastheadShell.js +38 -0
- package/dist/MastheadShell.js.map +1 -1
- package/dist/PhoneNumberField.d.ts +3 -3
- package/dist/PhoneNumberField.js +18 -21
- package/dist/PhoneNumberField.js.map +1 -1
- package/dist/PhoneNumberFieldTemplate.d.ts +2 -0
- package/dist/PhoneNumberFieldTemplate.js +12 -0
- package/dist/PhoneNumberFieldTemplate.js.map +1 -0
- package/dist/Search.d.ts +2 -0
- package/dist/Search.js +21 -0
- package/dist/Search.js.map +1 -1
- package/dist/SearchableListBase.d.ts +4 -0
- package/dist/SearchableListBase.js +66 -6
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +1 -1
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SelectBase.js +14 -22
- package/dist/SelectBase.js.map +1 -1
- package/dist/SelectBoxTemplate.js +1 -1
- package/dist/SelectBoxTemplate.js.map +1 -1
- package/dist/StatusMessage.d.ts +2 -2
- package/dist/StatusMessage.js +1 -1
- package/dist/StatusMessage.js.map +1 -1
- package/dist/TabNavigation.d.ts +3 -2
- package/dist/TabNavigation.js +3 -2
- package/dist/TabNavigation.js.map +1 -1
- 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/TextAreaTemplate.js +1 -1
- package/dist/TextAreaTemplate.js.map +1 -1
- package/dist/TextFieldTemplate.js +1 -1
- package/dist/TextFieldTemplate.js.map +1 -1
- package/dist/Upload.js +6 -9
- package/dist/Upload.js.map +1 -1
- package/dist/UploadItem.d.ts +2 -2
- package/dist/UploadItem.js +6 -9
- package/dist/UploadItem.js.map +1 -1
- package/dist/UploadItemTemplate.d.ts +2 -0
- package/dist/UploadItemTemplate.js +14 -0
- package/dist/UploadItemTemplate.js.map +1 -0
- package/dist/UploadTemplate.d.ts +2 -0
- package/dist/UploadTemplate.js +11 -0
- package/dist/UploadTemplate.js.map +1 -0
- package/dist/assets/{InputSuggestions-DPiJnNLn.js → InputSuggestions-C8grDr_8.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-B-v72jL6.js → ListItemStandardExpandableTextTemplate-BQtSr7yg.js} +1 -1
- package/dist/assets/{bundle-C7Yft7IG.css → bundle-CdO3MnjQ.css} +1 -1
- package/dist/assets/{bundle.esm-DPppjwN7.js → bundle.esm-GvPkDyXP.js} +251 -239
- 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-DBpf5Il2.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/AccordionItem.css +1 -1
- package/dist/css/themes/AccordionSpotlight.css +1 -1
- package/dist/css/themes/Avatar.css +1 -1
- package/dist/css/themes/Carousel.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/EventRibbon.css +1 -1
- package/dist/css/themes/FilterMenu.css +1 -1
- package/dist/css/themes/HeroBanner.css +1 -1
- package/dist/css/themes/ImageGridTicker.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/MastheadCountrySelector.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/MastheadShell.css +1 -1
- package/dist/css/themes/MediaPlayer.css +1 -1
- package/dist/css/themes/Modal.css +1 -1
- package/dist/css/themes/PhoneNumberField.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SecondaryNavigationItem.css +1 -1
- package/dist/css/themes/SelectBase.css +1 -1
- package/dist/css/themes/StepInput.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/TableCellBase.css +1 -1
- package/dist/css/themes/TagGroup.css +1 -1
- package/dist/css/themes/TextArea.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/css/themes/Tooltip.css +1 -1
- package/dist/css/themes/Wizard.css +1 -1
- package/dist/custom-elements-internal.json +1119 -98
- package/dist/custom-elements.json +745 -128
- 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 +1 -9
- package/dist/generated/i18n/i18n-defaults.js +1 -9
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/TabNavigationTemplate.lit.js +2 -2
- package/dist/generated/templates/TabNavigationTemplate.lit.js.map +1 -1
- package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
- package/dist/generated/themes/AccordionItem.css.js +1 -1
- package/dist/generated/themes/AccordionItem.css.js.map +1 -1
- package/dist/generated/themes/AccordionSpotlight.css.d.ts +1 -1
- package/dist/generated/themes/AccordionSpotlight.css.js +1 -1
- package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -1
- package/dist/generated/themes/Avatar.css.d.ts +1 -1
- package/dist/generated/themes/Avatar.css.js +1 -1
- package/dist/generated/themes/Avatar.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/CountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/CountrySelector.css.js +1 -1
- package/dist/generated/themes/CountrySelector.css.js.map +1 -1
- package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
- package/dist/generated/themes/EventRibbon.css.js +1 -1
- package/dist/generated/themes/EventRibbon.css.js.map +1 -1
- package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
- package/dist/generated/themes/FilterMenu.css.js +1 -1
- package/dist/generated/themes/FilterMenu.css.js.map +1 -1
- package/dist/generated/themes/HeroBanner.css.d.ts +1 -1
- package/dist/generated/themes/HeroBanner.css.js +1 -1
- package/dist/generated/themes/HeroBanner.css.js.map +1 -1
- package/dist/generated/themes/ImageGridTicker.css.d.ts +1 -1
- package/dist/generated/themes/ImageGridTicker.css.js +1 -1
- package/dist/generated/themes/ImageGridTicker.css.js.map +1 -1
- package/dist/generated/themes/ListItem.css.d.ts +1 -1
- package/dist/generated/themes/ListItem.css.js +1 -1
- package/dist/generated/themes/ListItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.d.ts +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js +1 -1
- package/dist/generated/themes/MastheadCountrySelector.css.js.map +1 -1
- package/dist/generated/themes/MastheadItem.css.d.ts +1 -1
- package/dist/generated/themes/MastheadItem.css.js +1 -1
- package/dist/generated/themes/MastheadItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
- package/dist/generated/themes/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/MediaPlayer.css.d.ts +1 -1
- package/dist/generated/themes/MediaPlayer.css.js +1 -1
- package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
- package/dist/generated/themes/Modal.css.d.ts +1 -1
- package/dist/generated/themes/Modal.css.js +1 -1
- package/dist/generated/themes/Modal.css.js.map +1 -1
- package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
- package/dist/generated/themes/Search.css.d.ts +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.d.ts +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigationItem.css.js.map +1 -1
- package/dist/generated/themes/SelectBase.css.d.ts +1 -1
- package/dist/generated/themes/SelectBase.css.js +1 -1
- package/dist/generated/themes/SelectBase.css.js.map +1 -1
- package/dist/generated/themes/StepInput.css.d.ts +1 -1
- package/dist/generated/themes/StepInput.css.js +1 -1
- package/dist/generated/themes/StepInput.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/TableCellBase.css.d.ts +1 -1
- package/dist/generated/themes/TableCellBase.css.js +1 -1
- package/dist/generated/themes/TableCellBase.css.js.map +1 -1
- package/dist/generated/themes/TagGroup.css.d.ts +1 -1
- package/dist/generated/themes/TagGroup.css.js +1 -1
- package/dist/generated/themes/TagGroup.css.js.map +1 -1
- package/dist/generated/themes/TextArea.css.d.ts +1 -1
- package/dist/generated/themes/TextArea.css.js +1 -1
- package/dist/generated/themes/TextArea.css.js.map +1 -1
- package/dist/generated/themes/TextField.css.d.ts +1 -1
- package/dist/generated/themes/TextField.css.js +1 -1
- package/dist/generated/themes/TextField.css.js.map +1 -1
- package/dist/generated/themes/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/generated/themes/Wizard.css.d.ts +1 -1
- package/dist/generated/themes/Wizard.css.js +1 -1
- package/dist/generated/themes/Wizard.css.js.map +1 -1
- package/dist/messagebundle.properties +0 -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 +0 -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 +8 -8
- package/dist/messagebundle_zh_CN.properties +0 -8
- package/dist/messagebundle_zh_TW.properties +0 -8
- package/dist/utils/searchBackdrop.d.ts +1 -0
- package/dist/utils/searchBackdrop.js +23 -0
- package/dist/utils/searchBackdrop.js.map +1 -0
- package/dist/vscode.html-custom-data.json +175 -4
- package/dist/web-types.json +368 -11
- package/package.json +1 -1
- package/src/Carousel.ts +51 -8
- package/src/CarouselTemplate.tsx +7 -7
- package/src/CountrySelectorTemplate.tsx +2 -2
- package/src/FilterMenu.ts +5 -1
- package/src/HeroBanner.ts +66 -0
- package/src/List.ts +8 -0
- package/src/ListItem.ts +5 -1
- package/src/ListTemplate.tsx +1 -1
- package/src/MastheadShell.ts +44 -0
- package/src/PhoneNumberField.ts +23 -22
- package/src/PhoneNumberFieldTemplate.tsx +128 -0
- package/src/Search.ts +21 -1
- package/src/SearchableListBase.ts +62 -7
- package/src/SearchableListBaseTemplate.tsx +1 -0
- package/src/SelectBase.ts +14 -21
- package/src/SelectBoxTemplate.tsx +1 -1
- package/src/StatusMessage.ts +4 -3
- package/src/TabNavigation.hbs +2 -0
- package/src/TabNavigation.ts +3 -2
- package/src/Tag.ts +7 -0
- package/src/TagGroup.ts +4 -2
- package/src/TextAreaTemplate.tsx +1 -1
- package/src/TextFieldTemplate.tsx +1 -1
- package/src/Upload.ts +7 -10
- package/src/UploadItem.ts +7 -9
- package/src/UploadItemTemplate.tsx +62 -0
- package/src/UploadTemplate.tsx +53 -0
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/TabNavigationTemplate.lit.ts +2 -2
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/AccordionSpotlight.css.ts +1 -1
- package/src/generated/themes/Avatar.css.ts +1 -1
- package/src/generated/themes/Carousel.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/EventRibbon.css.ts +1 -1
- package/src/generated/themes/FilterMenu.css.ts +1 -1
- package/src/generated/themes/HeroBanner.css.ts +1 -1
- package/src/generated/themes/ImageGridTicker.css.ts +1 -1
- package/src/generated/themes/ListItem.css.ts +1 -1
- package/src/generated/themes/MastheadCountrySelector.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/MastheadShell.css.ts +1 -1
- package/src/generated/themes/MediaPlayer.css.ts +1 -1
- package/src/generated/themes/Modal.css.ts +1 -1
- package/src/generated/themes/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
- package/src/generated/themes/SelectBase.css.ts +1 -1
- package/src/generated/themes/StepInput.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/TableCellBase.css.ts +1 -1
- package/src/generated/themes/TagGroup.css.ts +1 -1
- package/src/generated/themes/TextArea.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/generated/themes/Tooltip.css.ts +1 -1
- package/src/generated/themes/Wizard.css.ts +1 -1
- package/src/i18n/messagebundle.properties +0 -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 +0 -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 +8 -8
- package/src/i18n/messagebundle_zh_CN.properties +0 -8
- package/src/i18n/messagebundle_zh_TW.properties +0 -8
- package/src/themes/AccordionItem.css +1 -1
- package/src/themes/AccordionSpotlight.css +1 -1
- package/src/themes/Avatar.css +1 -1
- package/src/themes/Carousel.css +17 -10
- package/src/themes/CountrySelector.css +12 -2
- package/src/themes/EventRibbon.css +1 -1
- package/src/themes/FilterMenu.css +3 -2
- package/src/themes/HeroBanner.css +1 -1
- package/src/themes/ImageGridTicker.css +1 -1
- package/src/themes/ListItem.css +10 -2
- package/src/themes/MastheadCountrySelector.css +1 -1
- package/src/themes/MastheadItem.css +1 -1
- package/src/themes/MastheadProfileMenu.css +1 -1
- package/src/themes/MastheadShell.css +1 -1
- package/src/themes/MediaPlayer.css +10 -10
- package/src/themes/Modal.css +5 -3
- package/src/themes/PhoneNumberField.css +16 -6
- package/src/themes/Search.css +9 -9
- package/src/themes/SecondaryNavigationItem.css +1 -1
- package/src/themes/SelectBase.css +2 -2
- package/src/themes/StepInput.css +1 -1
- package/src/themes/Switch.css +2 -2
- package/src/themes/TabInOverflow.css +2 -2
- package/src/themes/TabNavigation.css +8 -7
- package/src/themes/TableCellBase.css +1 -1
- package/src/themes/TagGroup.css +1 -1
- package/src/themes/TextArea.css +1 -1
- package/src/themes/TextField.css +1 -1
- package/src/themes/Tooltip.css +5 -4
- package/src/themes/Wizard.css +1 -1
- package/src/utils/searchBackdrop.ts +23 -0
- 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-GmdhsMsP.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/PhoneNumberFieldTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +0 -16
- package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +0 -1
- package/dist/generated/templates/UploadItemTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/UploadItemTemplate.lit.js +0 -12
- package/dist/generated/templates/UploadItemTemplate.lit.js.map +0 -1
- package/dist/generated/templates/UploadTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/UploadTemplate.lit.js +0 -10
- package/dist/generated/templates/UploadTemplate.lit.js.map +0 -1
- package/src/PhoneNumberField.hbs +0 -119
- package/src/Upload.hbs +0 -21
- package/src/UploadItem.hbs +0 -32
- package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +0 -20
- package/src/generated/templates/UploadItemTemplate.lit.ts +0 -16
- package/src/generated/templates/UploadTemplate.lit.ts +0 -14
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/)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {UDExHeroBanner, UDExButton, UDExBreadcrumbs, UDExBreadcrumbsItem} from "../support/component-imports.js";
|
|
1
|
+
import {UDExHeroBanner, UDExButton, UDExBreadcrumbs, UDExBreadcrumbsItem, UDExSearch} from "../support/component-imports.js";
|
|
2
2
|
import UDExButtonDesign from "../../src/types/ButtonDesign.js";
|
|
3
|
+
// The SearchSuggestionsPopover feature must be imported so the backdrop events are enabled.
|
|
4
|
+
import "../../src/features/SearchSuggestionsPopover.js";
|
|
3
5
|
|
|
4
6
|
const primaryContentHeader = "Grow your business through enterprise";
|
|
5
7
|
const secondaryContentHeader = "Entertain an idea";
|
|
@@ -172,3 +174,35 @@ describe("Hero Banner component", () => {
|
|
|
172
174
|
});
|
|
173
175
|
});
|
|
174
176
|
});
|
|
177
|
+
|
|
178
|
+
const BACKDROP_SUGGESTION_LIST = JSON.stringify({
|
|
179
|
+
suggested: ["SAP HANA", "SAP BTP"],
|
|
180
|
+
recommended: ["What is SAP HANA"],
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
const heroBannerWithSearch = (
|
|
184
|
+
<UDExHeroBanner id="heroBannerSearchBackdrop">
|
|
185
|
+
<div slot="content">
|
|
186
|
+
<UDExSearch show-suggested-popover open-suggestion-popup />
|
|
187
|
+
</div>
|
|
188
|
+
</UDExHeroBanner>
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
describe("HeroBanner — search backdrop", () => {
|
|
192
|
+
beforeEach(() => {
|
|
193
|
+
cy.mount(heroBannerWithSearch);
|
|
194
|
+
cy.get("[udex-search]").invoke("attr", "suggestion-list", BACKDROP_SUGGESTION_LIST);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
it("backdrop is rendered after search suggestions are opened", () => {
|
|
198
|
+
cy.get(".udex-search-backdrop").should("be.visible");
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it("backdrop is not visible after search dropdown is closed", () => {
|
|
202
|
+
cy.get(".udex-search-backdrop").should("be.visible");
|
|
203
|
+
cy.get("[udex-search]").invoke("removeAttr", "open-suggestion-popup");
|
|
204
|
+
cy.get("[udex-search]").shadow().find("#search-input").focus();
|
|
205
|
+
cy.realPress("Escape");
|
|
206
|
+
cy.get(".udex-search-backdrop").should("not.be.visible");
|
|
207
|
+
});
|
|
208
|
+
});
|
|
@@ -421,4 +421,66 @@ describe("List component - SingleContent accessible name", () => {
|
|
|
421
421
|
);
|
|
422
422
|
cy.get("[udex-list]").shadow().find(".udex-list").should("not.have.attr", "aria-label");
|
|
423
423
|
});
|
|
424
|
-
});
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
// SingleContent is purely informational (no selection), so the inner list container must
|
|
427
|
+
// expose the generic list/listitem semantics instead of the listbox/option selection-widget
|
|
428
|
+
// semantics. listbox/option compute the option's accessible name from its whole subtree, which
|
|
429
|
+
// pulls a nested udex-button (e.g. an info icon) label into the option name AND announces it
|
|
430
|
+
// again when focused — a double announcement.
|
|
431
|
+
describe("List component - SingleContent uses list/listitem role", () => {
|
|
432
|
+
const innerList = () =>
|
|
433
|
+
cy.get("[udex-list]").shadow().find(".udex-list");
|
|
434
|
+
|
|
435
|
+
it("SingleContent: inner list container has role=\"list\" by default", () => {
|
|
436
|
+
cy.mount(
|
|
437
|
+
<UDExList mode="SingleContent" accessible-name="Info list">
|
|
438
|
+
<UDExListItem id="sc-item">Cloud Solution</UDExListItem>
|
|
439
|
+
</UDExList>
|
|
440
|
+
);
|
|
441
|
+
innerList().should("have.attr", "role", "list");
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
it("SingleContent list item: shadow [part=item] has role=\"listitem\" by default", () => {
|
|
445
|
+
cy.mount(
|
|
446
|
+
<UDExList mode="SingleContent" accessible-name="Info list">
|
|
447
|
+
<UDExListItem id="sc-item">Cloud Solution</UDExListItem>
|
|
448
|
+
</UDExList>
|
|
449
|
+
);
|
|
450
|
+
cy.get("#sc-item").shadow().find("[part=item]").should("have.attr", "role", "listitem");
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
it("SingleContent: an explicit non-listbox accessible-role is respected (not forced to \"list\")", () => {
|
|
455
|
+
cy.mount(
|
|
456
|
+
<UDExList mode="SingleContent" accessible-role="menu" accessible-name="Info list">
|
|
457
|
+
<UDExListItem>Cloud Solution</UDExListItem>
|
|
458
|
+
</UDExList>
|
|
459
|
+
);
|
|
460
|
+
innerList().should("have.attr", "role", "menu");
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
// The SingleContent fix must not alter the selection modes. SingleSelect / MultiSelect /
|
|
465
|
+
// RadioGroup lists (without collapsible group headers, so no tree pattern) still render the
|
|
466
|
+
// listbox/option selection-widget semantics.
|
|
467
|
+
describe("List component - selection modes keep listbox/option role", () => {
|
|
468
|
+
const listboxFixture = (mode: string) => (
|
|
469
|
+
<UDExList id="selection-list" mode={mode as "SingleSelect" | "MultiSelect" | "RadioGroup"}>
|
|
470
|
+
<UDExListItem id="selection-item">Item 1</UDExListItem>
|
|
471
|
+
<UDExListItem>Item 2</UDExListItem>
|
|
472
|
+
</UDExList>
|
|
473
|
+
);
|
|
474
|
+
|
|
475
|
+
["SingleSelect", "MultiSelect", "RadioGroup"].forEach(mode => {
|
|
476
|
+
it(`${mode}: inner #udex-list div keeps role="listbox"`, () => {
|
|
477
|
+
cy.mount(listboxFixture(mode));
|
|
478
|
+
cy.get("#selection-list").shadow().find("#udex-list").should("have.attr", "role", "listbox");
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
it(`${mode}: list item shadow [part=item] keeps role="option"`, () => {
|
|
482
|
+
cy.mount(listboxFixture(mode));
|
|
483
|
+
cy.get("#selection-item").shadow().find("[part=item]").should("have.attr", "role", "option");
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
});
|
|
@@ -511,4 +511,48 @@ describe("ListItem", () => {
|
|
|
511
511
|
.and("not.have.attr", "aria-checked");
|
|
512
512
|
});
|
|
513
513
|
});
|
|
514
|
+
|
|
515
|
+
// SingleContent is informational, not a selection widget, so the item's shadow
|
|
516
|
+
// [part=item] renders role="listitem" (not "option").
|
|
517
|
+
describe("SingleContent role", () => {
|
|
518
|
+
it("SingleContent item: [part=item] has role=\"listitem\" by default", () => {
|
|
519
|
+
cy.mount(<UDExListItem
|
|
520
|
+
id="sc-role-item"
|
|
521
|
+
mode={UDExListMode.SingleContent}
|
|
522
|
+
label="Cloud Solution">
|
|
523
|
+
</UDExListItem>);
|
|
524
|
+
|
|
525
|
+
cy.get("#sc-role-item").shadow()
|
|
526
|
+
.find("[part=item]").should("have.attr", "role", "listitem");
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
// Regression: the selection modes keep role="option" (roleItem returns the "option"
|
|
530
|
+
// fallback for every mode except SingleContent).
|
|
531
|
+
[UDExListMode.SingleSelect, UDExListMode.MultiSelect, UDExListMode.RadioGroup].forEach(mode => {
|
|
532
|
+
it(`${mode} item: [part=item] keeps role="option" by default`, () => {
|
|
533
|
+
cy.mount(<UDExListItem
|
|
534
|
+
id="sel-role-item"
|
|
535
|
+
mode={mode}
|
|
536
|
+
label="JavaScript">
|
|
537
|
+
</UDExListItem>);
|
|
538
|
+
|
|
539
|
+
cy.get("#sel-role-item").shadow()
|
|
540
|
+
.find("[part=item]").should("have.attr", "role", "option");
|
|
541
|
+
});
|
|
542
|
+
});
|
|
543
|
+
|
|
544
|
+
// An explicit accessible-role always wins over the SingleContent default (getter
|
|
545
|
+
// returns accessibleRole before falling through to the mode-based default).
|
|
546
|
+
it("explicit accessible-role overrides the SingleContent \"listitem\" default", () => {
|
|
547
|
+
cy.mount(<UDExListItem
|
|
548
|
+
id="sc-role-override"
|
|
549
|
+
accessible-role="option"
|
|
550
|
+
mode={UDExListMode.SingleContent}
|
|
551
|
+
label="Cloud Solution">
|
|
552
|
+
</UDExListItem>);
|
|
553
|
+
|
|
554
|
+
cy.get("#sc-role-override").shadow()
|
|
555
|
+
.find("[part=item]").should("have.attr", "role", "option");
|
|
556
|
+
});
|
|
557
|
+
});
|
|
514
558
|
});
|
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
UDExSearch,
|
|
9
9
|
} from "../support/component-imports.js";
|
|
10
10
|
import { profileLoggedInUser, profileLinks, subItemsExplore, subItemsProduct } from "../fixtures/masthead-shell.js";
|
|
11
|
+
// The SearchSuggestionsPopover feature must be imported so the backdrop events are enabled.
|
|
12
|
+
import "../../src/features/SearchSuggestionsPopover.js";
|
|
11
13
|
|
|
12
14
|
const logoUrl = "https://cdn.udex.services.sap.com/dds/design-tokens/assets/logos/sap-logo.svg";
|
|
13
15
|
const homeUrl = "https://sap.com";
|
|
@@ -724,3 +726,40 @@ describe("MastheadShell Search-Focused", () => {
|
|
|
724
726
|
});
|
|
725
727
|
});
|
|
726
728
|
});
|
|
729
|
+
|
|
730
|
+
const BACKDROP_SUGGESTION_LIST = JSON.stringify({
|
|
731
|
+
suggested: ["SAP HANA", "SAP BTP"],
|
|
732
|
+
recommended: ["What is SAP HANA"],
|
|
733
|
+
});
|
|
734
|
+
|
|
735
|
+
const mastheadWithSuggestionsSearch = (
|
|
736
|
+
<UDExMastheadShell
|
|
737
|
+
id="mastheadBackdropTest"
|
|
738
|
+
show-search-by-default
|
|
739
|
+
logo-url={logoUrl}
|
|
740
|
+
site-label="Test"
|
|
741
|
+
homepage-aria-label="SAP Homepage"
|
|
742
|
+
close-button-accessible-name="Close Search">
|
|
743
|
+
<UDExSearch slot="search" show-suggested-popover open-suggestion-popup />
|
|
744
|
+
</UDExMastheadShell>
|
|
745
|
+
);
|
|
746
|
+
|
|
747
|
+
describe("MastheadShell — search backdrop", () => {
|
|
748
|
+
beforeEach(() => {
|
|
749
|
+
cy.viewport(1440, 900);
|
|
750
|
+
cy.mount(mastheadWithSuggestionsSearch);
|
|
751
|
+
cy.get("[udex-search]").invoke("attr", "suggestion-list", BACKDROP_SUGGESTION_LIST);
|
|
752
|
+
});
|
|
753
|
+
|
|
754
|
+
it("backdrop is rendered after search suggestions are opened", () => {
|
|
755
|
+
cy.get(".udex-search-backdrop").should("be.visible");
|
|
756
|
+
});
|
|
757
|
+
|
|
758
|
+
it("backdrop is not visible after search dropdown is closed", () => {
|
|
759
|
+
cy.get(".udex-search-backdrop").should("be.visible");
|
|
760
|
+
cy.get("[udex-search]").invoke("removeAttr", "open-suggestion-popup");
|
|
761
|
+
cy.get("[udex-search]").shadow().find("#search-input").focus();
|
|
762
|
+
cy.realPress("Escape");
|
|
763
|
+
cy.get(".udex-search-backdrop").should("not.be.visible");
|
|
764
|
+
});
|
|
765
|
+
});
|
|
@@ -116,6 +116,34 @@ describe("PhoneNumberField", () => {
|
|
|
116
116
|
cy.get("#default").shadow().find("udex-list-item[selected]").should("have.attr", "id", "UA")
|
|
117
117
|
});
|
|
118
118
|
|
|
119
|
+
it("country flag is automatically updated when value is set programmatically", () => {
|
|
120
|
+
cy.mount(defaultPhoneNumberField)
|
|
121
|
+
cy.get("#default").then($el => {
|
|
122
|
+
($el[0] as any).value = "+38012345678"
|
|
123
|
+
})
|
|
124
|
+
cy.get("#default").shadow().find("udex-list-item[selected]").should("have.attr", "id", "UA")
|
|
125
|
+
cy.get("#default").shadow().find("input").should("have.attr", "placeholder", "+380 XXXXX XXXXX")
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it("country flag is updated when value is set programmatically after manual country selection", () => {
|
|
129
|
+
cy.mount(defaultPhoneNumberField)
|
|
130
|
+
cy.get("#default").shadow().find(".udex-phone-number-field__input-wrapper").find(".udex-phone-number-field__open-button").click().realPress("d").realPress("Enter")
|
|
131
|
+
cy.get("#default").shadow().find("udex-list-item[selected]").should("have.attr", "id", "DK")
|
|
132
|
+
cy.get("#default").then($el => {
|
|
133
|
+
($el[0] as any).value = "+38012345678"
|
|
134
|
+
})
|
|
135
|
+
cy.get("#default").shadow().find("udex-list-item[selected]").should("have.attr", "id", "UA")
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it("changing country from dropdown updates flag and resets value to new prefix", () => {
|
|
139
|
+
cy.mount(defaultPhoneNumberField)
|
|
140
|
+
cy.get("#default").shadow().find("input").type("38012345")
|
|
141
|
+
cy.get("#default").shadow().find("udex-list-item[selected]").should("have.attr", "id", "UA")
|
|
142
|
+
cy.get("#default").shadow().find(".udex-phone-number-field__input-wrapper").find(".udex-phone-number-field__open-button").click().realPress("d").realPress("Enter")
|
|
143
|
+
cy.get("#default").shadow().find("udex-list-item[selected]").should("have.attr", "id", "DK")
|
|
144
|
+
cy.get("#default").shadow().find("input").should("have.value", "+45")
|
|
145
|
+
});
|
|
146
|
+
|
|
119
147
|
it("check that the maxlength and formatting is applied correctly", () => {
|
|
120
148
|
cy.mount(defaultPhoneNumberField)
|
|
121
149
|
cy.get("#default").shadow().find("input").type("+380123456789123456").should("have.value", "+380 12345 6789123")
|
|
@@ -192,4 +220,4 @@ describe("PhoneNumberField", () => {
|
|
|
192
220
|
cy.get("#default").shadow().find("input").type("123-abc-456!@#").should("have.value", "+1 (234) 56")
|
|
193
221
|
});
|
|
194
222
|
});
|
|
195
|
-
});
|
|
223
|
+
});
|
|
@@ -2494,6 +2494,105 @@ describe("SelectBox", () => {
|
|
|
2494
2494
|
.invoke("prop", "scrollTop")
|
|
2495
2495
|
.should("be.greaterThan", 0);
|
|
2496
2496
|
});
|
|
2497
|
+
|
|
2498
|
+
const singleSelectCollapsibleGroupScrollFixture = <div style="width: 350px; position:relative;">
|
|
2499
|
+
<UDExSelectBox id="select-box" height="200px" label="Languages">
|
|
2500
|
+
<UDExSelectBoxGroupHeader label="Backend Languages" collapsible>
|
|
2501
|
+
<UDExSelectBoxItem label="Java"></UDExSelectBoxItem>
|
|
2502
|
+
<UDExSelectBoxItem label="Python"></UDExSelectBoxItem>
|
|
2503
|
+
<UDExSelectBoxItem label="Go"></UDExSelectBoxItem>
|
|
2504
|
+
<UDExSelectBoxItem label="Ruby"></UDExSelectBoxItem>
|
|
2505
|
+
<UDExSelectBoxItem label="Rust"></UDExSelectBoxItem>
|
|
2506
|
+
<UDExSelectBoxItem label="Node.js" selected></UDExSelectBoxItem>
|
|
2507
|
+
</UDExSelectBoxGroupHeader>
|
|
2508
|
+
<UDExSelectBoxGroupHeader label="Frontend Languages" collapsible>
|
|
2509
|
+
<UDExSelectBoxItem label="JavaScript"></UDExSelectBoxItem>
|
|
2510
|
+
<UDExSelectBoxItem label="TypeScript"></UDExSelectBoxItem>
|
|
2511
|
+
</UDExSelectBoxGroupHeader>
|
|
2512
|
+
</UDExSelectBox>
|
|
2513
|
+
</div>;
|
|
2514
|
+
|
|
2515
|
+
it("SingleSelect mode with collapsible group - selected item is scrolled into view after reopening the dropdown", () => {
|
|
2516
|
+
cy.mount(singleSelectCollapsibleGroupScrollFixture);
|
|
2517
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").as("trigger");
|
|
2518
|
+
|
|
2519
|
+
cy.get("@trigger").click();
|
|
2520
|
+
cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("have.attr", "open");
|
|
2521
|
+
cy.get("@trigger").click();
|
|
2522
|
+
cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("not.have.attr", "open");
|
|
2523
|
+
cy.get("@trigger").click();
|
|
2524
|
+
cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("have.attr", "open");
|
|
2525
|
+
|
|
2526
|
+
cy.get("#select-box").shadow()
|
|
2527
|
+
.find("ui5-popover").shadow()
|
|
2528
|
+
.find("[part=content]")
|
|
2529
|
+
.invoke("prop", "scrollTop")
|
|
2530
|
+
.should("be.greaterThan", 0);
|
|
2531
|
+
});
|
|
2532
|
+
|
|
2533
|
+
const collapsedGroupWithSelectionFixture = <div style="width: 350px; position:relative;">
|
|
2534
|
+
<UDExSelectBox id="select-box" height="200px" label="Languages">
|
|
2535
|
+
<UDExSelectBoxGroupHeader label="Backend Languages" collapsible collapsed>
|
|
2536
|
+
<UDExSelectBoxItem label="Java"></UDExSelectBoxItem>
|
|
2537
|
+
<UDExSelectBoxItem label="Python"></UDExSelectBoxItem>
|
|
2538
|
+
<UDExSelectBoxItem label="Node.js" selected></UDExSelectBoxItem>
|
|
2539
|
+
</UDExSelectBoxGroupHeader>
|
|
2540
|
+
<UDExSelectBoxGroupHeader label="Frontend Languages" collapsible>
|
|
2541
|
+
<UDExSelectBoxItem label="JavaScript"></UDExSelectBoxItem>
|
|
2542
|
+
<UDExSelectBoxItem label="TypeScript"></UDExSelectBoxItem>
|
|
2543
|
+
</UDExSelectBoxGroupHeader>
|
|
2544
|
+
</UDExSelectBox>
|
|
2545
|
+
</div>;
|
|
2546
|
+
|
|
2547
|
+
it("SingleSelect mode - collapsed group containing selected item is auto-expanded on dropdown open", () => {
|
|
2548
|
+
cy.mount(collapsedGroupWithSelectionFixture);
|
|
2549
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
2550
|
+
|
|
2551
|
+
cy.get("#select-box").shadow()
|
|
2552
|
+
.find(".udex-select-box__dropdown")
|
|
2553
|
+
.should("have.attr", "open");
|
|
2554
|
+
|
|
2555
|
+
// The group that contains the selected item must be expanded (collapsed attribute removed).
|
|
2556
|
+
cy.get("[udex-select-box-group-header]").filter("[label='Backend Languages']")
|
|
2557
|
+
.should("not.have.attr", "collapsed");
|
|
2558
|
+
|
|
2559
|
+
// The rendered group header in the shadow DOM must also reflect the expanded state.
|
|
2560
|
+
cy.get("#select-box").shadow()
|
|
2561
|
+
.find("[udex-list-group-header]")
|
|
2562
|
+
.first()
|
|
2563
|
+
.should("not.have.attr", "collapsed");
|
|
2564
|
+
});
|
|
2565
|
+
|
|
2566
|
+
it("SingleSelect mode - manually collapsed group with selected item re-expands on next dropdown open", () => {
|
|
2567
|
+
cy.mount(collapsedGroupWithSelectionFixture);
|
|
2568
|
+
|
|
2569
|
+
// First open: group auto-expands.
|
|
2570
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
2571
|
+
cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("have.attr", "open");
|
|
2572
|
+
cy.get("#select-box").shadow().find("[udex-list-group-header]").first().should("not.have.attr", "collapsed");
|
|
2573
|
+
|
|
2574
|
+
// Simulate user manually collapsing the group:
|
|
2575
|
+
// - Set collapsed on the original item so _expandCollapsedGroupsWithSelection detects it.
|
|
2576
|
+
// - Also set it on the rendered element in case the template re-render is async.
|
|
2577
|
+
cy.get("[udex-select-box-group-header]").filter("[label='Backend Languages']")
|
|
2578
|
+
.invoke("prop", "collapsed", true);
|
|
2579
|
+
cy.get("#select-box").shadow()
|
|
2580
|
+
.find("[udex-list-group-header]").first()
|
|
2581
|
+
.invoke("prop", "collapsed", true);
|
|
2582
|
+
cy.get("#select-box").shadow().find("[udex-list-group-header]").first().should("have.attr", "collapsed");
|
|
2583
|
+
|
|
2584
|
+
// Close the dropdown.
|
|
2585
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
2586
|
+
cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("not.have.attr", "open");
|
|
2587
|
+
|
|
2588
|
+
// Reopen: the group must be auto-expanded again.
|
|
2589
|
+
cy.get("#select-box").shadow().find(".udex-text-field__trigger").click();
|
|
2590
|
+
cy.get("#select-box").shadow().find(".udex-select-box__dropdown").should("have.attr", "open");
|
|
2591
|
+
cy.get("#select-box").shadow()
|
|
2592
|
+
.find("[udex-list-group-header]")
|
|
2593
|
+
.first()
|
|
2594
|
+
.should("not.have.attr", "collapsed");
|
|
2595
|
+
});
|
|
2497
2596
|
});
|
|
2498
2597
|
|
|
2499
2598
|
// Tree accessibility pattern: SelectBox uses tree pattern when group headers are present.
|
|
@@ -210,4 +210,39 @@ describe("TagGroup", () => {
|
|
|
210
210
|
});
|
|
211
211
|
});
|
|
212
212
|
|
|
213
|
+
describe("Keyboard navigation with nonSelectable tags", () => {
|
|
214
|
+
const nonSelectableTagGroup = <UDExTagGroup>
|
|
215
|
+
{Array.from({ length: 16 }, (_, i) => (
|
|
216
|
+
<UDExTag nonSelectable text={`Tag ${i + 1}`} icon="employee"></UDExTag>
|
|
217
|
+
))}
|
|
218
|
+
</UDExTagGroup>;
|
|
219
|
+
|
|
220
|
+
it("Shift+Tab from overflow button focuses last visible nonSelectable tag's button", () => {
|
|
221
|
+
cy.mount(<div><button id="before">before</button>{nonSelectableTagGroup}</div>);
|
|
222
|
+
|
|
223
|
+
cy.get("[udex-tag-group]").shadow().find(".udex-tag-group__tokenizer").as("tokenizer");
|
|
224
|
+
cy.get("[udex-tag-group]").should("have.attr", "_is-hidden-tags");
|
|
225
|
+
cy.get("@tokenizer").shadow().find(".ui5-tokenizer-more-text").should("be.visible");
|
|
226
|
+
|
|
227
|
+
cy.get("@tokenizer").then($tokenizer => {
|
|
228
|
+
const nMoreCount = ($tokenizer[0] as any)._nMoreCount as number;
|
|
229
|
+
const totalCount = ($tokenizer[0] as any)._tokens.length as number;
|
|
230
|
+
const visibleCount = totalCount - nMoreCount;
|
|
231
|
+
cy.get("#before").focus();
|
|
232
|
+
// Tab through each visible tag's button + 1 more to land on the "n more" button
|
|
233
|
+
Cypress._.times(visibleCount + 1, () => cy.realPress("Tab"));
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
cy.get("@tokenizer").shadow().find(".ui5-tokenizer-more-text").should("be.focused");
|
|
237
|
+
|
|
238
|
+
cy.realPress(["Shift", "Tab"]);
|
|
239
|
+
|
|
240
|
+
cy.get("@tokenizer").then($tokenizer => {
|
|
241
|
+
const nMoreCount = ($tokenizer[0] as any)._nMoreCount as number;
|
|
242
|
+
const totalCount = ($tokenizer[0] as any)._tokens.length as number;
|
|
243
|
+
const lastVisibleToken = ($tokenizer[0] as any)._tokens[totalCount - nMoreCount - 1];
|
|
244
|
+
cy.wrap(lastVisibleToken).shadow().find("button").should("be.focused");
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
});
|
|
213
248
|
});
|