@sapudex/web-components 2.7.2 → 2.9.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 +2 -0
- package/cypress/specs/EventRibbon.cy.tsx +25 -6
- package/cypress/specs/LinkList.cy.tsx +49 -0
- package/cypress/specs/LinkListItem.cy.tsx +102 -0
- package/cypress/support/component-imports.instrumented.ts +4 -0
- package/cypress/support/component-imports.src.ts +4 -0
- package/dist/EventRibbon.d.ts +15 -1
- package/dist/EventRibbon.js +11 -3
- package/dist/EventRibbon.js.map +1 -1
- package/dist/EventRibbonTemplate.js +5 -1
- package/dist/EventRibbonTemplate.js.map +1 -1
- package/dist/LinkList.d.ts +58 -0
- package/dist/LinkList.js +89 -0
- package/dist/LinkList.js.map +1 -0
- package/dist/LinkListItem.d.ts +78 -0
- package/dist/LinkListItem.js +97 -0
- package/dist/LinkListItem.js.map +1 -0
- package/dist/LinkListItemTemplate.d.ts +2 -0
- package/dist/LinkListItemTemplate.js +17 -0
- package/dist/LinkListItemTemplate.js.map +1 -0
- package/dist/LinkListTemplate.d.ts +2 -0
- package/dist/LinkListTemplate.js +5 -0
- package/dist/LinkListTemplate.js.map +1 -0
- package/dist/Tile.d.ts +2 -2
- package/dist/Tile.js +3 -3
- package/dist/Tile.js.map +1 -1
- package/dist/TileTemplate.d.ts +2 -0
- package/dist/TileTemplate.js +7 -0
- package/dist/TileTemplate.js.map +1 -0
- package/dist/assets/{InputSuggestions-D0OZo5eY.js → InputSuggestions-BmjyLzkP.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-BOc_KoW1.js → ListItemStandardExpandableTextTemplate-CDt3iORy.js} +1 -1
- package/dist/assets/{bundle.esm-BLn1Dq6A.js → bundle.esm-Dz11sAJe.js} +205 -203
- package/dist/css/themes/EventRibbon.css +1 -1
- package/dist/css/themes/LinkList.css +1 -0
- package/dist/css/themes/LinkListItem.css +1 -0
- package/dist/css/themes/ListGroupHeader.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/ProgressBar.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/Slider.css +1 -1
- package/dist/custom-elements-internal.json +345 -2
- package/dist/custom-elements.json +327 -2
- package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
- package/dist/generated/themes/EventRibbon.css.js +1 -1
- package/dist/generated/themes/EventRibbon.css.js.map +1 -1
- package/dist/generated/themes/LinkList.css.d.ts +2 -0
- package/dist/generated/themes/LinkList.css.js +8 -0
- package/dist/generated/themes/LinkList.css.js.map +1 -0
- package/dist/generated/themes/LinkListItem.css.d.ts +2 -0
- package/dist/generated/themes/LinkListItem.css.js +8 -0
- package/dist/generated/themes/LinkListItem.css.js.map +1 -0
- 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/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/ProgressBar.css.d.ts +1 -1
- package/dist/generated/themes/ProgressBar.css.js +1 -1
- package/dist/generated/themes/ProgressBar.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/vscode.html-custom-data.json +83 -1
- package/dist/web-types.json +163 -3
- package/package.json +1 -1
- package/src/EventRibbon.ts +24 -5
- package/src/EventRibbonTemplate.tsx +17 -6
- package/src/LinkList.ts +93 -0
- package/src/LinkListItem.ts +126 -0
- package/src/LinkListItemTemplate.tsx +52 -0
- package/src/LinkListTemplate.tsx +13 -0
- package/src/Tile.ts +5 -5
- package/src/TileTemplate.tsx +31 -0
- package/src/generated/themes/EventRibbon.css.ts +1 -1
- package/src/generated/themes/LinkList.css.ts +9 -0
- package/src/generated/themes/LinkListItem.css.ts +9 -0
- package/src/generated/themes/ListGroupHeader.css.ts +1 -1
- package/src/generated/themes/ListItem.css.ts +1 -1
- package/src/generated/themes/ProgressBar.css.ts +1 -1
- package/src/generated/themes/RatingIndicator.css.ts +1 -1
- package/src/generated/themes/Slider.css.ts +1 -1
- package/src/themes/EventRibbon.css +34 -28
- package/src/themes/LinkList.css +53 -0
- package/src/themes/LinkListItem.css +84 -0
- package/src/themes/ListGroupHeader.css +1 -1
- package/src/themes/ListItem.css +2 -2
- package/src/themes/ProgressBar.css +2 -1
- package/dist/generated/templates/TileTemplate.lit.d.ts +0 -3
- package/dist/generated/templates/TileTemplate.lit.js +0 -9
- package/dist/generated/templates/TileTemplate.lit.js.map +0 -1
- package/src/Tile.hbs +0 -21
- package/src/generated/templates/TileTemplate.lit.ts +0 -13
package/dist/web-types.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
|
|
3
3
|
"name": "@sapudex/web-components",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.9.0",
|
|
5
5
|
"description-markup": "markdown",
|
|
6
6
|
"contributions": {
|
|
7
7
|
"html": {
|
|
@@ -1306,9 +1306,19 @@
|
|
|
1306
1306
|
"description": "<h3 class=\"comment-api-title\">Overview</h3>\n\n\n<h3>Usage</h3>\n\nFor the <code>udex-event-ribbon</code>\n<h3>ES6 Module Import</h3>\n\n<code>import \"@sapudex/web-components/dist/EventRibbon.js\";</code>\n---\n",
|
|
1307
1307
|
"doc-url": "",
|
|
1308
1308
|
"attributes": [
|
|
1309
|
+
{
|
|
1310
|
+
"name": "custom-event-logo",
|
|
1311
|
+
"description": "Defines the custom event logo image.",
|
|
1312
|
+
"value": { "type": "string | undefined", "default": "\"\"" }
|
|
1313
|
+
},
|
|
1314
|
+
{
|
|
1315
|
+
"name": "custom-event-logo-alt-text",
|
|
1316
|
+
"description": "Defines the alt text of the custom event logo image.",
|
|
1317
|
+
"value": { "type": "string | undefined", "default": "\"\"" }
|
|
1318
|
+
},
|
|
1309
1319
|
{
|
|
1310
1320
|
"name": "event-logo",
|
|
1311
|
-
"description": "Defines the
|
|
1321
|
+
"description": "Defines the event logo image.",
|
|
1312
1322
|
"value": {
|
|
1313
1323
|
"type": "\"sapphire\" | \"sapphire-stacked\" | \"connect\" | \"connect-stacked\" | \"teched\" | \"teched-stacked\" | \"now\"",
|
|
1314
1324
|
"default": "\"\""
|
|
@@ -1357,9 +1367,19 @@
|
|
|
1357
1367
|
"events": [],
|
|
1358
1368
|
"js": {
|
|
1359
1369
|
"properties": [
|
|
1370
|
+
{
|
|
1371
|
+
"name": "custom-event-logo",
|
|
1372
|
+
"description": "Defines the custom event logo image.",
|
|
1373
|
+
"value": { "type": "string | undefined" }
|
|
1374
|
+
},
|
|
1375
|
+
{
|
|
1376
|
+
"name": "custom-event-logo-alt-text",
|
|
1377
|
+
"description": "Defines the alt text of the custom event logo image.",
|
|
1378
|
+
"value": { "type": "string | undefined" }
|
|
1379
|
+
},
|
|
1360
1380
|
{
|
|
1361
1381
|
"name": "event-logo",
|
|
1362
|
-
"description": "Defines the
|
|
1382
|
+
"description": "Defines the event logo image.",
|
|
1363
1383
|
"value": {
|
|
1364
1384
|
"type": "\"sapphire\" | \"sapphire-stacked\" | \"connect\" | \"connect-stacked\" | \"teched\" | \"teched-stacked\" | \"now\""
|
|
1365
1385
|
}
|
|
@@ -2652,6 +2672,146 @@
|
|
|
2652
2672
|
"events": [],
|
|
2653
2673
|
"js": { "properties": [], "events": [] }
|
|
2654
2674
|
},
|
|
2675
|
+
{
|
|
2676
|
+
"name": "udex-link-list",
|
|
2677
|
+
"description": "<h3 class=\"comment-api-title\">Overview</h3>\n\n\n<h3>Usage</h3>\n\nFor the <code>udex-link-list</code>\n<h3>ES6 Module Import</h3>\n\n<code>import \"@sapudex/web-components/dist/LinkList.js\";</code>\n---\n\n\n### **Slots:**\n - **default** - Slot for list items.",
|
|
2678
|
+
"doc-url": "",
|
|
2679
|
+
"attributes": [
|
|
2680
|
+
{
|
|
2681
|
+
"name": "accessible-name",
|
|
2682
|
+
"description": "Defines the accessible ARIA name of the component.",
|
|
2683
|
+
"value": { "type": "string | undefined", "default": "undefined" }
|
|
2684
|
+
},
|
|
2685
|
+
{
|
|
2686
|
+
"name": "accessible-role",
|
|
2687
|
+
"description": "Defines the role of the item.",
|
|
2688
|
+
"value": { "type": "string", "default": "\"list\"" }
|
|
2689
|
+
},
|
|
2690
|
+
{
|
|
2691
|
+
"name": "type",
|
|
2692
|
+
"description": "Defines the type of the item.",
|
|
2693
|
+
"value": {
|
|
2694
|
+
"type": "\"Link\" | \"TileS\" | \"TileL\"",
|
|
2695
|
+
"default": "\"link-based\""
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
],
|
|
2699
|
+
"slots": [
|
|
2700
|
+
{ "name": "default", "description": "Slot for list items." }
|
|
2701
|
+
],
|
|
2702
|
+
"events": [],
|
|
2703
|
+
"js": {
|
|
2704
|
+
"properties": [
|
|
2705
|
+
{
|
|
2706
|
+
"name": "accessible-name",
|
|
2707
|
+
"description": "Defines the accessible ARIA name of the component.",
|
|
2708
|
+
"value": { "type": "string | undefined" }
|
|
2709
|
+
},
|
|
2710
|
+
{
|
|
2711
|
+
"name": "accessible-role",
|
|
2712
|
+
"description": "Defines the role of the item.",
|
|
2713
|
+
"value": { "type": "string" }
|
|
2714
|
+
},
|
|
2715
|
+
{
|
|
2716
|
+
"name": "type",
|
|
2717
|
+
"description": "Defines the type of the item.",
|
|
2718
|
+
"value": { "type": "\"Link\" | \"TileS\" | \"TileL\"" }
|
|
2719
|
+
}
|
|
2720
|
+
],
|
|
2721
|
+
"events": []
|
|
2722
|
+
}
|
|
2723
|
+
},
|
|
2724
|
+
{
|
|
2725
|
+
"name": "udex-link-list-item",
|
|
2726
|
+
"description": "<h3 class=\"comment-api-title\">Overview</h3>\n\n\n<h3>Usage</h3>\n\nFor the <code>udex-link-list-item</code>\n<h3>ES6 Module Import</h3>\n\n<code>import \"@sapudex/web-components/dist/LinkListItem.js\";</code>\n---\n\n\n### **Events:**\n - **item-click** - Triggered when the user clicks on an item.",
|
|
2727
|
+
"doc-url": "",
|
|
2728
|
+
"attributes": [
|
|
2729
|
+
{
|
|
2730
|
+
"name": "href",
|
|
2731
|
+
"description": "Defines the href for the item.",
|
|
2732
|
+
"value": { "type": "string | undefined", "default": "undefined" }
|
|
2733
|
+
},
|
|
2734
|
+
{
|
|
2735
|
+
"name": "target",
|
|
2736
|
+
"description": "Defines target for the item",
|
|
2737
|
+
"value": {
|
|
2738
|
+
"type": "\"_blank\" | \"_parent\" | \"_self\" | \"_top\"",
|
|
2739
|
+
"default": "\"_self\""
|
|
2740
|
+
}
|
|
2741
|
+
},
|
|
2742
|
+
{
|
|
2743
|
+
"name": "icon",
|
|
2744
|
+
"description": "Defines the icon, displayed as graphical element within the component before the item's label.",
|
|
2745
|
+
"value": { "type": "string | undefined", "default": "undefined" }
|
|
2746
|
+
},
|
|
2747
|
+
{
|
|
2748
|
+
"name": "type",
|
|
2749
|
+
"description": "Defines the type of the item.",
|
|
2750
|
+
"value": {
|
|
2751
|
+
"type": "\"Link\" | \"TileS\" | \"TileL\"",
|
|
2752
|
+
"default": "\"link\""
|
|
2753
|
+
}
|
|
2754
|
+
},
|
|
2755
|
+
{
|
|
2756
|
+
"name": "accessible-name",
|
|
2757
|
+
"description": "Defines the accessible aria-label of the component.",
|
|
2758
|
+
"value": { "type": "string | undefined", "default": "undefined" }
|
|
2759
|
+
},
|
|
2760
|
+
{
|
|
2761
|
+
"name": "label",
|
|
2762
|
+
"description": "Defines the label of the item.",
|
|
2763
|
+
"value": { "type": "string | undefined", "default": "undefined" }
|
|
2764
|
+
}
|
|
2765
|
+
],
|
|
2766
|
+
"events": [
|
|
2767
|
+
{
|
|
2768
|
+
"name": "item-click",
|
|
2769
|
+
"description": "Triggered when the user clicks on an item."
|
|
2770
|
+
}
|
|
2771
|
+
],
|
|
2772
|
+
"js": {
|
|
2773
|
+
"properties": [
|
|
2774
|
+
{
|
|
2775
|
+
"name": "href",
|
|
2776
|
+
"description": "Defines the href for the item.",
|
|
2777
|
+
"value": { "type": "string | undefined" }
|
|
2778
|
+
},
|
|
2779
|
+
{
|
|
2780
|
+
"name": "target",
|
|
2781
|
+
"description": "Defines target for the item",
|
|
2782
|
+
"value": {
|
|
2783
|
+
"type": "\"_blank\" | \"_parent\" | \"_self\" | \"_top\""
|
|
2784
|
+
}
|
|
2785
|
+
},
|
|
2786
|
+
{
|
|
2787
|
+
"name": "icon",
|
|
2788
|
+
"description": "Defines the icon, displayed as graphical element within the component before the item's label.",
|
|
2789
|
+
"value": { "type": "string | undefined" }
|
|
2790
|
+
},
|
|
2791
|
+
{
|
|
2792
|
+
"name": "type",
|
|
2793
|
+
"description": "Defines the type of the item.",
|
|
2794
|
+
"value": { "type": "\"Link\" | \"TileS\" | \"TileL\"" }
|
|
2795
|
+
},
|
|
2796
|
+
{
|
|
2797
|
+
"name": "accessible-name",
|
|
2798
|
+
"description": "Defines the accessible aria-label of the component.",
|
|
2799
|
+
"value": { "type": "string | undefined" }
|
|
2800
|
+
},
|
|
2801
|
+
{
|
|
2802
|
+
"name": "label",
|
|
2803
|
+
"description": "Defines the label of the item.",
|
|
2804
|
+
"value": { "type": "string | undefined" }
|
|
2805
|
+
}
|
|
2806
|
+
],
|
|
2807
|
+
"events": [
|
|
2808
|
+
{
|
|
2809
|
+
"name": "item-click",
|
|
2810
|
+
"description": "Triggered when the user clicks on an item."
|
|
2811
|
+
}
|
|
2812
|
+
]
|
|
2813
|
+
}
|
|
2814
|
+
},
|
|
2655
2815
|
{
|
|
2656
2816
|
"name": "udex-list",
|
|
2657
2817
|
"description": "<h3 class=\"comment-api-title\">Overview</h3>\n\n\n<h3>Usage</h3>\n\nFor the <code>udex-list</code>\n<h3>ES6 Module Import</h3>\n\n<code>import \"@sapudex/web-components/dist/List.js\";</code>\n---\n\n\n### **Slots:**\n - **default** - Slot for list items.",
|
package/package.json
CHANGED
package/src/EventRibbon.ts
CHANGED
|
@@ -40,7 +40,25 @@ import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
|
40
40
|
|
|
41
41
|
class UDExEventRibbon extends UI5Element {
|
|
42
42
|
/**
|
|
43
|
-
* Defines the
|
|
43
|
+
* Defines the custom event logo image.
|
|
44
|
+
*
|
|
45
|
+
* @default ""
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
@property({ type: String })
|
|
49
|
+
customEventLogo?: string;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Defines the alt text of the custom event logo image.
|
|
53
|
+
*
|
|
54
|
+
* @default ""
|
|
55
|
+
* @public
|
|
56
|
+
*/
|
|
57
|
+
@property({ type: String })
|
|
58
|
+
customEventLogoAltText?: string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Defines the event logo image.
|
|
44
62
|
*
|
|
45
63
|
* @default ""
|
|
46
64
|
* @public
|
|
@@ -118,8 +136,9 @@ class UDExEventRibbon extends UI5Element {
|
|
|
118
136
|
|
|
119
137
|
this.style.setProperty("--udex-event-ribbon-background-color", backgroundColor);
|
|
120
138
|
this.style.setProperty("--udex-event-ribbon-hover-background-color", backgroundColorHover);
|
|
121
|
-
|
|
122
|
-
|
|
139
|
+
if (this.backgroundImage) {
|
|
140
|
+
this.style.setProperty("--udex-event-ribbon-background-image", `url("${this.backgroundImage}")`);
|
|
141
|
+
}
|
|
123
142
|
}
|
|
124
143
|
|
|
125
144
|
handleKeyDown(e: KeyboardEvent): void {
|
|
@@ -130,11 +149,11 @@ class UDExEventRibbon extends UI5Element {
|
|
|
130
149
|
}
|
|
131
150
|
|
|
132
151
|
get eventLogoAlt(): string {
|
|
133
|
-
return eventLogoText[this.eventLogo];
|
|
152
|
+
return this.customEventLogoAltText || eventLogoText[this.eventLogo];
|
|
134
153
|
}
|
|
135
154
|
|
|
136
155
|
get eventLogoPath(): string {
|
|
137
|
-
return `https://cdn.udex.services.sap.com/dds/design-tokens/assets/logos/event-ribbon-logo-${this.eventLogo}.svg`;
|
|
156
|
+
return this.customEventLogo || `https://cdn.udex.services.sap.com/dds/design-tokens/assets/logos/event-ribbon-logo-${this.eventLogo}.svg`;
|
|
138
157
|
}
|
|
139
158
|
}
|
|
140
159
|
|
|
@@ -2,16 +2,27 @@ import Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
|
2
2
|
import type UDExEventRibbon from "./EventRibbon.js";
|
|
3
3
|
|
|
4
4
|
export default function EventRibbonTemplate(this: UDExEventRibbon) {
|
|
5
|
+
const rootClass = "udex-event-ribbon";
|
|
5
6
|
const { text, target, url } = this._eventLink;
|
|
6
7
|
return (
|
|
7
|
-
<a
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
<a
|
|
9
|
+
onKeyDown={this.handleKeyDown}
|
|
10
|
+
role="banner"
|
|
11
|
+
aria-label={this.eventText}
|
|
12
|
+
class={{
|
|
13
|
+
[`${rootClass}__container`]: true,
|
|
14
|
+
[`${rootClass}__container-with-background-image`]: this.backgroundImage
|
|
15
|
+
}}
|
|
16
|
+
target={target}
|
|
17
|
+
href={url}
|
|
18
|
+
title={text}>
|
|
19
|
+
<div class={`${rootClass}__logo`}>
|
|
20
|
+
<img class={`${rootClass}__logo-img`} src={this.eventLogoPath} alt={this.eventLogoAlt}/>
|
|
10
21
|
</div>
|
|
11
|
-
{this.eventText && <p class=
|
|
12
|
-
<div class=
|
|
22
|
+
{this.eventText && <p class={`${rootClass}__text`}>{this.eventText}</p>}
|
|
23
|
+
<div class={`${rootClass}__link-container`}>
|
|
13
24
|
{this.eventLinkIcon && <Icon name={this.eventLinkIcon}></Icon>}
|
|
14
|
-
<span>{text}</span>
|
|
25
|
+
<span class={`${rootClass}__link-text`}>{text}</span>
|
|
15
26
|
</div>
|
|
16
27
|
</a>
|
|
17
28
|
);
|
package/src/LinkList.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
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 jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
6
|
+
import type UDExLinkListItem from "./LinkListItem.js";
|
|
7
|
+
import LinkListTemplate from "./LinkListTemplate.js";
|
|
8
|
+
|
|
9
|
+
// Styles
|
|
10
|
+
import LinkListCss from "./generated/themes/LinkList.css.js";
|
|
11
|
+
|
|
12
|
+
export enum UDExLinkListType {
|
|
13
|
+
Link = "Link",
|
|
14
|
+
TileS = "TileS",
|
|
15
|
+
TileL = "TileL",
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @class
|
|
19
|
+
*
|
|
20
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
21
|
+
*
|
|
22
|
+
*
|
|
23
|
+
* <h3>Usage</h3>
|
|
24
|
+
*
|
|
25
|
+
* For the <code>udex-link-list</code>
|
|
26
|
+
* <h3>ES6 Module Import</h3>
|
|
27
|
+
*
|
|
28
|
+
* <code>import "@sapudex/web-components/dist/LinkList.js";</code>
|
|
29
|
+
*
|
|
30
|
+
* @constructor
|
|
31
|
+
* @extends UI5Element
|
|
32
|
+
* @tagname udex-link-list
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
@customElement({
|
|
36
|
+
tag: "udex-link-list",
|
|
37
|
+
renderer: jsxRenderer,
|
|
38
|
+
styles: LinkListCss,
|
|
39
|
+
template: LinkListTemplate,
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
class UDExLinkList extends UI5Element {
|
|
43
|
+
/**
|
|
44
|
+
* Defines the accessible ARIA name of the component.
|
|
45
|
+
*
|
|
46
|
+
* @default undefined
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
@property()
|
|
50
|
+
accessibleName?: string;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Defines the role of the item.
|
|
54
|
+
* @public
|
|
55
|
+
* @default "list"
|
|
56
|
+
*
|
|
57
|
+
*/
|
|
58
|
+
@property()
|
|
59
|
+
accessibleRole = "list";
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Slot for list items.
|
|
63
|
+
*
|
|
64
|
+
* @slot items
|
|
65
|
+
* @public
|
|
66
|
+
*/
|
|
67
|
+
@slot({ type: HTMLElement, "default": true })
|
|
68
|
+
items!: Array<UDExLinkListItem>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Defines the type of the item.
|
|
72
|
+
*
|
|
73
|
+
* @default "link-based"
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
@property()
|
|
77
|
+
type: `${UDExLinkListType}` = UDExLinkListType.Link;
|
|
78
|
+
|
|
79
|
+
onBeforeRendering(): void {
|
|
80
|
+
this.prepareListItems();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
prepareListItems(): void {
|
|
84
|
+
this.items.forEach(item => {
|
|
85
|
+
item.type = this.type;
|
|
86
|
+
item._accessibleRole = "listitem";
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
UDExLinkList.define();
|
|
92
|
+
|
|
93
|
+
export default UDExLinkList;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
3
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
4
|
+
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
5
|
+
import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
6
|
+
import { UDExLinkListType } from "./LinkList.js";
|
|
7
|
+
import LinkListItemTemplate from "./LinkListItemTemplate.js";
|
|
8
|
+
import { UDExTarget } from "./types/common.js";
|
|
9
|
+
|
|
10
|
+
// Styles
|
|
11
|
+
import LinkListItemCss from "./generated/themes/LinkListItem.css.js";
|
|
12
|
+
|
|
13
|
+
type UDExListLinkItemClickEventDetail = {
|
|
14
|
+
originalEvent: Event,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @class
|
|
19
|
+
*
|
|
20
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
21
|
+
*
|
|
22
|
+
*
|
|
23
|
+
* <h3>Usage</h3>
|
|
24
|
+
*
|
|
25
|
+
* For the <code>udex-link-list-item</code>
|
|
26
|
+
* <h3>ES6 Module Import</h3>
|
|
27
|
+
*
|
|
28
|
+
* <code>import "@sapudex/web-components/dist/LinkListItem.js";</code>
|
|
29
|
+
*
|
|
30
|
+
* @constructor
|
|
31
|
+
* @extends UI5Element
|
|
32
|
+
* @tagname udex-link-list-item
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
@customElement({
|
|
36
|
+
tag: "udex-link-list-item",
|
|
37
|
+
renderer: jsxRenderer,
|
|
38
|
+
styles: LinkListItemCss,
|
|
39
|
+
template: LinkListItemTemplate,
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Triggered when the user clicks on an item.
|
|
44
|
+
* @public
|
|
45
|
+
*/
|
|
46
|
+
@event("item-click", { bubbles: true })
|
|
47
|
+
|
|
48
|
+
class UDExLinkListItem extends UI5Element {
|
|
49
|
+
eventDetails!: {
|
|
50
|
+
"item-click": UDExListLinkItemClickEventDetail,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Defines the href for the item.
|
|
55
|
+
* @default undefined
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
@property()
|
|
59
|
+
href?: string;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Defines target for the item
|
|
63
|
+
* @default "_self"
|
|
64
|
+
* @public
|
|
65
|
+
*/
|
|
66
|
+
@property()
|
|
67
|
+
target: `${UDExTarget}` = UDExTarget._self;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Defines the icon, displayed as graphical element within the component before the item's label.
|
|
71
|
+
*
|
|
72
|
+
* @default undefined
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
@property()
|
|
76
|
+
icon?: string;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Defines the type of the item.
|
|
80
|
+
* @default "link"
|
|
81
|
+
* @public
|
|
82
|
+
*/
|
|
83
|
+
@property()
|
|
84
|
+
type: `${UDExLinkListType}` = UDExLinkListType.Link;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Defines the accessible aria-label of the component.
|
|
88
|
+
*
|
|
89
|
+
* @default undefined
|
|
90
|
+
* @public
|
|
91
|
+
*/
|
|
92
|
+
@property()
|
|
93
|
+
accessibleName?: string;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Defines the role of the item.
|
|
97
|
+
* @private
|
|
98
|
+
* @default "listitem"
|
|
99
|
+
*
|
|
100
|
+
*/
|
|
101
|
+
@property()
|
|
102
|
+
_accessibleRole?: string;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Defines the label of the item.
|
|
106
|
+
*
|
|
107
|
+
* @default undefined
|
|
108
|
+
* @public
|
|
109
|
+
*/
|
|
110
|
+
@property()
|
|
111
|
+
label?: string;
|
|
112
|
+
|
|
113
|
+
fireItemClickEvent(e: CustomEvent): void {
|
|
114
|
+
this.fireDecoratorEvent("item-click", {
|
|
115
|
+
originalEvent: this.isLink ? e : e.detail.originalEvent,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
get isLink(): boolean {
|
|
120
|
+
return this.type === UDExLinkListType.Link;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
UDExLinkListItem.define();
|
|
125
|
+
|
|
126
|
+
export default UDExLinkListItem;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type LinkListItem from "./LinkListItem.js";
|
|
2
|
+
import { UDExLinkListType } from "./LinkList.js";
|
|
3
|
+
import UDExDivider from "./Divider.js";
|
|
4
|
+
import UDExLink from "./Link.js";
|
|
5
|
+
import UDExTile from "./Tile.js";
|
|
6
|
+
import UI5Icon from "@ui5/webcomponents/dist/Icon.js";
|
|
7
|
+
import slimArrowRight from "@ui5/webcomponents-icons/dist/slim-arrow-right.js";
|
|
8
|
+
import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
|
|
9
|
+
|
|
10
|
+
export default function LinkListItemTemplate(this: LinkListItem) {
|
|
11
|
+
const isTileL = this.type === UDExLinkListType.TileL;
|
|
12
|
+
const rootClass = "udex-link-list-item";
|
|
13
|
+
const tileClass = isTileL ? `${rootClass}__tile-l` : `${rootClass}__tile-s`;
|
|
14
|
+
const iconClass = isTileL ? `${rootClass}__tile-icon-l` : `${rootClass}__tile-icon-s`;
|
|
15
|
+
const holderClass = isTileL ? `${rootClass}__tile-holder-l` : `${rootClass}__tile-holder-s`;
|
|
16
|
+
const textClass = isTileL ? `${rootClass}__tile-text-l` : `${rootClass}__tile-text-s`;
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div
|
|
20
|
+
className={rootClass}
|
|
21
|
+
role={this._accessibleRole as AriaRole}>
|
|
22
|
+
{this.isLink && (
|
|
23
|
+
<>
|
|
24
|
+
<UDExLink
|
|
25
|
+
class={`${rootClass}__link`}
|
|
26
|
+
endIcon={slimArrowRight}
|
|
27
|
+
accessibleName={this.accessibleName}
|
|
28
|
+
href={this.href}
|
|
29
|
+
target={this.target}
|
|
30
|
+
onClick={this.fireItemClickEvent}>
|
|
31
|
+
{this.label}
|
|
32
|
+
</UDExLink>
|
|
33
|
+
<UDExDivider class={`${rootClass}__divider`}></UDExDivider>
|
|
34
|
+
</>
|
|
35
|
+
)}
|
|
36
|
+
{!this.isLink && (
|
|
37
|
+
<UDExTile
|
|
38
|
+
class={tileClass}
|
|
39
|
+
href={this.href}
|
|
40
|
+
target={this.target}
|
|
41
|
+
accessibleName={this.accessibleName}
|
|
42
|
+
onui5-click={this.fireItemClickEvent}
|
|
43
|
+
interactive>
|
|
44
|
+
<div class={holderClass}>
|
|
45
|
+
{this.icon && <UI5Icon class={iconClass} name={this.icon}></UI5Icon>}
|
|
46
|
+
<span class={textClass}>{this.label}</span>
|
|
47
|
+
</div>
|
|
48
|
+
</UDExTile>
|
|
49
|
+
)}
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type LinkList from "./LinkList.js";
|
|
2
|
+
import type { AriaRole } from "@ui5/webcomponents-base/dist/types.js";
|
|
3
|
+
|
|
4
|
+
export default function LinkListTemplate(this: LinkList) {
|
|
5
|
+
return (
|
|
6
|
+
<div
|
|
7
|
+
className="udex-link-list"
|
|
8
|
+
role={this.accessibleRole as AriaRole}
|
|
9
|
+
aria-label={this.accessibleName}>
|
|
10
|
+
<slot></slot>
|
|
11
|
+
</div>
|
|
12
|
+
);
|
|
13
|
+
}
|
package/src/Tile.ts
CHANGED
|
@@ -2,12 +2,12 @@ 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 slot from "@ui5/webcomponents-base/dist/decorators/slot.js";
|
|
5
|
-
import
|
|
5
|
+
import jsxRenderer from "@ui5/webcomponents-base/renderer/JsxRenderer.js";
|
|
6
6
|
import { isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
|
|
7
7
|
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
8
8
|
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
9
9
|
|
|
10
|
-
import TileTemplate from "./
|
|
10
|
+
import TileTemplate from "./TileTemplate.js";
|
|
11
11
|
|
|
12
12
|
// Styles
|
|
13
13
|
import TileCss from "./generated/themes/Tile.css.js";
|
|
@@ -15,7 +15,7 @@ import TileCss from "./generated/themes/Tile.css.js";
|
|
|
15
15
|
type AnchorNode = HTMLAnchorElement | undefined | null;
|
|
16
16
|
|
|
17
17
|
type UDExTileClickEventDetail = {
|
|
18
|
-
originalEvent:
|
|
18
|
+
originalEvent: MouseEvent,
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* @class
|
|
@@ -27,7 +27,7 @@ type UDExTileClickEventDetail = {
|
|
|
27
27
|
*/
|
|
28
28
|
@customElement({
|
|
29
29
|
tag: "udex-tile",
|
|
30
|
-
renderer:
|
|
30
|
+
renderer: jsxRenderer,
|
|
31
31
|
styles: TileCss,
|
|
32
32
|
template: TileTemplate,
|
|
33
33
|
})
|
|
@@ -128,7 +128,7 @@ class UDExTile extends UI5Element {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
_onclick(e:
|
|
131
|
+
_onclick(e: MouseEvent) {
|
|
132
132
|
e.stopImmediatePropagation();
|
|
133
133
|
|
|
134
134
|
if (this.interactive) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type Tile from "./Tile.js";
|
|
2
|
+
|
|
3
|
+
export default function TileTemplate(this: Tile) {
|
|
4
|
+
const rootClass = "udex-tile";
|
|
5
|
+
const part = "tile";
|
|
6
|
+
return (
|
|
7
|
+
this.interactive ? (
|
|
8
|
+
<>
|
|
9
|
+
<span className="hidden" id="tileDescription">{this.accessibleName}</span>
|
|
10
|
+
<a
|
|
11
|
+
className={rootClass}
|
|
12
|
+
part={part}
|
|
13
|
+
href={this.href}
|
|
14
|
+
target={this.target}
|
|
15
|
+
role="link"
|
|
16
|
+
aria-describedby="tileDescription"
|
|
17
|
+
onKeyDown={this._onkeydown}
|
|
18
|
+
onClick={this._onclick}>
|
|
19
|
+
<slot></slot>
|
|
20
|
+
</a>
|
|
21
|
+
</>
|
|
22
|
+
) : (
|
|
23
|
+
<div
|
|
24
|
+
className={rootClass}
|
|
25
|
+
part={part}
|
|
26
|
+
onClick={this._onclick}>
|
|
27
|
+
<slot></slot>
|
|
28
|
+
</div>
|
|
29
|
+
)
|
|
30
|
+
);
|
|
31
|
+
}
|