@sapudex/web-components 2.47.0 → 2.49.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/bundle.esm.js +2 -0
- package/cypress/specs/AccordionSpotlight.cy.tsx +402 -0
- package/cypress/specs/BusyIndicator.cy.tsx +15 -0
- package/cypress/specs/Carousel.cy.tsx +142 -0
- package/cypress/specs/DatePicker.cy.tsx +62 -0
- package/cypress/specs/FilterMenu.cy.tsx +968 -10
- package/cypress/specs/List.cy.tsx +106 -0
- package/cypress/specs/ListItem.cy.tsx +291 -1
- package/cypress/specs/MediaPlayer.cy.tsx +32 -0
- package/cypress/specs/SelectBox.cy.tsx +134 -3
- package/cypress/specs/Tag.cy.tsx +34 -3
- package/cypress/specs/TextField.cy.tsx +68 -0
- package/cypress/support/component-imports.instrumented.ts +6 -0
- package/cypress/support/component-imports.src.ts +6 -0
- package/dist/AccordionSpotlight.d.ts +149 -0
- package/dist/AccordionSpotlight.js +284 -0
- package/dist/AccordionSpotlight.js.map +1 -0
- package/dist/AccordionSpotlightItem.d.ts +76 -0
- package/dist/AccordionSpotlightItem.js +115 -0
- package/dist/AccordionSpotlightItem.js.map +1 -0
- package/dist/AccordionSpotlightItemTemplate.d.ts +2 -0
- package/dist/AccordionSpotlightItemTemplate.js +5 -0
- package/dist/AccordionSpotlightItemTemplate.js.map +1 -0
- package/dist/AccordionSpotlightTemplate.d.ts +2 -0
- package/dist/AccordionSpotlightTemplate.js +10 -0
- package/dist/AccordionSpotlightTemplate.js.map +1 -0
- package/dist/BusyIndicator.d.ts +9 -0
- package/dist/BusyIndicator.js +7 -1
- package/dist/BusyIndicator.js.map +1 -1
- package/dist/Carousel.d.ts +64 -8
- package/dist/Carousel.js +191 -33
- package/dist/Carousel.js.map +1 -1
- package/dist/CarouselTemplate.js +9 -2
- package/dist/CarouselTemplate.js.map +1 -1
- package/dist/DatePicker.d.ts +5 -0
- package/dist/DatePicker.js +10 -0
- package/dist/DatePicker.js.map +1 -1
- package/dist/DatePickerTemplate.js +1 -1
- package/dist/DatePickerTemplate.js.map +1 -1
- package/dist/FilterMenu.d.ts +12 -2
- package/dist/FilterMenu.js +24 -4
- package/dist/FilterMenu.js.map +1 -1
- package/dist/FilterMenuTemplate.js +1 -1
- package/dist/FilterMenuTemplate.js.map +1 -1
- package/dist/List.d.ts +1 -0
- package/dist/List.js +24 -11
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +5 -1
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +22 -0
- package/dist/ListGroupHeaderBase.js +44 -0
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListItem.d.ts +4 -0
- package/dist/ListItem.js +32 -0
- package/dist/ListItem.js.map +1 -1
- package/dist/MediaPlayer.d.ts +2 -0
- package/dist/MediaPlayer.js +12 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/PromoTile.js +1 -1
- package/dist/PromoTile.js.map +1 -1
- package/dist/SearchableListBase.d.ts +10 -1
- package/dist/SearchableListBase.js +23 -7
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +3 -2
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SelectBase.d.ts +14 -0
- package/dist/SelectBase.js +56 -3
- package/dist/SelectBase.js.map +1 -1
- package/dist/SelectBoxTemplate.js +1 -1
- package/dist/SelectBoxTemplate.js.map +1 -1
- package/dist/TabNavigation.d.ts +6 -0
- package/dist/TabNavigation.js +5 -0
- package/dist/TabNavigation.js.map +1 -1
- package/dist/Tag.js +3 -2
- package/dist/Tag.js.map +1 -1
- package/dist/TagTemplate.js +2 -2
- package/dist/TagTemplate.js.map +1 -1
- package/dist/TextField.d.ts +12 -0
- package/dist/TextField.js +15 -0
- package/dist/TextField.js.map +1 -1
- package/dist/TextFieldTemplate.js +1 -1
- package/dist/TextFieldTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-CbKVAumI.js → InputSuggestions-DaB1A6jW.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-C3-WJZBS.js → ListItemStandardExpandableTextTemplate-Co4KQuVw.js} +1 -1
- package/dist/assets/{bundle-JYo3bV8v.css → bundle-CkxyEA8c.css} +1 -1
- package/dist/assets/{bundle.esm-D8jQybCx.js → bundle.esm-al3NYhoB.js} +242 -239
- package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +1 -0
- package/dist/assets/messagebundle_en-DoNTK1BE.js +1 -0
- package/dist/assets/messagebundle_no-BZQfeWxT.js +1 -0
- package/dist/assets/messagebundle_pl-CsXeN1y6.js +1 -0
- package/dist/assets/messagebundle_pt_PT-CQ5YAsmx.js +1 -0
- package/dist/css/themes/Accordion.css +1 -1
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/AccordionSpotlight.css +1 -0
- package/dist/css/themes/AccordionSpotlightItem.css +1 -0
- package/dist/css/themes/Badge.css +1 -1
- package/dist/css/themes/BusyIndicator.css +1 -0
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/Carousel.css +1 -1
- package/dist/css/themes/Divider.css +1 -1
- package/dist/css/themes/Dropdown.css +1 -1
- package/dist/css/themes/FilterMenu.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/ImageGridTableItem.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/PhoneNumberField.css +1 -1
- package/dist/css/themes/ProgressBar.css +1 -1
- package/dist/css/themes/PromoTile.css +1 -1
- package/dist/css/themes/Review.css +1 -1
- package/dist/css/themes/ReviewItem.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SelectBase.css +1 -1
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/SideNavigation.css +1 -1
- package/dist/css/themes/SideNavigationGroup.css +1 -1
- package/dist/css/themes/SocialMediaButton.css +1 -1
- package/dist/css/themes/StepInput.css +1 -1
- package/dist/css/themes/Switch.css +1 -1
- package/dist/css/themes/TabNavigation.css +1 -1
- package/dist/css/themes/Table.css +1 -1
- package/dist/css/themes/TableCell.css +1 -1
- package/dist/css/themes/TableGroupRow.css +1 -1
- package/dist/css/themes/TableHeaderCell.css +1 -1
- package/dist/css/themes/Tag.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/Toast.css +1 -1
- package/dist/custom-elements-internal.json +511 -35
- package/dist/custom-elements.json +455 -49
- package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_en.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_PT.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
- package/dist/generated/i18n/i18n-defaults.js +3 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +24 -21
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Accordion.css.d.ts +1 -1
- package/dist/generated/themes/Accordion.css.js +1 -1
- package/dist/generated/themes/Accordion.css.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 +2 -0
- package/dist/generated/themes/AccordionSpotlight.css.js +8 -0
- package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -0
- package/dist/generated/themes/AccordionSpotlightItem.css.d.ts +2 -0
- package/dist/generated/themes/AccordionSpotlightItem.css.js +8 -0
- package/dist/generated/themes/AccordionSpotlightItem.css.js.map +1 -0
- package/dist/generated/themes/Badge.css.d.ts +1 -1
- package/dist/generated/themes/Badge.css.js +1 -1
- package/dist/generated/themes/Badge.css.js.map +1 -1
- package/dist/generated/themes/BusyIndicator.css.d.ts +2 -0
- package/dist/generated/themes/BusyIndicator.css.js +8 -0
- package/dist/generated/themes/BusyIndicator.css.js.map +1 -0
- package/dist/generated/themes/Button.css.d.ts +1 -1
- package/dist/generated/themes/Button.css.js +1 -1
- package/dist/generated/themes/Button.css.js.map +1 -1
- package/dist/generated/themes/Carousel.css.d.ts +1 -1
- package/dist/generated/themes/Carousel.css.js +1 -1
- package/dist/generated/themes/Carousel.css.js.map +1 -1
- package/dist/generated/themes/Divider.css.d.ts +1 -1
- package/dist/generated/themes/Divider.css.js +1 -1
- package/dist/generated/themes/Divider.css.js.map +1 -1
- package/dist/generated/themes/Dropdown.css.d.ts +1 -1
- package/dist/generated/themes/Dropdown.css.js +1 -1
- package/dist/generated/themes/Dropdown.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/ImageGridTableItem.css.d.ts +1 -1
- package/dist/generated/themes/ImageGridTableItem.css.js +1 -1
- package/dist/generated/themes/ImageGridTableItem.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/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/ProgressBar.css.d.ts +1 -1
- package/dist/generated/themes/ProgressBar.css.js +1 -1
- package/dist/generated/themes/ProgressBar.css.js.map +1 -1
- package/dist/generated/themes/PromoTile.css.d.ts +1 -1
- package/dist/generated/themes/PromoTile.css.js +1 -1
- package/dist/generated/themes/PromoTile.css.js.map +1 -1
- package/dist/generated/themes/Review.css.d.ts +1 -1
- package/dist/generated/themes/Review.css.js +1 -1
- package/dist/generated/themes/Review.css.js.map +1 -1
- package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
- package/dist/generated/themes/ReviewItem.css.js +1 -1
- package/dist/generated/themes/ReviewItem.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/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/SelectBox.css.d.ts +1 -1
- package/dist/generated/themes/SelectBox.css.js +1 -1
- package/dist/generated/themes/SelectBox.css.js.map +1 -1
- package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigation.css.js +1 -1
- package/dist/generated/themes/SideNavigation.css.js.map +1 -1
- package/dist/generated/themes/SideNavigationGroup.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigationGroup.css.js +1 -1
- package/dist/generated/themes/SideNavigationGroup.css.js.map +1 -1
- package/dist/generated/themes/SocialMediaButton.css.d.ts +1 -1
- package/dist/generated/themes/SocialMediaButton.css.js +1 -1
- package/dist/generated/themes/SocialMediaButton.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/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/Table.css.d.ts +1 -1
- package/dist/generated/themes/Table.css.js +1 -1
- package/dist/generated/themes/Table.css.js.map +1 -1
- package/dist/generated/themes/TableCell.css.d.ts +1 -1
- package/dist/generated/themes/TableCell.css.js +1 -1
- package/dist/generated/themes/TableCell.css.js.map +1 -1
- package/dist/generated/themes/TableGroupRow.css.d.ts +1 -1
- package/dist/generated/themes/TableGroupRow.css.js +1 -1
- package/dist/generated/themes/TableGroupRow.css.js.map +1 -1
- package/dist/generated/themes/TableHeaderCell.css.d.ts +1 -1
- package/dist/generated/themes/TableHeaderCell.css.js +1 -1
- package/dist/generated/themes/TableHeaderCell.css.js.map +1 -1
- package/dist/generated/themes/Tag.css.d.ts +1 -1
- package/dist/generated/themes/Tag.css.js +1 -1
- package/dist/generated/themes/Tag.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/Toast.css.d.ts +1 -1
- package/dist/generated/themes/Toast.css.js +1 -1
- package/dist/generated/themes/Toast.css.js.map +1 -1
- package/dist/messagebundle.properties +3 -0
- package/dist/messagebundle_ar.properties +99 -0
- package/dist/messagebundle_en.properties +2 -0
- package/dist/messagebundle_no.properties +126 -1
- package/dist/messagebundle_pl.properties +134 -1
- package/dist/messagebundle_pt_PT.properties +126 -1
- package/dist/vscode.html-custom-data.json +92 -12
- package/dist/web-types.json +233 -27
- package/package.json +1 -1
- package/src/AccordionSpotlight.ts +321 -0
- package/src/AccordionSpotlightItem.ts +117 -0
- package/src/AccordionSpotlightItemTemplate.tsx +7 -0
- package/src/AccordionSpotlightTemplate.tsx +107 -0
- package/src/BusyIndicator.ts +17 -2
- package/src/Carousel.ts +243 -34
- package/src/CarouselTemplate.tsx +66 -27
- package/src/DatePicker.ts +9 -0
- package/src/DatePickerTemplate.tsx +2 -1
- package/src/FilterMenu.ts +25 -4
- package/src/FilterMenuTemplate.tsx +1 -1
- package/src/List.ts +23 -11
- package/src/ListGroupHeader.hbs +11 -10
- package/src/ListGroupHeader.ts +5 -1
- package/src/ListGroupHeaderBase.ts +48 -0
- package/src/ListItem.hbs +5 -1
- package/src/ListItem.ts +36 -0
- package/src/MediaPlayer.ts +11 -0
- package/src/PromoTile.ts +1 -1
- package/src/SearchableListBase.ts +24 -7
- package/src/SearchableListBaseTemplate.tsx +5 -2
- package/src/SelectBase.ts +58 -3
- package/src/SelectBoxTemplate.tsx +1 -0
- package/src/TabNavigation.ts +6 -0
- package/src/Tag.ts +3 -2
- package/src/TagTemplate.tsx +2 -0
- package/src/TextField.ts +26 -1
- package/src/TextFieldTemplate.tsx +1 -0
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +24 -21
- package/src/generated/templates/ListItemTemplate.lit.ts +2 -2
- package/src/generated/themes/Accordion.css.ts +1 -1
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/AccordionSpotlight.css.ts +9 -0
- package/src/generated/themes/AccordionSpotlightItem.css.ts +9 -0
- package/src/generated/themes/Badge.css.ts +1 -1
- package/src/generated/themes/BusyIndicator.css.ts +9 -0
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/Carousel.css.ts +1 -1
- package/src/generated/themes/Divider.css.ts +1 -1
- package/src/generated/themes/Dropdown.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/ImageGridTableItem.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/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/ProgressBar.css.ts +1 -1
- package/src/generated/themes/PromoTile.css.ts +1 -1
- package/src/generated/themes/Review.css.ts +1 -1
- package/src/generated/themes/ReviewItem.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SelectBase.css.ts +1 -1
- package/src/generated/themes/SelectBox.css.ts +1 -1
- package/src/generated/themes/SideNavigation.css.ts +1 -1
- package/src/generated/themes/SideNavigationGroup.css.ts +1 -1
- package/src/generated/themes/SocialMediaButton.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/TabNavigation.css.ts +1 -1
- package/src/generated/themes/Table.css.ts +1 -1
- package/src/generated/themes/TableCell.css.ts +1 -1
- package/src/generated/themes/TableGroupRow.css.ts +1 -1
- package/src/generated/themes/TableHeaderCell.css.ts +1 -1
- package/src/generated/themes/Tag.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/Toast.css.ts +1 -1
- package/src/i18n/messagebundle.properties +3 -0
- package/src/i18n/messagebundle_ar.properties +99 -0
- package/src/i18n/messagebundle_en.properties +2 -0
- package/src/i18n/messagebundle_no.properties +126 -1
- package/src/i18n/messagebundle_pl.properties +134 -1
- package/src/i18n/messagebundle_pt_PT.properties +126 -1
- package/src/themes/Accordion.css +1 -1
- package/src/themes/AccordionItem.css +4 -4
- package/src/themes/AccordionSpotlight.css +264 -0
- package/src/themes/AccordionSpotlightItem.css +3 -0
- package/src/themes/Badge.css +7 -7
- package/src/themes/BusyIndicator.css +24 -0
- package/src/themes/Button.css +57 -57
- package/src/themes/Carousel.css +20 -8
- package/src/themes/Divider.css +1 -1
- package/src/themes/Dropdown.css +1 -1
- package/src/themes/FilterMenu.css +2 -2
- package/src/themes/Footer.css +1 -1
- package/src/themes/ImageGridTableItem.css +1 -1
- package/src/themes/MastheadItem.css +7 -4
- package/src/themes/MastheadProfileMenu.css +0 -13
- package/src/themes/MastheadShell.css +2 -2
- package/src/themes/MediaPlayer.css +5 -34
- package/src/themes/PhoneNumberField.css +6 -6
- package/src/themes/ProgressBar.css +4 -0
- package/src/themes/PromoTile.css +4 -4
- package/src/themes/Review.css +2 -2
- package/src/themes/ReviewItem.css +2 -2
- package/src/themes/Search.css +5 -5
- package/src/themes/SelectBase.css +14 -14
- package/src/themes/SelectBox.css +1 -1
- package/src/themes/SideNavigation.css +1 -1
- package/src/themes/SideNavigationGroup.css +1 -1
- package/src/themes/SocialMediaButton.css +2 -2
- package/src/themes/StepInput.css +8 -8
- package/src/themes/Switch.css +9 -9
- package/src/themes/TabNavigation.css +1 -1
- package/src/themes/Table.css +1 -1
- package/src/themes/TableCell.css +3 -3
- package/src/themes/TableGroupRow.css +1 -1
- package/src/themes/TableHeaderCell.css +3 -4
- package/src/themes/Tag.css +28 -4
- package/src/themes/TagGroup.css +1 -0
- package/src/themes/TextArea.css +4 -4
- package/src/themes/TextField.css +13 -13
- package/src/themes/Toast.css +1 -1
- package/dist/assets/messagebundle_ar-BNhVFt1-.js +0 -1
- package/dist/assets/messagebundle_en-BZqDcZHN.js +0 -1
- package/dist/assets/messagebundle_no-BIUfmTWJ.js +0 -1
- package/dist/assets/messagebundle_pl-BmaELnDD.js +0 -1
- package/dist/assets/messagebundle_pt_PT-DcVh6BH6.js +0 -1
package/src/Carousel.ts
CHANGED
|
@@ -7,15 +7,21 @@ import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
|
7
7
|
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
8
8
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
9
9
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
10
|
+
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
11
|
+
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
10
12
|
import {
|
|
11
13
|
isUp, isDown, isRight, isLeft,
|
|
12
14
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
13
|
-
import {
|
|
15
|
+
import {
|
|
16
|
+
CAROUSEL_NEXT_ARROW_TEXT,
|
|
17
|
+
CAROUSEL_PREVIOUS_ARROW_TEXT,
|
|
18
|
+
CAROUSEL_AUTOPLAY_TOGGLE_START,
|
|
19
|
+
CAROUSEL_AUTOPLAY_TOGGLE_STOP,
|
|
20
|
+
} from "./generated/i18n/i18n-defaults.js";
|
|
14
21
|
import redirectAttributes from "./utils/redirectAttributes.js";
|
|
15
22
|
import type UI5Carousel from "@ui5/webcomponents/dist/Carousel.js";
|
|
16
23
|
import type { CarouselNavigateEventDetail } from "@ui5/webcomponents/dist/Carousel.js";
|
|
17
24
|
import type { UI5CustomEvent } from "@ui5/webcomponents-base";
|
|
18
|
-
import type Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
19
25
|
import translate from "./utils/translate.js";
|
|
20
26
|
|
|
21
27
|
import CarouselTemplate from "./CarouselTemplate.js";
|
|
@@ -23,7 +29,6 @@ import CarouselTemplate from "./CarouselTemplate.js";
|
|
|
23
29
|
// Styles
|
|
24
30
|
import CarouselCss from "./generated/themes/Carousel.css.js";
|
|
25
31
|
import type CarouselPageIndicatorType from "@ui5/webcomponents/dist/types/CarouselPageIndicatorType.js";
|
|
26
|
-
import type UDExButton from "./Button.js";
|
|
27
32
|
|
|
28
33
|
export enum UDExCarouselNavigationPosition {
|
|
29
34
|
top = "top",
|
|
@@ -35,6 +40,10 @@ export enum UDExCarouselButtonDesign {
|
|
|
35
40
|
Tertiary = "Tertiary",
|
|
36
41
|
}
|
|
37
42
|
|
|
43
|
+
type UDExCarouselAutoplayToggleEventDetails = {
|
|
44
|
+
isPaused: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
38
47
|
/**
|
|
39
48
|
* @class
|
|
40
49
|
*
|
|
@@ -65,10 +74,18 @@ export enum UDExCarouselButtonDesign {
|
|
|
65
74
|
* @param { CustomEvent }
|
|
66
75
|
*/
|
|
67
76
|
@event("navigate")
|
|
77
|
+
/**
|
|
78
|
+
* Fired event when the user click on a play/paused button.
|
|
79
|
+
*
|
|
80
|
+
* @public
|
|
81
|
+
* @param {boolean} isPaused - Indicates current state of autoplay
|
|
82
|
+
*/
|
|
83
|
+
@event("autoplay-toggle-click", { bubbles: true })
|
|
68
84
|
|
|
69
85
|
class UDExCarousel extends UI5Element {
|
|
70
86
|
eventDetails!: {
|
|
71
87
|
"navigate": CarouselNavigateEventDetail,
|
|
88
|
+
"autoplay-toggle-click": UDExCarouselAutoplayToggleEventDetails,
|
|
72
89
|
};
|
|
73
90
|
/**
|
|
74
91
|
* Defines the position of the navigation.
|
|
@@ -83,6 +100,37 @@ class UDExCarousel extends UI5Element {
|
|
|
83
100
|
*/
|
|
84
101
|
@property()
|
|
85
102
|
navigationPlacement: `${UDExCarouselNavigationPosition}` = UDExCarouselNavigationPosition.top;
|
|
103
|
+
/**
|
|
104
|
+
* Controls carousel autoplay functionality
|
|
105
|
+
* @public
|
|
106
|
+
* @default undefined
|
|
107
|
+
*/
|
|
108
|
+
@property({ type: Boolean })
|
|
109
|
+
autoplay?: boolean;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Defines carousel autoplay speed in milliseconds till next slide
|
|
113
|
+
* @public
|
|
114
|
+
*/
|
|
115
|
+
@property({ type: Number })
|
|
116
|
+
autoplaySpeed: number = 2000;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Indicates current state of autoplay.
|
|
120
|
+
*
|
|
121
|
+
* @default true
|
|
122
|
+
* @private
|
|
123
|
+
*/
|
|
124
|
+
@property({ type: Boolean })
|
|
125
|
+
_autoplayIsPaused = true;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Defines whether the carousel should loop, i.e show the first page after the last page is reached and vice versa.
|
|
129
|
+
* @public
|
|
130
|
+
* @default false
|
|
131
|
+
*/
|
|
132
|
+
@property({ type: Boolean })
|
|
133
|
+
cyclic?: boolean;
|
|
86
134
|
|
|
87
135
|
/**
|
|
88
136
|
* Defines the content of the component.
|
|
@@ -148,46 +196,145 @@ class UDExCarousel extends UI5Element {
|
|
|
148
196
|
@property({ type: String })
|
|
149
197
|
accessibleName: string = "";
|
|
150
198
|
|
|
199
|
+
/**
|
|
200
|
+
* Tracks whether the inner carousel has multiple pages (updated after render).
|
|
201
|
+
*
|
|
202
|
+
* @default false
|
|
203
|
+
* @private
|
|
204
|
+
*/
|
|
205
|
+
@property({ type: Boolean, noAttribute: true })
|
|
206
|
+
_hasManyPages = false;
|
|
207
|
+
|
|
151
208
|
@i18n("@sapudex/web-components")
|
|
152
209
|
static i18nBundle: I18nBundle;
|
|
153
210
|
|
|
154
|
-
|
|
155
|
-
|
|
211
|
+
_autoplayInterval: ReturnType<typeof setInterval> | null = null;
|
|
212
|
+
_autoplayLastToggle = Date.now();
|
|
213
|
+
_autoplayMinTimeBetweenToggle = 250;
|
|
214
|
+
_autoplayManualStop = false;
|
|
215
|
+
_resizeHandler: ResizeObserverCallback;
|
|
216
|
+
|
|
217
|
+
constructor() {
|
|
218
|
+
super();
|
|
219
|
+
this._resizeHandler = this._onResize.bind(this);
|
|
156
220
|
}
|
|
157
221
|
|
|
158
|
-
|
|
159
|
-
|
|
222
|
+
onAfterRendering() {
|
|
223
|
+
redirectAttributes(this, "carousel");
|
|
224
|
+
|
|
225
|
+
this._calculateDisabledButtonsState();
|
|
226
|
+
|
|
227
|
+
if (this._autoplayInterval === null) {
|
|
228
|
+
this._startAutoplay();
|
|
229
|
+
}
|
|
160
230
|
}
|
|
161
231
|
|
|
162
|
-
|
|
163
|
-
|
|
232
|
+
onExitDOM(): void {
|
|
233
|
+
ResizeHandler.deregister(this, this._resizeHandler);
|
|
164
234
|
|
|
165
|
-
|
|
235
|
+
if (this._autoplayInterval) {
|
|
236
|
+
clearInterval(this._autoplayInterval);
|
|
237
|
+
}
|
|
166
238
|
}
|
|
167
239
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
? UDExCarouselButtonDesign.Secondary
|
|
171
|
-
: UDExCarouselButtonDesign.Tertiary;
|
|
240
|
+
onEnterDOM(): void {
|
|
241
|
+
ResizeHandler.register(this, this._resizeHandler);
|
|
172
242
|
}
|
|
173
243
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
top: this.navigationPlacement === UDExCarouselNavigationPosition.top,
|
|
177
|
-
bottom: this.navigationPlacement === UDExCarouselNavigationPosition.bottom,
|
|
178
|
-
};
|
|
244
|
+
_onResize(): void {
|
|
245
|
+
this._hasManyPages = this._carousel?.hasManyPages ?? false;
|
|
179
246
|
}
|
|
180
247
|
|
|
181
|
-
|
|
182
|
-
|
|
248
|
+
_autoplayLoop = () => {
|
|
249
|
+
const items = this._carousel?.items;
|
|
250
|
+
if (!items) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const currentSlide = this._carousel._currentPageIndex;
|
|
255
|
+
const itemsPerPage = this._carousel.effectiveItemsPerPage;
|
|
256
|
+
const isLastSlide = currentSlide === (items.length - itemsPerPage);
|
|
257
|
+
|
|
258
|
+
if (isLastSlide && !this.cyclic) {
|
|
259
|
+
this._stopAutoplay();
|
|
260
|
+
this._autoplayManualStop = true;
|
|
261
|
+
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const nextSlide = isLastSlide ? 0 : (currentSlide + itemsPerPage);
|
|
266
|
+
|
|
267
|
+
this._carousel?.navigateTo(nextSlide);
|
|
268
|
+
this._calculateDisabledButtonsState();
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
_startAutoplay(): void {
|
|
272
|
+
if (!this.autoplay) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (!this._carousel?.items) {
|
|
277
|
+
console.warn("[UDExCarousel] Cannot start autoplay on an empty carousel");
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const toggleBuffer = Date.now() - this._autoplayLastToggle;
|
|
282
|
+
if (this._autoplayInterval !== null && toggleBuffer <= this._autoplayMinTimeBetweenToggle) {
|
|
283
|
+
this._autoplayLastToggle = Date.now();
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (this._autoplayInterval !== null) {
|
|
288
|
+
clearInterval(this._autoplayInterval);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
this._autoplayInterval = setInterval(this._autoplayLoop, this.autoplaySpeed);
|
|
292
|
+
this._autoplayIsPaused = false;
|
|
293
|
+
this._autoplayLastToggle = Date.now();
|
|
183
294
|
}
|
|
184
295
|
|
|
185
|
-
|
|
186
|
-
|
|
296
|
+
_stopAutoplay(): void {
|
|
297
|
+
if (!this._autoplayInterval) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
clearInterval(this._autoplayInterval);
|
|
302
|
+
this._autoplayIsPaused = true;
|
|
303
|
+
this._autoplayLastToggle = Date.now();
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
_onAutoplayToggleClick(): void {
|
|
307
|
+
if (this._autoplayIsPaused) {
|
|
308
|
+
this._startAutoplay();
|
|
309
|
+
this._autoplayManualStop = false;
|
|
310
|
+
} else {
|
|
311
|
+
this._stopAutoplay();
|
|
312
|
+
this._autoplayManualStop = true;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
this.fireDecoratorEvent("autoplay-toggle-click", {
|
|
316
|
+
isPaused: this._autoplayIsPaused,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
_onFocusIn(): void {
|
|
321
|
+
this._stopAutoplay();
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
_onFocusOut(): void {
|
|
325
|
+
if (!this._autoplayManualStop) {
|
|
326
|
+
this._startAutoplay();
|
|
327
|
+
}
|
|
187
328
|
}
|
|
188
329
|
|
|
189
|
-
|
|
190
|
-
|
|
330
|
+
_onMouseEnter(): void {
|
|
331
|
+
this._stopAutoplay();
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
_onMouseLeave(): void {
|
|
335
|
+
if (!this._autoplayManualStop) {
|
|
336
|
+
this._startAutoplay();
|
|
337
|
+
}
|
|
191
338
|
}
|
|
192
339
|
|
|
193
340
|
_calculateDisabledButtonsState() {
|
|
@@ -195,20 +342,22 @@ class UDExCarousel extends UI5Element {
|
|
|
195
342
|
this.isNextButtonDisabled = !this._carousel?.hasNext;
|
|
196
343
|
}
|
|
197
344
|
|
|
198
|
-
_prevButtonClick(
|
|
199
|
-
if (this.isPrevButtonDisabled) {
|
|
345
|
+
_prevButtonClick() {
|
|
346
|
+
if (this.isPrevButtonDisabled || !this._carousel) {
|
|
200
347
|
return;
|
|
201
348
|
}
|
|
202
349
|
|
|
203
|
-
this._carousel
|
|
350
|
+
this._carousel.navigateLeft();
|
|
351
|
+
this._calculateDisabledButtonsState();
|
|
204
352
|
}
|
|
205
353
|
|
|
206
|
-
_nextButtonClick(
|
|
207
|
-
if (this.isNextButtonDisabled) {
|
|
354
|
+
_nextButtonClick() {
|
|
355
|
+
if (this.isNextButtonDisabled || !this._carousel) {
|
|
208
356
|
return;
|
|
209
357
|
}
|
|
210
358
|
|
|
211
|
-
this._carousel
|
|
359
|
+
this._carousel.navigateRight();
|
|
360
|
+
this._calculateDisabledButtonsState();
|
|
212
361
|
}
|
|
213
362
|
|
|
214
363
|
_onkeydown(e: KeyboardEvent) {
|
|
@@ -223,13 +372,73 @@ class UDExCarousel extends UI5Element {
|
|
|
223
372
|
this.fireDecoratorEvent("navigate", e.detail);
|
|
224
373
|
}
|
|
225
374
|
|
|
226
|
-
|
|
227
|
-
|
|
375
|
+
get nextPageText(): string {
|
|
376
|
+
return translate(UDExCarousel, CAROUSEL_NEXT_ARROW_TEXT);
|
|
377
|
+
}
|
|
228
378
|
|
|
229
|
-
|
|
379
|
+
get previousPageText(): string {
|
|
380
|
+
return translate(UDExCarousel, CAROUSEL_PREVIOUS_ARROW_TEXT);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
get carouselClass(): string {
|
|
384
|
+
const classes = "udex-carousel";
|
|
385
|
+
|
|
386
|
+
return `${classes} udex-carousel__navigation--${this.navigationPlacement}`;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
get navigationWrapperClass(): string {
|
|
390
|
+
let _class = "udex-carousel__navigation-wrapper";
|
|
391
|
+
|
|
392
|
+
if (this.autoplay) {
|
|
393
|
+
_class += " udex-carousel__navigation-wrapper--autoplay";
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return _class;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
get navigationButtonWrapperClass(): string {
|
|
400
|
+
let _class = "udex-carousel__navigation-button-wrapper";
|
|
401
|
+
|
|
402
|
+
if (this._carousel?.isPageTypeDots) {
|
|
403
|
+
_class += " udex-carousel__navigation-button-wrapper--dot-indicators";
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
return _class;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
get buttonDesign(): UDExCarouselButtonDesign {
|
|
410
|
+
return this.navigationPlacement === UDExCarouselNavigationPosition.top
|
|
411
|
+
? UDExCarouselButtonDesign.Secondary
|
|
412
|
+
: UDExCarouselButtonDesign.Tertiary;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
get showNavigationButtons(): { top: boolean; bottom: boolean } {
|
|
416
|
+
return {
|
|
417
|
+
top: this.navigationPlacement === UDExCarouselNavigationPosition.top && this._hasManyPages,
|
|
418
|
+
bottom: this.navigationPlacement === UDExCarouselNavigationPosition.bottom && this._hasManyPages,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
get _hidePageIndicator(): boolean {
|
|
423
|
+
return this.navigationPlacement === UDExCarouselNavigationPosition.top;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
get _carousel(): UI5Carousel | null {
|
|
427
|
+
return this.shadowRoot!.querySelector<UI5Carousel>("[ui5-carousel]");
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
get _isBottomNavigation(): boolean {
|
|
431
|
+
return this.navigationPlacement === UDExCarouselNavigationPosition.bottom;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
get autoplayToggleButtonTooltipText(): string {
|
|
435
|
+
return this._autoplayIsPaused
|
|
436
|
+
? translate(UDExCarousel, CAROUSEL_AUTOPLAY_TOGGLE_START)
|
|
437
|
+
: translate(UDExCarousel, CAROUSEL_AUTOPLAY_TOGGLE_STOP);
|
|
230
438
|
}
|
|
231
439
|
}
|
|
232
440
|
|
|
233
441
|
UDExCarousel.define();
|
|
234
442
|
|
|
235
443
|
export default UDExCarousel;
|
|
444
|
+
export type { CarouselNavigateEventDetail, UDExCarouselAutoplayToggleEventDetails };
|
package/src/CarouselTemplate.tsx
CHANGED
|
@@ -2,15 +2,19 @@ import type Carousel from "./Carousel.js";
|
|
|
2
2
|
import UI5Carousel from "@ui5/webcomponents/dist/Carousel.js";
|
|
3
3
|
import UDExButton from "./Button.js";
|
|
4
4
|
import UDExButtonSize from "./types/ButtonSize.js";
|
|
5
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
5
6
|
import type SlottedChild from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
6
7
|
import CarouselArrowsPlacement from "@ui5/webcomponents/dist/types/CarouselArrowsPlacement.js";
|
|
7
8
|
import slimArrowLeft from "@ui5/webcomponents-icons/dist/slim-arrow-left.js";
|
|
8
9
|
import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
10
|
+
import play from "@ui5/webcomponents-icons/dist/play.js";
|
|
11
|
+
import pause from "@ui5/webcomponents-icons/dist/pause.js";
|
|
9
12
|
|
|
10
13
|
export default function CarouselTemplate(this: Carousel) {
|
|
11
14
|
return (
|
|
12
15
|
<div className={this.carouselClass} onKeyDown={this._onkeydown}>
|
|
13
16
|
{this.showNavigationButtons.top && navigation.call(this)}
|
|
17
|
+
|
|
14
18
|
<UI5Carousel
|
|
15
19
|
itemsPerPage={this.itemsPerPage}
|
|
16
20
|
pageIndicatorType={this.pageIndicatorType}
|
|
@@ -19,11 +23,20 @@ export default function CarouselTemplate(this: Carousel) {
|
|
|
19
23
|
arrowsPlacement={CarouselArrowsPlacement.Navigation}
|
|
20
24
|
accessibleName={this.accessibleName}
|
|
21
25
|
hidePageIndicator={this._hidePageIndicator}
|
|
22
|
-
onNavigate={this._handleNavigate}
|
|
23
|
-
{this.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
onNavigate={this._handleNavigate}
|
|
27
|
+
onMouseEnter={this._onMouseEnter}
|
|
28
|
+
onMouseLeave={this._onMouseLeave}
|
|
29
|
+
onFocusIn={this._onFocusIn}
|
|
30
|
+
onFocusOut={this._onFocusOut}
|
|
31
|
+
cyclic={this.cyclic}
|
|
32
|
+
>
|
|
33
|
+
{
|
|
34
|
+
this.items.map(item =>
|
|
35
|
+
<slot name={(item as SlottedChild)._individualSlot}></slot>
|
|
36
|
+
)
|
|
37
|
+
}
|
|
26
38
|
</UI5Carousel>
|
|
39
|
+
|
|
27
40
|
{this.showNavigationButtons.bottom && navigation.call(this)}
|
|
28
41
|
</div>
|
|
29
42
|
);
|
|
@@ -31,31 +44,57 @@ export default function CarouselTemplate(this: Carousel) {
|
|
|
31
44
|
|
|
32
45
|
function navigation(this: Carousel) {
|
|
33
46
|
const btnClassName = "udex-carousel__navigation-button";
|
|
47
|
+
const icon = this._autoplayIsPaused ? play : pause;
|
|
34
48
|
|
|
35
49
|
return (
|
|
36
|
-
<div
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
<div className={this.navigationWrapperClass} part="navigation">
|
|
51
|
+
{
|
|
52
|
+
this.autoplay &&
|
|
53
|
+
<UDExButton
|
|
54
|
+
class={`udex-carousel__autoplay-toggle-button`}
|
|
55
|
+
size={UDExButtonSize.Large}
|
|
56
|
+
design={UDExButtonDesign.Tertiary}
|
|
57
|
+
icon={icon}
|
|
58
|
+
onClick={this._onAutoplayToggleClick}
|
|
59
|
+
tooltip={this.autoplayToggleButtonTooltipText}
|
|
60
|
+
></UDExButton>
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
<div className={this.navigationButtonWrapperClass}>
|
|
64
|
+
<UDExButton
|
|
65
|
+
data-ui5-arrow-back
|
|
66
|
+
size={UDExButtonSize.Large}
|
|
67
|
+
disabled={this.isPrevButtonDisabled}
|
|
68
|
+
class={btnClassName}
|
|
69
|
+
icon={slimArrowLeft}
|
|
70
|
+
design={this.buttonDesign}
|
|
71
|
+
tooltip={this.previousPageText}
|
|
72
|
+
onClick={this._prevButtonClick}
|
|
73
|
+
part="prev-button">
|
|
74
|
+
</UDExButton>
|
|
75
|
+
|
|
76
|
+
{
|
|
77
|
+
this._isBottomNavigation &&
|
|
78
|
+
<div className="udex-carousel__navigation-page-indicator-spacer" />
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
<UDExButton
|
|
82
|
+
data-ui5-arrow-forward
|
|
83
|
+
size={UDExButtonSize.Large}
|
|
84
|
+
disabled={this.isNextButtonDisabled}
|
|
85
|
+
class={btnClassName}
|
|
86
|
+
icon={slimArrowRight}
|
|
87
|
+
design={this.buttonDesign}
|
|
88
|
+
tooltip={this.nextPageText}
|
|
89
|
+
onClick={this._nextButtonClick}
|
|
90
|
+
part="next-button">
|
|
91
|
+
</UDExButton>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
{
|
|
95
|
+
this.autoplay && this._isBottomNavigation &&
|
|
96
|
+
<div className="udex-carousel__navigation-spacer"></div>
|
|
97
|
+
}
|
|
59
98
|
</div>
|
|
60
99
|
);
|
|
61
100
|
}
|
package/src/DatePicker.ts
CHANGED
|
@@ -215,6 +215,13 @@ class UDExDatePicker extends DateComponentBase {
|
|
|
215
215
|
@property()
|
|
216
216
|
_tempValue!: string;
|
|
217
217
|
|
|
218
|
+
/**
|
|
219
|
+
* Tracks whether the calendar popover is currently open, used to reflect aria-expanded on the control button.
|
|
220
|
+
* @private
|
|
221
|
+
*/
|
|
222
|
+
@property({ type: Boolean, noAttribute: true })
|
|
223
|
+
_isPopoverOpen: boolean = false;
|
|
224
|
+
|
|
218
225
|
@i18n("@sapudex/web-components")
|
|
219
226
|
static i18nBundle: I18nBundle;
|
|
220
227
|
|
|
@@ -237,6 +244,7 @@ class UDExDatePicker extends DateComponentBase {
|
|
|
237
244
|
}
|
|
238
245
|
|
|
239
246
|
_afterDropdownClose(): void {
|
|
247
|
+
this._isPopoverOpen = false;
|
|
240
248
|
this._dropdownTrigger.active = false;
|
|
241
249
|
this._dropdownTrigger.iconActive = false;
|
|
242
250
|
this._dropdownTrigger.shadowRoot?.querySelector("input")?.blur();
|
|
@@ -244,6 +252,7 @@ class UDExDatePicker extends DateComponentBase {
|
|
|
244
252
|
}
|
|
245
253
|
|
|
246
254
|
_afterDropdownOpen(): void {
|
|
255
|
+
this._isPopoverOpen = true;
|
|
247
256
|
this._dropdownTrigger.iconActive = true;
|
|
248
257
|
}
|
|
249
258
|
|
|
@@ -7,7 +7,6 @@ export default function DatePickerTemplate(this: DatePicker) {
|
|
|
7
7
|
<>
|
|
8
8
|
<UDExTextField
|
|
9
9
|
class="udex-date-picker__input"
|
|
10
|
-
_aria-has-popup="grid"
|
|
11
10
|
icon="appointment-2"
|
|
12
11
|
value={this.value}
|
|
13
12
|
placeholder={this._effectivePlaceholder}
|
|
@@ -15,6 +14,8 @@ export default function DatePickerTemplate(this: DatePicker) {
|
|
|
15
14
|
accessible-name={this.dateAccessibleName}
|
|
16
15
|
accessible-name-ref={this.accessibleNameRef}
|
|
17
16
|
accessible-icon-name={this.accessibleIconName}
|
|
17
|
+
_icon-aria-has-popup="grid"
|
|
18
|
+
_icon-aria-expanded={this._isPopoverOpen ? "true" : "false"}
|
|
18
19
|
{...(this.disabled ? { "disabled": true } : {})}
|
|
19
20
|
{...(this.required ? { "required": true } : {})}
|
|
20
21
|
{...(this.readonly ? { "readonly": true } : {})}
|
package/src/FilterMenu.ts
CHANGED
|
@@ -296,19 +296,19 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
296
296
|
accessibleNameRef!: string;
|
|
297
297
|
/**
|
|
298
298
|
* Allows setting a custom role.
|
|
299
|
-
* @default "
|
|
299
|
+
* @default "Dialog"
|
|
300
300
|
* @public
|
|
301
301
|
*/
|
|
302
302
|
@property()
|
|
303
|
-
accessibleRole: `${PopupAccessibleRole}` = PopupAccessibleRole.
|
|
303
|
+
accessibleRole: `${PopupAccessibleRole}` = PopupAccessibleRole.Dialog;
|
|
304
304
|
|
|
305
305
|
/**
|
|
306
306
|
* Allows setting a custom role for dropdown trigger.
|
|
307
|
-
* @default "
|
|
307
|
+
* @default "button"
|
|
308
308
|
* @public
|
|
309
309
|
*/
|
|
310
310
|
@property({ type: String })
|
|
311
|
-
triggerAccessibleRole: string = "
|
|
311
|
+
triggerAccessibleRole: string = "button";
|
|
312
312
|
|
|
313
313
|
/**
|
|
314
314
|
* Determines whether the filter should be applied.
|
|
@@ -591,6 +591,27 @@ class UDExFilterMenu extends UDExSearchableListBase {
|
|
|
591
591
|
return translate(UDExFilterMenu, SELECT_OPTIONS);
|
|
592
592
|
}
|
|
593
593
|
|
|
594
|
+
/**
|
|
595
|
+
* FilterMenu uses the ARIA tree pattern for genuinely grouped items when:
|
|
596
|
+
* - MultiSelect mode (headers/items expose aria-checked), or
|
|
597
|
+
* - SingleSelect mode with at least one collapsible group
|
|
598
|
+
* (headers expose aria-expanded, items expose aria-selected).
|
|
599
|
+
*
|
|
600
|
+
* A "Select All" header is NOT a hierarchical group — it is a bulk-select
|
|
601
|
+
* affordance for a flat list — so it must not trigger the tree pattern.
|
|
602
|
+
*/
|
|
603
|
+
override get isTreeStructure(): boolean {
|
|
604
|
+
const groups = this._filteredItems.filter(e => e.isGroup && !(e.item as UDExListGroupHeaderBase).isSelectAllHeader);
|
|
605
|
+
if (!groups.length) {
|
|
606
|
+
return false;
|
|
607
|
+
}
|
|
608
|
+
if (this.modeMultiSelect) {
|
|
609
|
+
return true;
|
|
610
|
+
}
|
|
611
|
+
return this.modeSingleSelect
|
|
612
|
+
&& groups.some(e => (e.item as UDExListGroupHeaderBase).collapsible);
|
|
613
|
+
}
|
|
614
|
+
|
|
594
615
|
get triggerButtonAccessibleName(): string {
|
|
595
616
|
return this.accessibleName || translate(UDExFilterMenu, SELECT_OPTIONS);
|
|
596
617
|
}
|
|
@@ -19,7 +19,7 @@ export default function FilterMenuTemplate(this: UDExFilterMenu) {
|
|
|
19
19
|
aria-label={this.triggerButtonAccessibleName}
|
|
20
20
|
aria-labelledby={this.accessibleNameRef}
|
|
21
21
|
aria-expanded={this._open}
|
|
22
|
-
aria-haspopup="
|
|
22
|
+
aria-haspopup="dialog"
|
|
23
23
|
role={this.triggerAccessibleRole as AriaRole}
|
|
24
24
|
aria-controls={`${this._id}_udex-filter-menu-dropdown`}
|
|
25
25
|
disabled={this.disabled}
|