@sapudex/web-components 2.54.0 → 2.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cypress/specs/Breadcrumbs.cy.tsx +3 -1
- package/cypress/specs/FilterMenu.cy.tsx +34 -2
- package/cypress/specs/Footer.cy.tsx +59 -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/MediaPlayer.cy.tsx +58 -0
- package/cypress/specs/PhoneNumberField.cy.tsx +29 -1
- package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +2 -2
- package/cypress/specs/SelectBox.cy.tsx +173 -0
- package/dist/BreadcrumbsTemplate.js +1 -1
- package/dist/BreadcrumbsTemplate.js.map +1 -1
- package/dist/CountrySelectorTemplate.js +1 -1
- package/dist/CountrySelectorTemplate.js.map +1 -1
- package/dist/FilterMenu.d.ts +1 -1
- package/dist/FilterMenu.js +11 -7
- package/dist/FilterMenu.js.map +1 -1
- package/dist/Footer.d.ts +20 -1
- package/dist/Footer.js +40 -3
- package/dist/Footer.js.map +1 -1
- package/dist/FooterTemplate.js +7 -2
- package/dist/FooterTemplate.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 +13 -6
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +12 -5
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +1 -1
- package/dist/ListGroupHeaderBase.js +2 -2
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListGroupHeaderTemplate.d.ts +2 -0
- package/dist/ListGroupHeaderTemplate.js +33 -0
- package/dist/ListGroupHeaderTemplate.js.map +1 -0
- package/dist/ListItem.d.ts +1 -1
- package/dist/ListItem.js +9 -4
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +1 -0
- package/dist/ListItemBase.js +8 -4
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListItemTemplate.d.ts +2 -0
- package/dist/ListItemTemplate.js +18 -0
- package/dist/ListItemTemplate.js.map +1 -0
- package/dist/ListSelectAll.js +4 -5
- package/dist/ListSelectAll.js.map +1 -1
- package/dist/ListSelectAllTemplate.d.ts +2 -0
- package/dist/ListSelectAllTemplate.js +6 -0
- package/dist/ListSelectAllTemplate.js.map +1 -0
- package/dist/ListTemplate.d.ts +2 -0
- package/dist/ListTemplate.js +11 -0
- package/dist/ListTemplate.js.map +1 -0
- package/dist/MastheadShell.d.ts +7 -0
- package/dist/MastheadShell.js +38 -0
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MediaPlayer.js +6 -0
- package/dist/MediaPlayer.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/SelectBox.js +31 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/SelectBoxTemplate.js +3 -2
- 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/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-CqOrRXxa.js → InputSuggestions-ChhTxYh4.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-DKUm4L2B.js → ListItemStandardExpandableTextTemplate-Bh1HxZfH.js} +1 -1
- package/dist/assets/{bundle-C7Yft7IG.css → bundle-CdO3MnjQ.css} +1 -1
- package/dist/assets/{bundle.esm-CI60uvdr.js → bundle.esm-DCX_ohoZ.js} +277 -265
- package/dist/assets/messagebundle_en-B0P3kkb6.js +1 -0
- package/dist/assets/messagebundle_it-BML2SC0W.js +1 -0
- package/dist/assets/messagebundle_ja-zyFfZHcj.js +1 -0
- package/dist/assets/messagebundle_ko-BCPaSqNp.js +1 -0
- package/dist/assets/messagebundle_lt-DB4b6FVx.js +1 -0
- package/dist/assets/messagebundle_lv-tAOia5tU.js +1 -0
- package/dist/assets/messagebundle_uk-CCv57GhV.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/Breadcrumbs.css +1 -1
- package/dist/css/themes/BreadcrumbsPopover.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/Footer.css +1 -1
- package/dist/css/themes/HeroBanner.css +1 -1
- package/dist/css/themes/ImageGridTicker.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/ListGroupHeader.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/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/Wizard.css +1 -1
- package/dist/custom-elements-internal.json +1191 -82
- package/dist/custom-elements.json +818 -127
- package/dist/generated/assets/i18n/messagebundle_en.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_uk.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
- package/dist/generated/i18n/i18n-defaults.js +2 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/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/Breadcrumbs.css.d.ts +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.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/Footer.css.d.ts +1 -1
- package/dist/generated/themes/Footer.css.js +1 -1
- package/dist/generated/themes/Footer.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/Link.css.d.ts +1 -1
- package/dist/generated/themes/Link.css.js +1 -1
- package/dist/generated/themes/Link.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/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/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/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 +1 -0
- package/dist/messagebundle_en.properties +1 -0
- package/dist/messagebundle_it.properties +123 -0
- package/dist/messagebundle_ja.properties +127 -1
- package/dist/messagebundle_ko.properties +126 -0
- package/dist/messagebundle_lt.properties +126 -0
- package/dist/messagebundle_lv.properties +9 -0
- package/dist/messagebundle_uk.properties +8 -0
- package/dist/types/FooterAskJoulePosition.d.ts +5 -0
- package/dist/types/FooterAskJoulePosition.js +7 -0
- package/dist/types/FooterAskJoulePosition.js.map +1 -0
- 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 +176 -3
- package/dist/web-types.json +396 -8
- package/package.json +1 -1
- package/src/BreadcrumbsTemplate.tsx +12 -10
- package/src/CountrySelectorTemplate.tsx +2 -2
- package/src/FilterMenu.ts +11 -7
- package/src/Footer.ts +41 -3
- package/src/FooterTemplate.tsx +28 -4
- package/src/HeroBanner.ts +66 -0
- package/src/List.ts +16 -8
- package/src/ListGroupHeader.ts +12 -5
- package/src/ListGroupHeaderBase.ts +3 -3
- package/src/ListGroupHeaderTemplate.tsx +228 -0
- package/src/ListItem.ts +10 -5
- package/src/ListItemBase.ts +9 -4
- package/src/ListItemTemplate.tsx +193 -0
- package/src/ListSelectAll.ts +4 -5
- package/src/ListSelectAllTemplate.tsx +38 -0
- package/src/ListTemplate.tsx +60 -0
- package/src/MastheadShell.ts +44 -0
- package/src/MediaPlayer.ts +6 -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/SelectBox.ts +34 -0
- package/src/SelectBoxTemplate.tsx +3 -1
- package/src/StatusMessage.ts +4 -3
- 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/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/Breadcrumbs.css.ts +1 -1
- package/src/generated/themes/BreadcrumbsPopover.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/Footer.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/Link.css.ts +1 -1
- package/src/generated/themes/ListGroupHeader.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/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/Wizard.css.ts +1 -1
- package/src/i18n/messagebundle.properties +1 -0
- package/src/i18n/messagebundle_en.properties +1 -0
- package/src/i18n/messagebundle_it.properties +123 -0
- package/src/i18n/messagebundle_ja.properties +127 -1
- package/src/i18n/messagebundle_ko.properties +126 -0
- package/src/i18n/messagebundle_lt.properties +126 -0
- package/src/i18n/messagebundle_lv.properties +9 -0
- package/src/i18n/messagebundle_uk.properties +8 -0
- package/src/themes/AccordionItem.css +1 -1
- package/src/themes/AccordionSpotlight.css +1 -1
- package/src/themes/Avatar.css +1 -1
- package/src/themes/Breadcrumbs.css +46 -5
- package/src/themes/BreadcrumbsPopover.css +65 -0
- package/src/themes/CountrySelector.css +12 -2
- package/src/themes/EventRibbon.css +1 -1
- package/src/themes/FilterMenu.css +3 -2
- package/src/themes/Footer.css +98 -1
- package/src/themes/HeroBanner.css +1 -1
- package/src/themes/ImageGridTicker.css +1 -1
- package/src/themes/Link.css +127 -8
- package/src/themes/ListGroupHeader.css +6 -3
- 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/TabInOverflow.css +2 -2
- package/src/themes/TabNavigation.css +7 -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/Wizard.css +1 -1
- package/src/types/FooterAskJoulePosition.ts +6 -0
- package/src/utils/searchBackdrop.ts +23 -0
- package/dist/assets/messagebundle_en-DoNTK1BE.js +0 -1
- package/dist/assets/messagebundle_it-BhrBdOd4.js +0 -1
- package/dist/assets/messagebundle_ja-5P5L7sQ1.js +0 -1
- package/dist/assets/messagebundle_ko-B9H5YQlC.js +0 -1
- package/dist/assets/messagebundle_lt-BJ5gr_LF.js +0 -1
- package/dist/assets/messagebundle_lv-D06tlATH.js +0 -1
- package/dist/assets/messagebundle_uk-GmdhsMsP.js +0 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +0 -30
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListItemTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListItemTemplate.lit.js +0 -49
- package/dist/generated/templates/ListItemTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListSelectAllTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListSelectAllTemplate.lit.js +0 -7
- package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListTemplate.lit.js +0 -11
- package/dist/generated/templates/ListTemplate.lit.js.map +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/List.hbs +0 -38
- package/src/ListGroupHeader.hbs +0 -188
- package/src/ListItem.hbs +0 -166
- package/src/ListSelectAll.hbs +0 -31
- package/src/PhoneNumberField.hbs +0 -119
- package/src/Upload.hbs +0 -21
- package/src/UploadItem.hbs +0 -32
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +0 -34
- package/src/generated/templates/ListItemTemplate.lit.ts +0 -53
- package/src/generated/templates/ListSelectAllTemplate.lit.ts +0 -11
- package/src/generated/templates/ListTemplate.lit.ts +0 -15
- 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
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type UDExPhoneNumberField from "./PhoneNumberField.js";
|
|
2
|
+
import UDExDropdown from "./Dropdown.js";
|
|
3
|
+
import UDExList from "./List.js";
|
|
4
|
+
import UDExListItem from "./ListItem.js";
|
|
5
|
+
import UDExButton from "./Button.js";
|
|
6
|
+
import UDExStatusMessage from "./StatusMessage.js";
|
|
7
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
8
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
9
|
+
|
|
10
|
+
export default function PhoneNumberFieldTemplate(this: UDExPhoneNumberField) {
|
|
11
|
+
return (
|
|
12
|
+
<>
|
|
13
|
+
<div
|
|
14
|
+
class="udex-phone-number-field"
|
|
15
|
+
onui5-selection-change={this.handleSelect}>
|
|
16
|
+
{this.label && (
|
|
17
|
+
<label
|
|
18
|
+
id="udex-phone-number-field__label"
|
|
19
|
+
class="udex-phone-number-field__label"
|
|
20
|
+
htmlFor={`${this._id}-phone`}>
|
|
21
|
+
{this.label}
|
|
22
|
+
{this.required && " *"}
|
|
23
|
+
</label>
|
|
24
|
+
)}
|
|
25
|
+
<UDExDropdown
|
|
26
|
+
class="udex-phone-number-field__dropdown"
|
|
27
|
+
opener={`udex-${this._id}-phone-number__opener`}
|
|
28
|
+
id={`${this._id}_dropdown-menu`}
|
|
29
|
+
onui5-before-open={this.dropdownBeforeOpen}
|
|
30
|
+
onui5-before-close={this.dropdownBeforeClose}
|
|
31
|
+
horizontalAlign="Start"
|
|
32
|
+
height={this.height}>
|
|
33
|
+
<UDExList>
|
|
34
|
+
{this.countriesList.map(country => (
|
|
35
|
+
<UDExListItem
|
|
36
|
+
id={country.iso}
|
|
37
|
+
selected={country.selected}>
|
|
38
|
+
<div class="udex-phone-number-field__dropdown-list-item">
|
|
39
|
+
<div
|
|
40
|
+
class="udex-phone-number-field__flag"
|
|
41
|
+
style={{ backgroundPositionX: country.flagX, backgroundPositionY: country.flagY }}
|
|
42
|
+
></div>
|
|
43
|
+
<span class="udex-phone-number-field__country-name">
|
|
44
|
+
{country.countryName}
|
|
45
|
+
{country.localName && ` (${country.localName})`}
|
|
46
|
+
{" "}{country.phonePrefix}
|
|
47
|
+
</span>
|
|
48
|
+
</div>
|
|
49
|
+
</UDExListItem>
|
|
50
|
+
))}
|
|
51
|
+
</UDExList>
|
|
52
|
+
</UDExDropdown>
|
|
53
|
+
<div class="udex-phone-number-field__input-wrapper">
|
|
54
|
+
{!this.displayonly && (
|
|
55
|
+
<UDExButton
|
|
56
|
+
id={`udex-${this._id}-phone-number__opener`}
|
|
57
|
+
class="udex-phone-number-field__open-button"
|
|
58
|
+
role="combobox"
|
|
59
|
+
aria-haspopup="true"
|
|
60
|
+
design={UDExButtonDesign.Tertiary}
|
|
61
|
+
size={UDExButtonSize.Large}
|
|
62
|
+
endIcon={this.buttonIcon}
|
|
63
|
+
disabled={this.isButtonDisabled}
|
|
64
|
+
accessibleNameRef={`${this._id}-countrySelectorAriaLabel ${this.ariaDescribedById}`}
|
|
65
|
+
aria-label={this.countrySelectorAriaLabel}
|
|
66
|
+
aria-expanded={this._dropdownExpanded}
|
|
67
|
+
aria-controls={`${this._id}_dropdown-menu`}
|
|
68
|
+
onClick={this.openDropdown}>
|
|
69
|
+
<div class="udex-phone-number-field__open-button-text">
|
|
70
|
+
{this.selectedCountryName} {this.selectedPhonePrefix}
|
|
71
|
+
</div>
|
|
72
|
+
<div class="udex-phone-number-field__button-content">
|
|
73
|
+
<span
|
|
74
|
+
class="udex-phone-number-field__flag"
|
|
75
|
+
aria-label={this.selectedCountryName}
|
|
76
|
+
style={{ backgroundPositionX: this.selectedFlagBackgroundPosition.x, backgroundPositionY: this.selectedFlagBackgroundPosition.y }}
|
|
77
|
+
/>
|
|
78
|
+
</div>
|
|
79
|
+
</UDExButton>
|
|
80
|
+
)}
|
|
81
|
+
<input
|
|
82
|
+
id={`${this._id}-phone`}
|
|
83
|
+
class="udex-phone-number-field__input"
|
|
84
|
+
type="tel"
|
|
85
|
+
value={this.value}
|
|
86
|
+
placeholder={this.phoneFormat}
|
|
87
|
+
maxLength={this.maxlength}
|
|
88
|
+
disabled={this.disabled}
|
|
89
|
+
readonly={this.isInputReadonly}
|
|
90
|
+
required={this.required}
|
|
91
|
+
autoComplete="tel"
|
|
92
|
+
aria-label={this.accessibleName}
|
|
93
|
+
aria-labelledby={this.accessibleName}
|
|
94
|
+
aria-required={this.required}
|
|
95
|
+
aria-readonly={this.isInputReadonly}
|
|
96
|
+
aria-disabled={this.disabled}
|
|
97
|
+
aria-invalid={(this.ariaInvalid ?? undefined) as "true" | undefined}
|
|
98
|
+
aria-describedby={this.ariaDescribedById}
|
|
99
|
+
onInput={this.handleInput}
|
|
100
|
+
onClick={this.handleClick}
|
|
101
|
+
onFocus={this.handleFocus}
|
|
102
|
+
onBlur={this.handleBlur}
|
|
103
|
+
onKeyDown={this.handleKeyDown}
|
|
104
|
+
onKeyUp={this.handleKeyUp}
|
|
105
|
+
tabIndex={this.inputTabIndex}
|
|
106
|
+
/>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
{this.supportingText && (
|
|
110
|
+
<UDExStatusMessage
|
|
111
|
+
disabled={this.disabled}
|
|
112
|
+
supportingText={this.supportingText}
|
|
113
|
+
valueState={this.valueState}>
|
|
114
|
+
</UDExStatusMessage>
|
|
115
|
+
)}
|
|
116
|
+
{this.supportingText && (
|
|
117
|
+
<span id={`${this._id}-supportingTextDesc`} class="hidden-text">{this.supportingText}</span>
|
|
118
|
+
)}
|
|
119
|
+
{this.hasValueState && (
|
|
120
|
+
<span id={`${this._id}-valueStateDesc`} class="hidden-text">{this.valueStateText}</span>
|
|
121
|
+
)}
|
|
122
|
+
{this.readonly && (
|
|
123
|
+
<span id={`${this._id}-stateReadOnlyDesc`} class="hidden-text">{this.readOnlyStateText}</span>
|
|
124
|
+
)}
|
|
125
|
+
<span id={`${this._id}-countrySelectorAriaLabel`} class="hidden-text">{this.countrySelectorAriaLabel}</span>
|
|
126
|
+
</>
|
|
127
|
+
);
|
|
128
|
+
}
|
package/src/Search.ts
CHANGED
|
@@ -188,6 +188,18 @@ type UDExSearchKeydownEventDetail = {
|
|
|
188
188
|
* @param {KeyboardEvent} e The keyboard event object
|
|
189
189
|
*/
|
|
190
190
|
@event("search-keydown", { bubbles: true })
|
|
191
|
+
/**
|
|
192
|
+
* Fired when the suggestions popover opens.
|
|
193
|
+
*
|
|
194
|
+
* @public
|
|
195
|
+
*/
|
|
196
|
+
@event("suggestion-popover-opened", { bubbles: true })
|
|
197
|
+
/**
|
|
198
|
+
* Fired when the suggestions popover closes.
|
|
199
|
+
*
|
|
200
|
+
* @public
|
|
201
|
+
*/
|
|
202
|
+
@event("suggestion-popover-closed", { bubbles: true })
|
|
191
203
|
class UDExSearch extends UI5Element {
|
|
192
204
|
eventDetails!: {
|
|
193
205
|
"submit-search-value": UDExSearchBaseEventDetail,
|
|
@@ -196,7 +208,8 @@ class UDExSearch extends UI5Element {
|
|
|
196
208
|
"search-keydown": UDExSearchKeydownEventDetail,
|
|
197
209
|
"dropdown-item-click": UDExSearchBaseEventDetail,
|
|
198
210
|
"prefix-item-click": UDExSearchPrefixItemClickEventDetail,
|
|
199
|
-
|
|
211
|
+
"suggestion-popover-opened": void,
|
|
212
|
+
"suggestion-popover-closed": void,
|
|
200
213
|
};
|
|
201
214
|
_labelActiveClassName = "udex-search__label--active";
|
|
202
215
|
_labelAnimationClassName = "udex-search__label--animation-enabled";
|
|
@@ -856,6 +869,7 @@ class UDExSearch extends UI5Element {
|
|
|
856
869
|
retryUntilSuccessful(() => this.Suggestion, this.retryDelay, this.maxRetryAttempts, this.unsuccessfulRetryMessage)
|
|
857
870
|
.then(() => {
|
|
858
871
|
this.Suggestion!.open();
|
|
872
|
+
this.fireDecoratorEvent("suggestion-popover-opened");
|
|
859
873
|
})
|
|
860
874
|
.catch(error => {
|
|
861
875
|
console.warn(error.message);
|
|
@@ -863,6 +877,7 @@ class UDExSearch extends UI5Element {
|
|
|
863
877
|
} else {
|
|
864
878
|
this.open = true;
|
|
865
879
|
this.Suggestion.open();
|
|
880
|
+
this.fireDecoratorEvent("suggestion-popover-opened");
|
|
866
881
|
}
|
|
867
882
|
this.handleAriaExpanded();
|
|
868
883
|
}
|
|
@@ -873,6 +888,7 @@ class UDExSearch extends UI5Element {
|
|
|
873
888
|
this.Suggestion!.close();
|
|
874
889
|
this.handleAriaExpanded();
|
|
875
890
|
this.open = false;
|
|
891
|
+
this.fireDecoratorEvent("suggestion-popover-closed");
|
|
876
892
|
}
|
|
877
893
|
}
|
|
878
894
|
|
|
@@ -951,6 +967,9 @@ class UDExSearch extends UI5Element {
|
|
|
951
967
|
|
|
952
968
|
if (mutation.attributeName === "open" && newValue !== oldValue && !ingoreOpenState) {
|
|
953
969
|
this.open = popover?.open || false;
|
|
970
|
+
if (!popover?.open) {
|
|
971
|
+
this.fireDecoratorEvent("suggestion-popover-closed");
|
|
972
|
+
}
|
|
954
973
|
}
|
|
955
974
|
});
|
|
956
975
|
});
|
|
@@ -1053,6 +1072,7 @@ class UDExSearch extends UI5Element {
|
|
|
1053
1072
|
if (isEscape(e)) {
|
|
1054
1073
|
if (this.open) {
|
|
1055
1074
|
this.Suggestion?.onEscape(e);
|
|
1075
|
+
this.fireDecoratorEvent("suggestion-popover-closed");
|
|
1056
1076
|
}
|
|
1057
1077
|
}
|
|
1058
1078
|
}
|
|
@@ -345,6 +345,14 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
345
345
|
this.fireSelectionChange(id);
|
|
346
346
|
}
|
|
347
347
|
|
|
348
|
+
handleAccordionIconClick(e: CustomEvent<{ collapsed: boolean }>): void {
|
|
349
|
+
const target = e.target as HTMLElement;
|
|
350
|
+
const originalItem = this._validItems.find(item => item._id === target.id) as (UDExListGroupHeaderBase & { setCollapsedItems?(): void }) | undefined;
|
|
351
|
+
if (!originalItem) { return; }
|
|
352
|
+
originalItem.collapsed = e.detail.collapsed;
|
|
353
|
+
originalItem.setCollapsedItems?.();
|
|
354
|
+
}
|
|
355
|
+
|
|
348
356
|
onSelectAllHeaderPress(e:CustomEvent) {
|
|
349
357
|
const item = e.detail.item as UDExListItemBase;
|
|
350
358
|
const id = this.getDataTokenId(item);
|
|
@@ -570,20 +578,67 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
570
578
|
this.getPopoverPart(UDExPopoverPart.Content)?.scrollTo({ top: 0 });
|
|
571
579
|
}
|
|
572
580
|
|
|
581
|
+
_expandCollapsedGroupsWithSelection() {
|
|
582
|
+
this._validItems
|
|
583
|
+
.filter(item => item.isGroup)
|
|
584
|
+
.forEach(group => {
|
|
585
|
+
const header = group as UDExListGroupHeaderBase & { setCollapsedItems?(): void };
|
|
586
|
+
if (!header.collapsible) { return; }
|
|
587
|
+
// The rendered element may have been manually collapsed by the user, which
|
|
588
|
+
// only updates the rendered copy. handleAccordionIconClick syncs the original
|
|
589
|
+
// going forward, but we also check the rendered element as a safety net
|
|
590
|
+
// (e.g. if the event wasn't caught, or for the current open cycle).
|
|
591
|
+
const rendered = this.shadowRoot?.querySelector<HTMLElement & { collapsed?: boolean; setCollapsedItems?(): void }>(`[udex-list-group-header][id="${header._id}"]`);
|
|
592
|
+
const isCollapsed = header.collapsed || !!rendered?.hasAttribute("collapsed");
|
|
593
|
+
if (!isCollapsed) { return; }
|
|
594
|
+
const hasSelectedChild = (header.items as UDExListItemBase[]).some(child => child.selected);
|
|
595
|
+
if (hasSelectedChild) {
|
|
596
|
+
header.collapsed = false;
|
|
597
|
+
header.setCollapsedItems?.();
|
|
598
|
+
// Also reset the rendered element directly so it takes effect
|
|
599
|
+
// immediately, regardless of whether a template re-render is pending.
|
|
600
|
+
if (rendered) {
|
|
601
|
+
rendered.collapsed = false;
|
|
602
|
+
rendered.setCollapsedItems?.();
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
|
|
573
608
|
_dropdownScrollToSelectedItem() {
|
|
574
609
|
const content = this.getPopoverPart(UDExPopoverPart.Content);
|
|
610
|
+
if (!content) { return; }
|
|
575
611
|
const activeItem = this.activeItem;
|
|
576
|
-
if (!
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
612
|
+
if (!activeItem) {
|
|
613
|
+
this._dropdownScrollToTop();
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
// Refresh max-height on expanded collapsible groups before measuring.
|
|
617
|
+
// setContentHeight() may have run while the popup was closed (scrollHeight=0
|
|
618
|
+
// for hidden elements), leaving --udex-list-content-max-height at 0px.
|
|
619
|
+
// With that stale 0px value, getBoundingClientRect on slotted items inside
|
|
620
|
+
// the overflow:hidden container returns the container top rather than the
|
|
621
|
+
// item's natural position, producing an incorrect scroll delta.
|
|
622
|
+
// removeProperty → setContentHeight() avoids the CSS transition because
|
|
623
|
+
// browsers do not interpolate to/from the `none` fallback value.
|
|
624
|
+
this.shadowRoot?.querySelectorAll<HTMLElement & { setContentHeight(): void }>("[udex-list-group-header]")
|
|
625
|
+
.forEach(header => {
|
|
626
|
+
if (header.hasAttribute("collapsible") && !header.hasAttribute("collapsed")) {
|
|
627
|
+
header.style.removeProperty("--udex-list-content-max-height");
|
|
628
|
+
header.setContentHeight();
|
|
629
|
+
}
|
|
630
|
+
});
|
|
631
|
+
// Reset to top before measuring so getBoundingClientRect reads from a stable
|
|
632
|
+
// baseline regardless of the scroll state left by previous open/close cycles.
|
|
633
|
+
content.scrollTop = 0;
|
|
634
|
+
const delta = activeItem.getBoundingClientRect().top - content.getBoundingClientRect().top;
|
|
635
|
+
content.scrollTop = delta;
|
|
580
636
|
}
|
|
581
637
|
|
|
582
638
|
_handleDropdownScroll() {
|
|
583
|
-
if (this.modeMultiSelect) {
|
|
639
|
+
if (this.modeMultiSelect || !this.activeItem) {
|
|
584
640
|
this._dropdownScrollToTop();
|
|
585
|
-
}
|
|
586
|
-
if (this.modeSingleSelect) {
|
|
641
|
+
} else if (this.modeSingleSelect) {
|
|
587
642
|
this._dropdownScrollToSelectedItem();
|
|
588
643
|
}
|
|
589
644
|
}
|
|
@@ -132,6 +132,7 @@ function renderGroupHeader(this: UDExSearchableListBase, processedItem: UDExProc
|
|
|
132
132
|
selected={item.selected}
|
|
133
133
|
onFirstIconClick={this.fireFirstIconClickEvent}
|
|
134
134
|
onSecondIconClick={this.fireSecondIconClickEvent}
|
|
135
|
+
onAccordionIconClick={this.handleAccordionIconClick}
|
|
135
136
|
indeterminate={header.indeterminate}>
|
|
136
137
|
{groupItems.map((child, i) =>
|
|
137
138
|
renderListItem(child as UDExListItem, i, "none", childAccessibleRole, this.fireFirstIconClickEvent, this.fireSecondIconClickEvent, this._activeDescendantMode, this.isTreeStructure, this.modeMultiSelect)
|
package/src/SelectBase.ts
CHANGED
|
@@ -781,28 +781,21 @@ class UDExSelectBase extends UDExSearchableListBase {
|
|
|
781
781
|
}
|
|
782
782
|
|
|
783
783
|
handleDropdownOpen() {
|
|
784
|
-
//
|
|
785
|
-
// otherwise scroll to top. Do NOT pre-activate any item — that is done
|
|
786
|
-
// by the first ArrowDown so that ArrowDown[1]=item[0], ArrowDown[2]=item[1].
|
|
787
|
-
if (this.activeItem) {
|
|
788
|
-
const items = this._list?.getKeyboardNavigationItems();
|
|
789
|
-
const active = items?.find(i => !i.isGroup && (i as any).selected);
|
|
790
|
-
if (active && this._list?._scrollIntoView) {
|
|
791
|
-
this._list.scrollToItem(active);
|
|
792
|
-
} else {
|
|
793
|
-
this._dropdownScrollToTop();
|
|
794
|
-
}
|
|
795
|
-
} else {
|
|
796
|
-
this._dropdownScrollToTop();
|
|
797
|
-
}
|
|
798
|
-
|
|
799
|
-
// Announce the visually focused item (fake focus outline on first item).
|
|
800
|
-
// Using polite politeness — it waits for the AT to finish announcing
|
|
801
|
-
// "expanded" before reading the item, so no timeout is needed.
|
|
802
|
-
// Clear first so the mutation fires even if the text is unchanged from
|
|
803
|
-
// the previous open, then populate after render completes.
|
|
784
|
+
// Clear first so the live-region mutation fires even if text is unchanged.
|
|
804
785
|
this._liveRegionText = "";
|
|
805
|
-
|
|
786
|
+
// Defer scroll and announcement until rendering settles.
|
|
787
|
+
// Calling _handleDropdownScroll synchronously causes getBoundingClientRect
|
|
788
|
+
// to read mid-transition positions (e.g. the max-height animation on
|
|
789
|
+
// collapsible group headers), producing an incorrect scroll offset.
|
|
790
|
+
// The expand step modifies reactive properties that trigger a new render,
|
|
791
|
+
// so a second renderFinished is needed before measuring scroll positions.
|
|
792
|
+
renderFinished().then(() => {
|
|
793
|
+
this._expandCollapsedGroupsWithSelection();
|
|
794
|
+
return renderFinished();
|
|
795
|
+
}).then(() => {
|
|
796
|
+
this._handleDropdownScroll();
|
|
797
|
+
this._announceCurrentOrFirst();
|
|
798
|
+
}).catch(() => {});
|
|
806
799
|
|
|
807
800
|
this.fireEventDropdownOpen();
|
|
808
801
|
}
|
package/src/SelectBox.ts
CHANGED
|
@@ -232,6 +232,40 @@ class UDExSelectBox extends UDExSelectBase {
|
|
|
232
232
|
const isSearchInput = relatedTarget === this._search;
|
|
233
233
|
const hasTags = this.tokenizer?.tokens.length > 0;
|
|
234
234
|
|
|
235
|
+
// When focus moves to the body div of a collapsible single-select group header
|
|
236
|
+
// (which is focusable via tabindex="0" but has no click→header-press wiring),
|
|
237
|
+
// set it as the active descendant and redirect DOM focus back to the input so
|
|
238
|
+
// the combobox pattern is preserved and subsequent arrow navigation works.
|
|
239
|
+
//
|
|
240
|
+
// The focusout handler sits on div.udex-text-field__input (SelectBox's shadow DOM).
|
|
241
|
+
// Shadow DOM retargeting means relatedTarget is either:
|
|
242
|
+
// (a) the body div itself (.udex-list__group-content) — if caught at a lower boundary
|
|
243
|
+
// (b) the UDExListGroupHeader HOST — the common case when the event bubbles to this div
|
|
244
|
+
const rtAsItem = relatedTarget as UDExListItemBase | null;
|
|
245
|
+
const isGroupHeaderBodyDiv = this._popover?.open
|
|
246
|
+
&& !!relatedTarget?.classList.contains("udex-list__group-content");
|
|
247
|
+
const isGroupHeaderHost = this._popover?.open
|
|
248
|
+
&& !!rtAsItem?.isGroup
|
|
249
|
+
&& !!rtAsItem?.collapsible
|
|
250
|
+
&& !rtAsItem?.modeMultiSelect;
|
|
251
|
+
if (isGroupHeaderBodyDiv || isGroupHeaderHost) {
|
|
252
|
+
const groupHeaderHost: UDExListItemBase | null = isGroupHeaderBodyDiv
|
|
253
|
+
? ((relatedTarget.getRootNode() as ShadowRoot | null)?.host as UDExListItemBase | null)
|
|
254
|
+
: rtAsItem;
|
|
255
|
+
if (groupHeaderHost?.isGroup) {
|
|
256
|
+
const navItems = this._list?.getKeyboardNavigationItems();
|
|
257
|
+
const tokenId = this.getDataTokenId(groupHeaderHost);
|
|
258
|
+
const renderedItem = navItems?.find(
|
|
259
|
+
i => (i.getAttribute("data-token-id") ?? i._id) === tokenId,
|
|
260
|
+
);
|
|
261
|
+
if (renderedItem) {
|
|
262
|
+
this._setActiveDescendant(renderedItem);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
(this._search as HTMLElement).focus();
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
|
|
235
269
|
if (!isInsideComponent && !isFooterElement && !isIconButton && !isSearchInput) {
|
|
236
270
|
this.closeDropdown();
|
|
237
271
|
this.resetSearchState();
|
|
@@ -7,6 +7,7 @@ import UI5Popover from "@ui5/webcomponents/dist/Popover.js";
|
|
|
7
7
|
import UI5PopoverPlacement from "@ui5/webcomponents/dist/types/PopoverPlacement.js";
|
|
8
8
|
import UI5PopoverHAlign from "@ui5/webcomponents/dist/types/PopoverHorizontalAlign.js";
|
|
9
9
|
import { cleanLabel } from "./utils/listItemLabelUtils.js";
|
|
10
|
+
import PopupAccessibleRole from "@ui5/webcomponents/dist/types/PopupAccessibleRole.js";
|
|
10
11
|
|
|
11
12
|
export default function SelectBoxTemplate(this: UDExSelectBox) {
|
|
12
13
|
return (
|
|
@@ -77,6 +78,7 @@ export default function SelectBoxTemplate(this: UDExSelectBox) {
|
|
|
77
78
|
)}
|
|
78
79
|
<UI5Popover
|
|
79
80
|
id={this.popoverId}
|
|
81
|
+
accessibleRole={PopupAccessibleRole.None}
|
|
80
82
|
allow-target-overlap={this.allowTargetOverlap}
|
|
81
83
|
onKeyDown={this.handleKeyDownDropdown}
|
|
82
84
|
{...({
|
|
@@ -104,7 +106,7 @@ export default function SelectBoxTemplate(this: UDExSelectBox) {
|
|
|
104
106
|
</div>
|
|
105
107
|
{this.supportingText && (
|
|
106
108
|
<UDExStatusMessage
|
|
107
|
-
disabled={this.disabled
|
|
109
|
+
disabled={this.disabled}
|
|
108
110
|
supporting-text={this.supportingText}
|
|
109
111
|
value-state={this.valueState}>
|
|
110
112
|
</UDExStatusMessage>
|
package/src/StatusMessage.ts
CHANGED
|
@@ -67,11 +67,12 @@ class UDExStatusMessage extends UI5Element {
|
|
|
67
67
|
/**
|
|
68
68
|
* Defines if component should have disabled styles.
|
|
69
69
|
*
|
|
70
|
-
* @default
|
|
70
|
+
* @default false
|
|
71
71
|
* @public
|
|
72
72
|
*/
|
|
73
|
-
@property({ type:
|
|
74
|
-
disabled!:
|
|
73
|
+
@property({ type: Boolean })
|
|
74
|
+
disabled!: boolean;
|
|
75
|
+
|
|
75
76
|
/**
|
|
76
77
|
* Defines the value state of the component.
|
|
77
78
|
*
|
package/src/TextAreaTemplate.tsx
CHANGED
|
@@ -45,7 +45,7 @@ export default function TextAreaTemplate(this: TextArea) {
|
|
|
45
45
|
supporting-text={this._supportingText}
|
|
46
46
|
supporting-text-alignment="Right"
|
|
47
47
|
value-state={this.valueState}
|
|
48
|
-
disabled={this.disabled
|
|
48
|
+
disabled={this.disabled}>
|
|
49
49
|
</UDExStatusMessage>
|
|
50
50
|
<span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
|
|
51
51
|
{this._supportingText}
|
|
@@ -70,7 +70,7 @@ export default function TextFieldTemplate(this: TextField) {
|
|
|
70
70
|
<UDExStatusMessage
|
|
71
71
|
supporting-text={this.supportingText}
|
|
72
72
|
value-state={this.valueState}
|
|
73
|
-
disabled={this.disabled
|
|
73
|
+
disabled={this.disabled}>
|
|
74
74
|
</UDExStatusMessage>
|
|
75
75
|
<span id={`${this._id}-supportingTextDesc`} class={hiddenClass}>
|
|
76
76
|
{this.supportingText}
|
package/src/Upload.ts
CHANGED
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
2
|
import type { DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
3
|
-
|
|
4
3
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
5
4
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
6
|
-
import
|
|
5
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
7
6
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
8
7
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
9
|
-
import
|
|
8
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
10
9
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
11
|
-
import FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
|
|
10
|
+
import type FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
|
|
12
11
|
import type { FileUploaderChangeEventDetail } from "@ui5/webcomponents/dist/FileUploader.js";
|
|
13
12
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
14
13
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
15
14
|
import { UPLOAD_BUTTON_LABEL } from "./generated/i18n/i18n-defaults.js";
|
|
16
|
-
import UDExButton from "./Button.js";
|
|
17
15
|
import UDExButtonSize from "./types/ButtonSize.js";
|
|
18
|
-
import UDExList from "./List.js";
|
|
19
16
|
import UDExUploadItem from "./UploadItem.js";
|
|
20
|
-
import UploadTemplate from "./
|
|
17
|
+
import UploadTemplate from "./UploadTemplate.js";
|
|
21
18
|
import type FileData from "./types/FileData.js";
|
|
22
19
|
import translate from "./utils/translate.js";
|
|
20
|
+
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
23
21
|
|
|
24
22
|
// Styles
|
|
25
23
|
import UploadCss from "./generated/themes/Upload.css.js";
|
|
26
|
-
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
27
24
|
|
|
28
25
|
const convertBytesToMegabytes = (bytes: number) => (bytes / 1024) / 1024;
|
|
29
26
|
|
|
@@ -58,10 +55,10 @@ type UDExUploadFileChangeEventDetail = {
|
|
|
58
55
|
*/
|
|
59
56
|
@customElement({
|
|
60
57
|
tag: "udex-upload",
|
|
61
|
-
renderer:
|
|
58
|
+
renderer: jsxRenderer,
|
|
62
59
|
styles: UploadCss,
|
|
63
60
|
template: UploadTemplate,
|
|
64
|
-
dependencies: [
|
|
61
|
+
dependencies: [UDExUploadItem],
|
|
65
62
|
})
|
|
66
63
|
|
|
67
64
|
/**
|
package/src/UploadItem.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
2
2
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
3
|
-
import
|
|
3
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
4
4
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
5
5
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
6
|
-
import
|
|
6
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
7
7
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
8
8
|
import ValueState from "@ui5/webcomponents-base/dist/types/ValueState.js";
|
|
9
9
|
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
@@ -12,11 +12,9 @@ import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
|
12
12
|
import { UDExTarget } from "./types/common.js";
|
|
13
13
|
import { REMOVE_FILE_TEXT, TERMINATED_FILE_STATUS_TEXT, UPLOADING_FILE_STATUS_TEXT } from "./generated/i18n/i18n-defaults.js";
|
|
14
14
|
import UDExListItem from "./ListItem.js";
|
|
15
|
-
import
|
|
16
|
-
import UDExLink from "./Link.js";
|
|
17
|
-
import UDExButton from "./Button.js";
|
|
15
|
+
import type UDExLink from "./Link.js";
|
|
18
16
|
import UDExButtonSize from "./types/ButtonSize.js";
|
|
19
|
-
import UploadItemTemplate from "./
|
|
17
|
+
import UploadItemTemplate from "./UploadItemTemplate.js";
|
|
20
18
|
import translate from "./utils/translate.js";
|
|
21
19
|
|
|
22
20
|
// Styles
|
|
@@ -41,15 +39,15 @@ const BreakpointSizeM: number = 1279;
|
|
|
41
39
|
* <code>import "@sapudex/web-components/dist/UploadItem.js";</code>
|
|
42
40
|
*
|
|
43
41
|
* @constructor
|
|
44
|
-
* @extends
|
|
42
|
+
* @extends UDExListItem
|
|
45
43
|
* @public
|
|
46
44
|
*/
|
|
47
45
|
@customElement({
|
|
48
46
|
tag: "udex-upload-item",
|
|
49
|
-
renderer:
|
|
47
|
+
renderer: jsxRenderer,
|
|
50
48
|
styles: UploadItemCss,
|
|
51
49
|
template: UploadItemTemplate,
|
|
52
|
-
dependencies: [
|
|
50
|
+
dependencies: [UDExListItem],
|
|
53
51
|
})
|
|
54
52
|
|
|
55
53
|
/**
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type UploadItem from "./UploadItem.js";
|
|
2
|
+
import UDExLink from "./Link.js";
|
|
3
|
+
import UDExButton from "./Button.js";
|
|
4
|
+
import UDExProgressBar from "./ProgressBar.js";
|
|
5
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
6
|
+
import decline from "@ui5/webcomponents-icons/dist/decline.js";
|
|
7
|
+
|
|
8
|
+
export default function UploadItemTemplate(this: UploadItem) {
|
|
9
|
+
const rootClass = "udex-upload-item";
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div className={`${rootClass}__wrapper`}>
|
|
13
|
+
<div className={`${rootClass}__info ${this.uploadItemClasses}`}>
|
|
14
|
+
<div>
|
|
15
|
+
{this.fileInteractive ? (
|
|
16
|
+
<UDExLink
|
|
17
|
+
href={this.fileLink}
|
|
18
|
+
target={this.fileTarget}>
|
|
19
|
+
{this.fileName}
|
|
20
|
+
</UDExLink>
|
|
21
|
+
) : (
|
|
22
|
+
<p className={`${rootClass}__name`}>{this.fileName}</p>
|
|
23
|
+
)}
|
|
24
|
+
<div className={this.additionalInfoClasses}>
|
|
25
|
+
<slot></slot>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
{this._breakpointM && deleteButton.call(this)}
|
|
29
|
+
</div>
|
|
30
|
+
<div className={`${rootClass}__progress-info-wrapper`}>
|
|
31
|
+
{this.showUploadProgress && (
|
|
32
|
+
<div className={`${rootClass}__progress-info`}>
|
|
33
|
+
<UDExProgressBar
|
|
34
|
+
role="progressbar"
|
|
35
|
+
aria-valuemin={0}
|
|
36
|
+
aria-valuemax={100}
|
|
37
|
+
aria-valuenow={this.uploadPercentage}
|
|
38
|
+
value={this.uploadPercentage}
|
|
39
|
+
value-state={this.uploadProgressState}
|
|
40
|
+
hide-value>
|
|
41
|
+
</UDExProgressBar>
|
|
42
|
+
<p className={`${rootClass}__progress-status`}>{this.uploadStatus}</p>
|
|
43
|
+
</div>
|
|
44
|
+
)}
|
|
45
|
+
{this._breakpointL && deleteButton.call(this)}
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function deleteButton(this: UploadItem) {
|
|
52
|
+
return (
|
|
53
|
+
<UDExButton
|
|
54
|
+
accessible-name={this.removeButtonAccessibleName}
|
|
55
|
+
onKeyDown={this.handleButtonKeydown}
|
|
56
|
+
onClick={this.handleButtonClick}
|
|
57
|
+
size={this._buttonSize}
|
|
58
|
+
design={UDExButtonDesign.Tertiary}
|
|
59
|
+
icon={decline}>
|
|
60
|
+
</UDExButton>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import FileUploader from "@ui5/webcomponents/dist/FileUploader.js";
|
|
2
|
+
import type Upload from "./Upload.js";
|
|
3
|
+
import UDExButton from "./Button.js";
|
|
4
|
+
import UDExList from "./List.js";
|
|
5
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
6
|
+
import { UDExListMode } from "./types/List.js";
|
|
7
|
+
|
|
8
|
+
export default function UploadTemplate(this: Upload) {
|
|
9
|
+
const rootClass = "udex-upload";
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
className={`${rootClass}__wrapper`}
|
|
14
|
+
onui5-request-delete={this.handleRemoveFile}>
|
|
15
|
+
{this.uploadTitle && (
|
|
16
|
+
<h1 className={`${rootClass}__title`}>{this.uploadTitle}</h1>
|
|
17
|
+
)}
|
|
18
|
+
{this.additionalText && (
|
|
19
|
+
<p className={`${rootClass}__additional-text`}>{this.additionalText}</p>
|
|
20
|
+
)}
|
|
21
|
+
<div className={`${rootClass}__upload-button-container`}>
|
|
22
|
+
<FileUploader
|
|
23
|
+
id="fileUploader"
|
|
24
|
+
disabled={this.disabled}
|
|
25
|
+
accept={this.accept}
|
|
26
|
+
multiple={this.multiple}
|
|
27
|
+
onChange={this.handleUploadFile}
|
|
28
|
+
onClick={this.handleUploadClick}
|
|
29
|
+
hide-input>
|
|
30
|
+
<UDExButton
|
|
31
|
+
aria-label={this.uploadButtonAriaLabel}
|
|
32
|
+
disabled={this.disabled}
|
|
33
|
+
aria-disabled={this.disabled}
|
|
34
|
+
design={UDExButtonDesign.Secondary}
|
|
35
|
+
size={this._buttonSize}>
|
|
36
|
+
{this.uploadButtonText}
|
|
37
|
+
</UDExButton>
|
|
38
|
+
</FileUploader>
|
|
39
|
+
{this.showSupportingText && (
|
|
40
|
+
<p className={this.supportingTextClasses}>{this.supportingText}</p>
|
|
41
|
+
)}
|
|
42
|
+
</div>
|
|
43
|
+
<div className={`${rootClass}__files-wrapper`}>
|
|
44
|
+
<UDExList
|
|
45
|
+
mode={UDExListMode.MultiSelect}
|
|
46
|
+
aria-busy={this.listBusy}
|
|
47
|
+
onui5-selection-change={this.handleSelectionChange}>
|
|
48
|
+
<slot></slot>
|
|
49
|
+
</UDExList>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
}
|