@sapudex/web-components 2.54.0 → 2.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cypress/specs/Breadcrumbs.cy.tsx +3 -1
- package/cypress/specs/FilterMenu.cy.tsx +34 -2
- package/cypress/specs/Footer.cy.tsx +59 -0
- package/cypress/specs/MediaPlayer.cy.tsx +58 -0
- package/cypress/specs/SecondaryNavigationDesktop.cy.tsx +2 -2
- package/cypress/specs/SelectBox.cy.tsx +74 -0
- package/dist/BreadcrumbsTemplate.js +1 -1
- package/dist/BreadcrumbsTemplate.js.map +1 -1
- package/dist/FilterMenu.d.ts +1 -1
- package/dist/FilterMenu.js +6 -6
- package/dist/FilterMenu.js.map +1 -1
- package/dist/Footer.d.ts +20 -1
- package/dist/Footer.js +40 -3
- package/dist/Footer.js.map +1 -1
- package/dist/FooterTemplate.js +7 -2
- package/dist/FooterTemplate.js.map +1 -1
- package/dist/List.js +6 -6
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +12 -5
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +1 -1
- package/dist/ListGroupHeaderBase.js +2 -2
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListGroupHeaderTemplate.d.ts +2 -0
- package/dist/ListGroupHeaderTemplate.js +33 -0
- package/dist/ListGroupHeaderTemplate.js.map +1 -0
- package/dist/ListItem.d.ts +1 -1
- package/dist/ListItem.js +4 -3
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +1 -0
- package/dist/ListItemBase.js +8 -4
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListItemTemplate.d.ts +2 -0
- package/dist/ListItemTemplate.js +18 -0
- package/dist/ListItemTemplate.js.map +1 -0
- package/dist/ListSelectAll.js +4 -5
- package/dist/ListSelectAll.js.map +1 -1
- package/dist/ListSelectAllTemplate.d.ts +2 -0
- package/dist/ListSelectAllTemplate.js +6 -0
- package/dist/ListSelectAllTemplate.js.map +1 -0
- package/dist/ListTemplate.d.ts +2 -0
- package/dist/ListTemplate.js +11 -0
- package/dist/ListTemplate.js.map +1 -0
- package/dist/MediaPlayer.js +6 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/SelectBox.js +31 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/SelectBoxTemplate.js +2 -1
- package/dist/SelectBoxTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-CqOrRXxa.js → InputSuggestions-DPiJnNLn.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-DKUm4L2B.js → ListItemStandardExpandableTextTemplate-B-v72jL6.js} +1 -1
- package/dist/assets/{bundle.esm-CI60uvdr.js → bundle.esm-DPppjwN7.js} +259 -259
- package/dist/assets/messagebundle_en-B0P3kkb6.js +1 -0
- package/dist/assets/messagebundle_it-BML2SC0W.js +1 -0
- package/dist/assets/messagebundle_ja-zyFfZHcj.js +1 -0
- package/dist/assets/messagebundle_ko-BCPaSqNp.js +1 -0
- package/dist/assets/messagebundle_lt-DB4b6FVx.js +1 -0
- package/dist/assets/messagebundle_lv-tAOia5tU.js +1 -0
- package/dist/css/themes/Breadcrumbs.css +1 -1
- package/dist/css/themes/BreadcrumbsPopover.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/custom-elements-internal.json +90 -2
- package/dist/custom-elements.json +76 -2
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_it.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ja.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_ko.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lt.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_lv.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +2 -1
- package/dist/generated/i18n/i18n-defaults.js +2 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.d.ts +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js +1 -1
- package/dist/generated/themes/BreadcrumbsPopover.css.js.map +1 -1
- package/dist/generated/themes/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/ListGroupHeader.css.d.ts +1 -1
- package/dist/generated/themes/ListGroupHeader.css.js +1 -1
- package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
- package/dist/messagebundle.properties +1 -0
- package/dist/messagebundle_en.properties +1 -0
- package/dist/messagebundle_it.properties +123 -0
- package/dist/messagebundle_ja.properties +127 -1
- package/dist/messagebundle_ko.properties +126 -0
- package/dist/messagebundle_lt.properties +126 -0
- package/dist/messagebundle_lv.properties +9 -0
- package/dist/types/FooterAskJoulePosition.d.ts +5 -0
- package/dist/types/FooterAskJoulePosition.js +7 -0
- package/dist/types/FooterAskJoulePosition.js.map +1 -0
- package/dist/vscode.html-custom-data.json +11 -1
- package/dist/web-types.json +34 -3
- package/package.json +1 -1
- package/src/BreadcrumbsTemplate.tsx +12 -10
- package/src/FilterMenu.ts +6 -6
- package/src/Footer.ts +41 -3
- package/src/FooterTemplate.tsx +28 -4
- package/src/List.ts +8 -8
- package/src/ListGroupHeader.ts +12 -5
- package/src/ListGroupHeaderBase.ts +3 -3
- package/src/ListGroupHeaderTemplate.tsx +228 -0
- package/src/ListItem.ts +5 -4
- package/src/ListItemBase.ts +9 -4
- package/src/ListItemTemplate.tsx +193 -0
- package/src/ListSelectAll.ts +4 -5
- package/src/ListSelectAllTemplate.tsx +38 -0
- package/src/ListTemplate.tsx +60 -0
- package/src/MediaPlayer.ts +6 -0
- package/src/SelectBox.ts +34 -0
- package/src/SelectBoxTemplate.tsx +2 -0
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/themes/Breadcrumbs.css.ts +1 -1
- package/src/generated/themes/BreadcrumbsPopover.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/ListGroupHeader.css.ts +1 -1
- package/src/i18n/messagebundle.properties +1 -0
- package/src/i18n/messagebundle_en.properties +1 -0
- package/src/i18n/messagebundle_it.properties +123 -0
- package/src/i18n/messagebundle_ja.properties +127 -1
- package/src/i18n/messagebundle_ko.properties +126 -0
- package/src/i18n/messagebundle_lt.properties +126 -0
- package/src/i18n/messagebundle_lv.properties +9 -0
- package/src/themes/Breadcrumbs.css +46 -5
- package/src/themes/BreadcrumbsPopover.css +65 -0
- package/src/themes/Footer.css +98 -1
- package/src/themes/Link.css +127 -8
- package/src/themes/ListGroupHeader.css +6 -3
- package/src/types/FooterAskJoulePosition.ts +6 -0
- package/dist/assets/messagebundle_en-DoNTK1BE.js +0 -1
- package/dist/assets/messagebundle_it-BhrBdOd4.js +0 -1
- package/dist/assets/messagebundle_ja-5P5L7sQ1.js +0 -1
- package/dist/assets/messagebundle_ko-B9H5YQlC.js +0 -1
- package/dist/assets/messagebundle_lt-BJ5gr_LF.js +0 -1
- package/dist/assets/messagebundle_lv-D06tlATH.js +0 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +0 -30
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListItemTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListItemTemplate.lit.js +0 -49
- package/dist/generated/templates/ListItemTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListSelectAllTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListSelectAllTemplate.lit.js +0 -7
- package/dist/generated/templates/ListSelectAllTemplate.lit.js.map +0 -1
- package/dist/generated/templates/ListTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/ListTemplate.lit.js +0 -11
- package/dist/generated/templates/ListTemplate.lit.js.map +0 -1
- package/src/List.hbs +0 -38
- package/src/ListGroupHeader.hbs +0 -188
- package/src/ListItem.hbs +0 -166
- package/src/ListSelectAll.hbs +0 -31
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +0 -34
- package/src/generated/templates/ListItemTemplate.lit.ts +0 -53
- package/src/generated/templates/ListSelectAllTemplate.lit.ts +0 -11
- package/src/generated/templates/ListTemplate.lit.ts +0 -15
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
|
|
2
|
+
import type UDExListGroupHeader from "./ListGroupHeader.js";
|
|
3
|
+
import UDExListItem from "./ListItem.js";
|
|
4
|
+
import UDExButton from "./Button.js";
|
|
5
|
+
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
6
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
7
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
8
|
+
import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
9
|
+
|
|
10
|
+
function SingleGroupHeader(this: UDExListGroupHeader) {
|
|
11
|
+
return (
|
|
12
|
+
<div class={`udex-list__group-content udex-list__group-header-wrap ${this.sizeClass}`} part="group-item">
|
|
13
|
+
{this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
|
|
14
|
+
{this.typeCircle && <span class="udex-list__circle">•</span>}
|
|
15
|
+
{this.typeIcon && (
|
|
16
|
+
<Icon
|
|
17
|
+
class="udex-list__icon"
|
|
18
|
+
accessible-role="presentation"
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
part="icon"
|
|
21
|
+
name={this._icon}
|
|
22
|
+
/>
|
|
23
|
+
)}
|
|
24
|
+
<div class="udex-list__header">
|
|
25
|
+
<span
|
|
26
|
+
id="group-heading"
|
|
27
|
+
class="udex-list__header-title"
|
|
28
|
+
{...({ innerHTML: this.label } as object)}>
|
|
29
|
+
</span>
|
|
30
|
+
{this.supportingText && (
|
|
31
|
+
<span class={`udex-list__supporting-text ${this.sizeClass}`}>{this.supportingText}</span>
|
|
32
|
+
)}
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function SingleGroupHeaderCollapsible(this: UDExListGroupHeader) {
|
|
39
|
+
return (
|
|
40
|
+
<div
|
|
41
|
+
class={`udex-list__group-content udex-list__group-header-wrap ${this.sizeClass}`}
|
|
42
|
+
part="group-item"
|
|
43
|
+
id={`${this._id}_group-content__focusable`}
|
|
44
|
+
role={this.singleCollapsibleHeaderRole as AriaRole}
|
|
45
|
+
tabIndex={0}
|
|
46
|
+
onKeyDown={this.handleKeyDown}
|
|
47
|
+
aria-expanded={this.expanded}
|
|
48
|
+
aria-controls={this.ariaControlsId}
|
|
49
|
+
_tab-index={Number(this._effectiveTabIndex)}>
|
|
50
|
+
{this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
|
|
51
|
+
{this.typeCircle && <span class="udex-list__circle">•</span>}
|
|
52
|
+
{this.typeIcon && (
|
|
53
|
+
<Icon
|
|
54
|
+
name={this._icon}
|
|
55
|
+
class="udex-list__icon"
|
|
56
|
+
accessible-role="presentation"
|
|
57
|
+
aria-hidden="true"
|
|
58
|
+
part="icon"
|
|
59
|
+
/>
|
|
60
|
+
)}
|
|
61
|
+
<div class="udex-list__header">
|
|
62
|
+
<span
|
|
63
|
+
id="group-heading"
|
|
64
|
+
class="udex-list__header-title"
|
|
65
|
+
{...({ innerHTML: this.label } as object)}>
|
|
66
|
+
</span>
|
|
67
|
+
{this.supportingText && (
|
|
68
|
+
<span class={`udex-list__supporting-text ${this.sizeClass}`}>{this.supportingText}</span>
|
|
69
|
+
)}
|
|
70
|
+
</div>
|
|
71
|
+
<div class="udex-list__group-heading__icon-wrapper">
|
|
72
|
+
<UDExButton
|
|
73
|
+
size="Small"
|
|
74
|
+
design="Tertiary"
|
|
75
|
+
class="udex-list__group-heading__icon"
|
|
76
|
+
onClick={this.handleCollapseIconClick as unknown as EventListener}
|
|
77
|
+
tabindex={-1}
|
|
78
|
+
accessible-name={this.expandButtonAccessibleName}
|
|
79
|
+
icon={slimArrowRight}
|
|
80
|
+
{...({ "mode": "Interactive" } as object)}
|
|
81
|
+
/>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function MultiOrRadioGroupHeader(this: UDExListGroupHeader) {
|
|
88
|
+
if (this.isNonActiveHeader) {
|
|
89
|
+
return (
|
|
90
|
+
<header id="group-heading" class="udex-list__inactive-header udex-list__group-header-wrap">
|
|
91
|
+
<div class="udex-list__inactive-header-content">
|
|
92
|
+
<span class="udex-list__header-title" {...({ innerHTML: this.label } as object)}></span>
|
|
93
|
+
{this.supportingText && (
|
|
94
|
+
<span class="udex-list__supporting-text">{this.supportingText}</span>
|
|
95
|
+
)}
|
|
96
|
+
</div>
|
|
97
|
+
</header>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
return (
|
|
101
|
+
<UDExListItem
|
|
102
|
+
id="group-heading"
|
|
103
|
+
part="group-item"
|
|
104
|
+
role="none"
|
|
105
|
+
selected={this.selected}
|
|
106
|
+
indeterminate={this.indeterminate}
|
|
107
|
+
class={this.className}
|
|
108
|
+
mode={this.mode}
|
|
109
|
+
controlled={this.controlled}
|
|
110
|
+
onClick={this.handleHeaderPress}
|
|
111
|
+
onKeyDown={this.handleKeyDownPress}
|
|
112
|
+
type={this.type}
|
|
113
|
+
label={this.label}
|
|
114
|
+
size={this.size}
|
|
115
|
+
supportingText={this.supportingText}
|
|
116
|
+
accessible-role={this.nonCollapsibleHeaderAccessibleRole}
|
|
117
|
+
_additional-class-name={this._additionalClassName}
|
|
118
|
+
_tab-index={Number(this._effectiveTabIndex)}
|
|
119
|
+
_icon={this._icon}
|
|
120
|
+
_filtered={this._filtered}
|
|
121
|
+
/>
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function MultiOrRadioGroupHeaderCollapsible(this: UDExListGroupHeader) {
|
|
126
|
+
if (this.isNonActiveHeader) {
|
|
127
|
+
return (
|
|
128
|
+
<header
|
|
129
|
+
role="button"
|
|
130
|
+
id="group-heading"
|
|
131
|
+
class="udex-list__inactive-header udex-list__group-header-wrap"
|
|
132
|
+
tabIndex={Number(this._effectiveTabIndex)}
|
|
133
|
+
aria-expanded={this.expanded}
|
|
134
|
+
aria-controls={this.ariaControlsId}>
|
|
135
|
+
<div class="udex-list__inactive-header-content">
|
|
136
|
+
<span class="udex-list__header-title" {...({ innerHTML: this.label } as object)}></span>
|
|
137
|
+
{this.supportingText && (
|
|
138
|
+
<span class="udex-list__supporting-text">{this.supportingText}</span>
|
|
139
|
+
)}
|
|
140
|
+
</div>
|
|
141
|
+
<div class="udex-list__group-heading__icon-wrapper">
|
|
142
|
+
<UDExButton
|
|
143
|
+
class="udex-list__group-heading__icon"
|
|
144
|
+
size={UDExButtonSize.Small}
|
|
145
|
+
design={UDExButtonDesign.Tertiary}
|
|
146
|
+
tabindex={-1}
|
|
147
|
+
icon={slimArrowRight}
|
|
148
|
+
onClick={this.handleCollapseIconClick as EventListener}
|
|
149
|
+
accessible-name={this.expandButtonAccessibleName}
|
|
150
|
+
{...({ "mode": "Interactive" } as object)}
|
|
151
|
+
/>
|
|
152
|
+
</div>
|
|
153
|
+
</header>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
return (
|
|
157
|
+
<UDExListItem
|
|
158
|
+
id="group-heading"
|
|
159
|
+
part="group-item"
|
|
160
|
+
role="none"
|
|
161
|
+
aria-expanded={this.expanded}
|
|
162
|
+
aria-controls={this.ariaControlsId}
|
|
163
|
+
selected={this.selected}
|
|
164
|
+
indeterminate={this.indeterminate}
|
|
165
|
+
collapsible={this.collapsible}
|
|
166
|
+
collapsed={this.collapsed}
|
|
167
|
+
class={this.className}
|
|
168
|
+
mode={this.mode}
|
|
169
|
+
controlled={this.controlled}
|
|
170
|
+
onClick={this.handleHeaderPress}
|
|
171
|
+
onKeyDown={this.handleKeyDownPress}
|
|
172
|
+
type={this.type}
|
|
173
|
+
label={this.label}
|
|
174
|
+
size={this.size}
|
|
175
|
+
supportingText={this.supportingText}
|
|
176
|
+
accessible-role={this.collapsibleHeaderAccessibleRole}
|
|
177
|
+
onAccordionIconClick={this.handleCollapseIconClick as EventListener}
|
|
178
|
+
_additional-class-name={this._additionalClassName}
|
|
179
|
+
_tab-index={Number(this._effectiveTabIndex)}
|
|
180
|
+
_icon={this._icon}
|
|
181
|
+
_filtered={this._filtered}
|
|
182
|
+
/>
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export default function ListGroupHeaderTemplate(this: UDExListGroupHeader) {
|
|
187
|
+
return (
|
|
188
|
+
<div
|
|
189
|
+
part="item"
|
|
190
|
+
class="udex-list__group"
|
|
191
|
+
role={this.groupWrapperRole as AriaRole}
|
|
192
|
+
aria-labelledby={!this.isTreeAccessibleRole ? "group-heading" : undefined}>
|
|
193
|
+
{this.collapsible ? (
|
|
194
|
+
<div
|
|
195
|
+
class="udex-list__group-list"
|
|
196
|
+
onui5-item-press={this.getHandleGroupItemsClick}
|
|
197
|
+
{...({ name: "group" } as object)}>
|
|
198
|
+
{this.useListItemHeader
|
|
199
|
+
? MultiOrRadioGroupHeaderCollapsible.call(this)
|
|
200
|
+
: SingleGroupHeaderCollapsible.call(this)
|
|
201
|
+
}
|
|
202
|
+
<div id={this.ariaControlsId} role={this.contentRegionRole as AriaRole} class="udex-list__group-list__content">
|
|
203
|
+
{this.isTreeAccessibleRole ? (
|
|
204
|
+
<slot></slot>
|
|
205
|
+
) : (
|
|
206
|
+
<div role="listbox" aria-label="group">
|
|
207
|
+
<slot></slot>
|
|
208
|
+
</div>
|
|
209
|
+
)}
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
) : (
|
|
213
|
+
<div
|
|
214
|
+
role={this.nonCollapsibleContainerRole as AriaRole}
|
|
215
|
+
class="udex-list__group-list"
|
|
216
|
+
aria-label="group"
|
|
217
|
+
onui5-item-press={this.getHandleGroupItemsClick}
|
|
218
|
+
{...({ name: "group" } as object)}>
|
|
219
|
+
{this.modeMultiSelectOrRadioGroup
|
|
220
|
+
? MultiOrRadioGroupHeader.call(this)
|
|
221
|
+
: SingleGroupHeader.call(this)
|
|
222
|
+
}
|
|
223
|
+
<slot></slot>
|
|
224
|
+
</div>
|
|
225
|
+
)}
|
|
226
|
+
</div>
|
|
227
|
+
);
|
|
228
|
+
}
|
package/src/ListItem.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
2
2
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
3
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
4
|
+
import type { Slot, DefaultSlot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
3
5
|
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
4
6
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
5
|
-
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
6
7
|
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
7
8
|
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
8
9
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
@@ -24,11 +25,10 @@ import {
|
|
|
24
25
|
} from "./generated/i18n/i18n-defaults.js";
|
|
25
26
|
import translate from "./utils/translate.js";
|
|
26
27
|
|
|
27
|
-
import ListItemTemplate from "./
|
|
28
|
+
import ListItemTemplate from "./ListItemTemplate.js";
|
|
28
29
|
|
|
29
30
|
// Styles
|
|
30
31
|
import ListItemCss from "./generated/themes/ListItem.css.js";
|
|
31
|
-
import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
32
32
|
|
|
33
33
|
const listItemClass: string = "udex-list__item";
|
|
34
34
|
const listItemRole: string = "option";
|
|
@@ -64,7 +64,8 @@ type UDExListItemItemPressEventDetail = {
|
|
|
64
64
|
|
|
65
65
|
@customElement({
|
|
66
66
|
tag: "udex-list-item",
|
|
67
|
-
|
|
67
|
+
languageAware: true,
|
|
68
|
+
renderer: jsxRenderer,
|
|
68
69
|
styles: ListItemCss,
|
|
69
70
|
template: ListItemTemplate,
|
|
70
71
|
dependencies: [
|
package/src/ListItemBase.ts
CHANGED
|
@@ -2,7 +2,7 @@ import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
|
2
2
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
3
|
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
4
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
5
|
-
import
|
|
5
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
6
6
|
import { UDExListItemSize, UDExListMode, UDExListStyleType } from "./types/List.js";
|
|
7
7
|
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
8
8
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
@@ -37,7 +37,7 @@ type UDExListItemBaseAccordionClickEventDetail = {
|
|
|
37
37
|
* @public
|
|
38
38
|
*/
|
|
39
39
|
@customElement({
|
|
40
|
-
renderer:
|
|
40
|
+
renderer: jsxRenderer,
|
|
41
41
|
})
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -261,17 +261,22 @@ class UDExListItemBase extends UI5Element {
|
|
|
261
261
|
@i18n("@sapudex/web-components")
|
|
262
262
|
static i18nBundle: I18nBundle;
|
|
263
263
|
|
|
264
|
-
|
|
264
|
+
onAfterRendering() {
|
|
265
265
|
if (!this.collapsible) {
|
|
266
266
|
return;
|
|
267
267
|
}
|
|
268
268
|
this.contentElement = this.shadowRoot?.querySelector<HTMLElement>(".udex-list__group-list__content");
|
|
269
269
|
if (this.contentElement) {
|
|
270
|
-
ResizeHandler.register(this.contentElement, this._resizeHandler);
|
|
271
270
|
this.setContentHeight();
|
|
272
271
|
}
|
|
273
272
|
}
|
|
274
273
|
|
|
274
|
+
onEnterDOM() {
|
|
275
|
+
if (this.contentElement && this.collapsible) {
|
|
276
|
+
ResizeHandler.register(this.contentElement, this._resizeHandler);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
275
280
|
onExitDOM(): void {
|
|
276
281
|
if (this.contentElement && this.collapsible) {
|
|
277
282
|
ResizeHandler.deregister(this.contentElement, this._resizeHandler);
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
|
|
2
|
+
import type UDExListItem from "./ListItem.js";
|
|
3
|
+
import UDExCheckbox from "./Checkbox.js";
|
|
4
|
+
import UDExRadioButton from "./RadioButton.js";
|
|
5
|
+
import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
6
|
+
import UDExAvatar from "./Avatar.js";
|
|
7
|
+
import UDExStatusBadge from "./StatusBadge.js";
|
|
8
|
+
import UDExRatingIndicator from "./RatingIndicator.js";
|
|
9
|
+
import UDExButton from "./Button.js";
|
|
10
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
11
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
12
|
+
import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
13
|
+
|
|
14
|
+
function ContentList(this: UDExListItem) {
|
|
15
|
+
return (
|
|
16
|
+
<div
|
|
17
|
+
class="udex-list__content-wrap"
|
|
18
|
+
{...({ "_id": this._id } as object)}
|
|
19
|
+
aria-labelledby={`${this._id}-invisibleText`}
|
|
20
|
+
aria-label={this.accessibleListItemName}>
|
|
21
|
+
{this.flag && (
|
|
22
|
+
<div class="udex-list__flag-wrap">
|
|
23
|
+
<span class="udex-list__flag" style={{ backgroundPosition: this.flagPosition }}></span>
|
|
24
|
+
</div>
|
|
25
|
+
)}
|
|
26
|
+
{this.typeNumber && <span class="udex-list__number">{this.numberOfItem}.</span>}
|
|
27
|
+
{this.typeCircle && <span class="udex-list__circle">•</span>}
|
|
28
|
+
{this.typeIcon && (
|
|
29
|
+
<Icon
|
|
30
|
+
name={this._icon}
|
|
31
|
+
class="udex-list__icon"
|
|
32
|
+
accessible-role="presentation"
|
|
33
|
+
aria-hidden="true"
|
|
34
|
+
part="icon"
|
|
35
|
+
/>
|
|
36
|
+
)}
|
|
37
|
+
{this.image && (
|
|
38
|
+
<UDExAvatar
|
|
39
|
+
class="udex-list__avatar"
|
|
40
|
+
part="avatar"
|
|
41
|
+
shape={this.imageShape}
|
|
42
|
+
size={this.imageSize}>
|
|
43
|
+
{this.imageBadgeState && (
|
|
44
|
+
<UDExStatusBadge
|
|
45
|
+
slot="badge"
|
|
46
|
+
value-state={this.imageBadgeState}
|
|
47
|
+
size={this.imageSize}
|
|
48
|
+
/>
|
|
49
|
+
)}
|
|
50
|
+
<img src={this.image} alt={this.imageAlt} />
|
|
51
|
+
</UDExAvatar>
|
|
52
|
+
)}
|
|
53
|
+
<div class="udex-list__content" part="content">
|
|
54
|
+
{this.label ? (
|
|
55
|
+
<>
|
|
56
|
+
<div class="udex-list__text-holder">
|
|
57
|
+
<span part="title" {...({ innerHTML: this.label } as object)}></span>
|
|
58
|
+
{this.supportingText && (
|
|
59
|
+
<span class="udex-list__supporting-text" part="supporting">{this.supportingText}</span>
|
|
60
|
+
)}
|
|
61
|
+
<slot part="content"></slot>
|
|
62
|
+
{this.hasRating && (
|
|
63
|
+
<UDExRatingIndicator
|
|
64
|
+
aria-label={this.ratingAriaLabel}
|
|
65
|
+
value={this.rating !== undefined ? Number(this.rating) : undefined}
|
|
66
|
+
rating-count={this.ratingCount}
|
|
67
|
+
total-count={this.totalCount}
|
|
68
|
+
max={this.ratingMax}
|
|
69
|
+
display={this._displayRating}
|
|
70
|
+
disabled
|
|
71
|
+
readonly
|
|
72
|
+
/>
|
|
73
|
+
)}
|
|
74
|
+
</div>
|
|
75
|
+
{this.additionalText && (
|
|
76
|
+
<div class="udex-list__add-text" part="additional-text">{this.additionalText}</div>
|
|
77
|
+
)}
|
|
78
|
+
<div class="udex-list__btn-wrap">
|
|
79
|
+
{this.hasFirstIcon && <slot name="firstIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
80
|
+
{this.hasSecondIcon && <slot name="secondIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
81
|
+
</div>
|
|
82
|
+
</>
|
|
83
|
+
) : (
|
|
84
|
+
<>
|
|
85
|
+
<div class="udex-list__text-holder">
|
|
86
|
+
<slot part="content"></slot>
|
|
87
|
+
{this.supportingText && (
|
|
88
|
+
<span class="udex-list__supporting-text" part="supporting">{this.supportingText}</span>
|
|
89
|
+
)}
|
|
90
|
+
{this.hasRating && (
|
|
91
|
+
<UDExRatingIndicator
|
|
92
|
+
aria-label={this.ratingAriaLabel}
|
|
93
|
+
value={this.rating !== undefined ? Number(this.rating) : undefined}
|
|
94
|
+
rating-count={this.ratingCount}
|
|
95
|
+
total-count={this.totalCount}
|
|
96
|
+
max={this.ratingMax}
|
|
97
|
+
display={this._displayRating}
|
|
98
|
+
disabled
|
|
99
|
+
readonly
|
|
100
|
+
/>
|
|
101
|
+
)}
|
|
102
|
+
</div>
|
|
103
|
+
{this.additionalText && (
|
|
104
|
+
<div class="udex-list__add-text" part="additional-text">{this.additionalText}</div>
|
|
105
|
+
)}
|
|
106
|
+
<div class="udex-list__btn-wrap">
|
|
107
|
+
{this.hasFirstIcon && <slot name="firstIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
108
|
+
{this.hasSecondIcon && <slot name="secondIcon" onClick={this._fireIconClickEvent as EventListener}></slot>}
|
|
109
|
+
</div>
|
|
110
|
+
</>
|
|
111
|
+
)}
|
|
112
|
+
{this.collapsible && (
|
|
113
|
+
<div class="udex-list__group-heading__icon-wrapper">
|
|
114
|
+
<UDExButton
|
|
115
|
+
class="udex-list__group-heading__icon"
|
|
116
|
+
size={UDExButtonSize.Small}
|
|
117
|
+
design={UDExButtonDesign.Tertiary}
|
|
118
|
+
onMouseDown={this.handleCollapseIconMouseDown}
|
|
119
|
+
onClick={this.handleCollapseIconClick as EventListener}
|
|
120
|
+
tabindex={-1}
|
|
121
|
+
accessible-name={this.expandButtonAccessibleName}
|
|
122
|
+
{...({ "mode": "Interactive" } as object)}
|
|
123
|
+
icon={slimArrowRight}
|
|
124
|
+
/>
|
|
125
|
+
</div>
|
|
126
|
+
)}
|
|
127
|
+
</div>
|
|
128
|
+
<div class="hidden" id={`${this._id}-invisibleText`}>{this.accessibleListItemName}</div>
|
|
129
|
+
<div class="hidden" id={`${this._id}-invisibleText-describedby`}>{this.itemState}</div>
|
|
130
|
+
</div>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export default function ListItemTemplate(this: UDExListItem) {
|
|
135
|
+
return (
|
|
136
|
+
<>
|
|
137
|
+
{this.modeSelected && (
|
|
138
|
+
<div
|
|
139
|
+
part="item"
|
|
140
|
+
tabIndex={Number(this._effectiveTabIndex)}
|
|
141
|
+
aria-disabled={this._ariaDisabled}
|
|
142
|
+
class={this.className}
|
|
143
|
+
role={this.roleItem as AriaRole}
|
|
144
|
+
aria-checked={this.ariaCheckedValue}
|
|
145
|
+
aria-selected={this.ariaSelectedValue}
|
|
146
|
+
aria-expanded={this.ariaExpandedValue}
|
|
147
|
+
onFocusIn={this.handleFocusIn}
|
|
148
|
+
onFocusOut={this.handleFocusOut}
|
|
149
|
+
onClick={this.handleItemClick}
|
|
150
|
+
onMouseDown={this.handleMouseDown}
|
|
151
|
+
onMouseUp={this.handleMouseUp}
|
|
152
|
+
onKeyUp={this.handleKeyUp}
|
|
153
|
+
onKeyDown={this.handleKeyDown}
|
|
154
|
+
{...({ divider: this.divider, "_id": this._id } as object)}
|
|
155
|
+
data-selected={this.selected}
|
|
156
|
+
aria-describedby={this.itemDescribedBy}>
|
|
157
|
+
{this.modeMultiSelect && (
|
|
158
|
+
<UDExCheckbox
|
|
159
|
+
class="udex-list__checkbox"
|
|
160
|
+
part="checkbox"
|
|
161
|
+
tabindex={-1}
|
|
162
|
+
indeterminate={this.indeterminate}
|
|
163
|
+
accessible-name={`checkbox ${this.stateAccessibleName}`}
|
|
164
|
+
checked={this.selected}
|
|
165
|
+
disabled={this.disabled}
|
|
166
|
+
aria-hidden={this.checkboxAriaHidden ? "true" : undefined}
|
|
167
|
+
/>
|
|
168
|
+
)}
|
|
169
|
+
{this.modeRadioGroup && (
|
|
170
|
+
<UDExRadioButton
|
|
171
|
+
class="udex-list__radio"
|
|
172
|
+
part="radio"
|
|
173
|
+
tabindex={-1}
|
|
174
|
+
accessible-name={`radio ${this.stateAccessibleName}`}
|
|
175
|
+
checked={this.selected}
|
|
176
|
+
disabled={this.disabled}
|
|
177
|
+
/>
|
|
178
|
+
)}
|
|
179
|
+
{ContentList.call(this)}
|
|
180
|
+
</div>
|
|
181
|
+
)}
|
|
182
|
+
{this.modeSingleContent && (
|
|
183
|
+
<div
|
|
184
|
+
part="item"
|
|
185
|
+
role={this.roleItem as AriaRole}
|
|
186
|
+
aria-selected={this.selected}
|
|
187
|
+
class={this.className}>
|
|
188
|
+
{ContentList.call(this)}
|
|
189
|
+
</div>
|
|
190
|
+
)}
|
|
191
|
+
</>
|
|
192
|
+
);
|
|
193
|
+
}
|
package/src/ListSelectAll.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
2
2
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
3
|
-
import
|
|
3
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
4
4
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
5
5
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
6
6
|
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
7
7
|
import UDExListGroupHeaderBase from "./ListGroupHeaderBase.js";
|
|
8
8
|
import { UDExListMode } from "./types/List.js";
|
|
9
9
|
import { SELECT_ALL } from "./generated/i18n/i18n-defaults.js";
|
|
10
|
-
import ListSelectAllTemplate from "./
|
|
11
|
-
import UDExListItem from "./ListItem.js";
|
|
10
|
+
import ListSelectAllTemplate from "./ListSelectAllTemplate.js";
|
|
12
11
|
import type { UDExListItemBaseEvents } from "./ListItemBase.js";
|
|
13
12
|
import translate from "./utils/translate.js";
|
|
14
13
|
|
|
@@ -41,10 +40,10 @@ type UDExListSelectAllSelectAllEventDetail = {
|
|
|
41
40
|
*/
|
|
42
41
|
@customElement({
|
|
43
42
|
tag: "udex-list-select-all",
|
|
44
|
-
renderer:
|
|
43
|
+
renderer: jsxRenderer,
|
|
44
|
+
languageAware: true,
|
|
45
45
|
styles: ListGroupHeaderCss,
|
|
46
46
|
template: ListSelectAllTemplate,
|
|
47
|
-
dependencies: [UDExListItem],
|
|
48
47
|
})
|
|
49
48
|
/**
|
|
50
49
|
* Fired when the user clicks on the Select All header.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type UDExListSelectAll from "./ListSelectAll.js";
|
|
2
|
+
import UDExListItem from "./ListItem.js";
|
|
3
|
+
|
|
4
|
+
export default function ListSelectAllTemplate(this: UDExListSelectAll) {
|
|
5
|
+
return (
|
|
6
|
+
<div
|
|
7
|
+
part="item"
|
|
8
|
+
class="udex-list__group"
|
|
9
|
+
role="group"
|
|
10
|
+
aria-labelledby="group-select-all">
|
|
11
|
+
<div
|
|
12
|
+
role="listbox"
|
|
13
|
+
aria-label="select-all-group"
|
|
14
|
+
class={this.groupListClassName}
|
|
15
|
+
onui5-item-press={this.handleSelectAllGroupItemsPress}>
|
|
16
|
+
<UDExListItem
|
|
17
|
+
role="group"
|
|
18
|
+
part="group-item"
|
|
19
|
+
accessible-role="option"
|
|
20
|
+
mode={this.multiselectMode}
|
|
21
|
+
onClick={this.handleSelectAllPress}
|
|
22
|
+
class={this.className}
|
|
23
|
+
selected={this.selected}
|
|
24
|
+
aria-current={this.selected}
|
|
25
|
+
indeterminate={this.indeterminate}
|
|
26
|
+
controlled={this.controlled}
|
|
27
|
+
onKeyDown={this.handleKeyDownPress}
|
|
28
|
+
_tab-index={Number(this._effectiveTabIndex)}
|
|
29
|
+
_additional-class-name={this.additionalClassName}
|
|
30
|
+
supportingText={this.supportingText}
|
|
31
|
+
divider>
|
|
32
|
+
{this.selectAllLabel}
|
|
33
|
+
</UDExListItem>
|
|
34
|
+
<slot></slot>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type UDExList from "./List.js";
|
|
2
|
+
import type { AriaRole } from "@ui5/webcomponents-base/types.js";
|
|
3
|
+
|
|
4
|
+
export default function ListTemplate(this: UDExList) {
|
|
5
|
+
return (
|
|
6
|
+
<>
|
|
7
|
+
{this.modeSelected && (
|
|
8
|
+
<div
|
|
9
|
+
class="udex-list-root"
|
|
10
|
+
onKeyDown={this.handleKeyDown}
|
|
11
|
+
style={{ height: this.holderHeight }}
|
|
12
|
+
onui5-item-press={this.handleItemPress}
|
|
13
|
+
onui5-header-press={this.handleItemPress}>
|
|
14
|
+
<div class="udex-list__scroll-container">
|
|
15
|
+
{HeaderText.call(this)}
|
|
16
|
+
<span id={`${this._id}-mode-label`} class="udex-list__hidden-text">
|
|
17
|
+
{this.ariaLabelModeText}
|
|
18
|
+
</span>
|
|
19
|
+
<div
|
|
20
|
+
id="udex-list"
|
|
21
|
+
class="udex-list"
|
|
22
|
+
role={this.effectiveAccessibleRole as AriaRole}
|
|
23
|
+
aria-labelledby={this.ariaLabelledBy}
|
|
24
|
+
aria-multiselectable={this._listAriaMultiSelectable as "true" | undefined}
|
|
25
|
+
aria-busy={(this.ariaBusy ?? undefined) as "true" | "false" | undefined}>
|
|
26
|
+
<slot></slot>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
)}
|
|
31
|
+
{this.modeSingleContent && (
|
|
32
|
+
<>
|
|
33
|
+
{HeaderText.call(this)}
|
|
34
|
+
<div
|
|
35
|
+
id="udex-list"
|
|
36
|
+
class="udex-list"
|
|
37
|
+
role={this.accessibleRole as AriaRole}
|
|
38
|
+
aria-label={this.singleContentAriaLabel}
|
|
39
|
+
aria-busy={(this.ariaBusy ?? undefined) as "true" | "false" | undefined}>
|
|
40
|
+
<slot></slot>
|
|
41
|
+
</div>
|
|
42
|
+
</>
|
|
43
|
+
)}
|
|
44
|
+
</>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function HeaderText(this: UDExList) {
|
|
49
|
+
if (!this.headerText) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return (
|
|
53
|
+
<header
|
|
54
|
+
id={`${this._id}-mode-label`}
|
|
55
|
+
class="udex-list__header-text"
|
|
56
|
+
part="header">
|
|
57
|
+
{this.headerText}
|
|
58
|
+
</header>
|
|
59
|
+
);
|
|
60
|
+
}
|
package/src/MediaPlayer.ts
CHANGED
|
@@ -371,6 +371,9 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
371
371
|
});
|
|
372
372
|
|
|
373
373
|
player.on("ended", () => {
|
|
374
|
+
this.video25 = false;
|
|
375
|
+
this.video50 = false;
|
|
376
|
+
this.video75 = false;
|
|
374
377
|
this.fireDecoratorEvent("videoComplete");
|
|
375
378
|
});
|
|
376
379
|
|
|
@@ -621,6 +624,9 @@ class UDExMediaPlayer extends UI5Element {
|
|
|
621
624
|
|
|
622
625
|
handleEmbedVideoEnded() {
|
|
623
626
|
this._embedVideoStartFired = false;
|
|
627
|
+
this.video25 = false;
|
|
628
|
+
this.video50 = false;
|
|
629
|
+
this.video75 = false;
|
|
624
630
|
this.fireDecoratorEvent("videoComplete");
|
|
625
631
|
}
|
|
626
632
|
|