@sapudex/web-components 0.117.1 → 0.127.6
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 +3 -0
- package/config/wdio.conf.js +19 -8
- package/dist/AccordionItem.d.ts +2 -1
- package/dist/AccordionItem.js +3 -3
- package/dist/AccordionItem.js.map +1 -1
- package/dist/Avatar.d.ts +12 -0
- package/dist/Avatar.js +22 -1
- package/dist/Avatar.js.map +1 -1
- package/dist/AvatarGroup.d.ts +28 -0
- package/dist/AvatarGroup.js +126 -0
- package/dist/AvatarGroup.js.map +1 -0
- package/dist/Dropdown.d.ts +11 -1
- package/dist/Dropdown.js +15 -3
- package/dist/Dropdown.js.map +1 -1
- package/dist/FilterMenu.d.ts +7 -1
- package/dist/FilterMenu.js +4 -1
- package/dist/FilterMenu.js.map +1 -1
- package/dist/Footer.d.ts +27 -0
- package/dist/Footer.js +27 -36
- package/dist/Footer.js.map +1 -1
- package/dist/HeroBanner.js +3 -0
- package/dist/HeroBanner.js.map +1 -1
- package/dist/MastheadItem.d.ts +1 -0
- package/dist/MastheadItem.js +5 -11
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadShell.d.ts +8 -0
- package/dist/MastheadShell.js +10 -0
- package/dist/MastheadShell.js.map +1 -1
- package/dist/MessageStrip.js +1 -1
- package/dist/MessageStrip.js.map +1 -1
- package/dist/Pagination.d.ts +3 -0
- package/dist/Pagination.js +16 -4
- package/dist/Pagination.js.map +1 -1
- package/dist/PasswordField.d.ts +14 -4
- package/dist/PasswordField.js +24 -15
- package/dist/PasswordField.js.map +1 -1
- package/dist/PhoneNumberField.d.ts +6 -0
- package/dist/PhoneNumberField.js +6 -1
- package/dist/PhoneNumberField.js.map +1 -1
- package/dist/RatingBar.d.ts +53 -0
- package/dist/RatingBar.js +96 -0
- package/dist/RatingBar.js.map +1 -0
- package/dist/Review.d.ts +71 -0
- package/dist/Review.js +108 -0
- package/dist/Review.js.map +1 -0
- package/dist/Search.d.ts +49 -1
- package/dist/Search.js +32 -3
- package/dist/Search.js.map +1 -1
- package/dist/SearchableListBase.d.ts +1 -1
- package/dist/SearchableListBase.js +1 -1
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +8 -8
- package/dist/SecondaryNavigation.js +51 -39
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SecondaryNavigationItem.d.ts +1 -1
- package/dist/SecondaryNavigationItem.js +15 -5
- package/dist/SecondaryNavigationItem.js.map +1 -1
- package/dist/SecondaryNavigationItemBase.d.ts +16 -2
- package/dist/SecondaryNavigationItemBase.js +27 -1
- package/dist/SecondaryNavigationItemBase.js.map +1 -1
- package/dist/SecondaryNavigationSubItem.d.ts +2 -1
- package/dist/SecondaryNavigationSubItem.js +5 -2
- package/dist/SecondaryNavigationSubItem.js.map +1 -1
- package/dist/SelectBox.js +2 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/StatusBadge.d.ts +5 -5
- package/dist/StatusBadge.js.map +1 -1
- package/dist/Switch.d.ts +1 -0
- package/dist/Switch.js +3 -0
- package/dist/Switch.js.map +1 -1
- package/dist/Tab.d.ts +8 -0
- package/dist/Tab.js +3 -0
- package/dist/Tab.js.map +1 -1
- package/dist/TabNavigation.d.ts +20 -20
- package/dist/TabNavigation.js +82 -101
- package/dist/TabNavigation.js.map +1 -1
- package/dist/Tag.d.ts +13 -6
- package/dist/Tag.js +34 -20
- package/dist/Tag.js.map +1 -1
- package/dist/TextArea.d.ts +1 -1
- package/dist/TextArea.js +3 -0
- package/dist/TextArea.js.map +1 -1
- package/dist/TextField.d.ts +9 -0
- package/dist/TextField.js +16 -0
- package/dist/TextField.js.map +1 -1
- package/dist/Tooltip.d.ts +2 -2
- package/dist/Tooltip.js +3 -3
- package/dist/Tooltip.js.map +1 -1
- package/dist/assets/bundle.esm-7d53f4f2.js +314 -0
- package/dist/assets/messagebundle_en-6dcc9ab4.js +1 -0
- package/dist/assets/parameters-bundle.css-de55cf62.js +2 -0
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/Avatar.css +1 -1
- package/dist/css/themes/Badge.css +1 -1
- package/dist/css/themes/Divider.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/HeroBanner.css +1 -1
- package/dist/css/themes/MastheadShell.css +1 -1
- package/dist/css/themes/Modal.css +1 -1
- package/dist/css/themes/Pagination.css +1 -1
- package/dist/css/themes/PhoneNumberField.css +1 -1
- package/dist/css/themes/RatingBar.css +1 -0
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Review.css +1 -0
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SecondaryNavigation.css +1 -1
- package/dist/css/themes/SecondaryNavigationItem.css +1 -1
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/StepInput.css +1 -1
- package/dist/css/themes/TabNavigation.css +1 -1
- package/dist/css/themes/Tag.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/css/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css +1 -1
- package/dist/custom-elements-internal.json +670 -100
- package/dist/custom-elements.json +594 -67
- package/dist/data/CountryListISO3166.js +162 -162
- package/dist/data/CountryListISO3166.js.map +1 -1
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +9 -1
- package/dist/generated/i18n/i18n-defaults.js +13 -5
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/AccordionItemTemplate.lit.js +1 -1
- package/dist/generated/templates/AccordionItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/DatePickerTemplate.lit.js +1 -1
- package/dist/generated/templates/DatePickerTemplate.lit.js.map +1 -1
- package/dist/generated/templates/DropdownTemplate.lit.js +2 -2
- package/dist/generated/templates/DropdownTemplate.lit.js.map +1 -1
- package/dist/generated/templates/FilterMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/FooterTemplate.lit.js +26 -28
- package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
- package/dist/generated/templates/HeroBannerTemplate.lit.js +9 -8
- package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadItemTemplate.lit.js +3 -3
- package/dist/generated/templates/MastheadItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js +2 -2
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/PaginationTemplate.lit.js +1 -1
- package/dist/generated/templates/PaginationTemplate.lit.js.map +1 -1
- package/dist/generated/templates/PasswordFieldTemplate.lit.js +1 -2
- package/dist/generated/templates/PasswordFieldTemplate.lit.js.map +1 -1
- package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js +3 -3
- package/dist/generated/templates/PhoneNumberFieldTemplate.lit.js.map +1 -1
- package/dist/generated/templates/RatingBarTemplate.lit.d.ts +4 -0
- package/dist/generated/templates/RatingBarTemplate.lit.js +6 -0
- package/dist/generated/templates/RatingBarTemplate.lit.js.map +1 -0
- package/dist/generated/templates/ReviewTemplate.lit.d.ts +4 -0
- package/dist/generated/templates/ReviewTemplate.lit.js +10 -0
- package/dist/generated/templates/ReviewTemplate.lit.js.map +1 -0
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +1 -1
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchTemplate.lit.js +7 -7
- package/dist/generated/templates/SearchTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js +3 -3
- package/dist/generated/templates/SecondaryNavigationItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js +5 -4
- package/dist/generated/templates/SecondaryNavigationSubItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +3 -3
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SelectBoxTemplate.lit.js +2 -2
- package/dist/generated/templates/SelectBoxTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SwitchTemplate.lit.js +2 -2
- package/dist/generated/templates/SwitchTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TabInOverflowTemplate.lit.js +2 -2
- package/dist/generated/templates/TabInOverflowTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js +1 -1
- package/dist/generated/templates/TabNavigationPopoverTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TabNavigationTemplate.lit.js +2 -2
- package/dist/generated/templates/TabNavigationTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TagTemplate.lit.js +9 -3
- package/dist/generated/templates/TagTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TextAreaTemplate.lit.js +1 -1
- package/dist/generated/templates/TextAreaTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TextFieldTemplate.lit.js +2 -2
- package/dist/generated/templates/TextFieldTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TooltipTemplate.lit.js +1 -1
- package/dist/generated/templates/TooltipTemplate.lit.js.map +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/Avatar.css.js +1 -1
- package/dist/generated/themes/Avatar.css.js.map +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/Divider.css.js +1 -1
- package/dist/generated/themes/Divider.css.js.map +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.js +1 -1
- package/dist/generated/themes/HeroBanner.css.js.map +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/Modal.css.js +1 -1
- package/dist/generated/themes/Modal.css.js.map +1 -1
- package/dist/generated/themes/Pagination.css.js +1 -1
- package/dist/generated/themes/Pagination.css.js.map +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/RatingBar.css.js +9 -0
- package/dist/generated/themes/RatingBar.css.js.map +1 -0
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/Review.css.d.ts +3 -0
- package/dist/generated/themes/Review.css.js +9 -0
- package/dist/generated/themes/Review.css.js.map +1 -0
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.js +1 -1
- package/dist/generated/themes/SecondaryNavigation.css.js.map +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/SelectBox.css.js +1 -1
- package/dist/generated/themes/SelectBox.css.js.map +1 -1
- package/dist/generated/themes/Slider.css.js +1 -1
- package/dist/generated/themes/Slider.css.js.map +1 -1
- package/dist/generated/themes/StepInput.css.js +1 -1
- package/dist/generated/themes/StepInput.css.js.map +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/Tag.css.js +1 -1
- package/dist/generated/themes/Tag.css.js.map +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/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.js.map +1 -1
- package/dist/i18n/messagebundle.properties +28 -4
- package/dist/i18n/messagebundle_en.properties +12 -4
- package/dist/vscode.html-custom-data.json +112 -17
- package/dist/web-types.json +215 -33
- package/package.json +8 -8
- package/src/AccordionItem.hbs +1 -4
- package/src/AccordionItem.ts +5 -4
- package/src/Avatar.ts +24 -1
- package/src/AvatarGroup.ts +135 -0
- package/src/DatePicker.hbs +0 -1
- package/src/Dropdown.hbs +5 -2
- package/src/Dropdown.ts +24 -3
- package/src/FilterMenu.hbs +3 -0
- package/src/FilterMenu.ts +10 -2
- package/src/Footer.hbs +12 -37
- package/src/Footer.ts +64 -51
- package/src/HeroBanner.hbs +18 -14
- package/src/HeroBanner.ts +3 -0
- package/src/MastheadItem.hbs +3 -3
- package/src/MastheadItem.ts +10 -4
- package/src/MastheadShell.hbs +4 -0
- package/src/MastheadShell.ts +18 -0
- package/src/MessageStrip.ts +1 -1
- package/src/Pagination.hbs +4 -2
- package/src/Pagination.ts +19 -4
- package/src/PasswordField.hbs +6 -17
- package/src/PasswordField.ts +31 -23
- package/src/PhoneNumberField.hbs +8 -3
- package/src/PhoneNumberField.ts +11 -1
- package/src/RatingBar.hbs +11 -0
- package/src/RatingBar.ts +113 -0
- package/src/Review.hbs +44 -0
- package/src/Review.ts +140 -0
- package/src/Search.hbs +19 -14
- package/src/Search.ts +72 -2
- package/src/SearchSuggestions.hbs +1 -0
- package/src/SearchableListBase.ts +1 -1
- package/src/SecondaryNavigation.hbs +5 -1
- package/src/SecondaryNavigation.ts +67 -49
- package/src/SecondaryNavigationItem.hbs +3 -2
- package/src/SecondaryNavigationItem.ts +15 -5
- package/src/SecondaryNavigationItemBase.ts +41 -3
- package/src/SecondaryNavigationSubItem.hbs +13 -10
- package/src/SecondaryNavigationSubItem.ts +6 -2
- package/src/SelectBox.hbs +75 -76
- package/src/SelectBox.ts +2 -0
- package/src/StatusBadge.ts +2 -2
- package/src/Switch.hbs +3 -3
- package/src/Switch.ts +4 -0
- package/src/Tab.ts +10 -0
- package/src/TabInOverflow.hbs +3 -2
- package/src/TabNavigation.hbs +12 -10
- package/src/TabNavigation.ts +92 -116
- package/src/TabNavigationPopover.hbs +1 -0
- package/src/Tag.hbs +60 -26
- package/src/Tag.ts +54 -34
- package/src/TextArea.hbs +3 -4
- package/src/TextArea.ts +3 -0
- package/src/TextField.hbs +40 -36
- package/src/TextField.ts +24 -0
- package/src/Tooltip.hbs +2 -2
- package/src/Tooltip.ts +4 -4
- package/src/data/CountryListISO3166.ts +162 -162
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/AccordionItemTemplate.lit.ts +1 -1
- package/src/generated/templates/DatePickerTemplate.lit.ts +1 -1
- package/src/generated/templates/DropdownTemplate.lit.ts +2 -2
- package/src/generated/templates/FilterMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/FooterTemplate.lit.ts +26 -28
- package/src/generated/templates/HeroBannerTemplate.lit.ts +9 -8
- package/src/generated/templates/MastheadItemTemplate.lit.ts +3 -3
- package/src/generated/templates/MastheadShellTemplate.lit.ts +2 -2
- package/src/generated/templates/PaginationTemplate.lit.ts +1 -1
- package/src/generated/templates/PasswordFieldTemplate.lit.ts +1 -2
- package/src/generated/templates/PhoneNumberFieldTemplate.lit.ts +3 -3
- package/src/generated/templates/RatingBarTemplate.lit.ts +11 -0
- package/src/generated/templates/ReviewTemplate.lit.ts +15 -0
- package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +1 -1
- package/src/generated/templates/SearchTemplate.lit.ts +7 -7
- package/src/generated/templates/SecondaryNavigationItemTemplate.lit.ts +3 -3
- package/src/generated/templates/SecondaryNavigationSubItemTemplate.lit.ts +5 -4
- package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +3 -3
- package/src/generated/templates/SelectBoxTemplate.lit.ts +2 -2
- package/src/generated/templates/SwitchTemplate.lit.ts +2 -2
- package/src/generated/templates/TabInOverflowTemplate.lit.ts +2 -2
- package/src/generated/templates/TabNavigationPopoverTemplate.lit.ts +1 -1
- package/src/generated/templates/TabNavigationTemplate.lit.ts +2 -2
- package/src/generated/templates/TagTemplate.lit.ts +9 -3
- package/src/generated/templates/TextAreaTemplate.lit.ts +1 -1
- package/src/generated/templates/TextFieldTemplate.lit.ts +2 -2
- package/src/generated/templates/TooltipTemplate.lit.ts +1 -1
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/Avatar.css.ts +1 -1
- package/src/generated/themes/Badge.css.ts +1 -1
- package/src/generated/themes/Divider.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/MastheadShell.css.ts +1 -1
- package/src/generated/themes/Modal.css.ts +1 -1
- package/src/generated/themes/Pagination.css.ts +1 -1
- package/src/generated/themes/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/RatingBar.css.ts +13 -0
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Review.css.ts +13 -0
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigation.css.ts +1 -1
- package/src/generated/themes/SecondaryNavigationItem.css.ts +1 -1
- package/src/generated/themes/SelectBox.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/StepInput.css.ts +1 -1
- package/src/generated/themes/TabNavigation.css.ts +1 -1
- package/src/generated/themes/Tag.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/generated/themes/overrides/@ui5/webcomponents/sap_glow/parameters-bundle.css.ts +1 -1
- package/src/i18n/messagebundle.properties +28 -4
- package/src/i18n/messagebundle_en.properties +12 -4
- package/src/themes/AccordionItem.css +6 -4
- package/src/themes/Avatar.css +24 -7
- package/src/themes/Badge.css +1 -1
- package/src/themes/Divider.css +6 -2
- package/src/themes/Footer.css +93 -168
- package/src/themes/HeroBanner.css +52 -24
- package/src/themes/MastheadShell.css +25 -29
- package/src/themes/Modal.css +6 -0
- package/src/themes/Pagination.css +7 -0
- package/src/themes/PhoneNumberField.css +1 -0
- package/src/themes/RatingBar.css +52 -0
- package/src/themes/Review.css +196 -0
- package/src/themes/Search.css +37 -25
- package/src/themes/SecondaryNavigation.css +33 -4
- package/src/themes/SecondaryNavigationItem.css +3 -2
- package/src/themes/SelectBox.css +17 -24
- package/src/themes/StepInput.css +5 -2
- package/src/themes/TabNavigation.css +7 -1
- package/src/themes/Tag.css +180 -148
- package/src/themes/TextField.css +75 -55
- package/dist/assets/bundle.esm-f65ae7da.js +0 -315
- package/dist/assets/messagebundle_en-7249941b.js +0 -1
- package/dist/assets/parameters-bundle.css-76ef62fa.js +0 -2
- package/dist/css/themes/PasswordField.css +0 -1
- package/dist/generated/themes/PasswordField.css.js +0 -9
- package/dist/generated/themes/PasswordField.css.js.map +0 -1
- package/src/generated/themes/PasswordField.css.ts +0 -13
- package/src/themes/PasswordField.css +0 -29
- /package/dist/generated/themes/{PasswordField.css.d.ts → RatingBar.css.d.ts} +0 -0
package/src/Review.hbs
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{{#if isEmpty}}
|
|
2
|
+
<div class="udex-review__empty-container">
|
|
3
|
+
<slot class="udex-review__default-text" name="defaultText"></slot>
|
|
4
|
+
<slot name="reviewButton"></slot>
|
|
5
|
+
</div>
|
|
6
|
+
{{else}}
|
|
7
|
+
{{#if withoutBreakdown}}
|
|
8
|
+
<div class="udex-review__container-without-breakdown">
|
|
9
|
+
{{> noBreakdown}}
|
|
10
|
+
</div>
|
|
11
|
+
{{else}}
|
|
12
|
+
<div class="udex-review__container">
|
|
13
|
+
<div class="udex-review__content">
|
|
14
|
+
<div class="udex-review__rating-info">
|
|
15
|
+
<div aria-level="2" role="heading" aria-hidden="true" class="udex-review__rating">{{validatedRating}}</div>
|
|
16
|
+
<ui5-icon aria-labelledby="ratingDescription" role="img" name="favorite" class="udex-review__icon"></ui5-icon>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="udex-review__reviews-text">{{reviewsText}}</div>
|
|
19
|
+
<slot name="reviewButton"></slot>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="udex-review__additional-content">
|
|
22
|
+
{{#each validatedRatingBars}}
|
|
23
|
+
<slot name="{{this._individualSlot}}"></slot>
|
|
24
|
+
{{/each}}
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
<span id="ratingDescription" class="hidden-text">{{_ratingDescription}}</span>
|
|
28
|
+
{{/if}}
|
|
29
|
+
{{/if}}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
{{#*inline "noBreakdown"}}
|
|
33
|
+
<div class="udex-review__content-without-breakdown">
|
|
34
|
+
<div aria-level="2" role="heading" aria-hidden="true" class="udex-review__rating">{{validatedRating}}</div>
|
|
35
|
+
<div class="udex-review__rating-info-without-breakdown">
|
|
36
|
+
<udex-rating-indicator readonly value="{{validatedRating}}" max="{{_maxRating}}"></udex-rating-indicator>
|
|
37
|
+
<div class="udex-review__reviews-text">{{reviewsText}}</div>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div class="udex-review__additional-content-without-breakdown">
|
|
41
|
+
<slot class="udex-review__default-text" name="defaultText"></slot>
|
|
42
|
+
<slot name="reviewButton"></slot>
|
|
43
|
+
</div>
|
|
44
|
+
{{/inline}}
|
package/src/Review.ts
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
|
+
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
6
|
+
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
7
|
+
import I18nBundle, { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
8
|
+
import Integer from "@ui5/webcomponents-base/dist/types/Integer.js";
|
|
9
|
+
import Float from "@ui5/webcomponents-base/dist/types/Float.js";
|
|
10
|
+
import { REVIEWS, STARS } from "./generated/i18n/i18n-defaults.js";
|
|
11
|
+
import UDExRatingBar from "./RatingBar.js";
|
|
12
|
+
import UDExRatingIndicator from "./RatingIndicator.js";
|
|
13
|
+
import UDExButton from "./Button.js";
|
|
14
|
+
import "@ui5/webcomponents-icons/dist/favorite.js";
|
|
15
|
+
import ReviewTemplate from "./generated/templates/ReviewTemplate.lit.js";
|
|
16
|
+
|
|
17
|
+
// Styles
|
|
18
|
+
import ReviewCss from "./generated/themes/Review.css.js";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @class
|
|
22
|
+
*
|
|
23
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
24
|
+
*
|
|
25
|
+
*
|
|
26
|
+
* <h3>Usage</h3>
|
|
27
|
+
*
|
|
28
|
+
* For the <code>udex-review</code>
|
|
29
|
+
* <h3>ES6 Module Import</h3>
|
|
30
|
+
*
|
|
31
|
+
* <code>import "@udex/web-components/dist/Review.js";</code>
|
|
32
|
+
*
|
|
33
|
+
* @constructor
|
|
34
|
+
* @extends UI5Element
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
@customElement({
|
|
38
|
+
tag: "udex-review",
|
|
39
|
+
renderer: litRender,
|
|
40
|
+
styles: ReviewCss,
|
|
41
|
+
template: ReviewTemplate,
|
|
42
|
+
dependencies: [UDExRatingBar, UDExRatingIndicator, Icon],
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
class UDExReview extends UI5Element {
|
|
46
|
+
/**
|
|
47
|
+
* Defines the rating.
|
|
48
|
+
*
|
|
49
|
+
* @default 0
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
@property({ type: Number, defaultValue: 0, validator: Float })
|
|
53
|
+
rating!: number;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Defines the total number of reviews.
|
|
57
|
+
*
|
|
58
|
+
* @default 0
|
|
59
|
+
* @public
|
|
60
|
+
*/
|
|
61
|
+
@property({ type: Number, defaultValue: 0, validator: Integer })
|
|
62
|
+
reviews!: number;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Slot for a button for writing a review.
|
|
66
|
+
*
|
|
67
|
+
* @slot
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
@slot({ type: HTMLElement })
|
|
71
|
+
reviewButton!: UDExButton;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Slot for the default text when there are no reviews or rating.
|
|
75
|
+
*
|
|
76
|
+
* @slot
|
|
77
|
+
* @public
|
|
78
|
+
*/
|
|
79
|
+
@slot({ type: HTMLElement })
|
|
80
|
+
defaultText!: HTMLElement;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Slot for rating bars.
|
|
84
|
+
*
|
|
85
|
+
* @slot
|
|
86
|
+
* @public
|
|
87
|
+
*/
|
|
88
|
+
@slot({ type: HTMLElement, "default": true, individualSlots: true })
|
|
89
|
+
bars!: Array<UDExRatingBar>;
|
|
90
|
+
|
|
91
|
+
static i18nBundle: I18nBundle;
|
|
92
|
+
_minRating: number = 0;
|
|
93
|
+
_maxRating: number = 5;
|
|
94
|
+
_maxRatingBars: number = 5;
|
|
95
|
+
|
|
96
|
+
static async onDefine() {
|
|
97
|
+
UDExReview.i18nBundle = await getI18nBundle("@ui5/webcomponents");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
get reviewsText(): string {
|
|
101
|
+
return `${this.reviews} ${UDExReview.i18nBundle.getText(REVIEWS)}`;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
get withoutBreakdown(): boolean {
|
|
105
|
+
return this.bars.length === 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
get isEmpty(): boolean {
|
|
109
|
+
return this.reviews === 0 && this.rating === 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
get validatedRating(): number {
|
|
113
|
+
if (this.rating > this._maxRating) {
|
|
114
|
+
console.warn("UDEx Review: The rating shouldn't be more than 5.");
|
|
115
|
+
return this._maxRating;
|
|
116
|
+
}
|
|
117
|
+
if (this.rating < this._minRating) {
|
|
118
|
+
console.warn("UDEx Review: The rating shouldn't be less than 0.");
|
|
119
|
+
return this._minRating;
|
|
120
|
+
}
|
|
121
|
+
return this.rating;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
get validatedRatingBars(): Array<UDExRatingBar> {
|
|
125
|
+
if (this.bars.length > this._maxRatingBars) {
|
|
126
|
+
console.warn("UDEx Review: There shouldn't be more than 5 RatingBars.");
|
|
127
|
+
return this.bars.slice(-this._maxRatingBars);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return this.bars;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
get _ratingDescription(): string {
|
|
134
|
+
return `${this.validatedRating} ${UDExRatingBar.i18nBundle.getText(STARS)}`;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
UDExReview.define();
|
|
139
|
+
|
|
140
|
+
export default UDExReview;
|
package/src/Search.hbs
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
{{#if isShowSearchHomePrefix}}
|
|
3
3
|
<div class="udex-search__prefix">
|
|
4
4
|
<button type="button"
|
|
5
|
+
role="combobox"
|
|
6
|
+
aria-expanded="{{_prefixDropdownExpanded}}"
|
|
5
7
|
aria-haspopup="true"
|
|
6
8
|
aria-controls="udex-search-prefix"
|
|
7
9
|
class="udex-search__prefix-button"
|
|
@@ -14,7 +16,7 @@
|
|
|
14
16
|
class="udex-search__prefix-popover"
|
|
15
17
|
hide-arrow
|
|
16
18
|
placement-type="Bottom"
|
|
17
|
-
|
|
19
|
+
horizontal-align="Left"
|
|
18
20
|
style="{{prefixPopoverStyles}}"
|
|
19
21
|
@after-close="{{handleAfterClosePrefixPopover}}">
|
|
20
22
|
<slot></slot>
|
|
@@ -29,10 +31,8 @@
|
|
|
29
31
|
name="search"
|
|
30
32
|
class="udex-search__field"
|
|
31
33
|
autocomplete="off"
|
|
32
|
-
|
|
33
|
-
aria-
|
|
34
|
-
aria-expanded="false"
|
|
35
|
-
aria-haspopup="{{showSuggestedPopover}}"
|
|
34
|
+
aria-autocomplete="list"
|
|
35
|
+
aria-haspopup="{{getAriaHasPopup}}"
|
|
36
36
|
aria-label="Search"
|
|
37
37
|
placeholder="{{label}}"
|
|
38
38
|
.value="{{value}}"
|
|
@@ -55,11 +55,9 @@
|
|
|
55
55
|
name="search"
|
|
56
56
|
class="udex-search__field"
|
|
57
57
|
autocomplete="off"
|
|
58
|
-
|
|
58
|
+
aria-autocomplete="list"
|
|
59
59
|
aria-label="{{accInfo.ariaLabel}}"
|
|
60
|
-
aria-
|
|
61
|
-
aria-expanded="false"
|
|
62
|
-
aria-haspopup="{{showSuggestedPopover}}"
|
|
60
|
+
aria-haspopup="{{getAriaHasPopup}}"
|
|
63
61
|
.value="{{value}}"
|
|
64
62
|
@input="{{handleSearchChange}}"
|
|
65
63
|
@keydown="{{handleKeyDown}}"
|
|
@@ -75,11 +73,17 @@
|
|
|
75
73
|
id="reset-button"
|
|
76
74
|
class="udex-search__button udex-search__reset-button"
|
|
77
75
|
design="Default"
|
|
78
|
-
|
|
79
|
-
tooltip="Reset Button"
|
|
76
|
+
tooltip="{{tooltipInfo.tooltipResetButton}}"
|
|
80
77
|
@click="{{onReset}}"
|
|
81
78
|
@keydown="{{handleKeyDownReset}}"
|
|
82
|
-
|
|
79
|
+
>
|
|
80
|
+
<ui5-icon
|
|
81
|
+
class="udex-search__button-icon"
|
|
82
|
+
accessible-name="{{accInfo.accessibleNameResetIcon}}"
|
|
83
|
+
accessible-role="presentation"
|
|
84
|
+
name="decline">
|
|
85
|
+
</ui5-icon>
|
|
86
|
+
</ui5-button>
|
|
83
87
|
{{/if}}
|
|
84
88
|
{{#if isVoiceButton}}
|
|
85
89
|
<ui5-button
|
|
@@ -87,7 +91,7 @@
|
|
|
87
91
|
class="udex-search__button udex-search__voice-button {{voiceActiveClass}}"
|
|
88
92
|
design="Default"
|
|
89
93
|
icon="microphone"
|
|
90
|
-
tooltip="
|
|
94
|
+
tooltip="{{tooltipInfo.tooltipVoiceButton}}"
|
|
91
95
|
@click="{{onVoice}}"
|
|
92
96
|
></ui5-button>
|
|
93
97
|
{{/if}}
|
|
@@ -95,6 +99,7 @@
|
|
|
95
99
|
{{#if nonInteractiveSubmitButton}}
|
|
96
100
|
<ui5-icon
|
|
97
101
|
class="udex-search__icon"
|
|
102
|
+
accessible-name="{{accInfo.accessibleNameSearchIcon}}"
|
|
98
103
|
name="search">
|
|
99
104
|
</ui5-icon>
|
|
100
105
|
{{else}}
|
|
@@ -103,7 +108,7 @@
|
|
|
103
108
|
class="udex-search__button udex-search__submit-button {{searchButtonActiveClass}}"
|
|
104
109
|
design="Default"
|
|
105
110
|
icon="search"
|
|
106
|
-
tooltip="
|
|
111
|
+
tooltip="{{tooltipInfo.tooltipSubmitButton}}"
|
|
107
112
|
@click="{{onSubmit}}"
|
|
108
113
|
></ui5-button>
|
|
109
114
|
{{/if}}
|
package/src/Search.ts
CHANGED
|
@@ -30,6 +30,11 @@ import {
|
|
|
30
30
|
RECOMMENDED_TEXT,
|
|
31
31
|
AVAILABLE_VALUES,
|
|
32
32
|
NO_MATCHES_FOUND,
|
|
33
|
+
ACCESSIBLE_NAME_RESET_ICON,
|
|
34
|
+
ACCESSIBLE_NAME_SEARCH_ICON,
|
|
35
|
+
TOOLTIP_RESET_BUTTON,
|
|
36
|
+
TOOLTIP_VOICE_BUTTON,
|
|
37
|
+
TOOLTIP_SUBMIT_BUTTON,
|
|
33
38
|
} from "./generated/i18n/i18n-defaults.js";
|
|
34
39
|
import type SearchInputSuggestion from "./features/SearchSuggestionsPopover.js";
|
|
35
40
|
|
|
@@ -316,6 +321,51 @@ class UDExSearch extends UI5Element {
|
|
|
316
321
|
@property()
|
|
317
322
|
accessibleName!: string;
|
|
318
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Defines the accessible ARIA name of the reset icon.
|
|
326
|
+
*
|
|
327
|
+
* @default "Clear"
|
|
328
|
+
* @public
|
|
329
|
+
*/
|
|
330
|
+
@property({ type: String })
|
|
331
|
+
accessibleNameResetIcon!: string;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Defines the accessible ARIA name of the search icon (applied just when "nonInteractiveSubmitButton" is active).
|
|
335
|
+
*
|
|
336
|
+
* @default "Search"
|
|
337
|
+
* @public
|
|
338
|
+
*/
|
|
339
|
+
@property({ type: String })
|
|
340
|
+
accessibleNameSearchIcon!: string;
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Defines the tooltip of the clear button.
|
|
344
|
+
*
|
|
345
|
+
* @default "Clear"
|
|
346
|
+
* @public
|
|
347
|
+
*/
|
|
348
|
+
@property({ type: String })
|
|
349
|
+
tooltipResetButton!: string;
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Defines the tooltip of the voice button.
|
|
353
|
+
*
|
|
354
|
+
* @default "Voice"
|
|
355
|
+
* @public
|
|
356
|
+
*/
|
|
357
|
+
@property({ type: String })
|
|
358
|
+
tooltipVoiceButton!: string;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Defines the tooltip of the submit button.
|
|
362
|
+
*
|
|
363
|
+
* @default "Search"
|
|
364
|
+
* @public
|
|
365
|
+
*/
|
|
366
|
+
@property({ type: String })
|
|
367
|
+
tooltipSubmitButton!: string;
|
|
368
|
+
|
|
319
369
|
/**
|
|
320
370
|
* Defines the text if the suggestion list doesn't return results.
|
|
321
371
|
*
|
|
@@ -423,6 +473,14 @@ class UDExSearch extends UI5Element {
|
|
|
423
473
|
@slot({ type: HTMLElement, "default": true })
|
|
424
474
|
dropdownPrefix!: Array<List>;
|
|
425
475
|
|
|
476
|
+
/**
|
|
477
|
+
* Defines the open button icon
|
|
478
|
+
*
|
|
479
|
+
* @private
|
|
480
|
+
*/
|
|
481
|
+
@property({ type: Boolean, noAttribute: true })
|
|
482
|
+
_prefixDropdownExpanded!: boolean;
|
|
483
|
+
|
|
426
484
|
constructor() {
|
|
427
485
|
super();
|
|
428
486
|
this._handleResizeBound = this._handleResize.bind(this);
|
|
@@ -648,6 +706,7 @@ class UDExSearch extends UI5Element {
|
|
|
648
706
|
const dropdown = this.getPrefixPopover();
|
|
649
707
|
const button = this.getPrefixButton();
|
|
650
708
|
|
|
709
|
+
this._prefixDropdownExpanded = true;
|
|
651
710
|
dropdown.showAt(this.getPrefixButton());
|
|
652
711
|
dropdown.style.width = `${button.offsetWidth + 1}px`;
|
|
653
712
|
button.classList.add("udex-search__prefix-button--active");
|
|
@@ -669,6 +728,7 @@ class UDExSearch extends UI5Element {
|
|
|
669
728
|
const dropdown = this.getPrefixPopover();
|
|
670
729
|
|
|
671
730
|
dropdown.close();
|
|
731
|
+
this._prefixDropdownExpanded = false;
|
|
672
732
|
this.handleAfterClosePrefixPopover();
|
|
673
733
|
}
|
|
674
734
|
|
|
@@ -1039,8 +1099,8 @@ class UDExSearch extends UI5Element {
|
|
|
1039
1099
|
return !!(this.suggestedList?.length || this.recommendedList?.length);
|
|
1040
1100
|
}
|
|
1041
1101
|
|
|
1042
|
-
get
|
|
1043
|
-
return this.
|
|
1102
|
+
get getAriaHasPopup(): string {
|
|
1103
|
+
return this.showSuggestedPopover ? "dialog" : "false";
|
|
1044
1104
|
}
|
|
1045
1105
|
|
|
1046
1106
|
get getSuggestionsPopoverId(): string {
|
|
@@ -1098,6 +1158,16 @@ class UDExSearch extends UI5Element {
|
|
|
1098
1158
|
get accInfo() {
|
|
1099
1159
|
return {
|
|
1100
1160
|
"ariaLabel": this.accessibleName || undefined,
|
|
1161
|
+
"accessibleNameResetIcon": this.accessibleNameResetIcon || UDExSearch.i18nBundle.getText(ACCESSIBLE_NAME_RESET_ICON) as string,
|
|
1162
|
+
"accessibleNameSearchIcon": this.accessibleNameSearchIcon || UDExSearch.i18nBundle.getText(ACCESSIBLE_NAME_SEARCH_ICON) as string,
|
|
1163
|
+
};
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
get tooltipInfo() {
|
|
1167
|
+
return {
|
|
1168
|
+
"tooltipResetButton": this.tooltipResetButton || UDExSearch.i18nBundle.getText(TOOLTIP_RESET_BUTTON) as string,
|
|
1169
|
+
"tooltipVoiceButton": this.tooltipVoiceButton || UDExSearch.i18nBundle.getText(TOOLTIP_VOICE_BUTTON) as string,
|
|
1170
|
+
"tooltipSubmitButton": this.tooltipSubmitButton || UDExSearch.i18nBundle.getText(TOOLTIP_SUBMIT_BUTTON) as string,
|
|
1101
1171
|
};
|
|
1102
1172
|
}
|
|
1103
1173
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
style="{{popoverStyles}}"
|
|
8
8
|
id="{{getSuggestionsPopoverId}}"
|
|
9
9
|
aria-orientation="vertical"
|
|
10
|
+
accessible-role="Dialog"
|
|
10
11
|
accessible-name="{{suggestionsAccessibleName}}">
|
|
11
12
|
{{#if showNoResultMessage}}
|
|
12
13
|
<span class="udex-search-suggestions__message">{{noResultMessage}}</span>
|
|
@@ -16,7 +16,7 @@ import { NO_MATCHES_FOUND } from "./generated/i18n/i18n-defaults.js";
|
|
|
16
16
|
* @class
|
|
17
17
|
*
|
|
18
18
|
* A class to serve as a foundation
|
|
19
|
-
* for the <code>UDExFilterMenu</code>
|
|
19
|
+
* for the <code>UDExFilterMenu</code> , <code>UDExSelectBox</code> and <code>UDExCountrySelector/code> classes.
|
|
20
20
|
*
|
|
21
21
|
* @constructor
|
|
22
22
|
* @author SAP SE
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="
|
|
1
|
+
<div class="{{rootClass}}">
|
|
2
2
|
{{#if hasBreadcrumbsSlot}}
|
|
3
3
|
<div class="udex-secondary-navigation__breadcrumbs">
|
|
4
4
|
<slot name="breadcrumbs"></slot>
|
|
@@ -22,9 +22,11 @@
|
|
|
22
22
|
role="none"
|
|
23
23
|
class="udex-secondary-navigation__list-item">
|
|
24
24
|
<udex-secondary-navigation-item
|
|
25
|
+
index="{{@index}}"
|
|
25
26
|
?active="{{this.active}}"
|
|
26
27
|
path="{{this.path}}"
|
|
27
28
|
label="{{this.title}}"
|
|
29
|
+
mobile-link-title="{{this.mobileLinkTitle}}"
|
|
28
30
|
target="{{this.target}}"
|
|
29
31
|
.subItems="{{this.items}}"
|
|
30
32
|
@ui5-sub-item-click="{{../handleSubItemClick}}"
|
|
@@ -37,6 +39,7 @@
|
|
|
37
39
|
role="none"
|
|
38
40
|
class="udex-secondary-navigation__list-item">
|
|
39
41
|
<udex-secondary-navigation-item
|
|
42
|
+
index="{{visibleItems.length}}"
|
|
40
43
|
@ui5-sub-item-click="{{../handleSubItemClick}}"
|
|
41
44
|
@ui5-nav-item-click="{{../handleItemClick}}"
|
|
42
45
|
label="{{this.moreButtonText}}"
|
|
@@ -55,6 +58,7 @@
|
|
|
55
58
|
role="button"
|
|
56
59
|
aria-label="{{mobileMenuOpenerAriaLabel}}"
|
|
57
60
|
label="{{title}}"
|
|
61
|
+
mobile-link-title="{{title}}"
|
|
58
62
|
@ui5-sub-item-click="{{handleSubItemClick}}"
|
|
59
63
|
.subItems="{{this.parsedItems}}">
|
|
60
64
|
{{#if hasMobileButtonsSlot}}
|
|
@@ -24,21 +24,15 @@ import SecondaryNavigationTemplate from "./generated/templates/SecondaryNavigati
|
|
|
24
24
|
import SecondaryNavigationCss from "./generated/themes/SecondaryNavigation.css.js";
|
|
25
25
|
|
|
26
26
|
const canvasContentFont: string = "16px / 17.6px '72 Brand Variable'";
|
|
27
|
-
const
|
|
27
|
+
const rootClass = "udex-secondary-navigation__root";
|
|
28
|
+
export const breakpointSizeS: number = 979;
|
|
28
29
|
|
|
29
|
-
export type
|
|
30
|
+
export type ItemClickDetail = {
|
|
30
31
|
originalEvent: Event,
|
|
31
|
-
clickedItem:
|
|
32
|
+
clickedItem: NavItem;
|
|
32
33
|
clickedIndex: number;
|
|
33
34
|
};
|
|
34
35
|
|
|
35
|
-
export type SecondaryNavigationSubItemClickDetail = {
|
|
36
|
-
originalEvent: Event,
|
|
37
|
-
clickedItem: {
|
|
38
|
-
items: Array<NavItem>
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
36
|
/**
|
|
43
37
|
* @class
|
|
44
38
|
*
|
|
@@ -70,13 +64,13 @@ export type SecondaryNavigationSubItemClickDetail = {
|
|
|
70
64
|
* @allowPreventDefault
|
|
71
65
|
* @public
|
|
72
66
|
*/
|
|
73
|
-
@event<
|
|
67
|
+
@event<ItemClickDetail>("item-click", {
|
|
74
68
|
detail: {
|
|
75
69
|
originalEvent: {
|
|
76
70
|
type: Event,
|
|
77
71
|
},
|
|
78
72
|
clickedItem: {
|
|
79
|
-
type:
|
|
73
|
+
type: Object,
|
|
80
74
|
},
|
|
81
75
|
clickedIndex: {
|
|
82
76
|
type: Integer,
|
|
@@ -84,23 +78,6 @@ export type SecondaryNavigationSubItemClickDetail = {
|
|
|
84
78
|
},
|
|
85
79
|
})
|
|
86
80
|
|
|
87
|
-
/**
|
|
88
|
-
* Fires when sub item is clicked
|
|
89
|
-
*
|
|
90
|
-
* @allowPreventDefault
|
|
91
|
-
* @public
|
|
92
|
-
*/
|
|
93
|
-
@event<SecondaryNavigationSubItemClickDetail>("sub-item-click", {
|
|
94
|
-
detail: {
|
|
95
|
-
originalEvent: {
|
|
96
|
-
type: Event,
|
|
97
|
-
},
|
|
98
|
-
clickedItem: {
|
|
99
|
-
type: HTMLElement,
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
})
|
|
103
|
-
|
|
104
81
|
class UDExSecondaryNavigation extends UI5Element {
|
|
105
82
|
/**
|
|
106
83
|
* Defines an aria label for the mobile menu opener
|
|
@@ -272,32 +249,42 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
272
249
|
}
|
|
273
250
|
|
|
274
251
|
getItemWidth(item: NavItem): number {
|
|
275
|
-
const
|
|
276
|
-
const context = canvas.getContext("2d")!;
|
|
252
|
+
const context = this.getCanvasContext();
|
|
277
253
|
context.font = canvasContentFont;
|
|
278
254
|
|
|
279
255
|
return Math.ceil(context.measureText(item.title).width);
|
|
280
256
|
}
|
|
281
257
|
|
|
282
258
|
getMoreButtonWidth(): number {
|
|
283
|
-
const
|
|
284
|
-
const context = canvas.getContext("2d")!;
|
|
259
|
+
const context = this.getCanvasContext();
|
|
285
260
|
context.font = canvasContentFont;
|
|
286
261
|
|
|
287
262
|
return Math.ceil(context.measureText(this.moreButtonText).width);
|
|
288
263
|
}
|
|
289
264
|
|
|
265
|
+
getCanvasContext(): CanvasRenderingContext2D {
|
|
266
|
+
const canvas = document.createElement("canvas");
|
|
267
|
+
return canvas.getContext("2d")!;
|
|
268
|
+
}
|
|
269
|
+
|
|
290
270
|
getCurrentIndex(item: UDExSecondaryNavigationItem): number {
|
|
291
271
|
return this.domNavItems.indexOf(item);
|
|
292
272
|
}
|
|
293
273
|
|
|
294
274
|
handleItemClick(e: CustomEvent): void {
|
|
295
275
|
const clickedItem = e.detail.item as UDExSecondaryNavigationItem;
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
276
|
+
const {
|
|
277
|
+
path, target, title, active, subItems, _id, mobileLinkTitle,
|
|
278
|
+
} = clickedItem;
|
|
279
|
+
|
|
280
|
+
const prevented = !this.fireEventItemClick(e, {
|
|
281
|
+
path,
|
|
282
|
+
target,
|
|
283
|
+
title,
|
|
284
|
+
active,
|
|
285
|
+
mobileLinkTitle,
|
|
286
|
+
items: subItems,
|
|
287
|
+
});
|
|
301
288
|
|
|
302
289
|
if (prevented) {
|
|
303
290
|
e.preventDefault();
|
|
@@ -305,9 +292,9 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
305
292
|
}
|
|
306
293
|
|
|
307
294
|
this._clickedNavItem = clickedItem;
|
|
308
|
-
this.closePrevDropdown(
|
|
295
|
+
this.closePrevDropdown(_id);
|
|
309
296
|
|
|
310
|
-
if (!
|
|
297
|
+
if (!subItems.length) {
|
|
311
298
|
this.setActiveItem(this.parsedItems, clickedItem);
|
|
312
299
|
}
|
|
313
300
|
}
|
|
@@ -315,10 +302,7 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
315
302
|
handleSubItemClick(e: CustomEvent): void {
|
|
316
303
|
const item = e.detail.item as UDExSecondaryNavigationSubItem;
|
|
317
304
|
const { items } = item as NavItem;
|
|
318
|
-
const prevented = !this.
|
|
319
|
-
originalEvent: e,
|
|
320
|
-
clickedItem: item,
|
|
321
|
-
}, true);
|
|
305
|
+
const prevented = !this.fireEventItemClick(e, item);
|
|
322
306
|
|
|
323
307
|
if (prevented) {
|
|
324
308
|
e.preventDefault();
|
|
@@ -335,10 +319,30 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
335
319
|
}
|
|
336
320
|
}
|
|
337
321
|
|
|
322
|
+
fireEventItemClick(
|
|
323
|
+
e: CustomEvent,
|
|
324
|
+
{
|
|
325
|
+
items, target, path, title, active, mobileLinkTitle,
|
|
326
|
+
}: NavItem,
|
|
327
|
+
): boolean {
|
|
328
|
+
return this.fireEvent("item-click", {
|
|
329
|
+
originalEvent: e,
|
|
330
|
+
clickedItem: {
|
|
331
|
+
mobileLinkTitle: mobileLinkTitle || "",
|
|
332
|
+
path: path || "",
|
|
333
|
+
active: active || false,
|
|
334
|
+
items: items || [],
|
|
335
|
+
target,
|
|
336
|
+
title,
|
|
337
|
+
},
|
|
338
|
+
clickedIndex: e.detail.index,
|
|
339
|
+
}, true);
|
|
340
|
+
}
|
|
341
|
+
|
|
338
342
|
setActiveItem(navItems: Array<NavItem>, clickedItem: UDExSecondaryNavigationItemBase): void {
|
|
339
343
|
const updateNav = (items: Array<NavItem>, { title, path }: UDExSecondaryNavigationItemBase) => {
|
|
340
344
|
items.forEach(item => {
|
|
341
|
-
if (item.title === title && item.path === path) {
|
|
345
|
+
if (item.title === title && (item.path === path || !item.path)) {
|
|
342
346
|
item.active = true;
|
|
343
347
|
return;
|
|
344
348
|
}
|
|
@@ -357,17 +361,27 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
357
361
|
handleOutsideClick(): void {
|
|
358
362
|
document.addEventListener("click", (e: MouseEvent) => {
|
|
359
363
|
if (this.isMobileScreen && e.target !== this) {
|
|
360
|
-
this.
|
|
364
|
+
this.closeMobileDropdown();
|
|
361
365
|
return;
|
|
362
366
|
}
|
|
363
367
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
this._clickedNavItem.closeDropdown();
|
|
368
|
+
if (this.isDesktopScreen) {
|
|
369
|
+
this.handleDesktopDropdown(e);
|
|
367
370
|
}
|
|
368
371
|
});
|
|
369
372
|
}
|
|
370
373
|
|
|
374
|
+
closeMobileDropdown(): void {
|
|
375
|
+
this.mobileNav?.closeDropdown();
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
handleDesktopDropdown(e: MouseEvent): void {
|
|
379
|
+
const isClickedNavItem = e.composedPath().includes(this._clickedNavItem);
|
|
380
|
+
if (!isClickedNavItem && this._clickedNavItem) {
|
|
381
|
+
this._clickedNavItem.closeDropdown();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
371
385
|
closePrevDropdown(clickedItemId: string): void {
|
|
372
386
|
this.domNavItems.forEach(item => {
|
|
373
387
|
if (clickedItemId !== item._id) {
|
|
@@ -417,6 +431,10 @@ class UDExSecondaryNavigation extends UI5Element {
|
|
|
417
431
|
return !!this.getSlottedNodes("breadcrumbs").length && this.isDesktopScreen;
|
|
418
432
|
}
|
|
419
433
|
|
|
434
|
+
get rootClass(): string {
|
|
435
|
+
return `${rootClass} ${this.hasBreadcrumbsSlot ? "" : `${rootClass}_centered`}`.trim();
|
|
436
|
+
}
|
|
437
|
+
|
|
420
438
|
get hasDesktopButtonsSlot(): boolean {
|
|
421
439
|
return this.hasButtons && this.isDesktopScreen;
|
|
422
440
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
target="{{target}}"
|
|
8
8
|
@keydown="{{handleItemLinkKeyDown}}"
|
|
9
9
|
@click="{{onItemClick}}">
|
|
10
|
-
{{
|
|
10
|
+
{{itemLabel}}
|
|
11
11
|
</a>
|
|
12
12
|
{{else}}
|
|
13
13
|
<button
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
@keydown="{{handleItemButtonKeyDown}}"
|
|
21
21
|
@click="{{onItemClick}}">
|
|
22
22
|
<span class="udex-secondary-navigation__item-text-wrap">
|
|
23
|
-
{{
|
|
23
|
+
{{itemLabel}}
|
|
24
24
|
{{#if _subTitle}}
|
|
25
25
|
<span
|
|
26
26
|
class="udex-secondary-navigation__item-sub-title">
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
@ui5-back-item-click="{{../onBackClick}}"
|
|
50
50
|
is-back="{{this.isBack}}"
|
|
51
51
|
label="{{this.title}}"
|
|
52
|
+
mobile-link-title="{{this.mobileLinkTitle}}"
|
|
52
53
|
.nestedItems="{{this.items}}"
|
|
53
54
|
path="{{this.path}}"
|
|
54
55
|
target="{{this.target}}"
|