@sapudex/web-components 2.10.0 → 2.12.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/profile-menu.ts +75 -0
- package/cypress/specs/Accordion.cy.tsx +19 -0
- package/cypress/specs/AccordionItem.cy.tsx +9 -0
- package/cypress/specs/Footer.cy.tsx +48 -11
- package/cypress/specs/ListItem.cy.tsx +66 -52
- package/cypress/specs/MastheadProfileMenu.cy.tsx +174 -0
- package/cypress/specs/PromoTile.cy.tsx +124 -0
- package/cypress/specs/Quote.cy.tsx +65 -0
- package/cypress/specs/SelectBox.cy.tsx +134 -66
- package/cypress/support/component-imports.instrumented.ts +8 -0
- package/cypress/support/component-imports.src.ts +9 -1
- package/dist/Accordion.d.ts +15 -0
- package/dist/Accordion.js +19 -0
- package/dist/Accordion.js.map +1 -1
- package/dist/AccordionItem.d.ts +19 -0
- package/dist/AccordionItem.js +23 -0
- package/dist/AccordionItem.js.map +1 -1
- package/dist/AccordionItemTemplate.js +7 -2
- package/dist/AccordionItemTemplate.js.map +1 -1
- package/dist/AccordionTemplate.js +21 -1
- package/dist/AccordionTemplate.js.map +1 -1
- package/dist/Button.d.ts +8 -0
- package/dist/Button.js +11 -0
- package/dist/Button.js.map +1 -1
- package/dist/Footer.d.ts +45 -3
- package/dist/Footer.js +41 -17
- package/dist/Footer.js.map +1 -1
- package/dist/List.d.ts +9 -2
- package/dist/List.js +19 -8
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.d.ts +2 -1
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListItem.d.ts +12 -1
- package/dist/ListItem.js +15 -1
- package/dist/ListItem.js.map +1 -1
- package/dist/ListItemBase.d.ts +10 -0
- package/dist/ListItemBase.js +31 -0
- package/dist/ListItemBase.js.map +1 -1
- package/dist/ListSelectAll.d.ts +2 -1
- package/dist/ListSelectAll.js.map +1 -1
- package/dist/MastheadItem.d.ts +2 -0
- package/dist/MastheadItem.js +6 -0
- package/dist/MastheadItem.js.map +1 -1
- package/dist/MastheadProfileMenu.d.ts +67 -3
- package/dist/MastheadProfileMenu.js +164 -10
- package/dist/MastheadProfileMenu.js.map +1 -1
- package/dist/MastheadShell.d.ts +1 -0
- package/dist/MastheadShell.js +6 -1
- package/dist/MastheadShell.js.map +1 -1
- package/dist/PromoTile.d.ts +143 -0
- package/dist/PromoTile.js +198 -0
- package/dist/PromoTile.js.map +1 -0
- package/dist/PromoTileTemplate.d.ts +2 -0
- package/dist/PromoTileTemplate.js +22 -0
- package/dist/PromoTileTemplate.js.map +1 -0
- package/dist/Quote.d.ts +11 -0
- package/dist/Quote.js +18 -3
- package/dist/Quote.js.map +1 -1
- package/dist/Search.d.ts +3 -1
- package/dist/Search.js +1 -0
- package/dist/Search.js.map +1 -1
- package/dist/SearchableListBase.d.ts +16 -0
- package/dist/SearchableListBase.js +31 -1
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SelectBox.js +10 -0
- package/dist/SelectBox.js.map +1 -1
- package/dist/SelectBoxItem.d.ts +29 -0
- package/dist/SelectBoxItem.js +26 -0
- package/dist/SelectBoxItem.js.map +1 -1
- package/dist/StatusBadge.d.ts +1 -7
- package/dist/StatusBadge.js +1 -8
- package/dist/StatusBadge.js.map +1 -1
- package/dist/StepInputTemplate.js +1 -1
- package/dist/StepInputTemplate.js.map +1 -1
- package/dist/assets/{InputSuggestions-xcV7PZDf.js → InputSuggestions-DtUQULbo.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-RYCr4pVL.js → ListItemStandardExpandableTextTemplate-B62PaSFk.js} +1 -1
- package/dist/assets/{bundle.esm-bg-64miJ.js → bundle.esm-Ba8g4ech.js} +211 -210
- package/dist/assets/messagebundle_en-PmkE-Vht.js +1 -0
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/BreadcrumbsPopover.css +1 -1
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/CountrySelector.css +1 -1
- package/dist/css/themes/Divider.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/HeroBanner.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/MastheadProfileMenu.css +1 -1
- package/dist/css/themes/PromoTile.css +1 -0
- package/dist/css/themes/Quote.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/css/themes/StepInput.css +1 -1
- package/dist/css/themes/Tag.css +1 -1
- package/dist/custom-elements-internal.json +1515 -277
- package/dist/custom-elements.json +1220 -146
- package/dist/generated/assets/i18n/messagebundle_en.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +7 -1
- package/dist/generated/i18n/i18n-defaults.js +7 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/FooterTemplate.lit.js +33 -32
- package/dist/generated/templates/FooterTemplate.lit.js.map +1 -1
- package/dist/generated/templates/HeroBannerTemplate.lit.js +1 -1
- package/dist/generated/templates/HeroBannerTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +31 -23
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListTemplate.lit.js +2 -2
- package/dist/generated/templates/ListTemplate.lit.js.map +1 -1
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js +11 -6
- package/dist/generated/templates/MastheadProfileMenuTemplate.lit.js.map +1 -1
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js +6 -6
- package/dist/generated/templates/SearchableListBaseTemplate.lit.js.map +1 -1
- package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
- package/dist/generated/themes/AccordionItem.css.js +1 -1
- package/dist/generated/themes/AccordionItem.css.js.map +1 -1
- package/dist/generated/themes/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/Button.css.d.ts +1 -1
- package/dist/generated/themes/Button.css.js +1 -1
- package/dist/generated/themes/Button.css.js.map +1 -1
- package/dist/generated/themes/CountrySelector.css.d.ts +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/Divider.css.d.ts +1 -1
- package/dist/generated/themes/Divider.css.js +1 -1
- package/dist/generated/themes/Divider.css.js.map +1 -1
- package/dist/generated/themes/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/HeroBanner.css.d.ts +1 -1
- package/dist/generated/themes/HeroBanner.css.js +1 -1
- package/dist/generated/themes/HeroBanner.css.js.map +1 -1
- package/dist/generated/themes/ListItem.css.d.ts +1 -1
- package/dist/generated/themes/ListItem.css.js +1 -1
- package/dist/generated/themes/ListItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.d.ts +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js +1 -1
- package/dist/generated/themes/MastheadProfileMenu.css.js.map +1 -1
- package/dist/generated/themes/PromoTile.css.d.ts +2 -0
- package/dist/generated/themes/PromoTile.css.js +8 -0
- package/dist/generated/themes/PromoTile.css.js.map +1 -0
- package/dist/generated/themes/Quote.css.d.ts +1 -1
- package/dist/generated/themes/Quote.css.js +1 -1
- package/dist/generated/themes/Quote.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/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/StepInput.css.d.ts +1 -1
- package/dist/generated/themes/StepInput.css.js +1 -1
- package/dist/generated/themes/StepInput.css.js.map +1 -1
- package/dist/generated/themes/Tag.css.d.ts +1 -1
- package/dist/generated/themes/Tag.css.js +1 -1
- package/dist/generated/themes/Tag.css.js.map +1 -1
- package/dist/messagebundle.properties +10 -0
- package/dist/messagebundle_en.properties +6 -0
- package/dist/types/PromoTile.d.ts +60 -0
- package/dist/types/PromoTile.js +63 -0
- package/dist/types/PromoTile.js.map +1 -0
- package/dist/types/StatusBadgeValueState.d.ts +8 -0
- package/dist/types/StatusBadgeValueState.js +10 -0
- package/dist/types/StatusBadgeValueState.js.map +1 -0
- package/dist/utils/debounce.d.ts +3 -1
- package/dist/utils/debounce.js +16 -4
- package/dist/utils/debounce.js.map +1 -1
- package/dist/vscode.html-custom-data.json +185 -16
- package/dist/web-types.json +603 -34
- package/package.json +1 -1
- package/src/Accordion.ts +19 -0
- package/src/AccordionItem.ts +28 -0
- package/src/AccordionItemTemplate.tsx +25 -10
- package/src/AccordionTemplate.tsx +22 -1
- package/src/Button.ts +10 -0
- package/src/Footer.hbs +39 -36
- package/src/Footer.ts +81 -6
- package/src/HeroBanner.hbs +0 -1
- package/src/List.hbs +0 -2
- package/src/List.ts +27 -8
- package/src/ListGroupHeader.ts +2 -1
- package/src/ListItem.hbs +16 -2
- package/src/ListItem.ts +29 -2
- package/src/ListItemBase.ts +42 -0
- package/src/ListSelectAll.ts +2 -1
- package/src/MastheadItem.ts +9 -0
- package/src/MastheadProfileMenu.hbs +79 -15
- package/src/MastheadProfileMenu.ts +228 -13
- package/src/MastheadShell.ts +7 -1
- package/src/PromoTile.ts +290 -0
- package/src/PromoTileTemplate.tsx +68 -0
- package/src/Quote.ts +17 -3
- package/src/Search.ts +1 -0
- package/src/SearchableListBase.hbs +18 -1
- package/src/SearchableListBase.ts +47 -1
- package/src/SelectBox.ts +11 -0
- package/src/SelectBoxItem.ts +39 -0
- package/src/StatusBadge.ts +1 -8
- package/src/StepInputTemplate.tsx +1 -1
- package/src/generated/i18n/i18n-defaults.ts +2 -2
- package/src/generated/templates/FooterTemplate.lit.ts +33 -32
- package/src/generated/templates/HeroBannerTemplate.lit.ts +1 -1
- package/src/generated/templates/ListItemTemplate.lit.ts +31 -23
- package/src/generated/templates/ListTemplate.lit.ts +2 -2
- package/src/generated/templates/MastheadProfileMenuTemplate.lit.ts +10 -5
- package/src/generated/templates/SearchableListBaseTemplate.lit.ts +6 -6
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/BreadcrumbsPopover.css.ts +1 -1
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/CountrySelector.css.ts +1 -1
- package/src/generated/themes/Divider.css.ts +1 -1
- package/src/generated/themes/Footer.css.ts +1 -1
- package/src/generated/themes/HeroBanner.css.ts +1 -1
- package/src/generated/themes/ListItem.css.ts +1 -1
- package/src/generated/themes/MastheadProfileMenu.css.ts +1 -1
- package/src/generated/themes/PromoTile.css.ts +9 -0
- package/src/generated/themes/Quote.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/generated/themes/StepInput.css.ts +1 -1
- package/src/generated/themes/Tag.css.ts +1 -1
- package/src/i18n/messagebundle.properties +10 -0
- package/src/i18n/messagebundle_en.properties +6 -0
- package/src/themes/AccordionItem.css +61 -22
- package/src/themes/BreadcrumbsPopover.css +2 -1
- package/src/themes/Button.css +13 -0
- package/src/themes/CountrySelector.css +4 -0
- package/src/themes/Divider.css +2 -1
- package/src/themes/Footer.css +44 -9
- package/src/themes/HeroBanner.css +34 -32
- package/src/themes/ListItem.css +4 -9
- package/src/themes/MastheadProfileMenu.css +87 -3
- package/src/themes/PromoTile.css +152 -0
- package/src/themes/Quote.css +21 -24
- package/src/themes/StepInput.css +10 -0
- package/src/themes/Tag.css +18 -24
- package/src/types/PromoTile.ts +61 -0
- package/src/types/StatusBadgeValueState.ts +9 -0
- package/src/utils/debounce.ts +19 -4
- package/dist/assets/messagebundle_en-BHfPJk-2.js +0 -1
package/src/PromoTile.ts
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
|
+
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
6
|
+
import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
7
|
+
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
8
|
+
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
9
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
10
|
+
import PromoTileTemplate from "./PromoTileTemplate.js";
|
|
11
|
+
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
12
|
+
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
13
|
+
import { PROMO_TILE, PROMO_TILE_ICON } from "./generated/i18n/i18n-defaults.js";
|
|
14
|
+
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
15
|
+
import type UDExButton from "./Button.js";
|
|
16
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
17
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
18
|
+
import { UDExPromoTileColorSheme, UDExPromoTileMode } from "./types/PromoTile.js";
|
|
19
|
+
|
|
20
|
+
// Styles
|
|
21
|
+
import PromoTileCss from "./generated/themes/PromoTile.css.js";
|
|
22
|
+
|
|
23
|
+
export enum UDExOrientation {
|
|
24
|
+
Vertical = "Vertical",
|
|
25
|
+
Horizontal = "Horizontal",
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @class
|
|
30
|
+
*
|
|
31
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
32
|
+
*
|
|
33
|
+
*
|
|
34
|
+
* <h3>Usage</h3>
|
|
35
|
+
*
|
|
36
|
+
* For the <code>udex-promo-tile</code>
|
|
37
|
+
* <h3>ES6 Module Import</h3>
|
|
38
|
+
*
|
|
39
|
+
* <code>import "@sapudex/web-components/dist/PromoTile.js";</code>
|
|
40
|
+
*
|
|
41
|
+
* @constructor
|
|
42
|
+
* @extends UI5Element
|
|
43
|
+
* @tagname udex-promo-tile
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
@customElement({
|
|
47
|
+
tag: "udex-promo-tile",
|
|
48
|
+
renderer: jsxRenderer,
|
|
49
|
+
styles: PromoTileCss,
|
|
50
|
+
template: PromoTileTemplate,
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Triggered when the user clicks on the CTA button
|
|
55
|
+
*
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
@event("button-click", { cancelable: true, bubbles: true })
|
|
59
|
+
|
|
60
|
+
class UDExPromoTile extends UI5Element {
|
|
61
|
+
eventDetails!: {
|
|
62
|
+
"button-click": void,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Defines the text content of the Promo Tile.
|
|
67
|
+
*
|
|
68
|
+
* @slot content
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
71
|
+
@slot({ type: HTMLElement, "default": true })
|
|
72
|
+
content!: Array<HTMLElement>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Defines the orientation of the Promo Tile component.
|
|
76
|
+
*
|
|
77
|
+
* @type {string}
|
|
78
|
+
* @defaultvalue "Vertical"
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
81
|
+
@property({ type: String })
|
|
82
|
+
orientation: `${UDExOrientation}` = UDExOrientation.Vertical;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Defines the UI5 icon name in the pictogram section.
|
|
86
|
+
*
|
|
87
|
+
* @type {string}
|
|
88
|
+
* @defaultvalue ""
|
|
89
|
+
* @public
|
|
90
|
+
*/
|
|
91
|
+
@property({ type: String })
|
|
92
|
+
icon?: string;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Defines the image aria label and alt in the pictogram section.
|
|
96
|
+
*
|
|
97
|
+
* @type {string}
|
|
98
|
+
* @defaultvalue ""
|
|
99
|
+
* @public
|
|
100
|
+
*/
|
|
101
|
+
@property({ type: String })
|
|
102
|
+
imageLabel?: string;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Defines the logo URL in the pictogram section.
|
|
106
|
+
*
|
|
107
|
+
* @type {string}
|
|
108
|
+
* @defaultvalue ""
|
|
109
|
+
* @public
|
|
110
|
+
*/
|
|
111
|
+
@property({ type: String })
|
|
112
|
+
logoUrl?: string;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Defines the header text of the promo tile.
|
|
116
|
+
*
|
|
117
|
+
* @type {string}
|
|
118
|
+
* @defaultvalue ""
|
|
119
|
+
* @public
|
|
120
|
+
*/
|
|
121
|
+
@property({ type: String })
|
|
122
|
+
header?: string;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Defines the eyebrow text of the promo tile.
|
|
126
|
+
*
|
|
127
|
+
* @type {string}
|
|
128
|
+
* @defaultvalue ""
|
|
129
|
+
* @public
|
|
130
|
+
*/
|
|
131
|
+
@property({ type: String })
|
|
132
|
+
eyebrow?: string;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Defines the CTA button label
|
|
136
|
+
*
|
|
137
|
+
* @type {string}
|
|
138
|
+
* @defaultvalue ""
|
|
139
|
+
* @public
|
|
140
|
+
*/
|
|
141
|
+
@property({ type: String })
|
|
142
|
+
button?: string;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Defines the CTA button design
|
|
146
|
+
*
|
|
147
|
+
* @type {string}
|
|
148
|
+
* @defaultvalue ""
|
|
149
|
+
* @public
|
|
150
|
+
*/
|
|
151
|
+
@property({ type: String })
|
|
152
|
+
buttonDesign?: UDExButtonDesign;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Defines the color scheme of the Promo Tile.
|
|
156
|
+
*
|
|
157
|
+
* @type {string}
|
|
158
|
+
* @defaultvalue ""
|
|
159
|
+
* @public
|
|
160
|
+
*/
|
|
161
|
+
@property({ type: String })
|
|
162
|
+
colorScheme?: UDExPromoTileColorSheme;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Defines the accessible name of the component.
|
|
166
|
+
*
|
|
167
|
+
* @type {string}
|
|
168
|
+
* @defaultvalue ""
|
|
169
|
+
* @public
|
|
170
|
+
*/
|
|
171
|
+
@property({ type: String })
|
|
172
|
+
accessibleName?: string;
|
|
173
|
+
|
|
174
|
+
@i18n("@sapudex/web-components")
|
|
175
|
+
static i18nBundle: I18nBundle;
|
|
176
|
+
|
|
177
|
+
_handleResizeBound: ResizeObserverCallback;
|
|
178
|
+
_button: UDExButton | undefined;
|
|
179
|
+
_colorMode: UDExPromoTileMode = UDExPromoTileMode.light;
|
|
180
|
+
_lightModeColors: Array<number> = [1, 2];
|
|
181
|
+
_darkModeColors: Array<number> = [7, 8, 9, 10];
|
|
182
|
+
|
|
183
|
+
constructor() {
|
|
184
|
+
super();
|
|
185
|
+
this._handleResizeBound = this._handleResize.bind(this);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
onEnterDOM(): void {
|
|
189
|
+
if (isDesktop()) {
|
|
190
|
+
this.setAttribute("desktop", "");
|
|
191
|
+
}
|
|
192
|
+
ResizeHandler.register(this, this._handleResizeBound);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
onExitDOM(): void {
|
|
196
|
+
ResizeHandler.deregister(this, this._handleResizeBound);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
onAfterRendering() {
|
|
200
|
+
this._button = this.getButton();
|
|
201
|
+
this.applyColorScheme();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
_handleResize(): void {
|
|
205
|
+
if (this._button) {
|
|
206
|
+
this._button.size = this.isMobile ? UDExButtonSize.Medium : UDExButtonSize.Large;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
getButton(): UDExButton | undefined {
|
|
211
|
+
return this.shadowRoot!.querySelector<UDExButton>(
|
|
212
|
+
"[udex-button]",
|
|
213
|
+
)!;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
applyColorScheme(): void {
|
|
217
|
+
if (!this.colorScheme) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
this._colorMode = this.checkColorMode(this.colorScheme);
|
|
222
|
+
const eyebrowColor = this.checkEyebrowColor(this.colorScheme);
|
|
223
|
+
|
|
224
|
+
if (this._colorMode === UDExPromoTileMode.dark) {
|
|
225
|
+
if (this._button) {
|
|
226
|
+
this._button.design = this.buttonDesign || UDExButtonDesign.Secondary;
|
|
227
|
+
}
|
|
228
|
+
this.style.setProperty("--udex-promo-tile-icon-fill-color", `var(--udexCoreTextLight)`);
|
|
229
|
+
}
|
|
230
|
+
this.style.setProperty("--udex-promo-tile-background", `var(--udexColor${this.colorScheme})`);
|
|
231
|
+
this.style.setProperty("--udex-promo-tile-eyebrow-color", `var(--udexColor${eyebrowColor})`);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
getColorNumber(colorScheme: string): number {
|
|
235
|
+
const match = colorScheme.match(/\d+/);
|
|
236
|
+
return match ? parseInt(match[0]) : 0;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
checkColorMode(colorScheme: string): UDExPromoTileMode {
|
|
240
|
+
const number = this.getColorNumber(colorScheme);
|
|
241
|
+
|
|
242
|
+
if (number && this._darkModeColors.includes(number)) {
|
|
243
|
+
return UDExPromoTileMode.dark;
|
|
244
|
+
}
|
|
245
|
+
return UDExPromoTileMode.light;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
checkEyebrowColor(colorScheme: string): string {
|
|
249
|
+
const number = this.getColorNumber(colorScheme);
|
|
250
|
+
let color: string = UDExPromoTileColorSheme.Blue8;
|
|
251
|
+
|
|
252
|
+
if (number === 7) {
|
|
253
|
+
color = "NeutralWhite";
|
|
254
|
+
} else if (this._darkModeColors.includes(number)) {
|
|
255
|
+
color = colorScheme.replace(`${number}`, `${number - 7}`);
|
|
256
|
+
} else if (this._lightModeColors.includes(number)) {
|
|
257
|
+
color = colorScheme.replace(`${number}`, `${number + 7}`);
|
|
258
|
+
}
|
|
259
|
+
return color;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
get isMobile(): boolean {
|
|
263
|
+
return BreakpointUtils.isAtMost("S");
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
get promoTileContainerText(): string {
|
|
267
|
+
return this.accessibleName || this.header || UDExPromoTile.i18nBundle.getText(PROMO_TILE);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
get _showPictogram(): boolean {
|
|
271
|
+
return !!this.icon || !!this.logoUrl;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
get _showLogo(): boolean {
|
|
275
|
+
return !this.icon && !!this.logoUrl;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
get _imageLabel(): string {
|
|
279
|
+
return this.imageLabel || UDExPromoTile.i18nBundle.getText(PROMO_TILE_ICON);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
handleCTAButtonClick(e: Event) {
|
|
283
|
+
e.preventDefault();
|
|
284
|
+
this.fireDecoratorEvent("button-click");
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
UDExPromoTile.define();
|
|
289
|
+
|
|
290
|
+
export default UDExPromoTile;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type UDExPromoTile from "./PromoTile.js";
|
|
2
|
+
import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
3
|
+
import IconMode from "@ui5/webcomponents/dist/types/IconMode.js";
|
|
4
|
+
import UDExButton from "./Button.js";
|
|
5
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
6
|
+
import UDExButtonAccessibleRole from "./types/ButtonAccessibleRole.js";
|
|
7
|
+
|
|
8
|
+
export default function PromoTileTemplate(this: UDExPromoTile) {
|
|
9
|
+
const rootClass = "udex-promo-tile";
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
role="region"
|
|
14
|
+
class={`${rootClass}__container ${rootClass}--${this.orientation?.toLowerCase()} ${rootClass}--${this._colorMode}`}
|
|
15
|
+
aria-label={this.promoTileContainerText}>
|
|
16
|
+
{this._showPictogram &&
|
|
17
|
+
<div
|
|
18
|
+
part="image"
|
|
19
|
+
class={{
|
|
20
|
+
"udex-promo-tile__pictogram": true,
|
|
21
|
+
"udex-promo-tile__pictogram--logo": this.logoUrl
|
|
22
|
+
}}
|
|
23
|
+
title={this._imageLabel}>
|
|
24
|
+
{this.icon &&
|
|
25
|
+
<UI5Icon
|
|
26
|
+
class={`${rootClass}__icon`}
|
|
27
|
+
name={this.icon?.toLowerCase()}
|
|
28
|
+
mode={IconMode.Decorative}
|
|
29
|
+
accessibleName={this._imageLabel}>
|
|
30
|
+
</UI5Icon>}
|
|
31
|
+
{this._showLogo &&
|
|
32
|
+
<img
|
|
33
|
+
src={this.logoUrl}
|
|
34
|
+
class={`${rootClass}__icon`}
|
|
35
|
+
aria-label={this._imageLabel}
|
|
36
|
+
alt={this._imageLabel} />}
|
|
37
|
+
</div>
|
|
38
|
+
}
|
|
39
|
+
<div part="content" class={`${rootClass}__content`}>
|
|
40
|
+
<div class={`${rootClass}__text`}>
|
|
41
|
+
{this.eyebrow &&
|
|
42
|
+
<div class={`${rootClass}__eyebrow eyebrow--l`}>{this.eyebrow}</div>
|
|
43
|
+
}
|
|
44
|
+
{this.header &&
|
|
45
|
+
<div part="header" class={`${rootClass}__header`}>{this.header}</div>
|
|
46
|
+
}
|
|
47
|
+
<slot></slot>
|
|
48
|
+
</div>
|
|
49
|
+
{!!this.button && footerSection.call(this, rootClass)}
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
function footerSection(this: UDExPromoTile, rootClass: string) {
|
|
55
|
+
return (
|
|
56
|
+
<>
|
|
57
|
+
<div part="footer" class={`${rootClass}__footer`}>
|
|
58
|
+
<UDExButton class={`${rootClass}__btn`}
|
|
59
|
+
size={UDExButtonSize.Large}
|
|
60
|
+
design={this.buttonDesign}
|
|
61
|
+
onClick={this.handleCTAButtonClick}
|
|
62
|
+
accessibleRole={UDExButtonAccessibleRole.Button}>
|
|
63
|
+
{this.button}
|
|
64
|
+
</UDExButton>
|
|
65
|
+
</div>
|
|
66
|
+
</>
|
|
67
|
+
);
|
|
68
|
+
}
|
package/src/Quote.ts
CHANGED
|
@@ -20,6 +20,11 @@ export enum UDExMaskType {
|
|
|
20
20
|
rectangle = "rectangle"
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
export enum UDExImagePlacement {
|
|
24
|
+
left = "left",
|
|
25
|
+
right = "right"
|
|
26
|
+
}
|
|
27
|
+
|
|
23
28
|
/**
|
|
24
29
|
* @class
|
|
25
30
|
*
|
|
@@ -82,7 +87,7 @@ class UDExQuote extends UI5Element {
|
|
|
82
87
|
* @default "large"
|
|
83
88
|
*/
|
|
84
89
|
@property()
|
|
85
|
-
imageSize: `${UDExSizeType}` =
|
|
90
|
+
imageSize: `${UDExSizeType}` = UDExSizeType.large;
|
|
86
91
|
|
|
87
92
|
/**
|
|
88
93
|
* Defines text size
|
|
@@ -91,7 +96,7 @@ class UDExQuote extends UI5Element {
|
|
|
91
96
|
* @default "large"
|
|
92
97
|
*/
|
|
93
98
|
@property()
|
|
94
|
-
textSize: `${UDExSizeType}` =
|
|
99
|
+
textSize: `${UDExSizeType}` = UDExSizeType.large;
|
|
95
100
|
|
|
96
101
|
/**
|
|
97
102
|
* Defines image mask
|
|
@@ -100,7 +105,16 @@ class UDExQuote extends UI5Element {
|
|
|
100
105
|
* @default "avatar"
|
|
101
106
|
*/
|
|
102
107
|
@property()
|
|
103
|
-
mask: `${UDExMaskType}` =
|
|
108
|
+
mask: `${UDExMaskType}` = UDExMaskType.avatar;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Defines image placement
|
|
112
|
+
*
|
|
113
|
+
* @public
|
|
114
|
+
* @default "left"
|
|
115
|
+
*/
|
|
116
|
+
@property()
|
|
117
|
+
imagePlacement: `${UDExImagePlacement}` = UDExImagePlacement.left;
|
|
104
118
|
}
|
|
105
119
|
|
|
106
120
|
UDExQuote.define();
|
package/src/Search.ts
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
role="{{roleForGroupList}}"
|
|
31
31
|
accessible-role="{{accessibleRoleForList}}"
|
|
32
32
|
class="udex-filter-menu__list"
|
|
33
|
+
?tab-navigation-enabled="{{tabNavigationEnabled}}"
|
|
33
34
|
?controlled="{{isControlled}}"
|
|
34
35
|
mode="{{mode}}">
|
|
35
36
|
{{#each _filteredItems}}
|
|
@@ -43,7 +44,9 @@
|
|
|
43
44
|
supporting-text="{{this.item.supportingText}}"
|
|
44
45
|
?disabled="{{this.item.disabled}}"
|
|
45
46
|
?selected="{{this.item.selected}}"
|
|
46
|
-
?indeterminate="{{this.item.indeterminate}}"
|
|
47
|
+
?indeterminate="{{this.item.indeterminate}}"
|
|
48
|
+
@ui5-first-icon-click="{{../fireFirstIconClickEvent}}"
|
|
49
|
+
@ui5-second-icon-click="{{../fireSecondIconClickEvent}}">
|
|
47
50
|
{{#each this.groupItems}}
|
|
48
51
|
<udex-list-item
|
|
49
52
|
role="{{../listItemRole}}"
|
|
@@ -51,7 +54,11 @@
|
|
|
51
54
|
data-token-id="{{this._id}}"
|
|
52
55
|
?controlled="{{this.controlled}}"
|
|
53
56
|
mode="{{this.mode}}"
|
|
57
|
+
@ui5-first-icon-click="{{../fireFirstIconClickEvent}}"
|
|
58
|
+
@ui5-second-icon-click="{{../fireSecondIconClickEvent}}"
|
|
54
59
|
supporting-text="{{this.supportingText}}"
|
|
60
|
+
additional-text="{{this.additionalText}}"
|
|
61
|
+
additional-text-state="{{this.additionalTextState}}"
|
|
55
62
|
?divider="{{this.divider}}"
|
|
56
63
|
?disabled="{{this.disabled}}"
|
|
57
64
|
?selected="{{this.selected}}"
|
|
@@ -72,6 +79,8 @@
|
|
|
72
79
|
?controlled="{{this.item.controlled}}"
|
|
73
80
|
?disabled="{{this.item.disabled}}"
|
|
74
81
|
?selected="{{this.item.selected}}"
|
|
82
|
+
@ui5-first-icon-click="{{../fireFirstIconClickEvent}}"
|
|
83
|
+
@ui5-second-icon-click="{{../fireSecondIconClickEvent}}"
|
|
75
84
|
?indeterminate="{{this.item.indeterminate}}">
|
|
76
85
|
{{#each this.groupItems}}
|
|
77
86
|
<udex-list-item
|
|
@@ -80,6 +89,10 @@
|
|
|
80
89
|
?controlled="{{this.controlled}}"
|
|
81
90
|
mode="{{this.mode}}"
|
|
82
91
|
supporting-text="{{this.supportingText}}"
|
|
92
|
+
additional-text="{{this.additionalText}}"
|
|
93
|
+
additional-text-state="{{this.additionalTextState}}"
|
|
94
|
+
@ui5-first-icon-click="{{../fireFirstIconClickEvent}}"
|
|
95
|
+
@ui5-second-icon-click="{{../fireSecondIconClickEvent}}"
|
|
83
96
|
?divider="{{this.divider}}"
|
|
84
97
|
?disabled="{{this.disabled}}"
|
|
85
98
|
?selected="{{this.selected}}"
|
|
@@ -92,8 +105,12 @@
|
|
|
92
105
|
{{else}}
|
|
93
106
|
<udex-list-item
|
|
94
107
|
role="none"
|
|
108
|
+
@ui5-first-icon-click="{{../fireFirstIconClickEvent}}"
|
|
109
|
+
@ui5-second-icon-click="{{../fireSecondIconClickEvent}}"
|
|
95
110
|
data-token-id="{{this.item._id}}"
|
|
96
111
|
supporting-text="{{this.item.supportingText}}"
|
|
112
|
+
additional-text="{{this.item.additionalText}}"
|
|
113
|
+
additional-text-state="{{this.item.additionalTextState}}"
|
|
97
114
|
?disabled="{{this.item.disabled}}"
|
|
98
115
|
?controlled="{{this.controlled}}"
|
|
99
116
|
?divider="{{this.divider}}"
|
|
@@ -36,6 +36,13 @@ export type UDExSearchableListBaseEvents = {
|
|
|
36
36
|
"submit-search": UDExSearchableListBaseSubmitSearchEventDetail,
|
|
37
37
|
"reset-search": void,
|
|
38
38
|
"change-search": UDExSearchableListBaseChangeSearchEventDetail,
|
|
39
|
+
"first-icon-click": UDExSelectBoxIconClickEventDetail,
|
|
40
|
+
"second-icon-click": UDExSelectBoxIconClickEventDetail,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
type UDExSelectBoxIconClickEventDetail = {
|
|
44
|
+
originalEvent: PointerEvent,
|
|
45
|
+
item: UDExItemFromList,
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
/**
|
|
@@ -85,8 +92,31 @@ export type UDExSearchableListBaseEvents = {
|
|
|
85
92
|
*/
|
|
86
93
|
@event("change-search", { bubbles: true })
|
|
87
94
|
|
|
95
|
+
/**
|
|
96
|
+
* Fired event when the user clicks on the first icon.
|
|
97
|
+
*
|
|
98
|
+
* @public
|
|
99
|
+
*/
|
|
100
|
+
@event("first-icon-click", { bubbles: true })
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Fired event when the user clicks on the second icon.
|
|
104
|
+
*
|
|
105
|
+
* @public
|
|
106
|
+
*/
|
|
107
|
+
@event("second-icon-click", { bubbles: true })
|
|
108
|
+
|
|
88
109
|
class UDExSearchableListBase extends UI5Element {
|
|
89
110
|
eventDetails!: UDExSearchableListBaseEvents;
|
|
111
|
+
/**
|
|
112
|
+
* Enables tab navigation for the list.
|
|
113
|
+
*
|
|
114
|
+
* @default ""
|
|
115
|
+
* @public
|
|
116
|
+
*/
|
|
117
|
+
@property({ type: Boolean })
|
|
118
|
+
tabNavigationEnabled?: boolean;
|
|
119
|
+
|
|
90
120
|
/**
|
|
91
121
|
* Allows control over the height.
|
|
92
122
|
* @public
|
|
@@ -215,7 +245,7 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
215
245
|
}
|
|
216
246
|
|
|
217
247
|
onItemPress(e:CustomEvent) {
|
|
218
|
-
const dropdownItemId: string =
|
|
248
|
+
const dropdownItemId: string = this.getDataTokenId(e);
|
|
219
249
|
this.handleDropdownItemPress(dropdownItemId);
|
|
220
250
|
this.fireSelectionChange(dropdownItemId);
|
|
221
251
|
}
|
|
@@ -458,6 +488,22 @@ class UDExSearchableListBase extends UI5Element {
|
|
|
458
488
|
}
|
|
459
489
|
}
|
|
460
490
|
|
|
491
|
+
fireFirstIconClickEvent(e: CustomEvent): void {
|
|
492
|
+
this._fireIconClickEvent("first-icon-click", e);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
fireSecondIconClickEvent(e: CustomEvent): void {
|
|
496
|
+
this._fireIconClickEvent("second-icon-click", e);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
private _fireIconClickEvent(eventName: "first-icon-click" | "second-icon-click", e: CustomEvent): void {
|
|
500
|
+
const id = this.getDataTokenId(e);
|
|
501
|
+
this.fireDecoratorEvent(eventName, {
|
|
502
|
+
originalEvent: e.detail.originalEvent,
|
|
503
|
+
item: this.getItemFromList(id),
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
|
|
461
507
|
getFlattenItemsArray(array: Array<UDExProcessedItem>): (UDExProcessedItem | UDExListItemBase)[] {
|
|
462
508
|
return array.flatMap(item => {
|
|
463
509
|
if (item.isGroup) {
|
package/src/SelectBox.ts
CHANGED
|
@@ -123,6 +123,13 @@ type UDExSelectBoxRemoveEventDetail = {
|
|
|
123
123
|
*/
|
|
124
124
|
@event("show-more", { bubbles: true })
|
|
125
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Fired before the dropdown pane is opened.
|
|
128
|
+
*
|
|
129
|
+
* @public
|
|
130
|
+
*/
|
|
131
|
+
@event("before-open", { bubbles: true })
|
|
132
|
+
|
|
126
133
|
class UDExSelectBox extends UDExSearchableListBase {
|
|
127
134
|
eventDetails!: {
|
|
128
135
|
"remove": UDExSelectBoxRemoveEventDetail,
|
|
@@ -480,6 +487,10 @@ class UDExSelectBox extends UDExSearchableListBase {
|
|
|
480
487
|
}
|
|
481
488
|
|
|
482
489
|
handleKeyDownDropdown(e: KeyboardEvent) {
|
|
490
|
+
if (this.tabNavigationEnabled) {
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
|
|
483
494
|
const isTabPrevPress = isTabPrevious(e) && !this._search;
|
|
484
495
|
const isTabNextPress = isTabNext(e);
|
|
485
496
|
const isEscapePress = isEscape(e);
|
package/src/SelectBoxItem.ts
CHANGED
|
@@ -2,6 +2,9 @@ import customElement from "@ui5/webcomponents-base/dist/decorators/customElement
|
|
|
2
2
|
import litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
|
|
3
3
|
import slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
4
4
|
import UDExListItemBase from "./ListItemBase.js";
|
|
5
|
+
import property from "@ui5/webcomponents-base/decorators/property.js";
|
|
6
|
+
import { UDExAdditionalTextState } from "./types/List.js";
|
|
7
|
+
import UDExButton from "./Button.js";
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
10
|
* @class
|
|
@@ -25,9 +28,45 @@ import UDExListItemBase from "./ListItemBase.js";
|
|
|
25
28
|
@customElement({
|
|
26
29
|
tag: "udex-select-box-item",
|
|
27
30
|
renderer: litRender,
|
|
31
|
+
dependencies: [UDExButton],
|
|
28
32
|
})
|
|
29
33
|
|
|
30
34
|
class UDExSelectBoxItem extends UDExListItemBase {
|
|
35
|
+
/**
|
|
36
|
+
* Defines the additionalText, displayed at the end of the list item.
|
|
37
|
+
*
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
@property({ type: String })
|
|
41
|
+
additionalText?: string;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Defines the state of the additionalText.
|
|
45
|
+
*
|
|
46
|
+
* @default "None"
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
@property()
|
|
50
|
+
additionalTextState: `${UDExAdditionalTextState}` = UDExAdditionalTextState.None;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Slot for first icon.
|
|
54
|
+
*
|
|
55
|
+
* @slot
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
@slot({ type: UDExButton })
|
|
59
|
+
firstIcon!: Array<UDExButton>;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Slot for second icon.
|
|
63
|
+
*
|
|
64
|
+
* @slot
|
|
65
|
+
* @public
|
|
66
|
+
*/
|
|
67
|
+
@slot({ type: UDExButton })
|
|
68
|
+
secondIcon!: Array<UDExButton>;
|
|
69
|
+
|
|
31
70
|
/**
|
|
32
71
|
* Slot for item content.
|
|
33
72
|
*
|
package/src/StatusBadge.ts
CHANGED
|
@@ -10,6 +10,7 @@ import "@ui5/webcomponents-icons/dist/edit.js";
|
|
|
10
10
|
import "@ui5/webcomponents-icons/dist/information.js";
|
|
11
11
|
import i18n from "@ui5/webcomponents-base/dist/decorators/i18n.js";
|
|
12
12
|
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
|
|
13
|
+
import UDExStatusBadgeValueState from "./types/StatusBadgeValueState.js";
|
|
13
14
|
import {
|
|
14
15
|
STATUS_BADGE_TEXT,
|
|
15
16
|
STATUS_BADGE_EDIT_TITLE,
|
|
@@ -40,14 +41,6 @@ export enum BadgeSize {
|
|
|
40
41
|
XL = "XL",
|
|
41
42
|
}
|
|
42
43
|
|
|
43
|
-
export enum UDExStatusBadgeValueState {
|
|
44
|
-
Warning = "Warning",
|
|
45
|
-
Error = "Error",
|
|
46
|
-
Success = "Success",
|
|
47
|
-
Information = "Information",
|
|
48
|
-
Edit = "Edit"
|
|
49
|
-
}
|
|
50
|
-
|
|
51
44
|
/**
|
|
52
45
|
* @class
|
|
53
46
|
*
|