@sapudex/web-components 2.9.0 → 2.10.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 +1 -0
- package/cypress/fixtures/footer-links.ts +32 -33
- package/cypress/specs/CountrySelector.cy.tsx +5 -2
- package/cypress/specs/FilterMenu.cy.tsx +884 -0
- package/cypress/specs/Footer.cy.tsx +10 -11
- package/cypress/specs/SocialMediaButton.cy.tsx +44 -0
- package/cypress/specs/Table.cy.tsx +8 -2
- package/cypress/specs/TextField.cy.tsx +11 -4
- package/cypress/support/component-imports.instrumented.ts +11 -1
- package/cypress/support/component-imports.src.ts +12 -2
- package/dist/Assets.d.ts +1 -0
- package/dist/Assets.js +1 -0
- package/dist/Assets.js.map +1 -1
- package/dist/CountrySelector.d.ts +2 -2
- package/dist/CountrySelector.js +6 -3
- package/dist/CountrySelector.js.map +1 -1
- package/dist/DatePicker.js +2 -2
- package/dist/DatePicker.js.map +1 -1
- package/dist/FilterMenu.d.ts +13 -2
- package/dist/FilterMenu.js +59 -13
- package/dist/FilterMenu.js.map +1 -1
- package/dist/Footer.d.ts +5 -3
- package/dist/Footer.js +3 -5
- package/dist/Footer.js.map +1 -1
- package/dist/MastheadItem.d.ts +12 -0
- package/dist/MastheadItem.js +6 -0
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadShell.d.ts +13 -3
- package/dist/MastheadShell.js +17 -4
- package/dist/MastheadShell.js.map +1 -1
- package/dist/SelectBox.d.ts +0 -1
- package/dist/SelectBox.js +2 -2
- package/dist/SelectBox.js.map +1 -1
- package/dist/SocialMediaButton.d.ts +73 -0
- package/dist/SocialMediaButton.js +135 -0
- package/dist/SocialMediaButton.js.map +1 -0
- package/dist/SocialMediaButtonTemplate.d.ts +2 -0
- package/dist/SocialMediaButtonTemplate.js +6 -0
- package/dist/SocialMediaButtonTemplate.js.map +1 -0
- package/dist/StepInput.d.ts +2 -1
- package/dist/StepInput.js +6 -0
- package/dist/StepInput.js.map +1 -1
- package/dist/StepInputTemplate.js +1 -1
- package/dist/StepInputTemplate.js.map +1 -1
- package/dist/TableRow.d.ts +11 -0
- package/dist/TableRow.js +16 -0
- package/dist/TableRow.js.map +1 -1
- package/dist/TextArea.d.ts +3 -8
- package/dist/TextArea.js +12 -5
- package/dist/TextArea.js.map +1 -1
- package/dist/TextField.d.ts +20 -11
- package/dist/TextField.js +44 -31
- package/dist/TextField.js.map +1 -1
- package/dist/assets/{InputSuggestions-BmjyLzkP.js → InputSuggestions-xcV7PZDf.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-CDt3iORy.js → ListItemStandardExpandableTextTemplate-RYCr4pVL.js} +1 -1
- package/dist/assets/ar-CUjm9SSI.js +1 -0
- package/dist/assets/ar_EG-DQlFzN6x.js +1 -0
- package/dist/assets/ar_SA-lp21-ovF.js +1 -0
- package/dist/assets/bg-BMgSEqKu.js +1 -0
- package/dist/assets/{bundle.esm-Dz11sAJe.js → bundle.esm-bg-64miJ.js} +208 -207
- package/dist/assets/ca-BEgqToWu.js +1 -0
- package/dist/assets/cnr-IJYa9RjY.js +1 -0
- package/dist/assets/cs-DcM44PeB.js +1 -0
- package/dist/assets/da-D81rJc1N.js +1 -0
- package/dist/assets/de-eQRPkDbn.js +1 -0
- package/dist/assets/de_AT-Ag3CVI5m.js +1 -0
- package/dist/assets/de_CH-DgRYNg0p.js +1 -0
- package/dist/assets/el-W3XNt9Wl.js +1 -0
- package/dist/assets/el_CY-BfNIiYpU.js +1 -0
- package/dist/assets/en-CrBjXhTl.js +1 -0
- package/dist/assets/en_AU-Br7ytKW4.js +1 -0
- package/dist/assets/en_GB-DfnNoCgD.js +1 -0
- package/dist/assets/en_HK-Cyj9DPsW.js +1 -0
- package/dist/assets/en_IE-B5FpEUby.js +1 -0
- package/dist/assets/en_IN-C3XmKnWe.js +1 -0
- package/dist/assets/en_NZ-COJ5ycaE.js +1 -0
- package/dist/assets/en_PG-BB-Cmgcm.js +1 -0
- package/dist/assets/en_SG-Dfevg5da.js +1 -0
- package/dist/assets/en_ZA-BgOSNy0v.js +1 -0
- package/dist/assets/es-CRcVj7aR.js +1 -0
- package/dist/assets/es_AR-CFf6aWC5.js +1 -0
- package/dist/assets/es_BO-DNFEED1o.js +1 -0
- package/dist/assets/es_CL-DZhLyidG.js +1 -0
- package/dist/assets/es_CO-uWf-1tom.js +1 -0
- package/dist/assets/es_MX-C_wDRcT-.js +1 -0
- package/dist/assets/es_PE-QQsdF6EB.js +1 -0
- package/dist/assets/es_UY-CWhNSkyr.js +1 -0
- package/dist/assets/es_VE-hweLK9Ws.js +1 -0
- package/dist/assets/et-B3fco2O5.js +1 -0
- package/dist/assets/fa-oRguSKlL.js +1 -0
- package/dist/assets/fi-Daa_vlE5.js +1 -0
- package/dist/assets/fr-CANfYyyO.js +1 -0
- package/dist/assets/fr_BE-CCxD_K6m.js +1 -0
- package/dist/assets/fr_CA-BEtkRJZv.js +1 -0
- package/dist/assets/fr_CH-CrBmdh_n.js +1 -0
- package/dist/assets/fr_LU-CDcjZueC.js +1 -0
- package/dist/assets/he-CVUhin6m.js +1 -0
- package/dist/assets/hi-DF2PyuOw.js +1 -0
- package/dist/assets/hr-b6c4wXpD.js +1 -0
- package/dist/assets/hu-B7IWSU6b.js +1 -0
- package/dist/assets/id-GxIydI_w.js +1 -0
- package/dist/assets/it-DAjzvm2X.js +1 -0
- package/dist/assets/it_CH-BvNuHKQK.js +1 -0
- package/dist/assets/ja-DhVA6Wxm.js +1 -0
- package/dist/assets/kk-BSxmnq67.js +1 -0
- package/dist/assets/ko-ZT8Z04Uq.js +1 -0
- package/dist/assets/lt-BVWqkFr_.js +1 -0
- package/dist/assets/lv-DyXyW37Y.js +1 -0
- package/dist/assets/messagebundle_en-BHfPJk-2.js +1 -0
- package/dist/assets/mk-ChbdOzZI.js +1 -0
- package/dist/assets/ms-H9bJ42GA.js +1 -0
- package/dist/assets/nb-Dgkq7ozi.js +1 -0
- package/dist/assets/nl-DZqLtAXS.js +1 -0
- package/dist/assets/nl_BE-Dx4AxOFo.js +1 -0
- package/dist/assets/pl-MzEgIfvm.js +1 -0
- package/dist/assets/pt-2N8dosOm.js +1 -0
- package/dist/assets/pt_PT-CIcj5FsJ.js +1 -0
- package/dist/assets/ro-CZHCJKTk.js +1 -0
- package/dist/assets/ru-BcU9rFqC.js +1 -0
- package/dist/assets/ru_UA-aH_wNrwj.js +1 -0
- package/dist/assets/sk-DYn5gXzA.js +1 -0
- package/dist/assets/sl-RYb_KlOx.js +1 -0
- package/dist/assets/sr-Bap_3nyz.js +1 -0
- package/dist/assets/sr_Latn-FYOU_tQB.js +1 -0
- package/dist/assets/sv-CeQXZ1qM.js +1 -0
- package/dist/assets/th-C5mRgAid.js +1 -0
- package/dist/assets/tr-vCU3KUkO.js +1 -0
- package/dist/assets/uk-CKvdHIrD.js +1 -0
- package/dist/assets/vi-0BxthtV1.js +1 -0
- package/dist/assets/zh_CN-BV9PXZ7J.js +1 -0
- package/dist/assets/zh_HK-kGfo3-wS.js +1 -0
- package/dist/assets/zh_SG-B8bEKxnm.js +1 -0
- package/dist/assets/zh_TW-BshO-JEe.js +1 -0
- package/dist/css/themes/DatePicker.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/Link.css +1 -1
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadMenu.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/SocialMediaButton.css +1 -0
- package/dist/css/themes/TextField.css +1 -1
- package/dist/custom-elements-internal.json +214 -6
- package/dist/custom-elements.json +205 -6
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -2
- package/dist/generated/i18n/i18n-defaults.js +2 -2
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -2
- package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/DatePickerTemplate.lit.js +4 -5
- package/dist/generated/templates/DatePickerTemplate.lit.js.map +1 -1
- package/dist/generated/templates/FilterMenuTemplate.lit.js +2 -2
- package/dist/generated/templates/FilterMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/FooterTemplate.lit.js +1 -1
- package/dist/generated/templates/FooterTemplate.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 +1 -1
- package/dist/generated/templates/MastheadShellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SelectBoxTemplate.lit.js +4 -4
- package/dist/generated/templates/SelectBoxTemplate.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/themes/DatePicker.css.d.ts +1 -1
- package/dist/generated/themes/DatePicker.css.js +1 -1
- package/dist/generated/themes/DatePicker.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/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/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/MastheadMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadMenu.css.js +1 -1
- package/dist/generated/themes/MastheadMenu.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.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/Slider.css.d.ts +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/SocialMediaButton.css.d.ts +2 -0
- package/dist/generated/themes/SocialMediaButton.css.js +8 -0
- package/dist/generated/themes/SocialMediaButton.css.js.map +1 -0
- 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/messagebundle.properties +3 -3
- package/dist/messagebundle_en.properties +1 -1
- package/dist/types/SocialMediaButtonType.d.ts +9 -0
- package/dist/types/SocialMediaButtonType.js +11 -0
- package/dist/types/SocialMediaButtonType.js.map +1 -0
- package/dist/vscode.html-custom-data.json +50 -1
- package/dist/web-types.json +112 -7
- package/package.json +2 -1
- package/src/Assets.ts +1 -0
- package/src/CountrySelector.hbs +3 -9
- package/src/CountrySelector.ts +7 -4
- package/src/DatePicker.hbs +17 -26
- package/src/DatePicker.ts +2 -2
- package/src/FilterMenu.hbs +33 -37
- package/src/FilterMenu.ts +69 -15
- package/src/Footer.hbs +7 -14
- package/src/Footer.ts +7 -8
- package/src/MastheadItem.hbs +2 -2
- package/src/MastheadItem.ts +18 -0
- package/src/MastheadShell.hbs +3 -2
- package/src/MastheadShell.ts +28 -7
- package/src/SearchableListBase.hbs +1 -1
- package/src/SelectBox.hbs +11 -13
- package/src/SelectBox.ts +2 -2
- package/src/SocialMediaButton.ts +152 -0
- package/src/SocialMediaButtonTemplate.tsx +18 -0
- package/src/StepInput.ts +8 -1
- package/src/StepInputTemplate.tsx +1 -2
- package/src/TableRow.ts +27 -1
- package/src/TextArea.ts +14 -7
- package/src/TextField.hbs +5 -5
- package/src/TextField.ts +87 -66
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -2
- package/src/generated/templates/DatePickerTemplate.lit.ts +4 -5
- package/src/generated/templates/FilterMenuTemplate.lit.ts +2 -2
- package/src/generated/templates/FooterTemplate.lit.ts +1 -1
- package/src/generated/templates/MastheadItemTemplate.lit.ts +3 -3
- package/src/generated/templates/MastheadShellTemplate.lit.ts +1 -1
- package/src/generated/templates/SearchableListBaseTemplate.lit.ts +1 -1
- package/src/generated/templates/SelectBoxTemplate.lit.ts +4 -4
- package/src/generated/templates/TextFieldTemplate.lit.ts +2 -2
- package/src/generated/themes/DatePicker.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/Link.css.ts +1 -1
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadMenu.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.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/SocialMediaButton.css.ts +9 -0
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/i18n/messagebundle.properties +3 -3
- package/src/i18n/messagebundle_en.properties +1 -1
- package/src/themes/DatePicker.css +0 -5
- package/src/themes/Dropdown.css +1 -1
- package/src/themes/FilterMenu.css +2 -2
- package/src/themes/Footer.css +0 -16
- package/src/themes/Link.css +4 -1
- package/src/themes/MastheadItem.css +2 -1
- package/src/themes/MastheadMenu.css +4 -4
- package/src/themes/SelectBox.css +1 -1
- package/src/themes/SocialMediaButton.css +50 -0
- package/src/themes/TextField.css +0 -15
- package/src/types/SocialMediaButtonType.ts +10 -0
- package/dist/assets/messagebundle_en-CKeTZNW3.js +0 -1
package/src/Footer.ts
CHANGED
|
@@ -14,6 +14,8 @@ import UDExButton from "./Button.js";
|
|
|
14
14
|
import UDExAccordion from "./Accordion.js";
|
|
15
15
|
import UDExLink from "./Link.js";
|
|
16
16
|
import UDExDivider from "./Divider.js";
|
|
17
|
+
import UDExSocialMediaButton from "./SocialMediaButton.js";
|
|
18
|
+
import type { UDExSocialMediaButtonType } from "./types/SocialMediaButtonType.js";
|
|
17
19
|
import type { UDExTarget } from "./types/common.js";
|
|
18
20
|
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
19
21
|
import parseArrayFromString from "./utils/parseArrayFromString.js";
|
|
@@ -35,7 +37,6 @@ import {
|
|
|
35
37
|
QUICK_LINKS,
|
|
36
38
|
SEE_COMPLETE_LIST,
|
|
37
39
|
SITE_INFORMATION,
|
|
38
|
-
SOCIAL_LINK_ICON,
|
|
39
40
|
TRENDING,
|
|
40
41
|
COPYRIGHT,
|
|
41
42
|
PUBLIC_SECURITY_NETWORK_NUMBER,
|
|
@@ -56,9 +57,11 @@ export type FooterLink = {
|
|
|
56
57
|
};
|
|
57
58
|
|
|
58
59
|
export type FooterSocialLink = {
|
|
60
|
+
name?: UDExSocialMediaButtonType;
|
|
59
61
|
url: string;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
target?: UDExTarget;
|
|
63
|
+
accessibleName?: string;
|
|
64
|
+
id? : string;
|
|
62
65
|
};
|
|
63
66
|
|
|
64
67
|
export type FooterContactNumber = {
|
|
@@ -106,7 +109,7 @@ type DetailedEvents = "quick-links-click" | "trending-click" | "about-sap-click"
|
|
|
106
109
|
renderer: litRender,
|
|
107
110
|
styles: [FooterCss],
|
|
108
111
|
template: FooterTemplate,
|
|
109
|
-
dependencies: [UDExAccordion, UDExAccordionItem, Icon, UDExButton, UDExDivider, UDExLink],
|
|
112
|
+
dependencies: [UDExAccordion, UDExAccordionItem, Icon, UDExButton, UDExDivider, UDExLink, UDExSocialMediaButton],
|
|
110
113
|
})
|
|
111
114
|
/**
|
|
112
115
|
* Triggered on click interaction with logo in footer
|
|
@@ -427,10 +430,6 @@ class UDExFooter extends UI5Element {
|
|
|
427
430
|
return !!this.contactNumbersArray.length || !!this.contactUsLink || !!this.chatWithUsLink;
|
|
428
431
|
}
|
|
429
432
|
|
|
430
|
-
get socialIconAccessibleName(): string {
|
|
431
|
-
return ` ${UDExFooter.i18nBundle.getText(SOCIAL_LINK_ICON)}`;
|
|
432
|
-
}
|
|
433
|
-
|
|
434
433
|
get phoneNumberAccessibleName(): string {
|
|
435
434
|
return `${UDExFooter.i18nBundle.getText(PHONE_NUMBER)} `;
|
|
436
435
|
}
|
package/src/MastheadItem.hbs
CHANGED
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
<ui5-icon
|
|
65
65
|
class="udex-masthead-item__icon"
|
|
66
66
|
name="{{icon}}"
|
|
67
|
-
show-tooltip="{{
|
|
68
|
-
accessible-name="{{
|
|
67
|
+
show-tooltip="{{iconAltText}}"
|
|
68
|
+
accessible-name="{{iconAltText}}"
|
|
69
69
|
mode="Decorative">
|
|
70
70
|
</ui5-icon>
|
|
71
71
|
{{else if image}}
|
package/src/MastheadItem.ts
CHANGED
|
@@ -285,9 +285,23 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
285
285
|
@slot({ type: HTMLElement, "default": true })
|
|
286
286
|
content?: Array<HTMLElement>;
|
|
287
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Defines the prevents the item from losing focus.
|
|
290
|
+
*
|
|
291
|
+
* @private
|
|
292
|
+
*/
|
|
293
|
+
|
|
288
294
|
@property({ type: Boolean })
|
|
289
295
|
_preventFocusOut!: boolean;
|
|
290
296
|
|
|
297
|
+
/**
|
|
298
|
+
* Defines the item is a menu close button
|
|
299
|
+
*
|
|
300
|
+
* @private
|
|
301
|
+
*/
|
|
302
|
+
@property({ type: Boolean })
|
|
303
|
+
_isMenuCloseBtn?: boolean;
|
|
304
|
+
|
|
291
305
|
@i18n("@sapudex/web-components")
|
|
292
306
|
static i18nBundle: I18nBundle;
|
|
293
307
|
|
|
@@ -530,6 +544,10 @@ class UDExMastheadItem extends UI5Element implements IMastheadItem {
|
|
|
530
544
|
return this.querySelector("[udex-avatar]")!;
|
|
531
545
|
}
|
|
532
546
|
|
|
547
|
+
get iconAltText(): string {
|
|
548
|
+
return this._isMenuCloseBtn ? this.accessibleName || this.icon : this.iconAlt;
|
|
549
|
+
}
|
|
550
|
+
|
|
533
551
|
get isRtlDirection(): boolean {
|
|
534
552
|
return this._direction === "rtl";
|
|
535
553
|
}
|
package/src/MastheadShell.hbs
CHANGED
|
@@ -121,9 +121,10 @@
|
|
|
121
121
|
class="udex-masthead-shell__close-btn"
|
|
122
122
|
accessible-role="button"
|
|
123
123
|
icon="decline"
|
|
124
|
-
accessible-name="
|
|
124
|
+
accessible-name="{{mobileCloseButtonAccessibleName}}"
|
|
125
125
|
part="menu-close-btn"
|
|
126
|
-
hide-active-border
|
|
126
|
+
hide-active-border
|
|
127
|
+
_is-menu-close-btn>
|
|
127
128
|
</udex-masthead-item>
|
|
128
129
|
{{/if}}
|
|
129
130
|
</div>
|
package/src/MastheadShell.ts
CHANGED
|
@@ -3,6 +3,7 @@ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement
|
|
|
3
3
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
4
|
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
5
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
6
|
+
import type { ChangeInfo } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
6
7
|
import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
7
8
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
8
9
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
@@ -31,7 +32,7 @@ import MastheadShellTemplate from "./generated/templates/MastheadShellTemplate.l
|
|
|
31
32
|
// Styles
|
|
32
33
|
import MastheadShellCss from "./generated/themes/MastheadShell.css.js";
|
|
33
34
|
|
|
34
|
-
const canvasContentFont = "
|
|
35
|
+
const canvasContentFont = "14px '72 Brand Variable'";
|
|
35
36
|
type MastheadSlottedItem = UDExMastheadItem | UDExMastheadProfileMenu | UDExMastheadMenu | UDExMastheadCountrySelector | undefined | null;
|
|
36
37
|
type MastheadItemType = UDExMastheadItem | null | undefined;
|
|
37
38
|
|
|
@@ -47,6 +48,7 @@ type UDExMastheadShellAnalyticsNameEventDetail = {
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
export enum UDExMastheadVariable {
|
|
51
|
+
itemArrowIconMarginInlineStart = "--udex-masthead-item-arrow-margin-inline-start",
|
|
50
52
|
mobileMenuHeight = "--udex-masthead-shell-mobile-menu-height",
|
|
51
53
|
itemButtonIconSize = "--udex-masthead-item-button-icon-size",
|
|
52
54
|
itemArrowIconSize = "--udex-masthead-item-arrow-icon-size",
|
|
@@ -283,7 +285,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
283
285
|
/**
|
|
284
286
|
* Defines overflow style for the body after clicking mobile menu opener button
|
|
285
287
|
*
|
|
286
|
-
* @default
|
|
288
|
+
* @default false
|
|
287
289
|
* @public
|
|
288
290
|
*/
|
|
289
291
|
@property({ type: Boolean })
|
|
@@ -292,7 +294,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
292
294
|
/**
|
|
293
295
|
* Defines the visibility of the Search by default.
|
|
294
296
|
*
|
|
295
|
-
* @default
|
|
297
|
+
* @default false
|
|
296
298
|
* @public
|
|
297
299
|
*/
|
|
298
300
|
@property({ type: Boolean })
|
|
@@ -301,7 +303,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
301
303
|
/**
|
|
302
304
|
* Defines sticky position for component
|
|
303
305
|
*
|
|
304
|
-
* @default
|
|
306
|
+
* @default false
|
|
305
307
|
* @public
|
|
306
308
|
*/
|
|
307
309
|
@property({ type: Boolean })
|
|
@@ -406,6 +408,15 @@ class UDExMastheadShell extends UI5Element {
|
|
|
406
408
|
@property()
|
|
407
409
|
closeButtonAccessibleName?: string;
|
|
408
410
|
|
|
411
|
+
/**
|
|
412
|
+
* Defines an accessible name for the close mobile menu button
|
|
413
|
+
*
|
|
414
|
+
* @default undefined
|
|
415
|
+
* @public
|
|
416
|
+
*/
|
|
417
|
+
@property()
|
|
418
|
+
mobileCloseButtonAccessibleName?: string;
|
|
419
|
+
|
|
409
420
|
/**
|
|
410
421
|
* Defines an aria label for the homepage link
|
|
411
422
|
*
|
|
@@ -490,7 +501,9 @@ class UDExMastheadShell extends UI5Element {
|
|
|
490
501
|
this.focusSearchBtn();
|
|
491
502
|
}
|
|
492
503
|
|
|
493
|
-
this.
|
|
504
|
+
if (this.shouldHandleMobileView) {
|
|
505
|
+
this.updateVisibility();
|
|
506
|
+
}
|
|
494
507
|
}
|
|
495
508
|
|
|
496
509
|
onEnterDOM(): void {
|
|
@@ -504,6 +517,12 @@ class UDExMastheadShell extends UI5Element {
|
|
|
504
517
|
ResizeHandler.deregister(this, this._handleResizeBound);
|
|
505
518
|
}
|
|
506
519
|
|
|
520
|
+
onInvalidation({ name }: ChangeInfo): void {
|
|
521
|
+
if (name === "default" && this.shouldHandleMobileView) {
|
|
522
|
+
this.handleMobileMode();
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
507
526
|
_handleResize(): void {
|
|
508
527
|
if (this.shouldHandleMobileView) {
|
|
509
528
|
this.handleMobileMode();
|
|
@@ -762,7 +781,9 @@ class UDExMastheadShell extends UI5Element {
|
|
|
762
781
|
}
|
|
763
782
|
|
|
764
783
|
getItemArrowIconWidth(): number {
|
|
765
|
-
|
|
784
|
+
const arrowIconSize = this.getItemIconSize(UDExMastheadVariable.itemArrowIconSize);
|
|
785
|
+
const marginInlineStart = this.getItemIconSize(UDExMastheadVariable.itemArrowIconMarginInlineStart);
|
|
786
|
+
return arrowIconSize + marginInlineStart;
|
|
766
787
|
}
|
|
767
788
|
|
|
768
789
|
getMainMenuWidth(): number {
|
|
@@ -772,7 +793,7 @@ class UDExMastheadShell extends UI5Element {
|
|
|
772
793
|
const mainItem = item as UDExMastheadItem;
|
|
773
794
|
const hasArrowIcon = mainItem.hasArrowDown && !mainItem.hideArrowIcon;
|
|
774
795
|
const arrowIconWidth = hasArrowIcon ? this.getItemArrowIconWidth() : 0;
|
|
775
|
-
return accumulatedWidth + this.getItemWidth(mainItem) + (index && parseInt(gapItemVar) + arrowIconWidth
|
|
796
|
+
return accumulatedWidth + this.getItemWidth(mainItem) + (index && parseInt(gapItemVar)) + arrowIconWidth;
|
|
776
797
|
}, 0);
|
|
777
798
|
}
|
|
778
799
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
</span>
|
|
17
17
|
{{/if}}
|
|
18
18
|
{{#if isListEmpty}}
|
|
19
|
-
<div class="udex-no-result"><span>{{getNoResultText}}
|
|
19
|
+
<div class="udex-no-result"><span>{{getNoResultText}}</span></div>
|
|
20
20
|
{{else if busy}}
|
|
21
21
|
<ui5-busy-indicator
|
|
22
22
|
class="udex-busy-indicator"
|
package/src/SelectBox.hbs
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
?displayonly="{{displayonly}}"
|
|
16
16
|
?readonly="{{readonly}}"
|
|
17
17
|
aria-label="{{accInfo.ariaLabel}}"
|
|
18
|
-
aria-labelledby="{{accInfo.ariaLabelledBy}}"
|
|
19
18
|
aria-readonly="{{isReadOrDisplayOnly}}"
|
|
20
19
|
aria-disabled="{{disabled}}"
|
|
21
20
|
aria-haspopup="{{listboxRole}}"
|
|
@@ -23,16 +22,18 @@
|
|
|
23
22
|
aria-expanded="{{tokenizerExpanded}}"
|
|
24
23
|
aria-activedescendant>
|
|
25
24
|
{{#if label}}
|
|
26
|
-
<span
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
<span class="{{labelClass}}">
|
|
26
|
+
{{label}}
|
|
27
|
+
{{#if required}}
|
|
28
|
+
*
|
|
29
|
+
{{/if}}
|
|
30
|
+
</span>
|
|
31
|
+
<span class="hidden" id="{{this._id}}-single-label">{{accInfo.ariaLabel}}</span>
|
|
32
|
+
</span>
|
|
32
33
|
{{/if}}
|
|
33
34
|
{{#if showSingleSelectedOption}}
|
|
34
35
|
<div class="udex-text-field__text-holder">
|
|
35
|
-
<span class="udex-text-field__single-label">
|
|
36
|
+
<span class="udex-text-field__single-label" aria-hidden="true">
|
|
36
37
|
{{{_singleSelectedOption}}}
|
|
37
38
|
</span>
|
|
38
39
|
</div>
|
|
@@ -66,15 +67,12 @@
|
|
|
66
67
|
aria-expanded="{{accessibilityAttributes.expanded}}"
|
|
67
68
|
aria-controls="{{accessibilityAttributes.controls}}"
|
|
68
69
|
aria-haspopup="{{accessibilityAttributes.hasPopup}}"
|
|
69
|
-
aria-label="{{accessibilityAttributes.ariaLabel}}"
|
|
70
70
|
class="udex-text-field__trigger"
|
|
71
71
|
tabindex="{{triggerTabIndex}}"
|
|
72
72
|
@keydown="{{handleKeyDownTrigger}}"
|
|
73
73
|
@click="{{getHandleMultiSelectOpen}}">
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
accessible-name="{{iconAccessibleNameText}}">
|
|
77
|
-
</ui5-icon>
|
|
74
|
+
<ui5-icon name="navigation-down-arrow"></ui5-icon>
|
|
75
|
+
<span class="hidden">{{accessibilityAttributes.ariaLabel}}</span>
|
|
78
76
|
</button>
|
|
79
77
|
{{/if}}
|
|
80
78
|
</div>
|
package/src/SelectBox.ts
CHANGED
|
@@ -23,6 +23,7 @@ import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
|
23
23
|
import Token from "@ui5/webcomponents/dist/Token.js";
|
|
24
24
|
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
25
25
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
26
|
+
import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js";
|
|
26
27
|
import Popover from "@ui5/webcomponents/dist/Popover.js";
|
|
27
28
|
import UDExList from "./List.js";
|
|
28
29
|
import UDExListItem from "./ListItem.js";
|
|
@@ -713,8 +714,7 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
713
714
|
|
|
714
715
|
get accInfo() {
|
|
715
716
|
return {
|
|
716
|
-
"ariaLabel": this.accessibleName || this.label || undefined,
|
|
717
|
-
"ariaLabelledBy": this.accessibleNameRef || undefined,
|
|
717
|
+
"ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || this.label || undefined,
|
|
718
718
|
};
|
|
719
719
|
}
|
|
720
720
|
|
|
@@ -0,0 +1,152 @@
|
|
|
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 event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
5
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
6
|
+
import SocialMediaButtonTemplate from "./SocialMediaButtonTemplate.js";
|
|
7
|
+
import UDExSocialMediaButtonType from "./types/SocialMediaButtonType.js";
|
|
8
|
+
import type { LinkClickEventDetail } from "@ui5/webcomponents/dist/Link.js";
|
|
9
|
+
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
10
|
+
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
11
|
+
import { SOCIAL_MEDIA_BUTTON } from "./generated/i18n/i18n-defaults.js";
|
|
12
|
+
import { UDExTarget } from "./types/common.js";
|
|
13
|
+
|
|
14
|
+
// Styles
|
|
15
|
+
import SocialMediaButtonCss from "./generated/themes/SocialMediaButton.css.js";
|
|
16
|
+
|
|
17
|
+
const baseIconsURL = "https://cdn.udex.services.sap.com/dds/design-tokens/assets/icons/";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @class
|
|
21
|
+
*
|
|
22
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
23
|
+
*
|
|
24
|
+
*
|
|
25
|
+
* <h3>Usage</h3>
|
|
26
|
+
*
|
|
27
|
+
* For the <code>udex-social-media-button</code>
|
|
28
|
+
* <h3>ES6 Module Import</h3>
|
|
29
|
+
*
|
|
30
|
+
* <code>import "@sapudex/web-components/dist/SocialMediaButton.js";</code>
|
|
31
|
+
*
|
|
32
|
+
* @constructor
|
|
33
|
+
* @extends UI5Element
|
|
34
|
+
* @tagname udex-social-media-button
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
@customElement({
|
|
38
|
+
tag: "udex-social-media-button",
|
|
39
|
+
renderer: jsxRenderer,
|
|
40
|
+
styles: SocialMediaButtonCss,
|
|
41
|
+
template: SocialMediaButtonTemplate,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Triggered when the user clicks on an item.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
@event("click", { cancelable: true, bubbles: true })
|
|
49
|
+
|
|
50
|
+
class UDExSocialMediaButton extends UI5Element {
|
|
51
|
+
eventDetails!: {
|
|
52
|
+
"click": LinkClickEventDetail,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Defines the type of Social Media Button.
|
|
57
|
+
* <br><br>
|
|
58
|
+
* Available options are:
|
|
59
|
+
* <ul>
|
|
60
|
+
* <li><code>facebook</code> - the button with Facebook icon</li>
|
|
61
|
+
* <li><code>instagram</code> - the button with Instagram icon</li>
|
|
62
|
+
* <li><code>linkedin</code> - the button with LinkedIn icon</li>
|
|
63
|
+
* <li><code>youtube</code> - the button with YouTube icon</li>
|
|
64
|
+
* <li><code>x</code> - the button with X icon</li>
|
|
65
|
+
* <li><code>mail</code> - the button with Instagram mail icon (default)</li>
|
|
66
|
+
* </ul>
|
|
67
|
+
*
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
@property()
|
|
71
|
+
type: `${UDExSocialMediaButtonType}` = UDExSocialMediaButtonType.email;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Defines the URL address for Social Media platform profile.
|
|
75
|
+
*
|
|
76
|
+
* @default ""
|
|
77
|
+
* @public
|
|
78
|
+
*/
|
|
79
|
+
@property({ type: String })
|
|
80
|
+
url?: string;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Define the target of the Social Media Button link
|
|
84
|
+
* <b>Note:</b> Standard hyperlink behavior is supported.
|
|
85
|
+
* @public
|
|
86
|
+
* @default "_blank"
|
|
87
|
+
*/
|
|
88
|
+
@property({ type: String })
|
|
89
|
+
target: `${UDExTarget}` = UDExTarget._blank;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Defines the accessible ARIA name of the component.
|
|
93
|
+
*
|
|
94
|
+
* @default "Social Media Button"
|
|
95
|
+
* @public
|
|
96
|
+
*/
|
|
97
|
+
@property({ type: String })
|
|
98
|
+
accessibleName?: string;
|
|
99
|
+
|
|
100
|
+
@i18n("@sapudex/web-components")
|
|
101
|
+
static i18nBundle: I18nBundle;
|
|
102
|
+
|
|
103
|
+
private svgLoaded: boolean = false;
|
|
104
|
+
|
|
105
|
+
fireLinkClickEvent(e: CustomEvent<LinkClickEventDetail>): void {
|
|
106
|
+
const executeEvent = this.fireDecoratorEvent("click", e.detail);
|
|
107
|
+
|
|
108
|
+
if (!executeEvent) {
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
onAfterRendering(): void {
|
|
114
|
+
this.fetchIconSvg();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
async fetchIconSvg() {
|
|
118
|
+
if (this.svgLoaded) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
const response = await fetch(`${baseIconsURL}${this.type}.svg`);
|
|
124
|
+
|
|
125
|
+
if (!response.ok) {
|
|
126
|
+
console.warn("Failed to fetch SVG", response.statusText);
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const svgContent: string = await response.text();
|
|
131
|
+
this.updateSvgContent(svgContent);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.warn("Failed to fetch SVG", error);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private updateSvgContent(svgContent: string): void {
|
|
138
|
+
const socialBtnEl = this.shadowRoot?.querySelector(".udex-social-media-button");
|
|
139
|
+
if (socialBtnEl) {
|
|
140
|
+
socialBtnEl.innerHTML = svgContent;
|
|
141
|
+
this.svgLoaded = true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
get buttonAccessibleName(): string {
|
|
146
|
+
return this.accessibleName || UDExSocialMediaButton.i18nBundle.getText(SOCIAL_MEDIA_BUTTON);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
UDExSocialMediaButton.define();
|
|
151
|
+
|
|
152
|
+
export default UDExSocialMediaButton;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type UDExSocialMediaButton from "./SocialMediaButton.js";
|
|
2
|
+
import UDExLink from "./Link.js";
|
|
3
|
+
|
|
4
|
+
export default function SocialMediaButtonTemplate(this: UDExSocialMediaButton) {
|
|
5
|
+
return (
|
|
6
|
+
<div
|
|
7
|
+
class="udex-social-media-button-wrapper">
|
|
8
|
+
<UDExLink
|
|
9
|
+
href={this.url}
|
|
10
|
+
target={this.target}
|
|
11
|
+
accessible-name={this.buttonAccessibleName}
|
|
12
|
+
onClick={this.fireLinkClickEvent}>
|
|
13
|
+
<div class={`udex-social-media-button udex-social-media-button-${this.type}`} title={this.buttonAccessibleName}></div>
|
|
14
|
+
<div class="hidden">{this.buttonAccessibleName}</div>
|
|
15
|
+
</UDExLink>
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
}
|
package/src/StepInput.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
isUpShift,
|
|
21
21
|
isUpShiftCtrl,
|
|
22
22
|
} from "@ui5/webcomponents-base/dist/Keys.js";
|
|
23
|
+
import { getAllAccessibleNameRefTexts } from "@ui5/webcomponents-base/dist/util/AccessibilityTextsHelper.js";
|
|
23
24
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
24
25
|
import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
25
26
|
import { STEPINPUT_DEC_ICON_TITLE, STEPINPUT_INC_ICON_TITLE } from "./generated/i18n/i18n-defaults.js";
|
|
@@ -29,7 +30,7 @@ import StepInputTemplate from "./StepInputTemplate.js";
|
|
|
29
30
|
// Styles
|
|
30
31
|
import StepInputCss from "./generated/themes/StepInput.css.js";
|
|
31
32
|
import type UDExControlButtonDesign from "./types/ControlButtonDesign.js";
|
|
32
|
-
import type { UDExTextFieldKeydownEventDetail } from "./TextField.js";
|
|
33
|
+
import type { AccInfo, UDExTextFieldKeydownEventDetail } from "./TextField.js";
|
|
33
34
|
|
|
34
35
|
// Spin variables
|
|
35
36
|
const INITIAL_WAIT_TIMEOUT = 500; // milliseconds
|
|
@@ -255,6 +256,12 @@ class UDExStepInput extends UI5Element {
|
|
|
255
256
|
super();
|
|
256
257
|
}
|
|
257
258
|
|
|
259
|
+
get accInfo(): AccInfo {
|
|
260
|
+
return {
|
|
261
|
+
"ariaLabel": getAllAccessibleNameRefTexts(this) || this.accessibleName || undefined,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
258
265
|
get controlButtonDesign(): UDExControlButtonDesign {
|
|
259
266
|
return valueStateToControlButtonDesign[this.valueState];
|
|
260
267
|
}
|
|
@@ -9,8 +9,7 @@ export default function StepInputTemplate(this: UDExStepInput) {
|
|
|
9
9
|
label={this.label}
|
|
10
10
|
supporting-text={this.supportingText}
|
|
11
11
|
value={this._valuePrecisioned}
|
|
12
|
-
aria-label={this.
|
|
13
|
-
aria-labelledby={this.accessibleNameRef}
|
|
12
|
+
aria-label={this.accInfo.ariaLabel}
|
|
14
13
|
onFocusIn={this._onInputFocusIn}
|
|
15
14
|
onFocusOut={this._onInputFocusOut}
|
|
16
15
|
onKeydown={this._onkeydown}
|
package/src/TableRow.ts
CHANGED
|
@@ -2,6 +2,7 @@ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement
|
|
|
2
2
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
3
3
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
4
|
import UDExTableRowBase from "./TableRowBase.js";
|
|
5
|
+
import type UDExTableCell from "./TableCell.js";
|
|
5
6
|
import TableRowTemplate from "./generated/templates/TableRowTemplate.lit.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -39,9 +40,34 @@ class UDExTableRow extends UDExTableRowBase {
|
|
|
39
40
|
@property({ type: Boolean })
|
|
40
41
|
interactive?: boolean;
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Defines highlighted the row.
|
|
45
|
+
*
|
|
46
|
+
* @default false
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
@property({ type: Boolean })
|
|
50
|
+
highlighted?: boolean;
|
|
51
|
+
|
|
52
|
+
onBeforeRendering(): void {
|
|
53
|
+
if (this.highlighted) {
|
|
54
|
+
this._setHighlightToCells();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
_setHighlightToCells(): void {
|
|
59
|
+
this.cellsInRow.forEach(cell => {
|
|
60
|
+
cell._highlighted = true;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get isGroup(): boolean {
|
|
43
65
|
return false;
|
|
44
66
|
}
|
|
67
|
+
|
|
68
|
+
get cellsInRow(): Array<UDExTableCell> {
|
|
69
|
+
return this.getSlottedNodes<UDExTableCell>("cells");
|
|
70
|
+
}
|
|
45
71
|
}
|
|
46
72
|
|
|
47
73
|
UDExTableRow.define();
|
package/src/TextArea.ts
CHANGED
|
@@ -4,6 +4,7 @@ import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
|
4
4
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
5
5
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
6
6
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
7
|
+
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
7
8
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
8
9
|
import {
|
|
9
10
|
READ_ONLY,
|
|
@@ -44,6 +45,12 @@ import getEffectiveScrollbarStyle from "./utils/getEffectiveScrollbarStyle.js";
|
|
|
44
45
|
dependencies: [UDExStatusMessage],
|
|
45
46
|
})
|
|
46
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Fires when the value of the textarea changes and the textarea loses focus.
|
|
50
|
+
* @public
|
|
51
|
+
*/
|
|
52
|
+
@event("change", { bubbles: true })
|
|
53
|
+
|
|
47
54
|
class UDExTextArea extends UI5Element {
|
|
48
55
|
eventDetails!: {
|
|
49
56
|
"change": void,
|
|
@@ -236,10 +243,6 @@ class UDExTextArea extends UI5Element {
|
|
|
236
243
|
@i18n("@sapudex/web-components")
|
|
237
244
|
static i18nBundle: I18nBundle;
|
|
238
245
|
|
|
239
|
-
getInputDomRef() {
|
|
240
|
-
return this.getDomRef()!.querySelector<HTMLTextAreaElement>("textarea")!;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
246
|
onBeforeRendering() {
|
|
244
247
|
if (this.value && this.labelActiveClass === "") {
|
|
245
248
|
this.labelActiveClass = this._labelActiveClassName;
|
|
@@ -254,8 +257,8 @@ class UDExTextArea extends UI5Element {
|
|
|
254
257
|
this.handleGrowing();
|
|
255
258
|
}
|
|
256
259
|
|
|
257
|
-
handleInput = (
|
|
258
|
-
this.value = (
|
|
260
|
+
handleInput = (inputEvent: InputEvent) => {
|
|
261
|
+
this.value = (inputEvent.target as HTMLInputElement)?.value;
|
|
259
262
|
};
|
|
260
263
|
|
|
261
264
|
handleChange = () => {
|
|
@@ -313,6 +316,10 @@ class UDExTextArea extends UI5Element {
|
|
|
313
316
|
this.active = false;
|
|
314
317
|
};
|
|
315
318
|
|
|
319
|
+
getInputDomRef(): HTMLTextAreaElement {
|
|
320
|
+
return this.getDomRef()!.querySelector<HTMLTextAreaElement>("textarea")!;
|
|
321
|
+
}
|
|
322
|
+
|
|
316
323
|
get ariaInvalid(): string | null {
|
|
317
324
|
return this.valueState === UDExValueState.Error ? "true" : null;
|
|
318
325
|
}
|
|
@@ -321,7 +328,7 @@ class UDExTextArea extends UI5Element {
|
|
|
321
328
|
return this.valueState === UDExValueState.Error || this.valueState === UDExValueState.Warning || this.valueState === UDExValueState.Success;
|
|
322
329
|
}
|
|
323
330
|
|
|
324
|
-
get valueStateTypeMappings() {
|
|
331
|
+
get valueStateTypeMappings(): Record<UDExValueState, string> {
|
|
325
332
|
return {
|
|
326
333
|
[UDExValueState.Success]: UDExTextArea.i18nBundle.getText(VALUE_STATE_TYPE_SUCCESS),
|
|
327
334
|
[UDExValueState.Standard]: UDExTextArea.i18nBundle.getText(VALUE_STATE_TYPE_STANDARD),
|
package/src/TextField.hbs
CHANGED
|
@@ -31,28 +31,28 @@
|
|
|
31
31
|
aria-describedby="{{accInfo.ariaDescribedBy}}"
|
|
32
32
|
aria-haspopup="{{accInfo.ariaHasPopup}}"
|
|
33
33
|
aria-label="{{accInfo.ariaLabel}}"
|
|
34
|
-
aria-labelledby="{{accInfo.ariaLabelledBy}}"
|
|
35
34
|
part="textfield-input"
|
|
36
35
|
min="{{min}}"
|
|
37
36
|
max="{{max}}"
|
|
38
37
|
step="{{step}}"
|
|
39
38
|
/>
|
|
40
|
-
|
|
41
39
|
{{#if icon}}
|
|
42
40
|
<udex-control-button
|
|
43
|
-
accessible-name="{{
|
|
41
|
+
accessible-name="{{buttonAccessibleName}}"
|
|
42
|
+
accessible-description="{{buttonAccessibleDescription}}"
|
|
44
43
|
tooltip="{{showButtonTooltip}}"
|
|
45
44
|
?active="{{active}}"
|
|
46
45
|
?disabled="{{disabled}}"
|
|
47
46
|
?readonly="{{readonly}}"
|
|
47
|
+
?_is-combobox-role="{{_isComboboxRole}}"
|
|
48
48
|
?non-interactive="{{readonly}}"
|
|
49
49
|
design="{{valueState}}"
|
|
50
50
|
icon="{{icon}}"
|
|
51
51
|
@click="{{handleIconClick}}"
|
|
52
52
|
part="textfield-control-btn"
|
|
53
53
|
size="Large"
|
|
54
|
-
class="udex-text-field_icon-container"
|
|
55
|
-
|
|
54
|
+
class="udex-text-field_icon-container">
|
|
55
|
+
</udex-control-button>
|
|
56
56
|
{{/if}}
|
|
57
57
|
</div>
|
|
58
58
|
|