@sapudex/web-components 0.111.0 → 0.114.2
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/.npmrc +1 -2
- package/bundle.esm.js +1 -0
- package/dist/AccordionItem.d.ts +7 -0
- package/dist/AccordionItem.js +6 -2
- package/dist/AccordionItem.js.map +1 -1
- package/dist/CountrySelector.d.ts +5 -7
- package/dist/CountrySelector.js +12 -7
- package/dist/CountrySelector.js.map +1 -1
- package/dist/Dropdown.d.ts +10 -0
- package/dist/Dropdown.js +10 -0
- package/dist/Dropdown.js.map +1 -1
- package/dist/Footer.d.ts +40 -1
- package/dist/Footer.js +151 -1
- package/dist/Footer.js.map +1 -1
- package/dist/InputGroup.d.ts +75 -0
- package/dist/InputGroup.js +101 -0
- package/dist/InputGroup.js.map +1 -0
- package/dist/MastheadMobileMenu.d.ts +4 -1
- package/dist/MastheadMobileMenu.js +10 -3
- package/dist/MastheadMobileMenu.js.map +1 -1
- package/dist/PhoneNumberField.d.ts +8 -0
- package/dist/PhoneNumberField.js +23 -10
- package/dist/PhoneNumberField.js.map +1 -1
- package/dist/Search.d.ts +58 -2
- package/dist/Search.js +159 -12
- package/dist/Search.js.map +1 -1
- package/dist/SecondaryNavigation.d.ts +5 -1
- package/dist/SecondaryNavigation.js +18 -2
- package/dist/SecondaryNavigation.js.map +1 -1
- package/dist/SelectBox.d.ts +6 -0
- package/dist/SelectBox.js +14 -1
- package/dist/SelectBox.js.map +1 -1
- package/dist/Table.d.ts +5 -5
- package/dist/Table.js +5 -5
- package/dist/Table.js.map +1 -1
- package/dist/Tag.d.ts +7 -1
- package/dist/Tag.js +6 -2
- package/dist/Tag.js.map +1 -1
- package/dist/TextArea.js.map +1 -1
- package/dist/assets/{bundle.esm-b7920968.js → bundle.esm-ab45813e.js} +181 -179
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/Breadcrumbs.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/DatePicker.css +1 -1
- package/dist/css/themes/Dropdown.css +1 -1
- package/dist/css/themes/InputGroup.css +1 -0
- package/dist/css/themes/MastheadItem.css +1 -1
- package/dist/css/themes/MastheadMenuItem.css +1 -1
- package/dist/css/themes/MastheadShell.css +1 -1
- package/dist/css/themes/PhoneNumberField.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SearchSuggestions.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/Tag.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/custom-elements-internal.json +405 -53
- package/dist/custom-elements.json +358 -52
- package/dist/features/SearchSuggestionsPopover.d.ts +3 -3
- package/dist/features/SearchSuggestionsPopover.js +16 -18
- package/dist/features/SearchSuggestionsPopover.js.map +1 -1
- package/dist/generated/templates/AccordionItemTemplate.lit.js +2 -1
- package/dist/generated/templates/AccordionItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/CountrySelectorTemplate.lit.js +1 -1
- package/dist/generated/templates/CountrySelectorTemplate.lit.js.map +1 -1
- package/dist/generated/templates/FooterTemplate.lit.js +15 -15
- package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
- package/dist/generated/templates/InputGroupTemplate.lit.d.ts +4 -0
- package/dist/generated/templates/InputGroupTemplate.lit.js +7 -0
- package/dist/generated/templates/InputGroupTemplate.lit.js.map +1 -0
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js +15 -10
- package/dist/generated/templates/MastheadMobileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js +11 -10
- package/dist/generated/templates/SearchSuggestionsTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchTemplate.lit.js +11 -10
- package/dist/generated/templates/SearchTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SecondaryNavigationTemplate.lit.js +2 -1
- package/dist/generated/templates/SecondaryNavigationTemplate.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/Breadcrumbs.css.js +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
- package/dist/generated/themes/CountrySelector.css.js +1 -1
- package/dist/generated/themes/CountrySelector.css.js.map +1 -1
- package/dist/generated/themes/DatePicker.css.js +1 -1
- package/dist/generated/themes/DatePicker.css.js.map +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/InputGroup.css.d.ts +3 -0
- package/dist/generated/themes/InputGroup.css.js +9 -0
- package/dist/generated/themes/InputGroup.css.js.map +1 -0
- package/dist/generated/themes/MastheadItem.css.js +1 -1
- package/dist/generated/themes/MastheadItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadMenuItem.css.js +1 -1
- package/dist/generated/themes/MastheadMenuItem.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/PhoneNumberField.css.js +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js.map +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/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SearchSuggestions.css.js +1 -1
- package/dist/generated/themes/SearchSuggestions.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/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/types/callback.d.ts +2 -0
- package/dist/types/callback.js +2 -0
- package/dist/types/callback.js.map +1 -0
- package/dist/utils/debounce.d.ts +2 -2
- package/dist/utils/debounce.js.map +1 -1
- package/dist/utils/retryUntilSuccessful.d.ts +3 -0
- package/dist/utils/retryUntilSuccessful.js +21 -0
- package/dist/utils/retryUntilSuccessful.js.map +1 -0
- package/dist/vscode.html-custom-data.json +48 -12
- package/dist/web-types.json +205 -29
- package/package.json +1 -1
- package/src/AccordionItem.hbs +12 -1
- package/src/AccordionItem.ts +11 -2
- package/src/CountrySelector.hbs +1 -2
- package/src/CountrySelector.ts +18 -20
- package/src/Dropdown.ts +10 -0
- package/src/Footer.hbs +154 -91
- package/src/Footer.ts +158 -1
- package/src/InputGroup.hbs +20 -0
- package/src/InputGroup.ts +136 -0
- package/src/MastheadMobileMenu.hbs +51 -28
- package/src/MastheadMobileMenu.ts +12 -3
- package/src/MastheadProfileMenu.hbs +1 -1
- package/src/PhoneNumberField.ts +27 -3
- package/src/Search.hbs +23 -1
- package/src/Search.ts +203 -15
- package/src/SearchSuggestions.hbs +46 -48
- package/src/SecondaryNavigation.hbs +6 -4
- package/src/SecondaryNavigation.ts +23 -3
- package/src/SelectBox.ts +22 -0
- package/src/Table.ts +7 -7
- package/src/Tag.ts +12 -3
- package/src/TextArea.ts +1 -1
- package/src/features/SearchSuggestionsPopover.ts +18 -20
- package/src/generated/templates/AccordionItemTemplate.lit.ts +2 -1
- package/src/generated/templates/CountrySelectorTemplate.lit.ts +1 -1
- package/src/generated/templates/FooterTemplate.lit.ts +15 -15
- package/src/generated/templates/InputGroupTemplate.lit.ts +12 -0
- package/src/generated/templates/MastheadMobileMenuTemplate.lit.ts +15 -10
- package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +1 -1
- package/src/generated/templates/SearchSuggestionsTemplate.lit.ts +11 -10
- package/src/generated/templates/SearchTemplate.lit.ts +10 -9
- package/src/generated/templates/SecondaryNavigationTemplate.lit.ts +2 -1
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/Breadcrumbs.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/DatePicker.css.ts +1 -1
- package/src/generated/themes/Dropdown.css.ts +1 -1
- package/src/generated/themes/InputGroup.css.ts +13 -0
- package/src/generated/themes/MastheadItem.css.ts +1 -1
- package/src/generated/themes/MastheadMenuItem.css.ts +1 -1
- package/src/generated/themes/MastheadShell.css.ts +1 -1
- package/src/generated/themes/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SearchSuggestions.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/Tag.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/themes/AccordionItem.css +20 -15
- package/src/themes/Breadcrumbs.css +4 -2
- package/src/themes/CountrySelector.css +12 -1
- package/src/themes/DatePicker.css +1 -1
- package/src/themes/Dropdown.css +2 -2
- package/src/themes/InputGroup.css +19 -0
- package/src/themes/MastheadItem.css +2 -7
- package/src/themes/MastheadMenuItem.css +0 -4
- package/src/themes/MastheadShell.css +9 -10
- package/src/themes/PhoneNumberField.css +13 -3
- package/src/themes/Search.css +160 -17
- package/src/themes/SearchSuggestions.css +7 -1
- package/src/themes/Tag.css +6 -1
- package/src/themes/TextField.css +10 -1
- package/src/types/callback.ts +3 -0
- package/src/utils/debounce.ts +1 -1
- package/src/utils/retryUntilSuccessful.ts +23 -0
package/src/CountrySelector.ts
CHANGED
|
@@ -7,6 +7,7 @@ import executeTemplate from "@ui5/webcomponents-base/dist/renderer/executeTempla
|
|
|
7
7
|
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
8
8
|
import event from "@ui5/webcomponents-base/dist/decorators/event.js";
|
|
9
9
|
import Button from "@ui5/webcomponents/dist/Button.js";
|
|
10
|
+
import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
10
11
|
import { COUNTRY_SELECT } from "./generated/i18n/i18n-defaults.js";
|
|
11
12
|
import CountrySelectorTemplate from "./generated/templates/CountrySelectorTemplate.lit.js";
|
|
12
13
|
import SearchableListBaseTemplate from "./generated/templates/SearchableListBaseTemplate.lit.js";
|
|
@@ -23,12 +24,6 @@ import UDExListItem from "./ListItem.js";
|
|
|
23
24
|
import "@ui5/webcomponents-icons/dist/navigation-down-arrow.js";
|
|
24
25
|
import TextField from "./TextField.js";
|
|
25
26
|
|
|
26
|
-
type CountryItem = {
|
|
27
|
-
label: any,
|
|
28
|
-
content: any,
|
|
29
|
-
_id: any
|
|
30
|
-
}
|
|
31
|
-
|
|
32
27
|
/**
|
|
33
28
|
* @class
|
|
34
29
|
*
|
|
@@ -163,14 +158,6 @@ class CountrySelector extends UDExSearchableListBase {
|
|
|
163
158
|
@property({ type: Boolean })
|
|
164
159
|
required!: boolean;
|
|
165
160
|
|
|
166
|
-
/**
|
|
167
|
-
* Allows control over the width.
|
|
168
|
-
*
|
|
169
|
-
* @public
|
|
170
|
-
*/
|
|
171
|
-
@property({ type: String })
|
|
172
|
-
width?: string;
|
|
173
|
-
|
|
174
161
|
/**
|
|
175
162
|
* Allows control over the height.
|
|
176
163
|
*
|
|
@@ -258,6 +245,8 @@ class CountrySelector extends UDExSearchableListBase {
|
|
|
258
245
|
_dropdown!: UDExDropdown;
|
|
259
246
|
_search!: Search;
|
|
260
247
|
|
|
248
|
+
_handleResizeBound: ResizeObserverCallback;
|
|
249
|
+
|
|
261
250
|
static i18nBundle: I18nBundle;
|
|
262
251
|
|
|
263
252
|
static async onDefine() {
|
|
@@ -267,9 +256,18 @@ class CountrySelector extends UDExSearchableListBase {
|
|
|
267
256
|
constructor() {
|
|
268
257
|
super();
|
|
269
258
|
this._shouldFilterItems = false;
|
|
259
|
+
this._handleResizeBound = this._handleResize.bind(this);
|
|
270
260
|
this._filteredItems = [];
|
|
271
261
|
}
|
|
272
262
|
|
|
263
|
+
onEnterDOM(): void {
|
|
264
|
+
ResizeHandler.register(this, this._handleResizeBound);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
onExitDOM(): void {
|
|
268
|
+
ResizeHandler.deregister(this, this._handleResizeBound);
|
|
269
|
+
}
|
|
270
|
+
|
|
273
271
|
onBeforeRendering(): void {
|
|
274
272
|
if (this.blockedCountryCodes?.length) {
|
|
275
273
|
const blockedCountryCodesArray = this.blockedCountryCodes.split(",").map(code => code.trim().toUpperCase());
|
|
@@ -319,15 +317,15 @@ class CountrySelector extends UDExSearchableListBase {
|
|
|
319
317
|
return SearchableListBaseTemplate;
|
|
320
318
|
}
|
|
321
319
|
|
|
320
|
+
_handleResize() {
|
|
321
|
+
this._dropdown.style.setProperty("--udex-dropdown-pane-width", `${this.offsetWidth}px`);
|
|
322
|
+
}
|
|
323
|
+
|
|
322
324
|
get ariaControls(): string | null | undefined {
|
|
323
325
|
const list = this.shadowRoot!.querySelector<UDExList>("udex-list");
|
|
324
326
|
return list?.getAttribute("id");
|
|
325
327
|
}
|
|
326
328
|
|
|
327
|
-
get holderWidth() {
|
|
328
|
-
return this.width ? this.width : "auto";
|
|
329
|
-
}
|
|
330
|
-
|
|
331
329
|
get selectedCountryFlagX() {
|
|
332
330
|
return this.selectedCountry?.flagX;
|
|
333
331
|
}
|
|
@@ -444,10 +442,10 @@ class CountrySelector extends UDExSearchableListBase {
|
|
|
444
442
|
const selected = country.iso.toUpperCase() === this.selectedCountry.iso.toUpperCase();
|
|
445
443
|
this.items.push({
|
|
446
444
|
label: this.getCountryLabel(country.countryName, country.localName),
|
|
447
|
-
|
|
445
|
+
innerHTML: this.getItemTemplate(country),
|
|
448
446
|
selected,
|
|
449
447
|
_id: country.iso.toUpperCase(),
|
|
450
|
-
} as
|
|
448
|
+
} as UDExListItem);
|
|
451
449
|
});
|
|
452
450
|
}
|
|
453
451
|
|
package/src/Dropdown.ts
CHANGED
|
@@ -225,11 +225,21 @@ class UDExDropdown extends UI5Element {
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
+
/**
|
|
229
|
+
* Open dropdown
|
|
230
|
+
*
|
|
231
|
+
* @public
|
|
232
|
+
*/
|
|
228
233
|
onOpen(opener: HTMLElement): void {
|
|
229
234
|
const dropdown = this.getDropdownPane();
|
|
230
235
|
dropdown.showAt(opener);
|
|
231
236
|
}
|
|
232
237
|
|
|
238
|
+
/**
|
|
239
|
+
* Close dropdown
|
|
240
|
+
*
|
|
241
|
+
* @public
|
|
242
|
+
*/
|
|
233
243
|
onClose():void {
|
|
234
244
|
const dropdown = this.getDropdownPane();
|
|
235
245
|
dropdown.close(true);
|
package/src/Footer.hbs
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
{{#if logoUrl}}
|
|
6
6
|
<div class="udex-footer__logo">
|
|
7
7
|
{{#if logoLink}}
|
|
8
|
-
<a href="{{parsedRef}}">
|
|
8
|
+
<a href="{{parsedRef}}" @click="{{_onLogoClick}}">
|
|
9
9
|
<img id="udex-footer__logo-image" src="{{logoUrl}}" class="udex-footer__logo-image" alt="{{logoAlt}}"/>
|
|
10
10
|
</a>
|
|
11
11
|
{{else}}
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
<div>
|
|
28
28
|
<span class="hidden" aria-hidden id="udex-footer__{{@index}}_phone-label">{{../phoneNumberAccessibleName}} {{this.country}} : {{this.number}}</span>
|
|
29
29
|
<p class="udex-footer__country">{{this.country}}</p>
|
|
30
|
-
<a href="tel:{{this.number}}" class="udex-footer__number" aria-labelledby="udex-footer__{{@index}}_phone-label">
|
|
30
|
+
<a href="tel:{{this.number}}" class="udex-footer__number" @click="{{../_onContactPhoneClick}}" aria-labelledby="udex-footer__{{@index}}_phone-label">
|
|
31
31
|
{{this.number}}
|
|
32
32
|
</a>
|
|
33
33
|
</div>
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
{{#if localCountryNumbersLink}}
|
|
37
37
|
<p class="udex-footer__remark">
|
|
38
38
|
{{completeListTitle}}
|
|
39
|
-
<a href="{{this.localCountryNumbersLink}}">
|
|
39
|
+
<a href="{{this.localCountryNumbersLink}}" @click="{{_onContactPhoneLocalNumbersClick}}">
|
|
40
40
|
{{localCountryTitle}}.
|
|
41
41
|
</a>
|
|
42
42
|
</p>
|
|
@@ -52,7 +52,12 @@
|
|
|
52
52
|
<ui5-icon class="udex-footer__icon" name="email"></ui5-icon>
|
|
53
53
|
</div>
|
|
54
54
|
<span class="hidden" aria-hidden id="udex-footer__contact-us-label">{{contactUsAccessibleLabel}}</span>
|
|
55
|
-
<a
|
|
55
|
+
<a
|
|
56
|
+
href="{{contactUsLink}}"
|
|
57
|
+
class="udex-footer__contact-us-link"
|
|
58
|
+
aria-labelledby="udex-footer__contact-us-label"
|
|
59
|
+
@click="{{_onContactEmailClick}}"
|
|
60
|
+
>{{contactUsAccessibleName}}</a>
|
|
56
61
|
</div>
|
|
57
62
|
</div>
|
|
58
63
|
{{/if}}
|
|
@@ -62,7 +67,7 @@
|
|
|
62
67
|
<div class="udex-footer__icon-container">
|
|
63
68
|
<ui5-icon class="udex-footer__icon" name="discussion-2"></ui5-icon>
|
|
64
69
|
</div>
|
|
65
|
-
<a href="{{chatWithUsLink}}" class="udex-footer__chat-with-us-link">{{chatWithUsAccessibleName}}</a>
|
|
70
|
+
<a href="{{chatWithUsLink}}" class="udex-footer__chat-with-us-link" @click="{{_onContactChatClick}}">{{chatWithUsAccessibleName}}</a>
|
|
66
71
|
</div>
|
|
67
72
|
</div>
|
|
68
73
|
{{/if}}
|
|
@@ -75,7 +80,12 @@
|
|
|
75
80
|
<div class="udex-footer__social-container">
|
|
76
81
|
{{#each socialLinksArray}}
|
|
77
82
|
<div>
|
|
78
|
-
<a
|
|
83
|
+
<a
|
|
84
|
+
href="{{this.url}}"
|
|
85
|
+
class="udex-footer__social-icon"
|
|
86
|
+
data-name="{{this.name}}"
|
|
87
|
+
@click="{{../_onSocialMediaLinkClick}}"
|
|
88
|
+
>
|
|
79
89
|
<img
|
|
80
90
|
alt="{{this.name}} {{../socialIconAccessibleName}}"
|
|
81
91
|
title="{{this.name}}"
|
|
@@ -107,7 +117,12 @@
|
|
|
107
117
|
<div class="udex-footer__social-container">
|
|
108
118
|
{{#each socialLinksArray}}
|
|
109
119
|
<div>
|
|
110
|
-
<a
|
|
120
|
+
<a
|
|
121
|
+
href="{{this.url}}"
|
|
122
|
+
class="udex-footer__social-icon"
|
|
123
|
+
data-name="{{this.name}}"
|
|
124
|
+
@click="{{../_onSocialMediaLinkClick}}"
|
|
125
|
+
>
|
|
111
126
|
<img
|
|
112
127
|
alt="{{this.name}} {{../socialIconAccessibleName}}"
|
|
113
128
|
src="{{this.iconUrl}}"
|
|
@@ -132,94 +147,142 @@
|
|
|
132
147
|
</footer>
|
|
133
148
|
|
|
134
149
|
{{#*inline "mobile-navigation"}}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
150
|
+
<udex-accordion class="udex-footer__accordion">
|
|
151
|
+
{{#if quickLinksArray.length}}
|
|
152
|
+
<udex-accordion-item title="{{quickLinksTitle}}" class="udex-footer__action-item">
|
|
153
|
+
<ul class="udex-footer__links-list udex-footer__links-list--mobile">
|
|
154
|
+
{{#each ../quickLinksArray}}
|
|
155
|
+
<li>
|
|
156
|
+
<a
|
|
157
|
+
aria-describedby="udex-footer__quick-links"
|
|
158
|
+
href="{{this.url}}"
|
|
159
|
+
@click="{{../_onQuickLinksClick}}"
|
|
160
|
+
>{{this.title}}</a>
|
|
161
|
+
</li>
|
|
162
|
+
{{/each}}
|
|
163
|
+
</ul>
|
|
164
|
+
</udex-accordion-item>
|
|
165
|
+
<h3 class="udex-footer__links-item hidden" aria-hidden="true" id="udex-footer__quick-links">{{quickLinksTitle}}</h3>
|
|
166
|
+
{{/if}}
|
|
146
167
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
168
|
+
{{#if trendingLinksArray.length}}
|
|
169
|
+
<udex-accordion-item title="{{trendingTitle}}" class="udex-footer__action-item">
|
|
170
|
+
<ul class="udex-footer__links-list udex-footer__links-list--mobile">
|
|
171
|
+
{{#each trendingLinksArray}}
|
|
172
|
+
<li>
|
|
173
|
+
<a
|
|
174
|
+
aria-describedby="udex-footer__footer__trending"
|
|
175
|
+
href="{{this.url}}"
|
|
176
|
+
@click="{{../_onTrendingClick}}"
|
|
177
|
+
>{{this.title}}</a>
|
|
178
|
+
</li>
|
|
179
|
+
{{/each}}
|
|
180
|
+
</ul>
|
|
181
|
+
</udex-accordion-item>
|
|
182
|
+
<h3 class="udex-footer__links-item hidden" aria-hidden="true" id="udex-footer__trending">{{trendingTitle}}</h3>
|
|
183
|
+
{{/if}}
|
|
157
184
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
185
|
+
{{#if aboutLinksArray.length}}
|
|
186
|
+
<udex-accordion-item title="{{aboutSapTitle}}" class="udex-footer__action-item">
|
|
187
|
+
<ul class="udex-footer__links-list udex-footer__links-list--mobile">
|
|
188
|
+
{{#each aboutLinksArray}}
|
|
189
|
+
<li>
|
|
190
|
+
<a
|
|
191
|
+
aria-describedby="udex-footer__about"
|
|
192
|
+
href="{{this.url}}"
|
|
193
|
+
@click="{{../_onAboutSapClick}}"
|
|
194
|
+
>{{this.title}}</a>
|
|
195
|
+
</li>
|
|
196
|
+
{{/each}}
|
|
197
|
+
</ul>
|
|
198
|
+
</udex-accordion-item>
|
|
199
|
+
<h3 class="udex-footer__links-item hidden" aria-hidden="true" id="udex-footer__about">{{aboutSapTitle}}</h3>
|
|
200
|
+
{{/if}}
|
|
168
201
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
202
|
+
{{#if siteInformationLinksArray.length}}
|
|
203
|
+
<udex-accordion-item title="{{siteInformationTitle}}" class="udex-footer__action-item">
|
|
204
|
+
<ul class="udex-footer__links-list udex-footer__links-list--mobile">
|
|
205
|
+
{{#each siteInformationLinksArray}}
|
|
206
|
+
<li>
|
|
207
|
+
<a
|
|
208
|
+
aria-describedby="udex-footer__site-information"
|
|
209
|
+
href="{{this.url}}"
|
|
210
|
+
@click="{{../_onSiteInformationClick}}"
|
|
211
|
+
>{{this.title}}</a>
|
|
212
|
+
</li>
|
|
213
|
+
{{/each}}
|
|
214
|
+
</ul>
|
|
215
|
+
</udex-accordion-item>
|
|
216
|
+
<h3 class="udex-footer__links-item hidden" aria-hidden="true" id="udex-footer__site-information">{{siteInformationTitle}}</h3>
|
|
217
|
+
{{/if}}
|
|
218
|
+
</udex-accordion>
|
|
180
219
|
{{/inline}}
|
|
181
220
|
|
|
182
221
|
{{#*inline "desktop-navigation"}}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
<div class="udex-footer__links">
|
|
223
|
+
{{#if quickLinksArray.length}}
|
|
224
|
+
<div class="udex-footer__links-group udex-footer__quick-links">
|
|
225
|
+
<h3 class="udex-footer__links-item" id="udex-footer__quick-links">{{quickLinksTitle}}</h3>
|
|
226
|
+
<ul class="udex-footer__links-list udex-footer__links-list--desktop">
|
|
227
|
+
{{#each quickLinksArray}}
|
|
228
|
+
<li>
|
|
229
|
+
<a
|
|
230
|
+
aria-describedby="udex-footer__quick-links"
|
|
231
|
+
href="{{this.url}}"
|
|
232
|
+
@click="{{../_onQuickLinksClick}}"
|
|
233
|
+
>{{this.title}}</a>
|
|
234
|
+
</li>
|
|
235
|
+
{{/each}}
|
|
236
|
+
</ul>
|
|
237
|
+
</div>
|
|
238
|
+
{{/if}}
|
|
239
|
+
{{#if trendingLinksArray.length}}
|
|
240
|
+
<div class="udex-footer__links-group udex-footer__trending-links">
|
|
241
|
+
<h3 class="udex-footer__links-item" id="udex-footer__trending">{{trendingTitle}}</h3>
|
|
242
|
+
<ul class="udex-footer__links-list udex-footer__links-list--desktop">
|
|
243
|
+
{{#each trendingLinksArray}}
|
|
244
|
+
<li>
|
|
245
|
+
<a
|
|
246
|
+
aria-describedby="udex-footer__footer__trending"
|
|
247
|
+
href="{{this.url}}"
|
|
248
|
+
@click="{{../_onTrendingClick}}"
|
|
249
|
+
>{{this.title}}</a>
|
|
250
|
+
</li>
|
|
251
|
+
{{/each}}
|
|
252
|
+
</ul>
|
|
253
|
+
</div>
|
|
254
|
+
{{/if}}
|
|
255
|
+
{{#if aboutLinksArray.length}}
|
|
256
|
+
<div class="udex-footer__links-group udex-footer__about-links">
|
|
257
|
+
<h3 class="udex-footer__links-item" id="udex-footer__about">{{aboutSapTitle}}</h3>
|
|
258
|
+
<ul class="udex-footer__links-list udex-footer__links-list--desktop">
|
|
259
|
+
{{#each aboutLinksArray}}
|
|
260
|
+
<li>
|
|
261
|
+
<a
|
|
262
|
+
aria-describedby="udex-footer__about"
|
|
263
|
+
href="{{this.url}}"
|
|
264
|
+
@click="{{../_onAboutSapClick}}"
|
|
265
|
+
>{{this.title}}</a>
|
|
266
|
+
</li>
|
|
267
|
+
{{/each}}
|
|
268
|
+
</ul>
|
|
269
|
+
</div>
|
|
270
|
+
{{/if}}
|
|
271
|
+
{{#if siteInformationLinksArray.length}}
|
|
272
|
+
<div class="udex-footer__links-group udex-footer__site-information-links">
|
|
273
|
+
<h3 class="udex-footer__links-item" id="udex-footer__site-information">{{siteInformationTitle}}</h3>
|
|
274
|
+
<ul class="udex-footer__links-list udex-footer__links-list--desktop">
|
|
275
|
+
{{#each siteInformationLinksArray}}
|
|
276
|
+
<li>
|
|
277
|
+
<a
|
|
278
|
+
aria-describedby="udex-footer__site-information"
|
|
279
|
+
href="{{this.url}}"
|
|
280
|
+
@click="{{../_onSiteInformationClick}}"
|
|
281
|
+
>{{this.title}}</a>
|
|
282
|
+
</li>
|
|
283
|
+
{{/each}}
|
|
284
|
+
</ul>
|
|
285
|
+
</div>
|
|
286
|
+
{{/if}}
|
|
287
|
+
</div>
|
|
225
288
|
{{/inline}}
|
package/src/Footer.ts
CHANGED
|
@@ -2,6 +2,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
|
2
2
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
3
3
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
4
4
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
5
|
+
import event from "@ui5/webcomponents-base/dist/decorators/event.js";
|
|
5
6
|
import ResizeHandler, { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
6
7
|
|
|
7
8
|
import "@ui5/webcomponents-icons/dist/headset.js";
|
|
@@ -49,6 +50,21 @@ export type FooterContactNumber = {
|
|
|
49
50
|
number: string;
|
|
50
51
|
country: string;
|
|
51
52
|
};
|
|
53
|
+
|
|
54
|
+
export const FooterBaseEvent = {
|
|
55
|
+
detail: {
|
|
56
|
+
originalEvent: { type: PointerEvent },
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const FooterDetailedEvent = {
|
|
61
|
+
detail: {
|
|
62
|
+
originalEvent: { type: PointerEvent },
|
|
63
|
+
name: { type: String },
|
|
64
|
+
sourceNode: { type: HTMLElement },
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
|
|
52
68
|
/**
|
|
53
69
|
* @class
|
|
54
70
|
*
|
|
@@ -75,6 +91,75 @@ export type FooterContactNumber = {
|
|
|
75
91
|
template: FooterTemplate,
|
|
76
92
|
dependencies: [UDExAccordionItem],
|
|
77
93
|
})
|
|
94
|
+
/**
|
|
95
|
+
* Triggered on click interaction with logo in footer
|
|
96
|
+
* @public
|
|
97
|
+
* @allowPreventDefault
|
|
98
|
+
*/
|
|
99
|
+
@event("logo-click", FooterBaseEvent)
|
|
100
|
+
/**
|
|
101
|
+
* Triggered on click interaction with "Back to Top" button
|
|
102
|
+
* @public
|
|
103
|
+
* @allowPreventDefault
|
|
104
|
+
*/
|
|
105
|
+
@event("back-to-top-click", FooterBaseEvent)
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Triggered on click interaction with phone number link in footer
|
|
109
|
+
* @public
|
|
110
|
+
* @allowPreventDefault
|
|
111
|
+
*/
|
|
112
|
+
@event("contact-phone-click", FooterBaseEvent)
|
|
113
|
+
/**
|
|
114
|
+
* Triggered on click interaction with local country numbers list link
|
|
115
|
+
* @public
|
|
116
|
+
* @allowPreventDefault
|
|
117
|
+
*/
|
|
118
|
+
@event("contact-phone-local-numbers-click", FooterBaseEvent)
|
|
119
|
+
/**
|
|
120
|
+
* Triggered on click interaction with "Contact us by email" link
|
|
121
|
+
* @public
|
|
122
|
+
* @allowPreventDefault
|
|
123
|
+
*/
|
|
124
|
+
@event("contact-email-click", FooterBaseEvent)
|
|
125
|
+
/**
|
|
126
|
+
* Triggered on click interaction with "Contact us by chat" link
|
|
127
|
+
* @public
|
|
128
|
+
* @allowPreventDefault
|
|
129
|
+
*/
|
|
130
|
+
@event("contact-chat-click", FooterBaseEvent)
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Triggered on click interaction with a link within "Quick Links" category
|
|
134
|
+
* @public
|
|
135
|
+
* @allowPreventDefault
|
|
136
|
+
*/
|
|
137
|
+
@event("quick-links-click", FooterDetailedEvent)
|
|
138
|
+
/**
|
|
139
|
+
* Triggered on click interaction with a link within "Trending" category
|
|
140
|
+
* @public
|
|
141
|
+
* @allowPreventDefault
|
|
142
|
+
*/
|
|
143
|
+
@event("trending-click", FooterDetailedEvent)
|
|
144
|
+
/**
|
|
145
|
+
* Triggered on click interaction with a link within "About SAP" category
|
|
146
|
+
* @public
|
|
147
|
+
* @allowPreventDefault
|
|
148
|
+
*/
|
|
149
|
+
@event("about-sap-click", FooterDetailedEvent)
|
|
150
|
+
/**
|
|
151
|
+
* Triggered on click interaction with a link within "Site Information" category
|
|
152
|
+
* @public
|
|
153
|
+
* @allowPreventDefault
|
|
154
|
+
*/
|
|
155
|
+
@event("site-information-click", FooterDetailedEvent)
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Triggered on click interaction with any of the social media links within footer
|
|
159
|
+
* @public
|
|
160
|
+
* @allowPreventDefault
|
|
161
|
+
*/
|
|
162
|
+
@event("social-media-link-click", FooterDetailedEvent)
|
|
78
163
|
class UDExFooter extends UI5Element {
|
|
79
164
|
/**
|
|
80
165
|
* Defines the Logo URL
|
|
@@ -221,7 +306,9 @@ class UDExFooter extends UI5Element {
|
|
|
221
306
|
this._shouldRenderMobileMenu = this.isMobile;
|
|
222
307
|
}
|
|
223
308
|
|
|
224
|
-
onBackToTopClick(): void {
|
|
309
|
+
onBackToTopClick(e: Event): void {
|
|
310
|
+
this.fireEvent("back-to-top-click", { originalEvent: e }, true);
|
|
311
|
+
|
|
225
312
|
window.scrollTo(0, 0);
|
|
226
313
|
}
|
|
227
314
|
|
|
@@ -311,6 +398,76 @@ class UDExFooter extends UI5Element {
|
|
|
311
398
|
get isMobile(): boolean {
|
|
312
399
|
return window.innerWidth <= BreakpointSizeS;
|
|
313
400
|
}
|
|
401
|
+
|
|
402
|
+
_onLogoClick(e: Event): void {
|
|
403
|
+
this.fireEvent("logo-click", { originalEvent: e }, true);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
_onContactPhoneClick(e: Event): void {
|
|
407
|
+
this.fireEvent("contact-phone-click", { originalEvent: e }, true);
|
|
408
|
+
}
|
|
409
|
+
_onContactPhoneLocalNumbersClick(e: Event): void {
|
|
410
|
+
this.fireEvent("contact-phone-local-numbers-click", { originalEvent: e }, true);
|
|
411
|
+
}
|
|
412
|
+
_onContactEmailClick(e: Event): void {
|
|
413
|
+
this.fireEvent("contact-email-click", { originalEvent: e }, true);
|
|
414
|
+
}
|
|
415
|
+
_onContactChatClick(e: Event): void {
|
|
416
|
+
this.fireEvent("contact-chat-click", { originalEvent: e }, true);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
_onQuickLinksClick(e: Event): void {
|
|
420
|
+
const sourceNode = e.composedPath()[0]as HTMLElement;
|
|
421
|
+
|
|
422
|
+
this.fireEvent("quick-links-click", {
|
|
423
|
+
name: sourceNode.innerText,
|
|
424
|
+
originalEvent: e,
|
|
425
|
+
sourceNode,
|
|
426
|
+
}, true);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
_onTrendingClick(e: Event): void {
|
|
430
|
+
const sourceNode = e.composedPath()[0]as HTMLElement;
|
|
431
|
+
|
|
432
|
+
this.fireEvent("trending-click", {
|
|
433
|
+
name: sourceNode.innerText,
|
|
434
|
+
originalEvent: e,
|
|
435
|
+
sourceNode,
|
|
436
|
+
}, true);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
_onAboutSapClick(e: Event): void {
|
|
440
|
+
const sourceNode = e.composedPath()[0]as HTMLElement;
|
|
441
|
+
|
|
442
|
+
this.fireEvent("about-sap-click", {
|
|
443
|
+
name: sourceNode.innerText,
|
|
444
|
+
originalEvent: e,
|
|
445
|
+
sourceNode,
|
|
446
|
+
}, true);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
_onSiteInformationClick(e: Event): void {
|
|
450
|
+
const sourceNode = e.composedPath()[0]as HTMLElement;
|
|
451
|
+
|
|
452
|
+
this.fireEvent("site-information-click", {
|
|
453
|
+
name: sourceNode.innerText,
|
|
454
|
+
originalEvent: e,
|
|
455
|
+
sourceNode,
|
|
456
|
+
}, true);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
_onSocialMediaLinkClick(e: Event): void {
|
|
460
|
+
const nodes = e.composedPath() as HTMLElement[];
|
|
461
|
+
let sourceNode = nodes[0];
|
|
462
|
+
|
|
463
|
+
if (nodes[0] instanceof HTMLImageElement) { sourceNode = nodes[1]; }
|
|
464
|
+
|
|
465
|
+
this.fireEvent("social-media-link-click", {
|
|
466
|
+
name: sourceNode?.dataset?.name,
|
|
467
|
+
originalEvent: e,
|
|
468
|
+
sourceNode,
|
|
469
|
+
}, true);
|
|
470
|
+
}
|
|
314
471
|
}
|
|
315
472
|
|
|
316
473
|
UDExFooter.define();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div id="{{_id}}-input-group"
|
|
2
|
+
class="udex-input-group__container"
|
|
3
|
+
role="group"
|
|
4
|
+
aria-describedby="{{_id}}-valueStateDesc"
|
|
5
|
+
>
|
|
6
|
+
<div class="udex-input-group__content">
|
|
7
|
+
{{#each _items}}
|
|
8
|
+
<div class="udex-input-group__item">
|
|
9
|
+
<slot name="{{this.item._individualSlot}}"></slot>
|
|
10
|
+
</div>
|
|
11
|
+
{{/each}}
|
|
12
|
+
</div>
|
|
13
|
+
{{#if valueStateText}}
|
|
14
|
+
<udex-status-message
|
|
15
|
+
supporting-text="{{valueStateText}}"
|
|
16
|
+
value-state="{{valueState}}">
|
|
17
|
+
</udex-status-message>
|
|
18
|
+
<span id="{{_id}}-valueStateDesc" class="hidden-text">{{valueStateText}}</span>
|
|
19
|
+
{{/if}}
|
|
20
|
+
</div>
|