@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.
Files changed (96) hide show
  1. package/bundle.esm.js +2 -0
  2. package/cypress/specs/EventRibbon.cy.tsx +25 -6
  3. package/cypress/specs/LinkList.cy.tsx +49 -0
  4. package/cypress/specs/LinkListItem.cy.tsx +102 -0
  5. package/cypress/support/component-imports.instrumented.ts +4 -0
  6. package/cypress/support/component-imports.src.ts +4 -0
  7. package/dist/EventRibbon.d.ts +15 -1
  8. package/dist/EventRibbon.js +11 -3
  9. package/dist/EventRibbon.js.map +1 -1
  10. package/dist/EventRibbonTemplate.js +5 -1
  11. package/dist/EventRibbonTemplate.js.map +1 -1
  12. package/dist/LinkList.d.ts +58 -0
  13. package/dist/LinkList.js +89 -0
  14. package/dist/LinkList.js.map +1 -0
  15. package/dist/LinkListItem.d.ts +78 -0
  16. package/dist/LinkListItem.js +97 -0
  17. package/dist/LinkListItem.js.map +1 -0
  18. package/dist/LinkListItemTemplate.d.ts +2 -0
  19. package/dist/LinkListItemTemplate.js +17 -0
  20. package/dist/LinkListItemTemplate.js.map +1 -0
  21. package/dist/LinkListTemplate.d.ts +2 -0
  22. package/dist/LinkListTemplate.js +5 -0
  23. package/dist/LinkListTemplate.js.map +1 -0
  24. package/dist/Tile.d.ts +2 -2
  25. package/dist/Tile.js +3 -3
  26. package/dist/Tile.js.map +1 -1
  27. package/dist/TileTemplate.d.ts +2 -0
  28. package/dist/TileTemplate.js +7 -0
  29. package/dist/TileTemplate.js.map +1 -0
  30. package/dist/assets/{InputSuggestions-D0OZo5eY.js → InputSuggestions-BmjyLzkP.js} +1 -1
  31. package/dist/assets/{ListItemStandardExpandableTextTemplate-BOc_KoW1.js → ListItemStandardExpandableTextTemplate-CDt3iORy.js} +1 -1
  32. package/dist/assets/{bundle.esm-BLn1Dq6A.js → bundle.esm-Dz11sAJe.js} +205 -203
  33. package/dist/css/themes/EventRibbon.css +1 -1
  34. package/dist/css/themes/LinkList.css +1 -0
  35. package/dist/css/themes/LinkListItem.css +1 -0
  36. package/dist/css/themes/ListGroupHeader.css +1 -1
  37. package/dist/css/themes/ListItem.css +1 -1
  38. package/dist/css/themes/ProgressBar.css +1 -1
  39. package/dist/css/themes/RatingIndicator.css +1 -1
  40. package/dist/css/themes/Slider.css +1 -1
  41. package/dist/custom-elements-internal.json +345 -2
  42. package/dist/custom-elements.json +327 -2
  43. package/dist/generated/themes/EventRibbon.css.d.ts +1 -1
  44. package/dist/generated/themes/EventRibbon.css.js +1 -1
  45. package/dist/generated/themes/EventRibbon.css.js.map +1 -1
  46. package/dist/generated/themes/LinkList.css.d.ts +2 -0
  47. package/dist/generated/themes/LinkList.css.js +8 -0
  48. package/dist/generated/themes/LinkList.css.js.map +1 -0
  49. package/dist/generated/themes/LinkListItem.css.d.ts +2 -0
  50. package/dist/generated/themes/LinkListItem.css.js +8 -0
  51. package/dist/generated/themes/LinkListItem.css.js.map +1 -0
  52. package/dist/generated/themes/ListGroupHeader.css.d.ts +1 -1
  53. package/dist/generated/themes/ListGroupHeader.css.js +1 -1
  54. package/dist/generated/themes/ListGroupHeader.css.js.map +1 -1
  55. package/dist/generated/themes/ListItem.css.d.ts +1 -1
  56. package/dist/generated/themes/ListItem.css.js +1 -1
  57. package/dist/generated/themes/ListItem.css.js.map +1 -1
  58. package/dist/generated/themes/ProgressBar.css.d.ts +1 -1
  59. package/dist/generated/themes/ProgressBar.css.js +1 -1
  60. package/dist/generated/themes/ProgressBar.css.js.map +1 -1
  61. package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
  62. package/dist/generated/themes/RatingIndicator.css.js +1 -1
  63. package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
  64. package/dist/generated/themes/Slider.css.d.ts +1 -1
  65. package/dist/generated/themes/Slider.css.js +1 -1
  66. package/dist/generated/themes/Slider.css.js.map +1 -1
  67. package/dist/vscode.html-custom-data.json +83 -1
  68. package/dist/web-types.json +163 -3
  69. package/package.json +1 -1
  70. package/src/EventRibbon.ts +24 -5
  71. package/src/EventRibbonTemplate.tsx +17 -6
  72. package/src/LinkList.ts +93 -0
  73. package/src/LinkListItem.ts +126 -0
  74. package/src/LinkListItemTemplate.tsx +52 -0
  75. package/src/LinkListTemplate.tsx +13 -0
  76. package/src/Tile.ts +5 -5
  77. package/src/TileTemplate.tsx +31 -0
  78. package/src/generated/themes/EventRibbon.css.ts +1 -1
  79. package/src/generated/themes/LinkList.css.ts +9 -0
  80. package/src/generated/themes/LinkListItem.css.ts +9 -0
  81. package/src/generated/themes/ListGroupHeader.css.ts +1 -1
  82. package/src/generated/themes/ListItem.css.ts +1 -1
  83. package/src/generated/themes/ProgressBar.css.ts +1 -1
  84. package/src/generated/themes/RatingIndicator.css.ts +1 -1
  85. package/src/generated/themes/Slider.css.ts +1 -1
  86. package/src/themes/EventRibbon.css +34 -28
  87. package/src/themes/LinkList.css +53 -0
  88. package/src/themes/LinkListItem.css +84 -0
  89. package/src/themes/ListGroupHeader.css +1 -1
  90. package/src/themes/ListItem.css +2 -2
  91. package/src/themes/ProgressBar.css +2 -1
  92. package/dist/generated/templates/TileTemplate.lit.d.ts +0 -3
  93. package/dist/generated/templates/TileTemplate.lit.js +0 -9
  94. package/dist/generated/templates/TileTemplate.lit.js.map +0 -1
  95. package/src/Tile.hbs +0 -21
  96. package/src/generated/templates/TileTemplate.lit.ts +0 -13
@@ -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.7.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 text of the event logo.",
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 text of the event logo.",
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@sapudex/web-components",
4
- "version": "2.7.2",
4
+ "version": "2.9.0",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
7
7
  },
@@ -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 text of the event logo.
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
- this.style.setProperty("--udex-event-ribbon-background-image", `url("${this.backgroundImage}")`);
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 onKeyDown={this.handleKeyDown} role="banner" aria-label={this.eventText} class= {{ "udex-event-ribbon__container": true, "udex-event-ribbon__container-with-background-image": this.backgroundImage }} target={target} href={url} title={text}>
8
- <div class="udex-event-ribbon__logo">
9
- <img src={this.eventLogoPath} alt={this.eventLogoAlt}/>
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="udex-event-ribbon__text">{this.eventText}</p>}
12
- <div class="udex-event-ribbon__link-container">
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
  );
@@ -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 litRender from "@ui5/webcomponents-base/dist/renderer/LitRenderer.js";
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 "./generated/templates/TileTemplate.lit.js";
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: PointerEvent,
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: litRender,
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: PointerEvent) {
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
+ }